Handle close event in SSL layer watch.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 3 Jul 2009 17:28:32 +0000 (14:28 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Fri, 3 Jul 2009 18:37:33 +0000 (15:37 -0300)
hcconn_ssl.c

index 5956acc..d4fa465 100644 (file)
@@ -158,18 +158,23 @@ hc_conn_ssl_watch (HCConn *conn, HCEvent event, gpointer data)
   HCConn *ssl_conn = data;
   struct ssl_data *ssl = ssl_conn->layer;
   int r;
-  if (event != HC_EVENT_READ)
-    return;
-  if (ssl->handshaking)
+  switch (event)
     {
-      ssl_server_handshake (ssl);
-      return;
+    case HC_EVENT_READ:
+      if (ssl->handshaking)
+        {
+          ssl_server_handshake (ssl);
+          return;
+        }
+      while ((r = hc_conn_read (ssl->lowconn, buffer, sizeof (buffer))) > 0)
+        g_string_append_len (ssl->buffer, buffer, r);
+      if (ssl_conn->func && !ssl->handshaking)
+        ssl_conn->func (ssl_conn, event, ssl_conn->data);
+      break;
+    case HC_EVENT_CLOSE:
+      if (ssl_conn->func)
+        ssl_conn->func (ssl_conn, event, ssl_conn->data);
     }
-  while ((r = hc_conn_read (ssl->lowconn, buffer, sizeof (buffer))) > 0)
-    g_string_append_len (ssl->buffer, buffer, r);
-  if (ssl_conn->func && !ssl->handshaking)
-    ssl_conn->func (ssl_conn, event, ssl_conn->data);
-  return;
 }
 
 void