Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6394 nisargshah 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
6437 nisargshah 32
        jne     @f
33
        mov     eax, str_err_params
34
        jmp     error
35
    @@: stosb
6394 nisargshah 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
6437 nisargshah 49
        jne     @f
50
        mov     eax, str_err_params
51
        jmp     error
52
    @@: stosb
6394 nisargshah 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
6437 nisargshah 64
        jne     @f
65
        mov     eax, str_err_params
66
        jmp     error
67
    @@: stosb
6394 nisargshah 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
6437 nisargshah 80
        jne     @f
81
        mov     eax, str_err_params
82
        jmp     error
83
    @@: cmp     al, '/'
84
        jbe     .port_done
6394 nisargshah 85
        sub     al, '0'
6437 nisargshah 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]
6394 nisargshah 94
        shl     ebx, 1
95
        add     ebx, eax
96
        jmp     .port
6437 nisargshah 97
  .port_done:
6394 nisargshah 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