TCP_output: update advertised receive window correctly

git-svn-id: svn://kolibrios.org@6474 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2016-08-15 17:25:50 +00:00
parent 668afc0d0b
commit 9d14a71733

View File

@ -1,6 +1,6 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; Part of the TCP/IP network stack for KolibriOS ;; ;; Part of the TCP/IP network stack for KolibriOS ;;
@ -30,6 +30,7 @@ proc tcp_output
locals locals
temp_bits db ? temp_bits db ?
window dd ?
endl endl
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_output: socket=%x state=%u\n", eax, [eax + TCP_SOCKET.t_state] DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_output: socket=%x state=%u\n", eax, [eax + TCP_SOCKET.t_state]
@ -470,7 +471,8 @@ endl
mov ebx, ecx mov ebx, ecx
@@: @@:
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_send: window = %u\n", ebx DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_send: window=%u\n", ebx
mov [window], ebx
mov cl, [eax + TCP_SOCKET.RCV_SCALE] mov cl, [eax + TCP_SOCKET.RCV_SCALE]
shr ebx, cl shr ebx, cl
@ -518,19 +520,19 @@ endl
push ecx push ecx
mov ecx, [esp + 4] mov ecx, [esp + 4]
lea esi, [esp + 8] lea esi, [esp + 8]
shr ecx, 2 ; count is in bytes, we will work with dwords shr ecx, 2 ; count is in bytes, we will work with dwords
rep movsd rep movsd
pop ecx ; full TCP packet size pop ecx ; full TCP packet size
pop esi ; headersize pop esi ; headersize
add esp, esi ; remove it from stack add esp, esi ; remove it from stack
push eax ; packet ptr for send proc push eax ; packet ptr for send proc
mov edx, edi ; begin of data mov edx, edi ; begin of data
sub edx, esi ; begin of packet (edi = begin of data) sub edx, esi ; begin of packet (edi = begin of data)
push ecx push ecx
sub ecx, esi ; data size sub ecx, esi ; data size
;-------------- ;--------------
; Copy the data ; Copy the data
@ -629,6 +631,8 @@ endl
inc [TCPS_sndtotal] inc [TCPS_sndtotal]
; update advertised receive window ; update advertised receive window
mov ecx, [window]
test ecx, ecx test ecx, ecx
jz @f jz @f
add ecx, [eax + TCP_SOCKET.RCV_NXT] add ecx, [eax + TCP_SOCKET.RCV_NXT]