From 5d26b477fdbcdee36696db414806e043e2c09d97 Mon Sep 17 00:00:00 2001 From: "felipeg@chromium.org" Date: Tue, 16 Oct 2012 17:16:43 +0000 Subject: Upstream the android python scripts changes that enable the new Forwarder2 to be used in our test framework. BUG=146502 content/ changes are trivial so I am adding a TBR. TBR=avi Review URL: https://chromiumcodereview.appspot.com/11148018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@162150 0039d316-1c4b-4281-b951-d872f2087c98 --- tools/android/forwarder2/device_forwarder_main.cc | 2 +- tools/android/forwarder2/host_controller.cc | 4 +++- tools/android/forwarder2/host_forwarder_main.cc | 9 +++++++-- tools/android/forwarder2/socket.cc | 24 ++++++++++++++--------- 4 files changed, 26 insertions(+), 13 deletions(-) (limited to 'tools/android') diff --git a/tools/android/forwarder2/device_forwarder_main.cc b/tools/android/forwarder2/device_forwarder_main.cc index c0142a1..4a731b2 100644 --- a/tools/android/forwarder2/device_forwarder_main.cc +++ b/tools/android/forwarder2/device_forwarder_main.cc @@ -26,7 +26,7 @@ const char kDefaultAdbSocket[] = "chrome_device_forwarder"; void KillHandler(int /* unused */) { CHECK(g_notifier); if (!g_notifier->Notify()) - exit(-1); + exit(1); } } // namespace diff --git a/tools/android/forwarder2/host_controller.cc b/tools/android/forwarder2/host_controller.cc index 0507c11..98e487f 100644 --- a/tools/android/forwarder2/host_controller.cc +++ b/tools/android/forwarder2/host_controller.cc @@ -68,7 +68,9 @@ bool HostController::Connect() { return false; } // Send the command to the device start listening to the "device_forward_port" - SendCommand(command::LISTEN, device_port_, &adb_control_socket_); + bool send_command_success = SendCommand( + command::LISTEN, device_port_, &adb_control_socket_); + CHECK(send_command_success); int device_port_allocated; command::Type command; if (!ReadCommand(&adb_control_socket_, &device_port_allocated, &command) || diff --git a/tools/android/forwarder2/host_forwarder_main.cc b/tools/android/forwarder2/host_forwarder_main.cc index 1b3bf5d..6e54189 100644 --- a/tools/android/forwarder2/host_forwarder_main.cc +++ b/tools/android/forwarder2/host_forwarder_main.cc @@ -39,7 +39,7 @@ void KillHandler(int /* unused */) { // (non-nicely). This is useful when debugging. ++s_kill_handler_count; if (!g_notifier->Notify() || s_kill_handler_count > 2) - exit(-1); + exit(1); } // Format of arg: [::] @@ -77,6 +77,11 @@ int main(int argc, char** argv) { printf("Could not parse adb port number: %s\n", adb_port_str.c_str()); show_help = true; } + if (adb_port <= 0) { + printf("Invalid adb port number: %s. Adb port must be a " + "postivie integer.\n", adb_port_str.c_str()); + show_help = true; + } CommandLine::StringVector forward_args = command_line.GetArgs(); if (show_help || forward_args.empty()) { tools::ShowHelp( @@ -89,7 +94,7 @@ int main(int argc, char** argv) { " default is \n" " default is 127.0.0.1.", kDefaultAdbPort).c_str()); - return 0; + return 1; } g_notifier = new forwarder2::PipeNotifier(); diff --git a/tools/android/forwarder2/socket.cc b/tools/android/forwarder2/socket.cc index 898afc3d..35553bb 100644 --- a/tools/android/forwarder2/socket.cc +++ b/tools/android/forwarder2/socket.cc @@ -36,6 +36,10 @@ namespace { const int kNoTimeout = -1; const int kConnectTimeOut = 10; // Seconds. + +bool FamilyIsTCP(int family) { + return family == AF_INET || family == AF_INET6; +} } // namespace namespace forwarder2 { @@ -129,7 +133,6 @@ bool Socket::InitUnixSocket(const std::string& path, bool abstract) { abstract_ = abstract; family_ = PF_UNIX; addr_.addr_un.sun_family = family_; - if (abstract) { // Copied from net/base/unix_domain_socket_posix.cc // Convert the path given into abstract socket name. It must start with @@ -143,14 +146,12 @@ bool Socket::InitUnixSocket(const std::string& path, bool abstract) { memcpy(addr_.addr_un.sun_path, path.c_str(), path.size()); addr_len_ = sizeof(sockaddr_un); } - addr_ptr_ = reinterpret_cast(&addr_.addr_un); return InitSocketInternal(); } bool Socket::InitTcpSocket(const std::string& host, int port) { port_ = port; - if (host.empty()) { // Use localhost: INADDR_LOOPBACK family_ = AF_INET; @@ -159,8 +160,7 @@ bool Socket::InitTcpSocket(const std::string& host, int port) { } else if (!Resolve(host)) { return false; } - CHECK(family_ == AF_INET || family_ == AF_INET6) - << "Invalid socket family."; + CHECK(FamilyIsTCP(family_)) << "Invalid socket family."; if (family_ == AF_INET) { addr_.addr4.sin_port = htons(port_); addr_ptr_ = reinterpret_cast(&addr_.addr4); @@ -180,7 +180,7 @@ bool Socket::BindAndListen() { SetSocketError(); return false; } - if (port_ == 0) { + if (port_ == 0 && FamilyIsTCP(family_)) { SockAddr addr; memset(&addr, 0, sizeof(addr)); socklen_t addrlen = 0; @@ -225,19 +225,25 @@ bool Socket::Accept(Socket* new_socket) { } bool Socket::Connect() { - // Set non-block because we use select. - fcntl(socket_, F_SETFL, fcntl(socket_, F_GETFL) | O_NONBLOCK); + // Set non-block because we use select for connect. + const int kFlags = fcntl(socket_, F_GETFL); + DCHECK(!(kFlags & O_NONBLOCK)); + fcntl(socket_, F_SETFL, kFlags | O_NONBLOCK); errno = 0; if (HANDLE_EINTR(connect(socket_, addr_ptr_, addr_len_)) < 0 && errno != EINPROGRESS) { SetSocketError(); + PRESERVE_ERRNO_HANDLE_EINTR(fcntl(socket_, F_SETFL, kFlags)); return false; } // Wait for connection to complete, or receive a notification. if (!WaitForEvent(WRITE, kConnectTimeOut)) { SetSocketError(); + PRESERVE_ERRNO_HANDLE_EINTR(fcntl(socket_, F_SETFL, kFlags)); return false; } + // Disable non-block since our code assumes blocking semantics. + fcntl(socket_, F_SETFL, kFlags); return true; } @@ -271,7 +277,7 @@ bool Socket::Resolve(const std::string& host) { } int Socket::GetPort() { - if (family_ != AF_INET && family_ != AF_INET6) { + if (!FamilyIsTCP(family_)) { LOG(ERROR) << "Can't call GetPort() on an unix domain socket."; return 0; } -- cgit v1.1