90,10 → 90,9 |
|
cmp ebx, [eax + STREAM_SOCKET.snd.size] |
jae @f |
|
and dl, not (TH_FIN) |
@@: |
|
@@: |
inc ecx |
jmp .no_force |
|
113,7 → 112,6 |
@@: |
sub esi, ebx |
|
|
;------------------------ |
; check for window shrink (107) |
|
146,7 → 144,6 |
|
cmp esi, [eax + TCP_SOCKET.t_maxseg] |
jbe @f |
|
mov esi, [eax + TCP_SOCKET.t_maxseg] |
or [temp_bits], TCP_BIT_SENDALOT |
@@: |
160,7 → 157,6 |
cmp edi, [eax + STREAM_SOCKET.snd.size] |
jae @f |
and dl, not (TH_FIN) |
|
@@: |
|
;------------------------------- |
403,6 → 399,50 |
or [temp_bits], TCP_BIT_SENDALOT |
.no_overflow: |
|
; Update stats |
test esi, esi |
jz .zero_data |
|
cmp [eax + TCP_SOCKET.t_force], 1 |
jne @f |
cmp esi, 1 |
jne @f |
inc [TCPS_sndprobe] |
jmp .eos |
@@: |
|
mov ebx, [eax + TCP_SOCKET.SND_NXT] |
cmp ebx, [eax + TCP_SOCKET.SND_MAX] |
jae @f |
inc [TCPS_sndrexmitpack] |
add [TCPS_sndrexmitbyte], esi |
jmp .eos |
@@: |
inc [TCPS_sndpack] |
add [TCPS_sndbyte], esi |
jmp .eos |
|
.zero_data: |
test [eax + TCP_SOCKET.t_flags], TF_ACKNOW |
jz @f |
inc [TCPS_sndacks] |
jmp .eos |
@@: |
test dl, TH_SYN + TH_FIN + TH_RST |
jz @f |
inc [TCPS_sndctrl] |
jmp .eos |
@@: |
mov ebx, [eax + TCP_SOCKET.SND_UP] |
cmp ebx, [eax + TCP_SOCKET.SND_UNA] |
jb @f |
inc [TCPS_sndurg] |
jmp .eos |
@@: |
inc [TCPS_sndwinup] |
|
.eos: |
|
;---------------------------------------------------- |
; Calculate the receive window. |
; Dont shrink window, but avoid silly window syndrome |
469,8 → 509,8 |
call IPv4_output |
jz .ip_error |
|
;----------------------------------------- |
; Move TCP header from stack to TCP packet |
;------------------------------------------ |
; Move TCP header from stack to TCP segment |
|
push ecx |
mov ecx, [esp + 4] |
504,7 → 544,7 |
test ecx, ecx |
jz .nodata |
mov edx, [eax + TCP_SOCKET.SND_NXT] |
add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number <<< CHECKME |
add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number |
sub edx, [eax + TCP_SOCKET.SND_UNA] ; offset |
add eax, STREAM_SOCKET.snd |
call SOCKET_ring_read |
536,7 → 576,7 |
je @f |
mov [eax + TCP_SOCKET.t_rtt], 1 ; nope, start transmission timer |
mov [eax + TCP_SOCKET.t_rtseq], edi |
;TODO: update stats |
inc [TCPS_segstimed] |
@@: |
|
; set retransmission timer if not already set, and not doing an ACK or keepalive probe |
584,6 → 624,7 |
|
call NET_ptr_to_num4 |
inc [TCP_segments_tx + edi] |
inc [TCPS_sndtotal] |
|
; update advertised receive window |
test ecx, ecx |