diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libusbmuxd.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c index 0aaae24..30fa207 100644 --- a/src/libusbmuxd.c +++ b/src/libusbmuxd.c @@ -143,6 +143,50 @@ static usbmuxd_device_info_t *devices_find(uint32_t handle) */ static int connect_usbmuxd_socket() { + char *usbmuxd_socket_addr = getenv("USBMUXD_SOCKET_ADDRESS"); + if (usbmuxd_socket_addr) { + if (strncmp(usbmuxd_socket_addr, "UNIX:", 5) == 0) { +#if defined(WIN32) || defined(__CYGWIN__) + /* not supported, ignore */ +#else + if (usbmuxd_socket_addr[5] != '\0') { + return socket_connect_unix(usbmuxd_socket_addr+5); + } +#endif + } else { + uint16_t port = 0; + char *p = strrchr(usbmuxd_socket_addr, ':'); + if (p) { + char *endp = NULL; + long l_port = strtol(p+1, &endp, 10); + if (endp && *endp == '\0') { + if (l_port > 0 && l_port < 65536) { + port = (uint16_t)l_port; + } + } + } + if (p && port > 0) { + char *connect_addr = NULL; + if (usbmuxd_socket_addr[0] == '[') { + connect_addr = strdup(usbmuxd_socket_addr+1); + connect_addr[p - usbmuxd_socket_addr - 1] = '\0'; + p = strrchr(connect_addr, ']'); + if (p) { + *p = '\0'; + } + } else { + connect_addr = strdup(usbmuxd_socket_addr); + connect_addr[p - usbmuxd_socket_addr] = '\0'; + } + if (connect_addr && *connect_addr != '\0') { + int res = socket_connect(connect_addr, port); + free(connect_addr); + return res; + } + free(connect_addr); + } + } + } #if defined(WIN32) || defined(__CYGWIN__) return socket_connect("127.0.0.1", USBMUXD_SOCKET_PORT); #else |