mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
channels/drdynvc: add OnOpen callback
This commit is contained in:
parent
e74fb24ad1
commit
8ea161de61
@ -217,19 +217,20 @@ static int drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, int cb
|
||||
int status;
|
||||
UINT32 ChannelId;
|
||||
wStream* data_out;
|
||||
int channel_status;
|
||||
|
||||
ChannelId = drdynvc_read_variable_uint(s, cbChId);
|
||||
pos = Stream_GetPosition(s);
|
||||
DEBUG_DVC("ChannelId=%d ChannelName=%s", ChannelId, Stream_Pointer(s));
|
||||
|
||||
status = dvcman_create_channel(drdynvc->channel_mgr, ChannelId, (char*) Stream_Pointer(s));
|
||||
channel_status = dvcman_create_channel(drdynvc->channel_mgr, ChannelId, (char*) Stream_Pointer(s));
|
||||
|
||||
data_out = Stream_New(NULL, pos + 4);
|
||||
Stream_Write_UINT8(data_out, 0x10 | cbChId);
|
||||
Stream_SetPosition(s, 1);
|
||||
Stream_Copy(data_out, s, pos - 1);
|
||||
|
||||
if (status == 0)
|
||||
if (channel_status == 0)
|
||||
{
|
||||
DEBUG_DVC("channel created");
|
||||
Stream_Write_UINT32(data_out, 0);
|
||||
@ -248,6 +249,11 @@ static int drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, int cb
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (channel_status == 0)
|
||||
{
|
||||
dvcman_open_channel(drdynvc->channel_mgr, ChannelId);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -385,6 +385,28 @@ int dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 Channel
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dvcman_open_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId)
|
||||
{
|
||||
DVCMAN_CHANNEL* channel;
|
||||
IWTSVirtualChannelCallback* pCallback;
|
||||
|
||||
channel = (DVCMAN_CHANNEL*) dvcman_find_channel_by_id(pChannelMgr, ChannelId);
|
||||
|
||||
if (!channel)
|
||||
{
|
||||
DEBUG_WARN("ChannelId %d not found!", ChannelId);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (channel->status == 0)
|
||||
{
|
||||
pCallback = channel->channel_callback;
|
||||
pCallback->OnOpen(pCallback);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId)
|
||||
{
|
||||
DVCMAN_CHANNEL* channel;
|
||||
|
@ -87,6 +87,7 @@ int dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args);
|
||||
void dvcman_free(IWTSVirtualChannelManager* pChannelMgr);
|
||||
int dvcman_init(IWTSVirtualChannelManager* pChannelMgr);
|
||||
int dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, const char* ChannelName);
|
||||
int dvcman_open_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId);
|
||||
int dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId);
|
||||
int dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, UINT32 length);
|
||||
int dvcman_receive_channel_data(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, BYTE* data, UINT32 data_size);
|
||||
|
@ -91,14 +91,14 @@ int rdpgfx_send_caps_advertise_pdu(RDPGFX_CHANNEL_CALLBACK* callback)
|
||||
capset8.version = RDPGFX_CAPVERSION_8;
|
||||
capset8.capsDataLength = 4;
|
||||
capset8.flags = 0;
|
||||
//capset8.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
||||
capset8.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
||||
//capset8.flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE;
|
||||
|
||||
capset81.version = RDPGFX_CAPVERSION_81;
|
||||
//capset81.version = 0x00080103;
|
||||
capset81.capsDataLength = 4;
|
||||
capset81.flags = 0;
|
||||
//capset81.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
||||
capset81.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
||||
//capset81.flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE;
|
||||
//capset81.flags |= RDPGFX_CAPS_FLAG_H264ENABLED;
|
||||
|
||||
@ -164,6 +164,17 @@ static int rdpgfx_on_data_received(IWTSVirtualChannelCallback* pChannelCallback,
|
||||
return status;
|
||||
}
|
||||
|
||||
static int rdpgfx_on_open(IWTSVirtualChannelCallback* pChannelCallback)
|
||||
{
|
||||
RDPGFX_CHANNEL_CALLBACK* callback = (RDPGFX_CHANNEL_CALLBACK*) pChannelCallback;
|
||||
|
||||
fprintf(stderr, "RdpGfxOnOpen\n");
|
||||
|
||||
rdpgfx_send_caps_advertise_pdu(callback);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rdpgfx_on_close(IWTSVirtualChannelCallback* pChannelCallback)
|
||||
{
|
||||
RDPGFX_CHANNEL_CALLBACK* callback = (RDPGFX_CHANNEL_CALLBACK*) pChannelCallback;
|
||||
@ -185,6 +196,7 @@ static int rdpgfx_on_new_channel_connection(IWTSListenerCallback* pListenerCallb
|
||||
callback = (RDPGFX_CHANNEL_CALLBACK*) calloc(1, sizeof(RDPGFX_CHANNEL_CALLBACK));
|
||||
|
||||
callback->iface.OnDataReceived = rdpgfx_on_data_received;
|
||||
callback->iface.OnOpen = rdpgfx_on_open;
|
||||
callback->iface.OnClose = rdpgfx_on_close;
|
||||
callback->plugin = listener_callback->plugin;
|
||||
callback->channel_mgr = listener_callback->channel_mgr;
|
||||
@ -195,8 +207,6 @@ static int rdpgfx_on_new_channel_connection(IWTSListenerCallback* pListenerCallb
|
||||
|
||||
fprintf(stderr, "RdpGfxOnNewChannelConnection\n");
|
||||
|
||||
rdpgfx_send_caps_advertise_pdu(callback);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -140,6 +140,8 @@ struct _IWTSVirtualChannelCallback
|
||||
int (*OnDataReceived) (IWTSVirtualChannelCallback* pChannelCallback,
|
||||
UINT32 cbSize,
|
||||
BYTE* pBuffer);
|
||||
/* Notifies the user that the channel has been opened. */
|
||||
int (*OnOpen) (IWTSVirtualChannelCallback* pChannelCallback);
|
||||
/* Notifies the user that the channel has been closed. */
|
||||
int (*OnClose) (IWTSVirtualChannelCallback* pChannelCallback);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user