929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync/** @file
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync *
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync * Shared Clipboard
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync */
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync/*
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2011 Oracle Corporation
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync *
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync * available from http://www.virtualbox.org. This file is free software;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync */
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync#ifndef __VBOXCLIPBOARD__H
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync#define __VBOXCLIPBOARD__H
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
c4e3ff6a6b0826e8ec2d19bfc24bf882f4d4813cvboxsync#define LOG_GROUP LOG_GROUP_SHARED_CLIPBOARD
fa995cb0311abdf0d0995b668120baf9dd31aa97vboxsync#include <VBox/hgcmsvc.h>
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync#include <VBox/log.h>
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncstruct _VBOXCLIPBOARDCONTEXT;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsynctypedef struct _VBOXCLIPBOARDCONTEXT VBOXCLIPBOARDCONTEXT;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsynctypedef struct _VBOXCLIPBOARDCLIENTDATA
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync{
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync struct _VBOXCLIPBOARDCLIENTDATA *pNext;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync struct _VBOXCLIPBOARDCLIENTDATA *pPrev;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync VBOXCLIPBOARDCONTEXT *pCtx;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync uint32_t u32ClientID;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
74e1a1eff6baaf6d676441963c74a15ea46e9284vboxsync bool fAsync; /* Guest is waiting for a message. */
74e1a1eff6baaf6d676441963c74a15ea46e9284vboxsync bool fReadPending; /* The guest is waiting for data from the host */
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
74e1a1eff6baaf6d676441963c74a15ea46e9284vboxsync bool fMsgQuit;
74e1a1eff6baaf6d676441963c74a15ea46e9284vboxsync bool fMsgReadData;
74e1a1eff6baaf6d676441963c74a15ea46e9284vboxsync bool fMsgFormats;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync struct {
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync VBOXHGCMCALLHANDLE callHandle;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync VBOXHGCMSVCPARM *paParms;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync } async;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync struct {
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync VBOXHGCMCALLHANDLE callHandle;
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync VBOXHGCMSVCPARM *paParms;
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync } asyncRead;
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync struct {
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync void *pv;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync uint32_t cb;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync uint32_t u32Format;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync } data;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync uint32_t u32AvailableFormats;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync uint32_t u32RequestedFormat;
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync} VBOXCLIPBOARDCLIENTDATA;
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync/*
c7d4d4c000d5c822c3d72a6463ee42988df01690vboxsync * The service functions. Locking is between the service thread and the platform dependent windows thread.
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync */
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncbool vboxSvcClipboardLock (void);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxSvcClipboardUnlock (void);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Msg, uint32_t u32Formats);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
b4125206636c650121449eb57dc4384de21e00d6vboxsyncvoid vboxSvcClipboardCompleteReadData(VBOXCLIPBOARDCLIENTDATA *pClient, int rc, uint32_t cbActual);
35238ef5b08b2f817bae8ec40db7c1b684c83e05vboxsync
b9b8a4b9a11af5f68f550405b8c6dde8f8876ff4vboxsyncbool vboxSvcClipboardGetHeadless(void);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync/*
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync * Platform dependent functions.
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync */
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncint vboxClipboardInit (void);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxClipboardDestroy (void);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
2ef891867e61b1018318ef3a47baac5dc9c71504vboxsyncint vboxClipboardConnect (VBOXCLIPBOARDCLIENTDATA *pClient, bool fHeadless);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Formats);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncint vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Format, void *pv, uint32_t cb, uint32_t *pcbActual);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncvoid vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsyncint vboxClipboardSync (VBOXCLIPBOARDCLIENTDATA *pClient);
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync
b9b8a4b9a11af5f68f550405b8c6dde8f8876ff4vboxsync/* Host unit testing interface */
b9b8a4b9a11af5f68f550405b8c6dde8f8876ff4vboxsync#ifdef UNIT_TEST
00bcf8bfdfcfce40d637d69616ac69afb9581958vboxsyncuint32_t TestClipSvcGetMode(void);
b9b8a4b9a11af5f68f550405b8c6dde8f8876ff4vboxsync#endif
b9b8a4b9a11af5f68f550405b8c6dde8f8876ff4vboxsync
929fb9ebb388276d4f0e544ab804c076669f5bddvboxsync#endif /* __VBOXCLIPBOARD__H */