diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2011-08-04 13:52:12 -0700 |
---|---|---|
committer | Vladimir Chtchetkine <vchtchetkine@google.com> | 2011-08-05 10:17:39 -0700 |
commit | 39e2630dd95ee8b9dc980fedee88966227811b1b (patch) | |
tree | fbd03e7d4e0aa6694aaf8d030be73e629df9d180 | |
parent | 4306ca7d446c26752ecd9f724590487d68a27f10 (diff) | |
download | hardware_libhardware-39e2630dd95ee8b9dc980fedee88966227811b1b.zip hardware_libhardware-39e2630dd95ee8b9dc980fedee88966227811b1b.tar.gz hardware_libhardware-39e2630dd95ee8b9dc980fedee88966227811b1b.tar.bz2 |
Enable connection to QEMUD via pipe.
With the new model, we will try to connect client via pipe first, and only if
the pipe connection is not available we will fall back to the socket connection.
Change-Id: I7112ff3cb63e1f82a004b80b9ae579d97e15e029
-rw-r--r-- | include/hardware/qemu_pipe.h | 2 | ||||
-rw-r--r-- | include/hardware/qemud.h | 55 |
2 files changed, 32 insertions, 25 deletions
diff --git a/include/hardware/qemu_pipe.h b/include/hardware/qemu_pipe.h index 570af70..930228e 100644 --- a/include/hardware/qemu_pipe.h +++ b/include/hardware/qemu_pipe.h @@ -20,8 +20,6 @@ #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> -#include <hardware/qemud.h> -#include <hardware/qemu_pipe.h> #include <pthread.h> /* for pthread_once() */ #include <stdlib.h> #include <stdio.h> diff --git a/include/hardware/qemud.h b/include/hardware/qemud.h index 874a32f..5c39f9c 100644 --- a/include/hardware/qemud.h +++ b/include/hardware/qemud.h @@ -18,10 +18,12 @@ #define ANDROID_INCLUDE_HARDWARE_QEMUD_H #include <cutils/sockets.h> +#include "qemu_pipe.h" /* the following is helper code that is used by the QEMU-specific * hardware HAL modules to communicate with the emulator program - * through the 'qemud' multiplexing daemon. + * through the 'qemud' multiplexing daemon, or through the qemud + * pipe. * * see the documentation comments for details in * development/emulator/qemud/qemud.c @@ -64,30 +66,37 @@ qemud_channel_open(const char* name) int fd; int namelen = strlen(name); char answer[2]; + char pipe_name[256]; - /* connect to qemud control socket */ - fd = socket_local_client( "qemud", - ANDROID_SOCKET_NAMESPACE_RESERVED, - SOCK_STREAM ); + /* First, try to connect to the pipe. */ + snprintf(pipe_name, sizeof(pipe_name), "qemud:%s", name); + fd = qemu_pipe_open(pipe_name); if (fd < 0) { - D("no qemud control socket: %s", strerror(errno)); - return -1; - } - - /* send service name to connect */ - if (qemud_fd_write(fd, name, namelen) != namelen) { - D("can't send service name to qemud: %s", - strerror(errno)); - close(fd); - return -1; - } - - /* read answer from daemon */ - if (qemud_fd_read(fd, answer, 2) != 2 || - answer[0] != 'O' || answer[1] != 'K') { - D("cant' connect to %s service through qemud", name); - close(fd); - return -1; + D("QEMUD pipe is not available for %s: %s", name, strerror(errno)); + /* If pipe is not available, connect to qemud control socket */ + fd = socket_local_client( "qemud", + ANDROID_SOCKET_NAMESPACE_RESERVED, + SOCK_STREAM ); + if (fd < 0) { + D("no qemud control socket: %s", strerror(errno)); + return -1; + } + + /* send service name to connect */ + if (qemud_fd_write(fd, name, namelen) != namelen) { + D("can't send service name to qemud: %s", + strerror(errno)); + close(fd); + return -1; + } + + /* read answer from daemon */ + if (qemud_fd_read(fd, answer, 2) != 2 || + answer[0] != 'O' || answer[1] != 'K') { + D("cant' connect to %s service through qemud", name); + close(fd); + return -1; + } } return fd; } |