More TCP and sockets code

git-svn-id: svn://kolibrios.org@1774 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
hidnplayr 2011-01-28 23:07:25 +00:00
parent 2ba52e3e4a
commit 8619f93e83
3 changed files with 78 additions and 55 deletions

View File

@ -1724,3 +1724,18 @@ SOCKET_is_disconnected:
or [eax + SOCKET.options], SS_CANTRCVMORE + SS_CANTSENDMORE or [eax + SOCKET.options], SS_CANTRCVMORE + SS_CANTSENDMORE
jmp SOCKET_notify_owner jmp SOCKET_notify_owner
;-----------------------------------------------------------------
;
; SOCKET_cant_recv_more
;
; IN: eax = socket ptr
; OUT: /
;
;-----------------------------------------------------------------
align 4
SOCKET_cant_recv_more:
ret

View File

@ -43,56 +43,56 @@ ETHER_PPP_DISCOVERY equ 0x6388
ETHER_PPP_SESSION equ 0x6488 ETHER_PPP_SESSION equ 0x6488
;Protocol family ;Protocol family
AF_UNSPEC equ 0 AF_UNSPEC equ 0
AF_UNIX equ 1 AF_UNIX equ 1
AF_INET4 equ 2 AF_INET4 equ 2
AF_INET6 equ 10 AF_INET6 equ 10
; Internet protocol numbers ; Internet protocol numbers
IP_PROTO_IP equ 0 IP_PROTO_IP equ 0
IP_PROTO_ICMP equ 1 IP_PROTO_ICMP equ 1
IP_PROTO_TCP equ 6 IP_PROTO_TCP equ 6
IP_PROTO_UDP equ 17 IP_PROTO_UDP equ 17
; Socket types ; Socket types
SOCK_STREAM equ 1 SOCK_STREAM equ 1
SOCK_DGRAM equ 2 SOCK_DGRAM equ 2
SOCK_RAW equ 3 SOCK_RAW equ 3
; Socket options ; Socket options
SO_ACCEPTCON equ 1 SO_ACCEPTCON equ 1
; Socket States ; Socket States
SS_NOFDREF equ 0x001 ; no file table ref any more SS_NOFDREF equ 0x001 ; no file table ref any more
SS_ISCONNECTED equ 0x002 ; socket connected to a peer SS_ISCONNECTED equ 0x002 ; socket connected to a peer
SS_ISCONNECTING equ 0x004 ; in process of connecting to peer SS_ISCONNECTING equ 0x004 ; in process of connecting to peer
SS_ISDISCONNECTING equ 0x008 ; in process of disconnecting SS_ISDISCONNECTING equ 0x008 ; in process of disconnecting
SS_CANTSENDMORE equ 0x010 ; can't send more data to peer SS_CANTSENDMORE equ 0x010 ; can't send more data to peer
SS_CANTRCVMORE equ 0x020 ; can't receive more data from peer SS_CANTRCVMORE equ 0x020 ; can't receive more data from peer
SS_RCVATMARK equ 0x040 ; at mark on input SS_RCVATMARK equ 0x040 ; at mark on input
SS_ISABORTING equ 0x080 ; aborting fd references - close() SS_ISABORTING equ 0x080 ; aborting fd references - close()
SS_RESTARTSYS equ 0x100 ; restart blocked system calls SS_RESTARTSYS equ 0x100 ; restart blocked system calls
SS_ISDISCONNECTED equ 0x800 ; socket disconnected from peer SS_ISDISCONNECTED equ 0x800 ; socket disconnected from peer
SS_ASYNC equ 0x100 ; async i/o notify SS_ASYNC equ 0x100 ; async i/o notify
SS_ISCONFIRMING equ 0x200 ; deciding to accept connection req SS_ISCONFIRMING equ 0x200 ; deciding to accept connection req
SS_MORETOCOME equ 0x400 ; SS_MORETOCOME equ 0x400
SOCKET_MAXDATA equ 4096*32 ; must be 4096*(power of 2) where 'power of 2' is at least 8 SOCKET_MAXDATA equ 4096*32 ; must be 4096*(power of 2) where 'power of 2' is at least 8
; Network driver types ; Network driver types
NET_TYPE_ETH equ 1 NET_TYPE_ETH equ 1
NET_TYPE_SLIP equ 2 NET_TYPE_SLIP equ 2
MAX_backlog equ 20 ; maximum backlog for stream sockets MAX_backlog equ 20 ; maximum backlog for stream sockets
; Error Codes ; Error Codes
ENOBUFS equ 55 ENOBUFS equ 55
ECONNREFUSED equ 61 ECONNREFUSED equ 61
ECONNRESET equ 52 ECONNRESET equ 52
ETIMEDOUT equ 60 ETIMEDOUT equ 60
ECONNABORTED equ 53 ECONNABORTED equ 53
@ -145,19 +145,6 @@ macro ntohw reg {
} }
macro packet_to_debug { ; set esi to packet you want to print, ecx to number of bytes
local .loop
.loop:
lodsb
DEBUGF 1,"%x ", eax:2
loop @r
}
include "queue.inc" include "queue.inc"
include "ethernet.inc" include "ethernet.inc"
@ -263,7 +250,7 @@ stack_handler:
;----------------------------------------------------------------- ;-----------------------------------------------------------------
; ;
; NET_Add_Device: ; NET_add_Device:
; ;
; This function is called by the network drivers, ; This function is called by the network drivers,
; to register each running NIC to the kernel ; to register each running NIC to the kernel

View File

@ -1339,6 +1339,22 @@ align 4
DEBUGF 1,"Processing FIN\n" DEBUGF 1,"Processing FIN\n"
cmp [ebx + TCP_SOCKET.t_state], TCB_CLOSE_WAIT
je .not_first_fin
cmp [ebx + TCP_SOCKET.t_state], TCB_CLOSING
je .not_first_fin
cmp [ebx + TCP_SOCKET.t_state], TCB_FIN_WAIT_2
je .not_first_fin
DEBUGF 1,"First FIN for this connection\n"
mov eax, ebx
call SOCKET_cant_recv_more
mov [ebx + TCP_SOCKET.t_flags], TF_ACKNOW
inc [ebx + TCP_SOCKET.RCV_NXT]
.not_first_fin:
mov eax, [ebx + TCP_SOCKET.t_state] mov eax, [ebx + TCP_SOCKET.t_state]
shl eax, 2 shl eax, 2
jmp dword [eax + .FIN_sw_list] jmp dword [eax + .FIN_sw_list]
@ -1356,23 +1372,28 @@ align 4
dd .fin_wait2 ;TCB_FIN_WAIT_2 dd .fin_wait2 ;TCB_FIN_WAIT_2
dd .fin_timed ;TCB_TIMED_WAIT dd .fin_timed ;TCB_TIMED_WAIT
.fin_syn_est: .fin_syn_est:
jmp .final_processing mov [ebx + TCP_SOCKET.t_state], TCB_CLOSE_WAIT
jmp .no_fin
.fin_wait1: .fin_wait1:
jmp .final_processing mov [ebx + TCP_SOCKET.t_state], TCB_CLOSING
jmp .no_fin
.fin_wait2: .fin_wait2:
jmp .final_processing mov [ebx + TCP_SOCKET.t_state], TCB_TIMED_WAIT
mov eax, ebx
call TCP_cancel_timers
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL
call SOCKET_is_disconnected
jmp .no_fin
.fin_timed: .fin_timed:
mov [ebx + TCP_SOCKET.timer_timed_wait], 2 * TCP_time_MSL
jmp .final_processing jmp .no_fin
.no_fin: .no_fin: