Subversion Repositories Kolibri OS

Rev

Rev 5584 | Rev 5969 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5584 Rev 5842
Line 13... Line 13...
13
;;         GNU GENERAL PUBLIC LICENSE                              ;;
13
;;         GNU GENERAL PUBLIC LICENSE                              ;;
14
;;          Version 2, June 1991                                   ;;
14
;;          Version 2, June 1991                                   ;;
15
;;                                                                 ;;
15
;;                                                                 ;;
16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 17... Line 17...
17
 
17
 
Line 18... Line 18...
18
$Revision: 5584 $
18
$Revision: 5842 $
Line 19... Line 19...
19
 
19
 
20
struct  SOCKET
20
struct  SOCKET
Line 25... Line 25...
25
 
25
 
Line 26... Line 26...
26
        mutex                   MUTEX
26
        mutex                   MUTEX
27
 
27
 
28
        PID                     dd ? ; process ID
28
        PID                     dd ? ; process ID
29
        TID                     dd ? ; thread ID
29
        TID                     dd ? ; thread ID
30
        Domain                  dd ? ; INET/LOCAL/..
30
        Domain                  dd ? ; INET4/INET6/LOCAL/..
31
        Type                    dd ? ; RAW/STREAM/DGRAM
31
        Type                    dd ? ; RAW/STREAM/DGRAM
32
        Protocol                dd ? ; ICMP/IPv4/ARP/TCP/UDP
32
        Protocol                dd ? ; UDP/TCP/ARP/ICMP
Line 33... Line 33...
33
        errorcode               dd ?
33
        errorcode               dd ?
34
        device                  dd ? ; driver pointer, socket pointer if it's an LOCAL socket
34
        device                  dd ? ; driver pointer, socket pointer if it's an LOCAL socket
Line 45... Line 45...
45
 
45
 
Line 46... Line 46...
46
struct  IP_SOCKET               SOCKET
46
struct  IP_SOCKET               SOCKET
47
 
47
 
-
 
48
        LocalIP                 rd 4 ; network byte order
-
 
49
        RemoteIP                rd 4 ; network byte order
Line 48... Line 50...
48
        LocalIP                 rd 4 ; network byte order
50
        ttl                     db ?
Line 49... Line 51...
49
        RemoteIP                rd 4 ; network byte order
51
                                rb 3 ; align
Line 148... Line 150...
148
        LocalPort               dw ? ; network byte order
150
        LocalPort               dw ? ; network byte order
149
        RemotePort              dw ? ; network byte order
151
        RemotePort              dw ? ; network byte order
Line 150... Line 152...
150
 
152
 
Line 151... Line -...
151
ends
-
 
152
 
-
 
153
 
-
 
154
struct  ICMP_SOCKET             IP_SOCKET
-
 
155
 
-
 
156
        Identifier              dw ?
-
 
157
 
-
 
158
ends
-
 
159
 
153
ends
Line 160... Line 154...
160
 
154
 
161
struct  RING_BUFFER
155
struct  RING_BUFFER
162
 
156
 
Line 311... Line 305...
311
        mov     [eax + SOCKET.connect_proc], connect_notsupp
305
        mov     [eax + SOCKET.connect_proc], connect_notsupp
Line 312... Line 306...
312
 
306
 
313
        cmp     ecx, AF_INET4
307
        cmp     ecx, AF_INET4
Line -... Line 308...
-
 
308
        jne     .no_inet4
-
 
309
 
314
        jne     .no_inet4
310
        mov     [eax + IP_SOCKET.ttl], 128
315
 
311
 
Line 316... Line 312...
316
        cmp     edx, SOCK_DGRAM
312
        cmp     edx, SOCK_DGRAM
317
        je      .udp
313
        je      .udp
Line 352... Line 348...
352
 
348
 
Line 353... Line 349...
353
        jmp     .unsupported
349
        jmp     .unsupported
354
 
350
 
-
 
351
align 4
-
 
352
  .udp:
-
 
353
        push    eax
-
 
354
        init_queue (eax + SOCKET_QUEUE_LOCATION)        ; Set up data receiving queue
355
align 4
355
        pop     eax
356
  .udp:
356
 
357
        mov     [eax + SOCKET.Protocol], IP_PROTO_UDP
357
        mov     [eax + SOCKET.Protocol], IP_PROTO_UDP
358
        mov     [eax + SOCKET.snd_proc], SOCKET_send_udp
358
        mov     [eax + SOCKET.snd_proc], SOCKET_send_udp
359
        mov     [eax + SOCKET.rcv_proc], SOCKET_receive_dgram
359
        mov     [eax + SOCKET.rcv_proc], SOCKET_receive_dgram
Line 371... Line 371...
371
        ret
371
        ret
Line 372... Line 372...
372
 
372
 
373
 
373
 
-
 
374
align 4
-
 
375
  .raw_ip:
-
 
376
        push    eax
-
 
377
        init_queue (eax + SOCKET_QUEUE_LOCATION)        ; Set up data receiving queue
374
align 4
378
        pop     eax
375
  .raw_ip:
379
 
376
        mov     [eax + SOCKET.snd_proc], SOCKET_send_ip
380
        mov     [eax + SOCKET.snd_proc], SOCKET_send_ip
377
        mov     [eax + SOCKET.rcv_proc], SOCKET_receive_dgram
381
        mov     [eax + SOCKET.rcv_proc], SOCKET_receive_dgram
Line 378... Line 382...
378
        mov     [eax + SOCKET.connect_proc], IPv4_connect
382
        mov     [eax + SOCKET.connect_proc], IPv4_connect
379
        ret
383
        ret
-
 
384
 
-
 
385
 
-
 
386
align 4
-
 
387
  .raw_icmp:
380
 
388
        push    eax
381
 
389
        init_queue (eax + SOCKET_QUEUE_LOCATION)        ; Set up data receiving queue
382
align 4
390
        pop     eax
383
  .raw_icmp:
391
 
Line 973... Line 981...
973
SOCKET_send_ip:
981
SOCKET_send_ip:
Line 974... Line 982...
974
 
982
 
Line 975... Line 983...
975
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_send: IPv4\n"
983
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_send: IPv4\n"
976
 
984
 
977
        mov     [esp+32], ecx
985
        mov     [esp+32], ecx
978
        call    IPv4_output_raw         ; FIXME: IPv4_output_raw should return error codes!
986
        call    IPv4_output_raw
979
        cmp     eax, -1
987
        cmp     eax, -1
Line 980... Line 988...
980
        je      .error
988
        je      .error
981
        ret
989
        ret
982
 
990
 
983
  .error:
991
  .error:
Line 984... Line 992...
984
        mov     dword[esp+32], -1
992
        mov     dword[esp+32], eax
985
        mov     dword[esp+20], EMSGSIZE
993
        mov     dword[esp+20], ebx
Line 986... Line 994...
986
        ret
994
        ret
Line 987... Line 995...
987
 
995
 
988
 
996
 
989
align 4
997
align 4
990
SOCKET_send_icmp:
998
SOCKET_send_icmp:
991
 
999
 
Line 992... Line 1000...
992
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_send: ICMP\n"
1000
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_send: ICMP\n"
993
 
1001
 
994
        mov     [esp+32], ecx
1002
        mov     [esp+32], ecx
995
        call    ICMP_output_raw         ; FIXME: errorcodes
1003
        call    ICMP_output_raw
Line 996... Line 1004...
996
        cmp     eax, -1
1004
        cmp     eax, -1
997
        je      .error
1005
        je      .error
Line 1124... Line 1132...
1124
        mov     dword[esp+32], -1
1132
        mov     dword[esp+32], -1
1125
        mov     dword[esp+20], EINVAL
1133
        mov     dword[esp+20], EINVAL
1126
        ret
1134
        ret
Line 1127... Line -...
1127
 
-
 
1128
 
1135
 
1129
 
1136
 
1130
;-----------------------------------------------------------------
1137
;-----------------------------------------------------------------
1131
;
1138
;
1132
; SOCKET_set_options
1139
; SOCKET_set_options
1133
;
1140
;
1134
;  IN:  ecx = socket number
-
 
1135
;       edx = pointer to the options:
1141
;  IN:  ecx = socket number
1136
;               dd      level, optname, optlen, optval
1142
;       edx = pointer to socket_options
1137
;  OUT: -1 on error
1143
;  OUT: -1 on error
-
 
1144
;
-
 
1145
;-----------------------------------------------------------------
-
 
1146
 
-
 
1147
struct socket_options
-
 
1148
        level   dd ?
-
 
1149
        optname dd ?
-
 
1150
        optlen  dd ?
-
 
1151
        optval  dd ?
1138
;
1152
ends
1139
;-----------------------------------------------------------------
1153
 
Line 1140... Line 1154...
1140
align 4
1154
align 4
Line 1141... Line 1155...
1141
SOCKET_set_opt:
1155
SOCKET_set_opt:
1142
 
1156
 
Line -... Line 1157...
-
 
1157
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_set_opt\n"
-
 
1158
 
1143
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_set_opt\n"
1159
        call    SOCKET_num_to_ptr
1144
 
1160
        jz      .invalid
Line 1145... Line -...
1145
        call    SOCKET_num_to_ptr
-
 
1146
        jz      .invalid
-
 
1147
 
-
 
1148
        cmp     dword [edx], SOL_SOCKET
1161
 
1149
        jne     .invalid
-
 
1150
 
1162
        cmp     [edx + socket_options.level], IP_PROTO_IP
1151
        cmp     dword [edx+4], SO_BINDTODEVICE
1163
        je      .ip
Line 1152... Line 1164...
1152
        je      .bind
1164
        cmp     [edx + socket_options.level], SOL_SOCKET
1153
 
1165
        jne     .invalid
1154
  .invalid:
1166
 
Line 1155... Line 1167...
1155
        mov     dword[esp+32], -1
1167
  .socket:
1156
        mov     dword[esp+20], EINVAL
1168
        cmp     [edx + socket_options.optname], SO_BINDTODEVICE
1157
        ret
1169
        jne     .invalid
Line 1158... Line 1170...
1158
 
1170
 
1159
  .bind:
1171
  .bind:
Line 1178... Line 1190...
1178
        mov     [eax + SOCKET.device], 0
1190
        mov     [eax + SOCKET.device], 0
Line 1179... Line 1191...
1179
 
1191
 
1180
        mov     dword[esp+32], 0        ; success!
1192
        mov     dword[esp+32], 0        ; success!
Line -... Line 1193...
-
 
1193
        ret
-
 
1194
 
-
 
1195
  .ip:
-
 
1196
        cmp     [edx + socket_options.optname], IP_TTL
-
 
1197
        jne     .invalid
-
 
1198
 
-
 
1199
  .ttl:
-
 
1200
        mov     bl, byte[edx + socket_options.optval]
-
 
1201
        mov     [eax + IP_SOCKET.ttl], bl
-
 
1202
 
-
 
1203
        mov     dword[esp+32], 0        ; success!
1181
        ret
1204
        ret
1182
 
1205
 
1183
  .already:
1206
  .already:
1184
        mov     dword[esp+20], EALREADY
1207
        mov     dword[esp+20], EALREADY
Line -... Line 1208...
-
 
1208
        mov     dword[esp+32], -1
-
 
1209
        ret
-
 
1210
 
-
 
1211
  .invalid:
-
 
1212
        mov     dword[esp+20], EINVAL
Line 1185... Line 1213...
1185
        mov     dword[esp+32], -1
1213
        mov     dword[esp+32], -1
1186
        ret
1214
        ret
Line 1472... Line 1500...
1472
        pusha
1500
        pusha
1473
        lea     ecx, [eax + SOCKET.mutex]
1501
        lea     ecx, [eax + SOCKET.mutex]
1474
        call    mutex_unlock
1502
        call    mutex_unlock
1475
        popa
1503
        popa
Line -... Line 1504...
-
 
1504
 
1476
 
1505
        add     esp, 8
1477
        call    NET_BUFF_free
1506
        call    NET_BUFF_free
Line 1478... Line 1507...
1478
        ret
1507
        ret