]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sckipc.cpp
fix building with WXWIN_COMPATIBILITY_2_8 == 0
[wxWidgets.git] / src / common / sckipc.cpp
index 2e860b6d79a957a00c822d3ccd3e5d97b991f5ff..ea1de8eb8ee3b92892b9c8c574d2dba865f61c17 100644 (file)
@@ -8,7 +8,6 @@
 //              Vadim Zeitlin (added support for Unix sockets) Apr 2002
 //                            (use buffering, many fixes/cleanup) Oct 2008
 // Created:     1993
-// RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart 1993
 //              (c) Guilhem Lavaux 1997, 1998
 //              (c) 2000 Guillermo Rodriguez <guille@iies.es>
@@ -92,7 +91,7 @@ GetAddressFromName(const wxString& serverName,
 #if defined(__UNIX__) && !defined(__WINDOWS__) && !defined(__WINE__)
     // under Unix, if the server name looks like a path, create a AF_UNIX
     // socket instead of AF_INET one
-    if ( serverName.Find(_T('/')) != wxNOT_FOUND )
+    if ( serverName.Find(wxT('/')) != wxNOT_FOUND )
     {
         wxUNIXaddress *addr = new wxUNIXaddress;
         addr->Filename(serverName);
@@ -125,8 +124,10 @@ public:
     void Server_OnRequest(wxSocketEvent& event);
 
 private:
+    void HandleDisconnect(wxTCPConnection *connection);
+
     DECLARE_EVENT_TABLE()
-    DECLARE_NO_COPY_CLASS(wxTCPEventHandler)
+    wxDECLARE_NO_COPY_CLASS(wxTCPEventHandler);
 };
 
 enum
@@ -161,7 +162,7 @@ private:
     static wxTCPEventHandler *ms_handler;
 
     DECLARE_DYNAMIC_CLASS(wxTCPEventHandlerModule)
-    DECLARE_NO_COPY_CLASS(wxTCPEventHandlerModule)
+    wxDECLARE_NO_COPY_CLASS(wxTCPEventHandlerModule);
 };
 
 IMPLEMENT_DYNAMIC_CLASS(wxTCPEventHandlerModule, wxModule)
@@ -184,11 +185,11 @@ public:
     // ctor initializes all the streams on top of the given socket
     //
     // note that we use a bigger than default buffer size which matches the
-    // typical Ethernet MTU
+    // typical Ethernet MTU (minus TCP header overhead)
     wxIPCSocketStreams(wxSocketBase& sock)
         : m_socketStream(sock),
 #ifdef USE_BUFFER
-          m_bufferedOut(m_socketStream, 1488),
+          m_bufferedOut(m_socketStream, 1448),
 #else
           m_bufferedOut(m_socketStream),
 #endif
@@ -282,7 +283,7 @@ private:
     wxDataInputStream  m_dataIn;
     wxDataOutputStream m_dataOut;
 
-    DECLARE_NO_COPY_CLASS(wxIPCSocketStreams)
+    wxDECLARE_NO_COPY_CLASS(wxIPCSocketStreams);
 };
 
 namespace
@@ -339,7 +340,7 @@ public:
 private:
     wxIPCSocketStreams& m_streams;
 
-    DECLARE_NO_COPY_CLASS(IPCOutput)
+    wxDECLARE_NO_COPY_CLASS(IPCOutput);
 };
 
 } // anonymous namespace
@@ -397,7 +398,7 @@ wxConnectionBase *wxTCPClient::MakeConnection(const wxString& host,
 
             if (connection)
             {
-                if (connection->IsKindOf(CLASSINFO(wxTCPConnection)))
+                if (wxDynamicCast(connection, wxTCPConnection))
                 {
                     connection->m_topic = topic;
                     connection->m_sock  = client;
@@ -496,7 +497,7 @@ bool wxTCPServer::Create(const wxString& serverName)
 
     delete addr;
 
-    if (!m_server->Ok())
+    if (!m_server->IsOk())
     {
         m_server->Destroy();
         m_server = NULL;
@@ -526,7 +527,7 @@ wxTCPServer::~wxTCPServer()
     {
         if ( remove(m_filename.fn_str()) != 0 )
         {
-            wxLogDebug(_T("Stale AF_UNIX file '%s' left."), m_filename.c_str());
+            wxLogDebug(wxT("Stale AF_UNIX file '%s' left."), m_filename.c_str());
         }
     }
 #endif // __UNIX_LIKE__
@@ -687,25 +688,38 @@ BEGIN_EVENT_TABLE(wxTCPEventHandler, wxEvtHandler)
     EVT_SOCKET(_SERVER_ONREQUEST_ID, wxTCPEventHandler::Server_OnRequest)
 END_EVENT_TABLE()
 
+void wxTCPEventHandler::HandleDisconnect(wxTCPConnection *connection)
+{
+    // connection was closed (either gracefully or not): destroy everything
+    connection->m_sock->Notify(false);
+    connection->m_sock->Close();
+
+    // don't leave references to this soon-to-be-dangling connection in the
+    // socket as it won't be destroyed immediately as its destruction will be
+    // delayed in case there are more events pending for it
+    connection->m_sock->SetClientData(NULL);
+
+    connection->SetConnected(false);
+    connection->OnDisconnect();
+}
+
 void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
 {
     wxSocketBase *sock = event.GetSocket();
     if (!sock)
-        return ;
+        return;
 
     wxSocketNotify evt = event.GetSocketEvent();
-    wxTCPConnection *connection = (wxTCPConnection *)(sock->GetClientData());
+    wxTCPConnection * const
+        connection = static_cast<wxTCPConnection *>(sock->GetClientData());
 
     // This socket is being deleted; skip this event
     if (!connection)
         return;
 
-    // We lost the connection: destroy everything
-    if (evt == wxSOCKET_LOST)
+    if ( evt == wxSOCKET_LOST )
     {
-        sock->Notify(false);
-        sock->Close();
-        connection->OnDisconnect();
+        HandleDisconnect(connection);
         return;
     }
 
@@ -826,10 +840,7 @@ void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
             break;
 
         case IPC_DISCONNECT:
-            sock->Notify(false);
-            sock->Close();
-            connection->SetConnected(false);
-            connection->OnDisconnect();
+            HandleDisconnect(connection);
             break;
 
         case IPC_FAIL:
@@ -851,7 +862,7 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
 {
     wxSocketServer *server = (wxSocketServer *) event.GetSocket();
     if (!server)
-        return ;
+        return;
     wxTCPServer *ipcserv = (wxTCPServer *) server->GetClientData();
 
     // This socket is being deleted; skip this event
@@ -864,8 +875,8 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
     // Accept the connection, getting a new socket
     wxSocketBase *sock = server->Accept();
     if (!sock)
-        return ;
-    if (!sock->Ok())
+        return;
+    if (!sock->IsOk())
     {
         sock->Destroy();
         return;
@@ -886,7 +897,7 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
 
             if (new_connection)
             {
-                if (new_connection->IsKindOf(CLASSINFO(wxTCPConnection)))
+                if (wxDynamicCast(new_connection, wxTCPConnection))
                 {
                     // Acknowledge success
                     out.Write8(IPC_CONNECT);