static void drdynvc_process_connect(rdpSvcPlugin* plugin) { drdynvcPlugin* drdynvc = (drdynvcPlugin*)plugin; DEBUG_DVC("connecting"); drdynvc->channel_mgr = dvcman_new(drdynvc); dvcman_load_plugin(drdynvc->channel_mgr, svc_plugin_get_data(plugin)); dvcman_init(drdynvc->channel_mgr); }
static void drdynvc_process_connect(rdpSvcPlugin* plugin) { int index; ADDIN_ARGV* args; rdpSettings* settings; drdynvcPlugin* drdynvc = (drdynvcPlugin*)plugin; DEBUG_DVC("connecting"); drdynvc->channel_mgr = dvcman_new(drdynvc); drdynvc->channel_error = 0; settings = (rdpSettings*) ((rdpSvcPlugin*) plugin)->channel_entry_points.pExtendedData; for (index = 0; index < settings->DynamicChannelCount; index++) { args = settings->DynamicChannelArray[index]; dvcman_load_addin(drdynvc->channel_mgr, args); } dvcman_init(drdynvc->channel_mgr); }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVOID pData, UINT32 dataLength) { UINT error; UINT32 status; UINT32 index; ADDIN_ARGV* args; rdpSettings* settings; if (!drdynvc) return CHANNEL_RC_BAD_CHANNEL_HANDLE; status = drdynvc->channelEntryPoints.pVirtualChannelOpenEx(drdynvc->InitHandle, &drdynvc->OpenHandle, drdynvc->channelDef.name, drdynvc_virtual_channel_open_event_ex); if (status != CHANNEL_RC_OK) { WLog_Print(drdynvc->log, WLOG_ERROR, "pVirtualChannelOpen failed with %s [%08"PRIX32"]", WTSErrorToString(status), status); return status; } drdynvc->queue = MessageQueue_New(NULL); if (!drdynvc->queue) { error = CHANNEL_RC_NO_MEMORY; WLog_Print(drdynvc->log, WLOG_ERROR, "MessageQueue_New failed!"); goto error; } drdynvc->queue->object.fnObjectFree = drdynvc_queue_object_free; drdynvc->channel_mgr = dvcman_new(drdynvc); if (!drdynvc->channel_mgr) { error = CHANNEL_RC_NO_MEMORY; WLog_Print(drdynvc->log, WLOG_ERROR, "dvcman_new failed!"); goto error; } settings = (rdpSettings*) drdynvc->channelEntryPoints.pExtendedData; for (index = 0; index < settings->DynamicChannelCount; index++) { args = settings->DynamicChannelArray[index]; error = dvcman_load_addin(drdynvc, drdynvc->channel_mgr, args, settings); if (CHANNEL_RC_OK != error) goto error; } if ((error = dvcman_init(drdynvc, drdynvc->channel_mgr))) { WLog_Print(drdynvc->log, WLOG_ERROR, "dvcman_init failed with error %"PRIu32"!", error); goto error; } drdynvc->state = DRDYNVC_STATE_CAPABILITIES; if (!(drdynvc->thread = CreateThread(NULL, 0, drdynvc_virtual_channel_client_thread, (void*) drdynvc, 0, NULL))) { error = ERROR_INTERNAL_ERROR; WLog_Print(drdynvc->log, WLOG_ERROR, "CreateThread failed!"); goto error; } error: return error; }
/** * Function description * * @return 0 on success, otherwise a Win32 error code */ static UINT drdynvc_virtual_channel_event_connected(drdynvcPlugin* drdynvc, LPVOID pData, UINT32 dataLength) { UINT32 status; UINT32 index; ADDIN_ARGV* args; rdpSettings* settings; UINT error; status = drdynvc->channelEntryPoints.pVirtualChannelOpen(drdynvc->InitHandle, &drdynvc->OpenHandle, drdynvc->channelDef.name, drdynvc_virtual_channel_open_event); if (status != CHANNEL_RC_OK) { WLog_ERR(TAG, "pVirtualChannelOpen failed with %s [%08X]", WTSErrorToString(status), status); return status; } if ((error = drdynvc_add_open_handle_data(drdynvc->OpenHandle, drdynvc))) { WLog_ERR(TAG, "drdynvc_add_open_handle_data failed with error %lu!", error); return error; } drdynvc->queue = MessageQueue_New(NULL); if (!drdynvc->queue) { error = CHANNEL_RC_NO_MEMORY; WLog_ERR(TAG, "MessageQueue_New failed!"); goto error; } drdynvc->channel_mgr = dvcman_new(drdynvc); if (!drdynvc->channel_mgr) { error = CHANNEL_RC_NO_MEMORY; WLog_ERR(TAG, "dvcman_new failed!"); goto error; } settings = (rdpSettings*) drdynvc->channelEntryPoints.pExtendedData; for (index = 0; index < settings->DynamicChannelCount; index++) { args = settings->DynamicChannelArray[index]; error = dvcman_load_addin(drdynvc->channel_mgr, args, settings); if (CHANNEL_RC_OK != error) goto error; } if ((error = dvcman_init(drdynvc->channel_mgr))) { WLog_ERR(TAG, "dvcman_init failed with error %lu!", error); goto error; } drdynvc->state = DRDYNVC_STATE_CAPABILITIES; if (!(drdynvc->thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) drdynvc_virtual_channel_client_thread, (void*) drdynvc, 0, NULL))) { error = ERROR_INTERNAL_ERROR; WLog_ERR(TAG, "CreateThread failed!"); goto error; } return CHANNEL_RC_OK; error: drdynvc_remove_open_handle_data(drdynvc->OpenHandle); return error; }