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 |