--- 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; } }