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;
|
int status;
|
||||||
UINT32 ChannelId;
|
UINT32 ChannelId;
|
||||||
wStream* data_out;
|
wStream* data_out;
|
||||||
|
int channel_status;
|
||||||
|
|
||||||
ChannelId = drdynvc_read_variable_uint(s, cbChId);
|
ChannelId = drdynvc_read_variable_uint(s, cbChId);
|
||||||
pos = Stream_GetPosition(s);
|
pos = Stream_GetPosition(s);
|
||||||
DEBUG_DVC("ChannelId=%d ChannelName=%s", ChannelId, Stream_Pointer(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);
|
data_out = Stream_New(NULL, pos + 4);
|
||||||
Stream_Write_UINT8(data_out, 0x10 | cbChId);
|
Stream_Write_UINT8(data_out, 0x10 | cbChId);
|
||||||
Stream_SetPosition(s, 1);
|
Stream_SetPosition(s, 1);
|
||||||
Stream_Copy(data_out, s, pos - 1);
|
Stream_Copy(data_out, s, pos - 1);
|
||||||
|
|
||||||
if (status == 0)
|
if (channel_status == 0)
|
||||||
{
|
{
|
||||||
DEBUG_DVC("channel created");
|
DEBUG_DVC("channel created");
|
||||||
Stream_Write_UINT32(data_out, 0);
|
Stream_Write_UINT32(data_out, 0);
|
||||||
@ -248,6 +249,11 @@ static int drdynvc_process_create_request(drdynvcPlugin* drdynvc, int Sp, int cb
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (channel_status == 0)
|
||||||
|
{
|
||||||
|
dvcman_open_channel(drdynvc->channel_mgr, ChannelId);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,6 +385,28 @@ int dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 Channel
|
|||||||
return 1;
|
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)
|
int dvcman_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId)
|
||||||
{
|
{
|
||||||
DVCMAN_CHANNEL* channel;
|
DVCMAN_CHANNEL* channel;
|
||||||
|
@ -87,6 +87,7 @@ int dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args);
|
|||||||
void dvcman_free(IWTSVirtualChannelManager* pChannelMgr);
|
void dvcman_free(IWTSVirtualChannelManager* pChannelMgr);
|
||||||
int dvcman_init(IWTSVirtualChannelManager* pChannelMgr);
|
int dvcman_init(IWTSVirtualChannelManager* pChannelMgr);
|
||||||
int dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, const char* ChannelName);
|
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_close_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId);
|
||||||
int dvcman_receive_channel_data_first(IWTSVirtualChannelManager* pChannelMgr, UINT32 ChannelId, UINT32 length);
|
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);
|
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.version = RDPGFX_CAPVERSION_8;
|
||||||
capset8.capsDataLength = 4;
|
capset8.capsDataLength = 4;
|
||||||
capset8.flags = 0;
|
capset8.flags = 0;
|
||||||
//capset8.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
capset8.flags |= RDPGFX_CAPS_FLAG_THINCLIENT;
|
||||||
//capset8.flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE;
|
//capset8.flags |= RDPGFX_CAPS_FLAG_SMALL_CACHE;
|
||||||
|
|
||||||
capset81.version = RDPGFX_CAPVERSION_81;
|
capset81.version = RDPGFX_CAPVERSION_81;
|
||||||
//capset81.version = 0x00080103;
|
//capset81.version = 0x00080103;
|
||||||
capset81.capsDataLength = 4;
|
capset81.capsDataLength = 4;
|
||||||
capset81.flags = 0;
|
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_SMALL_CACHE;
|
||||||
//capset81.flags |= RDPGFX_CAPS_FLAG_H264ENABLED;
|
//capset81.flags |= RDPGFX_CAPS_FLAG_H264ENABLED;
|
||||||
|
|
||||||
@ -164,6 +164,17 @@ static int rdpgfx_on_data_received(IWTSVirtualChannelCallback* pChannelCallback,
|
|||||||
return status;
|
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)
|
static int rdpgfx_on_close(IWTSVirtualChannelCallback* pChannelCallback)
|
||||||
{
|
{
|
||||||
RDPGFX_CHANNEL_CALLBACK* callback = (RDPGFX_CHANNEL_CALLBACK*) 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 = (RDPGFX_CHANNEL_CALLBACK*) calloc(1, sizeof(RDPGFX_CHANNEL_CALLBACK));
|
||||||
|
|
||||||
callback->iface.OnDataReceived = rdpgfx_on_data_received;
|
callback->iface.OnDataReceived = rdpgfx_on_data_received;
|
||||||
|
callback->iface.OnOpen = rdpgfx_on_open;
|
||||||
callback->iface.OnClose = rdpgfx_on_close;
|
callback->iface.OnClose = rdpgfx_on_close;
|
||||||
callback->plugin = listener_callback->plugin;
|
callback->plugin = listener_callback->plugin;
|
||||||
callback->channel_mgr = listener_callback->channel_mgr;
|
callback->channel_mgr = listener_callback->channel_mgr;
|
||||||
@ -195,8 +207,6 @@ static int rdpgfx_on_new_channel_connection(IWTSListenerCallback* pListenerCallb
|
|||||||
|
|
||||||
fprintf(stderr, "RdpGfxOnNewChannelConnection\n");
|
fprintf(stderr, "RdpGfxOnNewChannelConnection\n");
|
||||||
|
|
||||||
rdpgfx_send_caps_advertise_pdu(callback);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,6 +140,8 @@ struct _IWTSVirtualChannelCallback
|
|||||||
int (*OnDataReceived) (IWTSVirtualChannelCallback* pChannelCallback,
|
int (*OnDataReceived) (IWTSVirtualChannelCallback* pChannelCallback,
|
||||||
UINT32 cbSize,
|
UINT32 cbSize,
|
||||||
BYTE* pBuffer);
|
BYTE* pBuffer);
|
||||||
|
/* Notifies the user that the channel has been opened. */
|
||||||
|
int (*OnOpen) (IWTSVirtualChannelCallback* pChannelCallback);
|
||||||
/* Notifies the user that the channel has been closed. */
|
/* Notifies the user that the channel has been closed. */
|
||||||
int (*OnClose) (IWTSVirtualChannelCallback* pChannelCallback);
|
int (*OnClose) (IWTSVirtualChannelCallback* pChannelCallback);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user