static DECLCALLBACK(int) svcConnect (void *, uint32_t u32ClientID, void *pvClient) { VBOXCLIPBOARDCLIENTDATA *pClient = (VBOXCLIPBOARDCLIENTDATA *)pvClient; int rc = VINF_SUCCESS; /* If there is already a client connected then we want to release it first. */ if (g_pClient != NULL) { uint32_t u32OldClientID = g_pClient->u32ClientID; svcDisconnect(NULL, u32OldClientID, g_pClient); /* And free the resources in the hgcm subsystem. */ g_pHelpers->pfnDisconnectClient(g_pHelpers->pvInstance, u32OldClientID); } /* Register the client. */ memset (pClient, 0, sizeof (*pClient)); pClient->u32ClientID = u32ClientID; rc = vboxClipboardConnect (pClient, vboxSvcClipboardGetHeadless()); if (RT_SUCCESS (rc)) { g_pClient = pClient; } LogRel2(("vboxClipboardConnect: rc = %Rrc\n", rc)); return rc; }
virtual int run(bool fDaemonised /* = false */) { int rc = vboxClipboardConnect(); if (RT_SUCCESS(rc)) rc = vboxClipboardMain(); if (RT_FAILURE(rc)) LogRelFunc(("guest clipboard service terminated abnormally: return code %Rrc\n", rc)); return rc; }
static int run(struct VBCLSERVICE **ppInterface, bool fDaemonised) { int rc; NOREF(ppInterface); /* Initialise the guest library. */ rc = VbglR3InitUser(); if (RT_FAILURE(rc)) VBClFatalError(("Failed to connect to the VirtualBox kernel service, rc=%Rrc\n", rc)); rc = vboxClipboardConnect(); /* Not RT_SUCCESS: VINF_PERMISSION_DENIED is host service not present. */ if (rc == VINF_SUCCESS) rc = vboxClipboardMain(); if (rc == VERR_NOT_SUPPORTED) rc = VINF_SUCCESS; /* Prevent automatic restart. */ if (RT_FAILURE(rc)) LogRelFunc(("guest clipboard service terminated abnormally: return code %Rrc\n", rc)); return rc; }