Subversion Repositories Kolibri OS

Rev

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 ?