/usr/include/freerdp2/freerdp/dvc.h is in freerdp2-dev 2.0.0~git20170725.1.1648deb+dfsg1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | /**
* FreeRDP: A Remote Desktop Protocol Implementation
* Dynamic Virtual Channel Interface
*
* Copyright 2010-2011 Vic Lee
* Copyright 2015 Thincast Technologies GmbH
* Copyright 2015 DI (FH) Martin Haimberger <martin.haimberger@thincast.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* DVC Plugin API: See the original MS DVC Client API:
* http://msdn.microsoft.com/en-us/library/bb540880%28v=VS.85%29.aspx
*
* The FreeRDP DVC Plugin API is a simulation of the MS DVC Client API in C.
* The main difference is that every interface method must take an instance
* pointer as the first parameter.
*/
/**
* Implemented by DRDYNVC:
* o IWTSVirtualChannelManager
* o IWTSListener
* o IWTSVirtualChannel
*
* Implemented by DVC plugin:
* o IWTSPlugin
* o IWTSListenerCallback
* o IWTSVirtualChannelCallback
*
* A basic DVC plugin implementation:
* 1. DVCPluginEntry:
* The plugin entry point, which creates and initializes a new IWTSPlugin
* instance
* 2. IWTSPlugin.Initialize:
* Call IWTSVirtualChannelManager.CreateListener with a newly created
* IWTSListenerCallback instance
* 3. IWTSListenerCallback.OnNewChannelConnection:
* Create IWTSVirtualChannelCallback instance if the new channel is accepted
*/
#ifndef FREERDP_DVC_H
#define FREERDP_DVC_H
#include <freerdp/types.h>
#include <freerdp/addin.h>
typedef struct _IWTSVirtualChannelManager IWTSVirtualChannelManager;
typedef struct _IWTSListener IWTSListener;
typedef struct _IWTSVirtualChannel IWTSVirtualChannel;
typedef struct _IWTSPlugin IWTSPlugin;
typedef struct _IWTSListenerCallback IWTSListenerCallback;
typedef struct _IWTSVirtualChannelCallback IWTSVirtualChannelCallback;
struct _IWTSListener
{
/* Retrieves the listener-specific configuration. */
UINT(*GetConfiguration)(IWTSListener* pListener,
void** ppPropertyBag);
void* pInterface;
};
struct _IWTSVirtualChannel
{
/* Starts a write request on the channel. */
UINT(*Write)(IWTSVirtualChannel* pChannel,
ULONG cbSize,
const BYTE* pBuffer,
void* pReserved);
/* Closes the channel. */
UINT(*Close)(IWTSVirtualChannel* pChannel);
};
struct _IWTSVirtualChannelManager
{
/* Returns an instance of a listener object that listens on a specific
endpoint, or creates a static channel. */
UINT(*CreateListener)(IWTSVirtualChannelManager* pChannelMgr,
const char* pszChannelName,
ULONG ulFlags,
IWTSListenerCallback* pListenerCallback,
IWTSListener** ppListener);
/* Find the channel or ID to send data to a specific endpoint. */
UINT32(*GetChannelId)(IWTSVirtualChannel* channel);
IWTSVirtualChannel* (*FindChannelById)(IWTSVirtualChannelManager* pChannelMgr,
UINT32 ChannelId);
};
struct _IWTSPlugin
{
/* Used for the first call that is made from the client to the plug-in. */
UINT(*Initialize)(IWTSPlugin* pPlugin,
IWTSVirtualChannelManager* pChannelMgr);
/* Notifies the plug-in that the Remote Desktop Connection (RDC) client
has successfully connected to the Remote Desktop Session Host (RD
Session Host) server. */
UINT(*Connected)(IWTSPlugin* pPlugin);
/* Notifies the plug-in that the Remote Desktop Connection (RDC) client
has disconnected from the RD Session Host server. */
UINT(*Disconnected)(IWTSPlugin* pPlugin,
DWORD dwDisconnectCode);
/* Notifies the plug-in that the Remote Desktop Connection (RDC) client
has terminated. */
UINT(*Terminated)(IWTSPlugin* pPlugin);
UINT(*Attached)(IWTSPlugin* pPlugin);
UINT(*Detached)(IWTSPlugin* pPlugin);
/* Extended */
void* pInterface;
};
struct _IWTSListenerCallback
{
/* Accepts or denies a connection request for an incoming connection to
the associated listener. */
UINT(*OnNewChannelConnection)(IWTSListenerCallback* pListenerCallback,
IWTSVirtualChannel* pChannel,
BYTE* Data,
BOOL* pbAccept,
IWTSVirtualChannelCallback** ppCallback);
};
struct _IWTSVirtualChannelCallback
{
/* Notifies the user about data that is being received. */
UINT(*OnDataReceived)(IWTSVirtualChannelCallback* pChannelCallback, wStream* data);
/* Notifies the user that the channel has been opened. */
UINT(*OnOpen)(IWTSVirtualChannelCallback* pChannelCallback);
/* Notifies the user that the channel has been closed. */
UINT(*OnClose)(IWTSVirtualChannelCallback* pChannelCallback);
};
/* The DVC Plugin entry points */
typedef struct _IDRDYNVC_ENTRY_POINTS IDRDYNVC_ENTRY_POINTS;
struct _IDRDYNVC_ENTRY_POINTS
{
UINT(*RegisterPlugin)(IDRDYNVC_ENTRY_POINTS* pEntryPoints,
const char* name, IWTSPlugin* pPlugin);
IWTSPlugin* (*GetPlugin)(IDRDYNVC_ENTRY_POINTS* pEntryPoints,
const char* name);
ADDIN_ARGV* (*GetPluginData)(IDRDYNVC_ENTRY_POINTS* pEntryPoints);
void* (*GetRdpSettings)(IDRDYNVC_ENTRY_POINTS* pEntryPoints);
};
typedef UINT(*PDVC_PLUGIN_ENTRY)(IDRDYNVC_ENTRY_POINTS*);
void* get_callback_by_name(const char* name, void** context);
void add_callback_by_name(const char* name, void* fkt, void* context);
void remove_callback_by_name(const char* name, void* context);
#endif /* FREERDP_DVC_H */
|