diff --git a/programs/network/ftpc/servercommands.inc b/programs/network/ftpc/servercommands.inc index 3041701184..c4c0991053 100644 --- a/programs/network/ftpc/servercommands.inc +++ b/programs/network/ftpc/servercommands.inc @@ -6,7 +6,7 @@ server_parser: ; thus they are simply ignored in this simple command parser. cmp dword[s], "150 " - je data_ok + je data_loop cmp dword[s], "220 " je welcome @@ -100,7 +100,7 @@ pasv_ok: jmp wait_for_servercommand -data_ok: +data_loop: invoke con_write_asciiz, str2b @@ -118,7 +118,7 @@ data_ok: ; not retreiving, just print to console invoke con_write_asciiz, buffer_ptr2 - jmp data_ok + jmp data_loop ; retreiving, save to file .retr: @@ -128,7 +128,7 @@ data_ok: mcall 70, filestruct pop eax add [filestruct.offset], eax - jmp data_ok + jmp data_loop ; storing, send all data .stor: @@ -149,11 +149,13 @@ data_ok: .done: invoke con_write_asciiz, str_close mcall close, [datasocket] + mov [operation], OPERATION_NONE jmp wait_for_servercommand - close_datacon: + cmp [operation], OPERATION_NONE + je wait_for_usercommand invoke con_write_asciiz, str_close mcall close, [datasocket] jmp wait_for_usercommand diff --git a/programs/network/ftpc/usercommands.inc b/programs/network/ftpc/usercommands.inc index 27ccce1e85..d180b12eb2 100644 --- a/programs/network/ftpc/usercommands.inc +++ b/programs/network/ftpc/usercommands.inc @@ -5,13 +5,19 @@ cmd_help: jmp wait_for_usercommand + cmd_bye: - mcall close, [socketnum] - mcall close, [datasocket] +; Send BYE message to the server + mov dword[s], "BYE" + 13 shl 24 + mov byte[s+4], 10 + mcall send, [socketnum], s, 5, 0 +; Close the control connection + mcall close, [socketnum] jmp main + cmd_pwd: mov dword[s], "PWD" + 13 shl 24 @@ -20,6 +26,7 @@ cmd_pwd: jmp wait_for_servercommand + cmd_cwd: mov dword[s], "CWD " @@ -35,6 +42,7 @@ cmd_cwd: jmp wait_for_servercommand + cmd_dele: mov dword[s], "DELE" @@ -51,24 +59,27 @@ cmd_dele: jmp wait_for_servercommand -cmd_list: +cmd_list: call open_dataconnection mov [operation], OPERATION_LIST mov dword[s], "LIST" mov word[s+4], 0x0a0d - mcall send, [socketnum], s, 6, 0 + mcall send, [socketnum], s, 6, 0 jmp wait_for_servercommand cmd_retr: - call open_dataconnection + +; Create/open the file - mov [operation], OPERATION_RETR + mov esi, s+5 + mov ecx, 256-5 + call set_filename mov [filestruct.subfn], 2 ; create/rewrite file mov [filestruct.offset], 0 @@ -76,16 +87,16 @@ cmd_retr: mov [filestruct.size], 0 mov [filestruct.ptr], 0 - lea esi, [s+5] - mov edi, filestruct.name - mov ecx, 256-5 - call set_filename - mcall 70, filestruct cmp eax, -1 ; je fileerror +; Prepare to write to the file + mov [filestruct.subfn], 3 ; write to file + mov [operation], OPERATION_RETR + +; Request the file from server mov dword[s], "RETR" mov byte[s+4], " " @@ -95,9 +106,10 @@ cmd_retr: mov edi, s repne scasb lea esi, [edi - s] - mov word [edi - 2], 0x0a0d + mov dword[edi - 2], 0x0a0d mcall send, [socketnum], s, , 0 + invoke con_write_asciiz, s ; print command jmp wait_for_servercommand @@ -113,8 +125,7 @@ cmd_stor: mov [filestruct.size], BUFFERSIZE mov [filestruct.ptr], buffer_ptr2 - lea esi, [s+5] - mov edi, filestruct.name + mov esi, s+5 mov ecx, 256-5 call set_filename @@ -154,6 +165,7 @@ cmd_lcwd: jmp wait_for_usercommand + cmd_cdup: mov dword[s], "CDUP" @@ -162,6 +174,7 @@ cmd_cdup: jmp wait_for_servercommand + cmd_rmd: mov dword[s], "RMD " @@ -177,6 +190,7 @@ cmd_rmd: jmp wait_for_servercommand + cmd_mkd: mov dword[s], "MKD " @@ -193,18 +207,15 @@ cmd_mkd: jmp wait_for_servercommand - ; esi = source ptr -; edi = dest ptr ; ecx = max length of source buffer set_filename: + mov edi, filestruct.name .loop: lodsb test al, al jz .done - cmp al, ' ' - je .done cmp al, 10 je .done stosb @@ -213,5 +224,4 @@ set_filename: xor al, al ; append a 0 byte stosb - ret - + ret \ No newline at end of file