diff options
author | Michal Labedzki <michal.labedzki@tieto.com> | 2016-11-10 09:10:44 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2016-11-10 12:41:06 +0000 |
commit | 720927a10ea9fe5a82155080114d85b8638f3b8c (patch) | |
tree | af6325a40af9a99cadce47bd201f8f34e09646b9 /extcap/androiddump.c | |
parent | 51bdba4c1f1a94b5b14f4a4894d67b99de6b02f6 (diff) |
androiddump: Set socket connect() timeout to 500ms
This should avoid neverending or long time to obtain timeout
in some cases like firewall's drop rules, etc.
Bump version to 1.0.4
Bug: 13104
Ping-Bug: 13114
Change-Id: I9bef714b6d92b3516a2a95ebdbe1ba594fa60e34
Reviewed-on: https://code.wireshark.org/review/18728
Petri-Dish: Michal Labedzki <michal.labedzki@tieto.com>
Reviewed-by: Dario Lombardo <lomato@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'extcap/androiddump.c')
-rw-r--r-- | extcap/androiddump.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/extcap/androiddump.c b/extcap/androiddump.c index 9589d4e9e1..70e9a86a02 100644 --- a/extcap/androiddump.c +++ b/extcap/androiddump.c @@ -98,13 +98,15 @@ #define ANDROIDDUMP_VERSION_MAJOR "1" #define ANDROIDDUMP_VERSION_MINOR "0" -#define ANDROIDDUMP_VERSION_RELEASE "3" +#define ANDROIDDUMP_VERSION_RELEASE "4" #define SERIAL_NUMBER_LENGTH_MAX 512 #define MODEL_NAME_LENGTH_MAX 64 #define PACKET_LENGTH 65535 +#define SOCKET_SEND_TIMEOUT_MS 500 + enum exit_code { EXIT_CODE_SUCCESS = 0, EXIT_CODE_CANNOT_GET_INTERFACES_LIST = 1, @@ -247,6 +249,21 @@ static inline int is_specified_interface(char *interface, const char *interface_ return !strncmp(interface, interface_prefix, strlen(interface_prefix)); } +static void useSndTimeout(socket_handle_t sock) { +#ifdef _WIN32 + const DWORD socket_timeout = SOCKET_SEND_TIMEOUT_MS; + + setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (const char *) &socket_timeout, sizeof(socket_timeout)); +#else + const struct timeval socket_timeout = { + .tv_sec = SOCKET_SEND_TIMEOUT_MS / 1000, + .tv_usec = (SOCKET_SEND_TIMEOUT_MS % 1000) * 1000 + }; + + setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &socket_timeout, sizeof(socket_timeout)); +#endif +} + static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { struct extcap_dumper extcap_dumper; int encap_ext; @@ -386,6 +403,8 @@ static socket_handle_t adb_connect(const char *server_ip, unsigned short *server return INVALID_SOCKET; } + useSndTimeout(sock); + if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { #if 0 /* NOTE: This does not work well - make significant delay while initializing Wireshark. @@ -1537,6 +1556,8 @@ static int capture_android_bluetooth_external_parser(char *interface, server.sin_port = GINT16_TO_BE(*bt_local_tcp_port); server.sin_addr.s_addr = inet_addr(bt_local_ip); + useSndTimeout(sock); + if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { g_warning("<%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); @@ -1633,6 +1654,8 @@ static int capture_android_bluetooth_external_parser(char *interface, server.sin_port = GINT16_TO_BE(*bt_local_tcp_port); server.sin_addr.s_addr = inet_addr(bt_local_ip); + useSndTimeout(sock); + if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { g_warning("ERROR reconnect: <%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); |