VirtualBox

source: vbox/trunk/src/VBox/Storage/testcase/VDScript.h@ 53654

Last change on this file since 53654 was 52371, checked in by vboxsync, 10 years ago

Storage/tstVDIo: Plug leaks, modifications and start turning it into a proper testcase for unit tests

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.4 KB
Line 
1/** @file
2 *
3 * VBox HDD container test utility - scripting engine.
4 */
5
6/*
7 * Copyright (C) 2013 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#ifndef _VDScript_h__
18#define _VDScript_h__
19
20/** Handle to the scripting context. */
21typedef struct VDSCRIPTCTXINT *VDSCRIPTCTX;
22/** Pointer to a scripting context handle. */
23typedef VDSCRIPTCTX *PVDSCRIPTCTX;
24
25/**
26 * Supprted primitive types in the scripting engine.
27 */
28typedef enum VDSCRIPTTYPE
29{
30 /** Invalid type, do not use. */
31 VDSCRIPTTYPE_INVALID = 0,
32 /** void type, used for no return value of methods. */
33 VDSCRIPTTYPE_VOID,
34 /** unsigned 8bit integer. */
35 VDSCRIPTTYPE_UINT8,
36 VDSCRIPTTYPE_INT8,
37 VDSCRIPTTYPE_UINT16,
38 VDSCRIPTTYPE_INT16,
39 VDSCRIPTTYPE_UINT32,
40 VDSCRIPTTYPE_INT32,
41 VDSCRIPTTYPE_UINT64,
42 VDSCRIPTTYPE_INT64,
43 VDSCRIPTTYPE_STRING,
44 VDSCRIPTTYPE_BOOL,
45 VDSCRIPTTYPE_POINTER,
46 /** As usual, the 32bit blowup hack. */
47 VDSCRIPTTYPE_32BIT_HACK = 0x7fffffff
48} VDSCRIPTTYPE;
49/** Pointer to a type. */
50typedef VDSCRIPTTYPE *PVDSCRIPTTYPE;
51/** Pointer to a const type. */
52typedef const VDSCRIPTTYPE *PCVDSCRIPTTYPE;
53
54/**
55 * Script argument.
56 */
57typedef struct VDSCRIPTARG
58{
59 /** Type of the argument. */
60 VDSCRIPTTYPE enmType;
61 /** Value */
62 union
63 {
64 uint8_t u8;
65 int8_t i8;
66 uint16_t u16;
67 int16_t i16;
68 uint32_t u32;
69 int32_t i32;
70 uint64_t u64;
71 int64_t i64;
72 const char *psz;
73 bool f;
74 void *p;
75 };
76} VDSCRIPTARG;
77/** Pointer to an argument. */
78typedef VDSCRIPTARG *PVDSCRIPTARG;
79
80/** Script callback. */
81typedef DECLCALLBACK(int) FNVDSCRIPTCALLBACK(PVDSCRIPTARG paScriptArgs, void *pvUser);
82/** Pointer to a script callback. */
83typedef FNVDSCRIPTCALLBACK *PFNVDSCRIPTCALLBACK;
84
85/**
86 * Callback registration structure.
87 */
88typedef struct VDSCRIPTCALLBACK
89{
90 /** The function name. */
91 const char *pszFnName;
92 /** The return type of the function. */
93 VDSCRIPTTYPE enmTypeReturn;
94 /** Pointer to the array of argument types. */
95 PCVDSCRIPTTYPE paArgs;
96 /** Number of arguments this method takes. */
97 unsigned cArgs;
98 /** The callback handler. */
99 PFNVDSCRIPTCALLBACK pfnCallback;
100} VDSCRIPTCALLBACK;
101/** Pointer to a callback register entry. */
102typedef VDSCRIPTCALLBACK *PVDSCRIPTCALLBACK;
103/** Pointer to a const callback register entry. */
104typedef const VDSCRIPTCALLBACK *PCVDSCRIPTCALLBACK;
105
106/**
107 * @{
108 */
109/** The address space stays assigned to a variable
110 * even if the pointer is casted to another type.
111 */
112#define VDSCRIPT_AS_FLAGS_TRANSITIVE RT_BIT(0)
113/** @} */
114
115/**
116 * Address space read callback
117 *
118 * @returns VBox status code.
119 * @param pvUser Opaque user data given on registration.
120 * @param Address The address to read from, address is stored in the member for
121 * base type given on registration.
122 * @param pvBuf Where to store the read bits.
123 * @param cbRead How much to read.
124 */
125typedef DECLCALLBACK(int) FNVDSCRIPTASREAD(void *pvUser, VDSCRIPTARG Address, void *pvBuf, size_t cbRead);
126/** Pointer to a read callback. */
127typedef FNVDSCRIPTASREAD *PFNVDSCRIPTASREAD;
128
129/**
130 * Address space write callback
131 *
132 * @returns VBox status code.
133 * @param pvUser Opaque user data given on registration.
134 * @param Address The address to write to, address is stored in the member for
135 * base type given on registration.
136 * @param pvBuf Data to write.
137 * @param cbWrite How much to write.
138 */
139typedef DECLCALLBACK(int) FNVDSCRIPTASWRITE(void *pvUser, VDSCRIPTARG Address, const void *pvBuf, size_t cbWrite);
140/** Pointer to a write callback. */
141typedef FNVDSCRIPTASWRITE *PFNVDSCRIPTASWRITE;
142
143/**
144 * Create a new scripting context.
145 *
146 * @returns VBox status code.
147 * @param phScriptCtx Where to store the scripting context on success.
148 */
149DECLHIDDEN(int) VDScriptCtxCreate(PVDSCRIPTCTX phScriptCtx);
150
151/**
152 * Destroys the given scripting context.
153 *
154 * @returns nothing.
155 * @param hScriptCtx The script context to destroy.
156 */
157DECLHIDDEN(void) VDScriptCtxDestroy(VDSCRIPTCTX hScriptCtx);
158
159/**
160 * Register callbacks for the scripting context.
161 *
162 * @returns VBox status code.
163 * @param hScriptCtx The script context handle.
164 * @param paCallbacks Pointer to the callbacks to register.
165 * @param cCallbacks Number of callbacks in the array.
166 * @param pvUser Opaque user data to pass on the callback invocation.
167 */
168DECLHIDDEN(int) VDScriptCtxCallbacksRegister(VDSCRIPTCTX hScriptCtx, PCVDSCRIPTCALLBACK paCallbacks,
169 unsigned cCallbacks, void *pvUser);
170
171/**
172 * Load a given script into the context.
173 *
174 * @returns VBox status code.
175 * @param hScriptCtx The script context handle.
176 * @param pszScript Pointer to the char buffer containing the script.
177 */
178DECLHIDDEN(int) VDScriptCtxLoadScript(VDSCRIPTCTX hScriptCtx, const char *pszScript);
179
180/**
181 * Execute a given method in the script context.
182 *
183 * @returns VBox status code.
184 * @param hScriptCtx The script context handle.
185 * @param pszFnCall The method to call.
186 * @param paArgs Pointer to arguments to pass.
187 * @param cArgs Number of arguments.
188 */
189DECLHIDDEN(int) VDScriptCtxCallFn(VDSCRIPTCTX hScriptCtx, const char *pszFnCall,
190 PVDSCRIPTARG paArgs, unsigned cArgs);
191
192/**
193 * Registers a new address space provider.
194 *
195 * @returns VBox status code.
196 * @param hScriptCtx The script context handle.
197 * @param pszType The type string.
198 * @param enmBaseType The base integer type to use for the address space.
199 * Bool and String are not supported of course.
200 * @param pfnRead The read callback for the registered address space.
201 * @param pfnWrite The write callback for the registered address space.
202 * @param pvUser Opaque user data to pass to the read and write callbacks.
203 * @param fFlags Flags, see VDSCRIPT_AS_FLAGS_*.
204 *
205 * @note This will automatically register a new type with the identifier given in pszType
206 * used for the pointer. Every variable with this type is automatically treated as a pointer.
207 *
208 * @note If the transitive flag is set the address space stays assigned even if the pointer value
209 * is casted to another pointer type.
210 * In the following example the pointer pStruct will use the registered address space for RTGCPHYS
211 * and dereferencing the pointer causes the read/write callbacks to be triggered.
212 *
213 * ...
214 * Struct *pStruct = (Struct *)(RTGCPHYS)0x12345678;
215 * pStruct->count++;
216 * ...
217 */
218DECLHIDDEN(int) VDScriptCtxAsRegister(VDSCRIPTCTX hScriptCtx, const char *pszType, VDSCRIPTTYPE enmBaseType,
219 PFNVDSCRIPTASREAD pfnRead, PFNVDSCRIPTASWRITE pfnWrite, void *pvUser,
220 uint32_t fFlags);
221
222#endif /* _VDScript_h__ */
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