mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Fixed error handling for channel load failures.
This commit is contained in:
@@ -832,23 +832,21 @@ UINT DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints)
|
||||
assert(pEntryPoints->GetPlugin);
|
||||
|
||||
audin = (AUDIN_PLUGIN*) pEntryPoints->GetPlugin(pEntryPoints, "audin");
|
||||
if (audin == NULL)
|
||||
if (audin != NULL)
|
||||
return CHANNEL_RC_ALREADY_INITIALIZED;
|
||||
|
||||
audin = (AUDIN_PLUGIN*) calloc(1, sizeof(AUDIN_PLUGIN));
|
||||
if (!audin)
|
||||
{
|
||||
audin = (AUDIN_PLUGIN*) calloc(1, sizeof(AUDIN_PLUGIN));
|
||||
if (!audin)
|
||||
{
|
||||
WLog_ERR(TAG, "calloc failed!");
|
||||
return CHANNEL_RC_NO_MEMORY;
|
||||
}
|
||||
|
||||
audin->iface.Initialize = audin_plugin_initialize;
|
||||
audin->iface.Connected = NULL;
|
||||
audin->iface.Disconnected = NULL;
|
||||
audin->iface.Terminated = audin_plugin_terminated;
|
||||
|
||||
error = pEntryPoints->RegisterPlugin(pEntryPoints, "audin", (IWTSPlugin*) audin);
|
||||
WLog_ERR(TAG, "calloc failed!");
|
||||
return CHANNEL_RC_NO_MEMORY;
|
||||
}
|
||||
|
||||
audin->iface.Initialize = audin_plugin_initialize;
|
||||
audin->iface.Connected = NULL;
|
||||
audin->iface.Disconnected = NULL;
|
||||
audin->iface.Terminated = audin_plugin_terminated;
|
||||
|
||||
args = pEntryPoints->GetPluginData(pEntryPoints);
|
||||
audin->rdpcontext = ((freerdp*)((rdpSettings*) pEntryPoints->GetRdpSettings(pEntryPoints))->instance)->context;
|
||||
|
||||
@@ -894,7 +892,7 @@ UINT DVCPluginEntry(IDRDYNVC_ENTRY_POINTS* pEntryPoints)
|
||||
if (audin->device == NULL)
|
||||
WLog_ERR(TAG, "no sound device.");
|
||||
|
||||
error = CHANNEL_RC_OK;
|
||||
error = pEntryPoints->RegisterPlugin(pEntryPoints, "audin", (IWTSPlugin*) audin);
|
||||
|
||||
out:
|
||||
if (error != CHANNEL_RC_OK)
|
||||
|
||||
@@ -159,10 +159,10 @@ static UINT cliprdr_process_general_capability(cliprdrPlugin* cliprdr, wStream*
|
||||
WLog_ERR(TAG, "cliprdr_get_client_interface failed!");
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
Stream_Read_UINT32(s, version); /* version (4 bytes) */
|
||||
Stream_Read_UINT32(s, generalFlags); /* generalFlags (4 bytes) */
|
||||
|
||||
|
||||
DEBUG_CLIPRDR("Version: %d", version);
|
||||
#ifdef WITH_DEBUG_CLIPRDR
|
||||
cliprdr_print_general_capability_flags(generalFlags);
|
||||
@@ -179,7 +179,7 @@ static UINT cliprdr_process_general_capability(cliprdrPlugin* cliprdr, wStream*
|
||||
|
||||
if (cliprdr->canLockClipData)
|
||||
cliprdr->canLockClipData = (generalFlags & CB_CAN_LOCK_CLIPDATA) ? TRUE : FALSE;
|
||||
|
||||
|
||||
cliprdr->capabilitiesReceived = TRUE;
|
||||
|
||||
if (!context->custom)
|
||||
@@ -187,7 +187,7 @@ static UINT cliprdr_process_general_capability(cliprdrPlugin* cliprdr, wStream*
|
||||
WLog_ERR(TAG, "context->custom not set!");
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
capabilities.cCapabilitiesSets = 1;
|
||||
capabilities.capabilitySets = (CLIPRDR_CAPABILITY_SET*) &(generalCapabilitySet);
|
||||
generalCapabilitySet.capabilitySetType = CB_CAPSTYPE_GENERAL;
|
||||
@@ -215,7 +215,7 @@ static UINT cliprdr_process_clip_caps(cliprdrPlugin* cliprdr, wStream* s, UINT16
|
||||
UINT16 cCapabilitiesSets;
|
||||
UINT16 capabilitySetType;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
|
||||
|
||||
Stream_Read_UINT16(s, cCapabilitiesSets); /* cCapabilitiesSets (2 bytes) */
|
||||
Stream_Seek_UINT16(s); /* pad1 (2 bytes) */
|
||||
|
||||
@@ -235,7 +235,7 @@ static UINT cliprdr_process_clip_caps(cliprdrPlugin* cliprdr, wStream* s, UINT16
|
||||
return error;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "unknown cliprdr capability set: %d", capabilitySetType);
|
||||
return CHANNEL_RC_BAD_PROC;
|
||||
@@ -273,13 +273,13 @@ static UINT cliprdr_process_monitor_ready(cliprdrPlugin* cliprdr, wStream* s, UI
|
||||
* When the server capabilities pdu is not used, default capabilities
|
||||
* corresponding to a generalFlags field set to zero are assumed.
|
||||
*/
|
||||
|
||||
|
||||
cliprdr->useLongFormatNames = FALSE;
|
||||
cliprdr->streamFileClipEnabled = FALSE;
|
||||
cliprdr->fileClipNoFilePaths = TRUE;
|
||||
cliprdr->canLockClipData = FALSE;
|
||||
}
|
||||
|
||||
|
||||
monitorReady.msgType = CB_MONITOR_READY;
|
||||
monitorReady.msgFlags = flags;
|
||||
monitorReady.dataLen = length;
|
||||
@@ -354,7 +354,7 @@ static UINT cliprdr_process_filecontents_response(cliprdrPlugin* cliprdr, wStrea
|
||||
WLog_ERR(TAG, "context->custom not set!");
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
if (Stream_GetRemainingLength(s) < 4)
|
||||
{
|
||||
WLog_ERR(TAG, "not enought remaining data");
|
||||
@@ -366,7 +366,7 @@ static UINT cliprdr_process_filecontents_response(cliprdrPlugin* cliprdr, wStrea
|
||||
response.dataLen = length;
|
||||
|
||||
Stream_Read_UINT32(s, response.streamId); /* streamId (4 bytes) */
|
||||
|
||||
|
||||
response.cbRequested = length - 4;
|
||||
response.requestedData = Stream_Pointer(s); /* requestedFileContentsData */
|
||||
|
||||
@@ -434,7 +434,7 @@ static UINT cliprdr_process_unlock_clipdata(cliprdrPlugin* cliprdr, wStream* s,
|
||||
WLog_ERR(TAG, "context->custom not set!");
|
||||
return ERROR_INTERNAL_ERROR;
|
||||
}
|
||||
|
||||
|
||||
if (Stream_GetRemainingLength(s) < 4)
|
||||
{
|
||||
WLog_ERR(TAG, "not enought remaining data");
|
||||
@@ -637,7 +637,7 @@ UINT cliprdr_client_format_list(CliprdrClientContext* context, CLIPRDR_FORMAT_LI
|
||||
if (!cliprdr->useLongFormatNames)
|
||||
{
|
||||
length = formatList->numFormats * 36;
|
||||
|
||||
|
||||
s = cliprdr_packet_new(CB_FORMAT_LIST, 0, length);
|
||||
|
||||
if (!s)
|
||||
@@ -649,40 +649,40 @@ UINT cliprdr_client_format_list(CliprdrClientContext* context, CLIPRDR_FORMAT_LI
|
||||
for (index = 0; index < formatList->numFormats; index++)
|
||||
{
|
||||
format = (CLIPRDR_FORMAT*) &(formatList->formats[index]);
|
||||
|
||||
|
||||
Stream_Write_UINT32(s, format->formatId); /* formatId (4 bytes) */
|
||||
|
||||
|
||||
formatNameSize = 0;
|
||||
formatNameLength = 0;
|
||||
|
||||
szFormatName = format->formatName;
|
||||
|
||||
|
||||
if (asciiNames)
|
||||
{
|
||||
if (szFormatName)
|
||||
formatNameLength = strlen(szFormatName);
|
||||
|
||||
|
||||
if (formatNameLength > 31)
|
||||
formatNameLength = 31;
|
||||
|
||||
|
||||
Stream_Write(s, szFormatName, formatNameLength);
|
||||
Stream_Zero(s, 32 - formatNameLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
wszFormatName = NULL;
|
||||
|
||||
|
||||
if (szFormatName)
|
||||
formatNameSize = ConvertToUnicode(CP_UTF8, 0, szFormatName, -1, &wszFormatName, 0);
|
||||
|
||||
|
||||
if (formatNameSize > 15)
|
||||
formatNameSize = 15;
|
||||
|
||||
if (wszFormatName)
|
||||
|
||||
if (wszFormatName)
|
||||
Stream_Write(s, wszFormatName, formatNameSize * 2);
|
||||
|
||||
Stream_Zero(s, 32 - (formatNameSize * 2));
|
||||
|
||||
|
||||
free(wszFormatName);
|
||||
}
|
||||
}
|
||||
@@ -1218,9 +1218,9 @@ static UINT cliprdr_virtual_channel_event_disconnected(cliprdrPlugin* cliprdr)
|
||||
|
||||
if (MessageQueue_PostQuit(cliprdr->queue, 0) && (WaitForSingleObject(cliprdr->thread, INFINITE) == WAIT_FAILED))
|
||||
{
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
MessageQueue_Free(cliprdr->queue);
|
||||
@@ -1257,7 +1257,9 @@ static UINT cliprdr_virtual_channel_event_terminated(cliprdrPlugin* cliprdr)
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
static VOID VCAPITYPE cliprdr_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE cliprdr_virtual_channel_init_event(LPVOID pInitHandle,
|
||||
UINT event, LPVOID pData,
|
||||
UINT dataLength)
|
||||
{
|
||||
cliprdrPlugin* cliprdr;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1267,7 +1269,7 @@ static VOID VCAPITYPE cliprdr_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (!cliprdr)
|
||||
{
|
||||
WLog_ERR(TAG, "error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1290,7 +1292,7 @@ static VOID VCAPITYPE cliprdr_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (error && cliprdr->context->rdpcontext)
|
||||
setChannelError(cliprdr->context->rdpcontext, error, "cliprdr_virtual_channel_init_event reported an error");
|
||||
|
||||
return;
|
||||
return error;
|
||||
}
|
||||
|
||||
/* cliprdr is always built-in */
|
||||
@@ -1358,14 +1360,14 @@ BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
|
||||
cliprdr->streamFileClipEnabled = FALSE;
|
||||
cliprdr->fileClipNoFilePaths = TRUE;
|
||||
cliprdr->canLockClipData = FALSE;
|
||||
|
||||
|
||||
WLog_Print(cliprdr->log, WLOG_DEBUG, "VirtualChannelEntry");
|
||||
|
||||
CopyMemory(&(cliprdr->channelEntryPoints), pEntryPoints, sizeof(CHANNEL_ENTRY_POINTS_FREERDP));
|
||||
|
||||
rc = cliprdr->channelEntryPoints.pVirtualChannelInit(&cliprdr->InitHandle,
|
||||
&cliprdr->channelDef, 1, VIRTUAL_CHANNEL_VERSION_WIN2000, cliprdr_virtual_channel_init_event);
|
||||
|
||||
|
||||
if (CHANNEL_RC_OK != rc)
|
||||
{
|
||||
WLog_ERR(TAG, "pVirtualChannelInit failed with %s [%08X]",
|
||||
|
||||
@@ -241,7 +241,7 @@ IWTSVirtualChannelManager* dvcman_new(drdynvcPlugin* plugin)
|
||||
*
|
||||
* @return 0 on success, otherwise a Win32 error code
|
||||
*/
|
||||
UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args, rdpSettings* settings)
|
||||
static UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args, rdpSettings* settings)
|
||||
{
|
||||
DVCMAN_ENTRY_POINTS entryPoints;
|
||||
PDVC_PLUGIN_ENTRY pDVCPluginEntry = NULL;
|
||||
@@ -261,7 +261,7 @@ UINT dvcman_load_addin(IWTSVirtualChannelManager* pChannelMgr, ADDIN_ARGV* args,
|
||||
entryPoints.args = args;
|
||||
entryPoints.settings = settings;
|
||||
|
||||
pDVCPluginEntry((IDRDYNVC_ENTRY_POINTS*) &entryPoints);
|
||||
return pDVCPluginEntry((IDRDYNVC_ENTRY_POINTS*) &entryPoints);
|
||||
}
|
||||
|
||||
return CHANNEL_RC_OK;
|
||||
@@ -478,8 +478,8 @@ UINT dvcman_create_channel(IWTSVirtualChannelManager* pChannelMgr, UINT32 Channe
|
||||
context = dvcman->drdynvc->context;
|
||||
IFCALLRET(context->OnChannelConnected, error, context, ChannelName, listener->iface.pInterface);
|
||||
|
||||
if (error)
|
||||
WLog_ERR(TAG, "context.ReceiveSamples failed with error %lu", error);
|
||||
if (error)
|
||||
WLog_ERR(TAG, "context.ReceiveSamples failed with error %lu", error);
|
||||
|
||||
return error;
|
||||
}
|
||||
@@ -1056,7 +1056,7 @@ static UINT drdynvc_process_close_request(drdynvcPlugin* drdynvc, int Sp, int cb
|
||||
WLog_ERR(TAG, "dvcman_close_channel failed with error %lu!", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
data_out = Stream_New(NULL, 4);
|
||||
|
||||
if (!data_out)
|
||||
@@ -1214,6 +1214,10 @@ void* drdynvc_get_open_handle_data(DWORD openHandle)
|
||||
void drdynvc_remove_open_handle_data(DWORD openHandle)
|
||||
{
|
||||
void* pOpenHandle = (void*) (size_t) openHandle;
|
||||
|
||||
if (!g_OpenHandles)
|
||||
return;
|
||||
|
||||
ListDictionary_Remove(g_OpenHandles, pOpenHandle);
|
||||
|
||||
if (ListDictionary_Count(g_OpenHandles) < 1)
|
||||
@@ -1411,7 +1415,9 @@ static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVO
|
||||
for (index = 0; index < settings->DynamicChannelCount; index++)
|
||||
{
|
||||
args = settings->DynamicChannelArray[index];
|
||||
dvcman_load_addin(drdynvc->channel_mgr, args, settings);
|
||||
error = dvcman_load_addin(drdynvc->channel_mgr, args, settings);
|
||||
if (CHANNEL_RC_OK != error)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((error = dvcman_init(drdynvc->channel_mgr)))
|
||||
@@ -1434,8 +1440,6 @@ static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVO
|
||||
|
||||
error:
|
||||
drdynvc_remove_open_handle_data(drdynvc->OpenHandle);
|
||||
MessageQueue_Free(drdynvc->queue);
|
||||
drdynvc->queue = NULL;
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1449,11 +1453,11 @@ static UINT drdynvc_virtual_channel_event_disconnected(drdynvcPlugin* drdynvc)
|
||||
UINT status;
|
||||
|
||||
if (MessageQueue_PostQuit(drdynvc->queue, 0) && (WaitForSingleObject(drdynvc->thread, INFINITE) == WAIT_FAILED))
|
||||
{
|
||||
status = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", status);
|
||||
return status;
|
||||
}
|
||||
{
|
||||
status = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", status);
|
||||
return status;
|
||||
}
|
||||
|
||||
MessageQueue_Free(drdynvc->queue);
|
||||
CloseHandle(drdynvc->thread);
|
||||
@@ -1497,7 +1501,9 @@ static UINT drdynvc_virtual_channel_event_terminated(drdynvcPlugin* drdynvc)
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
static void VCAPITYPE drdynvc_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE drdynvc_virtual_channel_init_event(LPVOID pInitHandle,
|
||||
UINT event, LPVOID pData,
|
||||
UINT dataLength)
|
||||
{
|
||||
drdynvcPlugin* drdynvc;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1507,7 +1513,7 @@ static void VCAPITYPE drdynvc_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (!drdynvc)
|
||||
{
|
||||
WLog_ERR(TAG, "drdynvc_virtual_channel_init_event: error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1530,6 +1536,7 @@ static void VCAPITYPE drdynvc_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (error && drdynvc->rdpcontext)
|
||||
setChannelError(drdynvc->rdpcontext, error, "drdynvc_virtual_channel_init_event reported an error");
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1217,9 +1217,9 @@ static UINT encomsp_virtual_channel_event_disconnected(encomspPlugin* encomsp)
|
||||
|
||||
if (MessageQueue_PostQuit(encomsp->queue, 0) && (WaitForSingleObject(encomsp->thread, INFINITE) == WAIT_FAILED))
|
||||
{
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
MessageQueue_Free(encomsp->queue);
|
||||
@@ -1259,7 +1259,9 @@ static UINT encomsp_virtual_channel_event_terminated(encomspPlugin* encomsp)
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
static void VCAPITYPE encomsp_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE encomsp_virtual_channel_init_event(LPVOID pInitHandle,
|
||||
UINT event, LPVOID pData,
|
||||
UINT dataLength)
|
||||
{
|
||||
encomspPlugin* encomsp;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1269,7 +1271,7 @@ static void VCAPITYPE encomsp_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (!encomsp)
|
||||
{
|
||||
WLog_ERR(TAG, "encomsp_virtual_channel_init_event: error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1294,7 +1296,7 @@ static void VCAPITYPE encomsp_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (error && encomsp->rdpcontext)
|
||||
setChannelError(encomsp->rdpcontext, error, "encomsp_virtual_channel_init_event reported an error");
|
||||
|
||||
return;
|
||||
return error;
|
||||
}
|
||||
|
||||
/* encomsp is always built-in */
|
||||
|
||||
@@ -741,9 +741,9 @@ static UINT rail_virtual_channel_event_disconnected(railPlugin* rail)
|
||||
UINT rc;
|
||||
if (MessageQueue_PostQuit(rail->queue, 0) && (WaitForSingleObject(rail->thread, INFINITE) == WAIT_FAILED))
|
||||
{
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
MessageQueue_Free(rail->queue);
|
||||
@@ -757,7 +757,7 @@ static UINT rail_virtual_channel_event_disconnected(railPlugin* rail)
|
||||
{
|
||||
WLog_ERR(TAG, "pVirtualChannelClose failed with %s [%08X]",
|
||||
WTSErrorToString(rc), rc);
|
||||
return rc;
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (rail->data_in)
|
||||
@@ -776,7 +776,7 @@ static void rail_virtual_channel_event_terminated(railPlugin* rail)
|
||||
free(rail);
|
||||
}
|
||||
|
||||
static VOID VCAPITYPE rail_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE rail_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
{
|
||||
railPlugin* rail;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -786,7 +786,7 @@ static VOID VCAPITYPE rail_virtual_channel_init_event(LPVOID pInitHandle, UINT e
|
||||
if (!rail)
|
||||
{
|
||||
WLog_ERR(TAG, "rail_virtual_channel_init_event: error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -798,7 +798,7 @@ static VOID VCAPITYPE rail_virtual_channel_init_event(LPVOID pInitHandle, UINT e
|
||||
|
||||
case CHANNEL_EVENT_DISCONNECTED:
|
||||
if ((error = rail_virtual_channel_event_disconnected(rail)))
|
||||
WLog_ERR(TAG, "rail_virtual_channel_event_disconnected failed with error %lu!", error);
|
||||
WLog_ERR(TAG, "rail_virtual_channel_event_disconnected failed with error %lu!", error);
|
||||
break;
|
||||
|
||||
case CHANNEL_EVENT_TERMINATED:
|
||||
@@ -809,7 +809,7 @@ static VOID VCAPITYPE rail_virtual_channel_init_event(LPVOID pInitHandle, UINT e
|
||||
if(error && rail->rdpcontext)
|
||||
setChannelError(rail->rdpcontext, error, "rail_virtual_channel_init_event reported an error");
|
||||
|
||||
return;
|
||||
return error;
|
||||
}
|
||||
|
||||
/* rail is always built-in */
|
||||
|
||||
@@ -480,8 +480,8 @@ cleanup:
|
||||
|
||||
|
||||
static void drive_hotplug_fsevent_callback(ConstFSEventStreamRef streamRef, void *clientCallBackInfo,
|
||||
size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[],
|
||||
const FSEventStreamEventId eventIds[])
|
||||
size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[],
|
||||
const FSEventStreamEventId eventIds[])
|
||||
{
|
||||
rdpdrPlugin* rdpdr;
|
||||
int i;
|
||||
@@ -649,13 +649,13 @@ static char* get_word(char* str, unsigned int* offset)
|
||||
(*offset)++;
|
||||
|
||||
word = malloc(wlen + 1);
|
||||
|
||||
|
||||
if (word != NULL)
|
||||
{
|
||||
CopyMemory(word, p, wlen);
|
||||
word[wlen] = '\0';
|
||||
}
|
||||
|
||||
|
||||
return word;
|
||||
}
|
||||
|
||||
@@ -1720,7 +1720,8 @@ static void rdpdr_virtual_channel_event_terminated(rdpdrPlugin* rdpdr)
|
||||
free(rdpdr);
|
||||
}
|
||||
|
||||
static VOID VCAPITYPE rdpdr_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE rdpdr_virtual_channel_init_event(LPVOID pInitHandle, UINT event,
|
||||
LPVOID pData, UINT dataLength)
|
||||
{
|
||||
rdpdrPlugin* rdpdr;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1730,7 +1731,7 @@ static VOID VCAPITYPE rdpdr_virtual_channel_init_event(LPVOID pInitHandle, UINT
|
||||
if (!rdpdr)
|
||||
{
|
||||
WLog_ERR(TAG, "error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1758,7 +1759,7 @@ static VOID VCAPITYPE rdpdr_virtual_channel_init_event(LPVOID pInitHandle, UINT
|
||||
|
||||
if (error && rdpdr->rdpcontext)
|
||||
setChannelError(rdpdr->rdpcontext, error, "rdpdr_virtual_channel_init_event reported an error");
|
||||
return;
|
||||
return error;
|
||||
}
|
||||
|
||||
/* rdpdr is always built-in */
|
||||
|
||||
@@ -116,39 +116,39 @@ static void* rdpsnd_schedule_thread(void* arg)
|
||||
|
||||
while (1)
|
||||
{
|
||||
status = WaitForMultipleObjects(2, events, FALSE, INFINITE);
|
||||
status = WaitForMultipleObjects(2, events, FALSE, INFINITE);
|
||||
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForMultipleObjects failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForMultipleObjects failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
|
||||
status = WaitForSingleObject(rdpsnd->stopEvent, 0);
|
||||
status = WaitForSingleObject(rdpsnd->stopEvent, 0);
|
||||
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
|
||||
if (status == WAIT_OBJECT_0)
|
||||
break;
|
||||
if (status == WAIT_OBJECT_0)
|
||||
break;
|
||||
|
||||
|
||||
status = WaitForSingleObject(events[0], 0);
|
||||
status = WaitForSingleObject(events[0], 0);
|
||||
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
if (status == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (!MessageQueue_Peek(rdpsnd->MsgPipe->Out, &message, TRUE))
|
||||
if (!MessageQueue_Peek(rdpsnd->MsgPipe->Out, &message, TRUE))
|
||||
{
|
||||
WLog_ERR(TAG, "MessageQueue_Peek failed!");
|
||||
error = ERROR_INTERNAL_ERROR;
|
||||
@@ -811,6 +811,7 @@ static UINT rdpsnd_load_device_plugin(rdpsndPlugin* rdpsnd, const char* name, AD
|
||||
if ((error = entry(&entryPoints)))
|
||||
WLog_ERR(TAG, "%s entry returns error %lu", name, error);
|
||||
|
||||
WLog_INFO(TAG, "Loaded %s backend for rdpsnd", name);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -828,7 +829,7 @@ BOOL rdpsnd_set_device_name(rdpsndPlugin* rdpsnd, const char* device_name)
|
||||
return (rdpsnd->device_name != NULL);
|
||||
}
|
||||
|
||||
COMMAND_LINE_ARGUMENT_A rdpsnd_args[] =
|
||||
static COMMAND_LINE_ARGUMENT_A rdpsnd_args[] =
|
||||
{
|
||||
{ "sys", COMMAND_LINE_VALUE_REQUIRED, "<subsystem>", NULL, NULL, -1, NULL, "subsystem" },
|
||||
{ "dev", COMMAND_LINE_VALUE_REQUIRED, "<device>", NULL, NULL, -1, NULL, "device" },
|
||||
@@ -1078,10 +1079,10 @@ static void rdpsnd_process_disconnect(rdpsndPlugin* rdpsnd)
|
||||
{
|
||||
SetEvent(rdpsnd->stopEvent);
|
||||
if (WaitForSingleObject(rdpsnd->ScheduleThread, INFINITE) == WAIT_FAILED)
|
||||
{
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", GetLastError());
|
||||
return;
|
||||
}
|
||||
{
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", GetLastError());
|
||||
return;
|
||||
}
|
||||
CloseHandle(rdpsnd->ScheduleThread);
|
||||
CloseHandle(rdpsnd->stopEvent);
|
||||
}
|
||||
@@ -1386,9 +1387,9 @@ static UINT rdpsnd_virtual_channel_event_disconnected(rdpsndPlugin* rdpsnd)
|
||||
MessagePipe_PostQuit(rdpsnd->MsgPipe, 0);
|
||||
if (WaitForSingleObject(rdpsnd->thread, INFINITE) == WAIT_FAILED)
|
||||
{
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
return error;
|
||||
error = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu!", error);
|
||||
return error;
|
||||
}
|
||||
|
||||
CloseHandle(rdpsnd->thread);
|
||||
@@ -1449,7 +1450,7 @@ static void rdpsnd_virtual_channel_event_terminated(rdpsndPlugin* rdpsnd)
|
||||
free(rdpsnd);
|
||||
}
|
||||
|
||||
static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
{
|
||||
rdpsndPlugin* plugin;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1459,7 +1460,7 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT
|
||||
if (!plugin)
|
||||
{
|
||||
WLog_ERR(TAG, "rdpsnd_virtual_channel_init_event: error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1480,6 +1481,7 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT
|
||||
}
|
||||
if (error && plugin->rdpcontext)
|
||||
setChannelError(plugin->rdpcontext, error, "rdpsnd_virtual_channel_init_event reported an error");
|
||||
return error;
|
||||
}
|
||||
|
||||
/* rdpsnd is always built-in */
|
||||
|
||||
@@ -1030,11 +1030,11 @@ static UINT remdesk_virtual_channel_event_disconnected(remdeskPlugin* remdesk)
|
||||
UINT rc;
|
||||
|
||||
if (MessageQueue_PostQuit(remdesk->queue, 0) && (WaitForSingleObject(remdesk->thread, INFINITE) == WAIT_FAILED))
|
||||
{
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
}
|
||||
{
|
||||
rc = GetLastError();
|
||||
WLog_ERR(TAG, "WaitForSingleObject failed with error %lu", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
MessageQueue_Free(remdesk->queue);
|
||||
CloseHandle(remdesk->thread);
|
||||
@@ -1066,7 +1066,9 @@ static void remdesk_virtual_channel_event_terminated(remdeskPlugin* remdesk)
|
||||
free(remdesk);
|
||||
}
|
||||
|
||||
static VOID VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle, UINT event, LPVOID pData, UINT dataLength)
|
||||
static UINT VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle,
|
||||
UINT event, LPVOID pData,
|
||||
UINT dataLength)
|
||||
{
|
||||
remdeskPlugin* remdesk;
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
@@ -1076,7 +1078,7 @@ static VOID VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
if (!remdesk)
|
||||
{
|
||||
WLog_ERR(TAG, "error no match");
|
||||
return;
|
||||
return CHANNEL_RC_BAD_INIT_HANDLE;
|
||||
}
|
||||
|
||||
switch (event)
|
||||
@@ -1097,6 +1099,8 @@ static VOID VCAPITYPE remdesk_virtual_channel_init_event(LPVOID pInitHandle, UIN
|
||||
}
|
||||
if (error && remdesk->rdpcontext)
|
||||
setChannelError(remdesk->rdpcontext, error, "remdesk_virtual_channel_init_event reported an error");
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
/* remdesk is always built-in */
|
||||
|
||||
@@ -357,7 +357,7 @@ static BOOL android_post_connect(freerdp* instance)
|
||||
instance->update->EndPaint = android_end_paint;
|
||||
instance->update->DesktopResize = android_desktop_resize;
|
||||
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) < 0)
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
freerdp_callback("OnSettingsChanged", "(IIII)V", instance,
|
||||
|
||||
@@ -177,7 +177,8 @@ BOOL df_pre_connect(freerdp* instance)
|
||||
dfi->clrconv->palette = (rdpPalette*) malloc(sizeof(rdpPalette));
|
||||
ZeroMemory(dfi->clrconv->palette, sizeof(rdpPalette));
|
||||
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return (instance->context->cache = cache_new(instance->settings)) != NULL;
|
||||
}
|
||||
@@ -235,7 +236,7 @@ BOOL df_post_connect(freerdp* instance)
|
||||
pointer_cache_register_callbacks(instance->update);
|
||||
df_register_graphics(instance->context->graphics);
|
||||
|
||||
return freerdp_channels_post_connect(instance->context->channels, instance) >= 0;
|
||||
return freerdp_channels_post_connect(instance->context->channels, instance) == CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
BOOL df_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint)
|
||||
@@ -487,7 +488,8 @@ int main(int argc, char* argv[])
|
||||
if (status < 0)
|
||||
exit(0);
|
||||
|
||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(instance->context->channels, instance->settings))
|
||||
exit(-1);
|
||||
|
||||
data = (struct thread_data*) malloc(sizeof(struct thread_data));
|
||||
ZeroMemory(data, sizeof(sizeof(struct thread_data)));
|
||||
|
||||
@@ -967,9 +967,11 @@ BOOL mac_pre_connect(freerdp* instance)
|
||||
PubSub_SubscribeChannelDisconnected(instance->context->pubSub,
|
||||
(pChannelDisconnectedEventHandler) mac_OnChannelDisconnectedEventHandler);
|
||||
|
||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(instance->context->channels, instance->settings))
|
||||
return FALSE;
|
||||
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1011,7 +1013,8 @@ BOOL mac_post_connect(freerdp* instance)
|
||||
pointer_cache_register_callbacks(instance->update);
|
||||
graphics_register_pointer(instance->context->graphics, &rdp_pointer);
|
||||
|
||||
freerdp_channels_post_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
/* setup pasteboard (aka clipboard) for copy operations (write only) */
|
||||
view->pasteboard_wr = [NSPasteboard generalPasteboard];
|
||||
|
||||
@@ -109,7 +109,8 @@ static BOOL tf_pre_connect(freerdp* instance)
|
||||
settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = TRUE;
|
||||
settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = TRUE;
|
||||
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -122,7 +123,7 @@ static BOOL tf_post_connect(freerdp* instance)
|
||||
instance->update->BeginPaint = tf_begin_paint;
|
||||
instance->update->EndPaint = tf_end_paint;
|
||||
|
||||
return (freerdp_channels_post_connect(instance->context->channels, instance) >= 0);
|
||||
return (freerdp_channels_post_connect(instance->context->channels, instance) == CHANNEL_RC_OK);
|
||||
}
|
||||
|
||||
static void* tf_client_thread_proc(freerdp* instance)
|
||||
@@ -200,7 +201,8 @@ int main(int argc, char* argv[])
|
||||
exit(0);
|
||||
}
|
||||
|
||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(instance->context->channels, instance->settings))
|
||||
exit (-1);
|
||||
|
||||
if (!(thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)
|
||||
tf_client_thread_proc, instance, 0, NULL)))
|
||||
|
||||
@@ -114,7 +114,7 @@ static BOOL wl_pre_connect(freerdp* instance)
|
||||
{
|
||||
wlfContext* context;
|
||||
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance))
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
context = (wlfContext*) instance->context;
|
||||
@@ -149,7 +149,7 @@ static BOOL wl_post_connect(freerdp* instance)
|
||||
instance->update->BeginPaint = wl_begin_paint;
|
||||
instance->update->EndPaint = wl_end_paint;
|
||||
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) < 0)
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
|
||||
@@ -324,7 +324,8 @@ int main(int argc, char* argv[])
|
||||
if (status)
|
||||
exit(0);
|
||||
|
||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(instance->context->channels, instance->settings))
|
||||
exit(-1);
|
||||
|
||||
wlfreerdp_run(instance);
|
||||
|
||||
|
||||
@@ -333,7 +333,8 @@ BOOL wf_pre_connect(freerdp* instance)
|
||||
PubSub_SubscribeChannelDisconnected(instance->context->pubSub,
|
||||
(pChannelDisconnectedEventHandler) wf_OnChannelDisconnectedEventHandler);
|
||||
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -485,7 +486,7 @@ BOOL wf_post_connect(freerdp* instance)
|
||||
instance->update->BitmapUpdate = wf_gdi_bitmap_update;
|
||||
}
|
||||
|
||||
if (freerdp_channels_post_connect(context->channels, instance) < 0)
|
||||
if (freerdp_channels_post_connect(context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
if (wfc->fullscreen)
|
||||
@@ -1169,7 +1170,8 @@ int wfreerdp_client_start(rdpContext* context)
|
||||
if (!wfc->keyboardThread)
|
||||
return -1;
|
||||
|
||||
freerdp_client_load_addins(context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(context->channels, instance->settings))
|
||||
return -1;
|
||||
|
||||
wfc->thread = CreateThread(NULL, 0, wf_client_thread, (void*) instance, 0, &wfc->mainThreadId);
|
||||
|
||||
|
||||
@@ -1127,8 +1127,11 @@ BOOL xf_pre_connect(freerdp* instance)
|
||||
PubSub_SubscribeChannelDisconnected(instance->context->pubSub,
|
||||
(pChannelDisconnectedEventHandler) xf_OnChannelDisconnectedEventHandler);
|
||||
|
||||
freerdp_client_load_addins(channels, instance->settings);
|
||||
freerdp_channels_pre_connect(channels, instance);
|
||||
if (!freerdp_client_load_addins(channels, instance->settings))
|
||||
return FALSE;
|
||||
|
||||
if (freerdp_channels_pre_connect(channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
if (!settings->Username && !settings->CredentialsFromStdin)
|
||||
{
|
||||
@@ -1312,7 +1315,7 @@ BOOL xf_post_connect(freerdp* instance)
|
||||
if (!(xfc->clipboard = xf_clipboard_new(xfc)))
|
||||
return FALSE;
|
||||
|
||||
if (freerdp_channels_post_connect(channels, instance) < 0)
|
||||
if (freerdp_channels_post_connect(channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
EventArgsInit(&e, "xfreerdp");
|
||||
|
||||
@@ -64,9 +64,11 @@ static BOOL ios_pre_connect(freerdp* instance)
|
||||
|
||||
settings->FrameAcknowledge = 10;
|
||||
|
||||
freerdp_client_load_addins(instance->context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(instance->context->channels, instance->settings))
|
||||
return FALSE;
|
||||
|
||||
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -84,7 +86,8 @@ static BOOL ios_post_connect(freerdp* instance)
|
||||
instance->update->DesktopResize = ios_ui_resize_window;
|
||||
|
||||
// Channel allocation
|
||||
freerdp_channels_post_connect(instance->context->channels, instance);
|
||||
if (freerdp_channels_post_connect(instance->context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
[mfi->session performSelectorOnMainThread:@selector(sessionDidConnect) withObject:nil waitUntilDone:YES];
|
||||
return TRUE;
|
||||
|
||||
@@ -38,9 +38,9 @@ FREERDP_API int freerdp_channels_client_load(rdpChannels* channels, rdpSettings*
|
||||
PVIRTUALCHANNELENTRY entry, void* data);
|
||||
FREERDP_API int freerdp_channels_load_plugin(rdpChannels* channels, rdpSettings* settings,
|
||||
const char* name, void* data);
|
||||
FREERDP_API int freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API int freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API int freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API UINT freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API UINT freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance);
|
||||
FREERDP_API BOOL freerdp_channels_get_fds(rdpChannels* channels, freerdp* instance, void** read_fds,
|
||||
int* read_count, void** write_fds, int* write_count);
|
||||
FREERDP_API BOOL freerdp_channels_check_fds(rdpChannels* channels, freerdp* instance);
|
||||
|
||||
@@ -200,8 +200,9 @@ UINT freerdp_drdynvc_on_channel_disconnected(DrdynvcClientContext* context, cons
|
||||
* go through and inform all the libraries that we are initialized
|
||||
* called only from main thread
|
||||
*/
|
||||
int freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance)
|
||||
UINT freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance)
|
||||
{
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
int index;
|
||||
CHANNEL_CLIENT_DATA* pChannelClientData;
|
||||
|
||||
@@ -212,10 +213,14 @@ int freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance)
|
||||
pChannelClientData = &channels->clientDataList[index];
|
||||
|
||||
if (pChannelClientData->pChannelInitEventProc)
|
||||
pChannelClientData->pChannelInitEventProc(pChannelClientData->pInitHandle, CHANNEL_EVENT_INITIALIZED, 0, 0);
|
||||
error = pChannelClientData->pChannelInitEventProc(
|
||||
pChannelClientData->pInitHandle,
|
||||
CHANNEL_EVENT_INITIALIZED, 0, 0);
|
||||
if (CHANNEL_RC_OK != error)
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -223,8 +228,9 @@ int freerdp_channels_pre_connect(rdpChannels* channels, freerdp* instance)
|
||||
* this will tell the libraries that its ok to call MyVirtualChannelOpen
|
||||
* called only from main thread
|
||||
*/
|
||||
int freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance)
|
||||
UINT freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance)
|
||||
{
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
int index;
|
||||
char* name;
|
||||
char* hostname;
|
||||
@@ -246,7 +252,10 @@ int freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance)
|
||||
|
||||
pChannelOpenData = &channels->openDataList[index];
|
||||
|
||||
pChannelClientData->pChannelInitEventProc(pChannelClientData->pInitHandle, CHANNEL_EVENT_CONNECTED, hostname, hostnameLength);
|
||||
error = pChannelClientData->pChannelInitEventProc(pChannelClientData->pInitHandle,
|
||||
CHANNEL_EVENT_CONNECTED, hostname, hostnameLength);
|
||||
if (error != CHANNEL_RC_OK)
|
||||
goto fail;
|
||||
|
||||
name = (char*) malloc(9);
|
||||
if (!name)
|
||||
@@ -272,7 +281,8 @@ int freerdp_channels_post_connect(rdpChannels* channels, freerdp* instance)
|
||||
channels->drdynvc->OnChannelDisconnected = freerdp_drdynvc_on_channel_disconnected;
|
||||
}
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
return error;
|
||||
}
|
||||
|
||||
int freerdp_channels_data(freerdp* instance, UINT16 channelId, BYTE* data, int dataSize, int flags, int totalSize)
|
||||
@@ -437,8 +447,9 @@ BOOL freerdp_channels_check_fds(rdpChannels* channels, freerdp* instance)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
UINT freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
{
|
||||
UINT error = CHANNEL_RC_OK;
|
||||
int index;
|
||||
char* name;
|
||||
CHANNEL_OPEN_DATA* pChannelOpenData;
|
||||
@@ -458,7 +469,11 @@ int freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
pChannelClientData = &channels->clientDataList[index];
|
||||
|
||||
if (pChannelClientData->pChannelInitEventProc)
|
||||
pChannelClientData->pChannelInitEventProc(pChannelClientData->pInitHandle, CHANNEL_EVENT_DISCONNECTED, 0, 0);
|
||||
error = pChannelClientData->pChannelInitEventProc(
|
||||
pChannelClientData->pInitHandle,
|
||||
CHANNEL_EVENT_DISCONNECTED, 0, 0);
|
||||
if (error != CHANNEL_RC_OK)
|
||||
goto fail;
|
||||
|
||||
pChannelOpenData = &channels->openDataList[index];
|
||||
|
||||
@@ -476,7 +491,8 @@ int freerdp_channels_disconnect(rdpChannels* channels, freerdp* instance)
|
||||
free(name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
return error;
|
||||
}
|
||||
|
||||
void freerdp_channels_close(rdpChannels* channels, freerdp* instance)
|
||||
|
||||
@@ -400,7 +400,7 @@ BOOL rdp_client_reconnect(rdpRdp* rdp)
|
||||
status = rdp_client_connect(rdp);
|
||||
|
||||
if (status)
|
||||
status = (freerdp_channels_post_connect(channels, context->instance) >= 0);
|
||||
status = (freerdp_channels_post_connect(channels, context->instance) == CHANNEL_RC_OK);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -133,9 +133,11 @@ BOOL shw_pre_connect(freerdp* instance)
|
||||
PubSub_SubscribeChannelDisconnected(context->pubSub,
|
||||
(pChannelDisconnectedEventHandler) shw_OnChannelDisconnectedEventHandler);
|
||||
|
||||
freerdp_client_load_addins(context->channels, instance->settings);
|
||||
if (!freerdp_client_load_addins(context->channels, instance->settings))
|
||||
return FALSE;
|
||||
|
||||
freerdp_channels_pre_connect(context->channels, instance);
|
||||
if (freerdp_channels_pre_connect(context->channels, instance) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -159,7 +161,7 @@ BOOL shw_post_connect(freerdp* instance)
|
||||
instance->update->DesktopResize = shw_desktop_resize;
|
||||
instance->update->SurfaceFrameMarker = shw_surface_frame_marker;
|
||||
|
||||
return (freerdp_channels_post_connect(instance->context->channels, instance) >= 0) ;
|
||||
return (freerdp_channels_post_connect(instance->context->channels, instance) == CHANNEL_RC_OK) ;
|
||||
}
|
||||
|
||||
void* shw_client_thread(void* arg)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#include "shadow_channels.h"
|
||||
|
||||
int shadow_client_channels_post_connect(rdpShadowClient* client)
|
||||
UINT shadow_client_channels_post_connect(rdpShadowClient* client)
|
||||
{
|
||||
if (WTSVirtualChannelManagerIsChannelJoined(client->vcm, ENCOMSP_SVC_CHANNEL_NAME))
|
||||
{
|
||||
@@ -43,7 +43,7 @@ int shadow_client_channels_post_connect(rdpShadowClient* client)
|
||||
|
||||
shadow_client_audin_init(client);
|
||||
|
||||
return 1;
|
||||
return CHANNEL_RC_OK;
|
||||
}
|
||||
|
||||
void shadow_client_channels_free(rdpShadowClient* client)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int shadow_client_channels_post_connect(rdpShadowClient* client);
|
||||
UINT shadow_client_channels_post_connect(rdpShadowClient* client);
|
||||
void shadow_client_channels_free(rdpShadowClient* client);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -235,7 +235,8 @@ BOOL shadow_client_post_connect(freerdp_peer* peer)
|
||||
|
||||
peer->update->DesktopResize(peer->update->context);
|
||||
|
||||
shadow_client_channels_post_connect(client);
|
||||
if (shadow_client_channels_post_connect(client) != CHANNEL_RC_OK)
|
||||
return FALSE;
|
||||
|
||||
invalidRect.left = 0;
|
||||
invalidRect.top = 0;
|
||||
|
||||
@@ -116,7 +116,7 @@ typedef struct tagCHANNEL_PDU_HEADER
|
||||
#define VCEXPORT __export
|
||||
#endif
|
||||
|
||||
typedef VOID VCAPITYPE CHANNEL_INIT_EVENT_FN(LPVOID pInitHandle,
|
||||
typedef UINT VCAPITYPE CHANNEL_INIT_EVENT_FN(LPVOID pInitHandle,
|
||||
UINT event, LPVOID pData, UINT dataLength);
|
||||
|
||||
typedef CHANNEL_INIT_EVENT_FN *PCHANNEL_INIT_EVENT_FN;
|
||||
|
||||
Reference in New Issue
Block a user