Rev 3659 | Rev 3674 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3659 | Rev 3673 | ||
---|---|---|---|
Line 254... | Line 254... | ||
254 | ; |
254 | ; |
255 | ;----------------------------------------------------------------- |
255 | ;----------------------------------------------------------------- |
256 | align 4 |
256 | align 4 |
257 | sys_socket: |
257 | sys_socket: |
Line 258... | Line 258... | ||
258 | 258 | ||
Line 259... | Line 259... | ||
259 | mov dword[esp+24], 0 ; Set error code to 0 |
259 | mov dword[esp+20], 0 ; Set error code to 0 |
260 | 260 | ||
Line 261... | Line 261... | ||
261 | cmp ebx, 255 |
261 | cmp ebx, 255 |
Line 279... | Line 279... | ||
279 | dd SOCKET_pair ; 10 |
279 | dd SOCKET_pair ; 10 |
280 | .number = ($ - .table) / 4 - 1 |
280 | .number = ($ - .table) / 4 - 1 |
Line 281... | Line 281... | ||
281 | 281 | ||
282 | .error: |
282 | .error: |
283 | mov dword[esp+32], -1 |
283 | mov dword[esp+32], -1 |
Line 284... | Line 284... | ||
284 | mov dword[esp+24], EINVAL |
284 | mov dword[esp+20], EINVAL |
Line 285... | Line 285... | ||
285 | 285 | ||
286 | ret |
286 | ret |
Line 340... | Line 340... | ||
340 | .no_ppp: |
340 | .no_ppp: |
341 | .unsupported: |
341 | .unsupported: |
342 | push eax |
342 | push eax |
343 | call SOCKET_free |
343 | call SOCKET_free |
344 | pop eax |
344 | pop eax |
345 | mov dword[esp+24], EOPNOTSUPP |
345 | mov dword[esp+20], EOPNOTSUPP |
346 | mov dword[esp+32], -1 |
346 | mov dword[esp+32], -1 |
347 | ret |
347 | ret |
Line 348... | Line 348... | ||
348 | 348 | ||
349 | .nobuffs: |
349 | .nobuffs: |
350 | mov dword[esp+24], ENOBUFS |
350 | mov dword[esp+20], ENOBUFS |
351 | mov dword[esp+32], -1 |
351 | mov dword[esp+32], -1 |
Line 352... | Line 352... | ||
352 | ret |
352 | ret |
353 | 353 | ||
Line 427... | Line 427... | ||
427 | 427 | ||
428 | cmp word [edx], AF_LOCAL |
428 | cmp word [edx], AF_LOCAL |
Line 429... | Line 429... | ||
429 | je .af_local |
429 | je .af_local |
430 | 430 | ||
431 | .notsupp: |
431 | .notsupp: |
432 | mov dword[esp+24], EOPNOTSUPP |
432 | mov dword[esp+20], EOPNOTSUPP |
Line 433... | Line 433... | ||
433 | mov dword[esp+32], -1 |
433 | mov dword[esp+32], -1 |
434 | ret |
434 | ret |
435 | 435 | ||
436 | .invalid: |
436 | .invalid: |
Line 437... | Line 437... | ||
437 | mov dword[esp+24], EINVAL |
437 | mov dword[esp+20], EINVAL |
438 | mov dword[esp+32], -1 |
438 | mov dword[esp+32], -1 |
Line 475... | Line 475... | ||
475 | mov dword[esp+32], 0 |
475 | mov dword[esp+32], 0 |
476 | ret |
476 | ret |
Line 477... | Line 477... | ||
477 | 477 | ||
478 | .addrinuse: |
478 | .addrinuse: |
479 | mov dword[esp+32], -1 |
479 | mov dword[esp+32], -1 |
480 | mov dword[esp+24], EADDRINUSE |
480 | mov dword[esp+20], EADDRINUSE |
Line 506... | Line 506... | ||
506 | 506 | ||
507 | cmp word [edx], AF_INET4 |
507 | cmp word [edx], AF_INET4 |
Line 508... | Line 508... | ||
508 | je .af_inet4 |
508 | je .af_inet4 |
509 | 509 | ||
510 | .notsupp: |
510 | .notsupp: |
511 | mov dword[esp+24], EOPNOTSUPP |
511 | mov dword[esp+20], EOPNOTSUPP |
Line 512... | Line 512... | ||
512 | mov dword[esp+32], -1 |
512 | mov dword[esp+32], -1 |
513 | ret |
513 | ret |
514 | 514 | ||
515 | .invalid: |
515 | .invalid: |
Line 516... | Line 516... | ||
516 | mov dword[esp+24], EINVAL |
516 | mov dword[esp+20], EINVAL |
517 | mov dword[esp+32], -1 |
517 | mov dword[esp+32], -1 |
Line 689... | Line 689... | ||
689 | 689 | ||
690 | mov dword[esp+32], 0 |
690 | mov dword[esp+32], 0 |
Line 691... | Line 691... | ||
691 | ret |
691 | ret |
692 | 692 | ||
693 | .notsupp: |
693 | .notsupp: |
694 | mov dword[esp+24], EOPNOTSUPP |
694 | mov dword[esp+20], EOPNOTSUPP |
Line 695... | Line 695... | ||
695 | mov dword[esp+32], -1 |
695 | mov dword[esp+32], -1 |
696 | ret |
696 | ret |
697 | 697 | ||
698 | .invalid: |
698 | .invalid: |
Line 699... | Line 699... | ||
699 | mov dword[esp+24], EINVAL |
699 | mov dword[esp+20], EINVAL |
700 | mov dword[esp+32], -1 |
700 | mov dword[esp+32], -1 |
701 | ret |
701 | ret |
702 | 702 | ||
Line 703... | Line 703... | ||
703 | .already: |
703 | .already: |
Line 758... | Line 758... | ||
758 | 758 | ||
759 | call SOCKET_block |
759 | call SOCKET_block |
Line 760... | Line 760... | ||
760 | jmp .loop |
760 | jmp .loop |
761 | 761 | ||
762 | .wouldblock: |
762 | .wouldblock: |
763 | mov dword[esp+24], EWOULDBLOCK |
763 | mov dword[esp+20], EWOULDBLOCK |
Line 764... | Line 764... | ||
764 | mov dword[esp+32], -1 |
764 | mov dword[esp+32], -1 |
765 | ret |
765 | ret |
766 | 766 | ||
767 | .invalid: |
767 | .invalid: |
Line 768... | Line 768... | ||
768 | mov dword[esp+24], EINVAL |
768 | mov dword[esp+20], EINVAL |
769 | mov dword[esp+32], -1 |
769 | mov dword[esp+32], -1 |
770 | ret |
770 | ret |
771 | 771 | ||
Line 772... | Line 772... | ||
772 | .notsupp: |
772 | .notsupp: |
773 | mov dword[esp+24], EOPNOTSUPP |
773 | mov dword[esp+20], EOPNOTSUPP |
Line 819... | Line 819... | ||
819 | 819 | ||
Line 820... | Line 820... | ||
820 | ret |
820 | ret |
821 | 821 | ||
822 | 822 | ||
823 | .invalid: |
823 | .invalid: |
Line 824... | Line 824... | ||
824 | mov dword[esp+24], EINVAL |
824 | mov dword[esp+20], EINVAL |
Line 845... | Line 845... | ||
845 | call SOCKET_num_to_ptr |
845 | call SOCKET_num_to_ptr |
846 | jz .invalid |
846 | jz .invalid |
Line 847... | Line 847... | ||
847 | 847 | ||
Line 848... | Line 848... | ||
848 | call [eax + SOCKET.rcv_proc] |
848 | call [eax + SOCKET.rcv_proc] |
849 | 849 | ||
850 | mov [esp+24], ebx |
850 | mov [esp+20], ebx |
Line 851... | Line 851... | ||
851 | mov [esp+32], eax |
851 | mov [esp+32], eax |
852 | ret |
852 | ret |
853 | 853 | ||
854 | 854 | ||
Line 855... | Line 855... | ||
855 | .invalid: |
855 | .invalid: |
856 | mov dword[esp+24], EINVAL |
856 | mov dword[esp+20], EINVAL |
Line 1010... | Line 1010... | ||
1010 | mov esi, edx |
1010 | mov esi, edx |
Line 1011... | Line 1011... | ||
1011 | 1011 | ||
Line 1012... | Line 1012... | ||
1012 | jmp [eax + SOCKET.snd_proc] |
1012 | jmp [eax + SOCKET.snd_proc] |
1013 | 1013 | ||
1014 | .invalid: |
1014 | .invalid: |
1015 | mov dword[esp+24], EINVAL |
1015 | mov dword[esp+20], EINVAL |
Line 1016... | Line 1016... | ||
1016 | mov dword[esp+32], -1 |
1016 | mov dword[esp+32], -1 |
Line 1028... | Line 1028... | ||
1028 | je .error |
1028 | je .error |
1029 | ret |
1029 | ret |
Line 1030... | Line 1030... | ||
1030 | 1030 | ||
1031 | .error: |
1031 | .error: |
1032 | mov dword[esp+32], -1 |
1032 | mov dword[esp+32], -1 |
1033 | mov dword[esp+24], EMSGSIZE ; FIXME: UDP_output should return error codes! |
1033 | mov dword[esp+20], EMSGSIZE ; FIXME: UDP_output should return error codes! |
Line 1034... | Line 1034... | ||
1034 | ret |
1034 | ret |
1035 | 1035 | ||
Line 1048... | Line 1048... | ||
1048 | mov [eax + SOCKET.errorcode], 0 |
1048 | mov [eax + SOCKET.errorcode], 0 |
1049 | push eax |
1049 | push eax |
1050 | call TCP_output ; FIXME: this doesnt look pretty, does it? |
1050 | call TCP_output ; FIXME: this doesnt look pretty, does it? |
1051 | pop eax |
1051 | pop eax |
1052 | mov eax, [eax + SOCKET.errorcode] |
1052 | mov eax, [eax + SOCKET.errorcode] |
1053 | mov [esp+24], eax |
1053 | mov [esp+20], eax |
1054 | ret |
1054 | ret |
Line 1055... | Line 1055... | ||
1055 | 1055 | ||
1056 | 1056 | ||
Line 1065... | Line 1065... | ||
1065 | je .error |
1065 | je .error |
1066 | ret |
1066 | ret |
Line 1067... | Line 1067... | ||
1067 | 1067 | ||
1068 | .error: |
1068 | .error: |
1069 | mov dword[esp+32], -1 |
1069 | mov dword[esp+32], -1 |
1070 | mov dword[esp+24], EMSGSIZE |
1070 | mov dword[esp+20], EMSGSIZE |
Line 1071... | Line 1071... | ||
1071 | ret |
1071 | ret |
1072 | 1072 | ||
Line 1082... | Line 1082... | ||
1082 | je .error |
1082 | je .error |
1083 | ret |
1083 | ret |
Line 1084... | Line 1084... | ||
1084 | 1084 | ||
1085 | .error: |
1085 | .error: |
1086 | mov dword[esp+32], -1 |
1086 | mov dword[esp+32], -1 |
1087 | mov dword[esp+24], EMSGSIZE |
1087 | mov dword[esp+20], EMSGSIZE |
Line 1088... | Line 1088... | ||
1088 | ret |
1088 | ret |
1089 | 1089 | ||
Line 1101... | Line 1101... | ||
1101 | je .error |
1101 | je .error |
1102 | ret |
1102 | ret |
Line 1103... | Line 1103... | ||
1103 | 1103 | ||
1104 | .error: |
1104 | .error: |
1105 | mov dword[esp+32], -1 |
1105 | mov dword[esp+32], -1 |
1106 | mov dword[esp+24], EMSGSIZE |
1106 | mov dword[esp+20], EMSGSIZE |
Line 1107... | Line 1107... | ||
1107 | ret |
1107 | ret |
Line 1147... | Line 1147... | ||
1147 | 1147 | ||
Line 1148... | Line 1148... | ||
1148 | ret |
1148 | ret |
1149 | 1149 | ||
1150 | .invalid: |
1150 | .invalid: |
1151 | mov dword[esp+32], -1 |
1151 | mov dword[esp+32], -1 |
Line 1152... | Line 1152... | ||
1152 | mov dword[esp+24], EINVAL |
1152 | mov dword[esp+20], EINVAL |
1153 | ret |
1153 | ret |
Line 1205... | Line 1205... | ||
1205 | mov dword [esp+32], 0 |
1205 | mov dword [esp+32], 0 |
1206 | ret |
1206 | ret |
Line 1207... | Line 1207... | ||
1207 | 1207 | ||
1208 | .invalid: |
1208 | .invalid: |
1209 | mov dword[esp+32], -1 |
1209 | mov dword[esp+32], -1 |
1210 | mov dword[esp+24], EINVAL |
1210 | mov dword[esp+20], EINVAL |
Line 1211... | Line 1211... | ||
1211 | ret |
1211 | ret |
Line 1239... | Line 1239... | ||
1239 | cmp dword [edx+4], SO_BLOCK |
1239 | cmp dword [edx+4], SO_BLOCK |
1240 | je .block |
1240 | je .block |
Line 1241... | Line 1241... | ||
1241 | 1241 | ||
1242 | .invalid: |
1242 | .invalid: |
1243 | mov dword[esp+32], -1 |
1243 | mov dword[esp+32], -1 |
1244 | mov dword[esp+24], EINVAL |
1244 | mov dword[esp+20], EINVAL |
Line 1245... | Line 1245... | ||
1245 | ret |
1245 | ret |
1246 | 1246 | ||
1247 | .bind: |
1247 | .bind: |
Line 1282... | Line 1282... | ||
1282 | 1282 | ||
1283 | mov dword[esp+32], 0 ; success! |
1283 | mov dword[esp+32], 0 ; success! |
Line 1284... | Line 1284... | ||
1284 | ret |
1284 | ret |
1285 | 1285 | ||
1286 | .already: |
1286 | .already: |
1287 | mov dword[esp+24], EALREADY |
1287 | mov dword[esp+20], EALREADY |
Line 1319... | Line 1319... | ||
1319 | mov [eax + SOCKET.PID], 0 |
1319 | mov [eax + SOCKET.PID], 0 |
1320 | mov ebx, eax |
1320 | mov ebx, eax |
Line 1321... | Line 1321... | ||
1321 | 1321 | ||
1322 | call SOCKET_alloc |
1322 | call SOCKET_alloc |
1323 | jz .nomem2 |
1323 | jz .nomem2 |
Line 1324... | Line 1324... | ||
1324 | mov [esp+24], edi ; application's ebx |
1324 | mov [esp+20], edi ; application's ebx |
1325 | 1325 | ||
1326 | mov [eax + SOCKET.Domain], AF_LOCAL |
1326 | mov [eax + SOCKET.Domain], AF_LOCAL |
1327 | mov [eax + SOCKET.Type], SOCK_STREAM |
1327 | mov [eax + SOCKET.Type], SOCK_STREAM |
Line 2043... | Line 2043... | ||
2043 | pop ebx |
2043 | pop ebx |
Line 2044... | Line 2044... | ||
2044 | 2044 | ||
Line 2045... | Line 2045... | ||
2045 | ret |
2045 | ret |
2046 | 2046 | ||
2047 | .not_yet: |
2047 | .not_yet: |
2048 | mov dword[esp+24], ENOTCONN |
2048 | mov dword[esp+20], ENOTCONN |
Line 2049... | Line 2049... | ||
2049 | mov dword[esp+32], -1 |
2049 | mov dword[esp+32], -1 |
Line 2538... | Line 2538... | ||
2538 | call SOCKET_notify |
2538 | call SOCKET_notify |
Line 2539... | Line 2539... | ||
2539 | 2539 | ||
Line 2540... | Line 2540... | ||
2540 | ret |
2540 | ret |
2541 | 2541 | ||
2542 | .notconn: |
2542 | .notconn: |
2543 | mov dword[esp+24], ENOTCONN |
2543 | mov dword[esp+20], ENOTCONN |
2544 | mov dword[esp+32], -1 |
2544 | mov dword[esp+32], -1 |