libfaim/aim_ft.c

changeset 1002
0c559888b1fb
parent 960
c4012584334f
child 1186
17204492d19d
--- a/libfaim/aim_ft.c	Mon Oct 16 20:14:18 2000 +0000
+++ b/libfaim/aim_ft.c	Wed Oct 18 02:38:18 2000 +0000
@@ -847,53 +847,61 @@
  
     faimdprintf(2, "faim: rend: read error (fd: %i) %02x%02x%02x%02x%02x%02x (%i)\n", conn->fd, hdrbuf1[0],hdrbuf1[1],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrlen);
     faim_mutex_unlock(&conn->active);
-    aim_conn_close(conn);
     
     if(hdrlen < 0)
       perror("read");
     else { /* disconnected */
-      int i = -1;
       switch(conn->subtype) {
       case AIM_CONN_SUBTYPE_OFT_DIRECTIM: { /* XXX: clean up cookies here ? */
-	struct aim_directim_priv *priv;
-	if(!(priv = (struct aim_directim_priv *)conn->priv) )
+	struct aim_directim_priv *priv = NULL;
+	if(!(priv = (struct aim_directim_priv *)conn->priv) ) 
 	  return -1; /* not much we can do */
+	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTIM);
 
-	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT)) )
-	  i = userfunc(sess, NULL, conn, priv->sn);
-	else
-	  aim_conn_kill(sess, &conn);
+	
+	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT)) ) {
+	  aim_conn_close(conn);
+	  return  userfunc(sess, NULL, conn, priv->sn);
+	}
 
-	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTIM);
+	break;
       }
+
       case AIM_CONN_SUBTYPE_OFT_GETFILE: {
 	struct aim_filetransfer_priv *priv;
 	if(!(priv = (struct aim_filetransfer_priv *)conn->priv))
 	  return -1;
 
-	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEDISCONNECT)) )
-	  i = userfunc(sess, NULL, conn, priv->sn);
-	else
-	  aim_conn_kill(sess, &conn);
+	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTGET);
 
-	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTGET);
+	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEDISCONNECT)) ) {
+	  aim_conn_close(conn);
+	  return userfunc(sess, NULL, conn, priv->sn);
+	}
+
+	break;
       }
+
       case AIM_CONN_SUBTYPE_OFT_SENDFILE: {
 	struct aim_filetransfer_priv *priv;
 	if(!(priv = (struct aim_filetransfer_priv *)conn->priv))
 	  return -1;
 
-	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_SENDFILEDISCONNECT)) )
-	  i = userfunc(sess, NULL, conn, priv->sn);
-	else
-	  aim_conn_kill(sess, &conn);
+	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTSEND);
 
+	if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_SENDFILEDISCONNECT)) ) {
+	  aim_conn_close(conn);
+	  return userfunc(sess, NULL, conn, priv->sn);
+	}
 
-	aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTSEND);
+	break;
       }
       }
 
-    return i;
+      aim_conn_close(conn);
+      aim_conn_kill(sess, &conn);
+      
+      return -1;
     }
   }
 

mercurial