Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 1832 → Rev 1833

/programs/network/icq/trunk/macros.inc
File deleted
\ No newline at end of file
/programs/network/icq/trunk/struct.inc
File deleted
/programs/network/icq/trunk/lang.inc
File deleted
\ No newline at end of file
/programs/network/icq/trunk/config.inc
File deleted
/programs/network/icq/trunk/build_en.bat
0,0 → 1,5
@erase lang.inc
@echo lang fix en >lang.inc
@fasm ki.asm ki
@erase lang.inc
@pause
/programs/network/icq/trunk/build_ru.bat
1,2 → 1,5
@erase lang.inc
@echo lang fix ru >lang.inc
@fasm ki.asm ki
 
@erase lang.inc
@pause
/programs/network/icq/trunk/ki.asm
8,7 → 8,7
 
; <--- include all MeOS stuff --->
include "lang.inc"
include "MACROS.INC"
include "../../../macros.inc"
purge mov
;include "ASCL9/ascl.inc"
;include "debug.inc"
78,7 → 78,7
mov eax, 2 ; get key code
int 0x40
 
cmp ah, 0Dh ; à®¡¥« - ®â¯à ¢¨âì á®®¡é¥­¨¥
cmp ah, 0Dh ; à®¡¥« - ®â¯à ¢¨âì á®®¡é¥­¨¥
jz send
 
 
92,13 → 92,13
int 0x40
 
cmp ah, 2
jz connect
jz connect
 
cmp ah, 3
jz disconnect
jz disconnect
 
cmp ah, 4
jz send
jz send
 
;
; à®¢¥à塞, ­¥ ­ ¦ â  «¨ ª­®¯ª  ¢ Š‹
227,7 → 227,7
;cmp al, 20h
;jz sd_use_kl
mov al, [inputbuff+3]
cmp al, 20h ; à®¡¥«
cmp al, 20h ; à®¡¥«
jz sd_use_kl
;
; ˆé¥¬ ¯¥à¢ë© ¯à®¡¥«, ¨¬ ¤®«¦¥­ § ª®­ç¨âìáï 㨭
238,7 → 238,7
cmp al, 20h
jz sd_space
cmp al, 0
jz wait_event
jz wait_event
inc ecx
jmp sd_loop
 
259,7 → 259,7
lea eax, [inputbuff+1]
mov [inputbuff+3], byte 0
call ascitoint
lea eax, [eax-1] ; ’.ª. ¢ Š‹ ®âáç¥â á 0
lea eax, [eax-1] ; ’.ª. ¢ Š‹ ®âáç¥â á 0
mov [curruser], al
 
402,7 → 402,7
;
rs_data_end:
mov [hrf], 0
write_debug 'Some data recived'
write_debug 'Some data received'
;
;
;
432,7 → 432,7
;
rs_big_flap:
 
write_debug 'Too BIG FLAP Recived'
write_debug 'Too BIG FLAP Received'
mov [hrf], 0
 
mov ecx, [socket]
465,7 → 465,7
; ‘®¥¤¨­¥­¨¥ á á¥à¢¥à®¬, ¢®§¢à é ¥â ¢ eax - åí­¤« ᮪¥â 
; ¯¥à¥¤ ¥¬ ¢ ¥ å IP  ¤à¥á á¥à¢¥à 
; ¢ ebx - ¯®àâ
srv_connect:
srv_connect:
push ecx
push edx
push esi
472,7 → 472,7
push edi
push ebx
mov esi, eax ; IP - ¢ esi
mov esi, eax ; IP - ¢ esi
; find free port
mov ecx, 1000 ; Ž¯à¥¤¥«ï¥¬ «®ª «ì­ë© ¯®àâ, ­ ç¨­ ¥¬ á 1000
 
522,7 → 522,7
;cmp eax,-1
;jnz fin
;delay 100
write_debug 'CONNECTION FAILED' ;®¤ª«î祭¨¥ ­¥ 㤠«®áì
write_debug 'CONNECTION FAILED' ;®¤ª«î祭¨¥ ­¥ 㤠«®áì
jmp @f
;connrcted:
;CONNECTED
541,7 → 541,7
; --> ecx socket handle
;
buff db 1024 dup 0
lbuff db 8 dup 0 ; „«ï 1 ¯ ª¥â  ®â á¥à¢¥à 
lbuff db 8 dup 0 ; „«ï 1 ¯ ª¥â  ®â á¥à¢¥à 
srv_login:
pushf
push eax
567,7 → 567,7
cmp eax, 4
jnz l_len_err
mov eax, dword [mbuff]
cmp eax, 01000000h ; 00 00 00 01
cmp eax, 01000000h ; 00 00 00 01
jnz l_data_err
;
;”®à¬¨à㥬 ¯ ª¥â ¤«ï ᮥ¤¨­¥­¨ï
580,7 → 580,7
int 40h
mov [seq], ax
 
mov [flap.wSn], ax ; Sequence number
mov [flap.wSn], ax ; Sequence number
;mov [buff],0
;mov [buff+1],0
;mov [buff+2],0
593,12 → 593,12
mov [buff+6], ah
mov [buff+7], al ; Length of UIN
mov edx, eax
add edx, 7 ; ¢ edx ¤«¨­  § ¯®«­¥­­®£® ¡ãä¥à 
add edx, 7 ; ¢ edx ¤«¨­  § ¯®«­¥­­®£® ¡ãä¥à 
mov ecx, eax ;„«¨­  áâப¨
mov ecx, eax ;„«¨­  áâப¨
 
mov eax, UIN
lea ebx, [buff+8] ; + à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥ + 1
lea ebx, [buff+8] ; + à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥ + 1
 
call strcpy
 
612,10 → 612,10
 
add edx, 4
mov ebx, buff
add ebx, edx ; ­ §­ ç¥­¨¥
add edx, eax ; ‘®å࠭塞 ¢ EDX ¤«¨­ã § ¯®«­¥­­®£® ¡ãä­à 
mov ecx, eax ; „«¨­  áâப¨
mov eax, PASS ; ˆáâ®ç­¨ª
add ebx, edx ; ­ §­ ç¥­¨¥
add edx, eax ; ‘®å࠭塞 ¢ EDX ¤«¨­ã § ¯®«­¥­­®£® ¡ãä­à 
mov ecx, eax ; „«¨­  áâப¨
mov eax, PASS ; ˆáâ®ç­¨ª
inc ebx
call strcpy
716,7 → 716,7
mov ebx, buff
call sendflap
cmp eax, 0
jnz l_fin ; ¥ãᯥå
jnz l_fin ; ¥ãᯥå
jmp l_end
 
735,9 → 735,9
uin_loop:
xor eax, eax
mov ax, word [mbuff+ebx]
cmp ax, 0100h ; 00 01 TLV.Type UIN
jz l_uin_ok ; ’¥¯¥àì á¥à¢¥à ¯¥à¥¤ ¥â ¥é¥ ¤ ­­ë¥ ¯à¨ ᮥ¤¨­¥­¨¨,   ¯®â®¬ ®¯ïâì
add ebx, 5 ; â®â ¦¥ TLV 1
cmp ax, 0100h ; 00 01 TLV.Type UIN
jz l_uin_ok ; ’¥¯¥àì á¥à¢¥à ¯¥à¥¤ ¥â ¥é¥ ¤ ­­ë¥ ¯à¨ ᮥ¤¨­¥­¨¨,   ¯®â®¬ ®¯ïâì
add ebx, 5 ; â®â ¦¥ TLV 1
cmp ebx, 5
ja l_tlvt_err
jmp uin_loop
749,8 → 749,8
l_uin_ok:
mov eax, ebx
xor ebx, ebx
mov bl, [mbuff+eax+3] ;
mov bh, [mbuff+eax+2] ; „«¨­  ¤ ­­ëå
mov bl, [mbuff+eax+3] ;
mov bh, [mbuff+eax+2] ; „«¨­  ¤ ­­ëå
;
; UIN ®ª  ­¥ ¯à®¢¥àï¥âáï
;
758,9 → 758,9
 
lea ebx, [ebx+eax+4]
mov ax, word [mbuff+ebx]
cmp ax, 0500h ; 00 05 Bos address
cmp ax, 0500h ; 00 05 Bos address
jz l_all_ok
cmp ax, 0400h ; UIN incorrect
cmp ax, 0400h ; UIN incorrect
jz l_uin_err
cmp ax, 0800h
jz l_pass_err
771,8 → 771,8
 
l_all_ok:
xor ecx, ecx
mov cl, [mbuff+ebx+3] ;length
mov ch, [mbuff+ebx+2] ;
mov cl, [mbuff+ebx+3] ;length
mov ch, [mbuff+ebx+2] ;
lea eax, [mbuff+ebx+4]
push ebx
780,7 → 780,7
call strcpy
pop ebx
add ebx, ecx
lea ebx, [ebx+4] ;  §¬¥à § £®«®¢ª 
lea ebx, [ebx+4] ;  §¬¥à § £®«®¢ª 
;
; cookie
;
788,10 → 788,10
 
xor eax, eax
mov ax, word [mbuff+ebx]
cmp ax, 0600h ; TLV.Type cookie
cmp ax, 0600h ; TLV.Type cookie
jnz l_tlvt_err
mov cl, [mbuff+ebx+3] ;
mov ch, [mbuff+ebx+2] ; Length
mov cl, [mbuff+ebx+3] ;
mov ch, [mbuff+ebx+2] ; Length
mov [cookie_len], cx
lea eax, [mbuff+ebx+4]
push ebx
798,7 → 798,7
mov ebx, srv_cookie
call strcpy
pop ebx
;
; ‘®¥¤¨­ï¥¬áï á BOS
;
814,7 → 814,7
 
 
 
mov eax, bos_address
call ip_parser
821,12 → 821,12
call htonl
data_debug 'BOS Address: ', eax
data_debug 'BOS Port: ', ebx
mov [bos_ip], eax
mov [bos_ip], eax
mov [bos_port], ebx
call srv_connect
mov [login], 1 ; ‘®¥¤¨­¥­¨¥ á ®á­®¢­ë¬ á¥à¢¥à®¬ ãáâ ­®¢«¥­®
mov [login], 1 ; ‘®¥¤¨­¥­¨¥ á ®á­®¢­ë¬ á¥à¢¥à®¬ ãáâ ­®¢«¥­®
;mov [socket], eax
 
jmp l_end
846,7 → 846,7
jmp l_fin
 
l_len_err:
write_debug 'RECIVED DATA LENGTH MISMATCH'
write_debug 'RECEIVED DATA LENGTH MISMATCH'
jmp l_fin
 
l_tlvt_err:
858,7 → 858,7
jmp l_fin
 
l_flap_err:
write_debug 'FLAP ID MISMATCH / RECIVE ERROR'
write_debug 'FLAP ID MISMATCH / RECEIVE ERROR'
 
l_fin:
 
872,8 → 872,8
;pop ecx
pop ebx
pop eax
popf
ret
popf
ret
 
;
; Length of string
890,7 → 890,7
loop_s:
mov cl, [eax+ebx]
cmp ecx,0
jz nl
jz nl
inc ebx
jmp loop_s
 
916,7 → 916,7
 
loop_r:
mov bl, [eax+ecx] ;‘¨¬¢®« ¨§ ¬ áᨢ  ¯ à®«ï
cmp bl, 0 ;Š®­¥æ áâப¨
cmp bl, 0 ;Š®­¥æ áâப¨
jz r_fin
xor bl, [ROASTING_ARRAY+ecx]
1005,55 → 1005,55
 
xor edx, edx
 
mov dl, [eax] ; ID byte
mov dl, [eax] ; ID byte
mov [sbuff], dl
 
mov dl, [eax+1] ; FLAP channel
mov dl, [eax+1] ; FLAP channel
mov [sbuff+1], dl
 
mov dl, [eax+2] ; FLAP datagramm seq number
mov [sbuff+3], dl ; ¬¥­ï¥¬ ¬¥áâ ¬¨ ¡ ©âë ¤«ï ¯¥à¥¤ ç¨ ¯® á¥â¨
mov dl, [eax+2] ; FLAP datagramm seq number
mov [sbuff+3], dl ; ¬¥­ï¥¬ ¬¥áâ ¬¨ ¡ ©âë ¤«ï ¯¥à¥¤ ç¨ ¯® á¥â¨
mov dl, [eax+3]
mov [sbuff+2], dl
 
mov dl, [eax+4] ; FLAP data size
mov dl, [eax+4] ; FLAP data size
mov [sbuff+5], dl
mov dl, [eax+5]
mov [sbuff+4], dl
mov dx, word [eax+4]
 
xchg ecx, edx ; ecx - size edx - handle
mov eax, ebx ; data
mov ebx, sbuff ; dest
add ebx, 6 ; + header size
xchg ecx, edx ; ecx - size edx - handle
mov eax, ebx ; data
mov ebx, sbuff ; dest
add ebx, 6 ; + header size
call strcpy
 
xchg ecx, edx ; ecx - handle, edx - data size
xchg ecx, edx ; ecx - handle, edx - data size
 
s_wait:
mov eax, 53 ; à®¢¥à塞 á®áâ®ï­¨¥ ᮪¥â . …᫨ ᮥ¤¨¥­¨¥
mov ebx, 6 ; ãáâ ­®¢«¥­® - ¯®áë« ¥¬ ¡ãä¥à, ¥á«¨ ᮪¥â § ªàëâ, ã室¨¬
mov eax, 53 ; à®¢¥à塞 á®áâ®ï­¨¥ ᮪¥â . …᫨ ᮥ¤¨¥­¨¥
mov ebx, 6 ; ãáâ ­®¢«¥­® - ¯®áë« ¥¬ ¡ãä¥à, ¥á«¨ ᮪¥â § ªàëâ, ã室¨¬
int 40h
cmp eax, TCB_ESTABLISHED ; ãáâ ­®¢«¥­®
jz s_est
cmp eax, TCB_CLOSED
jz s_fin
cmp eax, 12 ; “ ¬¥­ï â ª®¥ ¡ë«®, ª®£¤  ᮥ¤¨­¥­¨¥ ãáâ ­ ¢«¨¢ «®áì á ¯ãáâ®â®© :-)
jnc s_fin ;
cmp eax, 12 ; “ ¬¥­ï â ª®¥ ¡ë«®, ª®£¤  ᮥ¤¨­¥­¨¥ ãáâ ­ ¢«¨¢ «®áì á ¯ãáâ®â®© :-)
jnc s_fin ;
 
mov eax, 5
mov ebx, 1
int 40h ; †¤¥¬
int 40h ; †¤¥¬
jmp s_wait
 
 
s_est:
mov eax, 53
mov ebx, 7 ; ¯¨á âì ¢ ᮪¥â
mov ebx, 7 ; ¯¨á âì ¢ ᮪¥â
;xchg ecx, edx ; ecx - handle, edx - data length
add edx, 6 ; + size of header
mov esi, sbuff ; data
add edx, 6 ; + size of header
mov esi, sbuff ; data
int 40h
s_fin:
1273,7 → 1273,7
push eax
push ebx
mov [flap.bId], FLAP_ID
mov [flap.bCh], 4 ;Disconnect
mov [flap.bCh], 4 ;Disconnect
xor eax, eax
mov ax, [seq]
mov [flap.wSn], ax
1339,9 → 1339,9
 
;data_debug 'Debug eax: ', eax
 
cmp ecx, 0 ; ¥ ¬®¦¥â ­ ç¨­ âìáï á â®çª¨
cmp ecx, 0 ; ¥ ¬®¦¥â ­ ç¨­ âìáï á â®çª¨
jz ip_err
shl esi, 8 ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
shl esi, 8 ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
add esi, eax
inc ecx
xor edx, edx ; ‘ç¥â稪 ¡ãä¥à  = 0
1348,25 → 1348,25
jmp ip_loop
 
 
ip_colon: ; : ‚ áâப¥  ¤à¥á 
inc edi ; ë«® :
ip_colon: ; : ‚ áâப¥  ¤à¥á 
inc edi ; ë«® :
jmp ip_dot
ip_end_str:
cmp edi, 1
jz @f
; : ¥ ¡ë«®
; : ¥ ¡ë«®
mov [par_buff+edx], 0 ; Š®­¥æ áâப¨
mov eax, par_buff
call ascitoint
shl esi, 8 ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
shl esi, 8 ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
add esi, eax
;mov eax, esi ; IP ¢ 16 à¨ç­®© ä®à¬¥
;xor ebx, ebx ; ®¬¥à  ¯®àâ  ­¥â
jmp ip_end
 
@@: ; ë«® :
mov [par_buff+edx], 0
@@: ; ë«® :
mov [par_buff+edx], 0
mov eax, par_buff
call ascitoint
mov ebx, eax
1405,10 → 1405,10
ati_loop:
mov bl, [eax+ecx]
cmp bl, 0 ; Š®­¥æ áâப¨
cmp bl, 0 ; Š®­¥æ áâப¨
jz ati_str_end
cmp bl, 39h
ja ati_err ; ¥ æ¨äà 
ja ati_err ; ¥ æ¨äà 
cmp bl, 30h
jb ati_err
 
1424,7 → 1424,7
cmp edx, ecx
jz ati_all
push eax
sub eax, edx ; ‚ëç¥áâì áç¥â稪
sub eax, edx ; ‚ëç¥áâì áç¥â稪
movzx ebx, byte [eax] ; ‚ bl ᨬ¢®«
;pop eax
sub bl, 30h ; ‚ëç¨á«ï¥¬ 10â¨ç­ãî æ¨äàã
1492,50 → 1492,50
push ebx
push edx
;xor ebx, ebx
mov esi, ecx ; 奭¤« ᮪¥â 
mov edi, ebx ; “ª § â¥«ì ­  ¤ ­­ë¥
mov esi, ecx ; 奭¤« ᮪¥â 
mov edi, ebx ; “ª § â¥«ì ­  ¤ ­­ë¥
 
xor ebx, ebx
mov bl, [eax] ;
mov bl, [eax] ;
mov [snac_buff+1], bl ; Family ID
mov bl, [eax+1] ; Š®­¢¥àâ¨àã¥âáï ¢ BigEndian
mov bl, [eax+1] ; Š®­¢¥àâ¨àã¥âáï ¢ BigEndian
mov [snac_buff], bl ;
 
mov bl, [eax+2] ;
mov bl, [eax+2] ;
mov [snac_buff+3], bl ; Subtype ID
mov bl, [eax+3] ;
mov bl, [eax+3] ;
mov [snac_buff+2], bl ;
mov bl, [eax+4] ;
mov bl, [eax+4] ;
mov [snac_buff+5], bl ;
mov bl, [eax+5] ; Flags
mov bl, [eax+5] ; Flags
mov [snac_buff+4], bl ;
 
mov bl, [eax+6] ;
mov bl, [eax+6] ;
mov [snac_buff+9], bl ;
mov bl, [eax+7] ;
mov bl, [eax+7] ;
mov [snac_buff+8], bl ;
mov bl, [eax+8] ; Reqest ID
mov bl, [eax+8] ; Reqest ID
mov [snac_buff+7], bl ;
mov bl, [eax+9] ;
mov bl, [eax+9] ;
mov [snac_buff+6], bl ;
 
lea ebx, [snac_buff+10]
lea ebx, [snac_buff+10]
mov eax, edi ; “ª § â¥«ì ­  ¤ ­­ë¥
mov eax, edi ; “ª § â¥«ì ­  ¤ ­­ë¥
;add ebx, 10 ; + à §¬¥à § £®«®¢ª  SNAC
mov ecx, edx ; à §¬¥à ¤ ­­ëå
mov ecx, edx ; à §¬¥à ¤ ­­ëå
call strcpy
 
 
mov ecx, esi ; •¥­¤« ᮪¥â 
mov ecx, esi ; •¥­¤« ᮪¥â 
mov [flap.bId], FLAP_ID
mov [flap.bCh], 2 ; Š ­ « ¤«ï ¯®á뫪¨ SNAC
mov [flap.bCh], 2 ; Š ­ « ¤«ï ¯®á뫪¨ SNAC
xor ebx, ebx
inc [seq] ; seq “¢¥«¨ç¨¢ ¥âáï ­  1 ¯à¨ ª ¦¤®© ¯®á뫪¥
inc [seq] ; seq “¢¥«¨ç¨¢ ¥âáï ­  1 ¯à¨ ª ¦¤®© ¯®á뫪¥
mov bx, [seq]
mov [flap.wSn], bx
add edx, 10 ; à §¬¥à ¤ ­­ëå + à §¬¥à § £®«®¢ª  SNAC
add edx, 10 ; à §¬¥à ¤ ­­ëå + à §¬¥à § £®«®¢ª  SNAC
mov [flap.wDs], dx
mov eax, flap
mov ebx, snac_buff
1594,21 → 1594,21
;
xor ebx, ebx
mov bl, [rflap.bCh]
cmp bl, 1 ; “áâ ­®¢ª  ᮥ¤¨­¥­¨ï
jz m_login
cmp bl, 1 ; “áâ ­®¢ª  ᮥ¤¨­¥­¨ï
jz m_login
cmp bl, 2
jz m_snac ; ®«ã祭 SNAC
jz m_snac ; ®«ã祭 SNAC
cmp bl, 3
jz m_flap_err ; FLAP-level error
jz m_flap_err ; FLAP-level error
cmp bl, 4
jz m_close_conn ; ‡ ªàë⨥ ᮥ¤¨­¥­¨ï
jz m_close_conn ; ‡ ªàë⨥ ᮥ¤¨­¥­¨ï
cmp bl, 5
jz m_keep_alive ;
jz m_keep_alive ;
;
; Ž¡à ¡®âª  à áᮥ¤¨­¥­¨ï
;
m_close_conn:
write_debug 'Another Computer Use YOUR UIN!'
write_debug 'Another Computer is Useing YOUR UIN!'
call srv_disconnect
call closesocket
jmp m_fin
1622,7 → 1622,7
xor eax, eax
mov al, [mbuff+3]
cmp eax, 1
jnz m_login_other ; ¥ ¯®¤å®¤¨â
jnz m_login_other ; ¥ ¯®¤å®¤¨â
 
 
;
1640,23 → 1640,23
mov [flap.wSn], ax
xor eax, eax
mov ax, [cookie_len]
add eax, 8 ; TLV len + protocol version len
add eax, 8 ; TLV len + protocol version len
mov [flap.wDs], ax
mov dword [buff], 01000000h ; 00 00 00 01 ®¬¥à ¯à®â®ª®« 
mov word [buff+4], 0600h ; 00 06 TLV.Type
mov word [buff+4], 0600h ; 00 06 TLV.Type
 
mov ax, [cookie_len]
mov [buff+6], ah ;
mov [buff+7], al ; TLV.Length
mov [buff+6], ah ;
mov [buff+7], al ; TLV.Length
 
mov edx, ecx ; edx <-- socket handle
mov edx, ecx ; edx <-- socket handle
 
mov ecx, eax ; ecx <-- cookie len
mov eax, srv_cookie ; Src
mov ecx, eax ; ecx <-- cookie len
mov eax, srv_cookie ; Src
lea ebx, [buff+8]
call strcpy
mov ecx, edx ; ecx <-- socket handle
mov ecx, edx ; ecx <-- socket handle
mov eax, flap
mov ebx, buff
call sendflap
1692,19 → 1692,19
mov dx, [rsnac.wSid]
 
cmp bx, 1
jz m_snac_1 ;Generic service controls
jz m_snac_1 ;Generic service controls
cmp bx, 2
jz m_snac_2 ;Location services
jz m_snac_2 ;Location services
cmp bx, 3
jz m_snac_3 ;Buddy List management service
jz m_snac_3 ;Buddy List management service
cmp bx, 4
jz m_snac_4 ;ICBM (messages) service
jz m_snac_4 ;ICBM (messages) service
cmp bx, 9
jz m_snac_9 ;Privacy management service
jz m_snac_9 ;Privacy management service
cmp bx, 015h
jz m_snac_15 ;ICQ specific extensions service
jz m_snac_15 ;ICQ specific extensions service
cmp bx, 013h
jz m_snac_13 ;Server Side Information (SSI) service
jz m_snac_13 ;Server Side Information (SSI) service
jmp m_other_snac
;
1727,7 → 1727,7
;
; Rate limits information response
;
m_snac_1_7: ; Žâ¢¥ç ¥¬
m_snac_1_7: ; Žâ¢¥ç ¥¬
mov [ssnac.wFid], 1 ; Family
mov [ssnac.wSid], 8 ; Subtype
mov [ssnac.dRi], 8
1738,7 → 1738,7
mov word [buff+8], 0500h ; 0005
mov eax, ssnac
mov ebx, buff
mov edx, 10 ;  §¬¥à ¤ ­­ëå
mov edx, 10 ;  §¬¥à ¤ ­­ëå
call sendsnac
;
; Client ask server location service limitations
1762,7 → 1762,7
;
 
;
; SNAC(01,17)
; SNAC(01,17)
; Client ask for services version numbers
;
mov [ssnac.wFid], 1 ; Family
1771,9 → 1771,9
;
; ‘¯¨á®ª á¥à¢¨á®¢, ª®â®àë¥ ­ ¬ ­ã¦­ë
;
; xx xx word family number #1
; xx xx word family version
; ... ... ...
; xx xx word family number #1
; xx xx word family version
; ... ... ...
;
 
;
1881,7 → 1881,7
 
 
m_snac_1_other:
data_debug 'Unknown SNAC Family 1 recived, type ', edx
data_debug 'Unknown SNAC Family 1 received, type ', edx
jmp m_fin
 
 
1934,7 → 1934,7
 
mov eax, ssnac
mov ebx, buff
mov edx, C_LEN+4 ; „«¨­  ¤ ­­ëå+à §¬¥à § £®«®¢ª  TLV
mov edx, C_LEN+4 ; „«¨­  ¤ ­­ëå+à §¬¥à § £®«®¢ª  TLV
call sendsnac
 
;
1982,7 → 1982,7
;
mov [ssnac.wFid], 4 ; Family
mov [ssnac.wSid], 4 ; Subtype
mov [ssnac.dRi], 4 ; request-id
mov [ssnac.dRi], 4 ; request-id
mov eax, ssnac
mov ebx, buff
xor edx, edx
1999,18 → 1999,18
;
; ˆ§ ¢á¥© ¨­ä®à¬ æ¨¨ ¯®ª  ­ã¦¥­ ⮫쪮 áâ âãá
;
xor edx, edx ; ‘ç¥â稪
xor edx, edx ; ‘ç¥â稪
xor ecx, ecx
xor eax, eax
cld ; ‚ ­ ¯à ¢«¥­¨¨ 㢥«¨ç¥­¨ï  ¤à¥á®¢
cld ; ‚ ­ ¯à ¢«¥­¨¨ 㢥«¨ç¥­¨ï  ¤à¥á®¢
 
dec edx
m_snac_3_b_loop:
inc edx
cmp edx, UINS
jnc m_snac_3_b_end ;>=
jnc m_snac_3_b_end ;>=
 
mov cl, [mbuff+10] ; „«¨­  “ˆ
mov cl, [mbuff+10] ; „«¨­  “ˆ
mov eax, ecx
mov edi, UIN_LEN
imul edi ,edx
2023,11 → 2023,11
; UIN Ž¯à¥¤¥«¥­
;
 
lea ecx, [eax+10+11] ; +sizeof SNAC_head + offset #2 TLV
mov ax, word [mbuff+ecx] ;#2 TLV.Type
cmp ax, 0C00h ;dc info (optional)
lea ecx, [eax+10+11] ; +sizeof SNAC_head + offset #2 TLV
mov ax, word [mbuff+ecx] ;#2 TLV.Type
cmp ax, 0C00h ;dc info (optional)
jz m_snac_3_b_dc
cmp ax, 0A00h ;external ip address
cmp ax, 0A00h ;external ip address
jz m_snac_3_b_extip
jmp m_snac_3_b_bad_tlv
2042,7 → 2042,7
; ˆ íâ®â :-)
lea ecx, [ecx+8]
mov ax, word [mbuff+ecx]
cmp ax, 0600h ;TLV.Type(0x0A) - external ip address
cmp ax, 0600h ;TLV.Type(0x0A) - external ip address
jz m_snac_3_b_status
jmp m_snac_3_b_bad_tlv
 
2085,9 → 2085,9
m_snac_3_c_loop:
inc edx
cmp edx, UINS
jnc m_snac_3_b_end ;>=
jnc m_snac_3_b_end ;>=
 
mov cl, [mbuff+10] ; „«¨­  “ˆ
mov cl, [mbuff+10] ; „«¨­  “ˆ
mov edi, UIN_LEN
imul edi ,edx
lea edi, [uins+edi]
2115,7 → 2115,7
 
 
m_snac_3_other:
write_debug 'Unknown SNAC Family 3 Recived'
write_debug 'Unknown SNAC Family 3 Received'
jmp m_fin
 
 
2142,7 → 2142,7
;
mov [ssnac.wFid], 4 ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
 
mov eax, ICBM_PARAMS
mov ebx, buff
2161,7 → 2161,7
;
mov [ssnac.wFid], 9 ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
mov eax, ssnac
mov ebx, buff
xor edx, edx
2178,9 → 2178,9
; Ž¯à¥¤¥«ï¥¬ ⨯ á®®¡é¥­¨ï ¯® ¯®«î message channel
;
xor eax, eax
mov ax, word [mbuff+10+8] ; +10 - à §¬¥à SNAC
; +8 ᬥ饭¨¥ ¤® message channel
cmp ax, 0100h ; 00 01
mov ax, word [mbuff+10+8] ; +10 - à §¬¥à SNAC
; +8 ᬥ饭¨¥ ¤® message channel
cmp ax, 0100h ; 00 01
jz m_snac_ch1
cmp ax, 0200h
jz m_snac_ch2
2195,42 → 2195,42
; ’.ª ¢ ®ç¥à¥¤­®© à § ®¯¨á ­¨¥ ¯à®â®ª®«  ­¥ ᮢ¯ ¤ ¥â á ॠ«ì­®áâìî
; à §¡¨à ¥¬ ¢á¥ TLV ¯® ¯®à浪ã
 
mov eax, dword [mbuff+10] ; cookie
mov eax, dword [mbuff+10] ; cookie
mov [msg_cookie1], eax
mov eax, dword [mbuff+10+4]
mov [msg_cookie2], eax ; ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
mov [msg_cookie2], eax ; ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
 
mov al, [mbuff+10+10] ; Sender UIN length
mov al, [mbuff+10+10] ; Sender UIN length
mov [ui.bUinLength], al
 
push ecx
movzx ecx, al
 
lea eax, [mbuff+10+11] ; UIN string
lea ebx, [ui.bUin] ; Dest
lea eax, [mbuff+10+11] ; UIN string
lea ebx, [ui.bUin] ; Dest
call strcpy
 
lea ecx, [ecx+10+15] ; ¯¥à¢ë© TLV
lea ecx, [ecx+10+15] ; ¯¥à¢ë© TLV
 
m_snac_ch1_loop:
 
movzx eax, word [mbuff+ecx]
cmp eax, 0100h ;TLV.Type(0x01) - user class
cmp eax, 0100h ;TLV.Type(0x01) - user class
jz m_snac_ch1_1
cmp eax, 0600h ;TLV.Type(0x06) - user status
cmp eax, 0600h ;TLV.Type(0x06) - user status
jz m_snac_ch1_6
cmp eax, 0800h ; Unknown type
cmp eax, 0800h ; Unknown type
jz m_snac_ch1_8
cmp eax, 0500h ; Unknown type
cmp eax, 0500h ; Unknown type
jz m_snac_ch1_5
cmp eax, 0F00h ; TLV.Type(0x0f) - user idle time
cmp eax, 0F00h ; TLV.Type(0x0f) - user idle time
jz m_snac_ch1_f
cmp eax, 0300h ; TLV.Type(0x03) - account creation time
cmp eax, 0300h ; TLV.Type(0x03) - account creation time
jz m_snac_ch1_3
cmp eax, 0400h ; TLV.Type(0x04) - automated response flag
cmp eax, 0400h ; TLV.Type(0x04) - automated response flag
jz m_snac_ch1_4
cmp eax, 0200h ; TLV.Type(0x02) - message data
cmp eax, 0200h ; TLV.Type(0x02) - message data
jz m_snac_ch1_mess
jmp m_snac_msg_tlv_err
 
2239,7 → 2239,7
; ­® ¯®ª  ­¥â
 
m_snac_ch1_1:
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
jmp m_snac_ch1_loop
2246,12 → 2246,12
 
m_snac_ch1_6:
 
mov eax, dword [mbuff+ecx+4] ; User status
mov eax, dword [mbuff+ecx+4] ; User status
call ntohl
mov [ui.dUserStatus], eax
 
 
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
;
2261,25 → 2261,25
jmp m_snac_ch1_loop
 
m_snac_ch1_8:
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
jmp m_snac_ch1_loop
 
m_snac_ch1_5:
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
jmp m_snac_ch1_loop
 
m_snac_ch1_f:
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
jmp m_snac_ch1_loop
 
m_snac_ch1_3:
movzx eax, word [mbuff+ecx+2] ; TLV.Length
movzx eax, word [mbuff+ecx+2] ; TLV.Length
call ntohs
lea ecx, [eax+ecx+4]
jmp m_snac_ch1_loop
2296,16 → 2296,16
;
;
movzx eax, word [mbuff+ecx+4] ;
cmp eax, 0105h ; 05 fragment identifier (array of required capabilities)
jnz m_snac_ch1_fr_err ; 01 fragment version
cmp eax, 0105h ; 05 fragment identifier (array of required capabilities)
jnz m_snac_ch1_fr_err ; 01 fragment version
 
movzx eax, word [mbuff+ecx+6] ; Length
call ntohs
 
lea ecx, [ecx+eax+8] ; à®¯ã᪠¥¬ byte array of required capabilities (1 - text)
lea ecx, [ecx+eax+8] ; à®¯ã᪠¥¬ byte array of required capabilities (1 - text)
 
movzx eax, word [mbuff+ecx] ; fragment identifier (message text)
cmp eax, 0101h ; fragment version
movzx eax, word [mbuff+ecx] ; fragment identifier (message text)
cmp eax, 0101h ; fragment version
jnz m_snac_ch1_fr_err
 
movzx eax, word [mbuff+ecx+2] ; TLV Length
2312,8 → 2312,8
call ntohs
xchg eax, ecx
 
lea eax, [eax+8] ;  ç «® ⥪á⮢®£® á®®¡é¥­¨ï
lea ecx, [ecx-4] ; - sizeof Message charset number, Message charset subset
lea eax, [eax+8] ;  ç «® ⥪á⮢®£® á®®¡é¥­¨ï
lea ecx, [ecx-4] ; - sizeof Message charset number, Message charset subset
 
push eax
push ecx
2394,14 → 2394,14
mov eax, dword [mbuff+10+4]
mov [msg_cookie2], eax
 
mov al, [mbuff+10+10] ; Sender UIN length
mov al, [mbuff+10+10] ; Sender UIN length
mov [ui.bUinLength], al
 
push ecx
movzx ecx, al
 
lea eax, [mbuff+10+11] ; UIN string
lea ebx, [ui.bUin] ; Dest
lea eax, [mbuff+10+11] ; UIN string
lea ebx, [ui.bUin] ; Dest
call strcpy
 
 
2413,7 → 2413,7
mov dword [buff], eax
mov eax, [msg_cookie2]
mov dword [buff+4], eax
mov word [buff+8], 0200h ; Channel 2
mov word [buff+8], 0200h ; Channel 2
 
mov al, [ui.bUinLength]
mov [buff+10], al
2422,7 → 2422,7
call strcpy
lea ecx, [ecx+11]
 
mov word [buff+ecx], 0100h ; reason code (1 - unsupported channel, 2 - busted payload, 3 - channel specific)
mov word [buff+ecx], 0100h ; reason code (1 - unsupported channel, 2 - busted payload, 3 - channel specific)
mov edx, ecx
 
pop ecx
2447,7 → 2447,7
 
 
m_snac_4_other:
write_debug 'Unknown SNAC Family 4 recived'
write_debug 'Unknown SNAC Family 4 received'
jmp m_fin
 
 
2496,7 → 2496,7
 
mov eax, ssnac
mov ebx, buff
xor edx, edx ; TLV head len
xor edx, edx ; TLV head len
call sendsnac
 
 
2507,10 → 2507,10
mov [ssnac.wSid], 1Eh ; Subtype
mov [ssnac.dRi], 1Eh ; request-id
 
mov [buff], 0 ; TLV type 06
mov [buff+1], 6h ;
mov [buff+2], 0 ; TLV data length
mov [buff+3], 4 ;
mov [buff], 0 ; TLV type 06
mov [buff+1], 6h ;
mov [buff+2], 0 ; TLV data length
mov [buff+3], 4 ;
;
;
mov ax, STATUS_DCDISABLED ; DC disabled
2522,7 → 2522,7
 
mov eax, ssnac
mov ebx, buff
mov edx, 8 ; TLV head len+ data len
mov edx, 8 ; TLV head len+ data len
call sendsnac
 
 
2562,12 → 2562,12
call ascitoint
mov dword [buff+6], eax
 
mov word [buff+12], 0102h ; request sequence number (incrementing)
mov word [buff+14], 0424h ; META_SET_PERMS_USERINFO
mov [buff+16], 1 ; authorization (1-required, 0-not required)
mov [buff+17], byte 0 ; webaware (0-no, 1-yes)
mov [buff+18], 1 ; dc_perms (0-any, 1-contact, 2-authorization)
mov [buff+19], 0 ;unknown
mov word [buff+12], 0102h ; request sequence number (incrementing)
mov word [buff+14], 0424h ; META_SET_PERMS_USERINFO
mov [buff+16], 1 ; authorization (1-required, 0-not required)
mov [buff+17], byte 0 ; webaware (0-no, 1-yes)
mov [buff+18], 1 ; dc_perms (0-any, 1-contact, 2-authorization)
mov [buff+19], 0 ;unknown
 
mov eax, ssnac
mov ebx, buff
2579,7 → 2579,7
;
mov [ssnac.wFid], 1 ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
 
mov eax, FAMILY_ARR
mov ebx, buff
2599,11 → 2599,11
;
mov [ssnac.wFid], 15h ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
 
mov word [buff], 0100h ; TLV type 01
mov word [buff+2], 0A00h ; 00 0a „«¨­ 
mov word [buff+4], 0008h ; 08 00
mov word [buff], 0100h ; TLV type 01
mov word [buff+2], 0A00h ; 00 0a „«¨­ 
mov word [buff+4], 0008h ; 08 00
mov eax, UIN
call ascitoint
mov dword [buff+6], eax
2631,7 → 2631,7
jmp m_fin
 
m_snac_9_other:
write_debug 'Unknown SNAC Family 9 Recived'
write_debug 'Unknown SNAC Family 9 Received'
jmp m_fin
 
 
2655,20 → 2655,20
;
 
;
; SNAC(13,05) Client check if its local SSI copy is up-to-date
; SNAC(13,05) Client check if its local SSI copy is up-to-date
;
mov [ssnac.wFid], 13h ; Family
mov [ssnac.wSid], 5 ; Subtype
mov [ssnac.dRi], 5 ; request-id
mov [ssnac.dRi], 5 ; request-id
mov eax, ssnac
; 3D E7 48 17
mov [buff], 03Dh ;
mov [buff+1], 0E7h ; modification date/time of client local SSI copy
mov [buff+2], 48h ;
mov [buff+3], 17h ;
mov [buff], 03Dh ;
mov [buff+1], 0E7h ; modification date/time of client local SSI copy
mov [buff+2], 48h ;
mov [buff+3], 17h ;
; 00 10
mov [buff+4], 00 ;
mov [buff+5], 10h ; number of items in client local SSI copy
mov [buff+4], 00 ;
mov [buff+5], 10h ; number of items in client local SSI copy
mov ebx, buff
mov edx, 5
2689,7 → 2689,7
;
mov [ssnac.wFid], 13h ; Family
mov [ssnac.wSid], 7 ; Subtype
mov [ssnac.dRi], 7 ; request-id
mov [ssnac.dRi], 7 ; request-id
mov eax, ssnac
mov ebx, buff
xor edx, edx
2706,10 → 2706,10
mov [ssnac.wSid], 1Eh ; Subtype
mov [ssnac.dRi], 1Eh ; request-id
 
mov [buff], 0 ; TLV type 06
mov [buff+1], 6h ;
mov [buff+2], 0 ; TLV data length
mov [buff+3], 4 ;
mov [buff], 0 ; TLV type 06
mov [buff+1], 6h ;
mov [buff+2], 0 ; TLV data length
mov [buff+3], 4 ;
;
;
mov ax, STATUS_DCDISABLED ; DC disabled
2721,7 → 2721,7
 
mov eax, ssnac
mov ebx, buff
mov edx, 8 ; TLV head len+ data len
mov edx, 8 ; TLV head len+ data len
call sendsnac
 
;
2729,7 → 2729,7
;
mov [ssnac.wFid], 1 ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
 
mov eax, FAMILY_ARR
mov ebx, buff
2749,11 → 2749,11
;
mov [ssnac.wFid], 15h ; Family
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 2 ; request-id
mov [ssnac.dRi], 2 ; request-id
 
mov word [buff], 0100h ; TLV type 01
mov word [buff+2], 0A00h ; 00 0a „«¨­ 
mov word [buff+4], 0008h ; 08 00
mov word [buff], 0100h ; TLV type 01
mov word [buff+2], 0A00h ; 00 0a „«¨­ 
mov word [buff+4], 0008h ; 08 00
mov eax, UIN
call ascitoint
mov dword [buff+6], eax
2772,7 → 2772,7
jmp m_fin
 
m_snac_13_other:
write_debug 'Unknown SNAC Family 13 Recived'
write_debug 'Unknown SNAC Family 13 Received'
jmp m_fin
 
 
2802,13 → 2802,13
 
xor eax, eax
mov ax, word [mbuff+10] ; + SNAC.head size
cmp ax, 0100h ; 00 01 TLV type
cmp ax, 0100h ; 00 01 TLV type
jnz m_snac_tlv_err
 
mov ax, word [mbuff+10+10]
cmp ax, 0041h ; Offline Message
cmp ax, 0041h ; Offline Message
jz m_snac_offline_mes
cmp ax, 0042h ; End messages
cmp ax, 0042h ; End messages
jz m_snac_offline_end
cmp ax, 07DAh
jz m_snac_meta_data
2818,16 → 2818,16
jmp m_fin
 
m_snac_offline_mes:
mov eax, MESS ;
call strlen ; ‚뢮¤¨¬ áâபã á á®®¡é¥­¨¥¬ ® ®â¯à ¢¨â¥«¥ ¨ ¢à¥¬¥­¨ ®â¯à ¢ª¨
push ecx ;
mov ecx, eax ;
mov eax, MESS ;
call strlen ; ‚뢮¤¨¬ áâபã á á®®¡é¥­¨¥¬ ® ®â¯à ¢¨â¥«¥ ¨ ¢à¥¬¥­¨ ®â¯à ¢ª¨
push ecx ;
mov ecx, eax ;
mov eax, MESS
mov ebx, buff
call strcpy
 
mov eax, dword [mbuff+14+10] ; Sender UIN
lea ebx, [buff+ecx] ; ®á«¥ áâà®çª¨ ® á®®¡é¥­¨¨
mov eax, dword [mbuff+14+10] ; Sender UIN
lea ebx, [buff+ecx] ; ®á«¥ áâà®çª¨ ® á®®¡é¥­¨¨
call int2strd
 
lea ebx, [ebx+eax]
2834,8 → 2834,8
mov [ebx], byte ' '
inc ebx
 
; + „«¨­  UIN
movzx eax, byte [mbuff+21+10] ; Day
; + „«¨­  UIN
movzx eax, byte [mbuff+21+10] ; Day
call int2strd
 
lea ebx, [ebx+eax]
2843,7 → 2843,7
inc ebx
 
movzx eax, byte [mbuff+20+10] ;Mounth
movzx eax, byte [mbuff+20+10] ;Mounth
call int2strd
 
lea ebx, [ebx+eax]
2850,7 → 2850,7
mov [ebx], byte ' '
inc ebx
 
movzx eax, [mbuff+22+10] ; Hour
movzx eax, [mbuff+22+10] ; Hour
call int2strd
 
lea ebx, [ebx+eax]
2857,7 → 2857,7
mov [ebx], byte ':'
inc ebx
 
movzx eax, [mbuff+23+10] ; Minute
movzx eax, [mbuff+23+10] ; Minute
call int2strd
 
lea ebx, [ebx+eax]
2864,13 → 2864,13
;mov [ebx], byte ' '
;inc ebx
 
mov [ebx], byte 0 ; Str end
mov [ebx], byte 0 ; Str end
mov eax, buff
xor ebx, ebx
 
call writemsg
 
movzx ecx, word [mbuff+26+10] ; „«¨­  á®®®¡é¥­¨ï
movzx ecx, word [mbuff+26+10] ; „«¨­  á®®®¡é¥­¨ï
lea eax, [mbuff+28+10]
mov ebx, buff
call strcpy
2878,9 → 2878,9
mov [ebx+ecx], byte 0
 
mov eax, buff
call win2dos ;¯¥à¥ª®¤¨à㥬
call win2dos ;¯¥à¥ª®¤¨à㥬
 
mov ebx, 00FF0000h ;–¢¥â
mov ebx, 00FF0000h ;–¢¥â
 
call writemsg
 
2898,16 → 2898,16
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 0602h ; request-id
 
mov word [buff], 0100h ; 00 01 TLV.Type(1) - encapsulated META_DATA1
mov word [buff+2], 0A00h ; 00 0A TLV.Length
mov word [buff+4], 0008h ; 08 00 data chunk size (TLV.Length-2)
mov word [buff], 0100h ; 00 01 TLV.Type(1) - encapsulated META_DATA1
mov word [buff+2], 0A00h ; 00 0A TLV.Length
mov word [buff+4], 0008h ; 08 00 data chunk size (TLV.Length-2)
mov eax, UIN
call ascitoint
mov dword [buff+6], eax ; xx xx xx xx (LE) client uin
mov word [buff+10], 003Eh ; 3E 00 (LE) data type: delete offline msgs request cmd
mov word [buff+12], 0007h ; xx xx (LE) request sequence number
mov word [buff+10], 003Eh ; 3E 00 (LE) data type: delete offline msgs request cmd
mov word [buff+12], 0007h ; xx xx (LE) request sequence number
 
mov edx, 14 ;  §¬¥à ¤ ­­ëå
mov edx, 14 ;  §¬¥à ¤ ­­ëå
mov eax, ssnac
mov ebx, buff
call sendsnac
2924,10 → 2924,10
; Ž¯à¥¤¥«ï¥¬ ®ç¥à¥¤­®© ¯®¤â¨¯ :-)
;
mov ax, word [mbuff+10+14]
cmp ax, 0104h ;data subtype: META_SHORT_USERINFO
cmp ax, 0104h ;data subtype: META_SHORT_USERINFO
jz m_snac_short_userinfo
cmp ax, 00C8h
jz m_snac_basic_userinfo ;data subtype: META_BASIC_USERINFO
jz m_snac_basic_userinfo ;data subtype: META_BASIC_USERINFO
write_debug 'Unknown META DATA subtype'
jmp m_fin
 
2938,13 → 2938,13
; ˆ§ ¢á¥© ¨­ä®à¬ æ¨¨ ¯®ª  ­ã¦¥­ ⮫쪮 ­¨ª
;
mov al, [mbuff+10+16]
cmp al, 0Ah ;success byte
cmp al, 0Ah ;success byte
jnz m_fin
 
movzx eax, word [mbuff+10+12] ;request sequence number
;
; ‚ § ¯à®á¥ ï ¨á¯®«ì§®¢ « ¯®à浪®¢ë© ­®¬¥à î§¥à  ¢ Š‹
lea ebx, [mbuff+10+19] ;nickname string
lea ebx, [mbuff+10+19] ;nickname string
; „«¨­  áâப¨ ­¥ ­ã¦­ , â.ª. áâப  Null-Terminated
;Ž¯à¥¤¥«ï¥¬ áâ âãá
mov ecx, 4
2963,13 → 2963,13
;
m_snac_basic_userinfo:
mov al, [mbuff+10+16]
cmp al, 0Ah ;success byte
cmp al, 0Ah ;success byte
jnz m_fin
 
movzx eax, word [mbuff+10+12] ;request sequence number
;
; ‚ § ¯à®á¥ ï ¨á¯®«ì§®¢ « ¯®à浪®¢ë© ­®¬¥à î§¥à  ¢ Š‹
lea ebx, [mbuff+10+19] ;nickname string
lea ebx, [mbuff+10+19] ;nickname string
; „«¨­  áâப¨ ­¥ ­ã¦­ , â.ª. áâப  Null-Terminated
;Ž¯à¥¤¥«ï¥¬ áâ âãá
mov ecx, 4
2990,13 → 2990,13
 
m_snac_15_other:
 
write_debug 'Unknown SNAC Family 15 Recived'
write_debug 'Unknown SNAC Family 15 Received'
 
jmp m_fin
 
 
m_other_snac:
write_debug 'Unknown SNAC recived'
write_debug 'Unknown SNAC received'
jmp m_fin
 
 
3069,26 → 3069,26
push ecx
;push edx
 
mov cl, [ebx+1] ; Family (service) id number ¬« ¤è¨© ¡ ©â
mov ch, [ebx] ; áâ à訩
mov cl, [ebx+1] ; Family (service) id number ¬« ¤è¨© ¡ ©â
mov ch, [ebx] ; áâ à訩
mov word [eax], cx
 
mov cl, [ebx+3] ; Family subtype id number
mov ch, [ebx+2] ;
mov cl, [ebx+3] ; Family subtype id number
mov ch, [ebx+2] ;
mov word [eax+2], cx
 
mov cl, [ebx+5] ; SNAC flags
mov ch, [ebx+4] ;
mov cl, [ebx+5] ; SNAC flags
mov ch, [ebx+4] ;
mov word [eax+4], cx ;
mov cl, [ebx+7] ;
mov ch, [ebx+6] ;
mov cl, [ebx+7] ;
mov ch, [ebx+6] ;
mov word [eax+8], cx ; SNAC request id
mov cl, [ebx+8] ;
mov ch, [ebx+7] ;
mov cl, [ebx+8] ;
mov ch, [ebx+7] ;
mov word [eax+6], cx ;
add ebx, 10 ; §¬¥à § £®«®¢ª 
add ebx, 10 ; §¬¥à § £®«®¢ª 
mov eax, ebx
 
 
3151,48 → 3151,48
call strcpy
lea ecx, [ecx+11]
 
mov word [buff+ecx], 0200h ; TLV.Type(0x02) - message data
mov word [buff+ecx], 0200h ; TLV.Type(0x02) - message data
;push ecx ;
; TLV.Length
; TLV.Length
 
mov word [buff+ecx+4], 0105h ; 05 01 01 - fragment version, 05 - fragment identifier
mov word [buff+ecx+4], 0105h ; 05 01 01 - fragment version, 05 - fragment identifier
mov word [buff+ecx+6], 0100h ; data length
mov word [buff+ecx+6], 0100h ; data length
mov [buff+ecx+8], 01 ; byte array of required capabilities (1 - text)
mov [buff+ecx+8], 01 ; byte array of required capabilities (1 - text)
 
mov [buff+ecx+9], 01 ; fragment identifier (text message)
mov [buff+ecx+10], 01 ; fragment version
mov [buff+ecx+9], 01 ; fragment identifier (text message)
mov [buff+ecx+10], 01 ; fragment version
 
pop ebx
mov eax, ebx
call strlen
mov edx, eax
lea eax, [eax+4] ; „«¨­  á®®¡é¥­¨ï + Message charset number+ Message language number
lea eax, [eax+4] ; „«¨­  á®®¡é¥­¨ï + Message charset number+ Message language number
call htons
mov word [buff+ecx+11], ax
 
mov eax, edx
lea eax, [eax+13] ; + ¤«¨­  á«ã¦¥¡­ëå ¤ ­­ëå
lea eax, [eax+13] ; + ¤«¨­  á«ã¦¥¡­ëå ¤ ­­ëå
call htons
mov word [buff+ecx+2], ax
 
 
mov word [buff+ecx+13], 0700h ; Message charset number
mov word [buff+ecx+15], 0300h ; Message language number
mov word [buff+ecx+13], 0700h ; Message charset number
mov word [buff+ecx+15], 0300h ; Message language number
 
mov eax, ecx
mov ecx, edx ; Len
mov ecx, edx ; Len
lea edx, [eax+17]
 
mov eax, ebx ;Source
mov eax, ebx ;Source
lea ebx, [buff+edx] ;Dest
lea ebx, [buff+edx] ;Dest
call strcpy
lea ecx, [ecx+edx] ; +String length
lea ecx, [ecx+edx] ; +String length
mov [buff+ecx], byte 0
mov eax, ebx
3199,10 → 3199,10
call dos2win
 
 
mov word [buff+ecx], 0600h ; TLV.Type(0x06) - store message if recipient offline
mov word [buff+ecx+2], 0 ; TLV.Length
mov word [buff+ecx], 0600h ; TLV.Type(0x06) - store message if recipient offline
mov word [buff+ecx+2], 0 ; TLV.Length
 
lea edx, [ecx+4] ; +TLV_head length
lea edx, [ecx+4] ; +TLV_head length
mov eax, ssnac
mov ebx, buff
mov ecx, [socket]
3228,30 → 3228,30
mov [ssnac.wSid], 2 ; Subtype
mov [ssnac.dRi], 702h ; request-id
 
mov word [buff], 0100h ;TLV.Type(1) - encapsulated META_DATA
mov word [buff+2], 1000h ; 00 10 TLV.Length
mov word [buff+4], 000Eh ; (LE) data chunk size (TLV.Length-2)
mov word [buff], 0100h ;TLV.Type(1) - encapsulated META_DATA
mov word [buff+2], 1000h ; 00 10 TLV.Length
mov word [buff+4], 000Eh ; (LE) data chunk size (TLV.Length-2)
mov eax, UIN
call ascitoint
mov dword [buff+6], eax ;(LE) request owner uin
mov word [buff+10], 07D0h ;data type: META_DATA_REQ
mov dword [buff+6], eax ;(LE) request owner uin
mov word [buff+10], 07D0h ;data type: META_DATA_REQ
;mov word [buff+12], 0008h ; request sequence number <<<-- Œ®¦¥â ¬¥­ïâìáï FIXIT
mov word [buff+14], 04BAh ; data subtype: META_SHORTINFO_REQUEST
mov word [buff+14], 04BAh ; data subtype: META_SHORTINFO_REQUEST
 
mov ecx, [socket]
mov edx, 20
 
xor esi, esi ; ‘ç¥â稪
xor esi, esi ; ‘ç¥â稪
xor eax, eax
 
gi_loop:
mov ebx, esi
mov word [buff+12], bx ; request sequence number
mov word [buff+12], bx ; request sequence number
mov ebx, UIN_LEN
imul ebx, esi
mov al, [uins+ebx]
cmp al, 0
jz gi_end
jz gi_end
 
lea eax, [uins+ebx]
call ascitoint
3287,10 → 3287,10
;
mov [ssnac.wFid], 3 ; Family
mov [ssnac.wSid], 4 ; Subtype
mov [ssnac.dRi], 4 ; request-id
mov [ssnac.dRi], 4 ; request-id
 
xor esi, esi ; ‘ç¥â稪
xor edx, edx ; ‡ ¯®«­¥­® ¡ ©â
xor esi, esi ; ‘ç¥â稪
xor edx, edx ; ‡ ¯®«­¥­® ¡ ©â
 
ukk_loop:
mov ebx, UIN_LEN
3337,11 → 3337,11
cmp [login], 2
jnz @f
mov ax, [timer]
cmp ax, 300 ;60 c
cmp ax, 300 ;60 c
jb @f
mov [timer], 0
mov [flap.bId], FLAP_ID
mov [flap.bCh], 5 ;Keep alive
mov [flap.bCh], 5 ;Keep alive
mov [flap.wDs], 0
inc [seq]
mov ax, [seq]
3363,7 → 3363,7
; <--- initialised data --->
DATA
lsz header,\
ru, "KI",\
ru, "KI",\
en, "KI",\
fr, "KI"
 
3383,7 → 3383,7
ssnac SNAC_head ; ¤«ï ¯¥à¥¤ ç¨ SNAC
rsnac SNAC_head ; ¤«ï ¯à¨­ï⮣® SNAC
;
ui UI_head ; User info
ui UI_head ; User info
;
procinfo process_information
;
3392,9 → 3392,9
ID_STRING db 'ICQ Inc. - Product of ICQ (TM).2000b.4.65.1.3281.85',0
;ID_STRING db 'ICQ Inc. - Product of ICQ (TM).2001b.5.17.1.3642.85',0
CAPABILITIES db 053h, 054h, 0, 0, 097h, 0B1h, 027h, 051h, 024h, 03Ch, 043h, 034h, 0ADh, 022h, 0D6h, 0ABh,\
0F7h, 03Fh, 014h, 092h, 02Eh, 07Ah, 064h, 075h, 0FAh, 0DFh, 04Dh, 0C8h, 088h, 06Fh, 0EAh, 035h,\
095h, 0FDh, 0B6h, 0DFh, 09h, 046h, 013h, 044h, 04Ch, 07Fh, 011h, 0D1h, 082h, 022h, 044h, 045h,\
053h, 054h, 0, 0
0F7h, 03Fh, 014h, 092h, 02Eh, 07Ah, 064h, 075h, 0FAh, 0DFh, 04Dh, 0C8h, 088h, 06Fh, 0EAh, 035h,\
095h, 0FDh, 0B6h, 0DFh, 09h, 046h, 013h, 044h, 04Ch, 07Fh, 011h, 0D1h, 082h, 022h, 044h, 045h,\
053h, 054h, 0, 0
;
; From &RQ
;
3410,17 → 3410,17
C_LEN = 40h
;C_LEN = 80
ICBM_PARAMS db 0, 0, 0, 0, 0, 0Bh, 01Fh, 040h, 3, 0E7h, 3, 0E7h, 0, 0, 0, 0
ICBMP_LEN = 16 ; ^^^ from &RQ
ICBMP_LEN = 16 ; ^^^ from &RQ
 
 
;
; from &rq
;
FAMILY_ARR db 0x00, 0x01, 0x00, 0x03, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x13, 0x00, 0x02, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x02, 0x00, 0x01, 0x01, 0x01, 0x04, 0x7B, 0x00, 0x03, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x15, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x04, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x06, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x09, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x0A, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x06, 0x6A
FAMILY_ARR db 0x00, 0x01, 0x00, 0x03, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x13, 0x00, 0x02, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x02, 0x00, 0x01, 0x01, 0x01, 0x04, 0x7B, 0x00, 0x03, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x15, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x04, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x06, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x09, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\
0x00, 0x0A, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B, 0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x06, 0x6A
 
 
 
3445,32 → 3445,32
CL_COUNTRY db 'us',0
 
sbuff db 1024 dup 0 ; ãä¥à ¤«ï ¯¥à¥¤ ç¨ ¨á¯®«ì§ã¥âáï ¢­ãâਠsendflap
sbuff db 1024 dup 0 ; ãä¥à ¤«ï ¯¥à¥¤ ç¨ ¨á¯®«ì§ã¥âáï ¢­ãâਠsendflap
 
rbuff db 1024 dup 0 ; à¨¥¬­ë© ¡ãä¥à
tbuff db 512 dup 0 ; „«ï TLV
rbuff db 1024 dup 0 ; à¨¥¬­ë© ¡ãä¥à
tbuff db 512 dup 0 ; „«ï TLV
srv_cookie db 512 dup 0 ; Šãª¨ ¤«ï  ¢â®à¨§ æ¨¨
bos_address db 128 dup 0 ; €¤à¥á BOS á¥à¢¥à 
cookie_len dw 0 ; „«¨­  ªãª¨
seq dw 0 ; Sequence number
cookie_len dw 0 ; „«¨­  ªãª¨
seq dw 0 ; Sequence number
bos_ip dd 0
bos_port dd 0
status dw 0 ; status
status dw 0 ; status
 
mbuff db 2048 dup 0 ; „«ï ¯à¨¥¬ 
MBUFF_SIZE = 2048
mbuff db 2048 dup 0 ; „«ï ¯à¨¥¬ 
MBUFF_SIZE = 2048
 
hrf db 0 ; ”« £ ¯à¨¥¬  § £®«®¢ª 
hrf db 0 ; ”« £ ¯à¨¥¬  § £®«®¢ª 
 
mouse_flag dd 0
socket dd 0
login db 0
 
msg_cookie1 dd 0 ; ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
msg_cookie2 dd 0 ;
msg_cookie1 dd 0 ; ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
msg_cookie2 dd 0 ;
 
curruser db 0 ; ⥪ã騩 ¯®«ì§®¢ â¥«ì, ª®â®à®¬ã ¡ã¤ãâ ®â¯à ¢«ïâìáï á®®¡é¥­¨ï
; - ®¬¥à ¢ Š‹ ¯® ¯®à浪ã
curruser db 0 ; ⥪ã騩 ¯®«ì§®¢ â¥«ì, ª®â®à®¬ã ¡ã¤ãâ ®â¯à ¢«ïâìáï á®®¡é¥­¨ï
; - ®¬¥à ¢ Š‹ ¯® ¯®à浪ã
 
 
timer dw 0