summaryrefslogtreecommitdiffstats
path: root/tools/android
diff options
context:
space:
mode:
authorfelipeg@chromium.org <felipeg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 17:16:43 +0000
committerfelipeg@chromium.org <felipeg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-16 17:16:43 +0000
commit5d26b477fdbcdee36696db414806e043e2c09d97 (patch)
tree5eb77ef8de312cb18b7bf9a1b8cbd98c6e828ae8 /tools/android
parent774842a3ea78ab60b4f2856d12b42a92fb513f9c (diff)
downloadchromium_src-5d26b477fdbcdee36696db414806e043e2c09d97.zip
chromium_src-5d26b477fdbcdee36696db414806e043e2c09d97.tar.gz
chromium_src-5d26b477fdbcdee36696db414806e043e2c09d97.tar.bz2
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
Diffstat (limited to 'tools/android')
-rw-r--r--tools/android/forwarder2/device_forwarder_main.cc2
-rw-r--r--tools/android/forwarder2/host_controller.cc4
-rw-r--r--tools/android/forwarder2/host_forwarder_main.cc9
-rw-r--r--tools/android/forwarder2/socket.cc24
4 files changed, 26 insertions, 13 deletions
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: <Device port>[:<Forward to port>:<Forward to address>]
@@ -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) {
" <Forward to port> default is <Device port>\n"
" <Forward to address> 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<sockaddr*>(&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<sockaddr*>(&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;
}