Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1829 → Rev 1830

/kernel/branches/net/network/socket.inc
131,7 → 131,6
;-------
; Timers
.timer_retransmission dw ? ; rexmt
.timer_ack dw ?
.timer_persist dw ?
.timer_keepalive dw ? ; keepalive/syn timeout
.timer_timed_wait dw ? ; also used as 2msl timer
1209,12 → 1208,12
.nd:
pop ecx
 
; .no_data_at_all:
.no_data_at_all:
ret
 
.less_data:
mov ecx, [eax + RING_BUFFER.size]
test ecx, ecx
; test ecx, ecx
; jz .no_data_at_all
jmp .copy
 
/kernel/branches/net/network/tcp_input.inc
32,6 → 32,7
; OUT: /
;
;-----------------------------------------------------------------
 
align 4
TCP_input:
 
153,11 → 154,15
;----------------
; Lock the socket
 
cmp [ebx + SOCKET.lock], 0
jne .drop_not_locked ;;; HACK ! HACK ! dirty fucking HACK ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
add ebx, SOCKET.lock
DEBUGF 1,"lock: %x\n", [ebx]
call wait_mutex
sub ebx, SOCKET.lock
 
 
DEBUGF 1,"Socket locked\n"
 
;---------------------------------------
371,7 → 376,7
mov [ebx + TCP_SOCKET.SND_UNA], eax
 
; Stop retransmit timer
mov [ebx + TCP_SOCKET.timer_ack], 0
mov [ebx + TCP_SOCKET.timer_retransmission], 0
 
; Awaken waiting processes
mov [ebx + SOCKET.lock], 0
646,7 → 651,7
sub eax, [edx + TCP_segment.SequenceNumber]
jle .no_duplicate
 
DEBUGF 1,"Uh oh.. %x bytes of duplicate data!\n", eax
DEBUGF 1,"Uh oh.. %u bytes of duplicate data!\n", eax
 
test [edx + TCP_segment.Flags], TH_SYN
jz .no_dup_syn
669,8 → 674,6
jz .no_duplicate
.no_dup_syn:
 
DEBUGF 1,"Going to drop %u out of %u bytes\n", eax, ecx
 
; eax holds number of bytes to drop
 
; Check for entire duplicate packet
678,6 → 681,8
cmp eax, ecx
jge .duplicate
 
DEBUGF 1,"Going to drop %u out of %u bytes\n", eax, ecx
 
;;; TODO: apply figure 28.30
 
; Check for duplicate FIN
718,7 → 723,7
 
;;; TODO
 
jmp .drop ;;; DROP the packet ??
jmp .drop_after_ack
 
.no_duplicate:
 
1456,8 → 1461,8
mov [ebx + SOCKET.lock], 0
 
push ebx
mov eax, ebx
call TCP_output
mov cl, TH_ACK
call TCP_respond_socket
pop ebx
 
call kernel_free
1500,10 → 1505,9
 
.respond_ack:
 
mov dl, TH_RST
 
push ebx
call TCP_respond_segment
mov cl, TH_RST
call TCP_respond_socket
pop ebx
 
jmp .destroy_new_socket
1511,9 → 1515,8
 
.respond_syn:
 
mov dl, TH_RST + TH_ACK
 
push ebx
mov cl, TH_RST + TH_ACK
call TCP_respond_socket
pop ebx
 
/kernel/branches/net/network/tcp_output.inc
361,7 → 361,7
 
pushw 0 ; .UrgentPointer dw ?
pushw 0 ; .Checksum dw ?
pushw 0x00a0 ; .Window dw ? ;;;;;;;
pushw 0x00a0 ; .Window dw ? ;;;;;;; FIXME
shl edi, 2 ; .DataOffset db ? only 4 left-most bits
shl dx, 8
or dx, di ; .Flags db ?
/kernel/branches/net/network/tcp_subr.inc
228,7 → 228,7
 
;---------------------------------------
;
; The easy way to send an ACK/RST/keepalive segment
; The fast way to send an ACK/RST/keepalive segment
;
; TCP_respond_socket:
;
274,8 → 274,9
stosb
mov al, cl
stosb
mov ax, [esi + TCP_SOCKET.RCV_WND]
rol ax, 8
; mov ax, [esi + TCP_SOCKET.RCV_WND]
; rol ax, 8
mov ax, 0x00a0 ;;;;;;; FIXME
stosw ; window
xor eax, eax
stosd ; checksum + urgentpointer
287,7 → 288,7
sub edi, TCP_segment.Data
mov ecx, TCP_segment.Data
xchg esi, edi
TCP_checksum (edi + IP_SOCKET.LocalIP), (esi + IP_SOCKET.RemoteIP)
TCP_checksum (edi + IP_SOCKET.LocalIP), (edi + IP_SOCKET.RemoteIP)
mov [esi+TCP_segment.Checksum], dx
 
;--------------------
/kernel/branches/net/network/tcp_timer.inc
24,23 → 24,26
local .loop
local .exit
 
mov eax, net_sockets
mov ebx, net_sockets
.loop:
mov eax, [eax + SOCKET.NextPtr]
or eax, eax
mov ebx, [ebx + SOCKET.NextPtr]
or ebx, ebx
jz .exit
 
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP ;;; We should also check if family is AF_INET
cmp [ebx + SOCKET.Domain], AF_INET4
jne .loop
 
dec [eax + TCP_SOCKET.timer_ack]
jnz .loop
cmp [ebx + SOCKET.Protocol], IP_PROTO_TCP ;;; We should also check if family is AF_INET
jne .loop
 
DEBUGF 1,"TCP ack for socket %x expired, time to piggyback!\n", eax
test [ebx + TCP_SOCKET.t_flags], TF_DELACK
jz .loop
and [ebx + TCP_SOCKET.t_flags], not (TF_DELACK)
 
push eax
push ebx
mov cl, TH_ACK
call TCP_respond_socket
pop eax
pop ebx
 
jmp .loop