Convert emulated socket option value to a host socket option.
(vsock_level: int, vsock_opt: int, arch_type: QL_ARCH, os_type: QL_OS)
| 132 | |
| 133 | |
| 134 | def __host_socket_option(vsock_level: int, vsock_opt: int, arch_type: QL_ARCH, os_type: QL_OS) -> int: |
| 135 | """Convert emulated socket option value to a host socket option. |
| 136 | """ |
| 137 | |
| 138 | try: |
| 139 | if vsock_level == 0x0000: # IPPROTO_IP |
| 140 | vsock_opt_name = socket_ip_option_mapping(vsock_opt, arch_type, os_type) |
| 141 | |
| 142 | elif vsock_level == 0x0006: # IPPROTO_TCP |
| 143 | vsock_opt_name = socket_tcp_option_mapping(vsock_opt, arch_type) |
| 144 | |
| 145 | else: |
| 146 | vsock_opt_name = socket_option_mapping(vsock_opt, arch_type) |
| 147 | |
| 148 | # Fix for mips |
| 149 | if arch_type == QL_ARCH.MIPS: |
| 150 | if vsock_opt_name.endswith(('_NEW', '_OLD')): |
| 151 | vsock_opt_name = vsock_opt_name[:-4] |
| 152 | |
| 153 | except ValueError: |
| 154 | raise NotImplementedError(f'Could not convert emulated socket option {vsock_opt} to a socket option name') |
| 155 | |
| 156 | try: |
| 157 | hsock_opt = getattr(socket, vsock_opt_name) |
| 158 | except AttributeError: |
| 159 | raise NotImplementedError(f'Could not convert emulated socket option name {vsock_opt_name} to a host socket option') |
| 160 | |
| 161 | return hsock_opt |
| 162 | |
| 163 | |
| 164 | def get_opened_socket(os: QlOsPosix, fd: int) -> Union[ql_socket, int]: |
no test coverage detected