74,13 → 74,13 |
align 4 |
UDP_handler: |
|
DEBUGF 1,"UDP_Handler, checksum:%x\n", [edx+UDP_Packet.Checksum]:4 |
DEBUGF 1,"UDP_Handler, checksum:%x, size:%u\n", [edx+UDP_Packet.Checksum]:4, ecx |
|
; First validate, checksum: |
cmp [edx + UDP_Packet.Checksum], 0 |
jz .no_checksum |
|
push ecx edx |
push edx |
|
push esi |
push edi |
87,7 → 87,7 |
mov esi, edx |
call UDP_checksum |
|
pop edx ecx |
pop edx |
|
cmp [edx + UDP_Packet.Checksum], 0 |
jnz .checksum_mismatch |
122,9 → 122,9 |
cmp [eax + SOCKET_head.end + IPv4_SOCKET.RemoteIP], 0xffffffff |
je .ok1 |
|
mov esi, [esp] |
mov esi, [ebx + ETH_FRAME.Data + IPv4_Packet.SourceAddress] ; get the Source address from the IP Packet FIXME |
cmp [eax + SOCKET_head.end + IPv4_SOCKET.RemoteIP], esi |
; mov esi, [esp] ; start of data (ethernet header) |
; mov esi, [esi + ETH_FRAME.Data + IPv4_Packet.SourceAddress] ; get the Source address from the IP Packet FIXME |
cmp [eax + SOCKET_head.end + IPv4_SOCKET.RemoteIP], edi ;esi |
jne .try_more ; Quit if the source IP is not valid, check for more sockets with this IP/PORT combination |
|
|
175,6 → 175,7 |
|
jmp .ok2 |
|
|
.checksum_mismatch: |
|
DEBUGF 2,"UDP_Handler - checksum mismatch\n" |
301,9 → 302,10 |
adc dl, [esp+3+8] |
adc dh, [esp+2+8] |
|
adc dl, byte[esi+UDP_Packet.Length+1] |
adc dh, byte[esi+UDP_Packet.Length+0] |
|
adc dl, cl ; byte[esi+UDP_Packet.Length+1] |
adc dh, ch ; byte[esi+UDP_Packet.Length+0] |
|
; Done with pseudoheader, now do real header |
adc dl, byte[esi+UDP_Packet.SourcePort+1] |
adc dh, byte[esi+UDP_Packet.SourcePort+0] |