VirtualBox

source: vbox/trunk/src/VBox/Devices/Audio/AudioTestServiceInternal.h@ 104473

Last change on this file since 104473 was 98103, checked in by vboxsync, 23 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.7 KB
Line 
1/* $Id: AudioTestServiceInternal.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * AudioTestService - Audio test execution server, Internal Header.
4 */
5
6/*
7 * Copyright (C) 2021-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef VBOX_INCLUDED_SRC_Audio_AudioTestServiceInternal_h
29#define VBOX_INCLUDED_SRC_Audio_AudioTestServiceInternal_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include <iprt/getopt.h>
35#include <iprt/stream.h>
36
37#include "AudioTestServiceProtocol.h"
38
39RT_C_DECLS_BEGIN
40
41/** Opaque ATS transport layer specific client data. */
42typedef struct ATSTRANSPORTCLIENT *PATSTRANSPORTCLIENT;
43typedef PATSTRANSPORTCLIENT *PPATSTRANSPORTCLIENT;
44
45/** Opaque ATS transport specific instance data. */
46typedef struct ATSTRANSPORTINST *PATSTRANSPORTINST;
47typedef PATSTRANSPORTINST *PPATSTRANSPORTINST;
48
49/**
50 * Transport layer descriptor.
51 */
52typedef struct ATSTRANSPORT
53{
54 /** The name. */
55 char szName[16];
56 /** The description. */
57 const char *pszDesc;
58 /** Pointer to an array of options. */
59 PCRTGETOPTDEF paOpts;
60 /** The number of options in the array. */
61 size_t cOpts;
62
63 /**
64 * Print the usage information for this transport layer.
65 *
66 * @param pStream The stream to print the usage info to.
67 *
68 * @remarks This is only required if TXSTRANSPORT::cOpts is greater than 0.
69 */
70 DECLR3CALLBACKMEMBER(void, pfnUsage,(PRTSTREAM pStream));
71
72 /**
73 * Creates a transport instance.
74 *
75 * @returns IPRT status code. On errors, the transport layer shall call
76 * RTMsgError to display the error details to the user.
77 * @param ppThis Where to return the created transport instance on success.
78 */
79 DECLR3CALLBACKMEMBER(int, pfnCreate, (PPATSTRANSPORTINST ppThis));
80
81 /**
82 * Destroys a transport instance.
83 *
84 * On errors, the transport layer shall call RTMsgError to display the error
85 * details to the user.
86 *
87 * @returns IPRT status code. On errors, the transport layer shall call
88 * RTMsgError to display the error details to the user.
89 * @param pThis The transport instance.
90 * The pointer will be invalid on return.
91 */
92 DECLR3CALLBACKMEMBER(int, pfnDestroy, (PATSTRANSPORTINST pThis));
93
94 /**
95 * Handle an option.
96 *
97 * When encountering an options that is not part of the base options, we'll call
98 * this method for each transport layer until one handles it.
99 *
100 * @retval VINF_SUCCESS if handled.
101 * @retval VERR_TRY_AGAIN if not handled.
102 * @retval VERR_INVALID_PARAMETER if we should exit with a non-zero status.
103 *
104 * @param pThis Transport instance to set options for.
105 * @param ch The short option value.
106 * @param pVal Pointer to the value union.
107 *
108 * @remarks This is only required if TXSTRANSPORT::cOpts is greater than 0.
109 */
110 DECLR3CALLBACKMEMBER(int, pfnOption,(PATSTRANSPORTINST pThis, int ch, PCRTGETOPTUNION pVal));
111
112 /**
113 * Starts a transport instance.
114 *
115 * @returns IPRT status code. On errors, the transport layer shall call
116 * RTMsgError to display the error details to the user.
117 * @param pThis Transport instance to initialize.
118 */
119 DECLR3CALLBACKMEMBER(int, pfnStart, (PATSTRANSPORTINST pThis));
120
121 /**
122 * Stops a transport instance, closing and freeing resources.
123 *
124 * On errors, the transport layer shall call RTMsgError to display the error
125 * details to the user.
126 *
127 * @param pThis The transport instance.
128 */
129 DECLR3CALLBACKMEMBER(void, pfnStop, (PATSTRANSPORTINST pThis));
130
131 /**
132 * Waits for a new client to connect and returns the client specific data on
133 * success.
134 *
135 * @returns VBox status code.
136 * @param pThis The transport instance.
137 * @param msTimeout Timeout (in ms) waiting for a connection to be established.
138 * Use RT_INDEFINITE_WAIT to wait indefinitely.
139 * This might or might not be supported by the specific transport implementation.
140 * @param pfFromServer Returns \c true if the returned client is from a remote server (called a reverse connection),
141 * or \c false if not (regular client). Optional and can be NULL.
142 * @param ppClientNew Where to return the allocated client on success.
143 * Must be destroyed with pfnDisconnect() when done.
144 */
145 DECLR3CALLBACKMEMBER(int, pfnWaitForConnect, (PATSTRANSPORTINST pThis, RTMSINTERVAL msTimeout, bool *pfFromServer, PPATSTRANSPORTCLIENT ppClientNew));
146
147 /**
148 * Disconnects a client and frees up its resources.
149 *
150 * @param pThis The transport instance.
151 * @param pClient Client to disconnect.
152 * The pointer will be invalid after calling.
153 */
154 DECLR3CALLBACKMEMBER(void, pfnDisconnect, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient));
155
156 /**
157 * Polls for incoming packets.
158 *
159 * @returns true if there are pending packets, false if there isn't.
160 * @param pThis The transport instance.
161 * @param pClient The client to poll for data.
162 */
163 DECLR3CALLBACKMEMBER(bool, pfnPollIn, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient));
164
165 /**
166 * Adds any pollable handles to the poll set.
167 *
168 * @returns IPRT status code.
169 * @param pThis The transport instance.
170 * @param hPollSet The poll set to add them to.
171 * @param pClient The transport client structure.
172 * @param idStart The handle ID to start at.
173 */
174 DECLR3CALLBACKMEMBER(int, pfnPollSetAdd, (PATSTRANSPORTINST pThis, RTPOLLSET hPollSet, PATSTRANSPORTCLIENT pClient, uint32_t idStart));
175
176 /**
177 * Removes the given client frmo the given pollset.
178 *
179 * @returns IPRT status code.
180 * @param pThis The transport instance.
181 * @param hPollSet The poll set to remove from.
182 * @param pClient The transport client structure.
183 * @param idStart The handle ID to remove.
184 */
185 DECLR3CALLBACKMEMBER(int, pfnPollSetRemove, (PATSTRANSPORTINST pThis, RTPOLLSET hPollSet, PATSTRANSPORTCLIENT pClient, uint32_t idStart));
186
187 /**
188 * Receives an incoming packet.
189 *
190 * This will block until the data becomes available or we're interrupted by a
191 * signal or something.
192 *
193 * @returns IPRT status code. On error conditions other than VERR_INTERRUPTED,
194 * the current operation will be aborted when applicable. When
195 * interrupted, the transport layer will store the data until the next
196 * receive call.
197 *
198 * @param pThis The transport instance.
199 * @param pClient The transport client structure.
200 * @param ppPktHdr Where to return the pointer to the packet we've
201 * read. This is allocated from the heap using
202 * RTMemAlloc (w/ ATSPKT_ALIGNMENT) and must be
203 * free by calling RTMemFree.
204 */
205 DECLR3CALLBACKMEMBER(int, pfnRecvPkt, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient, PPATSPKTHDR ppPktHdr));
206
207 /**
208 * Sends an outgoing packet.
209 *
210 * This will block until the data has been written.
211 *
212 * @returns IPRT status code.
213 * @retval VERR_INTERRUPTED if interrupted before anything was sent.
214 *
215 * @param pThis The transport instance.
216 * @param pClient The transport client structure.
217 * @param pPktHdr The packet to send. The size is given by
218 * aligning the size in the header by
219 * ATSPKT_ALIGNMENT.
220 */
221 DECLR3CALLBACKMEMBER(int, pfnSendPkt, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient, PCATSPKTHDR pPktHdr));
222
223 /**
224 * Sends a babble packet and disconnects the client (if applicable).
225 *
226 * @param pThis The transport instance.
227 * @param pClient The transport client structure.
228 * @param pPktHdr The packet to send. The size is given by
229 * aligning the size in the header by
230 * ATSPKT_ALIGNMENT.
231 * @param cMsSendTimeout The send timeout measured in milliseconds.
232 */
233 DECLR3CALLBACKMEMBER(void, pfnBabble, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient, PCATSPKTHDR pPktHdr, RTMSINTERVAL cMsSendTimeout));
234
235 /**
236 * Notification about a client HOWDY.
237 *
238 * @param pThis The transport instance.
239 * @param pClient The transport client structure.
240 */
241 DECLR3CALLBACKMEMBER(void, pfnNotifyHowdy, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient));
242
243 /**
244 * Notification about a client BYE.
245 *
246 * For connection oriented transport layers, it would be good to disconnect the
247 * client at this point.
248 *
249 * @param pThis The transport instance.
250 * @param pClient The transport client structure.
251 */
252 DECLR3CALLBACKMEMBER(void, pfnNotifyBye, (PATSTRANSPORTINST pThis, PATSTRANSPORTCLIENT pClient));
253
254 /**
255 * Notification about a REBOOT or SHUTDOWN.
256 *
257 * For connection oriented transport layers, stop listening for and
258 * accepting at this point.
259 *
260 * @param pThis The transport instance.
261 */
262 DECLR3CALLBACKMEMBER(void, pfnNotifyReboot, (PATSTRANSPORTINST pThis));
263
264 /** Non-zero end marker. */
265 uint32_t u32EndMarker;
266} ATSTRANSPORT;
267/** Pointer to a const transport layer descriptor. */
268typedef const struct ATSTRANSPORT *PCATSTRANSPORT;
269
270
271extern ATSTRANSPORT const g_TcpTransport;
272
273RT_C_DECLS_END
274
275#endif /* !VBOX_INCLUDED_SRC_Audio_AudioTestServiceInternal_h */
276
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