Example #1
0
static ITSMFDecoder* tsmf_load_decoder_by_name(const char* name, TS_AM_MEDIA_TYPE* media_type)
{
	ITSMFDecoder* decoder;
	TSMF_DECODER_ENTRY entry;
	char* fullname;

	if (strrchr(name, '.') != NULL)
		entry = (TSMF_DECODER_ENTRY) freerdp_load_plugin(name, TSMF_DECODER_EXPORT_FUNC_NAME);
	else
	{
		fullname = xzalloc(strlen(name) + 6);
		strcpy(fullname, "tsmf_");
		strcat(fullname, name);
		entry = (TSMF_DECODER_ENTRY) freerdp_load_plugin(fullname, TSMF_DECODER_EXPORT_FUNC_NAME);
		free(fullname);
	}
	if (entry == NULL)
	{
		return NULL;
	}

	decoder = entry();
	if (decoder == NULL)
	{
		DEBUG_WARN("failed to call export function in %s", name);
		return NULL;
	}
	if (!decoder->SetFormat(decoder, media_type))
	{
		decoder->Free(decoder);
		decoder = NULL;
	}
	return decoder;
}
Example #2
0
static boolean rdpsnd_load_device_plugin(rdpsndPlugin* rdpsnd, const char* name, RDP_PLUGIN_DATA* data)
{
	FREERDP_RDPSND_DEVICE_ENTRY_POINTS entryPoints;
	PFREERDP_RDPSND_DEVICE_ENTRY entry;
	char* fullname;

	if (strrchr(name, '.') != NULL)
		entry = (PFREERDP_RDPSND_DEVICE_ENTRY)freerdp_load_plugin(name, RDPSND_DEVICE_EXPORT_FUNC_NAME);
	else
	{
		fullname = xzalloc(strlen(name) + 8);
		strcpy(fullname, "rdpsnd_");
		strcat(fullname, name);
		entry = (PFREERDP_RDPSND_DEVICE_ENTRY)freerdp_load_plugin(fullname, RDPSND_DEVICE_EXPORT_FUNC_NAME);
		xfree(fullname);
	}
	if (entry == NULL)
	{
		return false;
	}

	entryPoints.rdpsnd = rdpsnd;
	entryPoints.pRegisterRdpsndDevice = rdpsnd_register_device_plugin;
	entryPoints.plugin_data = data;
	if (entry(&entryPoints) != 0)
	{
		DEBUG_WARN("%s entry returns error.", name);
		return false;
	}
	return true;
}
Example #3
0
static ITSMFAudioDevice* tsmf_load_audio_device_by_name(const char* name, const char* device)
{
	ITSMFAudioDevice* audio;
	TSMF_AUDIO_DEVICE_ENTRY entry;
	char* fullname;

	if (strrchr(name, '.') != NULL)
		entry = (TSMF_AUDIO_DEVICE_ENTRY) freerdp_load_plugin(name, TSMF_AUDIO_DEVICE_EXPORT_FUNC_NAME);
	else
	{
		fullname = xzalloc(strlen(name) + 6);
		strcpy(fullname, "tsmf_");
		strcat(fullname, name);
		entry = (TSMF_AUDIO_DEVICE_ENTRY) freerdp_load_plugin(fullname, TSMF_AUDIO_DEVICE_EXPORT_FUNC_NAME);
		xfree(fullname);
	}
	if (entry == NULL)
	{
		return NULL;
	}

	audio = entry();
	if (audio == NULL)
	{
		DEBUG_WARN("failed to call export function in %s", name);
		return NULL;
	}
	if (!audio->Open(audio, device))
	{
		audio->Free(audio);
		audio = NULL;
	}
	return audio;
}
Example #4
0
void test_load_plugin(void)
{
	void* entry;

#ifdef _WIN32
	/* untested */
	entry = freerdp_load_plugin("..\\channels\\cliprdr\\cliprdr", "VirtualChannelEntry");
#else
	entry = freerdp_load_plugin("../channels/cliprdr/cliprdr.so", "VirtualChannelEntry");
#endif
	CU_ASSERT(entry != NULL);
}
Example #5
0
BOOL devman_load_device_service(DEVMAN* devman, RDP_PLUGIN_DATA* plugin_data)
{
	char* name;
	DEVICE_SERVICE_ENTRY_POINTS ep;
	PDEVICE_SERVICE_ENTRY entry = NULL;

	name = (char*) plugin_data->data[0];
	entry = (PDEVICE_SERVICE_ENTRY) freerdp_channels_find_static_device_service_entry(name);

	if (!entry)
	{
		printf("loading device service %s (plugin)\n", name);
		entry = freerdp_load_plugin(name, "DeviceServiceEntry");
	}
	else
	{
		printf("loading device service %s (static)\n", name);
	}

	if (entry == NULL)
		return FALSE;

	ep.devman = devman;
	ep.RegisterDevice = devman_register_device;
	ep.plugin_data = plugin_data;

	entry(&ep);

	return TRUE;
}
Example #6
0
/**
 * this is called when processing the command line parameters
 * called only from main thread
 */
int freerdp_channels_load_plugin(rdpChannels* chan_man, rdpSettings* settings,
	const char* name, void* data)
{
	struct lib_data* lib;
	CHANNEL_ENTRY_POINTS_EX ep;
	int ok;

	DEBUG_CHANNELS("%s", name);
	if (chan_man->num_libs + 1 >= CHANNEL_MAX_COUNT)
	{
		DEBUG_CHANNELS("too many channels");
		return 1;
	}
	lib = chan_man->libs + chan_man->num_libs;
	lib->entry = (PVIRTUALCHANNELENTRY)freerdp_load_plugin(name, CHANNEL_EXPORT_FUNC_NAME);
	if (lib->entry == NULL)
	{
		DEBUG_CHANNELS("failed to find export function");
		return 1;
	}
	ep.cbSize = sizeof(ep);
	ep.protocolVersion = VIRTUAL_CHANNEL_VERSION_WIN2000;
	ep.pVirtualChannelInit = MyVirtualChannelInit;
	ep.pVirtualChannelOpen = MyVirtualChannelOpen;
	ep.pVirtualChannelClose = MyVirtualChannelClose;
	ep.pVirtualChannelWrite = MyVirtualChannelWrite;
	ep.pExtendedData = data;
	ep.pVirtualChannelEventPush = MyVirtualChannelEventPush;

	/* enable MyVirtualChannelInit */
	chan_man->can_call_init = 1;
	chan_man->settings = settings;

	freerdp_mutex_lock(g_mutex_init);
	g_init_chan_man = chan_man;
	ok = lib->entry((PCHANNEL_ENTRY_POINTS)&ep);
	g_init_chan_man = NULL;
	freerdp_mutex_unlock(g_mutex_init);

	/* disable MyVirtualChannelInit */
	chan_man->settings = 0;
	chan_man->can_call_init = 0;
	if (!ok)
	{
		DEBUG_CHANNELS("export function call failed");
		return 1;
	}
	return 0;
}
Example #7
0
boolean devman_load_device_service(DEVMAN* devman, RDP_PLUGIN_DATA* plugin_data)
{
	DEVICE_SERVICE_ENTRY_POINTS ep;
	PDEVICE_SERVICE_ENTRY entry;

	entry = freerdp_load_plugin((char*) plugin_data->data[0], "DeviceServiceEntry");

	if (entry == NULL)
		return false;

	ep.devman = devman;
	ep.RegisterDevice = devman_register_device;
	ep.UnregisterDevice = devman_unregister_device;
	ep.plugin_data = plugin_data;

	entry(&ep);

	return true;
}
Example #8
0
int dvcman_load_plugin(IWTSVirtualChannelManager* pChannelMgr, FRDP_PLUGIN_DATA* data)
{
    DVCMAN_ENTRY_POINTS entryPoints;
    PDVC_PLUGIN_ENTRY pDVCPluginEntry = NULL;

    if (data != NULL)
    {
        pDVCPluginEntry = freerdp_load_plugin((char*)data->data[0], "DVCPluginEntry");

        if(pDVCPluginEntry != NULL)
        {
            entryPoints.iface.RegisterPlugin = dvcman_register_plugin;
            entryPoints.iface.GetPlugin = dvcman_get_plugin;
            entryPoints.iface.GetPluginData = dvcman_get_plugin_data;
            entryPoints.dvcman = (DVCMAN*)pChannelMgr;
            entryPoints.plugin_data = data;
            pDVCPluginEntry((IDRDYNVC_ENTRY_POINTS*)&entryPoints);
        }
    }

    return 0;
}