Subversion Repositories Kolibri OS

Rev

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

Rev 3646 Rev 3647
Line 197... Line 197...
197
uglobal
197
uglobal
198
        net_sockets     rd 4
198
        net_sockets     rd 4
199
        last_socket_num dd ?
199
        last_socket_num dd ?
200
        last_UDP_port   dw ? ; These values give the number of the last used ephemeral port
200
        last_UDP_port   dw ? ; These values give the number of the last used ephemeral port
201
        last_TCP_port   dw ? ;
201
        last_TCP_port   dw ? ;
-
 
202
        socket_mutex    MUTEX
202
endg
203
endg
Line 203... Line 204...
203
 
204
 
204
 
205
 
Line 230... Line 231...
230
        cmp     ax, EPHEMERAL_PORT_MAX
231
        cmp     ax, EPHEMERAL_PORT_MAX
231
        ja      @r
232
        ja      @r
232
        xchg    al, ah
233
        xchg    al, ah
233
        mov     [last_TCP_port], ax
234
        mov     [last_TCP_port], ax
Line -... Line 235...
-
 
235
 
-
 
236
        mov     ecx, socket_mutex
-
 
237
        call    mutex_init
234
 
238
 
Line 235... Line 239...
235
}
239
}
236
 
240
 
237
;-----------------------------------------------------------------
241
;-----------------------------------------------------------------
Line 1341... Line 1345...
1341
align 4
1345
align 4
1342
SOCKET_check_port:
1346
SOCKET_check_port:
Line 1343... Line 1347...
1343
 
1347
 
Line -... Line 1348...
-
 
1348
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_check_port: "
-
 
1349
 
-
 
1350
        pusha
-
 
1351
        mov     ecx, socket_mutex
-
 
1352
        call    mutex_lock
1344
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_check_port: "
1353
        popa
1345
 
1354
 
1346
        mov     ecx, [eax + SOCKET.Protocol]
1355
        mov     ecx, [eax + SOCKET.Protocol]
Line 1347... Line 1356...
1347
        mov     edx, [eax + IP_SOCKET.LocalIP]
1356
        mov     edx, [eax + IP_SOCKET.LocalIP]
Line 1359... Line 1368...
1359
        jne     .next_socket
1368
        jne     .next_socket
Line 1360... Line 1369...
1360
 
1369
 
1361
        cmp     [esi + UDP_SOCKET.LocalPort], bx
1370
        cmp     [esi + UDP_SOCKET.LocalPort], bx
Line -... Line 1371...
-
 
1371
        jne     .next_socket
-
 
1372
 
-
 
1373
        pusha
-
 
1374
        mov     ecx, socket_mutex
-
 
1375
        call    mutex_unlock
1362
        jne     .next_socket
1376
        popa
1363
 
1377
 
Line 1364... Line 1378...
1364
        DEBUGF  DEBUG_NETWORK_VERBOSE, "local port %x already in use\n", bx  ; FIXME: find a way to print big endian values with debugf
1378
        DEBUGF  DEBUG_NETWORK_VERBOSE, "local port %x already in use\n", bx  ; FIXME: find a way to print big endian values with debugf
-
 
1379
        ret
-
 
1380
 
-
 
1381
  .port_ok:
-
 
1382
        pusha
-
 
1383
        mov     ecx, socket_mutex
1365
        ret
1384
        call    mutex_unlock
1366
 
1385
        popa
1367
  .port_ok:
1386
 
1368
        DEBUGF  DEBUG_NETWORK_VERBOSE, "local port %x is free\n", bx         ; FIXME: find a way to print big endian values with debugf
1387
        DEBUGF  DEBUG_NETWORK_VERBOSE, "local port %x is free\n", bx         ; FIXME: find a way to print big endian values with debugf
Line 1813... Line 1832...
1813
 
1832
 
1814
; set send-and receive procedures to return -1
1833
; set send-and receive procedures to return -1
1815
        mov     [eax + SOCKET.snd_proc], s_error
1834
        mov     [eax + SOCKET.snd_proc], s_error
Line -... Line 1835...
-
 
1835
        mov     [eax + SOCKET.rcv_proc], s_error
-
 
1836
 
-
 
1837
        pusha
-
 
1838
        mov     ecx, socket_mutex
-
 
1839
        call    mutex_lock
1816
        mov     [eax + SOCKET.rcv_proc], s_error
1840
        popa
1817
 
1841
 
1818
; find first free socket number and use it
1842
; find first free socket number and use it
1819
        mov     edi, [last_socket_num]
1843
        mov     edi, [last_socket_num]
1820
  .next_socket_number:
1844
  .next_socket_number:
Line 1871... Line 1895...
1871
        popa
1895
        popa
1872
       @@:
1896
       @@:
Line 1873... Line 1897...
1873
 
1897
 
1874
        mov     [net_sockets + SOCKET.NextPtr], eax
1898
        mov     [net_sockets + SOCKET.NextPtr], eax
-
 
1899
        or      eax, eax                ; used to clear zero flag
-
 
1900
 
-
 
1901
        pusha
-
 
1902
        mov     ecx, socket_mutex
-
 
1903
        call    mutex_unlock
-
 
1904
        popa
1875
        or      eax, eax                ; used to clear zero flag
1905
 
1876
  .exit:
1906
  .exit:
Line 1877... Line 1907...
1877
        pop     ebx
1907
        pop     ebx
Line 1898... Line 1928...
1898
        jz      .error
1928
        jz      .error
Line 1899... Line 1929...
1899
 
1929
 
Line 1900... Line 1930...
1900
        push    ebx
1930
        push    ebx
-
 
1931
 
-
 
1932
        pusha
-
 
1933
        mov     ecx, socket_mutex
-
 
1934
        call    mutex_lock
-
 
1935
        popa
1901
 
1936
 
1902
        pusha
1937
        pusha
1903
        lea     ecx, [eax + SOCKET.mutex]
1938
        lea     ecx, [eax + SOCKET.mutex]
Line 1904... Line 1939...
1904
        call    mutex_lock
1939
        call    mutex_lock
Line 1933... Line 1968...
1933
       @@:
1968
       @@:
Line 1934... Line 1969...
1934
 
1969
 
1935
        call    kernel_free
1970
        call    kernel_free
Line -... Line 1971...
-
 
1971
        pop     ebx
-
 
1972
 
-
 
1973
        pusha
-
 
1974
        mov     ecx, socket_mutex
-
 
1975
        call    mutex_unlock
1936
        pop     ebx
1976
        popa
Line 1937... Line 1977...
1937
 
1977
 
1938
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_free: success!\n"
1978
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_free: success!\n"
Line 2004... Line 2044...
2004
align 4
2044
align 4
2005
SOCKET_num_to_ptr:
2045
SOCKET_num_to_ptr:
Line 2006... Line 2046...
2006
 
2046
 
Line -... Line 2047...
-
 
2047
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_num_to_ptr: num=%u ", ecx
-
 
2048
 
-
 
2049
        pusha
-
 
2050
        mov     ecx, socket_mutex
-
 
2051
        call    mutex_lock
2007
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_num_to_ptr: num=%u ", ecx
2052
        popa
Line 2008... Line 2053...
2008
 
2053
 
2009
        mov     eax, net_sockets
2054
        mov     eax, net_sockets
2010
 
2055
 
Line 2015... Line 2060...
2015
        cmp     [eax + SOCKET.Number], ecx
2060
        cmp     [eax + SOCKET.Number], ecx
2016
        jne     .next_socket
2061
        jne     .next_socket
Line 2017... Line 2062...
2017
 
2062
 
Line -... Line 2063...
-
 
2063
        test    eax, eax
-
 
2064
 
-
 
2065
        pusha
-
 
2066
        mov     ecx, socket_mutex
-
 
2067
        call    mutex_unlock
2018
        test    eax, eax
2068
        popa
2019
 
2069
 
Line 2020... Line 2070...
2020
        DEBUGF  DEBUG_NETWORK_VERBOSE, "ptr=%x\n", eax
2070
        DEBUGF  DEBUG_NETWORK_VERBOSE, "ptr=%x\n", eax
-
 
2071
        ret
-
 
2072
 
-
 
2073
  .error:
-
 
2074
        pusha
-
 
2075
        mov     ecx, socket_mutex
2021
        ret
2076
        call    mutex_unlock
2022
 
2077
        popa
Line 2023... Line 2078...
2023
  .error:
2078
 
Line 2068... Line 2123...
2068
align 4
2123
align 4
2069
SOCKET_check:
2124
SOCKET_check:
Line 2070... Line 2125...
2070
 
2125
 
Line -... Line 2126...
-
 
2126
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_check: %x\n", eax
-
 
2127
 
-
 
2128
        pusha
-
 
2129
        mov     ecx, socket_mutex
-
 
2130
        call    mutex_lock
2071
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_check: %x\n", eax
2131
        popa
2072
 
2132
 
Line 2073... Line 2133...
2073
        push    ebx
2133
        push    ebx
2074
        mov     ebx, net_sockets
2134
        mov     ebx, net_sockets
Line 2083... Line 2143...
2083
  .done:
2143
  .done:
2084
        mov     eax, ebx
2144
        mov     eax, ebx
2085
        test    eax, eax
2145
        test    eax, eax
2086
        pop     ebx
2146
        pop     ebx
Line -... Line 2147...
-
 
2147
 
-
 
2148
        pusha
-
 
2149
        mov     ecx, socket_mutex
-
 
2150
        call    mutex_unlock
-
 
2151
        popa
2087
 
2152
 
Line 2088... Line 2153...
2088
        ret
2153
        ret
Line 2130... Line 2195...
2130
align 4
2195
align 4
2131
SOCKET_process_end:
2196
SOCKET_process_end:
Line 2132... Line 2197...
2132
 
2197
 
Line -... Line 2198...
-
 
2198
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_process_end: %x\n", edx
-
 
2199
 
-
 
2200
        pusha
-
 
2201
        mov     ecx, socket_mutex
-
 
2202
        call    mutex_lock
2133
        DEBUGF  DEBUG_NETWORK_VERBOSE, "SOCKET_process_end: %x\n", edx
2203
        popa
2134
 
2204
 
Line 2135... Line 2205...
2135
        push    ebx
2205
        push    ebx
2136
        mov     ebx, net_sockets
2206
        mov     ebx, net_sockets
Line 2155... Line 2225...
2155
        jmp     .next_socket_test
2225
        jmp     .next_socket_test
Line 2156... Line 2226...
2156
 
2226
 
2157
  .done:
2227
  .done:
Line -... Line 2228...
-
 
2228
        pop     ebx
-
 
2229
 
-
 
2230
        pusha
-
 
2231
        mov     ecx, socket_mutex
-
 
2232
        call    mutex_unlock
2158
        pop     ebx
2233
        popa