Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1838 → Rev 1837

/kernel/branches/net/network/socket.inc
335,9 → 335,6
mov [eax + SOCKET.Protocol], IP_PROTO_TCP
mov [eax + SOCKET.snd_proc], SOCKET_send_tcp
mov [eax + SOCKET.rcv_proc], SOCKET_receive_tcp
 
 
mov [eax + TCP_SOCKET.t_maxseg], 1480 ;;;;; FIXME
ret
 
 
510,6 → 507,8
pop [eax + TCP_SOCKET.ISS]
mov [eax + TCP_SOCKET.timer_keepalive], TCP_time_keep_init
 
mov [eax + TCP_SOCKET.t_maxseg], 1480 ;;;;;
 
TCP_sendseqinit eax
 
; mov [ebx + TCP_SOCKET.timer_retransmission], ;; todo: create macro to set retransmission timer
1492,7 → 1491,7
 
and [eax + SOCKET.options], not SO_ACCEPTCON
 
;;;;; call SOCKET_notify_owner
call SOCKET_notify_owner
pop edi ecx esi
 
ret
/kernel/branches/net/network/tcp_input.inc
181,27 → 181,22
test [ebx + SOCKET.options], SO_ACCEPTCON
jz .no_listening_socket
 
DEBUGF 1,"Accepting new connection\n"
 
mov [ebx + SOCKET.lock], 0
call SOCKET_fork
 
test eax, eax
jz .drop
 
push [edx + TCP_segment.DestinationPort]
pop [eax + TCP_SOCKET.LocalPort]
 
push [edx - IPv4_Packet.DataOrOptional + IPv4_Packet.DestinationAddress] ;;; FIXME
pop [eax + IP_SOCKET.LocalIP]
 
push [edx + TCP_segment.DestinationPort]
pop [eax + TCP_SOCKET.LocalPort]
push [edx - IPv4_Packet.DataOrOptional + IPv4_Packet.SourceAddress] ;;; FIXME
pop [eax + IP_SOCKET.RemoteIP]
 
mov [eax + TCP_SOCKET.t_state], TCPS_LISTEN
 
; mov [ebx + SOCKET.lock], 0
mov ebx, eax
jmp .not_uni_xfer
 
jmp .LISTEN
 
.no_listening_socket:
 
;-------------------------------------
472,36 → 467,32
 
;;; TODO: check if it's a broadcast or multicast, and drop if so
 
push [edx - IPv4_Packet.DataOrOptional + IPv4_Packet.SourceAddress] ;;; FIXME
pop [ebx + IP_SOCKET.RemoteIP]
add [TCP_sequence_num], 64000
 
push [edx + TCP_segment.SourcePort]
pop [ebx + TCP_SOCKET.RemotePort]
pop [eax + TCP_SOCKET.RemotePort]
 
push [edx + TCP_segment.SequenceNumber]
pop [ebx + TCP_SOCKET.IRS]
pop [eax + TCP_SOCKET.IRS]
 
push [TCP_sequence_num] ;;;;;
add [TCP_sequence_num], 64000 / 2
pop [ebx + TCP_SOCKET.ISS]
push [eax + TCP_SOCKET.ISS]
pop [eax + TCP_SOCKET.SND_NXT]
 
push [ebx + TCP_SOCKET.ISS]
pop [ebx + TCP_SOCKET.SND_NXT]
TCP_sendseqinit eax
TCP_rcvseqinit eax
 
TCP_sendseqinit ebx
TCP_rcvseqinit ebx
mov [eax + TCP_SOCKET.t_state], TCPS_SYN_RECEIVED
mov [eax + TCP_SOCKET.t_flags], TF_ACKNOW
mov [eax + TCP_SOCKET.timer_keepalive], TCP_time_keep_interval ;;;; macro
 
mov [ebx + TCP_SOCKET.t_state], TCPS_SYN_RECEIVED
mov [ebx + TCP_SOCKET.t_flags], TF_ACKNOW
mov [ebx + TCP_SOCKET.timer_keepalive], TCP_time_keep_interval ;;;; macro
 
lea eax, [ebx + STREAM_SOCKET.snd]
add eax, STREAM_SOCKET.snd
call SOCKET_ring_create
 
lea eax, [ebx + STREAM_SOCKET.rcv]
add eax, STREAM_SOCKET.rcv - STREAM_SOCKET.snd
call SOCKET_ring_create
 
;;; call SOCKET_notify_owner
lea ebx, [eax - STREAM_SOCKET.rcv]
mov [ebx + SOCKET.lock], 0
 
jmp .trim_then_step6
512,8 → 503,6
 
 
 
 
 
;------------
; Active Open
 
673,13 → 662,16
inc [edx + TCP_segment.SequenceNumber]
 
cmp [edx + TCP_segment.UrgentPointer], 1
jle @f
jl @f
 
dec [edx + TCP_segment.UrgentPointer]
jmp .dup_syn
 
jmp .no_dup_syn
@@:
 
and [edx + TCP_segment.Flags], not (TH_URG)
.dup_syn:
dec eax
jz .no_duplicate
.no_dup_syn:
 
; eax holds number of bytes to drop
897,11 → 889,11
DEBUGF 1,"TCP state = syn received\n"
 
mov eax, [edx + TCP_segment.AckNumber]
cmp [ebx + TCP_SOCKET.SND_UNA], eax
cmp eax, [ebx + TCP_SOCKET.SND_UNA]
jg .drop_with_reset
cmp eax, [ebx + TCP_SOCKET.SND_MAX]
 
cmp [ebx + TCP_SOCKET.SND_MAX], eax
jg .drop_with_reset
 
;;; update stats
mov eax, ebx
call SOCKET_is_connected
1495,10 → 1487,8
mov [ebx + SOCKET.lock], 0
 
push ebx
; mov cl, TH_ACK
; call TCP_respond_socket
mov eax, ebx
call TCP_output
mov cl, TH_ACK
call TCP_respond_socket
pop ebx
 
call kernel_free
/kernel/branches/net/network/tcp_output.inc
492,8 → 492,7
.fail:
pop ecx
add esp, ecx
pop eax
add esp, 8
add esp, 4+8
mov [eax + SOCKET.lock], 0
DEBUGF 1,"TCP_output: failed\n"
ret