146,10 → 146,14 |
cmp al, 0x20 |
jbe .port_done |
sub al, '0' |
jb error_hostname |
cmp al, 9 |
ja error_hostname |
lea ebx, [ebx*4 + ebx] |
jnb @f |
mov eax, str_err_host |
jmp error |
@@: cmp al, 9 |
jna @f |
mov eax, str_err_host |
jmp error |
@@: lea ebx, [ebx*4 + ebx] |
shl ebx, 1 |
add ebx, eax |
jmp .portloop |
168,7 → 172,10 |
pop esi |
; test for error |
test eax, eax |
jnz error_resolve |
jz @f |
mov eax, str_err_resolve |
jmp error |
@@: |
; write results |
invoke con_write_asciiz, str8 ; ' (',0 |
mov eax, [esi+addrinfo.ai_addr] ; convert IP address to decimal notation |
181,14 → 188,18 |
; open the socket |
mcall socket, AF_INET4, SOCK_STREAM, 0 |
cmp eax, -1 |
je error_socket |
mov [controlsocket], eax |
jne @f |
mov eax, str_err_socket |
jmp error |
@@: mov [controlsocket], eax |
; connect to the server |
invoke con_write_asciiz, str_connect |
mcall connect, [controlsocket], sockaddr1, 18 |
cmp eax, -1 |
je error_connect |
mov [status], STATUS_CONNECTING |
jne @f |
mov eax, str_err_connect |
jmp error |
@@: mov [status], STATUS_CONNECTING |
; Tell the user we're waiting for the server now. |
invoke con_write_asciiz, str_waiting |
|
214,13 → 225,17 |
mcall 23, 50 ; Wait for event with timeout |
mcall 26, 9 |
cmp eax, [timeout] |
jge error_timeout |
mcall recv, [controlsocket], buf_buffer1, BUFFERSIZE, MSG_DONTWAIT |
jl @f |
mov eax, str_err_timeout |
jmp error |
@@: mcall recv, [controlsocket], buf_buffer1, BUFFERSIZE, MSG_DONTWAIT |
test eax, eax |
jnz .got_data |
cmp ebx, EWOULDBLOCK |
jne error_socket |
jmp .receive_loop |
je @f |
mov eax, str_err_recv |
jmp error |
@@: jmp .receive_loop |
|
.got_data: |
mov [offset], 0 |
450,8 → 465,10 |
.active: |
mcall socket, AF_INET4, SOCK_STREAM, 0 |
cmp eax, -1 |
je error_socket |
mov [datasocket], eax |
jne @f |
mov eax, str_err_socket |
jmp error |
@@: mov [datasocket], eax |
|
mov ax, [acti_port_start] |
xchg al, ah |
459,11 → 476,17 |
|
mcall bind, [datasocket], sockaddr2, 18 |
cmp eax, -1 |
je error_socket |
jne @f |
mov eax, str_err_bind |
jmp error |
@@: |
|
mcall listen, [datasocket], 1 |
cmp eax, -1 |
je error_socket |
jne @f |
mov eax, str_err_listen |
jmp error |
@@: |
|
mov dword[buf_buffer1], 'PORT' |
mov byte[buf_buffer1+4], ' ' |
491,8 → 514,10 |
|
mcall accept, [datasocket], sockaddr2, 18 ; time to accept the awaiting connection.. |
cmp eax, -1 |
je error_socket |
push eax |
jne @f |
mov eax, str_err_accept |
jmp error |
@@: push eax |
mcall close, [datasocket] |
pop [datasocket] |
|
526,31 → 551,13 |
pop ecx ebx edx |
ret |
|
error_hostname: |
error: |
push eax |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_host |
pop eax |
invoke con_write_asciiz, eax |
jmp wait_for_keypress |
|
error_connect: |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_connect |
jmp wait_for_keypress |
|
error_timeout: |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_timeout |
jmp wait_for_keypress |
|
error_socket: |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_socket |
jmp wait_for_keypress |
|
error_resolve: |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_resolve |
jmp wait_for_keypress |
|
error_heap: |
invoke con_set_flags, 0x0c ; print errors in red |
invoke con_write_asciiz, str_err_heap |
584,11 → 591,16 |
str_resolve db 'Resolving ',0 |
str_newline db 10,0 |
str_err_resolve db 10,'Name resolution failed.',10,0 |
str_err_socket db 10,'Socket error.',10,0 |
str_err_socket db 10,'[75,0 socket]: Error creating a socket',10,0 |
str_err_bind db 10,'[75,2 bind]: Error binding to socket',10,0 |
str_err_listen db 10,'[75,3 listen]: Cannot accept incoming connections',10,0 |
str_err_accept db 10,'[75,5 accept]: Error accepting a connection',10,0 |
str_err_recv db 10,'[75,7 recv]: Error receiving data from server',10,0 |
str_err_heap db 10,'Cannot allocate memory from heap.',10,0 |
str_err_timeout db 10,'Timeout - no response from server.',10,0 |
str_err_connect db 10,'Cannot connect to the server.',10,0 |
str_err_connect db 10,'[75,4 connect]: Cannot connect to the server.',10,0 |
str_err_host db 10,'Invalid hostname.',10,0 |
str_err_params db 10,'Invalid parameters',10,0 |
str8 db ' (',0 |
str9 db ')',10,0 |
str_push db 'Push any key to continue.',0 |