Rev 3794 | Rev 3802 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3794 | Rev 3800 | ||
---|---|---|---|
Line 12... | Line 12... | ||
12 | ;; ;; |
12 | ;; ;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 14... | Line 14... | ||
14 | 14 | ||
Line 15... | Line 15... | ||
15 | format binary as "" |
15 | format binary as "" |
Line 16... | Line 16... | ||
16 | 16 | ||
17 | BUFFERSIZE = 1024 |
17 | BUFFERSIZE = 4096 |
18 | 18 | ||
19 | STATUS_CONNECTING = 0 |
19 | STATUS_CONNECTING = 0 |
Line -... | Line 20... | ||
- | 20 | STATUS_CONNECTED = 1 |
|
- | 21 | STATUS_NEEDPASSWORD = 2 |
|
- | 22 | STATUS_LOGGED_IN = 3 |
|
- | 23 | ||
20 | STATUS_CONNECTED = 1 |
24 | OPERATION_LIST = 0 |
21 | STATUS_NEEDPASSWORD = 2 |
25 | OPERATION_RETR = 1 |
22 | STATUS_LOGGED_IN = 3 |
26 | OPERATION_STOR = 2 |
23 | 27 | ||
24 | use32 |
28 | use32 |
Line 95... | Line 99... | ||
95 | ; test for error |
99 | ; test for error |
96 | test eax, eax |
100 | test eax, eax |
97 | jnz fail |
101 | jnz fail |
Line 98... | Line 102... | ||
98 | 102 | ||
99 | ; write results |
103 | ; write results |
100 | invoke con_write_asciiz, str8 |
- | |
101 | ; mov edi, esi |
- | |
102 | - | ||
103 | ; convert IP address to decimal notation |
104 | invoke con_write_asciiz, str8 ; ' (',0 |
104 | mov eax, [esi+addrinfo.ai_addr] |
105 | mov eax, [esi+addrinfo.ai_addr] ; convert IP address to decimal notation |
105 | mov eax, [eax+sockaddr_in.sin_addr] |
106 | mov eax, [eax+sockaddr_in.sin_addr] ; |
106 | mov [sockaddr1.ip], eax |
- | |
107 | 107 | mov [sockaddr1.ip], eax ; |
|
108 | invoke inet_ntoa, eax |
- | |
109 | ; write result |
108 | invoke inet_ntoa, eax ; |
110 | invoke con_write_asciiz, eax |
109 | invoke con_write_asciiz, eax ; print ip |
111 | ; free allocated memory |
110 | invoke freeaddrinfo, esi ; free allocated memory |
Line 112... | Line 111... | ||
112 | invoke freeaddrinfo, esi |
111 | invoke con_write_asciiz, str9 ; ')',10,0 |
113 | 112 | ||
114 | invoke con_write_asciiz, str9 |
113 | ; open the socket |
115 | mcall socket, AF_INET4, SOCK_STREAM, 0 |
114 | mcall socket, AF_INET4, SOCK_STREAM, 0 |
116 | cmp eax, -1 |
115 | cmp eax, -1 |
Line -... | Line 116... | ||
- | 116 | je socket_error |
|
117 | je socket_error |
117 | mov [socketnum], eax |
118 | mov [socketnum], eax |
118 | |
119 | 119 | ; connect to the server |
|
Line 120... | Line 120... | ||
120 | invoke con_write_asciiz, str11 |
120 | invoke con_write_asciiz, str11 |
Line 121... | Line 121... | ||
121 | mcall connect, [socketnum], sockaddr1, 18 |
121 | mcall connect, [socketnum], sockaddr1, 18 |
Line 122... | Line 122... | ||
122 | mov [status], STATUS_CONNECTING |
122 | mov [status], STATUS_CONNECTING |
Line 173... | Line 173... | ||
173 | stosb |
173 | stosb |
Line 174... | Line 174... | ||
174 | 174 | ||
175 | invoke con_set_flags, 0x03 ; change color |
175 | invoke con_set_flags, 0x03 ; change color |
176 | invoke con_write_asciiz, s ; print servercommand |
176 | invoke con_write_asciiz, s ; print servercommand |
177 | invoke con_write_asciiz, str4 ; newline |
177 | invoke con_write_asciiz, str4 ; newline |
Line 178... | Line 178... | ||
178 | invoke con_set_flags, 0x07 |
178 | invoke con_set_flags, 0x07 ; reset color |
Line 179... | Line 179... | ||
179 | 179 | ||
Line 211... | Line 211... | ||
211 | je cmd_retr |
211 | je cmd_retr |
Line 212... | Line 212... | ||
212 | 212 | ||
213 | cmp dword[s], "pwd" + 10 shl 24 |
213 | cmp dword[s], "pwd" + 10 shl 24 |
Line 214... | Line 214... | ||
214 | je cmd_pwd |
214 | je cmd_pwd |
215 | 215 | ||
- | 216 | cmp dword[s], "stor" |
|
- | 217 | je cmd_stor |
|
- | 218 | ||
- | 219 | cmp dword[s], "dele" |
|
- | 220 | je cmd_dele |
|
- | 221 | ||
Line 216... | Line 222... | ||
216 | ; cmp dword[s], "stor" |
222 | cmp dword[s], "bye" + 10 shl 24 |
217 | ; je cmd_stor |
223 | je cmd_bye |
Line 237... | Line 243... | ||
237 | .send: |
243 | .send: |
238 | ; read string |
244 | ; read string |
239 | mov esi, s+5 |
245 | mov esi, s+5 |
240 | invoke con_gets, esi, 256 |
246 | invoke con_gets, esi, 256 |
Line -... | Line 247... | ||
- | 247 | ||
241 | 248 | ; find end of string |
|
242 | mov edi, s+5 |
249 | mov edi, s+5 |
243 | mov ecx, 256 |
250 | mov ecx, 256 |
244 | xor al, al |
251 | xor al, al |
245 | repne scasb |
252 | repne scasb |
- | 253 | lea esi, [edi-s-1] |
|
246 | lea esi, [edi-s-1] |
254 | ; and send it to the server |
Line 247... | Line 255... | ||
247 | mcall send, [socketnum], s, , 0 |
255 | mcall send, [socketnum], s, , 0 |
248 | 256 | ||
249 | invoke con_write_asciiz, str4 ; newline |
257 | invoke con_write_asciiz, str4 ; newline |
Line 250... | Line 258... | ||
250 | invoke con_set_flags, 0x07 |
258 | invoke con_set_flags, 0x07 ; reset color |
251 | jmp wait_for_servercommand |
259 | jmp wait_for_servercommand |
252 | 260 | ||
Line 253... | Line 261... | ||
253 | 261 | ||
254 | 262 | ||
Line 287... | Line 295... | ||
287 | 295 | ||
288 | 296 | ||
289 | 297 | ||
290 | ; data |
298 | ; data |
291 | title db 'FTP client',0 |
299 | title db 'FTP client',0 |
292 | str1 db 'FTP client for KolibriOS v0.04',10,10,'Please enter ftp server address.',10,0 |
300 | str1 db 'FTP client for KolibriOS v0.05',10,10,'Please enter ftp server address.',10,0 |
293 | str2 db '> ',0 |
301 | str2 db '> ',0 |
294 | str3 db 'Resolving ',0 |
302 | str3 db 'Resolving ',0 |
Line 301... | Line 309... | ||
301 | str11 db 'Connecting...',10,0 |
309 | str11 db 'Connecting...',10,0 |
302 | str12 db 'Waiting for welcome message.',10,0 |
310 | str12 db 'Waiting for welcome message.',10,0 |
303 | str_user db "username: ",0 |
311 | str_user db "username: ",0 |
304 | str_pass db "password: ",0 |
312 | str_pass db "password: ",0 |
305 | str_unknown db "unknown command",10,0 |
313 | str_unknown db "unknown command",10,0 |
- | 314 | ||
306 | str_help db "available commands:",10 |
315 | str_help db "available commands:",10 |
- | 316 | db "help - help",10,10 |
|
- | 317 | db "bye - close connection",10 |
|
- | 318 | db "cwd - change working directoy on server",10 |
|
307 | db "help list cwd retr pwd",10,10,0 |
319 | db "dele - delete file from server",10 |
- | 320 | db "list - list files and folders in current directory",10 |
|
- | 321 | db "pwd - print working directory",10 |
|
- | 322 | db "retr - retreive file from server",10 |
|
- | 323 | db "stor - store file on server",10 |
|
- | 324 | db 10,0 |
|
Line 308... | Line 325... | ||
308 | 325 | ||
Line 309... | Line 326... | ||
309 | str_open db "opening data socket",10,0 |
326 | str_open db "opening data socket",10,0 |
310 | 327 | ||
Line 318... | Line 335... | ||
318 | dw AF_INET4 |
335 | dw AF_INET4 |
319 | .port dw 0 |
336 | .port dw 0 |
320 | .ip dd 0 |
337 | .ip dd 0 |
321 | rb 10 |
338 | rb 10 |
Line 322... | Line -... | ||
322 | - | ||
323 | 339 | ||
324 | ; import |
340 | ; import |
325 | align 4 |
341 | align 4 |
Line 326... | Line 342... | ||
326 | @IMPORT: |
342 | @IMPORT: |
Line 346... | Line 362... | ||
346 | con_set_flags, 'con_set_flags' |
362 | con_set_flags, 'con_set_flags' |
Line 347... | Line 363... | ||
347 | 363 | ||
Line 348... | Line -... | ||
348 | - | ||
349 | i_end: |
364 | |
350 | 365 | i_end: |
|
Line 351... | Line -... | ||
351 | align 4 |
- | |
352 | status db ? |
366 | |
353 | active_passive db ? |
367 | status db ? |
354 | 368 | active_passive db ? |
|
355 | align 4 |
369 | |
- | 370 | socketnum dd ? |
|
- | 371 | datasocket dd ? |
|
- | 372 | offset dd ? |
|
- | 373 | size dd ? |
|
- | 374 | operation dd ? |
|
- | 375 | ||
- | 376 | filestruct: |
|
- | 377 | .subfn dd ? |
|
- | 378 | .offset dd ? |
|
Line 356... | Line 379... | ||
356 | socketnum dd ? |
379 | dd ? |
357 | datasocket dd ? |
380 | .size dd ? |
Line 358... | Line 381... | ||
358 | offset dd ? |
381 | .ptr dd ? |