• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_ADB_SERVER_H_
18 #define ANDROID_ADB_SERVER_H_
19 
20 /*
21  * Encapsulates a socket server that is bound to ADB port, and bridges ADB host
22  * connections and data to ADB daemon running inside the guest.
23  */
24 
25 /* Callback to be invoked wheh host ADB gets connected with the guest ADB.
26  * Param:
27  *  opaque - An opaque pointer associated with the guest. This pointer contains
28  *      the 'opaque' parameter that was passed to the adb_server_register_guest
29  *      routine.
30  *  connection - An opaque pointer defining the connection between the host and
31  *      the guest ADBs. This pointer must be used for further operations on the
32  *      host <-> guest connection.
33  */
34 typedef void (*adbguest_connect)(void* opaque, void* connection);
35 
36 /* Callback to be invoked wheh the host ADB sends data to the guest ADB.
37  * Param:
38  *  opaque - An opaque pointer associated with the guest. This pointer contains
39  *      the 'opaque' parameter that was passed to the adb_server_register_guest
40  *      routine.
41  *  connection - An opaque pointer defining the connection between the host and
42  *      the guest ADB. This pointer must be used for further operations on the
43  *      host <-> guest connection.
44  *  buff, size - Buffer that has ben sent by the host.
45  */
46 typedef void (*adbguest_read)(void* opaque,
47                               void* connection,
48                               const void* buff,
49                               int size);
50 
51 /* Callback to be invoked wheh the host ADB gets disconnected.
52  * Param:
53  *  opaque - An opaque pointer associated with the guest. This pointer contains
54  *      the 'opaque' parameter that was passed to the adb_server_register_guest
55  *      routine.
56  *  connection - An opaque pointer defining the connection between the host and
57  *      the guest ADB. This pointer must be used for further operations on the
58  *      host <-> guest connection.
59  */
60 typedef void (*adbguest_disconnect)(void* opaque, void* connection);
61 
62 /* Defines a set of callbacks for a guest ADB. */
63 typedef struct AdbGuestRoutines AdbGuestRoutines;
64 struct AdbGuestRoutines {
65     /* Callback to invoke when ADB host is connected. */
66     adbguest_connect     on_connected;
67     /* Callback to invoke when ADB host is disconnected. */
68     adbguest_disconnect  on_disconnect;
69     /* Callback to invoke when ADB host sends data. */
70     adbguest_read        on_read;
71 };
72 
73 /* Initializes ADB server.
74  * Param:
75  *  port - socket port that is assigned for communication with the ADB host. This
76  *      is 'base port' + 1.
77  * Return:
78  *  0 on success, or != 0 on failure.
79  */
80 extern int adb_server_init(int port);
81 
82 /* Checks if ADB server has been initialized. */
83 extern int adb_server_is_initialized(void);
84 
85 /* Registers ADB guest with the ADB server.
86  * There can be two cases here, as far as connection with the host is concerned:
87  *  - There is no host connection to immediately associate the guest with. In
88  *    this case the guest will be registered as "pending connection", and routine
89  *    will return.
90  *  - There is a pending host connection to associate with the new guest. In this
91  *    case the association will be made in this routine, and 'adbguest_connect'
92  *    callback will be called before this routine returns.
93  * Param:
94  *  opaque Opaque pointer associated with the guest. This pointer will be passed
95  *      back to thee guest API in callback routines.
96  *  callbacks Contains callback routines for the registering guest.
97  * Return:
98  *  An opaque pointer associated with the ADB guest on success, or NULL on
99  *  failure. The pointer returned from this routine must be passed into ADB
100  *  server API called from the guest.
101  */
102 extern void* adb_server_register_guest(void* opaque, AdbGuestRoutines* callbacks);
103 
104 /* Completes connection with the guest.
105  * This routine is called by the guest when it receives a 'start' request from
106  * ADB guest. This request tells the system that ADB daemon running inside the
107  * guest is ready to receive data.
108  * Param:
109  *  opaque - An opaque pointer returned from adb_server_register_guest.
110  */
111 extern void adb_server_complete_connection(void* opaque);
112 
113 /* Handles data received from the guest.
114  * Param:
115  *  opaque - An opaque pointer returned from adb_server_register_guest.
116  * data, size - Data buffer received from the guest.
117  */
118 extern void adb_server_on_guest_message(void* opaque,
119                                         const uint8_t* data,
120                                         int size);
121 
122 /* Notifies the ADB server that the guest has closed its connection.
123  * Param:
124  *  opaque - An opaque pointer returned from adb_server_register_guest.
125  */
126 extern void adb_server_on_guest_closed(void* opaque);
127 
128 #endif  /* ANDROID_ADB_SERVER_H_ */
129