Subversion Repositories Kolibri OS

Rev

Rev 6394 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. resolve:
  2.  
  3.         ; parse command line parameters of type
  4.         ; ftp://user:password@server.com:port/folder/subfolder type urls
  5.  
  6.         ; check ftp://
  7.         xor     edx, edx
  8.         mov     esi, buf_cmd
  9.         mov     edi, str_ftp
  10.         xor     ecx, ecx
  11.   @@:
  12.         mov     al, byte [esi+edx]
  13.         mov     bl, byte [edi+edx]
  14.         inc     edx
  15.         cmp     al, bl
  16.         jne     main
  17.         cmp     byte [edi+edx], '/'
  18.         jne     @b
  19.         inc     ecx
  20.         cmp     ecx, 2
  21.         jne     @b
  22.  
  23.         ; parse user
  24.         mov     dword[param_user], "USER"
  25.         mov     byte[param_user+4], " "
  26.         inc     edx
  27.         add     esi, edx
  28.         lea     edi, [param_user+5]
  29.   .user:
  30.         lodsb
  31.         cmp     al, 0
  32.         jne     @f
  33.         mov     eax, str_err_params
  34.         jmp     error
  35.     @@: stosb
  36.         cmp     byte [esi], ':'
  37.         jne     .user
  38.         mov     word [edi], 0x0a0d
  39.         mov     byte [edi+2], 0
  40.  
  41.         ; parse password
  42.         inc     esi
  43.         mov     dword[param_password], "PASS"
  44.         mov     byte[param_password+4], " "
  45.         lea     edi, [param_password+5]
  46.   .pass:  
  47.         lodsb
  48.         cmp     al, 0
  49.         jne     @f
  50.         mov     eax, str_err_params
  51.         jmp     error
  52.     @@: stosb
  53.         cmp     byte [esi], '@'
  54.         jne     .pass
  55.         mov     word [edi], 0x0a0d
  56.         mov     byte [edi+2], 0
  57.  
  58.         ; parse server address
  59.         inc     esi
  60.         mov     edi, param_server_addr
  61.   .addr:
  62.         lodsb
  63.         cmp     al, 0
  64.         jne     @f
  65.         mov     eax, str_err_params
  66.         jmp     error
  67.     @@: stosb
  68.         cmp     byte [esi], ':'
  69.         jne     .addr
  70.         mov     byte [edi], 0
  71.  
  72.         ; parse port
  73.         inc     esi
  74.         xor     eax, eax
  75.         xor     ebx, ebx
  76.         mov     [sockaddr1.port], 21 shl 8
  77.   .port:
  78.         lodsb
  79.         cmp     al, 0
  80.         jne     @f
  81.         mov     eax, str_err_params
  82.         jmp     error
  83.     @@: cmp     al, '/'
  84.         jbe     .port_done
  85.         sub     al, '0'
  86.         jnb     @f
  87.         mov     eax, str_err_host
  88.         jmp     error
  89.     @@: cmp     al, 9
  90.         jna     @f
  91.         mov     eax, str_err_host
  92.         jmp     error
  93.     @@: lea     ebx, [ebx*4 + ebx]
  94.         shl     ebx, 1
  95.         add     ebx, eax
  96.         jmp     .port
  97.   .port_done:
  98.         xchg    bl, bh
  99.         mov     [sockaddr1.port], bx
  100.  
  101.         ; parse path
  102.         mov     dword[param_path], "CWD "
  103.         lea     edi, [param_path+4]
  104.   .path:  
  105.         lodsb
  106.         stosb
  107.         cmp     byte [esi], 0
  108.         jne     .path
  109.         mov     word [edi], 0x0a0d
  110.         mov     byte [edi+2], 0
  111.  
  112.         ; parameters resolved successfully
  113.         mov     [use_params], 1
  114.  
  115.         ; copy server address to buf_cmd
  116.         mov     esi, param_server_addr
  117.         mov     edi, buf_cmd
  118.   .copy:
  119.         lodsb
  120.         stosb
  121.         cmp     byte [edi], 0
  122.         jne     .copy
  123.         mov     byte [esi], 0
  124.  
  125.         jmp     no_resolve.done
  126.  
  127.