struct command_tx_struct *newpacket;
- if (!(newpacket = aim_tx_new(0x0001, conn, 4)))
+ if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0001, conn, 4)))
return -1;
newpacket->lock = 1;
struct command_tx_struct *newpacket;
- if (!(newpacket = aim_tx_new(0x0002, conn, 10+2+2+strlen(sn))))
+ if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+2+2+strlen(sn))))
return -1;
newpacket->lock = 1;
if (!clientinfo || !sn || !password)
return -1;
- if (!(newpacket = aim_tx_new(0x0002, conn, 1152)))
+ if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 1152)))
return -1;
/*
}
newpacket->lock = 1;
- newpacket->type = 0x01;
+ newpacket->hdr.oscar.type = 0x01;
curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000);
curbyte += aimutil_put16(newpacket->data+curbyte, 0x0001);
curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
curbyte += aimutil_put16(newpacket->data+curbyte, strlen(password));
password_encoded = (char *) malloc(strlen(password));
- if (icqmode)
- aimicq_encode_password(password, password_encoded);
- else
- aim_encode_password(password, password_encoded);
+ aim_encode_password(password, password_encoded);
curbyte += aimutil_putstr(newpacket->data+curbyte, password_encoded, strlen(password));
free(password_encoded);
- curbyte += aim_puttlv_16(newpacket->data+curbyte, 0x0016, 0x010a /*0x0004*/);
-
if (strlen(clientinfo->clientstring)) {
curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003);
curbyte += aimutil_put16(newpacket->data+curbyte, strlen(clientinfo->clientstring));
curbyte += aimutil_putstr(newpacket->data+curbyte, clientinfo->clientstring, strlen(clientinfo->clientstring));
}
+ curbyte += aim_puttlv_16(newpacket->data+curbyte, 0x0016, /*0x010a*/ 0x0004);
curbyte += aim_puttlv_16(newpacket->data+curbyte, 0x0017, clientinfo->major /*0x0001*/);
curbyte += aim_puttlv_16(newpacket->data+curbyte, 0x0018, clientinfo->minor /*0x0001*/);
curbyte += aim_puttlv_16(newpacket->data+curbyte, 0x0019, 0x0001);
int aim_encode_password(const char *password, u_char *encoded)
{
u_char encoding_table[] = {
+#if 0 /* old v1 table */
0xf3, 0xb3, 0x6c, 0x99,
0x95, 0x3f, 0xac, 0xb6,
0xc5, 0xfa, 0x6b, 0x63,
0x69, 0x6c, 0xc3, 0x9f
- };
-
- int i;
-
- for (i = 0; i < strlen(password); i++)
- encoded[i] = (password[i] ^ encoding_table[i]);
-
- return 0;
-}
-
-/*
- * They changed the hash slightly for ICQ.
- * This new hash may work for AIM too (though
- * the max password length for ICQ is only
- * eight characters, where its 16 with AIM).
- *
- */
-int aimicq_encode_password(const char *password, u_char *encoded)
-{
- u_char encoding_table[] = {
+#else /* v2.1 table, also works for ICQ */
0xf3, 0x26, 0x81, 0xc4,
- 0x39, 0x86, 0xdb, 0x92
+ 0x39, 0x86, 0xdb, 0x92,
+ 0x71, 0xa3, 0xb9, 0xe6,
+ 0x53, 0x7a, 0x95, 0x7c
+#endif
};
int i;
-
- if (strlen(password) > 8)
- return -1;
-
+
for (i = 0; i < strlen(password); i++)
encoded[i] = (password[i] ^ encoding_table[i]);
* If we have both an IP number (0x0005) and a cookie (0x0006),
* then the login was successful.
*/
- else if (aim_gettlv(tlvlist, 0x0005, 1) && aim_gettlv(tlvlist, 0x0006, 1)) {
+ else if (aim_gettlv(tlvlist, 0x0005, 1) && aim_gettlv(tlvlist, 0x0006, 1)
+ /*aim_gettlv(tlvlist, 0x0006, 1)->length*/) {
struct aim_tlv_t *tmptlv;
/*
struct command_tx_struct *tx;
struct aim_tlvlist_t *tlvlist = NULL;
- if (!(tx = aim_tx_new(0x0004, conn, 1152)))
+ if (!(tx = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0004, conn, 1152)))
return -1;
tx->lock = 1;
struct command_tx_struct *tx;
int i = 0;
- if (!(tx = aim_tx_new(0x0002, conn, 10+0x22)))
+ if (!(tx = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+0x22)))
return -1;
tx->lock = 1;
struct aim_tlvlist_t *tlvlist = NULL;
int i = 0;
- if (!(tx = aim_tx_new(0x0002, conn, 1152)))
+ if (!(tx = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 1152)))
return -1;
tx->lock = 1;