104,18 → 104,17 |
} |
|
|
;--------------------------- |
; |
; TCP_pull_out_of_band |
; |
; IN: eax = |
; ebx = socket ptr |
; edx = tcp packet ptr |
; |
; OUT: / |
; |
;--------------------------- |
|
;-----------------------------------------------------------------; |
; ; |
; TCP_pull_out_of_band ; |
; ; |
; IN: eax = ? ; |
; ebx = socket ptr ; |
; edx = tcp packet ptr ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_pull_out_of_band: |
|
127,21 → 126,16 |
|
|
|
|
|
|
|
|
;------------------------- |
; |
; TCP_drop |
; |
; IN: eax = socket ptr |
; ebx = error number |
; |
; OUT: eax = socket ptr |
; |
;------------------------- |
;-----------------------------------------------------------------; |
; ; |
; TCP_drop ; |
; ; |
; IN: eax = socket ptr ; |
; ebx = error number ; |
; ; |
; OUT: eax = socket ptr ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_drop: ; FIXME CHECKME TODO |
|
171,14 → 165,15 |
|
|
|
;------------------------- |
; |
; TCP_disconnect |
; |
; IN: eax = socket ptr |
; OUT: eax = socket ptr / 0 |
; |
;------------------------- |
;-----------------------------------------------------------------; |
; ; |
; TCP_disconnect ; |
; ; |
; IN: eax = socket ptr ; |
; ; |
; OUT: eax = socket ptr / 0 ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_disconnect: |
|
198,18 → 193,18 |
call TCP_output |
pop eax |
@@: |
|
ret |
|
|
;------------------------- |
; |
; TCP_close |
; |
; IN: eax = socket ptr |
; OUT: / |
; |
;------------------------- |
;-----------------------------------------------------------------; |
; ; |
; TCP_close ; |
; ; |
; IN: eax = socket ptr ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_close: |
|
222,21 → 217,19 |
call SOCKET_free |
|
xor eax, eax |
|
ret |
|
|
|
|
;------------------------- |
; |
; TCP_outflags |
; |
; IN: eax = socket ptr |
; |
; OUT: edx = flags |
; |
;------------------------- |
;-----------------------------------------------------------------; |
; ; |
; TCP_outflags ; |
; ; |
; IN: eax = socket ptr ; |
; ; |
; OUT: edx = flags ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_outflags: |
|
266,16 → 259,16 |
|
|
|
;--------------------------------------- |
; |
; The fast way to send an ACK/RST/keepalive segment |
; |
; TCP_respond |
; |
; IN: ebx = socket ptr |
; cl = flags |
; |
;-------------------------------------- |
;-----------------------------------------------------------------; |
; ; |
; TCP_respond: Fast way to send an ACK/RST/keepalive segment. ; |
; ; |
; IN: ebx = socket ptr ; |
; cl = flags ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_respond: |
|
285,11 → 278,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,19 → 341,18 |
ret |
|
|
|
|
|
|
|
|
;------------------------- |
; TCP_respond_segment: |
; |
; IN: edx = segment ptr (a previously received segment) |
; edi = ptr to dest and src IPv4 addresses |
; cl = flags |
|
;-----------------------------------------------------------------; |
; ; |
; TCP_respond_segment ; |
; ; |
; 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 → 362,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 |
454,7 → 446,11 |
.done: |
} |
|
|
;-----------------------------------------------------------------; |
; ; |
; TCP_set_persist ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_set_persist: |
|
491,13 → 487,20 |
|
|
|
; eax = rtt |
; ebx = socket ptr |
|
;-----------------------------------------------------------------; |
; ; |
; TCP_xmit_timer: Calculate new smoothed RTT. ; |
; ; |
; IN: eax = rtt ; |
; ebx = socket ptr ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_xmit_timer: |
|
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_xmit_timer: socket=%x rtt=%d0ms\n", ebx, eax |
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_xmit_timer: socket=0x%x rtt=%d0ms\n", ebx, eax |
|
;TODO: update stats |
|
546,7 → 549,6 |
|
|
.no_rtt_yet: |
|
push ecx |
mov ecx, eax |
shl ecx, TCP_RTT_SHIFT |
559,10 → 561,16 |
ret |
|
|
|
|
; eax = max segment size |
; ebx = socket ptr |
;-----------------------------------------------------------------; |
; ; |
; TCP_mss: Update maximum segment size ; |
; ; |
; IN: eax = max segment size ; |
; ebx = socket ptr ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_mss: |
|
577,13 → 585,20 |
|
|
|
|
; ebx = socket ptr |
; edx = segment ptr |
;-----------------------------------------------------------------; |
; ; |
; TCP_reassemble ; |
; ; |
; IN: ebx = socket ptr ; |
; edx = segment ptr ; |
; ; |
; OUT: / ; |
; ; |
;-----------------------------------------------------------------; |
align 4 |
TCP_reassemble: |
|
;;;;; TODO |
|
|
ret |
|