Subversion Repositories Kolibri OS

Rev

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 ?