Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 381cfa9a authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Report getaddrinfo failures correctly.

Also move us off the "convenience" function because you can't get useful
error reporting from it.

Change-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65
parent 89cc750e
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@

#include <base/macros.h>

#include <string>

#include "adb_trace.h"
#include "fdevent.h"

@@ -357,8 +359,8 @@ void put_apacket(apacket *p);


void local_init(int port);
int  local_connect(int  port);
int  local_connect_arbitrary_ports(int console_port, int adb_port);
void local_connect(int port);
int  local_connect_arbitrary_ports(int console_port, int adb_port, std::string* error);

/* usb host/client interface */
void usb_init();
+14 −5
Original line number Diff line number Diff line
@@ -33,8 +33,10 @@

#include <base/stringprintf.h>
#include <base/strings.h>
#include <cutils/sockets.h>

#include "adb_io.h"
#include "adb_utils.h"

static TransportType __adb_transport = kTransportAny;
static const char* __adb_serial = NULL;
@@ -152,14 +154,21 @@ int _adb_connect(const std::string& service, std::string* error) {

    int fd;
    if (__adb_server_name) {
        fd = socket_network_client(__adb_server_name, __adb_server_port, SOCK_STREAM);
        std::string reason;
        fd = network_connect(__adb_server_name, __adb_server_port, SOCK_STREAM, 0, &reason);
        if (fd == -1) {
            *error = android::base::StringPrintf("can't connect to %s:%d: %s",
                                                 __adb_server_name, __adb_server_port,
                                                 reason.c_str());
            return -2;
        }
    } else {
        fd = socket_loopback_client(__adb_server_port, SOCK_STREAM);
    }
    if (fd < 0) {
        if (fd == -1) {
            *error = perror_str("cannot connect to daemon");
            return -2;
        }
    }

    if (memcmp(&service[0],"host",4) != 0 && switch_socket_transport(fd, error)) {
        return -1;
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <stdlib.h>

#include <base/stringprintf.h>
#include <cutils/sockets.h>

#include "sysdeps.h"
#include "transport.h"
+17 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include "adb_utils.h"

#include <netdb.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
@@ -28,6 +29,7 @@
#include <base/logging.h>
#include <base/stringprintf.h>
#include <base/strings.h>
#include <cutils/sockets.h>

#include "adb_trace.h"
#include "sysdeps.h"
@@ -158,3 +160,18 @@ bool parse_host_and_port(const std::string& address,
               << " (" << *canonical_address << ")";
    return true;
}

int network_connect(const std::string& host, int port, int type, int timeout, std::string* error) {
    int getaddrinfo_error = 0;
    int fd = socket_network_client_timeout(host.c_str(), port, type, timeout, &getaddrinfo_error);
    if (fd != -1) {
        return fd;
    }
    if (getaddrinfo_error != 0) {
        // TODO: not thread safe on Win32.
        *error = gai_strerror(getaddrinfo_error);
    } else {
        *error = strerror(errno);
    }
    return -1;
}
+2 −0
Original line number Diff line number Diff line
@@ -39,4 +39,6 @@ bool parse_host_and_port(const std::string& address,
                         std::string* host, int* port,
                         std::string* error);

int network_connect(const std::string& host, int port, int type, int timeout, std::string* error);

#endif
Loading