VirtualBox

source: vbox/trunk/include/VBox/HostServices/VBoxHostChannel.h@ 64622

Last change on this file since 64622 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.8 KB
Line 
1/** @file
2 *
3 * Host Channel: the service definition.
4 */
5
6/*
7 * Copyright (C) 2012-2016 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___VBox_HostService_VBoxHostChannel_h
28#define ___VBox_HostService_VBoxHostChannel_h
29
30#include <VBox/VMMDev.h>
31#include <VBox/VBoxGuest2.h>
32#include <VBox/hgcmsvc.h>
33
34/*
35 * Host calls.
36 */
37#define VBOX_HOST_CHANNEL_HOST_FN_REGISTER 1
38#define VBOX_HOST_CHANNEL_HOST_FN_UNREGISTER 2
39
40/*
41 * Guest calls.
42 */
43#define VBOX_HOST_CHANNEL_FN_ATTACH 1 /* Attach to a channel. */
44#define VBOX_HOST_CHANNEL_FN_DETACH 2 /* Detach from the channel. */
45#define VBOX_HOST_CHANNEL_FN_SEND 3 /* Send data to the host. */
46#define VBOX_HOST_CHANNEL_FN_RECV 4 /* Receive data from the host. */
47#define VBOX_HOST_CHANNEL_FN_CONTROL 5 /* Generic data exchange using a channel instance. */
48#define VBOX_HOST_CHANNEL_FN_EVENT_WAIT 6 /* Blocking wait for a host event. */
49#define VBOX_HOST_CHANNEL_FN_EVENT_CANCEL 7 /* Cancel the blocking wait. */
50#define VBOX_HOST_CHANNEL_FN_QUERY 8 /* Generic data exchange using a channel name. */
51
52/*
53 * The host event ids for the guest.
54 */
55#define VBOX_HOST_CHANNEL_EVENT_CANCELLED 0 /* Event was cancelled by FN_EVENT_CANCEL. */
56#define VBOX_HOST_CHANNEL_EVENT_UNREGISTERED 1 /* Channel was unregistered on host. */
57#define VBOX_HOST_CHANNEL_EVENT_RECV 2 /* Data is available for receiving. */
58#define VBOX_HOST_CHANNEL_EVENT_USER 1000 /* Base of channel specific events. */
59
60/*
61 * The common control code ids for the VBOX_HOST_CHANNEL_FN_[CONTROL|QUERY]
62 */
63#define VBOX_HOST_CHANNEL_CTRL_EXISTS 0 /* Whether the channel instance or provider exists. */
64#define VBOX_HOST_CHANNEL_CTRL_USER 1000 /* Base of channel specific events. */
65
66#pragma pack(1)
67
68/* Parameter of VBOX_HOST_CHANNEL_EVENT_RECV */
69typedef struct VBOXHOSTCHANNELEVENTRECV
70{
71 uint32_t u32SizeAvailable; /* How many bytes can be read from the channel. */
72} VBOXHOSTCHANNELEVENTRECV;
73
74/*
75 * Guest calls.
76 */
77
78typedef struct VBoxHostChannelAttach
79{
80 VBoxGuestHGCMCallInfo hdr;
81 HGCMFunctionParameter name; /* IN linear ptr: Channel name utf8 nul terminated. */
82 HGCMFunctionParameter flags; /* IN uint32_t: Channel specific flags. */
83 HGCMFunctionParameter handle; /* OUT uint32_t: The channel handle. */
84} VBoxHostChannelAttach;
85
86typedef struct VBoxHostChannelDetach
87{
88 VBoxGuestHGCMCallInfo hdr;
89 HGCMFunctionParameter handle; /* IN uint32_t: The channel handle. */
90} VBoxHostChannelDetach;
91
92typedef struct VBoxHostChannelSend
93{
94 VBoxGuestHGCMCallInfo hdr;
95 HGCMFunctionParameter handle; /* IN uint32_t: The channel handle. */
96 HGCMFunctionParameter data; /* IN linear pointer: Data to be sent. */
97} VBoxHostChannelSend;
98
99typedef struct VBoxHostChannelRecv
100{
101 VBoxGuestHGCMCallInfo hdr;
102 HGCMFunctionParameter handle; /* IN uint32_t: The channel handle. */
103 HGCMFunctionParameter data; /* OUT linear pointer: Buffer for data to be received. */
104 HGCMFunctionParameter sizeReceived; /* OUT uint32_t: Bytes received. */
105 HGCMFunctionParameter sizeRemaining; /* OUT uint32_t: Bytes remaining in the channel. */
106} VBoxHostChannelRecv;
107
108typedef struct VBoxHostChannelControl
109{
110 VBoxGuestHGCMCallInfo hdr;
111 HGCMFunctionParameter handle; /* IN uint32_t: The channel handle. */
112 HGCMFunctionParameter code; /* IN uint32_t: The channel specific control code. */
113 HGCMFunctionParameter parm; /* IN linear pointer: Parameters of the function. */
114 HGCMFunctionParameter data; /* OUT linear pointer: Buffer for results. */
115 HGCMFunctionParameter sizeDataReturned; /* OUT uint32_t: Bytes returned in the 'data' buffer. */
116} VBoxHostChannelControl;
117
118typedef struct VBoxHostChannelEventWait
119{
120 VBoxGuestHGCMCallInfo hdr;
121 HGCMFunctionParameter handle; /* OUT uint32_t: The channel which generated the event. */
122 HGCMFunctionParameter id; /* OUT uint32_t: The event VBOX_HOST_CHANNEL_EVENT_*. */
123 HGCMFunctionParameter parm; /* OUT linear pointer: Parameters of the event. */
124 HGCMFunctionParameter sizeReturned; /* OUT uint32_t: Size of the parameters. */
125} VBoxHostChannelEventWait;
126
127typedef struct VBoxHostChannelEventCancel
128{
129 VBoxGuestHGCMCallInfo hdr;
130} VBoxHostChannelEventCancel;
131
132typedef struct VBoxHostChannelQuery
133{
134 VBoxGuestHGCMCallInfo hdr;
135 HGCMFunctionParameter name; /* IN linear ptr: Channel name utf8 nul terminated. */
136 HGCMFunctionParameter code; /* IN uint32_t: The control code. */
137 HGCMFunctionParameter parm; /* IN linear pointer: Parameters of the function. */
138 HGCMFunctionParameter data; /* OUT linear pointer: Buffer for results. */
139 HGCMFunctionParameter sizeDataReturned; /* OUT uint32_t: Bytes returned in the 'data' buffer. */
140} VBoxHostChannelQuery;
141
142
143/*
144 * Host calls
145 */
146
147typedef struct VBoxHostChannelHostRegister
148{
149 VBOXHGCMSVCPARM name; /* IN ptr: Channel name utf8 nul terminated. */
150 VBOXHGCMSVCPARM iface; /* IN ptr: VBOXHOSTCHANNELINTERFACE. */
151} VBoxHostChannelHostRegister;
152
153typedef struct VBoxHostChannelHostUnregister
154{
155 VBOXHGCMSVCPARM name; /* IN ptr: Channel name utf8 nul terminated */
156} VBoxHostChannelHostUnregister;
157
158/* The channel provider will invoke this callback to report channel events. */
159typedef struct VBOXHOSTCHANNELCALLBACKS
160{
161 /* A channel event occured.
162 *
163 * @param pvCallbacks The callback context specified in HostChannelAttach.
164 * @param pvChannel The channel instance returned by HostChannelAttach.
165 * @param u32Id The event id.
166 * @param pvEvent The event parameters.
167 * @param cbEvent The size of event parameters.
168 */
169 DECLR3CALLBACKMEMBER(void, HostChannelCallbackEvent, (void *pvCallbacks, void *pvChannel,
170 uint32_t u32Id, const void *pvEvent, uint32_t cbEvent));
171
172 /* The channel has been deleted by the provider. pvCallback will not be used anymore.
173 *
174 * @param pvCallbacks The callback context specified in HostChannelAttach.
175 * @param pvChannel The channel instance returned by HostChannelAttach.
176 */
177 DECLR3CALLBACKMEMBER(void, HostChannelCallbackDeleted, (void *pvCallbacks, void *pvChannel));
178} VBOXHOSTCHANNELCALLBACKS;
179
180typedef struct VBOXHOSTCHANNELINTERFACE
181{
182 /* The channel provider context. */
183 void *pvProvider;
184
185 /* A new channel is requested.
186 *
187 * @param pvProvider The provider context VBOXHOSTCHANNELINTERFACE::pvProvider.
188 * @param ppvChannel Where to store pointer to the channel instance created by the provider.
189 * @param u32Flags Channel specific flags.
190 * @param pCallbacks Callbacks to be invoked by the channel provider.
191 * @param pvCallbacks The context of callbacks.
192 */
193 DECLR3CALLBACKMEMBER(int, HostChannelAttach, (void *pvProvider, void **ppvChannel, uint32_t u32Flags,
194 VBOXHOSTCHANNELCALLBACKS *pCallbacks, void *pvCallbacks));
195
196 /* The channel is closed. */
197 DECLR3CALLBACKMEMBER(void, HostChannelDetach, (void *pvChannel));
198
199 /* The guest sends data to the channel. */
200 DECLR3CALLBACKMEMBER(int, HostChannelSend, (void *pvChannel, const void *pvData, uint32_t cbData));
201
202 /* The guest reads data from the channel. */
203 DECLR3CALLBACKMEMBER(int, HostChannelRecv, (void *pvChannel, void *pvData, uint32_t cbData,
204 uint32_t *pcbReceived, uint32_t *pcbRemaining));
205
206 /* The guest talks to the provider of the channel.
207 * @param pvChannel The channel instance. NULL if the target is the provider, rather than a channel.
208 */
209 DECLR3CALLBACKMEMBER(int, HostChannelControl, (void *pvChannel, uint32_t u32Code,
210 const void *pvParm, uint32_t cbParm,
211 const void *pvData, uint32_t cbData, uint32_t *pcbDataReturned));
212} VBOXHOSTCHANNELINTERFACE;
213
214#pragma pack()
215
216#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette