diff options
Diffstat (limited to 'tools/inetcat.c')
-rw-r--r-- | tools/inetcat.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/tools/inetcat.c b/tools/inetcat.c index d67e972..403c4ff 100644 --- a/tools/inetcat.c +++ b/tools/inetcat.c @@ -200,10 +200,42 @@ int main(int argc, char **argv) return 1; } - int devfd = usbmuxd_connect(dev->handle, device_port); + int devfd = -1; + if (dev->conn_type == CONNECTION_TYPE_NETWORK) { + unsigned char saddr_[32]; + memset(saddr_, '\0', sizeof(saddr_)); + struct sockaddr* saddr = (struct sockaddr*)&saddr_[0]; + if (((char*)dev->conn_data)[1] == 0x02) { // AF_INET + saddr->sa_family = AF_INET; + memcpy(&saddr->sa_data[0], (char*)dev->conn_data+2, 14); + } + else if (((char*)dev->conn_data)[1] == 0x1E) { //AF_INET6 (bsd) +#ifdef AF_INET6 + saddr->sa_family = AF_INET6; + memcpy(&saddr->sa_data[0], (char*)dev->conn_data+2, 26); +#else + fprintf(stderr, "ERROR: Got an IPv6 address but this system doesn't support IPv6\n"); + free(dev_list); + return 1; +#endif + } + else { + fprintf(stderr, "Unsupported address family 0x%02x\n", ((char*)dev->conn_data)[1]); + free(dev_list); + return 1; + } + char addrtxt[48]; + addrtxt[0] = '\0'; + if (!socket_addr_to_string(saddr, addrtxt, sizeof(addrtxt))) { + fprintf(stderr, "Failed to convert network address: %d (%s)\n", errno, strerror(errno)); + } + devfd = socket_connect_addr(saddr, device_port); + } else if (dev->conn_type == CONNECTION_TYPE_USB) { + devfd = usbmuxd_connect(dev->handle, device_port); + } free(dev_list); if (devfd < 0) { - fprintf(stderr, "Error connecting to device!\n"); + fprintf(stderr, "Error connecting to device: %s\n", strerror(errno)); return 1; } |