Rev 4729 | Rev 4922 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4729 | Rev 4918 | ||
---|---|---|---|
Line 12... | Line 12... | ||
12 | ;; ;; |
12 | ;; ;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 14... | Line 14... | ||
14 | 14 | ||
Line -... | Line 15... | ||
- | 15 | format binary as "" |
|
- | 16 | ||
15 | format binary as "" |
17 | TIMEOUT = 3 ; seconds |
Line 16... | Line 18... | ||
16 | 18 | ||
17 | BUFFERSIZE = 4096 |
19 | BUFFERSIZE = 4096 |
18 | 20 | ||
Line 45... | Line 47... | ||
45 | 47 | ||
46 | include 'usercommands.inc' |
48 | include 'usercommands.inc' |
Line 47... | Line 49... | ||
47 | include 'servercommands.inc' |
49 | include 'servercommands.inc' |
48 | 50 | ||
49 | start: |
51 | start: |
50 | ; disable all events |
52 | ; disable all events except network event |
51 | mcall 40, 0 |
53 | mcall 40, EV_STACK |
52 | ; load libraries |
54 | ; load libraries |
53 | stdcall dll.Load, @IMPORT |
55 | stdcall dll.Load, @IMPORT |
54 | test eax, eax |
56 | test eax, eax |
Line 112... | Line 114... | ||
112 | je error_socket |
114 | je error_socket |
113 | mov [socketnum], eax |
115 | mov [socketnum], eax |
114 | ; connect to the server |
116 | ; connect to the server |
115 | invoke con_write_asciiz, str_connect |
117 | invoke con_write_asciiz, str_connect |
116 | mcall connect, [socketnum], sockaddr1, 18 |
118 | mcall connect, [socketnum], sockaddr1, 18 |
- | 119 | cmp eax, -1 |
|
- | 120 | je error_connect |
|
117 | mov [status], STATUS_CONNECTING |
121 | mov [status], STATUS_CONNECTING |
118 | ; Tell the user we're waiting for the server now. |
122 | ; Tell the user we're waiting for the server now. |
119 | invoke con_write_asciiz, str_waiting |
123 | invoke con_write_asciiz, str_waiting |
Line 120... | Line 124... | ||
120 | 124 | ||
Line 131... | Line 135... | ||
131 | add ecx, esi |
135 | add ecx, esi |
132 | jmp .byteloop |
136 | jmp .byteloop |
Line 133... | Line 137... | ||
133 | 137 | ||
134 | ; receive socket data |
138 | ; receive socket data |
- | 139 | .receive: |
|
- | 140 | mcall 26, 9 |
|
- | 141 | add eax, TIMEOUT*100 |
|
- | 142 | mov [timeout], eax |
|
- | 143 | .receive_loop: |
|
- | 144 | mcall 23, 50 ; Wait for event with timeout |
|
- | 145 | mcall 26, 9 |
|
- | 146 | cmp eax, [timeout] |
|
135 | .receive: |
147 | jge error_timeout |
136 | mcall recv, [socketnum], buffer_ptr, BUFFERSIZE, 0 |
148 | mcall recv, [socketnum], buffer_ptr, BUFFERSIZE, MSG_DONTWAIT |
137 | inc eax |
149 | test eax, eax |
- | 150 | jnz .got_data |
|
138 | jz error_socket |
151 | cmp ebx, EWOULDBLOCK |
139 | dec eax |
152 | jne error_socket |
Line -... | Line 153... | ||
- | 153 | jmp .receive_loop |
|
140 | jz wait_for_servercommand |
154 | |
Line 141... | Line 155... | ||
141 | 155 | .got_data: |
|
142 | mov [offset], 0 |
156 | mov [offset], 0 |
143 | 157 | ||
Line 297... | Line 311... | ||
297 | invoke con_set_flags, 0x0c ; print errors in red |
311 | invoke con_set_flags, 0x0c ; print errors in red |
298 | invoke con_write_asciiz, str_err_socket |
312 | invoke con_write_asciiz, str_err_socket |
299 | invoke con_set_flags ; reset color |
313 | invoke con_set_flags ; reset color |
300 | ret |
314 | ret |
Line -... | Line 315... | ||
- | 315 | ||
- | 316 | error_connect: |
|
- | 317 | invoke con_set_flags, 0x0c ; print errors in red |
|
- | 318 | invoke con_write_asciiz, str_err_connect |
|
Line -... | Line 319... | ||
- | 319 | jmp wait_for_keypress |
|
- | 320 | ||
- | 321 | error_timeout: |
|
- | 322 | invoke con_set_flags, 0x0c ; print errors in red |
|
Line 301... | Line 323... | ||
301 | 323 | invoke con_write_asciiz, str_err_timeout |
|
302 | 324 | jmp wait_for_keypress |
|
303 | 325 | ||
304 | error_socket: |
326 | error_socket: |
Line 326... | Line 348... | ||
326 | 348 | ||
327 | 349 | ||
328 | 350 | ||
329 | ; data |
351 | ; data |
330 | str_title db 'FTP client',0 |
352 | str_title db 'FTP client',0 |
Line 331... | Line 353... | ||
331 | str_welcome db 'FTP client for KolibriOS v0.11',10 |
353 | str_welcome db 'FTP client for KolibriOS v0.12',10 |
332 | db 10 |
354 | db 10 |
333 | db 'Please enter ftp server address.',10,0 |
355 | db 'Please enter ftp server address.',10,0 |
334 | 356 | ||
335 | str_prompt db '> ',0 |
357 | str_prompt db '> ',0 |
- | 358 | str_resolve db 'Resolving ',0 |
|
- | 359 | str_newline db 10,0 |
|
336 | str_resolve db 'Resolving ',0 |
360 | str_err_resolve db 10,'Name resolution failed.',10,0 |
337 | str_newline db 10,0 |
361 | str_err_socket db 10,'Socket error.',10,0 |
338 | str_err_resolve db 10,'Name resolution failed.',10,0 |
362 | str_err_timeout db 10,'Timeout - no response from server.',10,0 |
339 | str_err_socket db 10,'Socket error.',10,0 |
363 | str_err_connect db 10,'Cannot connect to the server.',10,0 |
340 | str8 db ' (',0 |
364 | str8 db ' (',0 |
Line 420... | Line 444... | ||
420 | datasocket dd ? |
444 | datasocket dd ? |
421 | offset dd ? |
445 | offset dd ? |
422 | size dd ? |
446 | size dd ? |
423 | operation dd ? |
447 | operation dd ? |
Line -... | Line 448... | ||
- | 448 | ||
- | 449 | timeout dd ? |
|
424 | 450 | ||
425 | filestruct: |
451 | filestruct: |
426 | .subfn dd ? |
452 | .subfn dd ? |
427 | .offset dd ? |
453 | .offset dd ? |
428 | dd ? |
454 | dd ? |