]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sckipc.cpp
Added wxVariantData::Clone and wxVariant::Unshare
[wxWidgets.git] / src / common / sckipc.cpp
index f2b33bb2e2ad3b8898bac698d0011e3508adb379..350b824257a15661a6c035c581d1b310ada7bd0d 100644 (file)
@@ -356,15 +356,17 @@ wxTCPConnection::wxTCPConnection(wxChar *buffer, int size)
 wxTCPConnection::~wxTCPConnection ()
 {
   Disconnect();
-  wxDELETE(m_codeci);
-  wxDELETE(m_codeco);
-  wxDELETE(m_sockstrm);
 
   if (m_sock)
   {
     m_sock->SetClientData(NULL);
     m_sock->Destroy();
   }
+
+  /* Delete after destroy */
+  wxDELETE(m_codeci);
+  wxDELETE(m_codeco);
+  wxDELETE(m_sockstrm);
 }
 
 void wxTCPConnection::Compress(bool WXUNUSED(on))
@@ -379,8 +381,13 @@ bool wxTCPConnection::Disconnect ()
       return true;
   // Send the the disconnect message to the peer.
   m_codeco->Write8(IPC_DISCONNECT);
-  m_sock->Notify(false);
-  m_sock->Close();
+
+  if ( m_sock )
+  {
+      m_sock->Notify(false);
+      m_sock->Close();
+  }
+
   SetConnected(false);
 
   return true;
@@ -424,6 +431,7 @@ wxChar *wxTCPConnection::Request (const wxString& item, int *size, wxIPCFormat f
     size_t s;
 
     s = m_codeci->Read32();
+
     wxChar *data = GetBufferAtLeast( s );
     wxASSERT_MSG(data != NULL,
                  _T("Buffer too small in wxTCPConnection::Request") );
@@ -435,7 +443,7 @@ wxChar *wxTCPConnection::Request (const wxString& item, int *size, wxIPCFormat f
   }
 }
 
-bool wxTCPConnection::Poke (const wxString& item, wxChar *data, int size, wxIPCFormat format)
+bool wxTCPConnection::Poke (const wxString& item, const wxChar *data, int size, wxIPCFormat format)
 {
   if (!m_sock->IsConnected())
     return false;
@@ -491,7 +499,7 @@ bool wxTCPConnection::StopAdvise (const wxString& item)
 
 // Calls that SERVER can make
 bool wxTCPConnection::Advise (const wxString& item,
-                              wxChar *data, int size, wxIPCFormat format)
+                              const wxChar *data, int size, wxIPCFormat format)
 {
   if (!m_sock->IsConnected())
     return false;
@@ -521,6 +529,9 @@ END_EVENT_TABLE()
 void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
 {
   wxSocketBase *sock = event.GetSocket();
+  if (!sock) {         /* No socket, no glory */
+    return ;
+  }
   wxSocketNotify evt = event.GetSocketEvent();
   wxTCPConnection *connection = (wxTCPConnection *)(sock->GetClientData());
 
@@ -559,6 +570,7 @@ void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
 
     format = (wxIPCFormat)codeci->Read8();
     size = codeci->Read32();
+    
     data = connection->GetBufferAtLeast( size );
     wxASSERT_MSG(data != NULL,
                  _T("Buffer too small in wxTCPEventHandler::Client_OnRequest") );
@@ -636,7 +648,7 @@ void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
     format = (wxIPCFormat)codeci->Read8();
 
     int user_size = -1;
-    wxChar *user_data = connection->OnRequest (topic_name, item, &user_size, format);
+    const wxChar *user_data = connection->OnRequest (topic_name, item, &user_size, format);
 
     if (user_data)
     {
@@ -670,6 +682,9 @@ void wxTCPEventHandler::Client_OnRequest(wxSocketEvent &event)
 void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
 {
   wxSocketServer *server = (wxSocketServer *) event.GetSocket();
+  if (!server) {               /* No server, Then exit */
+         return ;
+  }
   wxTCPServer *ipcserv = (wxTCPServer *) server->GetClientData();
 
   // This socket is being deleted; skip this event
@@ -681,6 +696,9 @@ void wxTCPEventHandler::Server_OnRequest(wxSocketEvent &event)
 
   // Accept the connection, getting a new socket
   wxSocketBase *sock = server->Accept();
+  if (!sock) {         /* No socket, no glory */
+         return ;
+  }
   if (!sock->Ok())
   {
     sock->Destroy();