| 517 | } |
| 518 | |
| 519 | static U32 syscall_socketcall(CPU* cpu, U32 eipCount) { |
| 520 | U32 result = 0; |
| 521 | KMemory* memory = cpu->memory; |
| 522 | |
| 523 | switch (ARG1) { |
| 524 | case 1: // SYS_SOCKET |
| 525 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_SOCKET: domain=%d(%s) type=%d(%s) protocol=%d(%s)", SARG2, SARG2==K_AF_UNIX?"AF_UNIX":(SARG2==K_AF_INET)?"AF_INET":"", (SARG3 & 0xFF), (SARG3 & 0xFF)==K_SOCK_STREAM?"SOCK_STREAM":((SARG3 & 0xFF)==K_SOCK_DGRAM)?"AF_SOCK_DGRAM":"", SARG4, (SARG4 == 0)?"IPPROTO_IP":(SARG4==6)?"IPPROTO_TCP":(SARG4==17)?"IPPROTO_UDP":""); |
| 526 | result = ksocket(SARG2, SARG3 & 0xFF, SARG4); |
| 527 | break; |
| 528 | case 2: // SYS_BIND |
| 529 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_BIND: socket=%d address=%X(%s) len=%d", SARG2, SARG3, socketAddressName(memory, SARG3, SARG4).c_str(), SARG4); |
| 530 | result = kbind(cpu->thread, SARG2, SARG3, SARG4); |
| 531 | break; |
| 532 | case 3: // SYS_CONNECT |
| 533 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_CONNECT: socket=%d address=%X(%s) len=%d", SARG2, SARG3, socketAddressName(memory, SARG3, SARG4).c_str(), SARG4); |
| 534 | result = kconnect(cpu->thread, SARG2, SARG3, SARG4); |
| 535 | break; |
| 536 | case 4: // SYS_LISTEN |
| 537 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_LISTEN: socket=%d backlog=%d", SARG2, SARG3); |
| 538 | result = klisten(cpu->thread, SARG2, SARG3); |
| 539 | break; |
| 540 | case 5: // SYS_ACCEPT |
| 541 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_ACCEPT: socket=%d address=%X(%s) len=%d", SARG2, SARG3, socketAddressName(memory, SARG3, SARG4).c_str(), SARG4); |
| 542 | result = kaccept(cpu->thread, SARG2, SARG3, SARG4, 0); |
| 543 | break; |
| 544 | case 6: // SYS_GETSOCKNAME |
| 545 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_GETSOCKNAME: socket=%d address=%X len=%d", SARG2, SARG3, SARG4); |
| 546 | result = kgetsockname(cpu->thread, SARG2, SARG3, SARG4); |
| 547 | break; |
| 548 | case 7: // SYS_GETPEERNAME |
| 549 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_GETPEERNAME: socket=%d address=%X len=%d", SARG2, SARG3, SARG4); |
| 550 | result = kgetpeername(cpu->thread, SARG2, SARG3, SARG4); |
| 551 | break; |
| 552 | case 8: // SYS_SOCKETPAIR |
| 553 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_SOCKETPAIR: af=%d(%s) type=%d(%s) socks=%X", SARG2, SARG2==K_AF_UNIX?"AF_UNIX":(SARG2==K_AF_INET)?"AF_INET":"", SARG3, SARG3==K_SOCK_STREAM?"SOCK_STREAM":(SARG3==K_SOCK_DGRAM)?"AF_SOCK_DGRAM":"", SARG5); |
| 554 | result = ksocketpair(cpu->thread, SARG2, SARG3, SARG4, SARG5, 0); |
| 555 | break; |
| 556 | case 9: // SYS_SEND |
| 557 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_SEND: socket=%d buffer=%X len=%d flags=%X", SARG2, SARG3, SARG4, SARG5); |
| 558 | result = ksend(cpu->thread, SARG2, SARG3, SARG4, SARG5); |
| 559 | break; |
| 560 | case 10: // SYS_RECV |
| 561 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_RECV: socket=%d buffer=%X len=%d flags=%X", SARG2, SARG3, SARG4, SARG5); |
| 562 | result = krecv(cpu->thread, SARG2, SARG3, SARG4, SARG5); |
| 563 | break; |
| 564 | case 11: // SYS_SENDTO |
| 565 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_SENDTO: socket=%d buffer=%X len=%d flags=%X dest=%s", SARG2, SARG3, SARG4, SARG5, socketAddressName(memory, SARG6, SARG7).c_str()); |
| 566 | result = ksendto(cpu->thread, SARG2, SARG3, SARG4, SARG5, SARG6, SARG7); |
| 567 | break; |
| 568 | case 12: // SYS_RECVFROM |
| 569 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_RECVFROM: socket=%d buffer=%X len=%d flags=%X address=%s", SARG2, SARG3, SARG4, SARG5, socketAddressName(memory, SARG6, SARG7).c_str()); |
| 570 | result = krecvfrom(cpu->thread, SARG2, SARG3, SARG4, SARG5, SARG6, SARG7); |
| 571 | break; |
| 572 | case 13: // SYS_SHUTDOWN |
| 573 | SYS_LOG1(SYSCALL_SOCKET, cpu, "SYS_SHUTDOWN: socket=%d how=%d", SARG2, SARG3); |
| 574 | result = kshutdown(cpu->thread, SARG2, SARG3); |
| 575 | break; |
| 576 | case 14: // SYS_SETSOCKOPT |
nothing calls this directly
no test coverage detected