266,7 → 266,7 |
|
|
|
;--------------------------------------- |
;----------------------------------------------------------------- |
; |
; The fast way to send an ACK/RST/keepalive segment |
; |
275,7 → 275,10 |
; IN: ebx = socket ptr |
; cl = flags |
; |
;-------------------------------------- |
; OUT: / |
; |
;----------------------------------------------------------------- |
|
align 4 |
TCP_respond: |
|
285,11 → 288,12 |
; Create the IP packet |
|
push cx ebx |
mov eax, [ebx + IP_SOCKET.RemoteIP] |
mov edx, [ebx + IP_SOCKET.LocalIP] |
mov edi, [ebx + IP_SOCKET.RemoteIP] |
mov al, [ebx + IP_SOCKET.ttl] |
mov ah, IP_PROTO_TCP |
mov ecx, sizeof.TCP_header |
mov ebx, [ebx + IP_SOCKET.device] |
mov ecx, sizeof.TCP_header |
mov di, IP_PROTO_TCP shl 8 + 128 |
call IPv4_output |
jz .error |
pop esi cx |
347,18 → 351,18 |
ret |
|
|
|
|
|
|
|
|
;------------------------- |
;----------------------------------------------------------------- |
; |
; TCP_respond_segment: |
; |
; IN: edx = segment ptr (a previously received segment) |
; edi = ptr to dest and src IPv4 addresses |
; IN: ebx = device ptr |
; edx = segment ptr (a previously received segment) |
; edi = ptr to IPv4 header |
; cl = flags |
; |
; OUT: / |
; |
;----------------------------------------------------------------- |
|
align 4 |
TCP_respond_segment: |
369,11 → 373,10 |
; Create the IP packet |
|
push cx edx |
mov edx, [edi + 4] |
mov eax, [edi] |
mov edx, [edi + IPv4_header.DestinationAddress] |
mov edi, [edi + IPv4_header.SourceAddress] |
mov ecx, sizeof.TCP_header |
mov di, IP_PROTO_TCP shl 8 + 128 |
xor ebx, ebx ;;; fixme |
mov ax, IP_PROTO_TCP shl 8 + 128 |
call IPv4_output |
jz .error |
pop esi cx |