Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5441 → Rev 5442

/kernel/trunk/network/socket.inc
98,9 → 98,9
;----------------------
; Transmit timing stuff
t_idle dd ?
t_rtt dd ?
t_rtt dd ? ; round trip time
t_rtseq dd ?
t_srtt dd ?
t_srtt dd ? ; smoothed round trip time
t_rttvar dd ?
t_rttmin dd ?
max_sndwnd dd ?
1974,14 → 1974,8
jnz .no_tcp
 
mov ebx, eax
cmp [ebx + STREAM_SOCKET.rcv.start_ptr], 0
je @f
stdcall kernel_free, [ebx + STREAM_SOCKET.rcv.start_ptr]
@@:
cmp [ebx + STREAM_SOCKET.snd.start_ptr], 0
je @f
stdcall kernel_free, [ebx + STREAM_SOCKET.snd.start_ptr]
@@:
mov eax, ebx
.no_tcp:
 
/kernel/trunk/network/tcp_input.inc
394,13 → 394,18
 
pop ecx
cmp eax, TCP_PAWS_IDLE
jle .drop_after_ack ; TODO: update stats
jle .paws_drop
push ecx
 
mov [ebx + TCP_SOCKET.ts_recent], 0 ; timestamp was invalid, fix it.
.no_paws:
jmp .opt_loop
 
.paws_drop:
inc [TCPS_rcvduppack] ; update stats
add [TCPS_rcvdupbyte], ecx
inc [TCPS_pawsdrop]
jmp .drop_after_ack
 
.no_options:
 
pop ecx
630,6 → 635,8
or [ebx + TCP_SOCKET.t_flags], TF_ACKNOW
mov eax, ecx
 
inc [TCPS_rcvpartduppack]
 
;;; TODO: update stats
 
;-----------------------------------------------
662,7 → 669,7
 
mov eax, ebx
call TCP_close
;;; TODO: update stats
inc [TCPS_rcvafterclose]
jmp .respond_seg_reset
 
;----------------------------------------
985,17 → 992,14
mov eax, [edx + TCP_header.AckNumber]
cmp eax, [ebx + TCP_SOCKET.SND_MAX]
jbe @f
 
;;; TODO: update stats
inc [TCPS_rcvacktoomuch]
jmp .drop_after_ack
 
@@:
 
mov edi, [edx + TCP_header.AckNumber]
sub edi, [ebx + TCP_SOCKET.SND_UNA] ; now we got the number of acked bytes in edi
 
;;; TODO: update stats
 
inc [TCPS_rcvackpack]
add [TCPS_rcvackbyte], edi
DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: acceptable ACK for %u bytes\n", edi
 
;------------------------------------------
1209,6 → 1213,8
test [edx + TCP_header.Flags], TH_SYN
jz .drop
 
inc [TCPS_accepts] ; update stats
 
;;; TODO: check if it's a broadcast or multicast, and drop if so
 
push dword [edi] ; Ipv4 source addres
/kernel/trunk/network/tcp_output.inc
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
/kernel/trunk/network/tcp_timer.inc
54,6 → 54,8
; call TCP_output ;;
pop ebx
 
inc [TCPS_delack] ; update stats
 
jmp .loop
 
.exit:
/kernel/trunk/network/tcp_usreq.inc
89,6 → 89,8
test [eax + SOCKET.state], SS_ISCONNECTED
jnz .eisconn
 
inc [TCPS_connattempt] ; update stats
 
push eax edx
lea ecx, [eax + SOCKET.mutex]
call mutex_lock