From c154c75fefb812f95fbf96de63eab17a61cfcbb7 Mon Sep 17 00:00:00 2001 From: Dario Lombardo Date: Mon, 22 Feb 2016 16:12:44 +0100 Subject: [PATCH] extcap: move common code into extcap-base files Change-Id: Ia4a73c7df39426c8773fce04cac223bda3c6ef1c Reviewed-on: https://code.wireshark.org/review/14071 Petri-Dish: Roland Knall Tested-by: Petri Dish Buildbot Reviewed-by: Dario Lombardo Reviewed-by: Roland Knall --- extcap/androiddump.c | 395 +++++++++++++++---------------------------- extcap/extcap-base.h | 63 +++++++ extcap/randpktdump.c | 60 +++---- extcap/sshdump.c | 70 +++----- 4 files changed, 253 insertions(+), 335 deletions(-) create mode 100644 extcap/extcap-base.h diff --git a/extcap/androiddump.c b/extcap/androiddump.c index 45f03c8d26..1bedc68165 100644 --- a/extcap/androiddump.c +++ b/extcap/androiddump.c @@ -23,11 +23,10 @@ */ #include "config.h" -#include -#include +#include "extcap-base.h" + #include #include -#include #include #include #include @@ -136,17 +135,14 @@ #define PACKET_LENGTH 65535 +#define verbose_print(...) { if (verbose) printf(__VA_ARGS__); } +#define errmsg_print(...) { fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } + enum { - OPT_HELP = 1, + EXTCAP_BASE_OPTIONS_ENUM, + OPT_HELP, OPT_VERSION, OPT_VERBOSE, - OPT_LIST_INTERFACES, - OPT_LIST_DLTS, - OPT_INTERFACE, - OPT_CONFIG, - OPT_CAPTURE, - OPT_CAPTURE_FILTER, - OPT_FIFO, OPT_CONFIG_ADB_SERVER_IP, OPT_CONFIG_ADB_SERVER_TCP_PORT, OPT_CONFIG_LOGCAT_TEXT, @@ -157,19 +153,10 @@ enum { }; static struct option longopts[] = { -/* Generic application options */ - { "help", no_argument, NULL, OPT_HELP}, - { "version", no_argument, NULL, OPT_VERSION}, - { "verbose", optional_argument, NULL, OPT_VERBOSE}, -/* Extcap options */ - { "extcap-interfaces", no_argument, NULL, OPT_LIST_INTERFACES}, - { "extcap-dlts", no_argument, NULL, OPT_LIST_DLTS}, - { "extcap-interface", required_argument, NULL, OPT_INTERFACE}, - { "extcap-config", no_argument, NULL, OPT_CONFIG}, - { "capture", no_argument, NULL, OPT_CAPTURE}, - { "extcap-capture-filter", required_argument, NULL, OPT_CAPTURE_FILTER}, - { "fifo", required_argument, NULL, OPT_FIFO}, -/* Interfaces options */ + EXTCAP_BASE_OPTIONS, + { "help", no_argument, NULL, OPT_HELP}, + { "version", no_argument, NULL, OPT_VERSION}, + { "verbose", optional_argument, NULL, OPT_VERBOSE}, { "adb-server-ip", required_argument, NULL, OPT_CONFIG_ADB_SERVER_IP}, { "adb-server-tcp-port", required_argument, NULL, OPT_CONFIG_ADB_SERVER_TCP_PORT}, { "logcat-text", required_argument, NULL, OPT_CONFIG_LOGCAT_TEXT}, @@ -260,16 +247,14 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { else if (encap == EXTCAP_ENCAP_ETHERNET) encap_ext = DLT_EN10MB; else { - if (verbose) - fprintf(stderr, "ERROR: Unknown encapsulation\n"); + errmsg_print("ERROR: Unknown encapsulation"); exit(1); } pcap = pcap_open_dead_with_tstamp_precision(encap_ext, PACKET_LENGTH, PCAP_TSTAMP_PRECISION_NANO); extcap_dumper.dumper.pcap = pcap_dump_open(pcap, fifo); if (!extcap_dumper.dumper.pcap) { - if (verbose) - fprintf(stderr, "ERROR: Cannot save dump file\n"); + errmsg_print("ERROR: Cannot save dump file"); exit(1); } extcap_dumper.encap = encap; @@ -284,15 +269,13 @@ static struct extcap_dumper extcap_dumper_open(char *fifo, int encap) { else if (encap == EXTCAP_ENCAP_ETHERNET) encap_ext = WTAP_ENCAP_ETHERNET; else { - if (verbose) - fprintf(stderr, "ERROR: Unknown encapsulation\n"); + errmsg_print("ERROR: Unknown encapsulation"); exit(1); } extcap_dumper.dumper.wtap = wtap_dump_open(fifo, WTAP_FILE_TYPE_SUBTYPE_PCAP_NSEC, encap_ext, PACKET_LENGTH, FALSE, &err); if (!extcap_dumper.dumper.wtap) { - if (verbose) - fprintf(stderr, "ERROR: Cannot save dump file\n"); + errmsg_print("ERROR: Cannot save dump file"); exit(1); } extcap_dumper.encap = encap; @@ -355,7 +338,7 @@ static gboolean extcap_dumper_dump(struct extcap_dumper extcap_dumper, char *buf } if (!wtap_dump(extcap_dumper.dumper.wtap, &hdr, (const guint8 *) buffer, &err, &err_info)) { - fprintf(stderr, "ERROR: Cannot dump: %s\n", err_info); + errmsg_print("ERROR: Cannot dump: %s", err_info); return FALSE; } @@ -378,8 +361,7 @@ static socket_handle_t adb_connect(const char *server_ip, unsigned short *server server.sin_addr.s_addr = inet_addr(server_ip); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { - if (verbose) - fprintf(stderr, "ERROR: Cannot open system TCP socket: %s\n", strerror(errno)); + errmsg_print("ERROR: Cannot open system TCP socket: %s", strerror(errno)); return INVALID_SOCKET; } @@ -397,22 +379,18 @@ static socket_handle_t adb_connect(const char *server_ip, unsigned short *server #else if (execlp("adb", "adb", "start-server", NULL)) { #endif - if (verbose) - fprintf(stderr, "WARNING: Cannot execute system command to start adb: %s\n", strerror(errno)); + errmsg("WARNING: Cannot execute system command to start adb: %s", strerror(errno)); closesocket(sock); return INVALID_SOCKET; }; if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { - if (verbose) - fprintf(stderr, "ERROR: Cannot connect to ADB: <%s> Please check that adb daemon is running.\n", strerror(errno)); + errmsg_print("ERROR: Cannot connect to ADB: <%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); return INVALID_SOCKET; } #else - if (verbose) { - fprintf(stderr, "ERROR: Cannot connect to ADB: <%s> Please check that adb daemon is running.\n", strerror(errno)); - } + errmsg_print("ERROR: Cannot connect to ADB: <%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); return INVALID_SOCKET; #endif @@ -423,18 +401,18 @@ static socket_handle_t adb_connect(const char *server_ip, unsigned short *server length = sizeof(client); if (getsockname(sock, (struct sockaddr *) &client, &length)) { - fprintf(stderr, "ERROR getsockname: %s\n", strerror(errno)); + errmsg_print("ERROR getsockname: %s", strerror(errno)); closesocket(sock); return INVALID_SOCKET; } if (length != sizeof(client)) { - fprintf(stderr, "ERROR: incorrect length\n"); + errmsg_print("ERROR: incorrect length"); closesocket(sock); return INVALID_SOCKET; } - fprintf(stderr, "VERBOSE: Client port %u\n", GUINT16_FROM_BE(client.sin_port)); + errmsg_print("VERBOSE: Client port %u", GUINT16_FROM_BE(client.sin_port)); } return sock; @@ -454,8 +432,7 @@ static char *adb_send_and_receive(socket_handle_t sock, const char *adb_service, result = send(sock, adb_service, (int) adb_service_length, 0); if (result != (gssize) adb_service_length) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending <%s> to ADB\n", adb_service); + errmsg_print("ERROR: Error while sending <%s> to ADB", adb_service); if (data_length) *data_length = 0; return 0; @@ -480,8 +457,7 @@ static char *adb_send_and_receive(socket_handle_t sock, const char *adb_service, *data_length = used_buffer_length - 8; if (memcmp(status, "OKAY", 4)) { - if (verbose) - fprintf(stderr, "ERROR: Error while receiving by ADB for <%s>\n", adb_service); + errmsg_print("ERROR: Error while receiving by ADB for <%s>", adb_service); if (data_length) *data_length = 0; return 0; @@ -502,8 +478,7 @@ static char *adb_send_and_read(socket_handle_t sock, const char *adb_service, ch result = send(sock, adb_service, (int) adb_service_length, 0); if (result != (gssize) adb_service_length) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending <%s> to ADB\n", adb_service); + errmsg_print("ERROR: Error while sending <%s> to ADB", adb_service); if (data_length) *data_length = 0; return 0; @@ -526,8 +501,7 @@ static char *adb_send_and_read(socket_handle_t sock, const char *adb_service, ch *data_length = used_buffer_length - 4; if (memcmp(status, "OKAY", 4)) { - if (verbose) - fprintf(stderr, "ERROR: Error while receiving by ADB for <%s>\n", adb_service); + errmsg_print("ERROR: Error while receiving by ADB for <%s>", adb_service); if (data_length) *data_length = 0; return 0; @@ -547,8 +521,7 @@ static int adb_send(socket_handle_t sock, const char *adb_service) { result = send(sock, adb_service, (int) adb_service_length, 0); if (result != (gssize) adb_service_length) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending <%s> to ADB\n", adb_service); + errmsg_print("ERROR: Error while sending <%s> to ADB", adb_service); return 1; } @@ -558,8 +531,7 @@ static int adb_send(socket_handle_t sock, const char *adb_service) { } if (memcmp(buffer, "OKAY", 4)) { - if (verbose) - fprintf(stderr, "ERROR: Error while receiving by ADB for <%s>\n", adb_service); + errmsg_print("ERROR: Error while receiving by ADB for <%s>", adb_service); return 2; } @@ -620,8 +592,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server result = (int) (pos - prev_pos); pos = strchr(pos, '\n') + 1; if (result >= (int) sizeof(serial_number)) { - if (verbose) - fprintf(stderr, "WARNING: Serial number too long, ignore device\n"); + errmsg_print("WARNING: Serial number too long, ignore device"); continue; } memcpy(serial_number, prev_pos, result); @@ -636,8 +607,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -657,8 +627,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -667,8 +636,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server closesocket(sock); response[data_length] = '\0'; api_level = (int) g_ascii_strtoll(response, NULL, 10); - if (verbose) - fprintf(stderr, "VERBOSE: Android API Level for %s is %i\n", serial_number, api_level); + errmsg_print("VERBOSE: Android API Level for %s is %i", serial_number, api_level); if (api_level < 21) { new_interface(INTERFACE_ANDROID_LOGCAT_MAIN, serial_number, "Android Logcat Main"); @@ -692,8 +660,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -701,22 +668,18 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server response = adb_send_and_read(sock, adb_hcidump_version, helpful_packet, sizeof(helpful_packet), &data_length); closesocket(sock); if (!response || data_length < 1) { - if (verbose) { - fprintf(stderr, "WARNING: Error while getting hcidump version by <%s> (%p len=%"G_GSSIZE_FORMAT")\n", - adb_hcidump_version, (void*)response, data_length); - fprintf(stderr, "VERBOSE: Android hcidump version for %s is unknown\n", serial_number); - } + errmsg_print("WARNING: Error while getting hcidump version by <%s> (%p len=%"G_GSSIZE_FORMAT")", + adb_hcidump_version, (void*)response, data_length); + errmsg_print("VERBOSE: Android hcidump version for %s is unknown", serial_number); disable_interface = 1; } else { response[data_length] = '\0'; if (g_ascii_strtoull(response, NULL, 10) == 0) { - if (verbose) - fprintf(stderr, "VERBOSE: Android hcidump version for %s is unknown\n", serial_number); + errmsg_print("VERBOSE: Android hcidump version for %s is unknown", serial_number); disable_interface = 1; } else { - if (verbose) - fprintf(stderr, "VERBOSE: Android hcidump version for %s is %s\n", serial_number, response); + errmsg_print("VERBOSE: Android hcidump version for %s is %s", serial_number, response); } } @@ -733,8 +696,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -742,11 +704,9 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server response = adb_send_and_read(sock, adb_ps_droid_bluetooth, helpful_packet, sizeof(helpful_packet), &data_length); closesocket(sock); if (!response || data_length < 1) { - if (verbose) { - fprintf(stderr, "WARNING: Error while getting Bluetooth application process id by <%s> " - "(%p len=%"G_GSSIZE_FORMAT")\n", adb_hcidump_version, (void*)response, data_length); - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is unknown\n", serial_number); - } + errmsg_print("WARNING: Error while getting Bluetooth application process id by <%s> " + "(%p len=%"G_GSSIZE_FORMAT")", adb_hcidump_version, (void*)response, data_length); + errmsg_print( "VERBOSE: Android Bluetooth application PID for %s is unknown", serial_number); disable_interface = 1; } else { char *data_str; @@ -757,8 +717,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server data_str = strchr(response, '\n'); if (data_str && sscanf(data_str, "%*s %s", pid) == 1) { - if (verbose) - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is %s\n", serial_number, pid); + errmsg_print("VERBOSE: Android Bluetooth application PID for %s is %s", serial_number, pid); sock = adb_connect(adb_server_ip, adb_server_tcp_port); if (sock == INVALID_SOCKET) @@ -767,8 +726,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -780,17 +738,14 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server data_str = strchr(response, '\n'); if (data_str && sscanf(data_str, "%*s %s", pid) == 1 && strcmp(pid + 9, "10EA") == 0) { - if (verbose) - fprintf(stderr, "VERBOSE: Bluedroid External Parser Port for %s is %s\n", serial_number, pid + 9); + errmsg_print("VERBOSE: Bluedroid External Parser Port for %s is %s", serial_number, pid + 9); } else { disable_interface = 1; - if (verbose) - fprintf(stderr, "VERBOSE: Bluedroid External Parser Port for %s is unknown\n", serial_number); + errmsg_print("VERBOSE: Bluedroid External Parser Port for %s is unknown", serial_number); } } else { disable_interface = 1; - if (verbose) - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is unknown\n", serial_number); + errmsg_print("VERBOSE: Android Bluetooth application PID for %s is unknown", serial_number); } } @@ -807,8 +762,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -819,11 +773,9 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server response = adb_send_and_read(sock, adb_ps_droid_bluetooth, helpful_packet, sizeof(helpful_packet), &data_length); closesocket(sock); if (!response || data_length < 1) { - if (verbose) { - fprintf(stderr, "WARNING: Error while getting Bluetooth application process id by <%s> " - "(%p len=%"G_GSSIZE_FORMAT")\n", adb_hcidump_version, (void*)response, data_length); - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is unknown\n", serial_number); - } + errmsg_print("WARNING: Error while getting Bluetooth application process id by <%s> " + "(%p len=%"G_GSSIZE_FORMAT")", adb_hcidump_version, (void*)response, data_length); + errmsg_print("VERBOSE: Android Bluetooth application PID for %s is unknown", serial_number); disable_interface = 1; } else { char *data_str; @@ -834,8 +786,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server data_str = strchr(response, '\n'); if (data_str && sscanf(data_str, "%*s %s", pid) == 1) { - if (verbose) - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is %s\n", serial_number, pid); + errmsg_print("VERBOSE: Android Bluetooth application PID for %s is %s", serial_number, pid); sock = adb_connect(adb_server_ip, adb_server_tcp_port); if (sock == INVALID_SOCKET) @@ -844,8 +795,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -857,17 +807,14 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server data_str = strchr(response, '\n'); if (data_str && sscanf(data_str, "%*s %s", pid) == 1 && strcmp(pid + 9, "22A8") == 0) { - if (verbose) - fprintf(stderr, "VERBOSE: Btsnoop Net Port for %s is %s\n", serial_number, pid + 9); + errmsg_print("VERBOSE: Btsnoop Net Port for %s is %s", serial_number, pid + 9); } else { disable_interface = 1; - if (verbose) - fprintf(stderr, "VERBOSE: Btsnoop Net Port for %s is unknown\n", serial_number); + errmsg_print("VERBOSE: Btsnoop Net Port for %s is unknown", serial_number); } } else { disable_interface = 1; - if (verbose) - fprintf(stderr, "VERBOSE: Android Bluetooth application PID for %s is unknown\n", serial_number); + errmsg_print("VERBOSE: Android Bluetooth application PID for %s is unknown", serial_number); } } @@ -882,7 +829,7 @@ static int list_interfaces(const char *adb_server_ip, unsigned short *adb_server static int list_dlts(char *interface) { if (!interface) { - fprintf(stderr, "ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return 1; } @@ -907,14 +854,14 @@ static int list_dlts(char *interface) { return 0; } - fprintf(stderr, "ERROR: Invalid interface: <%s>\n", interface); + errmsg_print("ERROR: Invalid interface: <%s>", interface); return 1; } static int list_config(char *interface) { if (!interface) { - fprintf(stderr, "ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return 1; } @@ -954,7 +901,7 @@ static int list_config(char *interface) { return 0; } - fprintf(stderr, "ERROR: Invalid interface: <%s>\n", interface); + errmsg_print("ERROR: Invalid interface: <%s>", interface); return 1; } @@ -1029,8 +976,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", adb_transport); + errmsg_print("ERROR: Error while setting adb transport for <%s>", adb_transport); closesocket(sock); return 1; } @@ -1038,8 +984,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } @@ -1047,8 +992,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, result = adb_send(sock, adb_shell_hcidump); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while starting capture by sending command: %s\n", adb_shell_hcidump); + errmsg_print("ERROR: Error while starting capture by sending command: %s", adb_shell_hcidump); closesocket(sock); return 1; } @@ -1060,8 +1004,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, length = recv(sock, data + used_buffer_length, (int)(PACKET_LENGTH - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } @@ -1072,8 +1015,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, char *state_line_position = i_position + 1; if (!strncmp(data, "/system/bin/sh: hcidump: not found", 34)) { - if (verbose) - fprintf(stderr, "ERROR: Command not found for <%s>\n", adb_shell_hcidump); + errmsg_print("ERROR: Command not found for <%s>", adb_shell_hcidump); closesocket(sock); return 2; } @@ -1082,8 +1024,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, if (i_position) { i_position += 1; if (!strncmp(state_line_position, "Can't access device: Permission denied", 38)) { - if (verbose) - fprintf(stderr, "WARNING: No permission for command <%s>\n", adb_shell_hcidump); + errmsg_print("WARNING: No permission for command <%s>", adb_shell_hcidump); used_buffer_length = 0; try_next += 1; break; @@ -1103,16 +1044,14 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, sprintf((char *) helpful_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helpful_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helpful_packet); closesocket(sock); return 1; } result = adb_send(sock, adb_shell_su_hcidump); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while starting capture by sending command: <%s>\n", adb_shell_su_hcidump); + errmsg_print("ERROR: Error while starting capture by sending command: <%s>", adb_shell_su_hcidump); closesocket(sock); return 1; } @@ -1125,8 +1064,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, length = recv(sock, data + used_buffer_length, (int)(PACKET_LENGTH - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } @@ -1135,8 +1073,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, i_position = (char *) memchr(data, '\n', used_buffer_length); if (i_position && i_position < data + used_buffer_length) { if (!strncmp(data, "/system/bin/sh: su: not found", 29)) { - if (verbose) - fprintf(stderr, "ERROR: Command 'su' not found for <%s>\n", adb_shell_su_hcidump); + errmsg_print("ERROR: Command 'su' not found for <%s>", adb_shell_su_hcidump); closesocket(sock); return 2; } @@ -1157,8 +1094,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, length = recv(sock, data + used_buffer_length, (int)(PACKET_LENGTH - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } @@ -1176,8 +1112,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, hex_data = new_hex_data; hex = g_ascii_strtoll(hex_data, &new_hex_data, 16); if (hex < 0 || hex >= 256 || hex_data == new_hex_data) { - if (verbose) - printf("ERROR: data format error: %s\n", strerror(errno)); + errmsg_print("ERROR: data format error: %s", strerror(errno)); closesocket(sock); return 101; } @@ -1185,8 +1120,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, hex_data = new_hex_data; hex = g_ascii_strtoll(hex_data, &new_hex_data, 16); if (hex < 0 || hex >= 256 || hex_data == new_hex_data) { - if (verbose) - printf("ERROR: data format error: %s\n", strerror(errno)); + errmsg_print("ERROR: data format error: %s", strerror(errno)); closesocket(sock); return 101; } @@ -1199,8 +1133,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, hex_data = new_hex_data; hex = g_ascii_strtoll(hex_data, &new_hex_data, 16); if (hex < 0 || hex >= 256 || hex_data == new_hex_data) { - if (verbose) - printf("ERROR: data format error: %s\n", strerror(errno)); + errmsg_print("ERROR: data format error: %s", strerror(errno)); closesocket(sock); return 101; } @@ -1213,8 +1146,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, hex_data = new_hex_data; hex = g_ascii_strtoll(hex_data, &new_hex_data, 16); if (hex < 0 || hex >= 256 || hex_data == new_hex_data) { - if (verbose) - printf("ERROR: data format error: %s\n", strerror(errno)); + errmsg_print("ERROR: data format error: %s", strerror(errno)); closesocket(sock); return 101; } @@ -1222,8 +1154,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, hex_data = new_hex_data; hex = g_ascii_strtoll(hex_data, &new_hex_data, 16); if (hex < 0 || hex >= 256 || hex_data == new_hex_data) { - if (verbose) - printf("ERROR: data format error: %s\n", strerror(errno)); + errmsg_print("ERROR: data format error: %s", strerror(errno)); closesocket(sock); return 101; } @@ -1238,8 +1169,7 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, } } else { - if (verbose) - fprintf(stderr, "ERROR: bad raw stream\n"); + errmsg_print("ERROR: bad raw stream"); closesocket(sock); return 1; } @@ -1259,11 +1189,9 @@ static int capture_android_bluetooth_hcidump(char *interface, char *fifo, &date.tm_year, &date.tm_mon, &date.tm_mday, &date.tm_hour, &date.tm_min, &date.tm_sec, &ms, &direction_character)) { - if (verbose) { - fprintf(stderr, "time %04d-%02d-%02d %02d:%02d:%02d.%06d %c\n", + errmsg_print("time %04d-%02d-%02d %02d:%02d:%02d.%06d %c", date.tm_year, date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min, date.tm_sec, ms, direction_character); - } date.tm_mon -= 1; date.tm_year -= 1900; ts = mktime(&date); @@ -1374,22 +1302,18 @@ static int capture_android_bluetooth_external_parser(char *interface, if (bt_forward_socket) { if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { - if (verbose) - printf("ERROR: Cannot open system TCP socket: %s\n", strerror(errno)); + errmsg_print("ERROR: Cannot open system TCP socket: %s", strerror(errno)); return 1; } - if (verbose) { - printf("Using config: Server TCP Port=%u, Local IP=%s, Local TCP Port=%u\n", + verbose_print("Using config: Server TCP Port=%u, Local IP=%s, Local TCP Port=%u\n", *bt_server_tcp_port, bt_local_ip, *bt_local_tcp_port); - } if (*bt_local_tcp_port != 0) { int result; result = adb_forward(serial_number, adb_server_ip, adb_server_tcp_port, *bt_local_tcp_port, *bt_server_tcp_port); - if (verbose) - printf("DO: adb forward tcp:%u (local) tcp:%u (remote) result=%i\n", + verbose_print("DO: adb forward tcp:%u (local) tcp:%u (remote) result=%i\n", *bt_local_tcp_port, *bt_server_tcp_port, result); } @@ -1399,8 +1323,7 @@ static int capture_android_bluetooth_external_parser(char *interface, server.sin_addr.s_addr = inet_addr(bt_local_ip); if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { - if (verbose) - printf("ERROR: <%s> Please check that adb daemon is running.\n\n", strerror(errno)); + errmsg_print("ERROR: <%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); return 2; } @@ -1410,18 +1333,18 @@ static int capture_android_bluetooth_external_parser(char *interface, length = sizeof(client); if (getsockname(sock, (struct sockaddr *) &client, (socklen_t *) &length)) { - printf("ERROR getsockname: %s\n", strerror(errno)); + errmsg_print("ERROR getsockname: %s", strerror(errno)); closesocket(sock); return 3; } if (length != sizeof(client)) { - printf("ERROR: incorrect length\n"); + errmsg_print("ERROR: incorrect length"); closesocket(sock); return 4; } - printf("VERBOSE: Client port %u\n", GUINT16_FROM_BE(client.sin_port)); + verbose_print("VERBOSE: Client port %u", GUINT16_FROM_BE(client.sin_port)); } } else { int result; @@ -1433,8 +1356,7 @@ static int capture_android_bluetooth_external_parser(char *interface, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport\n"); + errmsg_print("ERROR: Error while setting adb transport"); closesocket(sock); return 1; } @@ -1442,8 +1364,7 @@ static int capture_android_bluetooth_external_parser(char *interface, g_snprintf((char *) buffer, PACKET_LENGTH, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, buffer); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport\n"); + errmsg_print("ERROR: Error while setting adb transport"); closesocket(sock); return 1; } @@ -1452,8 +1373,7 @@ static int capture_android_bluetooth_external_parser(char *interface, sprintf((char *) buffer, adb_tcp_bluedroid_external_parser_template, 4 + 5, *bt_server_tcp_port); result = adb_send(sock, buffer); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while forwarding adb port\n"); + errmsg_print("ERROR: Error while forwarding adb port"); closesocket(sock); return 1; } @@ -1464,8 +1384,7 @@ static int capture_android_bluetooth_external_parser(char *interface, length = recv(sock, buffer + used_buffer_length, (int)(PACKET_LENGTH - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } @@ -1473,13 +1392,11 @@ static int capture_android_bluetooth_external_parser(char *interface, if (length <= 0) { if (bt_forward_socket) { /* NOTE: Workaround... It seems that Bluedroid is slower and we can connect to socket that are not really ready... */ - if (verbose) - printf("WARNING: Broken socket connection. Try reconnect.\n"); + verbose_print("WARNING: Broken socket connection. Try reconnect.\n"); closesocket(sock); if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { - if (verbose) - printf("ERROR1: %s\n", strerror(errno)); + errmsg_print("ERROR1: %s", strerror(errno)); return 1; } @@ -1488,14 +1405,12 @@ static int capture_android_bluetooth_external_parser(char *interface, server.sin_addr.s_addr = inet_addr(bt_local_ip); if (connect(sock, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR) { - if (verbose) - printf("ERROR reconnect: <%s> Please check that adb daemon is running.\n", strerror(errno)); + errmsg_print("ERROR reconnect: <%s> Please check that adb daemon is running.", strerror(errno)); closesocket(sock); return 2; } } else { - if (verbose) - printf("ERROR: Broken socket connection.\n"); + errmsg_print("ERROR: Broken socket connection."); closesocket(sock); return 1; } @@ -1505,7 +1420,7 @@ static int capture_android_bluetooth_external_parser(char *interface, used_buffer_length += length; - if (verbose) printf("Received: length=%"G_GSSIZE_FORMAT"\n", length); + verbose_print("Received: length=%"G_GSSIZE_FORMAT"\n", length); while (((payload[BLUEDROID_H4_PACKET_TYPE] == BLUEDROID_H4_PACKET_TYPE_HCI_CMD || payload[BLUEDROID_H4_PACKET_TYPE] == BLUEDROID_H4_PACKET_TYPE_SCO) && used_buffer_length >= BLUEDROID_TIMESTAMP_SIZE + BLUEDROID_H4_SIZE + 2 + 1 && @@ -1556,17 +1471,16 @@ static int capture_android_bluetooth_external_parser(char *interface, break; default: - if (verbose) - printf("ERROR: Invalid stream\n"); + errmsg_print("ERROR: Invalid stream"); closesocket(sock); return 1; } if (verbose) { static unsigned int id = 1; - printf("\t Packet %u: used_buffer_length=%"G_GSSIZE_FORMAT" length=%"G_GSSIZE_FORMAT" captured_length=%i type=0x%02x\n", id, used_buffer_length, length, captured_length, payload[BLUEDROID_H4_PACKET_TYPE]); + verbose_print("\t Packet %u: used_buffer_length=%"G_GSSIZE_FORMAT" length=%"G_GSSIZE_FORMAT" captured_length=%i type=0x%02x\n", id, used_buffer_length, length, captured_length, payload[BLUEDROID_H4_PACKET_TYPE]); if (payload[BLUEDROID_H4_PACKET_TYPE] == BLUEDROID_H4_PACKET_TYPE_HCI_EVT) - printf("\t Packet: %02x %02x %02x\n", (unsigned int) payload[0], (unsigned int) payload[1], (unsigned int)payload[2]); + verbose_print("\t Packet: %02x %02x %02x\n", (unsigned int) payload[0], (unsigned int) payload[1], (unsigned int)payload[2]); id +=1; } @@ -1580,8 +1494,7 @@ static int capture_android_bluetooth_external_parser(char *interface, used_buffer_length -= length - sizeof(own_pcap_bluetooth_h4_header) + BLUEDROID_TIMESTAMP_SIZE; if (used_buffer_length < 0) { - if (verbose) - printf("ERROR: Internal error: Negative used buffer length.\n"); + errmsg_print("ERROR: Internal error: Negative used buffer length."); closesocket(sock); return 1; } @@ -1642,16 +1555,14 @@ static int capture_android_bluetooth_btsnoop_net(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", adb_transport); + errmsg_print("ERROR: Error while setting adb transport for <%s>", adb_transport); return 1; } } else { sprintf((char *) packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", packet); closesocket(sock); return 1; } @@ -1659,8 +1570,7 @@ static int capture_android_bluetooth_btsnoop_net(char *interface, char *fifo, result = adb_send(sock, adb_tcp_btsnoop_net); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending command <%s>\n", adb_tcp_btsnoop_net); + errmsg_print("ERROR: Error while sending command <%s>", adb_tcp_btsnoop_net); closesocket(sock); return 1; } @@ -1681,15 +1591,13 @@ static int capture_android_bluetooth_btsnoop_net(char *interface, char *fifo, (int)(PACKET_LENGTH - sizeof(own_pcap_bluetooth_h4_header) - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } if (length <= 0) { - if (verbose) - printf("ERROR: Broken socket connection.\n"); + errmsg_print("ERROR: Broken socket connection."); closesocket(sock); return 101; } @@ -1714,8 +1622,7 @@ static int capture_android_bluetooth_btsnoop_net(char *interface, char *fifo, used_buffer_length -= 24 + GINT32_FROM_BE(*captured_length); if (used_buffer_length < 0) { - if (verbose) - printf("ERROR: Internal error: Negative used buffer length.\n"); + errmsg_print("ERROR: Internal error: Negative used buffer length."); closesocket(sock); return 1; } @@ -1787,8 +1694,7 @@ static int capture_android_logcat_text(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", adb_transport); + errmsg_print("ERROR: Error while setting adb transport for <%s>", adb_transport); closesocket(sock); return 1; } @@ -1798,8 +1704,7 @@ static int capture_android_logcat_text(char *interface, char *fifo, sprintf((char *) packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", packet); closesocket(sock); return 1; } @@ -1816,7 +1721,7 @@ static int capture_android_logcat_text(char *interface, char *fifo, else if (is_specified_interface(interface, INTERFACE_ANDROID_LOGCAT_TEXT_CRASH)) logcat_buffer = " -b crash"; else { - printf("ERROR: Unknown interface: <%s>\n", interface); + errmsg_print("ERROR: Unknown interface: <%s>", interface); closesocket(sock); return -1; } @@ -1825,8 +1730,7 @@ static int capture_android_logcat_text(char *interface, char *fifo, g_snprintf((char *) packet, sizeof(packet), adb_logcat_template, strlen(adb_logcat_template) + -8 + strlen(logcat_buffer), logcat_buffer, ""); result = adb_send(sock, packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending command <%s>\n", packet); + errmsg_print("ERROR: Error while sending command <%s>", packet); closesocket(sock); return 1; } @@ -1852,15 +1756,13 @@ static int capture_android_logcat_text(char *interface, char *fifo, length = recv(sock, packet + exported_pdu_headers_size + used_buffer_length, (int)(PACKET_LENGTH - exported_pdu_headers_size - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } if (length <= 0) { - if (verbose) - printf("ERROR: Broken socket connection. Try reconnect.\n"); + errmsg_print("ERROR: Broken socket connection. Try reconnect."); closesocket(sock); return 1; } @@ -1960,8 +1862,7 @@ static int capture_android_logcat(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport\n"); + errmsg_print("ERROR: Error while setting adb transport"); closesocket(sock); return 1; } @@ -1971,8 +1872,7 @@ static int capture_android_logcat(char *interface, char *fifo, g_snprintf(packet, PACKET_LENGTH, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport\n"); + errmsg_print("ERROR: Error while setting adb transport"); closesocket(sock); return 1; } @@ -1987,15 +1887,14 @@ static int capture_android_logcat(char *interface, char *fifo, else if (is_specified_interface(interface, INTERFACE_ANDROID_LOGCAT_EVENTS)) adb_command = adb_log_events; else { - printf("ERROR: Unknown interface: <%s>\n", interface); + errmsg_print("ERROR: Unknown interface: <%s>", interface); closesocket(sock); return -1; } result = adb_send(sock, adb_command); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending command <%s>\n", adb_command); + errmsg_print("ERROR: Error while sending command <%s>", adb_command); closesocket(sock); return 1; } @@ -2031,16 +1930,14 @@ static int capture_android_logcat(char *interface, char *fifo, length = recv(sock, packet + exported_pdu_headers_size + used_buffer_length, (int)(PACKET_LENGTH - exported_pdu_headers_size - used_buffer_length), 0); if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); closesocket(sock); return 100; } if (length <= 0) { while (endless_loop) { - if (verbose) - printf("WARNING: Broken socket connection. Try reconnect.\n"); + verbose_print("WARNING: Broken socket connection. Try reconnect.\n"); used_buffer_length = 0; closesocket(sock); @@ -2051,8 +1948,7 @@ static int capture_android_logcat(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", adb_transport); + errmsg_print("ERROR: Error while setting adb transport for <%s>", adb_transport); closesocket(sock); return 1; } @@ -2060,8 +1956,7 @@ static int capture_android_logcat(char *interface, char *fifo, sprintf((char *) helper_packet, adb_transport_serial_templace, 15 + serial_number_length, serial_number); result = adb_send(sock, helper_packet); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while setting adb transport for <%s>\n", helper_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", helper_packet); closesocket(sock); return 1; } @@ -2076,15 +1971,14 @@ static int capture_android_logcat(char *interface, char *fifo, else if (is_specified_interface(interface, INTERFACE_ANDROID_LOGCAT_EVENTS)) adb_command = adb_log_events; else { - printf("ERROR: Unknown interface: <%s>\n", interface); + errmsg_print("ERROR: Unknown interface: <%s>", interface); closesocket(sock); return 1; } result = adb_send(sock, adb_command); if (result) { - if (verbose) - fprintf(stderr, "ERROR: Error while sending command <%s>\n", adb_command); + errmsg_print("ERROR: Error while sending command <%s>", adb_command); continue; } @@ -2163,13 +2057,13 @@ static void attach_parent_console() /* Console attach succeeded */ if (outRedirected == FALSE) { if (!freopen("CONOUT$", "w", stdout)) { - fprintf(stderr, "WARNING: Cannot redirect to stdout."); + errmsg_print("WARNING: Cannot redirect to stdout."); } } if (errRedirected == FALSE) { if (!freopen("CONOUT$", "w", stderr)) { - fprintf(stderr, "WARNING: Cannot redirect to strerr."); + errmsg_print("WARNING: Cannot redirect to strerr."); } } } @@ -2212,12 +2106,10 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, if (!serial_number) { result = adb_send(sock, adb_transport); if (result) { - if (verbose) - printf("ERROR: Error while setting adb transport"); + errmsg_print("ERROR: Error while setting adb transport"); fflush(stdout); - fprintf(stderr, - "ERROR: Error while setting adb transport for <%s>\n", + errmsg_print("ERROR: Error while setting adb transport for <%s>", adb_transport); closesocket(sock); return 1; @@ -2229,10 +2121,8 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, if (result) { printf("ERROR: Error while setting adb transport"); fflush(stdout); - if (verbose) - fprintf(stderr, - "ERROR: Error while setting adb transport for <%s>\n", - helpful_packet); + errmsg_print("ERROR: Error while setting adb transport for <%s>", + helpful_packet); closesocket(sock); return 1; } @@ -2241,10 +2131,8 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, if (result) { printf("ERROR: Error while setting adb transport"); fflush(stdout); - if (verbose) - fprintf(stderr, - "ERROR: Error while starting capture by sending command: %s\n", - adb_shell_tcpdump); + errmsg_print("ERROR: Error while starting capture by sending command: %s", + adb_shell_tcpdump); closesocket(sock); return 1; } @@ -2257,8 +2145,7 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, if (errno == EAGAIN || (EWOULDBLOCK != EAGAIN && errno == EWOULDBLOCK)) continue; else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + verbose_print("ERROR capture: %s", strerror(errno)); return 100; } used_buffer_length += length; @@ -2370,8 +2257,7 @@ static int capture_android_wifi_tcpdump(char *interface, char *fifo, continue; } else if (errno != 0) { - if (verbose) - printf("ERROR capture: %s\n", strerror(errno)); + errmsg_print("ERROR capture: %s", strerror(errno)); return 100; } if (length > 0 && (used_buffer_length += length)>1) { @@ -2434,15 +2320,15 @@ int main(int argc, char **argv) { else verbose = 1; - if (verbose) { + { int j = 0; - fprintf(stderr, "VERBOSE: Command line: "); + verbose_print("VERBOSE: Command line: "); while(j < argc) { - fprintf(stderr, "%s ", argv[j]); + verbose_print("%s ", argv[j]); j += 1; } - fprintf(stderr, "\n"); + verbose_print("\n"); } break; case OPT_LIST_INTERFACES: @@ -2475,7 +2361,7 @@ int main(int argc, char **argv) { case OPT_CONFIG_ADB_SERVER_TCP_PORT: adb_server_tcp_port = &local_adb_server_tcp_port; if (!optarg){ - fprintf(stderr, "ERROR: Impossible exception. Parameter required argument, but there is no it right now."); + errmsg_print("ERROR: Impossible exception. Parameter required argument, but there is no it right now."); return -1; } *adb_server_tcp_port = (unsigned short) g_ascii_strtoull(optarg, NULL, 10); @@ -2486,7 +2372,7 @@ int main(int argc, char **argv) { case OPT_CONFIG_BT_SERVER_TCP_PORT: bt_server_tcp_port = &local_bt_server_tcp_port; if (!optarg){ - fprintf(stderr, "ERROR: Impossible exception. Parameter required argument, but there is no it right now."); + errmsg_print("ERROR: Impossible exception. Parameter required argument, but there is no it right now."); return -1; } *bt_server_tcp_port = (unsigned short) g_ascii_strtoull(optarg, NULL, 10); @@ -2500,7 +2386,7 @@ int main(int argc, char **argv) { case OPT_CONFIG_BT_LOCAL_TCP_PORT: bt_local_tcp_port = &local_bt_local_tcp_port; if (!optarg){ - fprintf(stderr, "ERROR: Impossible exception. Parameter required argument, but there is no it right now."); + errmsg_print("ERROR: Impossible exception. Parameter required argument, but there is no it right now."); return -1; } *bt_local_tcp_port = (unsigned short) g_ascii_strtoull(optarg, NULL, 10); @@ -2535,8 +2421,7 @@ int main(int argc, char **argv) { #ifdef _WIN32 result = WSAStartup(MAKEWORD(1,1), &wsaData); if (result != 0) { - if (verbose) - printf("ERROR: WSAStartup failed with error: %d\n", result); + errmsg_print("ERROR: WSAStartup failed with error: %d", result); return 1; } #endif /* _WIN32 */ @@ -2548,7 +2433,7 @@ int main(int argc, char **argv) { } if (fifo == NULL) { - printf("ERROR: No FIFO or file specified\n"); + errmsg_print("ERROR: No FIFO or file specified"); return 1; } diff --git a/extcap/extcap-base.h b/extcap/extcap-base.h new file mode 100644 index 0000000000..0dabd8b2a9 --- /dev/null +++ b/extcap/extcap-base.h @@ -0,0 +1,63 @@ +/* extcap_base.h + * Base function for extcaps + * + * Copyright 2016, Dario Lombardo + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ +#ifndef __EXTCAP_BASE_H__ +#define __EXTCAP_BASE_H__ + +#include +#include +#include + +#define EXTCAP_BASE_OPTIONS_ENUM \ + OPT_LIST_INTERFACES, \ + OPT_LIST_DLTS, \ + OPT_INTERFACE, \ + OPT_CONFIG, \ + OPT_CAPTURE, \ + OPT_CAPTURE_FILTER, \ + OPT_FIFO \ + + +#define EXTCAP_BASE_OPTIONS \ + { "extcap-interfaces", no_argument, NULL, OPT_LIST_INTERFACES}, \ + { "extcap-dlts", no_argument, NULL, OPT_LIST_DLTS}, \ + { "extcap-interface", required_argument, NULL, OPT_INTERFACE}, \ + { "extcap-config", no_argument, NULL, OPT_CONFIG}, \ + { "capture", no_argument, NULL, OPT_CAPTURE}, \ + { "extcap-capture-filter", required_argument, NULL, OPT_CAPTURE_FILTER}, \ + { "fifo", required_argument, NULL, OPT_FIFO} \ + +#endif + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: t + * End: + * + * vi: set shiftwidth=4 tabstop=4 noexpandtab: + * :indentSize=4:tabSize=4:noTabs=false: + */ \ No newline at end of file diff --git a/extcap/randpktdump.c b/extcap/randpktdump.c index a2c7dfbce8..aa16ebcd0a 100644 --- a/extcap/randpktdump.c +++ b/extcap/randpktdump.c @@ -24,11 +24,10 @@ #include "config.h" +#include "extcap-base.h" + #include "randpkt_core/randpkt_core.h" -#include -#include -#include #ifdef HAVE_GETOPT_H #include @@ -66,27 +65,21 @@ #define SOCKET_ERROR (-1) #endif -#define verbose_print(...) { if (verbose) printf(__VA_ARGS__); } -#define errmsg_print(...) { fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } - #define RANDPKT_EXTCAP_INTERFACE "randpkt" #define RANDPKTDUMP_VERSION_MAJOR 0 #define RANDPKTDUMP_VERSION_MINOR 1 #define RANDPKTDUMP_VERSION_RELEASE 0 +#define verbose_print(...) { if (verbose) printf(__VA_ARGS__); } +#define errmsg_print(...) { fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } + static gboolean verbose = TRUE; enum { - OPT_HELP = 1, + EXTCAP_BASE_OPTIONS_ENUM, + OPT_HELP, OPT_VERSION, OPT_VERBOSE, - OPT_LIST_INTERFACES, - OPT_LIST_DLTS, - OPT_INTERFACE, - OPT_CONFIG, - OPT_CAPTURE, - OPT_CAPTURE_FILTER, - OPT_FIFO, OPT_MAXBYTES, OPT_COUNT, OPT_RANDOM_TYPE, @@ -95,19 +88,10 @@ enum { }; static struct option longopts[] = { - /* Generic application options */ - { "help", no_argument, NULL, OPT_HELP}, - { "version", no_argument, NULL, OPT_VERSION}, + EXTCAP_BASE_OPTIONS, + { "help", no_argument, NULL, OPT_HELP}, + { "version", no_argument, NULL, OPT_VERSION}, { "verbose", optional_argument, NULL, OPT_VERBOSE}, - /* Extcap options */ - { "extcap-interfaces", no_argument, NULL, OPT_LIST_INTERFACES}, - { "extcap-dlts", no_argument, NULL, OPT_LIST_DLTS}, - { "extcap-interface", required_argument, NULL, OPT_INTERFACE}, - { "extcap-config", no_argument, NULL, OPT_CONFIG}, - { "capture", no_argument, NULL, OPT_CAPTURE}, - { "extcap-capture-filter ", required_argument, NULL, OPT_CAPTURE_FILTER}, - { "fifo", required_argument, NULL, OPT_FIFO}, - /* Interfaces options */ { "maxbytes", required_argument, NULL, OPT_MAXBYTES}, { "count", required_argument, NULL, OPT_COUNT}, { "random-type", required_argument, NULL, OPT_RANDOM_TYPE}, @@ -215,12 +199,12 @@ static int list_config(char *interface) unsigned list_num; if (!interface) { - errmsg_print("ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return EXIT_FAILURE; } if (g_strcmp0(interface, RANDPKT_EXTCAP_INTERFACE)) { - errmsg_print("ERROR: interface must be %s\n", RANDPKT_EXTCAP_INTERFACE); + errmsg_print("ERROR: interface must be %s", RANDPKT_EXTCAP_INTERFACE); return EXIT_FAILURE; } @@ -255,12 +239,12 @@ static int list_config(char *interface) static int list_dlts(const char *interface) { if (!interface) { - errmsg_print("ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return EXIT_FAILURE; } if (g_strcmp0(interface, RANDPKT_EXTCAP_INTERFACE)) { - errmsg_print("ERROR: interface must be %s\n", RANDPKT_EXTCAP_INTERFACE); + errmsg_print("ERROR: interface must be %s", RANDPKT_EXTCAP_INTERFACE); return EXIT_FAILURE; } @@ -355,7 +339,7 @@ int main(int argc, char *argv[]) case OPT_MAXBYTES: maxbytes = atoi(optarg); if (maxbytes > MAXBYTES_LIMIT) { - errmsg_print("randpktdump: Max bytes is %u\n", MAXBYTES_LIMIT); + errmsg_print("randpktdump: Max bytes is %u", MAXBYTES_LIMIT); return 1; } break; @@ -382,17 +366,17 @@ int main(int argc, char *argv[]) case ':': /* missing option argument */ - errmsg_print("Option '%s' requires an argument\n", argv[optind - 1]); + errmsg_print("Option '%s' requires an argument", argv[optind - 1]); break; default: - errmsg_print("Invalid option 1: %s\n", argv[optind - 1]); + errmsg_print("Invalid option 1: %s", argv[optind - 1]); return EXIT_FAILURE; } } if (optind != argc) { - errmsg_print("Invalid option: %s\n", argv[optind]); + errmsg_print("Invalid option: %s", argv[optind]); return EXIT_FAILURE; } @@ -407,7 +391,7 @@ int main(int argc, char *argv[]) /* Some sanity checks */ if ((random_type) && (all_random)) { - errmsg_print("You can specify only one between: --random-type, --all-random\n"); + errmsg_print("You can specify only one between: --random-type, --all-random"); return EXIT_FAILURE; } @@ -421,19 +405,19 @@ int main(int argc, char *argv[]) result = WSAStartup(MAKEWORD(1,1), &wsaData); if (result != 0) { if (verbose) - errmsg_print("ERROR: WSAStartup failed with error: %d\n", result); + errmsg_print("ERROR: WSAStartup failed with error: %d", result); return 1; } #endif /* _WIN32 */ if (do_capture) { if (!fifo) { - errmsg_print("ERROR: No FIFO or file specified\n"); + errmsg_print("ERROR: No FIFO or file specified"); return 1; } if (g_strcmp0(interface, RANDPKT_EXTCAP_INTERFACE)) { - errmsg_print("ERROR: invalid interface\n"); + errmsg_print("ERROR: invalid interface"); return 1; } diff --git a/extcap/sshdump.c b/extcap/sshdump.c index 9a273968bf..8a932bb70a 100644 --- a/extcap/sshdump.c +++ b/extcap/sshdump.c @@ -24,12 +24,11 @@ #include "config.h" -#include -#include +#include "extcap-base.h" + #include #include #include -#include #include #include #include @@ -104,19 +103,16 @@ #define DEFAULT_CAPTURE_BIN "dumpcap" +#define verbose_print(...) { if (verbose) printf(__VA_ARGS__); } +#define errmsg_print(...) { fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } + static gboolean verbose = FALSE; enum { - OPT_HELP = 1, + EXTCAP_BASE_OPTIONS_ENUM, + OPT_HELP, OPT_VERSION, OPT_VERBOSE, - OPT_LIST_INTERFACES, - OPT_LIST_DLTS, - OPT_INTERFACE, - OPT_CONFIG, - OPT_CAPTURE, - OPT_FIFO, - OPT_EXTCAP_FILTER, OPT_REMOTE_HOST, OPT_REMOTE_PORT, OPT_REMOTE_USERNAME, @@ -130,17 +126,10 @@ enum { }; static struct option longopts[] = { -/* Generic application options */ + EXTCAP_BASE_OPTIONS, { "help", no_argument, NULL, OPT_HELP}, { "version", no_argument, NULL, OPT_VERSION}, { "verbose", optional_argument, NULL, OPT_VERBOSE}, - { "extcap-interfaces", no_argument, NULL, OPT_LIST_INTERFACES}, - { "extcap-dlts", no_argument, NULL, OPT_LIST_DLTS}, - { "extcap-interface", required_argument, NULL, OPT_INTERFACE}, - { "extcap-config", no_argument, NULL, OPT_CONFIG}, - { "extcap-capture-filter", required_argument, NULL, OPT_EXTCAP_FILTER}, - { "capture", no_argument, NULL, OPT_CAPTURE}, - { "fifo", required_argument, NULL, OPT_FIFO}, { "remote-host", required_argument, NULL, OPT_REMOTE_HOST}, { "remote-port", required_argument, NULL, OPT_REMOTE_PORT}, { "remote-username", required_argument, NULL, OPT_REMOTE_USERNAME}, @@ -154,9 +143,6 @@ static struct option longopts[] = { { 0, 0, 0, 0} }; -#define verbose_print(...) { if (verbose) printf(__VA_ARGS__); } -#define errmsg_print(...) { fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); } - static char* local_interfaces_to_filter(unsigned int remote_port); static void ssh_cleanup(ssh_session sshs, ssh_channel channel) @@ -189,13 +175,13 @@ static ssh_session create_ssh_connection(const char* hostname, const unsigned in return NULL; if (ssh_options_set(sshs, SSH_OPTIONS_HOST, hostname)) { - errmsg_print("Can't set the hostname: %s\n", hostname); + errmsg_print("Can't set the hostname: %s", hostname); goto failure; } if (port != 0) { if (ssh_options_set(sshs, SSH_OPTIONS_PORT, &port)) { - errmsg_print("Can't set the port: %d\n", port); + errmsg_print("Can't set the port: %d", port); goto failure; } } @@ -204,15 +190,15 @@ static ssh_session create_ssh_connection(const char* hostname, const unsigned in username = g_get_user_name(); if (ssh_options_set(sshs, SSH_OPTIONS_USER, username)) { - errmsg_print("Can't set the username: %s\n", username); + errmsg_print("Can't set the username: %s", username); goto failure; } - verbose_print("Opening ssh connection to %s@%s:%u\n", username, hostname, port); + verbose_print("Opening ssh connection to %s@%s:%u", username, hostname, port); /* Connect to server */ if (ssh_connect(sshs) != SSH_OK) { - errmsg_print("Error connecting to %s@%s:%u (%s)\n", username, hostname, port, + errmsg_print("Error connecting to %s@%s:%u (%s)", username, hostname, port, ssh_get_error(sshs)); goto failure; } @@ -264,7 +250,7 @@ static ssh_session create_ssh_connection(const char* hostname, const unsigned in verbose_print("failed\n"); } - errmsg_print("Can't find a valid authentication. Disconnecting.\n"); + errmsg_print("Can't find a valid authentication. Disconnecting."); /* All authentication failed. Disconnect and return */ ssh_disconnect(sshs); @@ -283,7 +269,7 @@ static void ssh_loop_read(ssh_channel channel, int fd) do { nbytes = ssh_channel_read(channel, buffer, SSH_READ_BLOCK_SIZE, 0); if (write(fd, buffer, nbytes) != nbytes) { - errmsg_print("ERROR reading: %s\n", g_strerror(errno)); + errmsg_print("ERROR reading: %s", g_strerror(errno)); return; } } while(nbytes > 0); @@ -375,7 +361,7 @@ static int ssh_open_remote_connection(const char* hostname, const unsigned int p if (fd == -1) { fd = open(fifo, O_WRONLY | O_CREAT, 0640); if (fd == -1) { - errmsg_print("Error creating output file: %s\n", g_strerror(errno)); + errmsg_print("Error creating output file: %s", g_strerror(errno)); return EXIT_FAILURE; } } @@ -445,12 +431,12 @@ static int list_interfaces(void) static int list_dlts(const char *interface) { if (!interface) { - printf("ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return EXIT_FAILURE; } if (g_strcmp0(interface, SSH_EXTCAP_INTERFACE)) { - printf("ERROR: interface must be %s\n", SSH_EXTCAP_INTERFACE); + errmsg_print("ERROR: interface must be %s", SSH_EXTCAP_INTERFACE); return EXIT_FAILURE; } @@ -531,12 +517,12 @@ static int list_config(char *interface, unsigned int remote_port) char* ipfilter; if (!interface) { - g_fprintf(stderr, "ERROR: No interface specified.\n"); + errmsg_print("ERROR: No interface specified."); return EXIT_FAILURE; } if (g_strcmp0(interface, SSH_EXTCAP_INTERFACE)) { - errmsg_print("ERROR: interface must be %s\n", SSH_EXTCAP_INTERFACE); + errmsg_print("ERROR: interface must be %s", SSH_EXTCAP_INTERFACE); return EXIT_FAILURE; } @@ -732,7 +718,7 @@ int main(int argc, char **argv) case OPT_REMOTE_PORT: remote_port = (unsigned int)strtoul(optarg, NULL, 10); if (remote_port > 65535 || remote_port == 0) { - printf("Invalid port: %s\n", optarg); + errmsg_print("Invalid port: %s", optarg); return EXIT_FAILURE; } break; @@ -775,7 +761,7 @@ int main(int argc, char **argv) remote_capture_bin = g_strdup(optarg); break; - case OPT_EXTCAP_FILTER: + case OPT_CAPTURE_FILTER: if (extcap_filter) g_free(extcap_filter); extcap_filter = g_strdup(optarg); @@ -793,17 +779,17 @@ int main(int argc, char **argv) case ':': /* missing option argument */ - printf("Option '%s' requires an argument\n", argv[optind - 1]); + errmsg_print("Option '%s' requires an argument", argv[optind - 1]); break; default: - printf("Invalid option: %s\n", argv[optind - 1]); + errmsg_print("Invalid option: %s", argv[optind - 1]); return EXIT_FAILURE; } } if (optind != argc) { - printf("Unexpected extra option: %s\n", argv[optind]); + errmsg_print("Unexpected extra option: %s", argv[optind]); return EXIT_FAILURE; } @@ -820,7 +806,7 @@ int main(int argc, char **argv) result = WSAStartup(MAKEWORD(1,1), &wsaData); if (result != 0) { if (verbose) - errmsg_print("ERROR: WSAStartup failed with error: %d\n", result); + errmsg_print("ERROR: WSAStartup failed with error: %d", result); return 1; } #endif /* _WIN32 */ @@ -829,11 +815,11 @@ int main(int argc, char **argv) char* filter; int ret = 0; if (!fifo) { - errmsg_print("ERROR: No FIFO or file specified\n"); + errmsg_print("ERROR: No FIFO or file specified"); return 1; } if (g_strcmp0(interface, SSH_EXTCAP_INTERFACE)) { - errmsg_print("ERROR: invalid interface\n"); + errmsg_print("ERROR: invalid interface"); return 1; } if (!remote_host) {