Rev 6437 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6437 | Rev 6582 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | ;;================================================================================================;; |
|
- | 2 | parse_args: ;/////////////////////////////////////////////////////////////////////////////////////;; |
|
- | 3 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 4 | ;? parses command line arguments of type ;; |
|
- | 5 | ;? ftp://user:password@server:port/folder/subfolder type urls and attempts to connect ;; |
|
- | 6 | ;? automatically ;; |
|
1 | resolve: |
- | |
- | 7 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 8 | ;> buf_cmd = pointer to command line arguments ;; |
|
- | 9 | ;;------------------------------------------------------------------------------------------------;; |
|
- | 10 | ;< none ;; |
|
- | 11 | ;;================================================================================================;; |
|
Line 2... | Line 12... | ||
2 | 12 | ||
3 | ; parse command line parameters of type |
- | |
4 | ; ftp://user:password@server.com:port/folder/subfolder type urls |
- | |
5 | - | ||
6 | ; check ftp:// |
13 | cmp dword[buf_cmd], 'ftp:' |
7 | xor edx, edx |
14 | jne @f |
8 | mov esi, buf_cmd |
- | |
9 | mov edi, str_ftp |
15 | mov esi, buf_cmd |
10 | xor ecx, ecx |
16 | jmp .start |
11 | @@: |
- | |
12 | mov al, byte [esi+edx] |
17 | @@: |
- | 18 | mov esi, buf_cmd+5 |
|
13 | mov bl, byte [edi+edx] |
19 | |
14 | inc edx |
- | |
15 | cmp al, bl |
20 | .start: |
16 | jne main |
21 | ; check ftp:// |
17 | cmp byte [edi+edx], '/' |
22 | cmp dword[esi], 'ftp:' |
18 | jne @b |
- | |
19 | inc ecx |
23 | jne .error |
20 | cmp ecx, 2 |
24 | cmp word[esi+4], '//' |
Line 21... | Line 25... | ||
21 | jne @b |
25 | jne .error |
22 | - | ||
23 | ; parse user |
- | |
24 | mov dword[param_user], "USER" |
- | |
25 | mov byte[param_user+4], " " |
- | |
26 | inc edx |
26 | |
27 | add esi, edx |
27 | ; parse user |
28 | lea edi, [param_user+5] |
28 | lea edi, [param_user] |
29 | .user: |
29 | @@: |
30 | lodsb |
- | |
31 | cmp al, 0 |
- | |
32 | jne @f |
30 | lodsb |
33 | mov eax, str_err_params |
31 | test al, al |
34 | jmp error |
32 | jz .error |
35 | @@: stosb |
33 | stosb |
36 | cmp byte [esi], ':' |
- | |
37 | jne .user |
34 | cmp byte [esi], ':' |
Line 38... | Line 35... | ||
38 | mov word [edi], 0x0a0d |
35 | jne @b |
39 | mov byte [edi+2], 0 |
36 | mov byte [edi], 0 |
40 | - | ||
41 | ; parse password |
- | |
42 | inc esi |
37 | |
43 | mov dword[param_password], "PASS" |
38 | ; parse password |
44 | mov byte[param_password+4], " " |
39 | inc esi |
45 | lea edi, [param_password+5] |
40 | lea edi, [param_password] |
46 | .pass: |
- | |
47 | lodsb |
- | |
48 | cmp al, 0 |
41 | @@: |
49 | jne @f |
42 | lodsb |
50 | mov eax, str_err_params |
43 | test al, al |
51 | jmp error |
44 | jz .error |
52 | @@: stosb |
- | |
53 | cmp byte [esi], '@' |
45 | stosb |
Line 54... | Line 46... | ||
54 | jne .pass |
46 | cmp byte [esi], '@' |
55 | mov word [edi], 0x0a0d |
47 | jne @b |
56 | mov byte [edi+2], 0 |
48 | mov byte [edi], 0 |
57 | 49 | ||
58 | ; parse server address |
50 | ; parse server address |
59 | inc esi |
51 | inc esi |
60 | mov edi, param_server_addr |
- | |
61 | .addr: |
- | |
62 | lodsb |
52 | mov edi, param_server_addr |
63 | cmp al, 0 |
53 | @@: |
64 | jne @f |
54 | lodsb |
65 | mov eax, str_err_params |
55 | test al, al |
66 | jmp error |
56 | jz .error |
Line 67... | Line 57... | ||
67 | @@: stosb |
57 | stosb |
68 | cmp byte [esi], ':' |
58 | cmp byte [esi], ':' |
69 | jne .addr |
59 | jne @b |
70 | mov byte [edi], 0 |
- | |
71 | - | ||
72 | ; parse port |
60 | mov byte [edi], 0 |
73 | inc esi |
61 | |
74 | xor eax, eax |
62 | ; parse port |
75 | xor ebx, ebx |
- | |
76 | mov [sockaddr1.port], 21 shl 8 |
- | |
77 | .port: |
63 | inc esi |
78 | lodsb |
- | |
79 | cmp al, 0 |
- | |
80 | jne @f |
- | |
81 | mov eax, str_err_params |
64 | lea edi, [param_port] |
82 | jmp error |
- | |
83 | @@: cmp al, '/' |
65 | @@: |
84 | jbe .port_done |
- | |
85 | sub al, '0' |
66 | lodsb |
86 | jnb @f |
67 | test al, al |
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 |
- | |
Line 95... | Line 68... | ||
95 | add ebx, eax |
68 | jz .error |
96 | jmp .port |
69 | stosb |
97 | .port_done: |
70 | cmp byte [esi], '/' |
98 | xchg bl, bh |
71 | jne @b |
99 | mov [sockaddr1.port], bx |
72 | mov byte [edi], 0 |
100 | - | ||
101 | ; parse path |
73 | |
102 | mov dword[param_path], "CWD " |
74 | ; parse path |
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 |
75 | inc esi |
Line -... | Line 76... | ||
- | 76 | lea edi, [param_path] |
|
118 | .copy: |
77 | @@: |
Line -... | Line 78... | ||
- | 78 | movsb |
|
- | 79 | cmp byte [esi], 0 |
|
- | 80 | jne @b |