317,9 → 317,6 |
cmp edx, IP_PROTO_TCP |
je .tcp |
|
cmp edx, SOCK_RAW |
je .raw |
|
.no_inet4: |
ret |
|
343,41 → 340,12 |
pop eax |
|
mov [eax + SOCKET.snd_proc], SOCKET_send_udp |
mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
mov [eax + SOCKET.rcv_proc], SOCKET_receive_udp |
|
ret |
|
.raw: |
; test esi, esi |
; jz .ip |
|
cmp esi, IP_PROTO_ICMP |
je .icmp |
|
ret |
|
; .ip: |
; push eax |
; init_queue (eax + SOCKET_QUEUE_LOCATION) |
; pop eax |
; |
; mov [eax + SOCKET.snd_proc], SOCKET_send_ip |
; mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
; |
; ret |
|
.icmp: |
push eax |
init_queue (eax + SOCKET_QUEUE_LOCATION) |
pop eax |
|
mov [eax + SOCKET.snd_proc], SOCKET_send_icmp |
mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
|
ret |
|
|
|
;----------------------------------------------------------------- |
; |
; SOCKET_bind |
458,7 → 426,7 |
align 4 |
SOCKET_connect: |
|
DEBUGF 1,"SOCKET_connect: socknum: %u sockaddr: %x, length: %u\n", ecx, edx, esi |
DEBUGF 1,"socket_connect: socknum: %u sockaddr: %x, length: %u\n", ecx, edx, esi |
|
call SOCKET_num_to_ptr |
jz s_error |
479,9 → 447,6 |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
|
cmp [eax + SOCKET.Type], SOCK_RAW |
je .raw |
|
jmp s_error |
|
.udp: |
532,14 → 497,7 |
mov dword [esp+32], 0 ; success! |
ret |
|
.raw: |
push dword [edx + 4] |
pop dword [eax + IP_SOCKET.RemoteIP] |
|
mov dword [esp+32], 0 ; success! |
ret |
|
|
;----------------------------------------------------------------- |
; |
; SOCKET_listen |
552,7 → 510,7 |
align 4 |
SOCKET_listen: |
|
DEBUGF 1,"SOCKET_listen: socknum: %u backlog: %u\n", ecx, edx |
DEBUGF 1,"Socket_listen: socknum: %u backlog: %u\n", ecx, edx |
|
call SOCKET_num_to_ptr |
jz s_error |
592,7 → 550,7 |
align 4 |
SOCKET_accept: |
|
DEBUGF 1,"SOCKET_accept: socknum: %u sockaddr: %x, length: %u\n", ecx, edx, esi |
DEBUGF 1,"Socket_accept: socknum: %u sockaddr: %x, length: %u\n", ecx, edx, esi |
|
call SOCKET_num_to_ptr |
jz s_error |
643,7 → 601,7 |
align 4 |
SOCKET_close: |
|
DEBUGF 1,"SOCKET_close: socknum: %u\n", ecx |
DEBUGF 1,"socket_close: socknum: %u\n", ecx |
|
call SOCKET_num_to_ptr |
jz s_error |
700,10 → 658,11 |
jmp [eax + SOCKET.rcv_proc] |
|
|
|
align 4 |
SOCKET_receive_dgram: |
SOCKET_receive_udp: |
|
DEBUGF 1,"SOCKET_receive: DGRAM\n" |
DEBUGF 1,"type: UDP\n" |
|
mov ebx, esi |
mov edi, edx ; addr to buffer |
746,7 → 705,7 |
align 4 |
SOCKET_receive_tcp: |
|
DEBUGF 1,"SOCKET_receive: TCP\n" |
DEBUGF 1,"type: TCP\n" |
|
mov ecx, esi |
mov edi, edx |
774,7 → 733,7 |
align 4 |
SOCKET_send: |
|
DEBUGF 1,"SOCKET_send: socknum: %u data ptr: %x, length: %u, flags: %x, ", ecx, edx, esi, edi |
DEBUGF 1,"SOCKET_send: socknum: %u sockaddr: %x, length: %u, flags: %x, ", ecx, edx, esi, edi |
|
call SOCKET_num_to_ptr |
jz s_error |
782,10 → 741,11 |
jmp [eax + SOCKET.snd_proc] |
|
|
|
align 4 |
SOCKET_send_udp: |
|
DEBUGF 1,"SOCKET_send: UDP\n" |
DEBUGF 1,"type: UDP\n" |
|
mov ecx, esi |
mov esi, edx |
799,7 → 759,7 |
align 4 |
SOCKET_send_tcp: |
|
DEBUGF 1,"SOCKET_send: TCP\n" |
DEBUGF 1,"type: TCP\n" |
|
push eax |
mov ecx, esi |
814,33 → 774,8 |
ret |
|
|
;align 4 |
;SOCKET_send_ip: |
; |
; DEBUGF 1,"type: IP\n" |
; |
; mov ecx, esi |
; mov esi, edx |
; |
; call IPv4_output_raw |
; |
; mov dword [esp+32], eax |
; ret |
|
align 4 |
SOCKET_send_icmp: |
|
DEBUGF 1,"SOCKET_send: ICMP\n" |
|
mov ecx, esi |
call ICMP_output_raw |
|
mov dword [esp+32], 0 |
ret |
|
|
|
|
;----------------------------------------------------------------- |
; |
; SOCKET_get_options |
1056,13 → 991,13 |
|
add_to_queue (eax + SOCKET_QUEUE_LOCATION), SOCKET_QUEUE_SIZE, socket_queue_entry.size, SOCKET_input.full |
|
DEBUGF 1,"SOCKET_input: queued packet successfully\n" |
DEBUGF 1,"Queued packet successfully\n" |
add esp, socket_queue_entry.size |
mov [eax + SOCKET.lock], 0 |
jmp SOCKET_notify_owner |
|
.full: |
DEBUGF 2,"SOCKET_input: socket %x is full!\n", eax |
DEBUGF 2,"Socket %x is full!\n", eax |
mov [eax + SOCKET.lock], 0 |
call kernel_free |
add esp, 8 |
1114,7 → 1049,7 |
|
.copy: |
mov edi, [eax + RING_BUFFER.write_ptr] |
DEBUGF 2,"SOCKET_ring_write: %u bytes from %x to %x\n", ecx, esi, edi |
DEBUGF 2,"Copying %u bytes from %x to %x\n", ecx, esi, edi |
|
push ecx |
shr ecx, 1 |
1152,7 → 1087,7 |
jmp .copy |
|
.full: |
DEBUGF 2,"SOCKET_ring_write: ring buffer is full!\n" |
DEBUGF 2,"Ring buffer is full!\n" |
xor ecx, ecx |
ret |
|
1181,7 → 1116,7 |
.copy: |
mov esi, [eax + RING_BUFFER.read_ptr] |
|
DEBUGF 2,"SOCKET_ring_read: %u bytes from %x to %x\n", ecx, esi, edi |
DEBUGF 2,"Copying %u bytes from %x to %x\n", ecx, esi, edi |
push ecx |
shr ecx, 1 |
jnc .nb |
1399,7 → 1334,7 |
lea ebx, [eax + SOCKET.lock] |
call wait_mutex |
|
DEBUGF 1, "SOCKET_free: freeing socket..\n" |
DEBUGF 1, "freeing socket..\n" |
|
cmp [eax + SOCKET.Domain], AF_INET4 |
jnz .no_tcp |
1417,7 → 1352,7 |
mov ebx, [eax + SOCKET.NextPtr] |
mov eax, [eax + SOCKET.PrevPtr] |
|
DEBUGF 1, "SOCKET_free: linking socket %x to socket %x\n", eax, ebx |
DEBUGF 1, "linking socket %x to socket %x\n", eax, ebx |
|
test eax, eax |
jz @f |
1432,7 → 1367,7 |
call kernel_free |
pop ebx |
|
DEBUGF 1, "SOCKET_free: success!\n" |
DEBUGF 1, "socket is gone!\n" |
|
.error: |
ret |