X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/78b3fb1309a7d926cb58b8322923feedd1ba47ef..d6c9fcf0b85e7c3948d5e58a55692772d08981ae:/aim_im.c diff --git a/aim_im.c b/aim_im.c index ed2e021..9d0cbd9 100644 --- a/aim_im.c +++ b/aim_im.c @@ -47,7 +47,7 @@ faim_export unsigned long aim_send_im(struct aim_session_t *sess, * */ for (i=0;i<8;i++) - curbyte += aimutil_put8(newpacket->data+curbyte, (u_char) random()); + curbyte += aimutil_put8(newpacket->data+curbyte, (u_char) rand()); /* * Channel ID @@ -118,25 +118,10 @@ faim_export unsigned long aim_send_im(struct aim_session_t *sess, aim_tx_enqueue(sess, newpacket); -#ifdef USE_SNAC_FOR_IMS - { - struct aim_snac_t snac; + aim_cachesnac(sess, 0x0004, 0x0006, 0x0000, destsn, strlen(destsn)+1); + aim_cleansnacs(sess, 60); /* clean out all SNACs over 60sec old */ - snac.id = sess->snac_nextid; - snac.family = 0x0004; - snac.type = 0x0006; - snac.flags = 0x0000; - - snac.data = malloc(strlen(destsn)+1); - memcpy(snac.data, destsn, strlen(destsn)+1); - - aim_newsnac(sess, &snac); - } - - aim_cleansnacs(sess, 60); /* clean out all SNACs over 60sec old */ -#endif - - return (sess->snac_nextid++); + return sess->snac_nextid; } faim_internal int aim_parse_outgoing_im_middle(struct aim_session_t *sess, @@ -397,7 +382,6 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, { struct aim_tlv_t *block1; struct aim_tlvlist_t *list2; - struct aim_tlv_t *tmptlv; unsigned short reqclass = 0; unsigned short status = 0; @@ -468,14 +452,13 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, struct aim_filetransfer_priv *ft; if (cook->data) { - struct aim_tlv_t *errortlv; - int errorcode = -1; + int errorcode = -1; /* XXX shouldnt this be 0? */ ft = (struct aim_filetransfer_priv *)cook->data; - if ((errortlv = aim_gettlv(list2, 0x000b, 1))) { - errorcode = aimutil_get16(errortlv->value); - } + if (aim_gettlv(list2, 0x000b, 1)) + errorcode = aim_gettlv16(list2, 0x000b, 1); + if (errorcode) { printf("faim: transfer from %s (%s) for %s cancelled (error code %d)\n", ft->sn, ft->ip, ft->fh.name, errorcode); } else if (status == 0x0002) { /* connection accepted */ @@ -506,13 +489,17 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, /* * Call client. */ +#if 0 userfunc = aim_callhandler(command->conn, 0x0004, 0x0007); if (userfunc || (i = 0)) i = userfunc(sess, command, channel, reqclass, - &userinfo); + &userinfo, + ip, + cookie); +#endif } else if (reqclass & AIM_CAPS_VOICE) { struct aim_msgcookie_t *cachedcook; @@ -542,7 +529,7 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, char ip[30]; struct aim_directim_priv *priv; - memset(ip, 0, sizeof(ip)); + memset(ip, 0, 30); if (aim_gettlv(list2, 0x0003, 1) && aim_gettlv(list2, 0x0005, 1)) { struct aim_tlv_t *iptlv, *porttlv; @@ -550,7 +537,7 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, iptlv = aim_gettlv(list2, 0x0003, 1); porttlv = aim_gettlv(list2, 0x0005, 1); - snprintf(ip, sizeof(ip)-1, "%d.%d.%d.%d:%d", + snprintf(ip, 30, "%d.%d.%d.%d:%d", aimutil_get8(iptlv->value+0), aimutil_get8(iptlv->value+1), aimutil_get8(iptlv->value+2), @@ -618,16 +605,13 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, free(lang); } else if (reqclass & AIM_CAPS_GETFILE) { char ip[30]; - char *desc = NULL; struct aim_msgcookie_t *cachedcook; - struct aim_filetransfer_priv *ft; struct aim_tlv_t *miscinfo; - struct aim_conn_t *newconn; if (!(cachedcook = calloc(1, sizeof(struct aim_msgcookie_t)))) return 0; - memset(ip, 0, sizeof(ip)); + memset(ip, 0, 30); if (!(miscinfo = aim_gettlv(list2, 0x2711, 1))) { free(cachedcook); @@ -642,7 +626,7 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, return 0; } - snprintf(ip, sizeof(ip)-1, "%d.%d.%d.%d:%d", + snprintf(ip, 30, "%d.%d.%d.%d:%d", aimutil_get8(iptlv->value+0), aimutil_get8(iptlv->value+1), aimutil_get8(iptlv->value+2), @@ -652,40 +636,6 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, printf("faim: rend: file get request from %s (%s)\n", userinfo.sn, ip); -#if 0 /* XXX finish this */ - newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, ip); - if (!newconn || (newconn->fd == -1)) { - printf("could not connect to %s\n", ip); - perror("aim_newconn"); - aim_conn_kill(sess, &newconn); - } else { - struct aim_filetransfer_priv *priv; - priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)); - memcpy(priv->cookie, cookie, 8); - strncpy(priv->sn, userinfo.sn, MAXSNLEN); - newconn->priv = priv; - printf("faim: connected to peer (fd = %d)\n", newconn->fd); - } - - memcpy(cachedcook->cookie, cookie, 8); - - ft = malloc(sizeof(struct aim_filetransfer_priv)); - ft->state = 1; - strncpy(ft->sn, userinfo.sn, sizeof(ft->sn)); - strncpy(ft->ip, ip, sizeof(ft->ip)); -#if 0 - strncpy(ft->fh.name, miscinfo->value+8, sizeof(ft->fh.name)); -#endif - cachedcook->type = AIM_COOKIETYPE_OFTGET; - cachedcook->data = ft; - - if (aim_cachecookie(sess, cachedcook) != 0) - printf("faim: ERROR caching message cookie\n"); - - aim_accepttransfer(sess, command->conn, newconn, ft->sn, cookie, AIM_CAPS_GETFILE); - - free(desc); -#endif /* * Call client. */ @@ -695,7 +645,9 @@ faim_internal int aim_parse_incoming_im_middle(struct aim_session_t *sess, command, channel, reqclass, - &userinfo); + &userinfo, + ip, + cookie); } else if (reqclass & AIM_CAPS_SENDFILE) { #if 0