extern "C" {
#endif
-#if defined(VMTOOLS_USE_GLIB)
-# include <glib.h>
- typedef gboolean RpcInRet;
-#else
-# include "dbllnklst.h"
- typedef Bool RpcInRet;
-#endif
-
typedef void RpcIn_ErrorFunc(void *clientData, char const *status);
typedef struct RpcIn RpcIn;
-#if defined(VMTOOLS_USE_GLIB)
+#if defined(VMTOOLS_USE_GLIB) /* { */
+
+#include "vmware/tools/guestrpc.h"
RpcIn *RpcIn_Construct(GMainContext *mainCtx,
RpcIn_Callback dispatch,
Bool RpcIn_start(RpcIn *in, unsigned int delay,
RpcIn_ErrorFunc *errorFunc, void *errorData);
-#else
-
-/* Data passed to new-style RpcIn callbacks. */
-typedef struct RpcInData {
- /* Data from the host's RPC request. */
- const char *name;
- const char *args;
- size_t argsSize;
- /* Data to be returned to the host. */
- char *result;
- size_t resultLen;
- Bool freeResult;
- /* Client data. */
- void *appCtx;
- void *clientData;
-} RpcInData;
-
-
-/*
- * Type for RpcIn callbacks. The callback function is responsible for
- * allocating memory for the result string.
- */
-typedef RpcInRet (*RpcIn_Callback)(RpcInData *data);
+#else /* } { */
+#include "dbllnklst.h"
/*
* Type for old RpcIn callbacks. Don't use this anymore - this is here
* for backwards compatibility.
*/
typedef Bool
-(*RpcIn_CallbackOld)(char const **result, // OUT
- size_t *resultLen, // OUT
- const char *name, // IN
- const char *args, // IN
- size_t argsSize, // IN
- void *clientData); // IN
+(*RpcIn_Callback)(char const **result, // OUT
+ size_t *resultLen, // OUT
+ const char *name, // IN
+ const char *args, // IN
+ size_t argsSize, // IN
+ void *clientData); // IN
RpcIn *RpcIn_Construct(DblLnkLst_Links *eventQueue);
* Use RpcIn_RegisterCallbackEx() instead.
*/
void RpcIn_RegisterCallback(RpcIn *in, const char *name,
- RpcIn_CallbackOld callback, void *clientData);
+ RpcIn_Callback callback, void *clientData);
-void RpcIn_RegisterCallbackEx(RpcIn *in, const char *name,
- RpcIn_Callback callback, void *clientData);
void RpcIn_UnregisterCallback(RpcIn *in, const char *name);
-/* Helper macro for porting old callbacks that currently use RpcIn_SetRetVals. */
-#define RPCIN_SETRETVALS(data, val, retVal) \
- RpcIn_SetRetVals((char const **) &(data)->result, &(data)->resultLen, \
- (val), (retVal))
-
unsigned int RpcIn_SetRetVals(char const **result, size_t *resultLen,
const char *resultVal, Bool retVal);
-#endif
+#endif /* } */
void RpcIn_Destruct(RpcIn *in);
Bool RpcIn_stop(RpcIn *in);
* The RpcIn object
*/
-typedef enum {
- RPCIN_CB_OLD,
- RPCIN_CB_NEW
-} RpcInCallbackType;
-
-
/* The list of TCLO command callbacks we support */
typedef struct RpcInCallbackList {
const char *name;
size_t length; /* Length of name so we don't have to strlen a lot */
- RpcInCallbackType type;
- union {
- RpcIn_CallbackOld oldCb;
- RpcIn_Callback newCb;
- } callback;
+ RpcIn_Callback callback;
struct RpcInCallbackList *next;
void *clientData;
} RpcInCallbackList;
*/
static Bool
-RpcInPingCallback(RpcInData *data) // IN
+RpcInPingCallback(char const **result, // OUT
+ size_t *resultLen, // OUT
+ const char *name, // IN
+ const char *args, // IN
+ size_t argsSize, // IN
+ void *clientData) // IN
{
- return RPCIN_SETRETVALS(data, "", TRUE);
+ return RpcIn_SetRetVals(result, resultLen, "", TRUE);
}
*-----------------------------------------------------------------------------
*/
-RpcInCallbackList *
+static RpcInCallbackList *
RpcInLookupCallback(RpcIn *in, // IN
const char *name) // IN
{
void
RpcIn_RegisterCallback(RpcIn *in, // IN
const char *name, // IN
- RpcIn_CallbackOld cb, // IN
+ RpcIn_Callback cb, // IN
void *clientData) // IN
{
RpcInCallbackList *p;
p->length = strlen(name);
p->name = strdup(name);
- p->type = RPCIN_CB_OLD;
- p->callback.oldCb = cb;
- p->clientData = clientData;
-
- p->next = in->callbacks;
-
- in->callbacks = p;
-}
-
-
-/*
- *-----------------------------------------------------------------------------
- *
- * RpcIn_RegisterCallbackEx --
- *
- * Register a callback to happen when a TCLO message is
- * received. When a TCLO message beginning with 'name' is
- * sent, the callback will be called with an instance of
- * "RpcInData" with the information from the request.
- *
- * Results:
- * None
- *
- * Side effects:
- * None
- *
- *-----------------------------------------------------------------------------
- */
-void
-RpcIn_RegisterCallbackEx(RpcIn *in, // IN
- const char *name, // IN
- RpcIn_Callback cb, // IN
- void *clientData) // IN
-{
- RpcInCallbackList *p;
-
- Debug("Registering callback '%s'\n", name);
-
- ASSERT(in);
- ASSERT(name);
- ASSERT(cb);
- ASSERT(RpcInLookupCallback(in, name) == NULL); // not there yet
-
- p = (RpcInCallbackList *) malloc(sizeof(RpcInCallbackList));
- ASSERT_NOT_IMPLEMENTED(p);
-
- p->length = strlen(name);
- p->name = strdup(name);
- p->type = RPCIN_CB_NEW;
- p->callback.newCb = cb;
+ p->callback = cb;
p->clientData = clientData;
p->next = in->callbacks;
free(cmd);
if (cb) {
result = NULL;
- if (cb->type == RPCIN_CB_OLD) {
- status = cb->callback.oldCb((char const **) &result, &resultLen, cb->name,
- reply + cb->length, repLen - cb->length,
- cb->clientData);
- } else {
- RpcInData data = { cb->name,
- reply + cb->length,
- repLen - cb->length,
- NULL,
- 0,
- FALSE,
- NULL,
- cb->clientData };
- status = cb->callback.newCb(&data);
- result = data.result;
- resultLen = data.resultLen;
- freeResult = data.freeResult;
- }
-
+ status = cb->callback((char const **) &result, &resultLen, cb->name,
+ reply + cb->length, repLen - cb->length,
+ cb->clientData);
ASSERT(result);
} else {
status = FALSE;
free(result);
}
-#if 0 /* Costly in non-debug cases --hpreg */
- if (strlen(reply) <= 128) {
- Debug("Tclo: Done executing '%s'; result='%s'\n", reply, result);
- } else {
- Debug("Tclo: reply string too long to display\n");
- }
-#endif
-
/*
* Run the event pump (in case VMware sends a long sequence of RPCs and
* perfoms a time-consuming job) and continue to loop immediately
#if !defined(VMTOOLS_USE_GLIB)
/* Register the 'reset' handler */
if (resetCallback) {
- RpcIn_RegisterCallbackEx(in, "reset", resetCallback, resetClientData);
+ RpcIn_RegisterCallback(in, "reset", resetCallback, resetClientData);
}
- RpcIn_RegisterCallbackEx(in, "ping", RpcInPingCallback, NULL);
+ RpcIn_RegisterCallback(in, "ping", RpcInPingCallback, NULL);
#endif
return TRUE;
const char **endOfArg,
char **result);
-RpcInRet ToolsDaemonTcloReceiveVixCommand(RpcInData *data);
+gboolean ToolsDaemonTcloReceiveVixCommand(RpcInData *data);
static HgfsServerMgrData gFoundryHgfsBkdrConn;
-RpcInRet ToolsDaemonHgfsImpersonated(RpcInData *data);
+gboolean ToolsDaemonHgfsImpersonated(RpcInData *data);
#if defined(linux) || defined(_WIN32)
-RpcInRet ToolsDaemonTcloSyncDriverFreeze(RpcInData *data);
+gboolean ToolsDaemonTcloSyncDriverFreeze(RpcInData *data);
-RpcInRet ToolsDaemonTcloSyncDriverThaw(RpcInData *data);
+gboolean ToolsDaemonTcloSyncDriverThaw(RpcInData *data);
#endif
-RpcInRet ToolsDaemonTcloMountHGFS(RpcInData *data);
+gboolean ToolsDaemonTcloMountHGFS(RpcInData *data);
void ToolsDaemonTcloReportProgramCompleted(const char *requestName,
VixError err,
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
FoundryToolsDaemonRunProgram(RpcInData *data) // IN
{
VixError err = VIX_OK;
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
FoundryToolsDaemonGetToolsProperties(RpcInData *data) // IN
{
VixError err = VIX_OK;
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
ToolsDaemonTcloCheckUserAccount(RpcInData *data) // IN
{
VixError err = VIX_OK;
*/
#if defined(linux) || defined(_WIN32)
-RpcInRet
+gboolean
ToolsDaemonTcloSyncDriverFreeze(RpcInData *data)
{
static char resultBuffer[DEFAULT_RESULT_MSG_MAX_LENGTH];
*/
#if defined(linux) || defined(_WIN32)
-RpcInRet
+gboolean
ToolsDaemonTcloSyncDriverThaw(RpcInData *data) // IN
{
static char resultBuffer[DEFAULT_RESULT_MSG_MAX_LENGTH];
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
ToolsDaemonTcloMountHGFS(RpcInData *data) // IN
{
VixError err = VIX_OK;
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
ToolsDaemonHgfsImpersonated(RpcInData *data) // IN
{
VixError err;
*-----------------------------------------------------------------------------
*/
-RpcInRet
+gboolean
ToolsDaemonTcloReceiveVixCommand(RpcInData *data) // IN
{
VixError err = VIX_OK;
#include "vmware/tools/plugin.h"
#include "rpcin.h"
-RpcInRet
+gboolean
ToolsDaemonTcloCheckUserAccount(RpcInData *data);
-RpcInRet
+gboolean
FoundryToolsDaemonGetToolsProperties(RpcInData *data);
-RpcInRet
+gboolean
ToolsDaemonHgfsImpersonated(RpcInData *data);
-RpcInRet
+gboolean
ToolsDaemonTcloMountHGFS(RpcInData *data);
-RpcInRet
+gboolean
ToolsDaemonTcloReceiveVixCommand(RpcInData *data);
-RpcInRet
+gboolean
FoundryToolsDaemonRunProgram(RpcInData *data);
#if defined(linux) || defined(_WIN32)
-RpcInRet
+gboolean
ToolsDaemonTcloSyncDriverFreeze(RpcInData *data);
-RpcInRet
+gboolean
ToolsDaemonTcloSyncDriverThaw(RpcInData *data);
#endif
static GtkWidget* ToolsMain_Create(void);
-static Bool RpcInResetCB(RpcInData *data);
+static Bool RpcInResetCB(char const **result, size_t *resultLen,
+ const char *name, const char *args,
+ size_t argsSize, void *clientData);
static Bool RpcInSetOptionCB(char const **result, size_t *resultLen,
const char *name, const char *args,
size_t argsSize, void *clientData);
*/
static Bool
-RpcInResetCB(RpcInData *data) // IN/OUT
+RpcInResetCB(char const **result, // OUT
+ size_t *resultLen, // OUT
+ const char *name, // IN
+ const char *args, // IN
+ size_t argsSize, // IN
+ void *clientData) // IN
{
Debug("----------toolbox: Received 'reset' from vmware\n");
- return RPCIN_SETRETVALS(data, "ATR " TOOLS_CTLPANEL_NAME, TRUE);
+ return RpcIn_SetRetVals(result, resultLen, "ATR " TOOLS_CTLPANEL_NAME, TRUE);
}