Index: branches/0.3.8.105#99/chan_01login.c =================================================================== --- branches/0.3.8.105#99/chan_01login.c (revision 200) +++ branches/0.3.8.105#99/chan_01login.c (working copy) @@ -40,8 +40,9 @@ extern WORD wLocalSequence; +extern int iBosSeq; +extern WORD sequences[]; - void handleLoginChannel(unsigned char *buf, WORD datalen, serverthread_info *info) { icq_packet packet; @@ -100,8 +101,8 @@ else { if (info->cookieDataLen) - { - wLocalSequence = (WORD)RandRange(0, 0xffff); + { + wLocalSequence = iBosSeq; serverCookieInit(&packet, info->cookieData, (WORD)info->cookieDataLen); sendServPacket(&packet); Index: branches/0.3.8.105#99/fam_17signon.c =================================================================== --- branches/0.3.8.105#99/fam_17signon.c (revision 200) +++ branches/0.3.8.105#99/fam_17signon.c (working copy) @@ -106,10 +106,11 @@ char szUin[UINMAXLEN]; WORD wUinLen; icq_packet packet; + BYTE empty = 0; wUinLen = strlennull(strUID(dwLocalUIN, szUin)); - packet.wLen = 65 + sizeof(CLIENT_ID_STRING) + wUinLen + wKeyLen; + packet.wLen = 65 + sizeof(CLIENT_ID_STRING) + wUinLen + wKeyLen + 5; if (bSecure) { @@ -145,8 +146,8 @@ packTLVWord(&packet, 0x001a, CLIENT_VERSION_BUILD); packTLVDWord(&packet, 0x0014, CLIENT_DISTRIBUTION); packTLV(&packet, 0x000f, 0x0002, CLIENT_LANGUAGE); - packTLV(&packet, 0x000e, 0x0002, CLIENT_LANGUAGE); - + packTLV(&packet, 0x000e, 0x0002, CLIENT_COUNTRY); + packTLV(&packet, 0x0094, 0x0001, &empty); sendServPacket(&packet); } Index: branches/0.3.8.105#99/icq_constants.h =================================================================== --- branches/0.3.8.105#99/icq_constants.h (revision 200) +++ branches/0.3.8.105#99/icq_constants.h (working copy) @@ -593,10 +593,10 @@ #define CLIENT_ID_STRING "ICQ Client" // Client identification, mimic ICQ 6 #define CLIENT_ID_CODE 0x010a #define CLIENT_VERSION_MAJOR 0x0006 -#define CLIENT_VERSION_MINOR 0x0000 +#define CLIENT_VERSION_MINOR 0x0005 #define CLIENT_VERSION_LESSER 0x0000 -#define CLIENT_VERSION_BUILD 0x1B67 -#define CLIENT_DISTRIBUTION 0x00007535 +#define CLIENT_VERSION_BUILD 0x001a +#define CLIENT_DISTRIBUTION 0x00007537 #define CLIENT_LANGUAGE "en" #define CLIENT_COUNTRY "us" Index: branches/0.3.8.105#99/icq_server.c =================================================================== --- branches/0.3.8.105#99/icq_server.c (revision 200) +++ branches/0.3.8.105#99/icq_server.c (working copy) @@ -38,7 +38,6 @@ #include "icqoscar.h" - extern CRITICAL_SECTION connectionHandleMutex; extern WORD wLocalSequence; extern CRITICAL_SECTION localSeqMutex; @@ -50,6 +49,14 @@ static HANDLE serverThreadHandle; BOOL TryNextWorking; +int iBosSeq; + + +WORD sequences[] = { + 5695, 23595, 23620, 23049, 0x2886, 0x2493, 23620, 23049, 2853, 17372, 1255, 1796, 1657, 13606, 1930, 23918, 31234, 30120, 0x1BEA, 0x5342, 0x30CC, 0x2294, 0x5697, 0x25FA, 0x3C26, 0x3303, 0x078A, 0x0FC5, 0x25D6, 0x26EE,0x7570, 0x7F33, 0x4E94, 0x07C9, 0x7339, 0x42A8 + // 0x39B1, 0x1F07 + }; + static int handleServerPackets(unsigned char* buf, int len, serverthread_info* info); static DWORD __stdcall icq_TryNextServerThread(LPVOID lp) @@ -521,8 +528,10 @@ stsi->szPass[stsi->wPassLen] = '\0'; // Randomize sequence - wLocalSequence = (WORD)RandRange(0, 0x7fff); + wLocalSequence = sequences[RandRange(0, (sizeof sequences) / (sizeof sequences[0]))] - 1; + iBosSeq = RandRange(0, (sizeof sequences) / (sizeof sequences[0])); + dwLocalUIN = dwUin; serverThreadHandle = ICQCreateThreadEx(icq_serverThread, stsi, &serverThreadId);