X-Git-Url: http://andersk.mit.edu/gitweb/libfaim.git/blobdiff_plain/1ea867e3531824627556aaf5bf7d23fdf33325fb..64c78745f1e1ef7ecd8166b3af5b80d0d142cfb9:/aim_misc.c diff --git a/aim_misc.c b/aim_misc.c index 368215a..16c42d8 100644 --- a/aim_misc.c +++ b/aim_misc.c @@ -11,6 +11,7 @@ * */ +#define FAIM_INTERNAL #include /* @@ -301,79 +302,46 @@ faim_internal int aim_parse_bosrights(struct aim_session_t *sess, * * Send Client Ready. * - * TODO: Dynamisize. - * */ faim_export unsigned long aim_bos_clientready(struct aim_session_t *sess, struct aim_conn_t *conn) { - u_char command_2[] = { - /* placeholders for dynamic data */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, - /* real data */ - 0x00, 0x01, - 0x00, 0x03, - 0x00, 0x04, - 0x06, 0x86, /* the good ones */ -#if 0 - 0x07, 0xda, /* DUPLE OF DEATH! */ -#endif - - 0x00, 0x02, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - - 0x00, 0x03, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - - 0x00, 0x04, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - - 0x00, 0x06, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - 0x00, 0x08, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - - 0x00, 0x09, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - 0x00, 0x0a, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01, - - 0x00, 0x0b, - 0x00, 0x01, - 0x00, 0x04, - 0x00, 0x01 + struct aim_tool_version tools[] = { + {0x0001, 0x0003, AIM_TOOL_WIN32, 0x0686}, + {0x0002, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x0003, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x0004, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x0006, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x0008, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x0009, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x000a, 0x0001, AIM_TOOL_WIN32, 0x0001}, + {0x000b, 0x0001, AIM_TOOL_WIN32, 0x0001} }; - int command_2_len = 0x52; + int i,j; struct command_tx_struct *newpacket; - - if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, command_2_len))) + int toolcount = sizeof(tools)/sizeof(struct aim_tool_version); + + if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 1152))) 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); + i = aim_putsnac(newpacket->data, 0x0001, 0x0002, 0x0000, sess->snac_nextid); + aim_cachesnac(sess, 0x0001, 0x0002, 0x0000, NULL, 0); + + for (j = 0; j < toolcount; j++) { + i += aimutil_put16(newpacket->data+i, tools[j].group); + i += aimutil_put16(newpacket->data+i, tools[j].version); + i += aimutil_put16(newpacket->data+i, tools[j].tool); + i += aimutil_put16(newpacket->data+i, tools[j].toolversion); + } + + newpacket->commandlen = i; + newpacket->lock = 0; aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid++); + return sess->snac_nextid; } /* @@ -457,10 +425,14 @@ faim_export unsigned long aim_setversions(struct aim_session_t *sess, newpacket->lock = 1; i = aim_putsnac(newpacket->data, 0x0001, 0x0017, 0x0000, sess->snac_nextid); + aim_cachesnac(sess, 0x0001, 0x0017, 0x0000, NULL, 0); i += aimutil_put16(newpacket->data+i, 0x0001); i += aimutil_put16(newpacket->data+i, 0x0003); + i += aimutil_put16(newpacket->data+i, 0x0013); + i += aimutil_put16(newpacket->data+i, 0x0001); + i += aimutil_put16(newpacket->data+i, 0x0002); i += aimutil_put16(newpacket->data+i, 0x0001); @@ -483,29 +455,16 @@ faim_export unsigned long aim_setversions(struct aim_session_t *sess, 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, 0x000c); - i += aimutil_put16(newpacket->data+i, 0x0001); - - i += aimutil_put16(newpacket->data+i, 0x0013); i += aimutil_put16(newpacket->data+i, 0x0001); - i += aimutil_put16(newpacket->data+i, 0x0015); + i += aimutil_put16(newpacket->data+i, 0x000c); i += aimutil_put16(newpacket->data+i, 0x0001); -#if 0 - for (j = 0; j < 0x10; j++) { - i += aimutil_put16(newpacket->data+i, j); /* family */ - i += aimutil_put16(newpacket->data+i, 0x0003); /* version */ - } -#endif - newpacket->commandlen = i; newpacket->lock = 0; aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid++); + return sess->snac_nextid; } @@ -655,9 +614,11 @@ faim_internal unsigned long aim_genericreq_n(struct aim_session_t *sess, newpacket->lock = 1; aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); - + + aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0); + aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid++); + return sess->snac_nextid; } /* @@ -682,13 +643,14 @@ faim_internal unsigned long aim_genericreq_l(struct aim_session_t *sess, newpacket->lock = 1; aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); + aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0); /* copy in data */ newlong = htonl(*longdata); memcpy(&(newpacket->data[10]), &newlong, sizeof(u_long)); aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid++); + return sess->snac_nextid; } faim_internal unsigned long aim_genericreq_s(struct aim_session_t *sess, @@ -709,13 +671,14 @@ faim_internal unsigned long aim_genericreq_s(struct aim_session_t *sess, newpacket->lock = 1; aim_putsnac(newpacket->data, family, subtype, 0x0000, sess->snac_nextid); + aim_cachesnac(sess, family, subtype, 0x0000, NULL, 0); /* copy in data */ newshort = htons(*shortdata); memcpy(&(newpacket->data[10]), &newshort, sizeof(u_short)); aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid++); + return sess->snac_nextid; } /* @@ -757,6 +720,8 @@ faim_export unsigned long aim_addicbmparam(struct aim_session_t *sess, newpacket->lock = 1; i = aim_putsnac(newpacket->data, 0x0004, 0x0002, 0x0000, sess->snac_nextid); + aim_cachesnac(sess, 0x0004, 0x0002, 0x0000, NULL, 0); + i += aimutil_put16(newpacket->data+i, 0x0000); i += aimutil_put16(newpacket->data+i, 0x0000); i += aimutil_put16(newpacket->data+i, 0x0003); @@ -768,7 +733,7 @@ faim_export unsigned long aim_addicbmparam(struct aim_session_t *sess, aim_tx_enqueue(sess, newpacket); - return (sess->snac_nextid); + return sess->snac_nextid; } /*