Subversion Repositories Kolibri OS

Rev

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