forked from KolibriOS/kolibrios
Fix in socket_read (page_fault) and udp_rx (incorrect IP comparison)
git-svn-id: svn://kolibrios.org@915 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c01a33cfa5
commit
c58b0535f6
@ -608,7 +608,6 @@ proc socket_poll stdcall
|
||||
ret
|
||||
|
||||
.error:
|
||||
;or eax, -1
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
@ -633,7 +632,6 @@ proc socket_status stdcall
|
||||
ret
|
||||
|
||||
.error:
|
||||
;or eax, -1
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
@ -665,24 +663,24 @@ proc socket_read stdcall
|
||||
jz .error
|
||||
|
||||
dec eax
|
||||
mov esi, ebx ; esi is address of socket
|
||||
mov esi, ebx ; esi is address of socket
|
||||
mov [ebx + SOCKET.rxDataCount], eax ; store new count
|
||||
;movzx ebx, byte[ebx + SOCKET.rxData] ; get the byte
|
||||
movzx ebx, byte[ebx + SOCKETHEADERSIZE] ; get the byte
|
||||
add esi, SOCKETHEADERSIZE
|
||||
mov edi, esi
|
||||
inc esi
|
||||
movzx ebx, byte[ebx + SOCKET.rxData] ; get the byte
|
||||
|
||||
mov ecx, (SOCKETBUFFSIZE - SOCKETHEADERSIZE) / 4
|
||||
lea edi, [ebx + SOCKETHEADERSIZE]
|
||||
mov ecx, SOCKETBUFFSIZE - SOCKET.rxData - 1
|
||||
lea edi, [esi + SOCKET.rxData]
|
||||
lea esi, [edi + 1]
|
||||
cld
|
||||
push ecx
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
pop ecx
|
||||
and ecx, 3
|
||||
rep movsb
|
||||
|
||||
ret
|
||||
|
||||
.error:
|
||||
;or eax, -1
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
ret
|
||||
@ -723,7 +721,7 @@ proc socket_read_packet stdcall
|
||||
call .start_copy ; copy to the application
|
||||
|
||||
mov esi, ebx ; now we're going to copy the remaining bytes to the beginning
|
||||
add esi, SOCKETHEADERSIZE ; we dont need to copy the header
|
||||
add esi, SOCKET.rxData ; we dont need to copy the header
|
||||
mov edi, esi ; edi is where we're going to copy to
|
||||
add esi, edx ; esi is from where we copy
|
||||
pop ecx ; count of bytes we have left
|
||||
@ -739,7 +737,6 @@ proc socket_read_packet stdcall
|
||||
ret ; at last, exit
|
||||
|
||||
.error:
|
||||
;or eax, -1
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
@ -752,7 +749,7 @@ proc socket_read_packet stdcall
|
||||
.start_copy:
|
||||
mov edi, ecx
|
||||
mov esi, ebx
|
||||
add esi, SOCKETHEADERSIZE ; we dont need to copy the header
|
||||
add esi, SOCKET.rxData ; we dont need to copy the header
|
||||
mov ecx, eax ; eax is count of bytes
|
||||
push ecx
|
||||
shr ecx, 2 ; divide eax by 4
|
||||
|
@ -46,7 +46,7 @@ endg
|
||||
|
||||
; socket buffers
|
||||
SOCKETBUFFSIZE equ 4096 ; state + config + buffer.
|
||||
SOCKETHEADERSIZE equ 76+8+8 ; thus 4096 - SOCKETHEADERSIZE bytes data
|
||||
SOCKETHEADERSIZE equ SOCKET.rxData ; thus 4096 - SOCKETHEADERSIZE bytes data
|
||||
|
||||
;NUM_SOCKETS equ 16 ; Number of open sockets supported. Was 20
|
||||
|
||||
|
@ -102,7 +102,7 @@ proc udp_rx stdcall
|
||||
je @f
|
||||
|
||||
mov eax, [edx + IP_PACKET.SourceAddress] ; get the Source address from the IP packet
|
||||
cmp [ebx + SOCKET.RemoteIP], ebx
|
||||
cmp [ebx + SOCKET.RemoteIP], eax
|
||||
jne .exit ; Quit if the source IP is not valid
|
||||
|
||||
@@: ; OK - we have a valid UDP packet for this socket.
|
||||
|
Loading…
Reference in New Issue
Block a user