Subversion Repositories Kolibri OS

Rev

Rev 2296 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ; compiler:     FASM 1.67.21
  2. ; name:         ICQ client for Kolibri
  3. ; version:      0.1.30
  4. ; written by:   LV
  5. ; e-mail:       lv4evil@yandex.ru
  6.  
  7.  
  8. include "lang.inc"
  9. include "macros.inc"
  10. ;purge mov
  11. ;include "ASCL9/ascl.inc"
  12. ;include "../../../debug.inc"
  13. include "editbox.inc"
  14.  
  15. MEOS_APP_START
  16.  
  17. ;include "../../../debug.inc"
  18. include "2000.inc"
  19. include "comp.inc"
  20. ;include "fsio.inc"
  21. include "dos2win.inc"
  22. include "parser.inc"
  23. include "ssi.inc"
  24.  
  25. use_edit_box procinfo,22,5
  26.  
  27. ;
  28. ; …᫨ == 0, ª®¤ ¤«ï ¨á¯®«ì§®¢ ­¨ï ª®­â ªâ «¨áâ 
  29. ; ­  á¥à¢¥à¥ ­¥  áᥬ¡«¨àã¥âáï
  30. ;
  31. USE_SSI = 1
  32. ;
  33. ;
  34.  
  35. CODE
  36.    
  37.    
  38.     ;mov eax, 40
  39.     ;mov ebx, 47h
  40.     ;int 40h
  41.  
  42.     ;
  43.     ; ‡ £à㧪  ª®­ä¨£®¢
  44.     ;
  45.  
  46.     mov  eax, fname
  47.     call    parseconf
  48.     ;
  49.     ; ‚뢮¤ § £à㦥­­®© ¨­ä®à¬ æ¨¨
  50.     ;
  51.  
  52.     mov eax, cfg_message
  53.     xor ebx, ebx
  54.     call writemsg
  55.  
  56.     call showcfg
  57.  
  58.    
  59.     ;call    loaduin
  60.     call    draw_window            ; at first create and draw the window
  61.    
  62.     ;call    buttonbox
  63.  
  64.   wait_event:                      ; main cycle
  65.     ;mov     eax, 23
  66.     ;mov     ebx, 20
  67.     ;int     0x40
  68.     mcall 23,20
  69.  
  70.     cmp     eax, 1                 ;   if event == 1
  71.     je      redraw                 ;     jump to redraw handler
  72.     cmp     eax, 2                 ;   else if event == 2
  73.     je      key                    ;     jump to key handler
  74.     cmp     eax, 3                 ;   else if event == 3
  75.     je      button                 ;     jump to button handler
  76.    
  77.     ;
  78.     ; †¤¥¬ ¤ ­­ëå
  79.     ;
  80.    
  81.     mcall 53,2,[socket]
  82.     cmp     eax, 0
  83.     jnz     read_socket
  84.  
  85.     mouse_edit_box inputbox
  86.     ;
  87.     ; …᫨ ¥áâì ᮥ¤¨­¥­¨¥ á á¥à¢¥à®¬, ¯®áë« ¥¬ ¯ ª¥âë - ¯®¤â¢¥¦¤¥­¨ï ª ¦¤ë¥ 60 á
  88.     ; ­¥ âॡã¥âáï
  89. ;    call    sendkeep
  90.    
  91.     jmp     wait_event             ;   else return to the start of main cycle
  92.  
  93.  
  94.   redraw:                          ; redraw event handler
  95.     call    draw_window
  96.     jmp     wait_event
  97.  
  98.  
  99.   key:                             ; get key code
  100.    
  101.     mcall 2
  102.  
  103.     cmp ah, 0Dh                    ; à®¡¥« - ®â¯à ¢¨âì á®®¡é¥­¨¥
  104.     jz send
  105.  
  106.  
  107.     key_edit_box inputbox
  108.  
  109.     jmp     wait_event
  110.  
  111.  
  112.   button:                          ; button event handler
  113.     ;mov     eax, 17               ;   get button identifier
  114.     ;int     0x40
  115.     mcall 17
  116.  
  117.     cmp     ah, 2
  118.     jz      connect
  119.  
  120.     cmp     ah, 3
  121.     jz      disconnect
  122.  
  123.     cmp     ah, 4
  124.     jz      send
  125.  
  126.     ;
  127.     ; à®¢¥à塞, ­¥ ­ ¦ â  «¨ ª­®¯ª  ¢ Š‹
  128.     ; 100 <ID <= 100+UINS
  129.     cmp ah, UINS+100
  130.     jnc @f
  131.     cmp ah, 100
  132.     jc @f
  133.     ;
  134.     ;  ¦ â 
  135.     ;
  136.     sub ah, 100
  137.     mov [curruser], ah
  138.     ;
  139.     ; ‚뢮¤¨¬ áâà®çªã, ª®¬ã
  140.     ;
  141.     shr eax, 8
  142.     and eax, 000000FFh
  143.     push eax
  144.     mov eax, CUSER
  145.     call strlen
  146.     mov ecx, eax
  147.     mov eax, CUSER
  148.     mov ebx, buff
  149.     call strcpy
  150.     pop eax
  151.     mov ebx, NAME_LEN
  152.     imul ebx, eax
  153.     lea eax, [names + ebx]
  154.     mov [buff + ecx], ' ' ; à®¡¥«
  155.     lea ebx, [buff + ecx + 1]
  156.     mov ecx, NAME_LEN
  157.     ;debug
  158.      push ebx
  159.      mov ebx, NAME_LEN
  160.      call print_mem
  161.      pop ebx
  162.     ;
  163.     call strcpy
  164.     mov eax, buff
  165.     xor ebx, ebx
  166.     call writemsg
  167.  
  168.  
  169.  
  170.  
  171.   @@:
  172.     cmp     ah, 1
  173.     jne     wait_event             ;   return if button id != 1
  174.  
  175.     ;   exit application
  176.     mcall -1
  177.  
  178.  
  179.   draw_window:
  180.     ; start drawing
  181.     mcall 12,1
  182.  
  183.     mcall 0,(100*65536+700),(100*65536+500),0x14ffffff,0,head
  184.  
  185.     draw_edit_box inputbox
  186.  
  187.     rect 10, 30, 500, 450, 0
  188.  
  189.     draw_button 600, 460, 60, 15, 2, 'CONNECT'
  190.     ;draw_button 600, 460, 60, 15, 3, 'Disconnect'
  191.     draw_button 530, 460, 60, 15, 4, 'SEND'
  192.  
  193.     call    printbuff
  194.     call    buttonbox
  195.  
  196.     ;
  197.     ; Image
  198.     ;
  199.     ;mov eax, 7
  200.     ;mov ebx, redicq
  201.     ;mov ecx, 15*65536+15
  202.     ;mov edx, 100*65536+100
  203.     ;int 40h
  204.  
  205.  
  206.    
  207.  
  208.    ; finish drawing
  209.    mcall 12,2
  210.  
  211.   ret
  212.  
  213. ;
  214. ;  ‘®¥¤¨­¥­¨¥
  215. ;
  216.   connect:
  217.   lea eax, [vtable + vartable.icqip]
  218.   call ip_parser
  219.   call htonl
  220.   data_debug 'IP:', eax
  221.  
  222.   ;mov eax, ICQ_IP
  223.   mov ebx, ICQ_PORT
  224.   call srv_connect
  225.  
  226.  
  227.  
  228.   jmp wait_event
  229.  
  230.  
  231. ;
  232. ;
  233. ;
  234.   disconnect:
  235.   mov ecx, [socket]
  236.   call closesocket
  237.  
  238.   jmp wait_event
  239.  
  240.  
  241. ;
  242. ;
  243. ;
  244.   send:
  245.   ;
  246.   ; Ž¯à¥¤¥«ï¥¬, ­¥ ᬥ­¥­ «¨ ⥪ã騩 “ˆ
  247.   ;
  248.   ; „«ï ᬥ­ë ¨á¯®«ì§ã¥âáï / ¢ ­ ç «¥ áâப¨ ¨ ­®¬¥à 㨭 
  249.   ; ¯® ¯®à浪ã. …᫨ ¤«¨­  > 2 ᨬ¢®«®¢, áç¨â ¥âáï, çâ® ¯¥à¥¤ ­
  250.   ; á ¬ 㨭 - ¤«ï ®â¯à ¢ª¨ á®®¡é¥­¨© ࠬ, ª®â®àëå ­¥â ¢ Š‹
  251.   ;
  252.     mov al, [inputbuff]
  253.     cmp al, '/'
  254.     jnz sd_message
  255.     ; ‘¬¥­  㨭 
  256.     ;mov al, [inputbuff+2]
  257.     ;cmp al, 20h
  258.     ;jz sd_use_kl
  259.     mov al, [inputbuff+3]
  260.     cmp al, 20h            ; à®¡¥«
  261.     jz sd_use_kl
  262.     ;
  263.     ; ˆé¥¬ ¯¥à¢ë© ¯à®¡¥«, ¨¬ ¤®«¦¥­ § ª®­ç¨âìáï 㨭
  264.     ;
  265.     xor ecx, ecx
  266.   sd_loop:
  267.     mov al, [inputbuff+ecx]
  268.     cmp al, 20h
  269.     jz sd_space
  270.     cmp al, 0
  271.     jz  wait_event
  272.     inc ecx
  273.     jmp sd_loop
  274.  
  275.   sd_space:
  276.     ;
  277.     ; ‡ ¬¥­ï¥¬ ¯à®¡¥« ­  0, ®âáë« ¥¬ á®®¡é¥­¨¥
  278.     mov [inputbuff+ecx], byte 0
  279.     lea ebx, [inputbuff+1]
  280.     lea eax, [inputbuff+ecx+1]
  281.     call sendmsg
  282.     mov ebx, 0000FFh
  283.     call writemsg
  284.     jmp wait_event
  285.  
  286.  
  287.  
  288.   sd_use_kl:
  289.     lea eax, [inputbuff+1]
  290.     mov [inputbuff+3], byte 0
  291.     call ascitoint
  292.     lea eax, [eax-1]    ; ’.ª. ¢ Š‹ ®âáç¥â á 0
  293.     mov [curruser], al
  294.    
  295.  
  296.   sd_message:
  297.   ;
  298.   ; ‘®®¡é¥­¨¥
  299.     movzx eax, [curruser]
  300.     mov ebx, UIN_LEN
  301.     imul ebx, eax
  302.     lea ebx, [uins+ebx]
  303.     mov al, [inputbuff]
  304.     cmp al, '/'
  305.     jz @f
  306.     mov eax, inputbuff
  307.     jmp sd_send
  308.   @@:
  309.     ;mov al, [inputbuff+2]
  310.     ;cmp al, ' '
  311.     ;jz @f
  312.     lea eax, [inputbuff+4]
  313.     ;jmp sd_send
  314.   ;@@: lea eax, [inputbuff+3]
  315.  
  316.   sd_send:
  317.     call sendmsg
  318.     mov ebx, 0000FFh
  319.     call writemsg
  320.  
  321.  
  322.   jmp wait_event
  323.  
  324.  
  325. ;
  326. ; …áâì ¯à¨­ïâë¥ ¤ ­­ë¥
  327. ;
  328.   read_socket:
  329.     pushf
  330.     pushad
  331.     ;write_debug 'Some data in socket'
  332.     ;
  333.     ; à®¢¥à塞, ­¥ ¡ë« «¨ ¯®«ã祭 § £®«®¢®ª ®â¤¥«ì­® ®â ¤ ­­ëå
  334.     ; ¢ ¯à¥¤ë¤ã饬 横«¥
  335.     ;
  336.     cmp [hrf], 1
  337.     jz rs_head_recived
  338.  
  339.   rs_check_sock:
  340.     ;mov eax, 53
  341.     ;mov ebx, 2
  342.     ;mov ecx, [socket]
  343.     ;int 40h
  344.     mcall 53,2,[socket]
  345.     cmp eax, 6 ; Flap head size
  346.     jc r_end
  347.     ;
  348.     ; à¨­¨¬ ¥¬ § £®«®¢®ª
  349.     ;
  350.     xor edx, edx
  351.  
  352.     ;mov ecx, [socket]
  353.    rs_loop:
  354.     ;mov eax,  53
  355.     ;mov ebx, 3
  356.     ;int 40h
  357.     mcall 53,3,[socket]
  358.  
  359.     mov [mbuff+edx], bl
  360.     inc edx
  361.     cmp edx, 6
  362.  
  363.     jnz rs_loop
  364.     ;
  365.     ; ‡ ¯®«­ï¥¬ § £®«®¢®ª
  366.     ;
  367.     ;xor eax, eax
  368.  
  369.     ;
  370.     ; ‡ £®«®¢®ª ¯à¨­ïâ!
  371.     ;
  372.     mov [hrf], 1
  373.  
  374.     mov bl, [mbuff]
  375.     mov [rflap.bId], bl
  376.  
  377.     mov bl, [mbuff+1]
  378.     mov [rflap.bCh], bl
  379.  
  380.     mov bh, [mbuff+2]
  381.     mov bl, [mbuff+3]
  382.     mov [rflap.wSn], bx
  383.  
  384.     mov bh, [mbuff+4]
  385.     mov bl, [mbuff+5]
  386.     mov [rflap.wDs], bx
  387.  
  388.     ;
  389.     ; à¨­¨¬ ¥¬ ¤ ­­ë¥
  390.     ;
  391.     ;xor edx, edx
  392.     cmp [rflap.bId], 2Ah
  393.     jnz rs_flap_error
  394.     ;
  395.     ;  à®¢¥à塞, ¯®«ãç¥­ë «¨ ¤ ­­ë¥
  396.     ;
  397.   rs_head_recived:
  398.  
  399.     ;mov eax, 53
  400.     ;mov ebx, 2
  401.     ;mov ecx, [socket]
  402.     ;int 40h
  403.     mcall 53,2,[socket]
  404.  
  405.     cmp ax, [rflap.wDs]   ;  §¬¥à ¤ ­­ëå
  406.     jc r_end
  407.     ;
  408.     ;
  409.     mov ax, [rflap.wDs]
  410.     ;
  411.     ; à®¢¥à塞 à §¬¥à ¤ ­­ëå
  412.     ;
  413.     cmp ax, MBUFF_SIZE+1
  414.     jnc rs_big_flap
  415.  
  416.     xor esi, esi    
  417.     mov esi, eax
  418.     xor edx, edx
  419.  
  420.     ;mov ecx, [socket]
  421.  
  422.    rs_data_loop:
  423.     cmp edx, esi
  424.     jz rs_data_end
  425.  
  426.     ;mov eax, 53
  427.     ;mov ebx, 3
  428.     ;int 40h
  429.     mcall 53,3,[socket]
  430.     mov [mbuff+edx], bl
  431.     inc edx
  432.     jmp rs_data_loop
  433.  
  434.     ;
  435.     ; „ ­­ë¥ ¯à¨­ïâë
  436.     ;
  437.     rs_data_end:
  438.     mov [hrf], 0
  439.     ;write_debug 'Some data recived'
  440.     ;
  441.     ;
  442.     ;
  443.     cmp [login], 0
  444.     jz rs_login
  445.     call main_loop
  446.     ;
  447.     ; …áâì á¬ëá« ¯à®¢¥à¨âì ᮪¥â ­  ­ «¨ç¨¥ á«¥¤ãî饣® § £®«®¢ª 
  448.     ;
  449.     ;jmp r_end
  450.     jmp rs_check_sock
  451.  
  452.  
  453.     rs_login:
  454.     call srv_login
  455.     ;write_debug 'Exited srv_login'
  456.     ;jmp r_end
  457.     jmp rs_check_sock
  458.  
  459.     rs_flap_error:
  460.     write_debug 'Invalid Flap'
  461.     ;
  462.     ; FLAP.id ­¥¢¥à­ë©. ­ã¦­® § ªàëâì ᮪¥â
  463.     ;
  464.  
  465.     mov ecx, [socket]
  466.     ;call closesocket
  467.     jmp r_end
  468.  
  469.     ;
  470.     ;  ‘«¨èª®¬ ¡®«ì让 ¯ ª¥â!
  471.     ;
  472.     rs_big_flap:
  473.  
  474.     write_debug 'Too BIG FLAP Recived'
  475.     mov [hrf], 0
  476.  
  477.     ;mov ecx, [socket]
  478.     mov ax, [rflap.wDs]
  479.     xor esi, esi    
  480.     mov esi, eax
  481.     xor edx, edx
  482.  
  483.    rs_data_loop2:
  484.     cmp edx, esi
  485.     jz r_end
  486.  
  487.     ;mov eax, 53
  488.     ;mov ebx, 3
  489.     ;int 40h
  490.     mcall 53,3,[socket]
  491.     ;mov [mbuff+edx], bl
  492.     inc edx
  493.     jmp rs_data_loop2
  494.  
  495.  
  496.  
  497.  
  498.  
  499.     r_end:
  500.    
  501.     popad
  502.     popf
  503.   jmp wait_event
  504.  
  505. ; ‘®¥¤¨­¥­¨¥ á á¥à¢¥à®¬, ¢®§¢à é ¥â ¢ eax - åí­¤« ᮪¥â 
  506. ; ¯¥à¥¤ ¥¬ ¢ ¥ å IP  ¤à¥á á¥à¢¥à 
  507. ; ¢ ebx - ¯®àâ
  508.   srv_connect:  
  509.     push ecx
  510.     push edx
  511.     push esi
  512.     push edi
  513.     push ebx
  514.    
  515.     mov esi, eax             ; IP - ¢ esi
  516.     ; find free port
  517.     mov    ecx, 1000         ; Ž¯à¥¤¥«ï¥¬ «®ª «ì­ë© ¯®àâ, ­ ç¨­ ¥¬ á 1000
  518.  
  519.     getlp:
  520.     inc    ecx
  521.     push   ecx
  522.     ;mov    eax, 53
  523.     ;mov    ebx, 9
  524.     ;int    0x40
  525.     mcall 53,9,ecx
  526.     pop    ecx
  527.     cmp    eax, 0            ; íâ®â «®ª «ì­ë© ¯®à⠨ᯮ«ì§ã¥âáï?
  528.     jz     getlp             ; ¤  - ¯à®¤®«¦ ¥¬ ¯¥à¥¡¨à âì
  529.     ;OK ecx = port number
  530.     ;Open Socket
  531.     ;mov eax, 53
  532.     ;mov ebx, 5
  533.     xor edx, edx
  534.     ;mov dx, ICQ_PORT
  535.     pop edx
  536.     ;mov esi,ICQ_IP
  537.     ;mov edi, 1;SOCKET_ACTIVE
  538.  
  539.     ;int 40h
  540.     mcall 53, 5, ecx, edx, esi, 1
  541.     ;
  542.     mov [socket], eax
  543.  
  544.     ;
  545.     ; †¤¥¬ ãáâ ­®¢ª¨ ᮥ¤¨¥­¨ï
  546.     mov ecx, eax
  547.   srv_loop:
  548.  
  549.     ;mov eax, 5
  550.     ;mov ebx, 50
  551.     ;int 40h
  552.     mcall 5, 50
  553.  
  554.  
  555.    
  556.     ;mov eax, 53
  557.     ;mov ebx, 6
  558.     ;int 40h
  559.     mcall 53, 6, ecx
  560.     cmp eax, TCB_ESTABLISHED
  561.     jz fin
  562.     cmp eax, 11
  563.     jae c_end
  564.     ;
  565.    
  566.     ;inc [timer]
  567.     ;cmp [timer], 50
  568.     ;jz srv_err
  569.     jmp srv_loop
  570.  
  571.  
  572.  
  573.   ;srv_err:
  574.     ;mov [timer], word 0
  575.     ;cmp eax,-1
  576.     ;jnz fin
  577.     ;delay 100
  578.     write_debug 'CONNECTION FAILED'                   ;®¤ª«î祭¨¥ ­¥ 㤠«®áì
  579.     jmp c_end
  580.     ;connrcted:  
  581.                                           ;CONNECTED
  582.    
  583.     fin:
  584.     write_debug 'Connected!!!!'
  585.   c_end:
  586.     pop edi
  587.     pop esi
  588.     pop edx
  589.     pop ecx
  590.     ;pop ebx
  591.   ret
  592.  
  593. ;
  594. ; --> ecx socket handle
  595. ;
  596.  
  597.   srv_login:
  598.     pushf
  599.     push eax
  600.     push ebx
  601.     ;push ecx
  602.     push edx
  603.  
  604.     ;
  605.     ; Ž¯à¥¤¥«ï¥¬ ⨯ ¯®«ã祭­ëå ¤ ­­ëå
  606.     ;
  607.     movzx eax, [rflap.bCh]
  608.     cmp eax, 01
  609.     jz s_new_connection
  610.     cmp eax, 04
  611.     jz s_cookie        ; cookie
  612.     jmp l_flap_err
  613.  
  614.   s_new_connection:
  615.     ;
  616.     ; à®¢¥à塞 ¯®«ã祭­ë© ¯ ª¥â
  617.     ;
  618.     movzx eax, [rflap.wDs]
  619.     cmp eax, 4
  620.     jnz l_len_err
  621.     mov eax, dword [mbuff]
  622.     cmp eax, 01000000h      ; 00 00 00 01
  623.     jnz l_data_err
  624.     ;
  625.     ;”®à¬¨à㥬 ¯ ª¥â ¤«ï ᮥ¤¨­¥­¨ï
  626.     ;
  627.     ;mov [flap.bId], FLAP_ID
  628.     mov [flap.bCh], NEW_CONNECTION
  629.    
  630.     ;mov eax, 26
  631.     ;mov ebx, 9
  632.     ;int 40h
  633.     mcall 26, 9
  634.     mov [seq], ax
  635.  
  636.     mov [flap.wSn], ax      ; Sequence number
  637.     ;mov [buff],0
  638.     ;mov [buff+1],0
  639.     ;mov [buff+2],0
  640.     mov dword [buff], 0x01000000 ;login Protokol version  00 00 00 01
  641.     ;mov[buff+4],0
  642.     mov word [buff+4], 0x0100; TLV.TYPE = UIN     00 01
  643.  
  644.     lea eax, [vtable + vartable.uin]
  645.     call strlen
  646.     mov [buff+6], ah
  647.     mov [buff+7], al ; Length of UIN
  648.     mov edx, eax
  649.     add edx, 7                 ; ¢ edx ¤«¨­  § ¯®«­¥­­®£® ¡ãä¥à 
  650.    
  651.     mov ecx, eax              ;„«¨­  áâப¨
  652.  
  653.     lea eax, [vtable + vartable.uin]
  654.     lea ebx, [buff+8]         ; + à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥ + 1
  655.  
  656.     call strcpy
  657.  
  658.    
  659.     lea eax, [vtable + vartable.pass]
  660.     call roast
  661.    
  662.     mov [buff+edx+2], 2 ; TLV.TYPE - rosted password
  663.     call strlen
  664.     mov [buff+edx+4], al
  665.     mov [buff+edx+3], ah  ; Length of pass
  666.  
  667.     add edx, 4
  668.     mov ebx, buff
  669.     add ebx, edx               ; ­ §­ ç¥­¨¥
  670.     add edx, eax               ; ‘®å࠭塞 ¢ EDX ¤«¨­ã § ¯®«­¥­­®£® ¡ãä­à 
  671.     mov ecx, eax               ; „«¨­  áâப¨
  672.     lea eax, [vtable + vartable.pass]              ; ˆáâ®ç­¨ª
  673.     inc ebx
  674.     call strcpy
  675.    
  676.     mov [buff+edx+2], 3 ; TLV.TYPE - client id string
  677.     mov eax, ID_STRING
  678.     call strlen
  679.     mov [buff+edx+4], al
  680.     mov [buff+edx+3], ah
  681.  
  682.     add edx, 4
  683.     mov ecx, eax
  684.     mov ebx, buff
  685.     add ebx, edx
  686.     add edx, eax
  687.     inc ebx
  688.     mov eax, ID_STRING
  689.     call strcpy
  690.  
  691.     xor eax, eax
  692.  
  693.     mov [buff+edx+2], 016h  ; TLV.TYPE - Client id
  694.     mov [buff+edx+4], 2
  695.     mov ax, ID_NUM
  696.     call htons
  697.     mov word [buff+edx+5], ax
  698.     add edx, 6
  699.  
  700.     mov [buff+edx+2], 017h ; Client major version
  701.     mov [buff+edx+4], 2
  702.     mov ax, MAJOR
  703.     call htons
  704.     mov word [buff+edx+5], ax
  705.     add edx, 6
  706.  
  707.     mov [buff+edx+2], 018h ; Client minor version
  708.     mov [buff+edx+4], 2
  709.     mov ax, MINOR
  710.     call htons
  711.     mov word [buff+edx+5], ax
  712.     add edx, 6
  713.  
  714.     mov [buff+edx+2], 019h ; Client lesser version
  715.     mov [buff+edx+4], 2
  716.     mov ax, LESSER
  717.     call htons
  718.     mov word [buff+edx+5], ax
  719.     add edx, 6
  720.  
  721.     mov [buff+edx+2], 01Ah ; Client build number
  722.     mov [buff+edx+4], 2
  723.     mov ax, BUILD
  724.     call htons
  725.     mov word [buff+edx+5], ax
  726.     add edx, 6
  727.    
  728.     mov [buff+edx+2], 014h ; Client distribution number
  729.     mov [buff+edx+4], 4
  730.     mov eax, DISTR
  731.     call htonl
  732.     mov dword [buff+edx+5], eax
  733.     add edx, 8
  734.  
  735.     mov [buff+edx+2], 0Fh ; Client language
  736.     mov eax, CL_LANG
  737.     call strlen
  738.     mov word [buff+edx+4], ax
  739.     add edx, 4
  740.     mov ecx, eax
  741.     mov ebx, buff
  742.     add ebx, edx
  743.     inc ebx
  744.     add edx, eax
  745.     mov eax, CL_LANG
  746.     call strcpy
  747.  
  748.     mov [buff+edx+2], 0Eh ; Client country
  749.     mov eax, CL_COUNTRY
  750.     call strlen
  751.     mov word [buff+edx+4], ax
  752.     add edx, 4
  753.     mov ecx, eax
  754.     mov ebx, buff
  755.     add ebx, edx
  756.     inc ebx
  757.     add edx, eax
  758.     mov eax, CL_COUNTRY
  759.     call strcpy
  760.    
  761.    ;write_debug 'Connect attemption'
  762.    ; mov eax, ICQ_IP
  763.    ; call srv_connect
  764.    ; cmp eax, -1   ; ®¤ª«î祭¨¥ ­¥ 㤠«®áì
  765.    ; jz l_fin
  766.  
  767.    ; mov ecx, eax
  768.    ; mov eax, rflap
  769.    ; mov ebx, lbuff
  770.    ; call recvflap
  771.    
  772.   ;  cmp eax, -1
  773.    ; jz l_flap_err
  774.    ; cmp [rflap.bCh], 01 ; AUTH channel
  775.    ; jnz l_ch_err
  776.    ; cmp eax, 4
  777.    ; jnz l_len_err
  778.    ; cmp dword [lbuff+3], dword 1
  779.    ; jnz l_data_err
  780.  
  781.     mov ecx, [socket]
  782.     inc dx
  783.     mov [flap.wDs], dx ; Data size
  784.     mov eax, flap
  785.     mov ebx, buff
  786.     call sendflap
  787.     cmp eax, 0
  788.     jnz l_fin           ; ¥ãᯥå
  789.     jmp l_end
  790.    
  791.  
  792.     s_cookie:
  793.     ;mov eax, rflap
  794.     ;mov ebx, buff
  795.     ;call recvflap
  796.     ;cmp eax, -1
  797.     ;jz l_flap_err
  798.     ;cmp [rflap.bCh], 4
  799.     ;jnz l_ch_err
  800.  
  801.     ;write_debug 'UIN'
  802.     xor ebx, ebx
  803.  
  804.    uin_loop:
  805.     xor eax, eax
  806.     mov ax, word [mbuff+ebx]
  807.     cmp ax, 0100h              ;  00 01 TLV.Type UIN
  808.     jz l_uin_ok                  ;  ’¥¯¥àì á¥à¢¥à ¯¥à¥¤ ¥â ¥é¥ ¤ ­­ë¥ ¯à¨ ᮥ¤¨­¥­¨¨,   ¯®â®¬ ®¯ïâì
  809.     add ebx, 5                   ; â®â ¦¥ TLV 1  (­®¢ë© ä®à¬ â ¯ ª¥ªâ )
  810.     cmp ebx, 5
  811.     ja l_tlvt_err
  812.     jmp uin_loop
  813.  
  814.  
  815.  
  816.  
  817.  
  818.   l_uin_ok:
  819.     mov eax, ebx
  820.     xor ebx, ebx
  821.     mov bl, [mbuff+eax+3]           ;
  822.     mov bh, [mbuff+eax+2]           ;  „«¨­  ¤ ­­ëå
  823.     ;
  824.     ;  UIN ®ª  ­¥ ¯à®¢¥àï¥âáï
  825.     ;
  826.    
  827.  
  828.     lea ebx, [ebx+eax+4]
  829.     mov ax, word [mbuff+ebx]
  830.     cmp ax, 0500h             ; 00 05 Bos address
  831.     jz l_all_ok
  832.     cmp ax, 0400h             ; UIN incorrect
  833.     jz l_uin_err
  834.     cmp ax, 0800h
  835.     jz l_pass_err
  836.     jmp l_tlvt_err
  837.     ;
  838.     ; ¥á«¨ ­¥¢¥à­ë© UIN/ ¯ à®«ì, ¯®«ãç ¥¬ TLV.TYPE 4/8
  839.     ;
  840.  
  841.     l_all_ok:
  842.     xor ecx, ecx
  843.     mov cl, [mbuff+ebx+3]       ;length
  844.     mov ch, [mbuff+ebx+2]       ;
  845.    
  846.     lea eax, [mbuff+ebx+4]
  847.     push ebx
  848.     mov ebx, bos_address
  849.     call strcpy
  850.     pop ebx
  851.     add ebx, ecx
  852.     lea ebx, [ebx+4]                ;  §¬¥à § £®«®¢ª                 
  853.     ;        
  854.     ; cookie
  855.     ;
  856.     ;write_debug 'Login Cookie'
  857.  
  858.     xor eax, eax
  859.     mov ax, word [mbuff+ebx]
  860.     cmp ax, 0600h                  ; TLV.Type cookie
  861.     jnz l_tlvt_err
  862.     mov cl, [mbuff+ebx+3]           ;
  863.     mov ch, [mbuff+ebx+2]           ; Length
  864.     mov [cookie_len], cx
  865.     lea eax, [mbuff+ebx+4]
  866.     push ebx
  867.     mov ebx, srv_cookie
  868.     call strcpy
  869.     pop ebx
  870.            
  871.     ;                        
  872.     ;  ‘®¥¤¨­ï¥¬áï á BOS    
  873.     ;                      
  874.     ;call srv_disconnect
  875.     mov ecx, [socket]
  876.     write_debug 'Closing socket'
  877.     ;call closesocket
  878.     ;
  879.     ;
  880.     ;
  881.     ;FIXME!!!
  882.     ;‡ ª®¬¬¥­â®à®¢ ­® ¨§-§  ¯à®¡«¥¬ë á á¥â¥¢ë¬ á⥪®¬
  883.     ;§ ªàë⨥ ᮪¥â  § ¢¥è¨¢ ¥â á¨á⥬ã
  884.     ;mcall 53, 8, ecx
  885.  
  886.  
  887.                        
  888.     mov eax, bos_address
  889.     call ip_parser
  890.    
  891.     call htonl
  892.     data_debug 'BOS Address: ', eax
  893.     data_debug 'BOS Port: ', ebx
  894.     mov [bos_ip], eax      
  895.     mov [bos_port], ebx    
  896.     call srv_connect
  897.     mov [login], 1                ; ‘®¥¤¨­¥­¨¥ á ®á­®¢­ë¬ á¥à¢¥à®¬ ãáâ ­®¢«¥­®
  898.     ;mov [socket], eax
  899.                            
  900.  
  901.    
  902.     jmp l_end
  903.     ;
  904.     ;
  905.     ;
  906.     l_pass_err:
  907.     write_debug 'PASSWORD INVALID'
  908.     jmp l_fin
  909.  
  910.     l_uin_err:
  911.     write_debug 'UIN INVALID'
  912.     jmp l_fin
  913.  
  914.     l_data_err:
  915.     write_debug 'LOGIN DATA MISMATCH'
  916.     jmp l_fin
  917.  
  918.     l_len_err:
  919.     write_debug 'RECIVED DATA LENGTH MISMATCH'
  920.     jmp l_fin
  921.  
  922.     l_tlvt_err:
  923.     write_debug 'TLV TYPE MISMATCH'
  924.     jmp l_fin
  925.  
  926.     l_ch_err:
  927.     write_debug 'FLAP CHANNEL MISMATCH'
  928.     jmp l_fin
  929.  
  930.     l_flap_err:
  931.     write_debug 'FLAP ID MISMATCH / RECIVE ERROR'
  932.  
  933.     l_fin:
  934.  
  935.     ;
  936.     ; ¥®¡å®¤¨¬® § ªàëâì ᮪¥â
  937.     ;
  938.     ;call srv_disconnect
  939.     call closesocket
  940.     l_end:
  941.     pop edx
  942.     ;pop ecx
  943.     pop ebx
  944.     pop eax
  945.     popf                          
  946.   ret                
  947.  
  948. ;
  949. ; Length of string
  950. ; input eax = offset string
  951. ; output eax = strlen
  952. ;
  953.   strlen:
  954.     push ebx
  955.     push ecx
  956.     pushf
  957.     xor ebx, ebx
  958.     xor ecx, ecx
  959.  
  960.     loop_s:
  961.     mov cl, [eax+ebx]
  962.     cmp ecx,0
  963.     jz  nl
  964.     inc ebx
  965.     jmp loop_s
  966.  
  967.     nl:
  968.     mov eax, ebx
  969.     popf
  970.     pop ecx
  971.     pop ebx
  972.   ret
  973.  
  974. ;
  975. ; Roasting password
  976. ; EAX = offset password
  977. ;
  978.  
  979.   roast:
  980.     pushf
  981.     push ecx
  982.     push ebx
  983.  
  984.     xor ecx, ecx
  985.     xor ebx, ebx
  986.  
  987.     loop_r:
  988.     mov bl, [eax+ecx] ;‘¨¬¢®« ¨§ ¬ áᨢ  ¯ à®«ï
  989.     cmp bl, 0         ;Š®­¥æ áâப¨
  990.     jz r_fin
  991.    
  992.     xor bl, [ROASTING_ARRAY+ecx]
  993.     mov [eax+ecx], bl
  994.     inc ecx
  995.     jmp loop_r
  996.  
  997.     r_fin:
  998.     pop ebx
  999.     pop ecx
  1000.     popf
  1001.   ret
  1002.  
  1003.  
  1004. ;
  1005. ;Copy string of bytes
  1006. ;‚ EAX =  ¤à¥á ¨á室­®© áâப¨
  1007. ;‚ EBX =  ¤à¥á ­ §­ ç¥­¨ï
  1008. ;‚ ECX = ¤«¨­  áâப¨
  1009. ;
  1010.   strcpy:
  1011.     pushf
  1012.     push esi
  1013.     push edi
  1014.     push ecx
  1015.  
  1016.     cld      ;Ž¡à ¡ â뢠¥¬ áâப㠮⠭ ç «  ª ª®­æã
  1017.     mov esi, eax
  1018.     mov edi, ebx
  1019.  
  1020.     rep movsb
  1021.  
  1022.     pop ecx
  1023.     pop edi
  1024.     pop esi
  1025.     popf    
  1026.   ret
  1027.  
  1028.  
  1029. ;
  1030. ; Œ ªà®á ¤«ï áà ¢­¥­¨ï áâப
  1031. ;
  1032. macro strcmp first, second, len
  1033. {
  1034.    push ecx
  1035.    push esi
  1036.    push edi
  1037.  
  1038.    mov ecx, len
  1039.    mov esi, first
  1040.    mov edi, second
  1041.    repe cmpsb
  1042.  
  1043.    pop edi
  1044.    pop esi
  1045.    pop ecx
  1046.  
  1047. }
  1048.  
  1049.  
  1050. ;
  1051. ; ‡ ¯®«­ï¥â ¡ãä¥à, ¯®  ¤à¥áã ¢ ebx
  1052. ; ¤ ­­ë¬¨, ¯®  ¤à¥áã eax, ¢
  1053. ; cx  - ’¨¯ TLV
  1054. ; dx  - ¤«¨­  ¤ ­­ëå
  1055. ;
  1056. ;
  1057.  
  1058.   tlvstr:
  1059.     ;pushf
  1060.     push edx
  1061.     push ecx
  1062.     push ebx
  1063.  
  1064.     mov [ebx], ch     ; Type
  1065.     mov [ebx+1], cl
  1066.  
  1067.     mov [ebx+2], dh   ; Length
  1068.     mov [ebx+3], dl
  1069.    
  1070.     lea ebx, [ebx+4]
  1071.     ; EBX = offset of destination
  1072.     mov ecx, edx
  1073.  
  1074.     call strcpy
  1075.  
  1076.     pop ebx
  1077.     pop ecx
  1078.     pop edx
  1079.     ;popf
  1080.   ret
  1081.  
  1082. ;
  1083. ; eax - 㪠§ â¥«ì ­  FLAP_head
  1084. ; ebx - 㪠§ â¥«ì ­  ¬ áᨢ, § ¯®«­¥­­ë© ¤ ­­ë¬¨
  1085. ; ecx - 奭¤« ᮪¥â 
  1086. ;
  1087. ; ‚ eax ¢®§¢à é ¥â १ã«ìâ â § ¯¨á¨ ¢ ᮪¥â
  1088. ;
  1089.   sendflap:
  1090.     pushf
  1091.     push edx
  1092.     ;push ecx
  1093.     push esi
  1094.     push ebx
  1095.     push ecx
  1096.  
  1097.     xor edx, edx
  1098.  
  1099.     mov dl, [eax]          ; ID byte
  1100.     mov [sbuff], dl
  1101.  
  1102.     mov dl, [eax+1]        ; FLAP channel
  1103.     mov [sbuff+1], dl
  1104.  
  1105.     mov dl, [eax+2]        ; FLAP datagramm seq number
  1106.     mov [sbuff+3], dl      ; ¬¥­ï¥¬ ¬¥áâ ¬¨ ¡ ©âë ¤«ï ¯¥à¥¤ ç¨ ¯® á¥â¨
  1107.     mov dl, [eax+3]
  1108.     mov [sbuff+2], dl
  1109.  
  1110.     mov dl, [eax+4]        ; FLAP data size
  1111.     mov [sbuff+5], dl
  1112.     mov dl, [eax+5]
  1113.     mov [sbuff+4], dl
  1114.     mov dx, word [eax+4]
  1115.  
  1116.     xchg ecx, edx           ; ecx - size edx - handle
  1117.     mov eax, ebx            ; data
  1118.     mov ebx, sbuff          ; dest
  1119.     add ebx, 6              ; + header size
  1120.     call strcpy
  1121.  
  1122.     xchg ecx, edx           ; ecx - handle, edx - data size
  1123.  
  1124.     s_wait:
  1125.     ;mov eax, 53             ; à®¢¥à塞 á®áâ®ï­¨¥ ᮪¥â . …᫨ ᮥ¤¨¥­¨¥
  1126.     ;mov ebx, 6              ; ãáâ ­®¢«¥­® - ¯®áë« ¥¬ ¡ãä¥à, ¥á«¨ ᮪¥â § ªàëâ, ã室¨¬
  1127.     ;int 40h
  1128.     mcall 53, 6, ecx
  1129.     cmp eax, TCB_ESTABLISHED ; ãáâ ­®¢«¥­®
  1130.     jz s_est
  1131.     cmp eax, TCB_CLOSED
  1132.     jz s_fin
  1133.     cmp eax, 12            ;  “ ¬¥­ï â ª®¥ ¡ë«®, ª®£¤  ᮥ¤¨­¥­¨¥ ãáâ ­ ¢«¨¢ «®áì á ¯ãáâ®â®© :-)
  1134.     jnc s_fin              ;
  1135.  
  1136.    
  1137.     ;mov eax, 5
  1138.     ;mov ebx, 1
  1139.     ;int 40h                ; †¤¥¬
  1140.     mcall 5, 1
  1141.     jmp s_wait
  1142.  
  1143.  
  1144.     s_est:
  1145.     ;mov eax, 53
  1146.     ;mov ebx, 7             ; ¯¨á âì ¢ ᮪¥â
  1147.  
  1148.     add edx, 6             ; + size of header
  1149.     ;mov esi, sbuff         ; data
  1150.     ;int 40h
  1151.     mcall 53, 7, ecx, edx, sbuff
  1152.  
  1153.     s_fin:
  1154.     pop ecx
  1155.     pop ebx
  1156.     pop esi
  1157.     ;pop ecx
  1158.     pop edx
  1159.     popf
  1160.   ret
  1161.  
  1162.  
  1163. ;
  1164. ; eax - 㪠§ â¥«ì ­  ¡ãä¥à
  1165. ; ebx - §­ ç¥­¨¥, ª®â®àë¬ ­¥®¡å®¤¨¬® § â®«­¨âì. ˆá¯®«ì§ã¥âáï ⮫쪮 bl
  1166. ; ecx - à §¬¥à
  1167. ;
  1168.  
  1169.   memset:
  1170.     pushf
  1171.     push edi
  1172.     push eax
  1173.     push ebx
  1174.     push ecx
  1175.  
  1176.     cld
  1177.     mov edi, eax
  1178.     mov eax, ebx
  1179.     rep stosb
  1180.  
  1181.     pop ecx
  1182.     pop ebx
  1183.     pop eax
  1184.     pop edi
  1185.     popf
  1186.   ret
  1187.  
  1188. ;
  1189. ;  àᨬ TLV
  1190. ; <-- ¢ eax  ¤à¥á TLV
  1191. ; <-- ¢ ebx  ¤à¥á ¡ãä¥à , ª®â®àë© ­ã¦­® § ¯®«­¨âì
  1192. ; --> ¢ ebx ¤«¨­  ¯®«ã祭­ëå ¤ ­­ëå
  1193. ; --> ¢ eax ⨯ TLV
  1194. ;
  1195.  
  1196.   tlvpar:
  1197.     pushf
  1198.     ;push esi
  1199.     ;push edi
  1200.     push ecx
  1201.     xor ecx, ecx
  1202.  
  1203.     mov cl, [eax+3]  ;TLV.Length
  1204.     mov ch, [eax+2]
  1205.     call strcpy
  1206.  
  1207.     xor eax, eax
  1208.     mov al, [ebx+1]  ;TLV.Type
  1209.     mov ah, [ebx]
  1210.     mov ebx, ecx
  1211.  
  1212.  
  1213.     pop ecx
  1214.     ;pop edi
  1215.     ;pop esi
  1216.     popf
  1217.   ret
  1218.  
  1219. ;
  1220. ;  <-- ECX - 奭¤« ᮪¥â , ª®â®àë© ­ã¦­® § ªàëâì
  1221. ;  --> ECX - ¥§ã«ìâ â (¥­ ¤¥¦­®)
  1222. ;
  1223.   closesocket:
  1224.     push eax
  1225.     ;push ebx
  1226.  
  1227.     ;mov eax, 53
  1228.     ;mov ebx, 8
  1229.     ;int 40h
  1230.     mcall 53, 8, ecx
  1231.  
  1232.     mov ecx, eax
  1233.  
  1234.     ;pop ebx
  1235.     pop eax
  1236.   ret
  1237.  
  1238. ;
  1239. ; ecx <-- 奭¤« ᮪¥â 
  1240. ;
  1241. ;
  1242.  
  1243.   srv_disconnect:
  1244.     pushf
  1245.     push eax
  1246.     push ebx
  1247.     mov [flap.bId], FLAP_ID
  1248.     mov [flap.bCh], 4      ;Disconnect
  1249.     xor eax, eax
  1250.     mov ax, [seq]
  1251.     mov [flap.wSn], ax
  1252.     mov [flap.wDs], 0
  1253.     mov eax, flap
  1254.     mov ebx, buff
  1255.     call sendflap
  1256.  
  1257.  
  1258.     pop ebx
  1259.     pop eax
  1260.     popf
  1261.   ret
  1262.  
  1263. ;
  1264. ; <-- eax [bos_address]
  1265. ; --> eax = IP ADDRESS
  1266. ; --> ebx = port number
  1267. ;
  1268. par_buff db 9 dup 0
  1269.  
  1270.   ip_parser:
  1271.     pushf
  1272.     push ecx
  1273.     push edx
  1274.     push esi
  1275.     push edi
  1276.  
  1277.     xor ecx, ecx
  1278.     ;xor eax, eax
  1279.     mov ebx, eax
  1280.     xor edx, edx
  1281.     xor esi, esi
  1282.     xor edi, edi
  1283.    
  1284.     ip_loop:
  1285.     xor eax, eax
  1286.     ;xor edx, edx
  1287.     mov al, [ebx+ecx]
  1288.     cmp al, '.'
  1289.     jz ip_dot
  1290.    
  1291.     cmp al, 0
  1292.     jz ip_end_str
  1293.    
  1294.     cmp al, ':'
  1295.     jz ip_colon
  1296.    
  1297.     ;sub al, 30h
  1298.     ;cmp al, 9
  1299.     ;ja ip_err        ; ¥ æ¨äà 
  1300.    
  1301.     mov [par_buff+edx], al
  1302.     inc ecx
  1303.     inc edx
  1304.     jmp ip_loop
  1305.  
  1306.     ip_dot:
  1307.     ;xor eax, eax
  1308.     mov [par_buff+edx], 0 ; Š®­¥æ áâப¨
  1309.     mov eax, par_buff
  1310.     call ascitoint
  1311.  
  1312.     ;data_debug 'Debug eax: ', eax
  1313.  
  1314.     cmp ecx, 0       ; ¥ ¬®¦¥â ­ ç¨­ âìáï á â®çª¨
  1315.     jz ip_err
  1316.     shl esi, 8       ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
  1317.     add esi, eax
  1318.     inc ecx
  1319.     xor edx, edx     ; ‘ç¥â稪 ¡ãä¥à  = 0
  1320.     jmp ip_loop
  1321.  
  1322.  
  1323.     ip_colon:         ; : ‚ áâப¥  ¤à¥á 
  1324.     inc edi           ; ë«® :
  1325.     jmp ip_dot
  1326.    
  1327.     ip_end_str:
  1328.     cmp edi, 1
  1329.     jz @f
  1330.                           ; : ¥ ¡ë«®
  1331.     mov [par_buff+edx], 0 ; Š®­¥æ áâப¨
  1332.     mov eax, par_buff
  1333.     call ascitoint
  1334.     shl esi, 8       ; ‘¤¢¨£ ¥¬ ¯à¥¤ë¤ã騩 ¡ ©â
  1335.     add esi, eax
  1336.     ;mov eax, esi     ; IP ¢ 16 à¨ç­®© ä®à¬¥
  1337.     xor ebx, ebx    ; ®¬¥à  ¯®àâ  ­¥â
  1338.     jmp ip_end
  1339.  
  1340.     @@:                            ; ë«® :
  1341.     mov [par_buff+edx], 0          
  1342.     mov eax, par_buff
  1343.     call ascitoint
  1344.     mov ebx, eax
  1345.     jmp ip_end
  1346.  
  1347.     ip_err:
  1348.     xor esi, esi
  1349.  
  1350.     ip_end:
  1351.     mov eax, esi
  1352.  
  1353.     pop edi
  1354.     pop esi
  1355.     pop edx
  1356.     pop ecx
  1357.     popf
  1358.   ret
  1359.  
  1360. ;
  1361. ; <-- eax 㪠§ â¥«ì ­  asci
  1362. ; --> eax int
  1363. ;
  1364.   ascitoint:
  1365.     pushf
  1366.     push ebx
  1367.     push ecx
  1368.     push edx
  1369.     push esi
  1370.     push edi
  1371.  
  1372.     xor ebx, ebx  
  1373.     xor ecx, ecx
  1374.     xor edx, edx
  1375.     ;xor esi, esi
  1376.     xor edi, edi
  1377.    
  1378.     ati_loop:
  1379.     mov bl, [eax+ecx]
  1380.     cmp bl, 0         ; Š®­¥æ áâப¨
  1381.     jz ati_str_end
  1382.     cmp bl, 39h
  1383.     ja ati_err        ; ¥ æ¨äà 
  1384.     cmp bl, 30h
  1385.     jb ati_err
  1386.  
  1387.     inc ecx
  1388.     jmp ati_loop
  1389.  
  1390.     ati_str_end:      ; ‚ ecx ¤«¨­  áâப¨
  1391.     ;dec ecx           ; “áâ ­®¢¨¬ ­  ¯®á«¥¤­¨© ᨬ¢®«
  1392.     add eax, ecx      ; “ª § â¥«ì ­  áâபã + „«¨­  áâப¨
  1393.     dec eax
  1394.    
  1395.     ati_loop2:
  1396.     cmp edx, ecx
  1397.     jz ati_all
  1398.     push eax
  1399.     sub eax, edx              ; ‚ëç¥áâì áç¥â稪
  1400.     movzx ebx, byte [eax]     ; ‚ bl ᨬ¢®«
  1401.     ;pop eax
  1402.     sub bl, 30h       ; ‚ëç¨á«ï¥¬ 10â¨ç­ãî æ¨äàã
  1403.  
  1404.     ;push eax
  1405.     mov eax, ebx     ; ‚ eax - æ¨äà 
  1406.     mov ebx, 10      ; Œ­®¦¨â¥«ì
  1407.  
  1408.     xor esi, esi
  1409.  
  1410.     ati_mul:
  1411.  
  1412.     cmp esi, edx     ; “¬­®¦ ¥¬ ­  10 n à §
  1413.     jz ati_mul_end
  1414.     ;push eax
  1415.     ;mov eax, ebx
  1416.     imul eax, ebx
  1417.     ;mov ebx, eax
  1418.     ;pop eax
  1419.     inc esi
  1420.     jmp ati_mul
  1421.  
  1422.  
  1423.     ati_mul_end:
  1424.     mov ebx, eax    ; ‚ ebx ¢ëç¨á«¥­­®¥ ç¨á«®
  1425.     pop eax
  1426.  
  1427.     add edi, ebx
  1428.     inc edx
  1429.     jmp ati_loop2
  1430.  
  1431.     ati_all:
  1432.     mov eax, edi
  1433.     jmp ati_end
  1434.  
  1435.     ati_err:
  1436.  
  1437.     ;ati_str_end:
  1438.     xor eax, eax
  1439.  
  1440.     ati_end:
  1441.     pop edi
  1442.     pop esi
  1443.     pop edx
  1444.     pop ecx
  1445.     pop ebx
  1446.     popf
  1447.   ret
  1448.  
  1449. ;
  1450. ;
  1451. ; <-- ecx 奭¤« ᮪¥â 
  1452. ; <-- eax 㪠§ â¥«ì ­  áâàãªâãàã SNAC_head
  1453. ; <-- ebx 㪠§ â¥«ì ­  ¤ ­­ë¥
  1454. ; <-- edx à §¬¥à ¤ ­­ëå
  1455. ; --> eax १ã«ìâ â § ¯¨á¨ ¢ ᮪¥â
  1456. ;
  1457.  
  1458. snac_buff db 1024 dup 0
  1459.  
  1460.   sendsnac:
  1461.     pushf
  1462.     push esi
  1463.     push edi
  1464.     push ebx
  1465.     push edx
  1466.     ;xor ebx, ebx
  1467.     mov esi, ecx            ; 奭¤« ᮪¥â 
  1468.     mov edi, ebx            ; “ª § â¥«ì ­  ¤ ­­ë¥
  1469.  
  1470.     xor ebx, ebx
  1471.     mov bl, [eax]           ;
  1472.     mov [snac_buff+1], bl   ; Family ID
  1473.     mov bl, [eax+1]         ; Š®­¢¥àâ¨àã¥âáï ¢ BigEndian
  1474.     mov [snac_buff], bl     ;
  1475.  
  1476.     mov bl, [eax+2]         ;
  1477.     mov [snac_buff+3], bl   ; Subtype ID
  1478.     mov bl, [eax+3]         ;
  1479.     mov [snac_buff+2], bl   ;
  1480.    
  1481.     mov bl, [eax+4]         ;
  1482.     mov [snac_buff+5], bl   ;
  1483.     mov bl, [eax+5]         ; Flags
  1484.     mov [snac_buff+4], bl   ;
  1485.  
  1486.     mov bl, [eax+6]         ;
  1487.     mov [snac_buff+9], bl   ;
  1488.     mov bl, [eax+7]         ;
  1489.     mov [snac_buff+8], bl   ;
  1490.     mov bl, [eax+8]         ; Reqest ID
  1491.     mov [snac_buff+7], bl   ;
  1492.     mov bl, [eax+9]         ;
  1493.     mov [snac_buff+6], bl   ;
  1494.  
  1495.     lea ebx, [snac_buff+10]                              
  1496.  
  1497.     mov eax, edi            ; “ª § â¥«ì ­  ¤ ­­ë¥
  1498.     ;add ebx, 10             ; + à §¬¥à § £®«®¢ª  SNAC
  1499.     mov ecx, edx            ; à §¬¥à ¤ ­­ëå
  1500.     call strcpy
  1501.  
  1502.  
  1503.     mov ecx, esi            ; •¥­¤« ᮪¥â 
  1504.     mov [flap.bId], FLAP_ID
  1505.     mov [flap.bCh], 2       ; Š ­ « ¤«ï ¯®á뫪¨ SNAC
  1506.     xor ebx, ebx
  1507.     inc [seq]               ; seq “¢¥«¨ç¨¢ ¥âáï ­  1 ¯à¨ ª ¦¤®© ¯®á뫪¥
  1508.     mov bx, [seq]
  1509.     mov [flap.wSn], bx
  1510.     add edx, 10             ; à §¬¥à ¤ ­­ëå + à §¬¥à § £®«®¢ª  SNAC
  1511.     mov [flap.wDs], dx
  1512.     mov eax, flap
  1513.     mov ebx, snac_buff
  1514.     call sendflap
  1515.  
  1516.     pop edx
  1517.     pop ebx
  1518.     pop edi
  1519.     pop esi
  1520.     popf
  1521.   ret
  1522.  
  1523.  
  1524.  
  1525. ; Ž¡à ¡®âª  ¢á¥å ¯ ªâ®¢, ¯à¨å®¤ïé¨å ®â á¥à¢¥à 
  1526. ; ECX <-- •¥­¤« ᮪¥â 
  1527. ;
  1528. ;
  1529. ;
  1530. ;
  1531. ;        
  1532.   main_loop:
  1533.     pushf
  1534.     ;push eax
  1535.     ;push ebx
  1536.     ;push edx
  1537.     pushad
  1538.  
  1539.     mov ecx, [socket]
  1540.     ;
  1541.     ;  ¦¤¥¬ ¯ ª¥â
  1542.     ;
  1543.   ;m_loop:
  1544.     ;mov eax, 53
  1545.     ;mov ebx, 2
  1546.     ;int 40h
  1547.     ;cmp eax, 6       ; à §¬¥à § £®«® ª  FLAP
  1548.     ;jnc recived      ; >=
  1549.     ;
  1550.     ; “室¨¬
  1551.     ;
  1552.     ;jmp m_fin
  1553.     ;mov eax, 5
  1554.     ;mov ebx, 5
  1555.     ;int 40h
  1556.     ;jmp m_loop
  1557.     ;
  1558.     ;  ¥áâì ¯ ª¥â
  1559.     ;
  1560.   ;recived:
  1561.     ;mov eax, rflap
  1562.     ;mov ebx, rbuff
  1563.     ;call recvflap
  1564.     ;
  1565.     ; Ž¯à¥¤¥«ï¥¬ ⨯ ¯à¨­ï⮣® FLAP
  1566.     ;
  1567.     xor ebx, ebx
  1568.     mov bl, [rflap.bCh]
  1569.     cmp bl, 1                ; “áâ ­®¢ª  ᮥ¤¨­¥­¨ï
  1570.     jz  m_login
  1571.     cmp bl, 2
  1572.     jz m_snac                ; ®«ã祭 SNAC
  1573.     cmp bl, 3
  1574.     jz m_flap_err            ; FLAP-level error
  1575.     cmp bl, 4
  1576.     jz m_close_conn          ; ‡ ªàë⨥ ᮥ¤¨­¥­¨ï
  1577.     cmp bl, 5
  1578.     jz m_keep_alive          ;
  1579.     ;
  1580.     ; Ž¡à ¡®âª  à áᮥ¤¨­¥­¨ï
  1581.     ;
  1582.   m_close_conn:
  1583.     write_debug 'Another Computer Use YOUR UIN!'
  1584.     call srv_disconnect
  1585.     call closesocket
  1586.     jmp m_fin
  1587.     ;
  1588.     ; ®¡à ¡®âª  ᮥ¤¨­¥­¨ï
  1589.     ;
  1590.   m_login:
  1591.     ;
  1592.     ; ¯à®¢¥à塞 ¢¥àá¨î ¯à®â®ª®« 
  1593.     ;
  1594.     xor eax, eax
  1595.     mov al, [mbuff+3]
  1596.     cmp eax, 1
  1597.     jnz m_login_other    ; ¥ ¯®¤å®¤¨â
  1598.  
  1599.  
  1600.     ;
  1601.     ; £¥­¥à¨à㥬 á«ãç ©­ë© seq
  1602.     ; „«ï í⮣® ¡¥à¥¬ ¢à¥¬ï, ¯à®è¥¤è¥¥ á ¬®¬¥­â  § ¯ã᪠ á¨á⥬ë
  1603.     ;
  1604.     ;mov eax, 26
  1605.     ;mov ebx, 9
  1606.     ;int 40h
  1607.     mcall 26, 9
  1608.     mov [seq], ax
  1609.     ;
  1610.     ; Žâ¤ ¥¬ á¥à¢¥àã cookie
  1611.     ;
  1612.     mov [flap.bCh], 1
  1613.     mov [flap.wSn], ax
  1614.     xor eax, eax
  1615.     mov ax, [cookie_len]
  1616.     add eax, 8            ; TLV len + protocol version len
  1617.     mov [flap.wDs], ax
  1618.     mov dword [buff], 01000000h  ; 00 00 00 01 ®¬¥à ¯à®â®ª®« 
  1619.     mov word [buff+4], 0600h     ; 00 06   TLV.Type
  1620.  
  1621.     mov ax, [cookie_len]
  1622.     mov [buff+6], ah             ;
  1623.     mov [buff+7], al             ; TLV.Length
  1624.  
  1625.     mov edx, ecx                 ; edx <-- socket handle
  1626.  
  1627.     mov ecx, eax                 ; ecx <-- cookie len
  1628.     mov eax, srv_cookie          ; Src
  1629.     lea ebx, [buff+8]
  1630.     call strcpy
  1631.    
  1632.     mov ecx, edx                 ; ecx <-- socket handle
  1633.     mov eax, flap
  1634.     mov ebx, buff
  1635.     call sendflap
  1636.     jmp m_fin
  1637.  
  1638.     m_login_other:
  1639.     jmp m_fin
  1640.  
  1641.     ;
  1642.     ; Š ª ®¡à ¡®â âì ®è¨¡ªã, ï ­¥ §­ î
  1643.     ;
  1644.   m_flap_err:
  1645.   jmp m_fin
  1646.  
  1647.     ;
  1648.     ; ®ª  ­¥ ®¡à ¡ â뢠¥âáï
  1649.     ;
  1650.   m_keep_alive:
  1651.   jmp m_fin
  1652.  
  1653.  
  1654.     ;
  1655.     ; ®«ã祭 SNAC
  1656.     ;  á¯®§­ ¥¬ ¥£® ⨯
  1657.     ;
  1658.   m_snac:
  1659.     mov eax, rsnac
  1660.     mov ebx, mbuff
  1661.     call snacpar
  1662.     xor ebx, ebx
  1663.     xor edx, edx
  1664.     mov bx, [rsnac.wFid]
  1665.     mov dx, [rsnac.wSid]
  1666.  
  1667.     cmp bx, 1
  1668.     jz m_snac_1              ;Generic service controls
  1669.     cmp bx, 2
  1670.     jz m_snac_2              ;Location services
  1671.     cmp bx, 3
  1672.     jz m_snac_3              ;Buddy List management service
  1673.     cmp bx, 4
  1674.     jz m_snac_4              ;ICBM (messages) service
  1675.     cmp bx, 9
  1676.     jz m_snac_9              ;Privacy management service
  1677.     cmp bx, 015h
  1678.     jz m_snac_15             ;ICQ specific extensions service
  1679.     cmp bx, 013h
  1680.     jz m_snac_13             ;Server Side Information (SSI) service
  1681.    
  1682.     jmp m_other_snac
  1683.     ;
  1684.     ;   FAMILY 1
  1685.     ;
  1686.   m_snac_1:
  1687.     cmp dx, 7
  1688.     jz m_snac_1_7
  1689.     cmp dx, 3
  1690.     jz m_snac_1_3
  1691.     cmp dx, 018h
  1692.     jz m_snac_1_18
  1693.     cmp dx, 01Fh
  1694.     jz m_snac_1_f
  1695.     cmp dx, 13h
  1696.     jz m_snac_13
  1697.     cmp dx, 1
  1698.     jz m_snac_1_1
  1699.     jmp m_snac_1_other
  1700.     ;
  1701.     ; Rate limits information response
  1702.     ;
  1703.   m_snac_1_7:              ; Žâ¢¥ç ¥¬
  1704.     mov [ssnac.wFid], 1    ; Family
  1705.     mov [ssnac.wSid], 8    ; Subtype
  1706.     mov [ssnac.dRi], 8
  1707.     mov word [buff], 0100h   ; 0001
  1708.     mov word [buff+2], 0200h ; 0002
  1709.     mov word [buff+4], 0300h ; 0003
  1710.     mov word [buff+6], 0400h ; 0004
  1711.     mov word [buff+8], 0500h ; 0005
  1712.     mov eax, ssnac
  1713.     mov ebx, buff
  1714.     mov edx, 10              ;  §¬¥à ¤ ­­ëå
  1715.     call sendsnac
  1716.     ;
  1717.     ; Client ask server location service limitations
  1718.     ;
  1719.     mov [ssnac.wFid], 2    ; Family
  1720.     mov [ssnac.wSid], 2    ; Subtype
  1721.     mov [ssnac.dRi], 2
  1722.     mov eax, ssnac
  1723.     mov ebx, buff
  1724.     xor edx, edx
  1725.     call sendsnac
  1726.  
  1727.     jmp m_fin
  1728.  
  1729.     ;
  1730.     ;  Server supported snac families list
  1731.     ;
  1732.   m_snac_1_3:
  1733.     ;
  1734.     ;  Server sends supported services list
  1735.     ;
  1736.  
  1737.     ;
  1738.     ;   SNAC(01,17)      
  1739.     ;   Client ask for services version numbers
  1740.     ;
  1741.     mov [ssnac.wFid], 1    ; Family
  1742.     mov [ssnac.wSid], 17h    ; Subtype
  1743.     mov [ssnac.dRi], 17h
  1744.     ;
  1745.     ;   ‘¯¨á®ª á¥à¢¨á®¢, ª®â®àë¥ ­ ¬ ­ã¦­ë
  1746.     ;
  1747.     ;    xx xx          word            family number #1
  1748.     ;    xx xx          word            family version
  1749.     ;      ...           ...             ...
  1750.     ;
  1751.  
  1752.     ;
  1753.     ; ®¯à ¢¨« ¨§ ¤ ¬¯  &RQ
  1754.     ;
  1755.     mov word [buff], 0100h   ; 0001
  1756.     mov word [buff+2], 0300h ; 0003
  1757.  
  1758.     mov word [buff+4], 1300h ; 0013
  1759.     mov word [buff+6], 0200h ; 0002
  1760.  
  1761.     mov word [buff+8], 0200h ; 0002
  1762.     mov word [buff+10], 0100h ; 0001
  1763.  
  1764.     mov word [buff+12], 0300h ; 0002
  1765.     mov word [buff+14], 0100h ; 0001
  1766.  
  1767.     mov word [buff+16], 1500h ; 0015
  1768.     mov word [buff+18], 0100h ; 0001
  1769.  
  1770.     mov word [buff+20], 0400h ; 0004
  1771.     mov word [buff+22], 0100h ; 0001
  1772.  
  1773.     mov word [buff+24], 0600h ; 0006
  1774.     mov word [buff+26], 0100h ; 0001
  1775.  
  1776.     mov word [buff+28], 0900h ; 0009
  1777.     mov word [buff+30], 0100h ; 0001
  1778.  
  1779.     mov word [buff+32], 1300h ; 0013
  1780.     mov word [buff+34], 0400h ; 0004
  1781.  
  1782.     mov word [buff+36], 1500h ; 0015
  1783.     mov word [buff+38], 0400h ; 0004
  1784.  
  1785.     mov word [buff+40], 1000h ; 0010
  1786.     mov word [buff+42], 0100h ; 0001
  1787.  
  1788.  
  1789.  
  1790.     mov eax, ssnac
  1791.     mov ebx, buff
  1792.     mov edx, 44
  1793.     call sendsnac
  1794.  
  1795.     jmp m_fin
  1796.  
  1797.  
  1798.     ;
  1799.     ; Server services versions
  1800.     ;
  1801.   m_snac_1_18:
  1802.     ;
  1803.     ; Ž¡à ¡®âª¨ ¯®ª  ­¥â
  1804.     ;
  1805.  
  1806.     ;
  1807.     ; Client ask server for rate limits info
  1808.     ; SNAC(01,06)
  1809.     ;
  1810.     mov [ssnac.wFid], 1    ; Family
  1811.     mov [ssnac.wSid], 6    ; Subtype
  1812.     mov [ssnac.dRi], 6
  1813.     mov eax, ssnac
  1814.     mov ebx, buff
  1815.     xor edx, edx
  1816.     call sendsnac
  1817.  
  1818.  
  1819.  
  1820.     jmp m_fin
  1821.  
  1822.     ;
  1823.     ; Requested online info response
  1824.     ;
  1825.   m_snac_1_f:
  1826.     ;
  1827.     ;’ãâ ¤®«¦­  ¡ëâì ­ è  ¨­ä®à¬ æ¨ï, ¯®ª  ®¡à ¡®âª¨ ­¥â
  1828.     ;
  1829.  
  1830.  
  1831.     jmp m_fin
  1832.  
  1833.     ;
  1834.     ; Message of the day (MOTD)
  1835.     ;
  1836.   m_snac_1_13:
  1837.     ;
  1838.     ; ¥ç¥£® ®¡à ¡ â뢠âì :-))
  1839.     ;
  1840.     jmp m_fin
  1841.  
  1842.     ;
  1843.     ; ‘®®¡é¥­¨¥ ®¡ ®è¨¡ª¥
  1844.     ;
  1845.  
  1846.   m_snac_1_1:
  1847.     xor eax, eax
  1848.     mov ax, word [mbuff+10]
  1849.     call ntohs
  1850.     data_debug 'SERVER SEND ERROR #', eax
  1851.  
  1852.  
  1853.     jmp m_fin
  1854.  
  1855.  
  1856.   m_snac_1_other:
  1857.      data_debug 'Unknown SNAC Family 1 recived, type ', edx
  1858.      jmp m_fin
  1859.  
  1860.  
  1861.  
  1862.     ;
  1863.     ; Family 2
  1864.     ;
  1865.   m_snac_2:
  1866.     cmp dx, 3
  1867.     jz m_snac_2_3
  1868.     jmp m_snac_2_other
  1869.     ;
  1870.     ; Server replies via location service limitations
  1871.     ;
  1872.   m_snac_2_3:
  1873.     ;
  1874.     ;  Ž¡à ¡®âª¨ ¯®ª  ­¥â
  1875.     ;
  1876.  
  1877.     ;
  1878.     ;  ¯®áë« ¥¬ capabilities / profile
  1879.     ;
  1880.     mov [ssnac.wFid], 2    ; Family
  1881.     mov [ssnac.wSid], 4    ; Subtype
  1882.     mov [ssnac.dRi], 4
  1883.  
  1884.     ;mov eax, CAPABILITIES
  1885.     ;mov ebx, buff
  1886.     ;push ecx
  1887.     ;mov ecx, 5             ; TLV.Type(0x05) - CLSID values
  1888.     ;mov edx, C_LEN
  1889.     ;call tlvstr
  1890.     ;pop ecx
  1891.     mov word [buff], 0500h  ; 00 05
  1892.     mov eax, C_LEN
  1893.     call htons
  1894.     mov word [buff+2], ax
  1895.  
  1896.  
  1897.  
  1898.     push ecx
  1899.  
  1900.     mov eax, CAPABILITIES
  1901.     lea ebx, [buff+4]
  1902.     mov ecx, C_LEN
  1903.     call strcpy
  1904.  
  1905.     pop ecx
  1906.  
  1907.  
  1908.     mov eax, ssnac
  1909.     mov ebx, buff
  1910.     mov edx, C_LEN+4            ; „«¨­  ¤ ­­ëå+à §¬¥à § £®«®¢ª  TLV
  1911.     call sendsnac
  1912.  
  1913.     ;
  1914.     ; § ¯à è¨¢ ¥¬ server BLM service limitations
  1915.     ;
  1916.     mov [ssnac.wFid], 3    ; Family
  1917.     mov [ssnac.wSid], 2    ; Subtype
  1918.     mov [ssnac.dRi], 2
  1919.     mov eax, ssnac
  1920.     mov ebx, buff
  1921.     xor edx, edx
  1922.     call sendsnac
  1923.  
  1924.  
  1925.     jmp m_fin
  1926.  
  1927.   m_snac_2_other:
  1928.     write_debug 'Unknown SNAC Family 2 Recived'
  1929.     jmp m_fin
  1930.  
  1931.  
  1932.  
  1933.     ;
  1934.     ;  FAMILY 3
  1935.     ;
  1936.   m_snac_3:
  1937.     cmp dx, 3
  1938.     jz m_snac_3_3
  1939.     cmp dx, 0Bh
  1940.     jz m_snac_3_b
  1941.     cmp dx, 0Ch
  1942.     jz m_snac_3_c
  1943.     jmp m_snac_3_other
  1944.  
  1945.     ;
  1946.     ; Server replies via BLM service limitations
  1947.     ;
  1948.   m_snac_3_3:
  1949.     ;
  1950.     ; Ž¡à ¡®âª¨ ¯®ª  ­¥â
  1951.     ;
  1952.  
  1953.     ;
  1954.     ; Client ask server for ICBM service parameters
  1955.     ;
  1956.     mov [ssnac.wFid], 4    ; Family
  1957.     mov [ssnac.wSid], 4    ; Subtype
  1958.     mov [ssnac.dRi], 4     ; request-id
  1959.     mov eax, ssnac
  1960.     mov ebx, buff
  1961.     xor edx, edx
  1962.     call sendsnac
  1963.  
  1964.  
  1965.  
  1966.     jmp m_fin
  1967.  
  1968.     ;
  1969.     ;  User online notification
  1970.     ;
  1971.   m_snac_3_b:
  1972.     ;
  1973.     ; ˆ§ ¢á¥© ¨­ä®à¬ æ¨¨ ¯®ª  ­ã¦¥­ ⮫쪮 áâ âãá
  1974.     ;
  1975.     xor edx, edx           ; ‘ç¥â稪 - ­®¬¥à UIN ¢ ¬ áᨢ¥
  1976.     xor ecx, ecx
  1977.     xor eax, eax
  1978.     cld             ; ‚ ­ ¯à ¢«¥­¨¨ 㢥«¨ç¥­¨ï  ¤à¥á®¢
  1979.  
  1980.     dec edx
  1981.   m_snac_3_b_loop:
  1982.     inc edx
  1983.     cmp edx, UINS
  1984.     jnc m_snac_3_b_end     ;>=
  1985.  
  1986.     mov cl, [mbuff+10]     ; „«¨­  “ˆ
  1987.     mov eax, ecx
  1988.     mov edi, UIN_LEN
  1989.     imul edi, edx
  1990.     lea edi, [uins+edi]    
  1991.     lea esi, [mbuff+11]
  1992.     repe cmpsb
  1993.    
  1994.     jnz m_snac_3_b_loop
  1995.     ;
  1996.     ; UIN Ž¯à¥¤¥«¥­
  1997.     ;
  1998.  
  1999.     ;
  2000.     ;  ©â¨ TLV á® áâ âãᮬ
  2001.     ; á®åà ­ïâì edx
  2002.  
  2003.     xor esi, esi    ; ‘ç¥â稪 TLV
  2004.  
  2005.     xor ecx, ecx                      
  2006.     mov ch, byte [mbuff + eax + 13]   ; Š®«-¢® TLV ¢ 楯®çª¥
  2007.     mov cl, byte [mbuff + eax + 14]   ;
  2008.  
  2009.     lea eax, [eax + 10 + 5]    ; eax 㪠§ â¥«ì ­  楯®çªã TLV
  2010.     lea eax, [mbuff + eax]     ;
  2011.  
  2012.  
  2013.   m_snac_3_b_next_tlv:
  2014.     cmp esi, ecx
  2015.     jz m_snac_3_b_endchain
  2016.  
  2017.  
  2018.     xor ebx, ebx
  2019.     mov bh, [eax]              ;
  2020.     mov bl, [eax + 1]          ; TLV.Type
  2021.  
  2022.     data_debug 'TLV type', ebx
  2023.  
  2024.     cmp ebx, 0x06              ;TLV.Type(0x06) - user status
  2025.     jz m_snac_3_b_status
  2026.  
  2027.     ;
  2028.     ;  §¡¨à ¥¬ 楯®çªã ¤ «ìè¥
  2029.     ;
  2030.  
  2031.     get_next_tlv
  2032.     inc esi
  2033.     jmp m_snac_3_b_next_tlv
  2034.  
  2035.  
  2036.  
  2037.     ; FIXME ¥®¯â¨¬ «ì­® - ª®¤ ¡ã¤¥â 㤠«¥­
  2038.     ;
  2039.     ;lea ecx, [eax+10+11]           ; +sizeof SNAC_head + offset #2 TLV
  2040.     ;mov ax, word [mbuff+ecx]            ;#2 TLV.Type
  2041.     ;cmp ax, 0C00h                  ;dc info (optional)
  2042.     ;jz m_snac_3_b_dc
  2043.     ;cmp ax, 0A00h                  ;external ip address
  2044.     ;jz m_snac_3_b_extip
  2045.     ;jmp m_snac_3_b_bad_tlv
  2046.    
  2047.  
  2048.   ;m_snac_3_b_dc:
  2049.     ;
  2050.     ; à®¯ã᪠¥¬ íâ®â TLV
  2051.     ;
  2052.     ;lea ecx, [ecx+41]
  2053.   ;m_snac_3_b_extip:
  2054.     ;
  2055.     ; ˆ íâ®â :-)
  2056.     ;lea ecx, [ecx+8]
  2057.     ;mov ax, word [mbuff+ecx]
  2058.     ;cmp ax, 0600h                 ;TLV.Type(0x0A) - external ip address
  2059.     ;jz m_snac_3_b_status
  2060.     ;jmp m_snac_3_b_bad_tlv
  2061.     ;
  2062.     ;
  2063.  
  2064.  
  2065.   m_snac_3_b_status:
  2066.     ;
  2067.     ; áâ âãá
  2068.     ;
  2069.     mov ecx, eax
  2070.     mov eax, dword [ecx + 4]
  2071.     ;mov eax, dword [mbuff+ecx+4]
  2072.     call ntohl
  2073.     ;mov ebx, 4
  2074.     ;imul ebx, edx
  2075.     ;mov [stats+ebx], eax
  2076.     mov ecx, eax
  2077.     mov ebx, NAME_LEN
  2078.     imul ebx, edx
  2079.     lea ebx, [names+ebx]
  2080.     mov eax, edx
  2081.     call loadbb
  2082.     jmp m_fin
  2083.  
  2084.  
  2085.   m_snac_3_b_bad_tlv:
  2086.     write_debug 'TLV Type Mismatch in SNAC(3,b)'
  2087.     jmp m_fin
  2088.  
  2089.   m_snac_3_b_end:
  2090.     write_debug 'UIN not in local Contact List'
  2091.     jmp m_fin
  2092.  
  2093.   m_snac_3_b_endchain:
  2094.     jmp m_fin
  2095.  
  2096.  
  2097.  
  2098.   m_snac_3_c:
  2099.     ;
  2100.     ; User offline notification
  2101.     ;
  2102.   xor edx, edx
  2103.   xor ecx, ecx
  2104.  
  2105.     dec edx
  2106.     m_snac_3_c_loop:
  2107.     inc edx
  2108.     cmp edx, UINS
  2109.     jnc m_snac_3_b_end     ;>=
  2110.  
  2111.     mov cl, [mbuff+10]     ; „«¨­  “ˆ
  2112.     mov edi, UIN_LEN
  2113.     imul edi ,edx
  2114.     lea edi, [uins+edi]    
  2115.     lea esi, [mbuff+11]
  2116.     repe cmpsb
  2117.     jnz m_snac_3_c_loop
  2118.     ;
  2119.     ; UIN Ž¯à¥¤¥«¥­
  2120.     ;
  2121.     ;mov eax, -1
  2122.     ;mov ebx, 4
  2123.     ;imul ebx, edx
  2124.     ;mov [stats+ebx], eax
  2125.     mov ecx, -1
  2126.     mov ebx, NAME_LEN
  2127.     imul ebx, edx
  2128.     lea ebx, [names+ebx]
  2129.     mov eax, edx
  2130.     call loadbb
  2131.     jmp m_fin
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.   m_snac_3_other:
  2139.     write_debug 'Unknown SNAC Family 3 Recived'
  2140.     jmp m_fin
  2141.  
  2142.  
  2143.     ;
  2144.     ;  FAMILY 4
  2145.     ;
  2146.   m_snac_4:
  2147.     cmp dx, 5
  2148.     jz m_snac_4_5
  2149.     cmp dx, 7
  2150.     jz m_snac_4_7
  2151.     jmp m_snac_4_other
  2152.  
  2153.     ;
  2154.     ;  Server sends ICBM service parameters to client
  2155.     ;
  2156.   m_snac_4_5:
  2157.     ;
  2158.     ;  Ž¡à ¡®âª¨ ¯®ª  ­¥â
  2159.     ;
  2160.  
  2161.     ;
  2162.     ;  Client change default ICBM parameters command
  2163.     ;
  2164.     mov [ssnac.wFid], 4    ; Family
  2165.     mov [ssnac.wSid], 2    ; Subtype
  2166.     mov [ssnac.dRi], 2     ; request-id
  2167.  
  2168.     mov eax, ICBM_PARAMS
  2169.     mov ebx, buff
  2170.     push ecx
  2171.     mov ecx, ICBMP_LEN
  2172.     call strcpy
  2173.     pop ecx
  2174.  
  2175.     mov eax, ssnac
  2176.     mov ebx, buff
  2177.     mov edx, ICBMP_LEN
  2178.     call sendsnac
  2179.  
  2180.     ;
  2181.     ;   Client ask server PRM service limitations
  2182.     ;
  2183.     mov [ssnac.wFid], 9    ; Family
  2184.     mov [ssnac.wSid], 2    ; Subtype
  2185.     mov [ssnac.dRi], 2     ; request-id
  2186.     mov eax, ssnac
  2187.     mov ebx, buff
  2188.     xor edx, edx
  2189.     call sendsnac
  2190.  
  2191.  
  2192.     jmp m_fin
  2193.  
  2194.     ;
  2195.     ;  Message for client from server
  2196.     ;
  2197.   m_snac_4_7:
  2198.     ;
  2199.     ;  Ž¯à¥¤¥«ï¥¬ ⨯ á®®¡é¥­¨ï ¯® ¯®«î message channel
  2200.     ;
  2201.     xor eax, eax
  2202.     mov ax, word [mbuff+10+8]           ; +10 - à §¬¥à SNAC
  2203.                                         ; +8 ᬥ饭¨¥ ¤® message channel
  2204.     cmp ax, 0100h                       ; 00 01
  2205.     jz m_snac_ch1
  2206.     cmp ax, 0200h
  2207.     jz m_snac_ch2
  2208.     cmp ax, 0400h
  2209.     jz m_snac_ch4
  2210.     jmp m_ch_other
  2211.     ;
  2212.     ;  channel 1 plain text
  2213.     ;
  2214.   m_snac_ch1:
  2215.     ;
  2216.     ; ’.ª ¢ ®ç¥à¥¤­®© à § ®¯¨á ­¨¥ ¯à®â®ª®«  ­¥ ᮢ¯ ¤ ¥â á ॠ«ì­®áâìî
  2217.     ; à §¡¨à ¥¬ ¢á¥ TLV ¯® ¯®à浪ã
  2218.  
  2219.     mov eax, dword [mbuff+10]          ; cookie
  2220.     mov [msg_cookie1], eax
  2221.     mov eax, dword [mbuff+10+4]
  2222.     mov [msg_cookie2], eax             ; ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
  2223.  
  2224.     mov al, [mbuff+10+10]              ; Sender UIN length
  2225.     mov [ui.bUinLength], al
  2226.  
  2227.     push ecx
  2228.     movzx ecx, al
  2229.  
  2230.     lea eax, [mbuff+10+11]             ; UIN string
  2231.     lea ebx, [ui.bUin]                 ; Dest
  2232.     call strcpy
  2233.  
  2234.     lea ecx, [ecx+10+15]               ; ¯¥à¢ë© TLV
  2235.    
  2236.  
  2237.  m_snac_ch1_loop:
  2238.  
  2239.     movzx eax, word [mbuff+ecx]
  2240.     cmp eax, 0100h                     ;TLV.Type(0x01) - user class
  2241.     jz m_snac_ch1_1
  2242.     cmp eax, 0600h                     ;TLV.Type(0x06) - user status
  2243.     jz m_snac_ch1_6
  2244.     cmp eax, 0800h                     ; Unknown type
  2245.     jz m_snac_ch1_8
  2246.     cmp eax, 0500h                     ; Unknown type
  2247.     jz m_snac_ch1_5
  2248.     cmp eax, 0F00h                     ; TLV.Type(0x0f) - user idle time
  2249.     jz m_snac_ch1_f
  2250.     cmp eax, 0300h                     ; TLV.Type(0x03) - account creation time
  2251.     jz m_snac_ch1_3
  2252.     cmp eax, 0400h                     ; TLV.Type(0x04) - automated response flag
  2253.     jz m_snac_ch1_4
  2254.     cmp eax, 0200h                     ; TLV.Type(0x02) - message data
  2255.     jz m_snac_ch1_mess
  2256.     jmp m_snac_msg_tlv_err
  2257.  
  2258.     ;
  2259.     ; ‚®§¬®¦­®, ¤®¯®«­¨â¥«ì­ ï ¨¨ä®à¬ æ¨ï ¡ã¤¥â ®¡à ¡ â뢠âìáï
  2260.     ; ­® ¯®ª  ­¥â
  2261.  
  2262.   m_snac_ch1_1:
  2263.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2264.     call ntohs
  2265.     lea ecx, [eax+ecx+4]
  2266.     jmp m_snac_ch1_loop
  2267.  
  2268.   m_snac_ch1_6:
  2269.  
  2270.     mov eax, dword [mbuff+ecx+4]            ; User status
  2271.     call ntohl
  2272.     mov [ui.dUserStatus], eax
  2273.  
  2274.  
  2275.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2276.     call ntohs
  2277.     lea ecx, [eax+ecx+4]
  2278.     ;
  2279.     ;
  2280.    
  2281.    
  2282.     jmp m_snac_ch1_loop
  2283.  
  2284.   m_snac_ch1_8:
  2285.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2286.     call ntohs
  2287.     lea ecx, [eax+ecx+4]
  2288.     jmp m_snac_ch1_loop
  2289.  
  2290.   m_snac_ch1_5:
  2291.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2292.     call ntohs
  2293.     lea ecx, [eax+ecx+4]
  2294.     jmp m_snac_ch1_loop
  2295.  
  2296.   m_snac_ch1_f:
  2297.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2298.     call ntohs
  2299.     lea ecx, [eax+ecx+4]
  2300.     jmp m_snac_ch1_loop
  2301.  
  2302.   m_snac_ch1_3:
  2303.     movzx eax, word [mbuff+ecx+2]       ; TLV.Length
  2304.     call ntohs
  2305.     lea ecx, [eax+ecx+4]
  2306.     jmp m_snac_ch1_loop
  2307.  
  2308.  
  2309.   m_snac_ch1_4:
  2310.     ;movzx eax, word [buff+ecx+2]       ; TLV.Length
  2311.     lea ecx, [ecx+4]
  2312.     jmp m_snac_ch1_loop
  2313.  
  2314.  
  2315.  
  2316.   m_snac_ch1_mess:
  2317.     ;
  2318.     ;
  2319.     movzx eax, word [mbuff+ecx+4]    ;
  2320.     cmp eax, 0105h                   ; 05 fragment identifier (array of required capabilities)
  2321.     jnz m_snac_ch1_fr_err            ; 01 fragment version
  2322.  
  2323.     movzx eax, word [mbuff+ecx+6]    ; Length
  2324.     call ntohs
  2325.  
  2326.     lea ecx, [ecx+eax+8]             ; à®¯ã᪠¥¬  byte array of required capabilities (1 - text)
  2327.  
  2328.     movzx eax, word [mbuff+ecx]      ;  fragment identifier (message text)
  2329.     cmp eax, 0101h                   ;  fragment version
  2330.     jnz m_snac_ch1_fr_err
  2331.  
  2332.     movzx eax, word [mbuff+ecx+2]    ; TLV Length
  2333.     call ntohs
  2334.     xchg eax, ecx
  2335.  
  2336.     lea eax, [eax+8]                 ;  ç «® ⥪á⮢®£® á®®¡é¥­¨ï
  2337.     lea ecx, [ecx-4]                 ; - sizeof Message charset number, Message charset subset
  2338.  
  2339.     push eax
  2340.     push ecx
  2341.  
  2342.     ;
  2343.     ;  ‚뢮¤¨¬ Message From UIN
  2344.     ;
  2345.  
  2346.     mov eax, MESS
  2347.     call strlen
  2348.     mov ecx, eax
  2349.  
  2350.     mov eax, MESS
  2351.     mov ebx, buff
  2352.     call strcpy
  2353.  
  2354.     lea ebx, [ebx + ecx]
  2355.  
  2356.     ;
  2357.     ; ¥¯«®å® ¡ë«® ¡ë ¢ë¢¥á⨠­¥ UIN   Nickname, ¥á«¨ ®­ ¥áâì ¢ ª®­â ªâ «¨áâ¥
  2358.     ;
  2359.     xor esi, esi    ; ‘ç¥â稪
  2360.  
  2361.    m_snac_ch1_next_uin:
  2362.  
  2363.     cmp esi, UINS
  2364.     jz m_snac_ch1_notfound
  2365.  
  2366.     mov edx, UIN_LEN
  2367.     imul edx, esi
  2368.  
  2369.     lea edx, [uins + edx]
  2370.     movzx ecx, byte [ui.bUinLength]
  2371.     strcmp edx, ui.bUin, ecx
  2372.     jz m_snac_ch1_uin
  2373.  
  2374.     inc esi
  2375.     jmp m_snac_ch1_next_uin
  2376.  
  2377.  
  2378.     ;
  2379.     ; ®¤å®¤ï騩 UIN ¥áâì ¢ ª®­â ªâ-«¨áâ¥
  2380.     ;
  2381.    m_snac_ch1_uin:
  2382.  
  2383.     mov edx, NAME_LEN
  2384.     imul edx, esi
  2385.  
  2386.     lea edx, [names + edx]
  2387.     mov eax, edx
  2388.  
  2389.  
  2390.     call strlen
  2391.     mov ecx, eax
  2392.  
  2393.     mov eax, edx
  2394.     call strcpy
  2395.  
  2396.     jmp m_snac_ch1_msgfrom
  2397.  
  2398.  
  2399.     ;
  2400.     ; …᫨ ¯®¤å®¤ï饣® UIN ­¥â ¢ ª®­â ªâ-«¨áâ¥
  2401.     ;
  2402.    m_snac_ch1_notfound:
  2403.    
  2404.     lea eax, [ui.bUin]
  2405.     movzx ecx, byte [ui.bUinLength]
  2406.     call strcpy
  2407.  
  2408.     ;
  2409.     ; ‚뢮¤ á®®¡é¥­¨ï "®â ª®£®"
  2410.     ;
  2411.    m_snac_ch1_msgfrom:
  2412.  
  2413.     mov [ebx + ecx], byte 0
  2414.  
  2415.     mov eax, buff
  2416.     xor ebx, ebx
  2417.  
  2418.     call writemsg
  2419.     ;
  2420.     ;  ‘ ¬® á®®¡é¥­¨¥
  2421.     ;
  2422.  
  2423.     pop ecx
  2424.     pop eax
  2425.     lea eax, [mbuff+eax]
  2426.  
  2427.     mov ebx, buff
  2428.     call strcpy
  2429.     mov [ebx+ecx], byte 0
  2430.    
  2431.     mov eax, buff
  2432.     call win2dos
  2433.     mov ebx, 00FF0000h
  2434.     call writemsg
  2435.  
  2436.     ;
  2437.     ;  ®¤â¢¥à¦¤ ¥¬ ¯à¨¥¬
  2438.     ;
  2439.  
  2440.     pop ecx
  2441.     ;
  2442.     ; ®ª  ­¥ ॠ«¨§®¢ ­®, â.ª. ­¥ ¬®£ã ­ ©â¨ ª«¨¥­â, ª®â®àë© íâ® ¨á¯®«ì§ã¥â :-)
  2443.     ;
  2444.  
  2445.     jmp m_fin
  2446.  
  2447.   m_snac_msg_tlv_err:
  2448.     write_debug 'TLV TYPE MISMATCH'
  2449.     pop ecx
  2450.     jmp m_fin
  2451.  
  2452.   m_snac_ch1_fr_err:
  2453.     write_debug 'UNKNOWN FRAGMENT IDENTIFIER OR FRAGMENT VERSION'
  2454.  
  2455.   ;m_snac_ch1_end:
  2456.     pop ecx
  2457.  
  2458.     jmp m_fin
  2459.  
  2460.     ;
  2461.     ;   Channel 2 message format (rtf messages, rendezvous)
  2462.     ;
  2463.   m_snac_ch2:
  2464.     ;
  2465.     ;  ®â¯à ¢¨¬ á®®¡é¥­¨¥, çâ® ª ­ « ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
  2466.     ;  ­ã¦­ë ªãª¨ ¨ 㨭
  2467.     mov eax, dword [mbuff+10]
  2468.     mov [msg_cookie1], eax
  2469.     mov eax, dword [mbuff+10+4]
  2470.     mov [msg_cookie2], eax
  2471.  
  2472.     mov al, [mbuff+10+10]              ; Sender UIN length
  2473.     mov [ui.bUinLength], al
  2474.  
  2475.     push ecx
  2476.     movzx ecx, al
  2477.  
  2478.     lea eax, [mbuff+10+11]             ; UIN string
  2479.     lea ebx, [ui.bUin]                 ; Dest
  2480.     call strcpy
  2481.  
  2482.  
  2483.     mov [ssnac.wFid], 4      ; Family
  2484.     mov [ssnac.wSid], 0Bh    ; Subtype
  2485.     mov [ssnac.dRi], 0Bh
  2486.  
  2487.     mov eax, [msg_cookie1]
  2488.     mov dword [buff], eax
  2489.     mov eax, [msg_cookie2]
  2490.     mov dword [buff+4], eax
  2491.     mov word [buff+8], 0200h      ; Channel 2
  2492.  
  2493.     mov al, [ui.bUinLength]
  2494.     mov [buff+10], al
  2495.     lea eax, [ui.bUin]
  2496.     lea ebx, [buff+11]
  2497.     call strcpy
  2498.     lea ecx, [ecx+11]
  2499.  
  2500.     mov word [buff+ecx], 0100h    ; reason code (1 - unsupported channel, 2 - busted payload, 3 - channel specific)
  2501.     mov edx, ecx
  2502.  
  2503.     pop ecx
  2504.     mov eax, ssnac
  2505.     mov ebx, buff
  2506.     call sendsnac
  2507.  
  2508.  
  2509.     jmp m_fin
  2510.  
  2511.     ;
  2512.     ;  Channel 4 message format (typed old-style messages)
  2513.     ;
  2514.   m_snac_ch4:
  2515.  
  2516.  
  2517.  
  2518.   m_ch_other:
  2519.     write_debug 'Unknown message channel'
  2520.  
  2521.     jmp m_fin
  2522.  
  2523.  
  2524.   m_snac_4_other:
  2525.     write_debug 'Unknown SNAC Family 4 recived'
  2526.     jmp m_fin
  2527.  
  2528.  
  2529.  
  2530.     ;
  2531.     ; FAMILY 9
  2532.     ;
  2533.   m_snac_9:
  2534.     cmp dx, 3
  2535.     jz m_snac_9_3
  2536.     jmp m_snac_9_other
  2537.  
  2538.     ;
  2539.     ; Server sends PRM service limitations to client
  2540.     ;
  2541.   m_snac_9_3:
  2542.     ;
  2543.     ; Ž¡à ¡®âª¨ ¯®ª  ­¥â
  2544.     ;
  2545.     if USE_SSI <> 0
  2546.  
  2547.     ;
  2548.     ; ‡ ¯à®á Š‹ á á¥à¢¥à 
  2549.     ;
  2550.  
  2551.     ;
  2552.     ; Request contact list (first time)
  2553.     ;
  2554.     mov [ssnac.wFid], 13h    ; Family
  2555.     mov [ssnac.wSid], 04h    ; Subtype
  2556.     mov [ssnac.dRi], 04h     ; request-id
  2557.  
  2558.     mov eax, ssnac
  2559.     mov ebx, buff
  2560.     xor edx, edx            
  2561.     call sendsnac
  2562.  
  2563.  
  2564.     else
  2565.  
  2566.  
  2567.     ; Žâª«î祭®, ⪠­¥ ¯®¤¤¥à¦¨¢ ¥âáï SIQ
  2568.     ;
  2569.  
  2570.     ;
  2571.     ;  Client ask server for SSI service limitations
  2572.     ;
  2573.     ;mov [ssnac.wFid], 13h  ; Family
  2574.     ;mov [ssnac.wSid], 2    ; Subtype
  2575.     ;mov [ssnac.dRi], 2     ; request-id
  2576.     ;mov eax, ssnac
  2577.     ;mov ebx, buff
  2578.     ;xor edx, edx
  2579.     ;call sendsnac
  2580.  
  2581.     ;
  2582.     ; ¯®á«¥¤­ïï áâ ¤¨ï ᮥ¤¨­¥­¨ï
  2583.     ;
  2584.  
  2585.     ;
  2586.     ; ‡ ¯à è¨¢ ¥¬ á¢®î ¨­ä®à¬ æ¨î
  2587.     ;
  2588.     mov [ssnac.wFid], 1  ; Family
  2589.     mov [ssnac.wSid], 0Eh    ; Subtype
  2590.     mov [ssnac.dRi], 0Eh     ; request-id
  2591.  
  2592.     mov eax, ssnac
  2593.     mov ebx, buff
  2594.     xor edx, edx             ; TLV head len
  2595.     call sendsnac
  2596.  
  2597.  
  2598.     ;
  2599.     ; Client sends its DC info and status to server
  2600.     ;
  2601.     mov [ssnac.wFid], 1  ; Family
  2602.     mov [ssnac.wSid], 1Eh    ; Subtype
  2603.     mov [ssnac.dRi], 1Eh     ; request-id
  2604.  
  2605.     mov [buff], 0           ;  TLV type 06
  2606.     mov [buff+1], 6h        ;
  2607.     mov [buff+2], 0         ;  TLV data length
  2608.     mov [buff+3], 4         ;
  2609.     ;
  2610.     ;
  2611.     mov ax, STATUS_DCDISABLED  ; DC disabled
  2612.     call htons
  2613.     mov word [buff+4], ax
  2614.     mov ax, STATUS_ONLINE
  2615.     mov [status], ax
  2616.     mov word [buff+6], ax
  2617.  
  2618.     mov eax, ssnac
  2619.     mov ebx, buff
  2620.     mov edx, 8           ; TLV head len+ data len
  2621.     call sendsnac
  2622.  
  2623.  
  2624.     ;
  2625.     ;  ‚ë£à㦠¥¬ ­  á¥à¢¥à Š‹
  2626.     ;
  2627.     call uploadkl
  2628.  
  2629.     ;
  2630.     ; ‚ë£à㦠¥¬ ¨­¢¨§¨¡« «¨áâ, ¯®ª  ¯ãá⮩
  2631.     ;
  2632.     mov [ssnac.wFid], 9  ; Family
  2633.     mov [ssnac.wSid], 7    ; Subtype
  2634.     mov [ssnac.dRi], 7
  2635.  
  2636.     mov eax, ssnac
  2637.     mov ebx, buff
  2638.     xor edx, edx
  2639.     call sendsnac
  2640.  
  2641.     ;
  2642.     ; ‚ &RQ …áâì ¯ ª¥â ãáâ ­®¢ª¨ à §à¥è¥­¨©. ï ¨á¯®«ì§ãî ¥£® ¡¥§ ¨§¬¥­¥­¨ï
  2643.     ;  â.ª. ­¥ §­ î, çâ® ®­ ᮤ¥à¦¨â
  2644.     ; - ¢®§¬®¦­®, ¡ã¤ã ¨á¯®«ì§®¢ âì ¯®§¤­¥¥
  2645.  
  2646.     ;mov [ssnac.wFid], 15  ; Family
  2647.     ;mov [ssnac.wSid], 2    ; Subtype
  2648.     ;mov [ssnac.dRi], 2
  2649.  
  2650.     ;mov word [buff], 0100h   ; 00 01 encapsulated META_DATA
  2651.     ;mov word [buff+2], 1000h ; 00 10     Len
  2652.     ;mov word [buff+4], 000Eh ;  LE Len
  2653.     ;mov word [buff+10], 07D0h ; META_DATA_REQ
  2654.  
  2655.  
  2656.     ;mov eax, UIN
  2657.     ;call ascitoint
  2658.     ;mov dword [buff+6], eax
  2659.  
  2660.     ;mov word [buff+12], 0102h   ; request sequence number (incrementing)
  2661.     ;mov word [buff+14], 0424h   ; META_SET_PERMS_USERINFO
  2662.     ;mov [buff+16], 1            ; authorization (1-required, 0-not required)
  2663.     ;mov [buff+17], byte 0       ; webaware (0-no, 1-yes)
  2664.     ;mov [buff+18], 1             ; dc_perms (0-any, 1-contact, 2-authorization)
  2665.     ;mov [buff+19], 0            ;unknown
  2666.  
  2667.     ;mov eax, ssnac
  2668.     ;mov ebx, buff
  2669.     ;mov edx, 20
  2670.  
  2671.  
  2672.     ;
  2673.     ; Client READY command
  2674.     ;
  2675.     mov [ssnac.wFid], 1  ; Family
  2676.     mov [ssnac.wSid], 2    ; Subtype
  2677.     mov [ssnac.dRi], 2     ; request-id
  2678.  
  2679.     mov eax, FAMILY_ARR
  2680.     mov ebx, buff
  2681.     push ecx
  2682.     mov ecx, FA_LEN
  2683.     call strcpy
  2684.     pop ecx
  2685.  
  2686.     mov eax, ssnac
  2687.     mov ebx, buff
  2688.     mov edx, FA_LEN
  2689.     call sendsnac
  2690.  
  2691.  
  2692.     ;
  2693.     ; ‡ ¯à è¨¢ ¥¬ offline á®®¡é¥­¨ï
  2694.     ;
  2695.     mov [ssnac.wFid], 15h  ; Family
  2696.     mov [ssnac.wSid], 2    ; Subtype
  2697.     mov [ssnac.dRi], 2     ; request-id
  2698.  
  2699.     mov word [buff], 0100h      ;  TLV type 01
  2700.     mov word [buff+2], 0A00h    ;  00 0a „«¨­ 
  2701.     mov word [buff+4], 0008h    ;  08 00
  2702.     lea eax, [vtable + vartable.uin]
  2703.     call ascitoint
  2704.     mov dword [buff+6], eax
  2705.  
  2706.     mov word [buff+10],  003Ch ; 3C 00 - ‡ ¯à®á ­  ®ää« ©­®¢ë¥ á®®¡é¥­¨ï
  2707.     mov word [buff+12],  0002  ; 02 00 - request sequence number
  2708.    
  2709.     mov edx, 14        ; Ž¡é¨© à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥
  2710.  
  2711.     mov eax, ssnac
  2712.     mov ebx, buff
  2713.     call sendsnac
  2714.  
  2715.    
  2716.  
  2717.     ;
  2718.     ; ‡ ¯à è¨¢ ¥¬ ¨­ä®à¬ æ¨î ¢á¥å UIN
  2719.     ;
  2720.     call getinfo
  2721.     ;
  2722.     ; § ¢¥à襭® ᮥ¤¨­¥­¨¥
  2723.     ;
  2724.     mov [login], 2
  2725.  
  2726.  
  2727.     end if   ; USE_SSI = 0
  2728.  
  2729.     jmp m_fin
  2730.  
  2731.   m_snac_9_other:
  2732.     write_debug 'Unknown SNAC Family 9 Recived'
  2733.     jmp m_fin
  2734.  
  2735.  
  2736.     ;
  2737.     ; FAMILY 13
  2738.     ;
  2739.   m_snac_13:
  2740.     cmp dx, 3
  2741.     jz m_snac_13_3
  2742.     cmp dx, 6
  2743.     jz m_snac_13_6
  2744.     cmp dx, 0fh
  2745.     jz m_snac_13_F
  2746.  
  2747.     jmp m_snac_13_other
  2748.  
  2749.     ;
  2750.     ; Server sends SSI service limitations to client
  2751.     ;
  2752.   m_snac_13_3:
  2753.     ;
  2754.     ; Ž¡à ¡®âª¨ ¯®ª  ­¥â
  2755.     ;
  2756.  
  2757.     ;
  2758.     ;  SNAC(13,05)        Client check if its local SSI copy is up-to-date
  2759.     ;
  2760.     mov [ssnac.wFid], 13h  ; Family
  2761.     mov [ssnac.wSid], 5    ; Subtype
  2762.     mov [ssnac.dRi], 5     ; request-id
  2763.     mov eax, ssnac
  2764.     ;
  2765.     ;
  2766.     ;
  2767.     mov [buff], 03Dh      ;
  2768.     mov [buff+1], 0E7h    ;     modification date/time of client local SSI copy
  2769.     mov [buff+2], 48h     ;
  2770.     mov [buff+3], 17h     ;
  2771.     ;
  2772.     ;
  2773.     mov [buff+4], 00      ;
  2774.     mov [buff+5], 00h     ;     number of items in client local SSI copy
  2775.    
  2776.     mov ebx, buff
  2777.     mov edx, 5
  2778.     call sendsnac
  2779.  
  2780.     jmp m_fin
  2781.  
  2782.  
  2783.     ;
  2784.     ; Server contact list reply
  2785.     ;
  2786.   m_snac_13_6:
  2787.  
  2788.     lea eax, [mbuff+10]     ; ‚ eax § £à㦠¥¬  ¤à¥á ¯à¨¥¬­®£® ¡ãä¥à + à §¬¥à § £®«®¢ª  snac
  2789.  
  2790.     call ssi_process_data   ; Ž¡à ¡®âª  ¯ ª¥â  á Š‹
  2791.  
  2792.     ;
  2793.     ; €ªâ¨¢¨à㥬 SSI
  2794.     ;
  2795.  
  2796.     mov [ssnac.wFid], 13h  ; Family
  2797.     mov [ssnac.wSid], 7    ; Subtype
  2798.     mov [ssnac.dRi], 7     ; request-id
  2799.     mov eax, ssnac
  2800.     mov ebx, buff
  2801.     xor edx, edx
  2802.     call sendsnac
  2803.  
  2804.  
  2805.     ;
  2806.     ; ¯®á«¥¤­ïï áâ ¤¨ï ᮥ¤¨­¥­¨ï
  2807.     ;
  2808.  
  2809.     ;
  2810.     ; ‡ ¯à è¨¢ ¥¬ á¢®î ¨­ä®à¬ æ¨î
  2811.     ;
  2812.     mov [ssnac.wFid], 1  ; Family
  2813.     mov [ssnac.wSid], 0Eh    ; Subtype
  2814.     mov [ssnac.dRi], 0Eh     ; request-id
  2815.  
  2816.     mov eax, ssnac
  2817.     mov ebx, buff
  2818.     xor edx, edx             ; TLV head len
  2819.     call sendsnac
  2820.  
  2821.  
  2822.     ;
  2823.     ; Client sends its DC info and status to server
  2824.     ;
  2825.     mov [ssnac.wFid], 1  ; Family
  2826.     mov [ssnac.wSid], 1Eh    ; Subtype
  2827.     mov [ssnac.dRi], 1Eh     ; request-id
  2828.  
  2829.     mov [buff], 0           ;  TLV type 06
  2830.     mov [buff+1], 6h        ;
  2831.     mov [buff+2], 0         ;  TLV data length
  2832.     mov [buff+3], 4         ;
  2833.     ;
  2834.     ;
  2835.     mov ax, STATUS_DCDISABLED  ; DC disabled
  2836.     call htons
  2837.     mov word [buff+4], ax
  2838.     mov ax, STATUS_ONLINE
  2839.     mov [status], ax
  2840.     mov word [buff+6], ax
  2841.  
  2842.     mov eax, ssnac
  2843.     mov ebx, buff
  2844.     mov edx, 8           ; TLV head len+ data len
  2845.     call sendsnac
  2846.  
  2847.  
  2848.     ;
  2849.     ;  ‚ë£à㦠¥¬ ­  á¥à¢¥à Š‹
  2850.     ;   FIXME ‚®§¬®¦­®, §¤¥áì ­¥ ­ã¦­  íâ  äã­ªæ¨ï
  2851.     ;call uploadkl
  2852.  
  2853.     ;
  2854.     ; ‚ë£à㦠¥¬ ¨­¢¨§¨¡« «¨áâ, ¯®ª  ¯ãá⮩
  2855.     ;
  2856.     ;mov [ssnac.wFid], 9  ; Family
  2857.     ;mov [ssnac.wSid], 7    ; Subtype
  2858.     ;mov [ssnac.dRi], 7
  2859.  
  2860.     ;mov eax, ssnac
  2861.     ;mov ebx, buff
  2862.     ;xor edx, edx
  2863.     ;call sendsnac
  2864.  
  2865.     ;
  2866.     ; ‚ &RQ …áâì ¯ ª¥â ãáâ ­®¢ª¨ à §à¥è¥­¨©. ï ¨á¯®«ì§ãî ¥£® ¡¥§ ¨§¬¥­¥­¨ï
  2867.     ;  â.ª. ­¥ §­ î, çâ® ®­ ᮤ¥à¦¨â
  2868.     ; - ¢®§¬®¦­®, ¡ã¤ã ¨á¯®«ì§®¢ âì ¯®§¤­¥¥
  2869.  
  2870.     ;mov [ssnac.wFid], 15  ; Family
  2871.     ;mov [ssnac.wSid], 2    ; Subtype
  2872.     ;mov [ssnac.dRi], 2
  2873.  
  2874.     ;mov word [buff], 0100h   ; 00 01 encapsulated META_DATA
  2875.     ;mov word [buff+2], 1000h ; 00 10     Len
  2876.     ;mov word [buff+4], 000Eh ;  LE Len
  2877.     ;mov word [buff+10], 07D0h ; META_DATA_REQ
  2878.  
  2879.  
  2880.     ;mov eax, UIN
  2881.     ;call ascitoint
  2882.     ;mov dword [buff+6], eax
  2883.  
  2884.     ;mov word [buff+12], 0102h   ; request sequence number (incrementing)
  2885.     ;mov word [buff+14], 0424h   ; META_SET_PERMS_USERINFO
  2886.     ;mov [buff+16], 1            ; authorization (1-required, 0-not required)
  2887.     ;mov [buff+17], byte 0       ; webaware (0-no, 1-yes)
  2888.     ;mov [buff+18], 1             ; dc_perms (0-any, 1-contact, 2-authorization)
  2889.     ;mov [buff+19], 0            ;unknown
  2890.  
  2891.     ;mov eax, ssnac
  2892.     ;mov ebx, buff
  2893.     ;mov edx, 20
  2894.  
  2895.  
  2896.     ;
  2897.     ; Client READY command
  2898.     ;
  2899.     mov [ssnac.wFid], 1  ; Family
  2900.     mov [ssnac.wSid], 2    ; Subtype
  2901.     mov [ssnac.dRi], 2     ; request-id
  2902.  
  2903.     mov eax, FAMILY_ARR
  2904.     mov ebx, buff
  2905.     push ecx
  2906.     mov ecx, FA_LEN
  2907.     call strcpy
  2908.     pop ecx
  2909.  
  2910.     mov eax, ssnac
  2911.     mov ebx, buff
  2912.     mov edx, FA_LEN
  2913.     call sendsnac
  2914.  
  2915.  
  2916.     ;
  2917.     ; ‡ ¯à è¨¢ ¥¬ offline á®®¡é¥­¨ï
  2918.     ;
  2919.     mov [ssnac.wFid], 15h  ; Family
  2920.     mov [ssnac.wSid], 2    ; Subtype
  2921.     mov [ssnac.dRi], 2     ; request-id
  2922.  
  2923.     mov word [buff], 0100h      ;  TLV type 01
  2924.     mov word [buff+2], 0A00h    ;  00 0a „«¨­ 
  2925.     mov word [buff+4], 0008h    ;  08 00
  2926.     lea eax, [vtable + vartable.uin]
  2927.     call ascitoint
  2928.     mov dword [buff+6], eax
  2929.  
  2930.     mov word [buff+10],  003Ch ; 3C 00 - ‡ ¯à®á ­  ®ää« ©­®¢ë¥ á®®¡é¥­¨ï
  2931.     mov word [buff+12],  0002  ; 02 00 - request sequence number
  2932.    
  2933.     mov edx, 14        ; Ž¡é¨© à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥
  2934.  
  2935.     mov eax, ssnac
  2936.     mov ebx, buff
  2937.     call sendsnac
  2938.  
  2939.    
  2940.  
  2941.     ;
  2942.     ; ‡ ¯à è¨¢ ¥¬ ¨­ä®à¬ æ¨î ¢á¥å UIN
  2943.     ; FIXME ‚®§¬®¦­®, §¤¥áì ­¥ ­ã¦­  íâ  äã­ªæ¨ï
  2944.     ;call getinfo
  2945.     ;
  2946.     ; § ¢¥à襭® ᮥ¤¨­¥­¨¥
  2947.     ;
  2948.     mov [login], 2
  2949.  
  2950.  
  2951.     jmp m_fin
  2952.  
  2953.  
  2954.  
  2955.  
  2956.     ;
  2957.     ;  Server tell client its local copy up-to-date
  2958.     ;
  2959.   m_snac_13_F:
  2960.     ;
  2961.     ;  Ž¡à ¡®âª¨ ­¥â
  2962.     ;
  2963.  
  2964.     ;
  2965.     ;  Client activates server SSI data
  2966.     ;
  2967.     mov [ssnac.wFid], 13h  ; Family
  2968.     mov [ssnac.wSid], 7    ; Subtype
  2969.     mov [ssnac.dRi], 7     ; request-id
  2970.     mov eax, ssnac
  2971.     mov ebx, buff
  2972.     xor edx, edx
  2973.     call sendsnac
  2974.  
  2975.     ;
  2976.     ; ¯®á«¥¤­ïï áâ ¤¨ï ᮥ¤¨­¥­¨ï
  2977.     ;
  2978.  
  2979.     ;
  2980.     ; Client sends its DC info and status to server
  2981.     ;
  2982.     mov [ssnac.wFid], 1  ; Family
  2983.     mov [ssnac.wSid], 1Eh    ; Subtype
  2984.     mov [ssnac.dRi], 1Eh     ; request-id
  2985.  
  2986.     mov [buff], 0           ;  TLV type 06
  2987.     mov [buff+1], 6h        ;
  2988.     mov [buff+2], 0         ;  TLV data length
  2989.     mov [buff+3], 4         ;
  2990.     ;
  2991.     ;
  2992.     mov ax, STATUS_DCDISABLED  ; DC disabled
  2993.     call htons
  2994.     mov word [buff+4], ax
  2995.     ;
  2996.     ;
  2997.     mov ax, [status]
  2998.     mov word [buff+6], ax
  2999.  
  3000.     mov eax, ssnac
  3001.     mov ebx, buff
  3002.     mov edx, 8           ; TLV head len+ data len
  3003.     call sendsnac
  3004.  
  3005.     ;
  3006.     ; Client READY command
  3007.     ;
  3008.     mov [ssnac.wFid], 1  ; Family
  3009.     mov [ssnac.wSid], 2    ; Subtype
  3010.     mov [ssnac.dRi], 2     ; request-id
  3011.  
  3012.     mov eax, FAMILY_ARR
  3013.     mov ebx, buff
  3014.     push ecx
  3015.     mov ecx, FA_LEN
  3016.     call strcpy
  3017.     pop ecx
  3018.  
  3019.     mov eax, ssnac
  3020.     mov ebx, buff
  3021.     mov edx, FA_LEN
  3022.     call sendsnac
  3023.  
  3024.  
  3025.     ;
  3026.     ; ‡ ¯à è¨¢ ¥¬ offline á®®¡é¥­¨ï
  3027.     ;
  3028.     mov [ssnac.wFid], 15h  ; Family
  3029.     mov [ssnac.wSid], 2    ; Subtype
  3030.     mov [ssnac.dRi], 2     ; request-id
  3031.  
  3032.     mov word [buff], 0100h      ;  TLV type 01
  3033.     mov word [buff+2], 0A00h    ;  00 0a „«¨­ 
  3034.     mov word [buff+4], 0008h    ;  08 00
  3035.     lea eax, [vtable + vartable.uin]
  3036.     call ascitoint
  3037.     mov dword [buff+6], eax
  3038.  
  3039.     mov [buff+10],  003Ch ; 3C 00 - ‡ ¯à®á ­  ®ää« ©­®¢ë¥ á®®¡é¥­¨ï
  3040.     mov [buff+12],  0002  ; 02 00 - request sequence number
  3041.    
  3042.     mov edx, 14        ; Ž¡é¨© à §¬¥à ¤ ­­ëå ¢ ¡ãä¥à¥
  3043.  
  3044.     mov eax, ssnac
  3045.     mov ebx, buff
  3046.     call sendsnac
  3047.  
  3048.  
  3049.  
  3050.     jmp m_fin
  3051.  
  3052.   m_snac_13_other:
  3053.     write_debug 'Unknown SNAC Family 13 Recived'
  3054.     jmp m_fin
  3055.  
  3056.  
  3057.  
  3058.  
  3059.     ;
  3060.     ;  Family 15
  3061.     ;
  3062.  
  3063.   m_snac_15:
  3064.    
  3065.     cmp dx, 3
  3066.     jz m_snac_15_3
  3067.    
  3068.     jmp m_snac_15_other
  3069.  
  3070.  
  3071.     ;
  3072.     ; Server sends message #N
  3073.     ;
  3074.   m_snac_15_3:
  3075.     ;
  3076.     ; Ž¯à¥¤¥«ï¥¬ ¯®¤â¨¯ ¯à¨­ï⮣® ¯ ª¥â 
  3077.     ;
  3078.  
  3079.     ;write_debug 'SNAC 15, 3'
  3080.  
  3081.     xor eax, eax
  3082.     mov ax, word [mbuff+10]  ; + SNAC.head size
  3083.     cmp ax, 0100h            ; 00 01 TLV type
  3084.     jnz m_snac_tlv_err
  3085.  
  3086.     mov ax, word [mbuff+10+10]
  3087.     cmp ax, 0041h             ; Offline Message
  3088.     jz m_snac_offline_mes
  3089.     cmp ax, 0042h             ; End messages
  3090.     jz m_snac_offline_end
  3091.     cmp ax, 07DAh
  3092.     jz m_snac_meta_data
  3093.  
  3094.  
  3095.     write_debug 'Unknown Subtype SNAC (15,3)'
  3096.     jmp m_fin
  3097.  
  3098.   m_snac_offline_mes:
  3099.     mov eax, MESS                      ;
  3100.     call strlen                        ;  ‚뢮¤¨¬ áâபã á á®®¡é¥­¨¥¬ ® ®â¯à ¢¨â¥«¥ ¨ ¢à¥¬¥­¨ ®â¯à ¢ª¨
  3101.     push ecx                           ;
  3102.     mov ecx, eax                   ;
  3103.     mov eax, MESS
  3104.     mov ebx, buff
  3105.     call strcpy
  3106.  
  3107.     mov eax, dword [mbuff+14+10]          ; Sender UIN
  3108.     lea ebx, [buff+ecx]                ; ®á«¥ áâà®çª¨ ® á®®¡é¥­¨¨
  3109.     call int2strd
  3110.  
  3111.     lea ebx, [ebx+eax]
  3112.     mov [ebx], byte ' '
  3113.     inc ebx
  3114.  
  3115.                                        ; + „«¨­  UIN
  3116.     movzx eax, byte [mbuff+21+10]         ; Day
  3117.     call int2strd
  3118.  
  3119.     lea ebx, [ebx+eax]
  3120.     mov [ebx], byte '.'
  3121.     inc ebx
  3122.  
  3123.    
  3124.     movzx eax, byte [mbuff+20+10]         ;Mounth
  3125.     call int2strd
  3126.  
  3127.     lea ebx, [ebx+eax]
  3128.     mov [ebx], byte ' '
  3129.     inc ebx
  3130.  
  3131.     movzx eax, [mbuff+22+10]              ; Hour
  3132.     call int2strd
  3133.  
  3134.     lea ebx, [ebx+eax]
  3135.     mov [ebx], byte ':'
  3136.     inc ebx
  3137.  
  3138.     movzx eax, [mbuff+23+10]              ; Minute
  3139.     call int2strd
  3140.  
  3141.     lea ebx, [ebx+eax]
  3142.     ;mov [ebx], byte ' '
  3143.     ;inc ebx
  3144.  
  3145.     mov [ebx], byte 0                      ; Str end
  3146.     mov eax, buff
  3147.     xor ebx, ebx
  3148.  
  3149.     call writemsg
  3150.  
  3151.     movzx ecx, word [mbuff+26+10]             ; „«¨­  á®®®¡é¥­¨ï
  3152.     lea eax, [mbuff+28+10]
  3153.     mov ebx, buff
  3154.     call strcpy
  3155.  
  3156.     mov [ebx+ecx], byte 0
  3157.  
  3158.     mov eax, buff
  3159.     call win2dos                              ;¯¥à¥ª®¤¨à㥬
  3160.  
  3161.     mov ebx, 00FF0000h                        ;–¢¥â
  3162.  
  3163.     call writemsg
  3164.  
  3165.  
  3166.     pop ecx
  3167.  
  3168.     jmp m_fin
  3169.  
  3170.  
  3171.   m_snac_offline_end:
  3172.     ;
  3173.     ; “¤ «ï¥¬ á®®¡é¥­¨ï ­  á¥à¢¥à¥
  3174.     ;
  3175.     mov [ssnac.wFid], 15h  ; Family
  3176.     mov [ssnac.wSid], 2    ; Subtype
  3177.     mov [ssnac.dRi], 0602h     ; request-id
  3178.  
  3179.     mov word [buff], 0100h     ;  00 01 TLV.Type(1) - encapsulated META_DATA1
  3180.     mov word [buff+2], 0A00h   ;  00 0A TLV.Length
  3181.     mov word [buff+4], 0008h   ;  08 00 data chunk size (TLV.Length-2)
  3182.     lea eax, [vtable + vartable.uin]
  3183.     call ascitoint
  3184.     mov dword [buff+6], eax    ; xx xx xx xx (LE) client uin
  3185.     mov word [buff+10], 003Eh  ; 3E 00  (LE) data type: delete offline msgs request cmd
  3186.     mov word [buff+12], 0007h  ;  xx xx (LE) request sequence number
  3187.  
  3188.     mov edx, 14                ;  §¬¥à ¤ ­­ëå
  3189.     mov eax, ssnac
  3190.     mov ebx, buff
  3191.     call sendsnac
  3192.  
  3193.  
  3194.  
  3195.     jmp m_fin
  3196.  
  3197.     ;
  3198.     ; Žâ¢¥â ­  § ¯à®á ® ¯®«ì§®¢ â¥«ïå
  3199.     ;
  3200.   m_snac_meta_data:
  3201.     ;
  3202.     ; Ž¯à¥¤¥«ï¥¬ ®ç¥à¥¤­®© ¯®¤â¨¯ :-)
  3203.     ;
  3204.     mov ax, word [mbuff+10+14]
  3205.     cmp ax, 0104h                   ;data subtype: META_SHORT_USERINFO
  3206.     jz m_snac_short_userinfo
  3207.     cmp ax, 00C8h
  3208.     jz m_snac_basic_userinfo        ;data subtype: META_BASIC_USERINFO
  3209.     write_debug 'Unknown META DATA subtype'
  3210.     jmp m_fin
  3211.  
  3212.  
  3213.  
  3214.   m_snac_short_userinfo:
  3215.     ;
  3216.     ; ˆ§ ¢á¥© ¨­ä®à¬ æ¨¨ ¯®ª  ­ã¦¥­ ⮫쪮 ­¨ª
  3217.     ;
  3218.     mov al, [mbuff+10+16]
  3219.      cmp al, 0Ah                    ;success byte
  3220.      jnz m_fin
  3221.  
  3222.      movzx eax, word [mbuff+10+12]  ;request sequence number
  3223.      ;
  3224.      ; ‚ § ¯à®á¥ ï ¨á¯®«ì§®¢ « ¯®à浪®¢ë© ­®¬¥à î§¥à  ¢ Š‹
  3225.      lea ebx, [mbuff+10+19]         ;nickname string
  3226.      ; „«¨­  áâப¨ ­¥ ­ã¦­ , â.ª. áâப  Null-Terminated
  3227.      ;Ž¯à¥¤¥«ï¥¬ áâ âãá
  3228.      mov ecx, 4
  3229.      imul ecx, eax
  3230.      mov ecx, [stats+ecx]
  3231.  
  3232.      call loadbb
  3233.  
  3234.  
  3235.  
  3236.     jmp m_fin
  3237.  
  3238.   ;
  3239.   ; ⪠SIQ ­  § ¯à®á ª®à®âª®© ¨­äë ®â¢¥ç ¥â
  3240.   ; ¯ ª¥â®¬ ¡ §®¢®© ¨­ä®à¬ æ¨¨, ॠ«¨§ãî ¯®ª  ⮫쪮 ¥£®
  3241.   ;
  3242.   m_snac_basic_userinfo:
  3243.      mov al, [mbuff+10+16]
  3244.      cmp al, 0Ah                    ;success byte
  3245.      jnz m_fin
  3246.  
  3247.      movzx eax, word [mbuff+10+12]  ;request sequence number
  3248.      ;
  3249.      ; ‚ § ¯à®á¥ ï ¨á¯®«ì§®¢ « ¯®à浪®¢ë© ­®¬¥à î§¥à  ¢ Š‹
  3250.      lea ebx, [mbuff+10+19]         ;nickname string
  3251.      ; „«¨­  áâப¨ ­¥ ­ã¦­ , â.ª. áâப  Null-Terminated
  3252.      ;Ž¯à¥¤¥«ï¥¬ áâ âãá
  3253.      mov ecx, 4
  3254.      imul ecx, eax
  3255.      mov ecx, [stats+ecx]
  3256.  
  3257.      call loadbb
  3258.  
  3259.        
  3260.  
  3261.     jmp m_fin
  3262.  
  3263.   m_snac_tlv_err:
  3264.     write_debug 'TLV TYPE MISMATCH'
  3265.  
  3266.     jmp m_fin
  3267.    
  3268.  
  3269.   m_snac_15_other:
  3270.  
  3271.     write_debug 'Unknown SNAC Family 15 Recived'
  3272.  
  3273.     jmp m_fin
  3274.  
  3275.  
  3276.   m_other_snac:
  3277.     write_debug 'Unknown SNAC recived'
  3278.     jmp m_fin
  3279.  
  3280.  
  3281.  
  3282.   m_fin:
  3283.     ;pop edx
  3284.     ;pop ebx
  3285.     ;pop eax
  3286.     popad
  3287.     popf
  3288.   ret
  3289.  
  3290. ; „«ï ¯¥à¥¢®¤  DWORD ¨§ Little Endian ¢ Big Endian
  3291. ; ¨ ­ ®¡®à®â :-)
  3292. ; <--EAX DWORD
  3293. ; -->EAX
  3294. ;
  3295.   ntohl:
  3296.   htonl:
  3297.     ;pushf
  3298.     push ebx
  3299.     ;push ecx
  3300.  
  3301.     xor ebx, ebx
  3302.  
  3303.     mov bl, ah
  3304.     mov bh, al
  3305.     shl ebx, 16
  3306.    
  3307.     shr eax, 16
  3308.     mov bl, ah
  3309.     mov bh, al
  3310.    
  3311.     mov eax, ebx
  3312.  
  3313.     ;pop ecx
  3314.     pop ebx
  3315.     ;popf
  3316.   ret
  3317.  
  3318.  
  3319. ; „«ï ¯¥à¥¢®¤  WORD ¨§ Little Endian ¢ Big Endian
  3320. ; <--AX WORD                                            
  3321. ; -->AX WORD
  3322. ;
  3323.  
  3324.   ntohs:
  3325.   htons:
  3326.     ;pushf
  3327.     push ebx
  3328.  
  3329.     xor ebx, ebx
  3330.     mov bl, ah
  3331.     mov bh, al
  3332.     mov eax, ebx
  3333.  
  3334.     pop ebx
  3335.     ;popf
  3336.   ret
  3337.  
  3338. ;
  3339. ; ¯ àá¨â SNAC
  3340. ; <--EAX 㪠§ â¥«ì ­  SNAC_head
  3341. ; <--EBX 㪠§ â¥«ì ­  ¡ãää¥à
  3342. ; -->EAX 㪠§ â¥«ì ­ ç «® ¤ ­­ëå = buffer+sizeof SNAC_head
  3343. ;
  3344. ;
  3345.   snacpar:
  3346.     pushf
  3347.     push ecx
  3348.     ;push edx
  3349.  
  3350.     mov cl, [ebx+1]     ; Family (service) id number ¬« ¤è¨© ¡ ©â
  3351.     mov ch, [ebx]       ; áâ à訩
  3352.     mov word [eax], cx
  3353.  
  3354.     mov cl, [ebx+3]     ; Family subtype id number
  3355.     mov ch, [ebx+2]     ;
  3356.     mov word [eax+2], cx
  3357.  
  3358.     mov cl, [ebx+5]      ; SNAC flags
  3359.     mov ch, [ebx+4]      ;
  3360.     mov word [eax+4], cx ;
  3361.                            
  3362.     mov cl, [ebx+7]         ;
  3363.     mov ch, [ebx+6]         ;
  3364.     mov word [eax+8], cx    ; SNAC request id
  3365.     mov cl, [ebx+8]         ;
  3366.     mov ch, [ebx+7]         ;
  3367.     mov word [eax+6], cx    ;
  3368.    
  3369.     add ebx, 10             ; §¬¥à § £®«®¢ª 
  3370.     mov eax, ebx
  3371.  
  3372.  
  3373.     ;pop edx
  3374.     pop ecx
  3375.     popf
  3376.   ret
  3377.  
  3378. ;
  3379. ; ¯ àá¨â userinfo block
  3380. ;  FIXIT
  3381. ;
  3382.  
  3383. ;  userinfopar:
  3384. ;    pushf
  3385. ;
  3386. ;
  3387. ;
  3388. ;
  3389. ;
  3390. ;
  3391. ;    popf
  3392. ;  ret
  3393.  
  3394. ;
  3395. ;  ¯®á뫪  á®®¡é¥­¨ï
  3396. ;  [eax] <-- ⥪áâ®¢ë© ¡ãä¥à  \
  3397. ;  [ebx] <-- UIN              /  Null-terminated
  3398.  
  3399.   sendmsg:
  3400.     pushf
  3401.     pushad
  3402.     push eax
  3403.     push ebx
  3404.  
  3405.     mov [ssnac.wFid], 4h  ; Family
  3406.     mov [ssnac.wSid], 6    ; Subtype
  3407.     mov [ssnac.dRi], 106h     ; request-id
  3408.     ;
  3409.     ;  ®«ãç ¥¬ ¢à¥¬ï á § ¯ã᪠ á¨á⥬ë, ¤«ï cookie
  3410.     ;
  3411.     ;mov eax, 26
  3412.     ;mov ebx, 9
  3413.     ;int 40h
  3414.     mcall 26, 9
  3415.  
  3416.     mov dword [buff], eax      ; Cookie 1
  3417.     mov dword [buff+4], eax    ; Cookie 2
  3418.  
  3419.     mov word [buff+8], 0100h   ; Message channel 00 01
  3420.  
  3421.  
  3422.     pop ebx
  3423.     mov eax, ebx
  3424.     call strlen
  3425.  
  3426.     mov [buff+10], al
  3427.     mov ecx, eax
  3428.     mov eax, ebx
  3429.     lea ebx, [buff+11]
  3430.     call strcpy
  3431.     lea ecx, [ecx+11]
  3432.  
  3433.     mov word [buff+ecx], 0200h    ;     TLV.Type(0x02) - message data
  3434.    
  3435.     ;push ecx                      ;
  3436.                                    ; TLV.Length
  3437.  
  3438.     mov word [buff+ecx+4], 0105h         ; 05 01   01 - fragment version, 05 - fragment identifier
  3439.    
  3440.     mov word [buff+ecx+6], 0100h         ; data length
  3441.    
  3442.     mov [buff+ecx+8], 01                 ; byte array of required capabilities (1 - text)
  3443.  
  3444.     mov [buff+ecx+9], 01                 ; fragment identifier (text message)
  3445.     mov [buff+ecx+10], 01                 ; fragment version
  3446.  
  3447.     pop ebx
  3448.     mov eax, ebx
  3449.     call strlen
  3450.     mov edx, eax
  3451.     lea eax, [eax+4]                     ; „«¨­  á®®¡é¥­¨ï + Message charset number+ Message language number
  3452.    
  3453.     call htons
  3454.     mov word [buff+ecx+11], ax
  3455.  
  3456.     mov eax, edx
  3457.     lea eax, [eax+13]                     ; + ¤«¨­  á«ã¦¥¡­ëå ¤ ­­ëå
  3458.     call htons
  3459.     mov word [buff+ecx+2], ax
  3460.  
  3461.  
  3462.     mov word [buff+ecx+13], 0700h        ; Message charset number
  3463.     mov word [buff+ecx+15], 0300h        ; Message language number
  3464.  
  3465.     mov eax, ecx
  3466.     mov ecx, edx                         ; Len
  3467.     lea edx, [eax+17]
  3468.  
  3469.     mov eax, ebx                         ;Source
  3470.    
  3471.     lea ebx, [buff+edx]                  ;Dest
  3472.    
  3473.     call strcpy
  3474.     lea ecx, [ecx+edx]                   ; +String length
  3475.    
  3476.     mov [buff+ecx], byte 0
  3477.     mov eax, ebx
  3478.     call dos2win
  3479.  
  3480.  
  3481.     mov word [buff+ecx], 0600h               ; TLV.Type(0x06) - store message if recipient offline
  3482.     mov word [buff+ecx+2], 0                 ; TLV.Length
  3483.  
  3484.     lea edx, [ecx+4]                         ; +TLV_head length
  3485.     mov eax, ssnac
  3486.     mov ebx, buff
  3487.     mov ecx, [socket]
  3488.     call sendsnac
  3489.  
  3490.  
  3491.  
  3492.     popad
  3493.     popf
  3494.   ret
  3495.  
  3496. ;
  3497. ;   ‡ ¯à®á ¨­ä®à¬ æ¨¨ UIN®¢
  3498. ;
  3499.   getinfo:
  3500.     pushad
  3501.     pushf
  3502.     ;
  3503.     ; SNAC (15,2) - Meta information request
  3504.     ;
  3505.  
  3506.     mov [ssnac.wFid], 15h  ; Family
  3507.     mov [ssnac.wSid], 2    ; Subtype
  3508.     mov [ssnac.dRi], 702h     ; request-id
  3509.  
  3510.     mov word [buff], 0100h         ;TLV.Type(1) - encapsulated META_DATA
  3511.     mov word [buff+2], 1000h       ; 00 10  TLV.Length
  3512.     mov word [buff+4], 000Eh       ; (LE)               data chunk size (TLV.Length-2)
  3513.     lea eax, [vtable + vartable.uin]
  3514.     call ascitoint
  3515.     mov dword [buff+6], eax        ;(LE)                request owner uin
  3516.     mov word [buff+10], 07D0h      ;data type: META_DATA_REQ
  3517.     ;mov word [buff+12], 0008h      ; request sequence number <<<-- Œ®¦¥â ¬¥­ïâìáï FIXIT
  3518.     mov word [buff+14], 04BAh      ; data subtype: META_SHORTINFO_REQUEST
  3519.  
  3520.     mov ecx, [socket]
  3521.     mov edx, 20
  3522.  
  3523.     xor esi, esi        ; ‘ç¥â稪
  3524.     xor eax, eax
  3525.  
  3526.   gi_loop:
  3527.     mov ebx, esi
  3528.     mov word [buff+12], bx      ; request sequence number
  3529.     mov ebx, UIN_LEN
  3530.     imul ebx, esi
  3531.     mov al,  [uins+ebx]
  3532.     cmp al, 0
  3533.     jz  gi_end
  3534.  
  3535.     lea eax, [uins+ebx]
  3536.     call ascitoint
  3537.     mov dword [buff+16], eax
  3538.  
  3539.     mov eax, ssnac
  3540.     mov ebx, buff
  3541.    
  3542.     call sendsnac
  3543.     inc esi
  3544.     cmp esi, UINS
  3545.     jnc gi_end
  3546.     jmp gi_loop
  3547.  
  3548.  
  3549.  
  3550.  
  3551.  
  3552.  
  3553.   gi_end:
  3554.     popf
  3555.     popad
  3556.   ret
  3557.  
  3558. ;
  3559. ; ‡ £à㦠¥¬ «®ª «ì­ë© Š‹ ­  á¥à¢¥à ¤«ï ¯®«ã祭¨ï áâ âãá  î§¥à®¢
  3560. ;
  3561.   uploadkl:
  3562.     pushf
  3563.     pushad
  3564.     ;
  3565.     ;  Add buddy(s) to contact list
  3566.     ;
  3567.     mov [ssnac.wFid], 3   ; Family
  3568.     mov [ssnac.wSid], 4   ; Subtype
  3569.     mov [ssnac.dRi], 4    ; request-id
  3570.  
  3571.     xor esi, esi          ; ‘ç¥â稪
  3572.     xor edx, edx          ; ‡ ¯®«­¥­® ¡ ©â
  3573.  
  3574.   ukk_loop:
  3575.     mov ebx, UIN_LEN
  3576.     imul  ebx, esi
  3577.     mov al, [uins+ebx]
  3578.     cmp al, 0
  3579.     jz ukk_end
  3580.     lea eax, [uins+ebx]
  3581.    
  3582.     call strlen
  3583.     mov [buff+edx], al
  3584.     inc edx
  3585.  
  3586.     mov ecx, eax
  3587.     lea eax, [uins+ebx]    ; Source
  3588.     lea ebx, [buff+edx]
  3589.     call strcpy
  3590.     add edx, ecx
  3591.     inc esi
  3592.     cmp esi, UINS
  3593.     jz ukk_end
  3594.     jmp ukk_loop
  3595.  
  3596.    
  3597.  
  3598.  
  3599.  
  3600.   ukk_end:
  3601.     mov eax, ssnac
  3602.     mov ebx, buff
  3603.     mov ecx, [socket]
  3604.     call sendsnac
  3605.  
  3606.     popad
  3607.     popf
  3608.   ret
  3609.  
  3610. ;
  3611. ;
  3612. ;
  3613.   sendkeep:
  3614.     pushf
  3615.     pushad
  3616.     cmp [login], 2
  3617.     jnz @f
  3618.     mov ax, [timer]
  3619.     cmp ax, 300           ;60 c
  3620.     jb @f
  3621.     mov [timer], 0
  3622.     mov [flap.bId], FLAP_ID
  3623.     mov [flap.bCh], 5         ;Keep alive
  3624.     mov [flap.wDs], 0
  3625.     inc [seq]
  3626.     mov ax, [seq]
  3627.     mov [flap.wSn], ax
  3628.     mov eax, flap
  3629.     mov ebx, buff
  3630.     mov ecx, [socket]
  3631.     call sendflap
  3632.  
  3633.  
  3634.   @@:
  3635.     popad
  3636.     popf
  3637.   ret
  3638.  
  3639. ;
  3640. ; ”ã­ªæ¨ï ¤«ï ãáâ ­®¢ª¨ áâ âãá 
  3641. ; áâ âãá ¢ ¯¥à¥¬¥­­®© status
  3642.  setstatus:
  3643.   push eax
  3644.   push ebx
  3645.   push edx
  3646.     ;
  3647.     ; Client sends its DC info and status to server
  3648.     ;
  3649.     mov [ssnac.wFid], 1  ; Family
  3650.     mov [ssnac.wSid], 1Eh    ; Subtype
  3651.     mov [ssnac.dRi], 1Eh     ; request-id
  3652.  
  3653.     mov [buff], 0           ;  TLV type 06
  3654.     mov [buff+1], 6h        ;
  3655.     mov [buff+2], 0         ;  TLV data length
  3656.     mov [buff+3], 4         ;
  3657.     ;
  3658.     ;
  3659.     mov ax, STATUS_DCDISABLED  ; DC disabled
  3660.     call htons
  3661.     mov word [buff+4], ax
  3662.     ;
  3663.     ;
  3664.     mov ax, [status]
  3665.     mov word [buff+6], ax
  3666.  
  3667.     mov eax, ssnac
  3668.     mov ebx, buff
  3669.     mov edx, 8           ; TLV head len+ data len
  3670.     call sendsnac
  3671.  
  3672.   pop edx
  3673.   pop ebx
  3674.   pop eax
  3675.  ret
  3676.  
  3677.  
  3678. ;
  3679. ; Œ ªà®á ¯à®¯ã᪠¥â ¢á¥ ¯à®¡¥«ë ¢ áâப¥ ¤®
  3680. ; 1 £® §­ ç é¥£® ᨬ¢®« 
  3681. ; eax - 㪠§ â¥«ì ­  null-terminated áâபã
  3682.  
  3683. macro skip_spaces {
  3684.   local ..sp_end, ..sp_loop
  3685.  
  3686.   push ebx
  3687.   push ecx
  3688.  
  3689.   xor ebx, ebx
  3690.   xor ecx, ecx
  3691.  
  3692.  ..sp_loop:
  3693.  
  3694.  
  3695.   mov bl, [eax + ecx]
  3696.   cmp bl, 0x20
  3697.   jnz ..sp_end
  3698.  
  3699.  
  3700.   inc ecx
  3701.   jmp ..sp_loop
  3702.  
  3703.  
  3704.  
  3705.  ..sp_end:
  3706.   lea eax, [eax + ecx]
  3707.  
  3708.   pop ecx
  3709.   pop ebx
  3710. }
  3711.  
  3712.  
  3713.  
  3714.  
  3715.  
  3716. ;
  3717. ; Ž¡à ¡®âª  ª®¬ ­¤
  3718. ; ‚ ¥ax ¯¥à¥¤ ¥âáï 㪠§ â¥«ì ­  áâபã. Š®¬ ­¤  ¨  à£ã¬¥­âë à §¤¥«¥­ë ¯à®¡¥«®¬
  3719. ; ª®¬ ­¤  ­ ç¨­ ¥âáï á /
  3720. ; ¢ eax - १ã«ìâ â ¢ë¯®«­¥­¨ï ª®¬ ­¤ë, -1 ª®¬ ­¤  ­¥ áãé¥áâ¢ã¥â, 0 ®ª, ¤à㣨¥ § ¢¨áï⠮⠪®¬ ­¤ë
  3721.  
  3722.  cmd:
  3723.    push ebx
  3724.    push ecx
  3725.    push edi
  3726.    push esi
  3727.  
  3728.    ;
  3729.    ; à®¢¥à¨âì ¯¥à¢ë© ᨬ¢®«
  3730.    ;
  3731.    xor ebx, ebx
  3732.    mov bl, [eax]
  3733.    cmp bl, '/'
  3734.    jnz cmd_end
  3735.  
  3736.    ;
  3737.    ;  §¤¥«¥­¨¥ ¯® 1© ¡ãª¢¥ ª®¬ ­¤ë
  3738.    ;
  3739.    mov bl, [eax + 1]
  3740.  
  3741.    cmp bl, 'c'
  3742.    jz cmd_c
  3743.  
  3744.    cmp bl, 'e'
  3745.    jz cmd_e
  3746.  
  3747.    cmp bl, 's'
  3748.    jz cmd_s
  3749.  
  3750.    jmp cmd_no
  3751.  
  3752.   cmd_c:
  3753.  
  3754.   cmd_e:
  3755.  
  3756.    lea ebx, [eax + 1]
  3757.    strcmp ebx, str_exit, str_exit.len
  3758.    jz cmd_exit
  3759.  
  3760.    jmp cmd_no
  3761.  
  3762.  
  3763.  
  3764.  
  3765.   cmd_s:
  3766.  
  3767.    lea ebx, [eax + 1]
  3768.    strcmp ebx, str_status, str_status.len
  3769.    jz cmd_status
  3770.  
  3771.    jmp cmd_no
  3772.  
  3773.  
  3774.  
  3775.   cmd_exit:
  3776.  
  3777.  
  3778.   cmd_status:
  3779.    ;
  3780.    ; ãáâ ­®¢¨âì áâ âãá ¨ ¯®á« âì ¯ ª¥â ᬥ­ë áâ âãá 
  3781.    ;
  3782.    lea eax, [eax + 1 + str_status.len]
  3783.    skip_spaces
  3784.  
  3785.    strcmp eax, str_online, str_online.len
  3786.    jz cmd_st_online
  3787.  
  3788.    strcmp eax, str_away, str_away.len
  3789.    jz cmd_st_away
  3790.  
  3791.    strcmp eax, str_na, str_na.len
  3792.    jz cmd_st_na
  3793.  
  3794.    strcmp eax, str_dnd, str_dnd.len
  3795.    jz cmd_st_dnd
  3796.  
  3797.    strcmp eax, str_bisy, str_bisy.len
  3798.    jz cmd_st_bisy
  3799.  
  3800.    strcmp eax, str_free4chat, str_free4chat.len
  3801.    jz cmd_st_free4chat
  3802.  
  3803.    ;
  3804.    ; ‘â âãá ­¥ ®¯à¥¤¥«¥­.
  3805.    ; ‚뢥á⨠ᮮ¡é¥­¨¥  ® ¤®áâ㯭ëå áâ âãá å
  3806.    ;
  3807.    mov eax, str_status_message
  3808.    xor ebx, ebx
  3809.    call writemsg
  3810.  
  3811.    jmp cmd_end
  3812.  
  3813.  
  3814.   cmd_st_online:
  3815.  
  3816.   cmd_st_away:
  3817.  
  3818.   cmd_st_na:
  3819.  
  3820.   cmd_st_dnd:
  3821.  
  3822.   cmd_st_bisy:
  3823.  
  3824.   cmd_st_free4chat:
  3825.  
  3826.  
  3827.   cmd_no:
  3828.  
  3829.   cmd_end:
  3830.    pop esi
  3831.    pop edi
  3832.    pop ecx
  3833.    pop ebx
  3834.  
  3835.  ret
  3836.  
  3837.  
  3838.  
  3839.  
  3840. ; <--- initialised data --->
  3841. DATA
  3842. include "parser_data.inc"
  3843. include "ssi_data.inc"
  3844. include "comp_data.inc"
  3845.  
  3846.  
  3847. head db 'KI',0
  3848.  
  3849.  
  3850. ;
  3851. MESS db 'Message from ', 0
  3852. CUSER db 'Current user: ', 0
  3853.  
  3854. ;
  3855. ; ‘¯¨á®ª IP á¥à¢¥à®¢ ICQ
  3856.  
  3857. ;205.188.153.121
  3858. ;icq_ip db '64.12.200.089',0
  3859. ;icq_ip db '64.12.161.185',0
  3860. ;icq_ip db '205.188.179.233',0
  3861.  
  3862.  
  3863. ;
  3864. flap FLAP_head
  3865. rflap FLAP_head
  3866. ;
  3867. ssnac SNAC_head        ; ¤«ï ¯¥à¥¤ ç¨ SNAC
  3868. rsnac SNAC_head        ; ¤«ï ¯à¨­ï⮣® SNAC
  3869. ;
  3870. ui UI_head             ; User info
  3871. ;
  3872. procinfo process_information
  3873. ;
  3874. ;UIN db '362820484',0
  3875. ;PASS db 'test',0
  3876. ID_STRING db 'ICQ Inc. - Product of ICQ (TM).2000b.4.65.1.3281.85',0
  3877. ;ID_STRING db 'ICQ Inc. - Product of ICQ (TM).2001b.5.17.1.3642.85',0
  3878.  
  3879.  
  3880. ;CAPABILITIES db 0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00,\
  3881.                 ;0x97, 0xB1, 0x27, 0x51, 0x24, 0x3C, 0x43, 0x34, 0xAD, 0x22, 0xD6, 0xAB, 0xF7, 0x3F, 0x14, 0x92,\
  3882. CAPABILITIES db 0x2E, 0x7A, 0x64, 0x75, 0xFA, 0xDF, 0x4D, 0xC8, 0x88, 0x6F, 0xEA, 0x35, 0x95, 0xFD, 0xB6, 0xDF,\
  3883.                 'KOLIBRI KI(cq)',0,0
  3884.                 ;0x09, 0x46, 0x13, 0x44, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
  3885.  
  3886. ; 1 áâப 
  3887. ; {09461349-4C7F-11D1-8222-444553540000}
  3888. ; Client supports channel 2 extended, TLV(0x2711) based messages. Currently used only by ICQ clients.
  3889. ;ICQ clients and clones use this GUID as message format sign. Trillian client use another GUID
  3890. ; in channel 2 messages to implement its own message format (trillian doesn't use TLV(x2711) in SecureIM channel 2 messages!).
  3891. ;
  3892. ; 2 áâப 
  3893. ; {97B12751-243C-4334-AD22-D6ABF73F1492}  
  3894. ; Client supports RTF messages. This capability currently used by ICQ service and ICQ clients.
  3895. ;
  3896. ; 4 áâப 
  3897. ; {0946134E-4C7F-11D1-8222-444553540000}
  3898. ; Client supports UTF-8 messages. This capability currently used by AIM service and AIM clients
  3899. ;
  3900.  
  3901.  
  3902.  
  3903.                                      
  3904. ;
  3905. ; From &RQ
  3906. ;
  3907.  
  3908. ;CAPABILITIES db 0x09, 0x46, 0x13, 0x49, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45,\    ;...P.F.IL.T‚"DE
  3909. ;                0x53, 0x54, 0x00, 0x00, 0x09, 0x46, 0x13, 0x44, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45,\        ;ST...F.DL.T‚"DE
  3910. ;                0x53, 0x54, 0x00, 0x00, 0x09, 0x46, 0x13, 0x4E, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45,\        ;ST...F.NL.T‚"DE
  3911. ;                0x53, 0x54, 0x00, 0x00, 0x09, 0x46, 0x00, 0x00, 0x4C, 0x7F, 0x11, 0xD1, 0x82, 0x22, 0x44, 0x45,\        ;ST...F..L.T‚"DE
  3912. ;                0x53, 0x54, 0x00, 0x00, 0x26, 0x52, 0x51, 0x69, 0x6E, 0x73, 0x69, 0x64, 0x65, 0x02, 0x07, 0x09,\        ;ST..&RQinside...
  3913. ;                0x00, 0x00, 0x00, 0x00                                        
  3914.  
  3915.  
  3916. C_LEN = 32
  3917. ;C_LEN = 80
  3918. ICBM_PARAMS db 0, 0, 0, 0, 0, 0Bh, 01Fh, 040h, 3, 0E7h, 3, 0E7h, 0, 0, 0, 0
  3919. ICBMP_LEN = 16           ;    ^^^ from &RQ
  3920.  
  3921.  
  3922. ;
  3923. ; from &rq
  3924. ;
  3925. FAMILY_ARR db  0x00, 0x01, 0x00, 0x03, 0x01, 0x10, 0x04, 0x7B,  0x00, 0x13, 0x00, 0x02, 0x01, 0x10, 0x04, 0x7B,\    
  3926.                0x00, 0x02, 0x00, 0x01, 0x01, 0x01, 0x04, 0x7B,  0x00, 0x03, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\    
  3927.                0x00, 0x15, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,  0x00, 0x04, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\    
  3928.                0x00, 0x06, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,  0x00, 0x09, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,\    
  3929.                0x00, 0x0A, 0x00, 0x01, 0x01, 0x10, 0x04, 0x7B,  0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x06, 0x6A    
  3930.  
  3931. ;
  3932. ;
  3933. ;
  3934.  
  3935. FA_LEN = 50h
  3936. ;
  3937. ;
  3938. ;
  3939. ID_NUM = 010Ah
  3940. MAJOR = 05h
  3941. ;MAJOR = 04h
  3942. ;MINOR = 041h
  3943. MINOR = 011h
  3944. LESSER = 01h
  3945. ;BUILD = 0CD1h
  3946. BUILD = 0E3Ah
  3947. DISTR = 055h
  3948. ;
  3949. ;
  3950.  
  3951. TCB_ESTABLISHED = 4
  3952. TCB_CLOSED = 11
  3953. ;
  3954. CL_LANG db 'en',0
  3955. CL_COUNTRY db 'us',0
  3956.  
  3957.  
  3958. sbuff db 1024 dup 0     ; ãä¥à ¤«ï ¯¥à¥¤ ç¨ ¨á¯®«ì§ã¥âáï ¢­ãâਠsendflap
  3959.  
  3960. ;recived db 0              ; à¨­ïâ® ¤ ­­ëå ¨§ ⥫  ¯ ª¥â 
  3961.  
  3962. ;rbuff db 1024 dup 0     ; à¨¥¬­ë© ¡ãä¥à
  3963. tbuff db 512 dup 0      ; „«ï TLV
  3964. srv_cookie db 512 dup 0 ; Šãª¨ ¤«ï  ¢â®à¨§ æ¨¨
  3965. bos_address db 128 dup 0 ; €¤à¥á BOS á¥à¢¥à 
  3966. cookie_len dw 0          ; „«¨­  ªãª¨
  3967. seq dw 0                 ; Sequence number
  3968. bos_ip dd 0
  3969. bos_port dd 0
  3970. status dw 0             ; status
  3971.  
  3972. mbuff db 2048 dup 0     ; „«ï ¯à¨¥¬ 
  3973. MBUFF_SIZE              = 2048
  3974.  
  3975. hrf db 0                ; ”« £ ¯à¨¥¬  § £®«®¢ª 
  3976.  
  3977. mouse_flag dd 0
  3978. socket dd 0
  3979. login db 0
  3980.  
  3981. msg_cookie1 dd 0        ;   ˆá¯®«ì§ãîâáï ¤«ï ¯®â¢¥à¦¤¥­¨ï ¯à¨¥¬  á®®¡é¥­¨©
  3982. msg_cookie2 dd 0        ;
  3983.  
  3984. curruser    db 0        ;  â¥ªã騩 ¯®«ì§®¢ â¥«ì, ª®â®à®¬ã ¡ã¤ãâ ®â¯à ¢«ïâìáï á®®¡é¥­¨ï
  3985.                         ; - ®¬¥à ¢ Š‹ ¯® ¯®à浪ã
  3986.  
  3987.  
  3988. timer dw 0
  3989.  
  3990. ;ltest db "ADMIN",0
  3991. buff db 1024 dup 0
  3992. ;  lbuff db 8 dup 0      ; „«ï 1 ¯ ª¥â  ®â á¥à¢¥à 
  3993.  
  3994. ;
  3995. ; ‘âப¨ ª®¬ ­¤ ¤«ï áà ¢­¥­¨ï
  3996. ;
  3997. str_status db 'status '
  3998. str_status.len = $ - str_status
  3999. str_exit db 'exit '
  4000. str_exit.len = $ - str_exit
  4001. ;
  4002. ; ‘âப¨ áâ âãᮢ ¤«ï áà ¢­¥­¨ï
  4003. ;
  4004. str_away db 'away'
  4005. str_away.len = $ - str_away
  4006.  
  4007. str_dnd db 'dnd'
  4008. str_dnd.len = $ - str_dnd
  4009.  
  4010. str_bisy db 'bisy'
  4011. str_bisy.len = $ - str_bisy
  4012.  
  4013. str_na db 'na'
  4014. str_na.len = $ - str_na
  4015.  
  4016. str_online db 'online'
  4017. str_online.len = $ - str_online
  4018.  
  4019. str_free4chat db 'free4chat'
  4020. str_free4chat.len = $ - str_free4chat
  4021.  
  4022. str_status_message db '„®áâã¯­ë¥ áâ âãáë: away, bisy, na, dnd, online, free4chat',0
  4023.  
  4024.  
  4025. ;
  4026. ;
  4027. ;
  4028.  
  4029. cfg_message db 'Config:',0
  4030.                  
  4031.  
  4032. ;
  4033. ; EDITBOXES
  4034. ;
  4035. inputbuff:
  4036.        rb 512
  4037.  
  4038. inputbox edit_box 490,10,460,0xffffff,0x6a9480,0,0xAABBCC,0,511,inputbuff,ed_focus,0,0
  4039.  
  4040.  
  4041. ; <--- uninitialised data --->
  4042. UDATA
  4043.  
  4044.  
  4045. MEOS_APP_END
  4046. ; <--- end of MenuetOS application --->
  4047.