blob: 33ede53d45e469967926ae12a79c25ef4be9f1ff [file] [log] [blame]
Vladimir Chtchetkined86c7242011-12-09 15:45:46 -08001/*
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 */
34typedef 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 */
46typedef 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 */
60typedef void (*adbguest_disconnect)(void* opaque, void* connection);
61
62/* Defines a set of callbacks for a guest ADB. */
63typedef struct AdbGuestRoutines AdbGuestRoutines;
64struct 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 */
80extern int adb_server_init(int port);
81
82/* Checks if ADB server has been initialized. */
83extern 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 */
102extern 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 */
111extern 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 */
118extern 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 */
126extern void adb_server_on_guest_closed(void* opaque);
127
128#endif /* ANDROID_ADB_SERVER_H_ */