Hi,
Better try the opposite approach.
If you check the sample client, there already is a settings struct
allocated with default values when
freerdp_client_settings_parse_command_line is called.
Populate this struct instance with your connection data and you're set.
regards
Armin
On 9/26/18 2:11 AM, Alexandr via FreeRDP-devel wrote:
> Good day.
> I have problem with writing rdp client.
> I can't find proper way to pass rdpSetting structure
>
> my code:
>
> i->instance = freerdp_new();
> if(!i->instance)
> {
> WLog_ERR(TAG, "Failed to create FreeRDP instance");
> goto error;
> }
> i->instance->PreConnect = rdp_pre_connect;
> i->instance->PostConnect = rdp_post_connect;
> i->instance->VerifyCertificate = rdp_verify_certificate;
> i->instance->ReceiveChannelData = rdp_receive_channel_data;
> i->instance->ContextNew = rdp_context_new;
> i->instance->ContextFree = rdp_context_free;
> i->instance->ContextSize = sizeof(my_rdp_context);
> i->settings = freerdp_settings_new(0);
> if(!i->settings)
> {
> WLog_ERR(TAG, "Failed to create FreeRDP settings");
> goto error;
> }
> if (!freerdp_context_new(i->instance))
> {
> WLog_ERR(TAG, "Failed to create FreeRDP context");
> goto error;
> }
> ((my_rdp_context*)i->instance->context)->my_internals =
> internals;
> i->instance->settings = i->settings;
> i->settings->instance = i->instance;
> i->instance->context->settings = i->settings;
>
> ....
> ....
>
>
> rdpSettings *s = i->instance->settings;
>
> s->ServerMode = FALSE;
>
>
> s->TlsSecurity = !(i->my_settings.notls.value);
> s->ServerHostname = strdup((char*)i->my_settings.host.value);
> s->ServerPort = i->my_settings.port.value;
> if(i->my_settings.user.value)
> {
> s->Username = strdup((char*)i->my_settings.user.value);
> }
> if(i->my_settings.pass.value)
> {
> s->Password = strdup((char*)i->my_settings.pass.value);
> }
> if(!i->my_settings.user.value && !i->my_settings.pass.value)
> {
> /* TODO: desable authentication */
> }
> if(i->my_settings.nowallp.value)
> {
> s->DisableWallpaper = i->my_settings.nowallp.value;
> s->PerformanceFlags |= PERF_DISABLE_WALLPAPER;
> }
> if(i->my_settings.nowdrag.value)
> {
> s->DisableFullWindowDrag = i-
>> my_settings.nowdrag.value;
> s->PerformanceFlags |= PERF_DISABLE_FULLWINDOWDRAG;
> }
> if(i->my_settings.nomani.value)
> {
> s->DisableMenuAnims = i->my_settings.nomani.value;
> s->PerformanceFlags |= PERF_DISABLE_MENUANIMATIONS;
> }
> if(i->my_settings.notheme.value)
> {
> s->DisableThemes = i->my_settings.notheme.value;
> s->PerformanceFlags |= PERF_DISABLE_THEMING;
> }
> s->NlaSecurity = !(i->my_settings.nonla.value);
> s->DesktopWidth = i->my_settings.width.value;
> s->DesktopHeight = i->my_settings.height.value;
> if(i->my_settings.pcb.value)
> {
> s->SendPreconnectionPdu = TRUE;
> s->PreconnectionBlob = strdup(i-
>> my_settings.pcb.value);
> }
>
> s->SoftwareGdi = TRUE;
> s->IgnoreCertificate = TRUE;
> s->NegotiateSecurityLayer = TRUE;
> s->RdpSecurity = TRUE;
> s->ExtSecurity = FALSE;
> s->Authentication = TRUE;
>
> switch (i->my_settings.perf.value)
> {
> case 0:
> // LAN
> s->PerformanceFlags = PERF_FLAG_NONE;
> s->ConnectionType = CONNECTION_TYPE_LAN;
> s->AllowFontSmoothing = TRUE;
> break;
> case 1:
> // Broadband
> s->PerformanceFlags = PERF_DISABLE_WALLPAPER;
> s->ConnectionType =
> CONNECTION_TYPE_BROADBAND_HIGH;
> break;
> case 2:
> // Modem
> s->PerformanceFlags =
> PERF_DISABLE_WALLPAPER |
> PERF_DISABLE_FULLWINDOWDRAG |
> PERF_DISABLE_MENUANIMATIONS |
> PERF_DISABLE_THEMING;
> s->ConnectionType = CONNECTION_TYPE_MODEM;
> break;
> }
>
>
> ....
> ....
>
>
> freerdp_connect(i->instance);
>
> the problem is what freerdp_connect using rdpSettings from instance-
>> context->rdp which is not copied from instance->settings, also
> structure definition of rdp_rdp is not exposed for external programs to
> use via api headers, so my questions is how to pass my settings
> properly ?
>
> i can't find any samples or documentation on how to use it, except few
> clients which handling commandline (which is not my usecase)
>
> thx in advance.
>
>
>
> _______________________________________________
> FreeRDP-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/freerdp-devel
_______________________________________________
FreeRDP-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freerdp-devel