On Wed, Sep 26, 2018 at 9:11 AM, Armin Novak via FreeRDP-devel <freerdp-devel@lists.sourceforge.net> wrote: > 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 >
In a similar vein, look at what is populated in the struct by the various FreeRDP options given to the parse_command_line function. Some of the security options in particular are not very straightforward. Some actual interfaces to programs (GPG?) construct a command line and run the program with it instead of using their constituent libraries. This could definitely use better documentation, but to not be a lot of work it would have had to have been done when the features were added. Cheers, R0b0t1 > > 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 >> FreeRDP-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/freerdp-devel > > > > _______________________________________________ > FreeRDP-devel mailing list > FreeRDP-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freerdp-devel _______________________________________________ FreeRDP-devel mailing list FreeRDP-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel