sync with 0.9.3cvs15
[claws.git] / src / common / session.c
index 748919518d81f6c2de5f278a088c07205b72066f..6c341568a801cbceef256d436b0ecd5f426355c1 100644 (file)
@@ -147,7 +147,7 @@ static gint session_connect_cb(SockInfo *sock, gpointer data)
 
        sock_set_nonblocking_mode(sock, session->nonblocking);
 
-       debug_print("session: connected\n");
+       debug_print("session (%p): connected\n", session);
 
        session->state = SESSION_RECV;
        session->io_tag = sock_add_watch(session->sock, G_IO_IN,
@@ -180,8 +180,6 @@ void session_destroy(Session *session)
        g_return_if_fail(session != NULL);
        g_return_if_fail(session->destroy != NULL);
 
-       debug_print("session: session_destroy()\n");
-
        session_close(session);
        session->destroy(session);
        g_free(session->server);
@@ -189,9 +187,19 @@ void session_destroy(Session *session)
        g_byte_array_free(session->read_data_buf, TRUE);
        g_free(session->read_data_terminator);
        g_free(session->write_buf);
+
+       debug_print("session (%p): destroyed\n", session);
+
        g_free(session);
 }
 
+gboolean session_is_connected(Session *session)
+{
+       return (session->state == SESSION_READY ||
+               session->state == SESSION_SEND ||
+               session->state == SESSION_RECV);
+}
+
 void session_set_recv_message_notify(Session *session,
                                     RecvMsgNotify notify_func, gpointer data)
 {
@@ -242,8 +250,6 @@ static gint session_close(Session *session)
 {
        g_return_val_if_fail(session != NULL, -1);
 
-       debug_print("session_close\n");
-
        if (session->conn_id > 0) {
                sock_connect_async_cancel(session->conn_id);
                session->conn_id = 0;
@@ -260,6 +266,8 @@ static gint session_close(Session *session)
                session->state = SESSION_DISCONNECTED;
        }
 
+       debug_print("session (%p): closed\n", session);
+
        return 0;
 }
 
@@ -429,6 +437,12 @@ static gboolean session_read_msg_cb(SockInfo *source, GIOCondition condition,
                read_len = sock_read(session->sock, session->read_buf,
                                     SESSION_BUFFSIZE - 1);
 
+               if (read_len == 0) {
+                       g_warning("sock_read: received EOF\n");
+                       session->state = SESSION_EOF;
+                       return FALSE;
+               }
+
                if (read_len < 0) {
                        switch (errno) {
                        case EAGAIN:
@@ -507,6 +521,12 @@ static gboolean session_read_data_cb(SockInfo *source, GIOCondition condition,
                read_len = sock_read(session->sock, session->read_buf,
                                     SESSION_BUFFSIZE);
 
+               if (read_len == 0) {
+                       g_warning("sock_read: received EOF\n");
+                       session->state = SESSION_EOF;
+                       return FALSE;
+               }
+
                if (read_len < 0) {
                        switch (errno) {
                        case EAGAIN: