VirtualBox

source: vbox/trunk/src/VBox/ValidationKit/utils/usb/UsbTestServiceInternal.h@ 77994

Last change on this file since 77994 was 76579, checked in by vboxsync, 6 years ago

ValKit: scm header guard alignment.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
1/* $Id: UsbTestServiceInternal.h 76579 2019-01-01 06:14:44Z vboxsync $ */
2/** @file
3 * UsbTestServ - Remote USB test configuration and execution server, Internal Header.
4 */
5
6/*
7 * Copyright (C) 2016-2019 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_INCLUDED_SRC_usb_UsbTestServiceInternal_h
28#define VBOX_INCLUDED_SRC_usb_UsbTestServiceInternal_h
29#ifndef RT_WITHOUT_PRAGMA_ONCE
30# pragma once
31#endif
32
33#include <iprt/getopt.h>
34#include <iprt/stream.h>
35
36#include "UsbTestServiceProtocol.h"
37
38RT_C_DECLS_BEGIN
39
40/** Opaque UTS transport layer specific client data. */
41typedef struct UTSTRANSPORTCLIENT *PUTSTRANSPORTCLIENT;
42typedef PUTSTRANSPORTCLIENT *PPUTSTRANSPORTCLIENT;
43
44/**
45 * Transport layer descriptor.
46 */
47typedef struct UTSTRANSPORT
48{
49 /** The name. */
50 char szName[16];
51 /** The description. */
52 const char *pszDesc;
53 /** Pointer to an array of options. */
54 PCRTGETOPTDEF paOpts;
55 /** The number of options in the array. */
56 size_t cOpts;
57
58 /**
59 * Print the usage information for this transport layer.
60 *
61 * @param pStream The stream to print the usage info to.
62 *
63 * @remarks This is only required if TXSTRANSPORT::cOpts is greater than 0.
64 */
65 DECLR3CALLBACKMEMBER(void, pfnUsage, (PRTSTREAM pStream));
66
67 /**
68 * Handle an option.
69 *
70 * When encountering an options that is not part of the base options, we'll call
71 * this method for each transport layer until one handles it.
72 *
73 * @retval VINF_SUCCESS if handled.
74 * @retval VERR_TRY_AGAIN if not handled.
75 * @retval VERR_INVALID_PARAMETER if we should exit with a non-zero status.
76 *
77 * @param ch The short option value.
78 * @param pVal Pointer to the value union.
79 *
80 * @remarks This is only required if TXSTRANSPORT::cOpts is greater than 0.
81 */
82 DECLR3CALLBACKMEMBER(int, pfnOption, (int ch, PCRTGETOPTUNION pVal));
83
84 /**
85 * Initializes the transport layer.
86 *
87 * @returns IPRT status code. On errors, the transport layer shall call
88 * RTMsgError to display the error details to the user.
89 */
90 DECLR3CALLBACKMEMBER(int, pfnInit, (void));
91
92 /**
93 * Terminate the transport layer, closing and freeing resources.
94 *
95 * On errors, the transport layer shall call RTMsgError to display the error
96 * details to the user.
97 */
98 DECLR3CALLBACKMEMBER(void, pfnTerm, (void));
99
100 /**
101 * Waits for a new client to connect and returns the client specific data on
102 * success.
103 */
104 DECLR3CALLBACKMEMBER(int, pfnWaitForConnect, (PPUTSTRANSPORTCLIENT ppClientNew));
105
106 /**
107 * Polls for incoming packets.
108 *
109 * @returns true if there are pending packets, false if there isn't.
110 * @param pClient The client to poll for data.
111 */
112 DECLR3CALLBACKMEMBER(bool, pfnPollIn, (PUTSTRANSPORTCLIENT pClient));
113
114 /**
115 * Adds any pollable handles to the poll set.
116 *
117 * @returns IPRT status code.
118 * @param hPollSet The poll set to add them to.
119 * @param pClient The transport client structure.
120 * @param idStart The handle ID to start at.
121 */
122 DECLR3CALLBACKMEMBER(int, pfnPollSetAdd, (RTPOLLSET hPollSet, PUTSTRANSPORTCLIENT pClient, uint32_t idStart));
123
124 /**
125 * Removes the given client frmo the given pollset.
126 *
127 * @returns IPRT status code.
128 * @param hPollSet The poll set to remove from.
129 * @param pClient The transport client structure.
130 * @param idStart The handle ID to remove.
131 */
132 DECLR3CALLBACKMEMBER(int, pfnPollSetRemove, (RTPOLLSET hPollSet, PUTSTRANSPORTCLIENT pClient, uint32_t idStart));
133
134 /**
135 * Receives an incoming packet.
136 *
137 * This will block until the data becomes available or we're interrupted by a
138 * signal or something.
139 *
140 * @returns IPRT status code. On error conditions other than VERR_INTERRUPTED,
141 * the current operation will be aborted when applicable. When
142 * interrupted, the transport layer will store the data until the next
143 * receive call.
144 *
145 * @param pClient The transport client structure.
146 * @param ppPktHdr Where to return the pointer to the packet we've
147 * read. This is allocated from the heap using
148 * RTMemAlloc (w/ UTSPKT_ALIGNMENT) and must be
149 * free by calling RTMemFree.
150 */
151 DECLR3CALLBACKMEMBER(int, pfnRecvPkt, (PUTSTRANSPORTCLIENT pClient, PPUTSPKTHDR ppPktHdr));
152
153 /**
154 * Sends an outgoing packet.
155 *
156 * This will block until the data has been written.
157 *
158 * @returns IPRT status code.
159 * @retval VERR_INTERRUPTED if interrupted before anything was sent.
160 *
161 * @param pClient The transport client structure.
162 * @param pPktHdr The packet to send. The size is given by
163 * aligning the size in the header by
164 * UTSPKT_ALIGNMENT.
165 */
166 DECLR3CALLBACKMEMBER(int, pfnSendPkt, (PUTSTRANSPORTCLIENT pClient, PCUTSPKTHDR pPktHdr));
167
168 /**
169 * Sends a babble packet and disconnects the client (if applicable).
170 *
171 * @param pClient The transport client structure.
172 * @param pPktHdr The packet to send. The size is given by
173 * aligning the size in the header by
174 * UTSPKT_ALIGNMENT.
175 * @param cMsSendTimeout The send timeout measured in milliseconds.
176 */
177 DECLR3CALLBACKMEMBER(void, pfnBabble, (PUTSTRANSPORTCLIENT pClient, PCUTSPKTHDR pPktHdr, RTMSINTERVAL cMsSendTimeout));
178
179 /**
180 * Notification about a client HOWDY.
181 *
182 * @param pClient The transport client structure.
183 */
184 DECLR3CALLBACKMEMBER(void, pfnNotifyHowdy, (PUTSTRANSPORTCLIENT pClient));
185
186 /**
187 * Notification about a client BYE.
188 *
189 * For connection oriented transport layers, it would be good to disconnect the
190 * client at this point.
191 *
192 * @param pClient The transport client structure.
193 */
194 DECLR3CALLBACKMEMBER(void, pfnNotifyBye, (PUTSTRANSPORTCLIENT pClient));
195
196 /**
197 * Notification about a REBOOT or SHUTDOWN.
198 *
199 * For connection oriented transport layers, stop listening for and
200 * accepting at this point.
201 */
202 DECLR3CALLBACKMEMBER(void, pfnNotifyReboot, (void));
203
204 /** Non-zero end marker. */
205 uint32_t u32EndMarker;
206} UTSTRANSPORT;
207/** Pointer to a const transport layer descriptor. */
208typedef const struct UTSTRANSPORT *PCUTSTRANSPORT;
209
210
211extern UTSTRANSPORT const g_TcpTransport;
212
213RT_C_DECLS_END
214
215#endif /* !VBOX_INCLUDED_SRC_usb_UsbTestServiceInternal_h */
216
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