()
| 118 | |
| 119 | |
| 120 | def main(): |
| 121 | if len(sys.argv) != 2: |
| 122 | log.error(f"usage: {sys.argv[0]} <socket_fd>") |
| 123 | sys.exit(1) |
| 124 | |
| 125 | sock_fd = int(sys.argv[1]) |
| 126 | sock = socket.socket(fileno=sock_fd) |
| 127 | server = ProxyServer(sock) |
| 128 | |
| 129 | while True: |
| 130 | try: |
| 131 | msg_type, fields = server.recv_request() |
| 132 | except ConnectionError: |
| 133 | break |
| 134 | |
| 135 | if msg_type == MsgType.SYSCALL: |
| 136 | nr, a0, a1, a2, a3, a4, a5 = fields |
| 137 | retval, err = raw_syscall(nr, a0, a1, a2, a3, a4, a5) |
| 138 | server.send_syscall_response(retval, err) |
| 139 | |
| 140 | elif msg_type == MsgType.SYSCALL_EX: |
| 141 | nr, args, in_bufs, out_specs = fields |
| 142 | retval, err, out_bufs = raw_syscall_ex(nr, args, in_bufs, out_specs) |
| 143 | server.send_syscall_ex_response(retval, err, out_bufs) |
| 144 | |
| 145 | elif msg_type == MsgType.FD_OP: |
| 146 | op, proxy_fd, arg1, arg2, data = fields |
| 147 | retval, err, resp_data = handle_fd_op(op, proxy_fd, arg1, arg2, data) |
| 148 | server.send_fd_op_response(retval, err, resp_data) |
| 149 | |
| 150 | sock.close() |
| 151 | |
| 152 | |
| 153 | if __name__ == '__main__': |
no test coverage detected