Subversion Repositories Kolibri OS

Rev

Rev 6437 | 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.         je      .error
  33.         stosb
  34.         cmp     byte [esi], ':'
  35.         jne     .user
  36.         mov     word [edi], 0x0a0d
  37.         mov     byte [edi+2], 0
  38.  
  39.         ; parse password
  40.         inc     esi
  41.         mov     dword[param_password], "PASS"
  42.         mov     byte[param_password+4], " "
  43.         lea     edi, [param_password+5]
  44.   .pass:  
  45.         lodsb
  46.         cmp     al, 0
  47.         je      .error
  48.         stosb
  49.         cmp     byte [esi], '@'
  50.         jne     .pass
  51.         mov     word [edi], 0x0a0d
  52.         mov     byte [edi+2], 0
  53.  
  54.         ; parse server address
  55.         inc     esi
  56.         mov     edi, param_server_addr
  57.   .addr:
  58.         lodsb
  59.         cmp     al, 0
  60.         je      .error
  61.         stosb
  62.         cmp     byte [esi], ':'
  63.         jne     .addr
  64.         mov     byte [edi], 0
  65.  
  66.         ; parse port
  67.         inc     esi
  68.         xor     eax, eax
  69.         xor     ebx, ebx
  70.         mov     [sockaddr1.port], 21 shl 8
  71.   .port:
  72.         lodsb
  73.         cmp     al, 0
  74.         je      .error
  75.         cmp     al, '/'
  76.         jbe     @f
  77.         sub     al, '0'
  78.         jb      error_hostname
  79.         cmp     al, 9
  80.         ja      error_hostname
  81.         lea     ebx, [ebx*4 + ebx]
  82.         shl     ebx, 1
  83.         add     ebx, eax
  84.         jmp     .port
  85.   @@: ; port done
  86.         xchg    bl, bh
  87.         mov     [sockaddr1.port], bx
  88.  
  89.         ; parse path
  90.         mov     dword[param_path], "CWD "
  91.         lea     edi, [param_path+4]
  92.   .path:  
  93.         lodsb
  94.         stosb
  95.         cmp     byte [esi], 0
  96.         jne     .path
  97.         mov     word [edi], 0x0a0d
  98.         mov     byte [edi+2], 0
  99.  
  100.         ; parameters resolved successfully
  101.         mov     [use_params], 1
  102.  
  103.         ; copy server address to buf_cmd
  104.         mov     esi, param_server_addr
  105.         mov     edi, buf_cmd
  106.   .copy:
  107.         lodsb
  108.         stosb
  109.         cmp     byte [edi], 0
  110.         jne     .copy
  111.         mov     byte [esi], 0
  112.  
  113.         jmp     no_resolve.done
  114.  
  115.   .error:
  116.         jmp     main ; parameter resolution failed. get input from user