4 int sendimtoclient(struct aim_session_t *sess, struct aim_conn_t *conn,
5 char *srcsn, u_int flags, char *msg)
7 struct command_tx_struct *tx;
8 struct aimd_clientinfo *client = NULL;
9 struct aim_tlvlist_t *tlvlist = NULL;
10 struct aim_tlvlist_t *tlvlist2 = NULL;
14 if (!(tx = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, strlen(msg)+256)))
19 msgblock = malloc(strlen(msg)+128); /* ?? */
20 memset(msgblock, 0, strlen(msg)+128);
23 z += aimutil_put8(msgblock+z, 0x00);
24 z += aimutil_put8(msgblock+z, 0x00);
26 z += aimutil_put16(msgblock+z, 0x02);
27 z += aimutil_put8(msgblock+z, 0x00);
28 z += aimutil_put8(msgblock+z, 0x00);
30 z += aimutil_put8(msgblock+z, 0x00);
31 z += aimutil_put8(msgblock+z, 0x00);
33 z += aimutil_put16(msgblock+z, strlen(msg)+4);
35 z += aimutil_put16(msgblock+z, 0x0000);
36 z += aimutil_put16(msgblock+z, 0x0000);
39 z += aimutil_putstr(msgblock+z, msg, strlen(msg));
45 i += aimutil_put16(tx->data+i, 0x0004);
46 i += aimutil_put16(tx->data+i, 0x0007);
47 i += aimutil_put16(tx->data+i, 0x0000);
48 i += aimutil_put16(tx->data+i, 0x0000);
49 i += aimutil_put16(tx->data+i, 0x0000);
55 i += aimutil_put8(tx->data+i+y, (u_char) random());
60 i += aimutil_put16(tx->data+i, 0x0001);
65 i += aimutil_put8(tx->data+i, strlen(srcsn));
66 i += aimutil_putstr(tx->data+i, srcsn, strlen(srcsn));
71 i += aimutil_put16(tx->data+i, 0x0000);
74 aim_addtlvtochain16(&tlvlist, 0x0001, AIM_FLAG_FREE | AIM_FLAG_UNCONFIRMED);
76 /* member-since date */
77 aim_addtlvtochain32(&tlvlist, 0x0002, 0);
80 aim_addtlvtochain32(&tlvlist, 0x0003, 0);
83 aim_addtlvtochain16(&tlvlist, 0x0004, 0);
85 /* session length (AIM) */
86 aim_addtlvtochain16(&tlvlist, 0x000f, 0);
88 /* add msgblock to chain */
89 aim_addtlvtochain_str(&tlvlist2, 0x0002, msgblock, z);
91 i += aimutil_put16(tx->data+i, aim_counttlvchain(&tlvlist));
92 i += aim_writetlvchain(tx->data+i, tx->commandlen-i, &tlvlist);
93 tx->commandlen = aim_writetlvchain(tx->data+i, tx->commandlen-i, &tlvlist2)+i;
97 aim_freetlvchain(&tlvlist);
101 aim_tx_enqueue(sess, tx);