From 7664901a355b959f312e9acff5a0fd31b7139623 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 24 Feb 2015 15:51:19 -0800 Subject: Move transport declarations into transport.h. There are a few cloexec issues in here as an added bonus. Change-Id: I1699d719d733f47878bdba0454230cf5ab6a60b6 --- adb/adb.c | 1 + adb/adb.h | 54 +++++++--------------------------------------- adb/adb_auth.c | 1 + adb/adb_auth_client.c | 8 ++++--- adb/adb_client.c | 27 ++++++++++++++++++----- adb/adb_listeners.c | 1 + adb/adb_main.c | 4 +++- adb/commandline.c | 21 +++++++++--------- adb/file_sync_client.c | 13 +++++------ adb/file_sync_service.c | 14 ++++++------ adb/framebuffer_service.c | 30 ++++++++++++++------------ adb/remount_service.c | 7 +++--- adb/services.c | 29 +++++++++++++------------ adb/sockets.c | 14 ++++++------ adb/transport.c | 13 +++++------ adb/transport.h | 55 +++++++++++++++++++++++++++++++++++++++++++---- adb/transport_local.c | 11 +++++----- adb/transport_usb.c | 1 + adb/usb_linux.c | 21 ++++++++---------- adb/usb_linux_client.c | 12 +++++------ adb/usb_windows.c | 11 +++++----- 21 files changed, 193 insertions(+), 155 deletions(-) diff --git a/adb/adb.c b/adb/adb.c index d1f05e4..9c0bd8c 100644 --- a/adb/adb.c +++ b/adb/adb.c @@ -31,6 +31,7 @@ #include "adb.h" #include "adb_auth.h" #include "adb_listeners.h" +#include "transport.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) diff --git a/adb/adb.h b/adb/adb.h index 4181fbc..9a68871 100644 --- a/adb/adb.h +++ b/adb/adb.h @@ -18,10 +18,10 @@ #define __ADB_H #include +#include #include "adb_trace.h" #include "fdevent.h" -#include "transport.h" /* readx(), writex() */ #ifdef __cplusplus extern "C" { @@ -37,12 +37,15 @@ extern "C" { #define A_WRTE 0x45545257 #define A_AUTH 0x48545541 -#define A_VERSION 0x01000000 // ADB protocol version +// ADB protocol version. +#define A_VERSION 0x01000000 -#define ADB_VERSION_MAJOR 1 // Used for help/version information -#define ADB_VERSION_MINOR 0 // Used for help/version information +// Used for help/version information. +#define ADB_VERSION_MAJOR 1 +#define ADB_VERSION_MINOR 0 -#define ADB_SERVER_VERSION 32 // Increment this when we want to force users to start a new adb server +// Increment this when we want to force users to start a new adb server. +#define ADB_SERVER_VERSION 32 typedef struct amessage amessage; typedef struct apacket apacket; @@ -263,33 +266,11 @@ void fatal(const char *fmt, ...); void fatal_errno(const char *fmt, ...); void handle_packet(apacket *p, atransport *t); -void send_packet(apacket *p, atransport *t); void get_my_path(char *s, size_t maxLen); int launch_server(int server_port); int adb_main(int is_daemon, int server_port); - -/* transports are ref-counted -** get_device_transport does an acquire on your behalf before returning -*/ -void init_transport_registration(void); -int list_transports(char *buf, size_t bufsize, int long_listing); -void update_transports(void); - -asocket* create_device_tracker(void); - -/* Obtain a transport from the available transports. -** If state is != CS_ANY, only transports in that state are considered. -** If serial is non-NULL then only the device with that serial will be chosen. -** If no suitable transport is found, error is set. -*/ -atransport *acquire_one_transport(int state, transport_type ttype, const char* serial, char **error_out); -void add_transport_disconnect( atransport* t, adisconnect* dis ); -void remove_transport_disconnect( atransport* t, adisconnect* dis ); -void run_transport_disconnects( atransport* t ); -void kick_transport( atransport* t ); - /* initialize a transport object's func pointers and state */ #if ADB_HOST int get_available_local_transport_index(); @@ -297,22 +278,6 @@ int get_available_local_transport_index(); int init_socket_transport(atransport *t, int s, int port, int local); void init_usb_transport(atransport *t, usb_handle *usb, int state); -/* for MacOS X cleanup */ -void close_usb_devices(); - -/* cause new transports to be init'd and added to the list */ -int register_socket_transport(int s, const char *serial, int port, int local); - -/* these should only be used for the "adb disconnect" command */ -void unregister_transport(atransport *t); -void unregister_all_tcp_transports(); - -void register_usb_transport(usb_handle *h, const char *serial, const char *devpath, unsigned writeable); - -/* this should only be used for transports with connection_state == CS_NOPERM */ -void unregister_usb_transport(usb_handle *usb); - -atransport *find_transport(const char *serial); #if ADB_HOST atransport* find_emulator_transport_by_adb_port(int adb_port); #endif @@ -343,9 +308,6 @@ void set_verity_enabled_state_service(int fd, void* cookie); apacket *get_apacket(void); void put_apacket(apacket *p); -int check_header(apacket *p); -int check_data(apacket *p); - // Define it if you want to dump packets. #define DEBUG_PACKETS 0 diff --git a/adb/adb_auth.c b/adb/adb_auth.c index 11a89b0..c236b64 100644 --- a/adb/adb_auth.c +++ b/adb/adb_auth.c @@ -24,6 +24,7 @@ #include "adb.h" #include "adb_auth.h" +#include "transport.h" #include "sysdeps.h" int auth_enabled = 0; diff --git a/adb/adb_auth_client.c b/adb/adb_auth_client.c index 55e9dca..7be883c 100644 --- a/adb/adb_auth_client.c +++ b/adb/adb_auth_client.c @@ -14,18 +14,20 @@ * limitations under the License. */ +#include #include #include -#include -#include -#include #include "sysdeps.h" + #include "adb.h" #include "adb_auth.h" +#include "cutils/list.h" +#include "cutils/sockets.h" #include "fdevent.h" #include "mincrypt/rsa.h" #include "mincrypt/sha.h" +#include "transport.h" #define TRACE_TAG TRACE_AUTH diff --git a/adb/adb_client.c b/adb/adb_client.c index ac5e15a..9bf7b2b 100644 --- a/adb/adb_client.c +++ b/adb/adb_client.c @@ -1,17 +1,34 @@ -#include -#include -#include +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include #include #include -#include -#include +#include +#include +#include #include +#include #include "sysdeps.h" #define TRACE_TAG TRACE_ADB #include "adb_client.h" +#include "transport.h" +#include "zipfile/zipfile.h" static transport_type __adb_transport = kTransportAny; static const char* __adb_serial = NULL; diff --git a/adb/adb_listeners.c b/adb/adb_listeners.c index cccc520..f68b876 100644 --- a/adb/adb_listeners.c +++ b/adb/adb_listeners.c @@ -20,6 +20,7 @@ #include #include "sysdeps.h" +#include "transport.h" int gListenAll = 0; /* Not static because it is used in commandline.c. */ diff --git a/adb/adb_main.c b/adb/adb_main.c index 57a15dd..f8475c7 100644 --- a/adb/adb_main.c +++ b/adb/adb_main.c @@ -21,10 +21,12 @@ #include #include +#include "sysdeps.h" + #include "adb.h" #include "adb_auth.h" #include "adb_listeners.h" -#include "sysdeps.h" +#include "transport.h" #if !ADB_HOST #include diff --git a/adb/commandline.c b/adb/commandline.c index 830f290..2a02c38 100644 --- a/adb/commandline.c +++ b/adb/commandline.c @@ -14,30 +14,31 @@ * limitations under the License. */ -#include -#include -#include -#include +#include +#include #include -#include #include #include -#include +#include +#include +#include +#include #include -#include -#include - -#include "sysdeps.h" +#include #if !defined(_WIN32) #include +#include #endif +#include "sysdeps.h" + #define TRACE_TAG TRACE_ADB #include "adb.h" #include "adb_client.h" #include "adb_auth.h" #include "file_sync_service.h" +#include "transport.h" static int do_cmd(transport_type ttype, char* serial, char *cmd, ...); diff --git a/adb/file_sync_client.c b/adb/file_sync_client.c index f7828a6..cf446e2 100644 --- a/adb/file_sync_client.c +++ b/adb/file_sync_client.c @@ -14,24 +14,25 @@ * limitations under the License. */ +#include +#include +#include #include #include #include -#include #include #include -#include -#include -#include #include -#include +#include #include #include "sysdeps.h" + #include "adb.h" #include "adb_client.h" #include "file_sync_service.h" - +#include "transport.h" +#include "zipfile/zipfile.h" static unsigned long long total_bytes; static long long start_time; diff --git a/adb/file_sync_service.c b/adb/file_sync_service.c index 7de82b7..0944e5d 100644 --- a/adb/file_sync_service.c +++ b/adb/file_sync_service.c @@ -14,24 +14,24 @@ * limitations under the License. */ -#include +#include +#include +#include #include +#include #include - #include #include -#include -#include #include +#include -#include -#include -#include #include "sysdeps.h" #define TRACE_TAG TRACE_SYNC #include "adb.h" #include "file_sync_service.h" +#include "private/android_filesystem_config.h" +#include "transport.h" /* TODO: use fs_config to configure permissions on /data */ static bool is_on_system(const char *name) { diff --git a/adb/framebuffer_service.c b/adb/framebuffer_service.c index 61578aa..5665a56 100644 --- a/adb/framebuffer_service.c +++ b/adb/framebuffer_service.c @@ -14,21 +14,23 @@ * limitations under the License. */ -#include +#include +#include +#include #include -#include +#include #include -#include -#include +#include +#include #include #include +#include -#include "fdevent.h" -#include "adb.h" +#include "sysdeps.h" -#include -#include -#include +#include "adb.h" +#include "fdevent.h" +#include "transport.h" /* TODO: ** - sync with vsync to avoid tearing @@ -68,15 +70,15 @@ void framebuffer_service(int fd, void *cookie) if (pid == 0) { dup2(fds[1], STDOUT_FILENO); - close(fds[0]); - close(fds[1]); + adb_close(fds[0]); + adb_close(fds[1]); const char* command = "screencap"; const char *args[2] = {command, NULL}; execvp(command, (char**)args); exit(1); } - close(fds[1]); + adb_close(fds[1]); fd_screencap = fds[0]; /* read w, h & format */ @@ -174,9 +176,9 @@ void framebuffer_service(int fd, void *cookie) } done: - close(fds[0]); + adb_close(fds[0]); TEMP_FAILURE_RETRY(waitpid(pid, NULL, 0)); pipefail: - close(fd); + adb_close(fd); } diff --git a/adb/remount_service.c b/adb/remount_service.c index d7b0dd1..7e5613a 100644 --- a/adb/remount_service.c +++ b/adb/remount_service.c @@ -14,8 +14,6 @@ * limitations under the License. */ -#include "sysdeps.h" - #include #include #include @@ -25,11 +23,12 @@ #include #include -#include "cutils/properties.h" +#include "sysdeps.h" #define TRACE_TAG TRACE_ADB #include "adb.h" - +#include "cutils/properties.h" +#include "transport.h" static int system_ro = 1; static int vendor_ro = 1; diff --git a/adb/services.c b/adb/services.c index bd210a8..2325c0f 100644 --- a/adb/services.c +++ b/adb/services.c @@ -14,29 +14,30 @@ * limitations under the License. */ +#include #include -#include #include -#include +#include #include -#include + +#ifndef _WIN32 +#include +#include +#include +#include +#endif + +#if !ADB_HOST +#include "cutils/android_reboot.h" +#include "cutils/properties.h" +#endif #include "sysdeps.h" #define TRACE_TAG TRACE_SERVICES #include "adb.h" #include "file_sync_service.h" - -#if ADB_HOST -# ifndef HAVE_WINSOCK -# include -# include -# include -# endif -#else -# include -# include -#endif +#include "transport.h" typedef struct stinfo stinfo; diff --git a/adb/sockets.c b/adb/sockets.c index 1598c3c..7da6d57 100644 --- a/adb/sockets.c +++ b/adb/sockets.c @@ -14,21 +14,21 @@ * limitations under the License. */ +#include +#include #include #include -#include -#include #include -#include +#include #include "sysdeps.h" -#if !ADB_HOST -#include -#endif - #define TRACE_TAG TRACE_SOCKETS #include "adb.h" +#if !ADB_HOST +#include "cutils/properties.h" +#endif +#include "transport.h" ADB_MUTEX_DEFINE( socket_list_lock ); diff --git a/adb/transport.c b/adb/transport.c index ffe59da..4904cd0 100644 --- a/adb/transport.c +++ b/adb/transport.c @@ -14,13 +14,15 @@ * limitations under the License. */ +#include "sysdeps.h" + +#include "transport.h" + +#include #include #include -#include #include -#include - -#include "sysdeps.h" +#include #define TRACE_TAG TRACE_TRANSPORT #include "adb.h" @@ -494,8 +496,7 @@ create_device_tracker(void) /* call this function each time the transport list has changed */ -void update_transports(void) -{ +void update_transports(void) { char buffer[1024]; int len; device_tracker* tracker; diff --git a/adb/transport.h b/adb/transport.h index d95ad32..9802b91 100644 --- a/adb/transport.h +++ b/adb/transport.h @@ -19,17 +19,64 @@ #include +#include "adb.h" + #ifdef __cplusplus extern "C" { #endif -/* convenience wrappers around read/write that will retry on -** EINTR and/or short read/write. Returns 0 on success, -1 -** on error or EOF. -*/ +/* + * Convenience wrappers around read/write that will retry on + * EINTR and/or short read/write. Returns 0 on success, -1 + * on error or EOF. + */ int readx(int fd, void *ptr, size_t len); int writex(int fd, const void *ptr, size_t len); +/* + * Obtain a transport from the available transports. + * If state is != CS_ANY, only transports in that state are considered. + * If serial is non-NULL then only the device with that serial will be chosen. + * If no suitable transport is found, error is set. + */ +atransport* acquire_one_transport(int state, transport_type ttype, + const char* serial, char** error_out); +void add_transport_disconnect(atransport* t, adisconnect* dis); +void remove_transport_disconnect(atransport* t, adisconnect* dis); +void kick_transport(atransport* t); +void run_transport_disconnects(atransport* t); +void update_transports(void); + +/* transports are ref-counted +** get_device_transport does an acquire on your behalf before returning +*/ +void init_transport_registration(void); +int list_transports(char* buf, size_t bufsize, int long_listing); +atransport* find_transport(const char* serial); + +void register_usb_transport(usb_handle* h, const char* serial, + const char* devpath, unsigned writeable); + +/* cause new transports to be init'd and added to the list */ +int register_socket_transport(int s, const char* serial, int port, int local); + +/* this should only be used for transports with connection_state == CS_NOPERM */ +void unregister_usb_transport(usb_handle* usb); + +/* these should only be used for the "adb disconnect" command */ +void unregister_transport(atransport* t); +void unregister_all_tcp_transports(); + +int check_header(apacket* p); +int check_data(apacket* p); + +/* for MacOS X cleanup */ +void close_usb_devices(); + +void send_packet(apacket* p, atransport* t); + +asocket* create_device_tracker(void); + #ifdef __cplusplus } #endif diff --git a/adb/transport_local.c b/adb/transport_local.c index 6c4e220..e07f2f7 100644 --- a/adb/transport_local.c +++ b/adb/transport_local.c @@ -14,19 +14,20 @@ * limitations under the License. */ +#include #include #include #include -#include +#include #include "sysdeps.h" -#include -#if !ADB_HOST -#include -#endif #define TRACE_TAG TRACE_TRANSPORT #include "adb.h" +#if !ADB_HOST +#include "cutils/properties.h" +#endif +#include "transport.h" #if ADB_HOST /* we keep a list of opened transports. The atransport struct knows to which diff --git a/adb/transport_usb.c b/adb/transport_usb.c index 1138ddd..37a8219 100644 --- a/adb/transport_usb.c +++ b/adb/transport_usb.c @@ -22,6 +22,7 @@ #define TRACE_TAG TRACE_TRANSPORT #include "adb.h" +#include "transport.h" static int remote_read(apacket *p, atransport *t) { diff --git a/adb/usb_linux.c b/adb/usb_linux.c index d242c8a..d03f8be 100644 --- a/adb/usb_linux.c +++ b/adb/usb_linux.c @@ -14,33 +14,30 @@ * limitations under the License. */ +#include +#include +#include +#include +#include +#include #include #include -#include #include - #include -#include #include -#include -#include -#include -#include - -#include -#include +#include +#include #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 20) #include #else #include #endif -#include #include "sysdeps.h" #define TRACE_TAG TRACE_USB #include "adb.h" - +#include "transport.h" /* usb scan debugging is waaaay too verbose */ #define DBGX(x...) diff --git a/adb/usb_linux_client.c b/adb/usb_linux_client.c index ee6b37c..c88b258 100644 --- a/adb/usb_linux_client.c +++ b/adb/usb_linux_client.c @@ -14,22 +14,22 @@ * limitations under the License. */ +#include +#include +#include +#include #include #include -#include #include - -#include -#include #include #include -#include -#include +#include #include "sysdeps.h" #define TRACE_TAG TRACE_USB #include "adb.h" +#include "transport.h" #define MAX_PACKET_SIZE_FS 64 #define MAX_PACKET_SIZE_HS 512 diff --git a/adb/usb_windows.c b/adb/usb_windows.c index a2d7226..3c5533b 100644 --- a/adb/usb_windows.c +++ b/adb/usb_windows.c @@ -14,19 +14,20 @@ * limitations under the License. */ -#include -#include -#include -#include -#include +#include // winsock.h *must* be included before windows.h. #include +#include #include #include +#include +#include +#include #include "sysdeps.h" #define TRACE_TAG TRACE_USB #include "adb.h" +#include "transport.h" /** Structure usb_handle describes our connection to the usb device via AdbWinApi.dll. This structure is returned from usb_open() routine and -- cgit v1.1