SILC Runtime Toolkit 1.2 Beta 1
[runtime.git] / lib / silcutil / symbian / silcsymbiansocketstream.cpp
index ee7d23ddb71ede7097cbaf8b19f157dad598c0af..343076c5251aa03992d9e8267a649d21177eba4e 100644 (file)
@@ -5,7 +5,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 2006 - 2007 Pekka Riikonen
+  Copyright (C) 2006 - 2008 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@
    socket, which is done automatically by the Active Scheduler in blocking
    mode. */
 
-#include "silc.h"
+#include "silcruntime.h"
 #include "silcsymbiansocketstream.h"
 
 /***************************** Socket Classes *******************************/
@@ -51,7 +51,8 @@ public:
   {
     SILC_LOG_DEBUG(("Send()"));
     s->sock->Send(buf, 0, iStatus, ret_len);
-    SetActive();
+    if (!IsActive())
+      SetActive();
   }
 
   /* Send data */
@@ -67,7 +68,8 @@ public:
     tmp = (TText *)remote_ip;
     if (remote.Input(tmp) == KErrNone) {
       s->sock->SendTo(buf, remote, 0, iStatus, ret_len);
-      SetActive();
+      if (!IsActive())
+        SetActive();
     }
   }
 
@@ -123,12 +125,13 @@ public:
   {
     SILC_LOG_DEBUG(("Read()"));
 
-    if (!s->stream || s->stream->connected)
+    if (s->stream && s->stream->connected)
       s->sock->RecvOneOrMore(inbuf, 0, iStatus, read_len);
     else
       s->sock->RecvFrom(inbuf, remote, 0, iStatus);
 
-    SetActive();
+    if (!IsActive())
+      SetActive();
   }
 
   /* Reading callback */
@@ -202,6 +205,7 @@ SilcSymbianSocket *silc_create_symbian_socket(RSocket *sock,
     silc_free(stream);
     return NULL;
   }
+  stream->send->s = stream;
 
   stream->receive = new SilcSymbianSocketReceive;
   if (!stream->receive) {
@@ -209,6 +213,7 @@ SilcSymbianSocket *silc_create_symbian_socket(RSocket *sock,
     silc_free(stream);
     return NULL;
   }
+  stream->receive->s = stream;
   stream->receive->inbuf_ptr = NULL;
   stream->receive->inbuf_len = 0;