Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3227 → Rev 3228

/kernel/branches/net/network/socket.inc
31,7 → 31,7
Type dd ? ; RAW/STREAM/DGRAP
Protocol dd ? ; ICMP/IPv4/ARP/TCP/UDP
errorcode dd ?
device dd ?
device dd ? ; driver pointer, socket pointer if it's an UNIX socket
 
options dd ?
state dd ?
275,6 → 275,7
dd SOCKET_receive ; 7
dd SOCKET_set_opt ; 8
dd SOCKET_get_opt ; 9
dd SOCKET_pair ; 10
.number = ($ - .table) / 4 - 1
 
s_error:
283,8 → 284,6
 
ret
 
 
 
;-----------------------------------------------------------------
;
; SOCKET_open
360,7 → 359,7
.tcp:
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 + SOCKET.rcv_proc], SOCKET_receive_stream
 
TCP_init_socket eax
ret
835,9 → 834,9
 
 
align 4
SOCKET_receive_tcp:
SOCKET_receive_stream:
 
DEBUGF 1,"SOCKET_receive: TCP\n"
DEBUGF 1,"SOCKET_receive: STREAM\n"
 
mov ecx, esi
mov edi, edx
949,7 → 948,29
 
 
 
align 4
SOCKET_send_unix:
 
DEBUGF 1,"SOCKET_send: UNIX\n"
 
call SOCKET_check
jz s_error
mov eax, [eax + SOCKET.device]
call SOCKET_check
jz s_error
 
push eax
add eax, STREAM_SOCKET.rcv
call SOCKET_ring_write
pop eax
 
mov [esp+32], ecx
 
call SOCKET_notify_owner
 
ret
 
 
;-----------------------------------------------------------------
;
; SOCKET_get_options
1074,8 → 1095,65
 
 
 
;-----------------------------------------------------------------
;
; SOCKET_pair
;
; Allocates a pair of linked UNIX domain sockets
;
; IN: /
; OUT: eax is socket1 num, -1 on error
; ebx is socket2 num
;
;-----------------------------------------------------------------
align 4
SOCKET_pair:
 
DEBUGF 1,"SOCKET_pair\n"
 
call SOCKET_alloc
jz s_error
mov [esp+32], edi ; application's eax
 
mov [eax + SOCKET.Domain], AF_UNIX
mov [eax + SOCKET.Type], SOCK_STREAM
mov [eax + SOCKET.Protocol], 0 ;;; CHECKME
mov [eax + SOCKET.snd_proc], SOCKET_send_unix
mov [eax + SOCKET.rcv_proc], SOCKET_receive_stream
mov ebx, eax
 
call SOCKET_alloc
jz .error
mov [esp+24], edi ; application's ebx
 
mov [eax + SOCKET.Domain], AF_UNIX
mov [eax + SOCKET.Type], SOCK_STREAM
mov [eax + SOCKET.Protocol], 0 ;;; CHECKME
mov [eax + SOCKET.snd_proc], SOCKET_send_unix
mov [eax + SOCKET.rcv_proc], SOCKET_receive_stream
 
; Link the two sockets to eachother
mov [eax + SOCKET.device], ebx
mov [ebx + SOCKET.device], eax
 
lea eax, [eax + STREAM_SOCKET.rcv]
call SOCKET_ring_create
 
lea eax, [ebx + STREAM_SOCKET.rcv]
call SOCKET_ring_create
pop eax
 
 
 
ret
 
.error:
mov eax, ebx
call SOCKET_free
jmp s_error
 
 
 
;-----------------------------------------------------------------
;
; SOCKET_debug