X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/26af6789798f083551cbc309801819a34e38cda0..91c55d4735e6774eaa2616fb2e83150fabaf3899:/aim_misc.c diff --git a/aim_misc.c b/aim_misc.c index b882c80..420165f 100644 --- a/aim_misc.c +++ b/aim_misc.c @@ -61,7 +61,8 @@ u_long aim_bos_changevisibility(struct aim_session_t *sess, struct aim_conn_t *conn, int changetype, char *denylist) { - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; + int packlen = 0; u_short subtype; char *localcpy = NULL; @@ -72,24 +73,16 @@ u_long aim_bos_changevisibility(struct aim_session_t *sess, if (!denylist) return 0; - newpacket.lock = 1; - - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - - newpacket.type = 0x02; - localcpy = (char *) malloc(strlen(denylist)+1); memcpy(localcpy, denylist, strlen(denylist)+1); listcount = aimutil_itemcnt(localcpy, '&'); - newpacket.commandlen = aimutil_tokslen(localcpy, 99, '&') + listcount + 9; + packlen = aimutil_tokslen(localcpy, 99, '&') + listcount + 9; + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, packlen))) + return -1; - newpacket.data = (char *) malloc(newpacket.commandlen); - memset(newpacket.data, 0x00, newpacket.commandlen); + newpacket->lock = 1; switch(changetype) { @@ -98,12 +91,13 @@ u_long aim_bos_changevisibility(struct aim_session_t *sess, case AIM_VISIBILITYCHANGE_DENYADD: subtype = 0x07; break; case AIM_VISIBILITYCHANGE_DENYREMOVE: subtype = 0x08; break; default: - free(newpacket.data); + free(newpacket->data); + free(newpacket); return 0; } /* We actually DO NOT send a SNAC ID with this one! */ - aim_putsnac(newpacket.data, 0x0009, subtype, 0x00, 0); + aim_putsnac(newpacket->data, 0x0009, subtype, 0x00, 0); j = 10; /* the next byte */ @@ -111,16 +105,16 @@ u_long aim_bos_changevisibility(struct aim_session_t *sess, { tmpptr = aimutil_itemidx(localcpy, i, '&'); - newpacket.data[j] = strlen(tmpptr); - memcpy(&(newpacket.data[j+1]), tmpptr, strlen(tmpptr)); + newpacket->data[j] = strlen(tmpptr); + memcpy(&(newpacket->data[j+1]), tmpptr, strlen(tmpptr)); j += strlen(tmpptr)+1; free(tmpptr); } free(localcpy); - newpacket.lock = 0; + newpacket->lock = 0; - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid); /* dont increment */ @@ -135,7 +129,9 @@ u_long aim_bos_changevisibility(struct aim_session_t *sess, * * buddy_list = "Screen Name One&ScreenNameTwo&"; * - * TODO: Clean this up. + * TODO: Clean this up. + * + * XXX: I can't stress the TODO enough. * */ u_long aim_bos_setbuddylist(struct aim_session_t *sess, @@ -144,7 +140,7 @@ u_long aim_bos_setbuddylist(struct aim_session_t *sess, { int i, j; - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; int packet_login_phase3c_hi_b_len = 0; @@ -154,15 +150,9 @@ u_long aim_bos_setbuddylist(struct aim_session_t *sess, packet_login_phase3c_hi_b_len = 16; /* 16b for FLAP and SNAC headers */ /* bail out if we can't make the packet */ - if (buddy_list == NULL) - { - printf("\nNO BUDDIES! ARE YOU THAT LONELY???\n"); - return 0; - } -#if debug > 0 - printf("****buddy list: %s\n", buddy_list); - printf("****buddy list len: %d (%x)\n", strlen(buddy_list), strlen(buddy_list)); -#endif + if (!buddy_list) { + return -1; + } localcpy = (char *) malloc(strlen(buddy_list)+1); memcpy(localcpy, buddy_list, strlen(buddy_list)+1); @@ -183,17 +173,12 @@ u_long aim_bos_setbuddylist(struct aim_session_t *sess, #endif free(localcpy); - newpacket.type = 0x02; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.commandlen = packet_login_phase3c_hi_b_len - 6; - newpacket.lock = 1; - - newpacket.data = (char *) malloc(newpacket.commandlen); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, packet_login_phase3c_hi_b_len - 6))) + return -1; - aim_putsnac(newpacket.data, 0x0003, 0x0004, 0x0000, sess->snac_nextid); + newpacket->lock = 1; + + aim_putsnac(newpacket->data, 0x0003, 0x0004, 0x0000, sess->snac_nextid); j = 10; /* the next byte */ @@ -204,16 +189,16 @@ u_long aim_bos_setbuddylist(struct aim_session_t *sess, #if debug > 0 printf("---adding %s (%d)\n", tmpptr, strlen(tmpptr)); #endif - newpacket.data[j] = strlen(tmpptr); - memcpy(&(newpacket.data[j+1]), tmpptr, strlen(tmpptr)); + newpacket->data[j] = strlen(tmpptr); + memcpy(&(newpacket->data[j+1]), tmpptr, strlen(tmpptr)); j += strlen(tmpptr)+1; i++; tmpptr = strtok(NULL, "&"); } - newpacket.lock = 0; + newpacket->lock = 0; - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -224,68 +209,40 @@ u_long aim_bos_setbuddylist(struct aim_session_t *sess, * Gives BOS your profile. * * - * The large data chunk given here is of unknown decoding. - * What I do know is that each 0x20 byte repetition - * represents a capability. People with only the - * first two reptitions can support normal messaging - * and chat (client version 2.0 or 3.0). People with - * the third as well can also support voice chat (client - * version 3.5 or higher). IOW, if we don't send this, - * we won't get chat invitations (get "software doesn't - * support chat" error). - * - * This data is broadcast along with your oncoming - * buddy command to everyone who has you on their - * buddy list, as a type 0x0002 TLV. - * */ u_long aim_bos_setprofile(struct aim_session_t *sess, struct aim_conn_t *conn, - char *profile) + char *profile, + char *awaymsg, + unsigned int caps) { - struct command_tx_struct newpacket; - int i = 0; - u_char funkydata[] = { - 0x09, 0x46, 0x13, 0x46, 0x4c, 0x7f, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00, - 0x09, 0x46, 0x13, 0x41, 0x4c, 0x7f, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00, - - 0x09, 0x46, 0x13, 0x45, 0x4c, 0x7f, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00, - 0x74, 0x8f, 0x24, 0x20, 0x62, 0x87, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00, - - 0x09, 0x46, 0x13, 0x48, 0x4c, 0x7f, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00, - 0x09, 0x46, 0x13, 0x43, 0x4c, 0x7f, 0x11, 0xd1, - 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 - }; + struct command_tx_struct *newpacket; + int i = 0, tmp, caplen; - newpacket.type = 0x02; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - - newpacket.commandlen = 1152+strlen(profile)+1; /*arbitrarily large */ - newpacket.data = (char *) malloc(newpacket.commandlen); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 1152+strlen(profile)+1+(awaymsg?strlen(awaymsg):0)))) + return -1; - i += aim_putsnac(newpacket.data, 0x0002, 0x004, 0x0000, sess->snac_nextid); - i += aim_puttlv_str(newpacket.data+i, 0x0001, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); - i += aim_puttlv_str(newpacket.data+i, 0x0002, strlen(profile), profile); + i += aim_putsnac(newpacket->data, 0x0002, 0x004, 0x0000, sess->snac_nextid); + i += aim_puttlv_str(newpacket->data+i, 0x0001, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); + i += aim_puttlv_str(newpacket->data+i, 0x0002, strlen(profile), profile); /* why do we send this twice? */ - i += aim_puttlv_str(newpacket.data+i, 0x0003, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); + i += aim_puttlv_str(newpacket->data+i, 0x0003, strlen("text/x-aolrtf; charset=\"us-ascii\""), "text/x-aolrtf; charset=\"us-ascii\""); - /* a blank TLV 0x0004 --- not sure what this is either */ - i += aimutil_put16(newpacket.data+i, 0x0004); - i += aimutil_put16(newpacket.data+i, 0x0000); + /* Away message -- we send this no matter what, even if its blank */ + if (awaymsg) + i += aim_puttlv_str(newpacket->data+i, 0x0004, strlen(awaymsg), awaymsg); + else + i += aim_puttlv_str(newpacket->data+i, 0x0004, 0x0000, NULL); /* Capability information. */ - i += aim_puttlv_str(newpacket.data+i, 0x0005, 0x0060, funkydata); + + tmp = (i += aimutil_put16(newpacket->data+i, 0x0005)); + i += aimutil_put16(newpacket->data+i, 0x0000); /* rewritten later */ + i += (caplen = aim_putcap(newpacket->data+i, 512, caps)); + aimutil_put16(newpacket->data+tmp, caplen); /* rewrite TLV size */ - newpacket.commandlen = i; - aim_tx_enqueue(sess, &newpacket); + newpacket->commandlen = i; + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -361,22 +318,19 @@ u_long aim_bos_clientready(struct aim_session_t *sess, 0x00, 0x01 }; int command_2_len = 0x52; - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; - newpacket.lock = 1; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.type = 0x02; - newpacket.commandlen = command_2_len; - newpacket.data = (char *) malloc (newpacket.commandlen); - memcpy(newpacket.data, command_2, newpacket.commandlen); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, command_2_len))) + return -1; + + newpacket->lock = 1; + + memcpy(newpacket->data, command_2, command_2_len); /* This write over the dynamic parts of the byte block */ - aim_putsnac(newpacket.data, 0x0001, 0x0002, 0x0000, sess->snac_nextid); + aim_putsnac(newpacket->data, 0x0001, 0x0002, 0x0000, sess->snac_nextid); - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -404,29 +358,27 @@ u_long aim_bos_reqrate(struct aim_session_t *sess, u_long aim_bos_ackrateresp(struct aim_session_t *sess, struct aim_conn_t *conn) { - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; + int packlen = 18, i=0; - newpacket.lock = 1; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.type = 0x02; - newpacket.commandlen = 18; + if (conn->type != AIM_CONN_TYPE_BOS) + packlen += 2; - newpacket.data = (char *) malloc(newpacket.commandlen); - aim_putsnac(newpacket.data, 0x0001, 0x0008, 0x0000, sess->snac_nextid); + if(!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, packlen))); + + newpacket->lock = 1; - newpacket.data[10] = 0x00; - newpacket.data[11] = 0x01; - newpacket.data[12] = 0x00; - newpacket.data[13] = 0x02; - newpacket.data[14] = 0x00; - newpacket.data[15] = 0x03; - newpacket.data[16] = 0x00; - newpacket.data[17] = 0x04; + i = aim_putsnac(newpacket->data, 0x0001, 0x0008, 0x0000, sess->snac_nextid); + i += aimutil_put16(newpacket->data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0002); + i += aimutil_put16(newpacket->data+i, 0x0003); + i += aimutil_put16(newpacket->data+i, 0x0004); + + if (conn->type != AIM_CONN_TYPE_BOS) { + i += aimutil_put16(newpacket->data+i, 0x0005); + } - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -457,24 +409,20 @@ u_long aim_bos_setprivacyflags(struct aim_session_t *sess, u_long aim_bos_reqpersonalinfo(struct aim_session_t *sess, struct aim_conn_t *conn) { - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; - newpacket.lock = 1; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.type = 0x02; - newpacket.commandlen = 12; + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 12))) + return -1; - newpacket.data = (char *) malloc(newpacket.commandlen); - aim_putsnac(newpacket.data, 0x000a, 0x0001, 0x000e /* huh? */, sess->snac_nextid); + newpacket->lock = 1; + + aim_putsnac(newpacket->data, 0x000a, 0x0001, 0x000e /* huh? */, sess->snac_nextid); - newpacket.data[10] = 0x0d; - newpacket.data[11] = 0xda; + newpacket->data[10] = 0x0d; + newpacket->data[11] = 0xda; - newpacket.lock = 0; - aim_tx_enqueue(sess, &newpacket); + newpacket->lock = 0; + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -482,63 +430,57 @@ u_long aim_bos_reqpersonalinfo(struct aim_session_t *sess, u_long aim_setversions(struct aim_session_t *sess, struct aim_conn_t *conn) { - struct command_tx_struct newpacket; - int i,j; + struct command_tx_struct *newpacket; + int i; - newpacket.lock = 1; - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.type = 0x02; - newpacket.commandlen = 10 + (4*11); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10 + (4*11)))) + return -1; - newpacket.data = (char *) malloc(newpacket.commandlen); - i = aim_putsnac(newpacket.data, 0x0001, 0x0017, 0x0000, sess->snac_nextid); + newpacket->lock = 1; - i += aimutil_put16(newpacket.data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x0003); + i = aim_putsnac(newpacket->data, 0x0001, 0x0017, 0x0000, sess->snac_nextid); - i += aimutil_put16(newpacket.data+i, 0x0002); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0003); - i += aimutil_put16(newpacket.data+i, 0x0003); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0002); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x0004); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0003); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x0006); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0004); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x0008); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0006); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x0009); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0008); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x000a); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0009); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x000b); - i += aimutil_put16(newpacket.data+i, 0x0002); + i += aimutil_put16(newpacket->data+i, 0x000a); + i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket.data+i, 0x000c); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x000b); + i += aimutil_put16(newpacket->data+i, 0x0002); - i += aimutil_put16(newpacket.data+i, 0x0015); - i += aimutil_put16(newpacket.data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x000c); + i += aimutil_put16(newpacket->data+i, 0x0001); + + i += aimutil_put16(newpacket->data+i, 0x0015); + i += aimutil_put16(newpacket->data+i, 0x0001); #if 0 - for (j = 0; j < 0x10; j++) -A - { - i += aimutil_put16(newpacket.data+i, j); /* family */ - i += aimutil_put16(newpacket.data+i, 0x0003); /* version */ - } + for (j = 0; j < 0x10; j++) { + i += aimutil_put16(newpacket->data+i, j); /* family */ + i += aimutil_put16(newpacket->data+i, 0x0003); /* version */ + } #endif - newpacket.lock = 0; - aim_tx_enqueue(sess, &newpacket); + newpacket->lock = 0; + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -557,6 +499,22 @@ u_long aim_bos_reqservice(struct aim_session_t *sess, return aim_genericreq_s(sess, conn, 0x0001, 0x0004, &serviceid); } +/* + * aim_bos_nop() + * + * No-op. WinAIM sends these every 4min or so to keep + * the connection alive. With the recent changes + * in the OSCAR servers, it looks like we must do the + * same or be disconnected with a mysterious 'you logged + * on from another client' message. + * + */ +u_long aim_bos_nop(struct aim_session_t *sess, + struct aim_conn_t *conn) +{ + return aim_genericreq_n(sess, conn, 0x0001, 0x0016); +} + /* * aim_bos_reqrights() * @@ -581,6 +539,17 @@ u_long aim_bos_reqbuddyrights(struct aim_session_t *sess, return aim_genericreq_n(sess, conn, 0x0003, 0x0002); } +/* + * aim_debugconn_sendconnect() + * + * For aimdebugd. If you don't know what it is, you don't want to. + */ +u_long aim_debugconn_sendconnect(struct aim_session_t *sess, + struct aim_conn_t *conn) +{ + return aim_genericreq_n(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_DEBUGCONN_CONNECT); +} + /* * Generic routine for sending commands. * @@ -597,24 +566,16 @@ u_long aim_genericreq_n(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short subtype) { - struct command_tx_struct newpacket; - - newpacket.lock = 1; - - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - newpacket.type = 0x02; + struct command_tx_struct *newpacket; - newpacket.commandlen = 10; + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10))) + return 0; - newpacket.data = (char *) malloc(newpacket.commandlen); - memset(newpacket.data, 0x00, newpacket.commandlen); + newpacket->lock = 1; - aim_putsnac(newpacket.data, family, subtype, 0x0000, sess->snac_nextid); + aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -626,34 +587,25 @@ u_long aim_genericreq_l(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short subtype, u_long *longdata) { - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; u_long newlong; /* If we don't have data, there's no reason to use this function */ if (!longdata) return aim_genericreq_n(sess, conn, family, subtype); - newpacket.lock = 1; - - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); - - newpacket.type = 0x02; - - newpacket.commandlen = 10+sizeof(u_long); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+sizeof(u_long)))) + return -1; - newpacket.data = (char *) malloc(newpacket.commandlen); - memset(newpacket.data, 0x00, newpacket.commandlen); + newpacket->lock = 1; - aim_putsnac(newpacket.data, family, subtype, 0x0000, sess->snac_nextid); + aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); /* copy in data */ newlong = htonl(*longdata); - memcpy(&(newpacket.data[10]), &newlong, sizeof(u_long)); + memcpy(&(newpacket->data[10]), &newlong, sizeof(u_long)); - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -661,34 +613,25 @@ u_long aim_genericreq_s(struct aim_session_t *sess, struct aim_conn_t *conn, u_short family, u_short subtype, u_short *shortdata) { - struct command_tx_struct newpacket; + struct command_tx_struct *newpacket; u_short newshort; /* If we don't have data, there's no reason to use this function */ if (!shortdata) return aim_genericreq_n(sess, conn, family, subtype); - newpacket.lock = 1; - - if (conn) - newpacket.conn = conn; - else - newpacket.conn = aim_getconn_type(sess, AIM_CONN_TYPE_BOS); + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+sizeof(u_short)))) + return -1; - newpacket.type = 0x02; + newpacket->lock = 1; - newpacket.commandlen = 10+sizeof(u_short); - - newpacket.data = (char *) malloc(newpacket.commandlen); - memset(newpacket.data, 0x00, newpacket.commandlen); - - aim_putsnac(newpacket.data, family, subtype, 0x0000, sess->snac_nextid); + aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); /* copy in data */ newshort = htons(*shortdata); - memcpy(&(newpacket.data[10]), &newshort, sizeof(u_short)); + memcpy(&(newpacket->data[10]), &newshort, sizeof(u_short)); - aim_tx_enqueue(sess, &newpacket); + aim_tx_enqueue(sess, newpacket); return (sess->snac_nextid++); } @@ -705,7 +648,7 @@ u_long aim_bos_reqlocaterights(struct aim_session_t *sess, } /* - * aim_bos_reqicbmparaminfo() +* aim_bos_reqicbmparaminfo() * * Request ICBM parameter information. * @@ -715,3 +658,4 @@ u_long aim_bos_reqicbmparaminfo(struct aim_session_t *sess, { return aim_genericreq_n(sess, conn, 0x0004, 0x0004); } +