FreeRDP
Loading...
Searching...
No Matches
Proxy Configuration

Data Structures

struct  proxyConfig
 

Functions

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump (const char *file)
 pf_server_config_dump Dumps a default INI configuration file
 
FREERDP_API void pf_server_config_free (proxyConfig *config)
 pf_server_config_free Releases all resources associated with proxyConfig
 
WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * server_config_load_ini (wIniFile *ini)
 server_config_load_ini Create a proxyConfig from a already loaded INI file.
 
WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * pf_server_config_load_file (const char *path)
 pf_server_config_load_file Create a proxyConfig from a INI file found at path.
 
WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * pf_server_config_load_buffer (const char *buffer)
 pf_server_config_load_buffer Create a proxyConfig from a memory string buffer in INI file format
 
FREERDP_API void pf_server_config_print (const proxyConfig *config)
 pf_server_config_print Print the configuration to stdout
 
WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_required_plugins_count (const proxyConfig *config)
 pf_config_required_plugins_count
 
WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_required_plugin (const proxyConfig *config, size_t index)
 pf_config_required_plugin
 
WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_modules_count (const proxyConfig *config)
 pf_config_modules_count
 
WINPR_ATTR_NODISCARD FREERDP_API const char ** pf_config_modules (const proxyConfig *config)
 pf_config_modules
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_clone (proxyConfig **dst, const proxyConfig *config)
 pf_config_clone Create a copy of the configuration
 
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_plugin (proxyPluginsManager *plugins_manager, void *userdata)
 pf_config_plugin Register a proxy plugin handling event filtering defined in the configuration.
 
WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_get (const proxyConfig *config, const char *section, const char *key)
 pf_config_get get a value for a section/key
 

Detailed Description

FreeRDP: A Remote Desktop Protocol Implementation FreeRDP Proxy Server

Copyright 2021-2023 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2021-2023 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Function Documentation

◆ pf_config_clone()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_clone ( proxyConfig **  dst,
const proxyConfig *  config 
)

pf_config_clone Create a copy of the configuration

Parameters
dstA pointer that receives the newly allocated copy
configThe source configuration to copy
Returns
TRUE for success, FALSE otherwise

Definition at line 1009 of file pf_config.c.

1010{
1011 proxyConfig* tmp = calloc(1, sizeof(proxyConfig));
1012
1013 WINPR_ASSERT(dst);
1014 WINPR_ASSERT(config);
1015
1016 if (!tmp)
1017 return FALSE;
1018
1019 *tmp = *config;
1020
1021 if (!pf_config_copy_string(&tmp->Host, config->Host))
1022 goto fail;
1023 if (!pf_config_copy_string(&tmp->TargetHost, config->TargetHost))
1024 goto fail;
1025 if (!pf_config_copy_string(&tmp->TargetUser, config->TargetUser))
1026 goto fail;
1027 if (!pf_config_copy_string(&tmp->TargetDomain, config->TargetDomain))
1028 goto fail;
1029 if (!pf_config_copy_string(&tmp->TargetPassword, config->TargetPassword))
1030 goto fail;
1031 if (!pf_config_copy_string_list(&tmp->Passthrough, &tmp->PassthroughCount, config->Passthrough,
1032 config->PassthroughCount))
1033 goto fail;
1034 if (!pf_config_copy_string_list(&tmp->Intercept, &tmp->InterceptCount, config->Intercept,
1035 config->InterceptCount))
1036 goto fail;
1037 if (!pf_config_copy_string_list(&tmp->Modules, &tmp->ModulesCount, config->Modules,
1038 config->ModulesCount))
1039 goto fail;
1040 if (!pf_config_copy_string_list(&tmp->RequiredPlugins, &tmp->RequiredPluginsCount,
1041 config->RequiredPlugins, config->RequiredPluginsCount))
1042 goto fail;
1043 if (!pf_config_copy_string(&tmp->CertificateFile, config->CertificateFile))
1044 goto fail;
1045 if (!pf_config_copy_string(&tmp->CertificateContent, config->CertificateContent))
1046 goto fail;
1047 if (!pf_config_copy_string_n(&tmp->CertificatePEM, config->CertificatePEM,
1048 config->CertificatePEMLength))
1049 goto fail;
1050 if (!pf_config_copy_string(&tmp->PrivateKeyFile, config->PrivateKeyFile))
1051 goto fail;
1052 if (!pf_config_copy_string(&tmp->PrivateKeyContent, config->PrivateKeyContent))
1053 goto fail;
1054 if (!pf_config_copy_string_n(&tmp->PrivateKeyPEM, config->PrivateKeyPEM,
1055 config->PrivateKeyPEMLength))
1056 goto fail;
1057
1058 tmp->ini = IniFile_Clone(config->ini);
1059 if (!tmp->ini)
1060 goto fail;
1061
1062 *dst = tmp;
1063 return TRUE;
1064
1065fail:
1066 WINPR_PRAGMA_DIAG_PUSH
1067 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
1069 WINPR_PRAGMA_DIAG_POP
1070 return FALSE;
1071}
void pf_server_config_free(proxyConfig *config)
pf_server_config_free Releases all resources associated with proxyConfig
Definition pf_config.c:900

References pf_server_config_free().

Here is the call graph for this function:

◆ pf_config_get()

WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_get ( const proxyConfig *  config,
const char *  section,
const char *  key 
)

pf_config_get get a value for a section/key

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
sectionThe name of the section the key is in, must not be nullptr
keyThe name of the key to look for. Must not be nullptr
Returns
A pointer to the value for section/key or nullptr if not found

Definition at line 1381 of file pf_config.c.

1382{
1383 WINPR_ASSERT(config);
1384 WINPR_ASSERT(config->ini);
1385 WINPR_ASSERT(section);
1386 WINPR_ASSERT(key);
1387
1388 return IniFile_GetKeyValueString(config->ini, section, key);
1389}

◆ pf_config_modules()

WINPR_ATTR_NODISCARD FREERDP_API const char ** pf_config_modules ( const proxyConfig *  config)

pf_config_modules

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
An array of strings of size pf_config_modules_count with the module names.

Definition at line 947 of file pf_config.c.

948{
949 union
950 {
951 char** ppc;
952 const char** cppc;
953 } cnv;
954
955 WINPR_ASSERT(config);
956
957 cnv.ppc = config->Modules;
958 return cnv.cppc;
959}

◆ pf_config_modules_count()

WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_modules_count ( const proxyConfig *  config)

pf_config_modules_count

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
The number of proxy modules configured.

Definition at line 941 of file pf_config.c.

942{
943 WINPR_ASSERT(config);
944 return config->ModulesCount;
945}

◆ pf_config_plugin()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_config_plugin ( proxyPluginsManager *  plugins_manager,
void *  userdata 
)

pf_config_plugin Register a proxy plugin handling event filtering defined in the configuration.

Parameters
plugins_managerThe plugin manager
userdataA proxyConfig* to use as reference
Returns
TRUE for success, FALSE for failure

Definition at line 1349 of file pf_config.c.

1350{
1351 struct config_plugin_data* custom = nullptr;
1352 proxyPlugin plugin = WINPR_C_ARRAY_INIT;
1353
1354 plugin.name = config_plugin_name;
1355 plugin.description = config_plugin_desc;
1356 plugin.PluginUnload = config_plugin_unload;
1357
1358 plugin.KeyboardEvent = config_plugin_keyboard_event;
1359 plugin.UnicodeEvent = config_plugin_unicode_event;
1360 plugin.MouseEvent = config_plugin_mouse_event;
1361 plugin.MouseExEvent = config_plugin_mouse_ex_event;
1362 plugin.ClientChannelData = config_plugin_client_channel_data;
1363 plugin.ServerChannelData = config_plugin_server_channel_data;
1364 plugin.ChannelCreate = config_plugin_channel_create;
1365 plugin.DynamicChannelCreate = config_plugin_dynamic_channel_create;
1366 plugin.userdata = userdata;
1367
1368 custom = calloc(1, sizeof(struct config_plugin_data));
1369 if (!custom)
1370 return FALSE;
1371
1372 custom->mgr = plugins_manager;
1373 custom->config = userdata;
1374
1375 plugin.custom = custom;
1376 plugin.userdata = userdata;
1377
1378 return plugins_manager->RegisterPlugin(plugins_manager, &plugin);
1379}

◆ pf_config_required_plugin()

WINPR_ATTR_NODISCARD FREERDP_API const char * pf_config_required_plugin ( const proxyConfig *  config,
size_t  index 
)

pf_config_required_plugin

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
indexThe index of the plugin to return
Returns
The name of the plugin or nullptr.

Definition at line 932 of file pf_config.c.

933{
934 WINPR_ASSERT(config);
935 if (index >= config->RequiredPluginsCount)
936 return nullptr;
937
938 return config->RequiredPlugins[index];
939}

◆ pf_config_required_plugins_count()

WINPR_ATTR_NODISCARD FREERDP_API size_t pf_config_required_plugins_count ( const proxyConfig *  config)

pf_config_required_plugins_count

Parameters
configA pointer to the proxyConfig. Must NOT be nullptr.
Returns
The number of required plugins configured.

Definition at line 926 of file pf_config.c.

927{
928 WINPR_ASSERT(config);
929 return config->RequiredPluginsCount;
930}

◆ pf_server_config_dump()

WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump ( const char *  file)

pf_server_config_dump Dumps a default INI configuration file

Parameters
fileThe file to write to. Existing files are truncated.
Returns
TRUE for success, FALSE if the file could not be written.

Definition at line 625 of file pf_config.c.

626{
627 BOOL rc = FALSE;
628 wIniFile* ini = IniFile_New();
629 if (!ini)
630 return FALSE;
631
632 /* Proxy server configuration */
633 if (IniFile_SetKeyValueString(ini, section_server, key_host, "0.0.0.0") < 0)
634 goto fail;
635 if (IniFile_SetKeyValueInt(ini, section_server, key_port, 3389) < 0)
636 goto fail;
637
638 /* Target configuration */
639 if (IniFile_SetKeyValueString(ini, section_target, key_host, "somehost.example.com") < 0)
640 goto fail;
641 if (IniFile_SetKeyValueInt(ini, section_target, key_port, 3389) < 0)
642 goto fail;
643 if (IniFile_SetKeyValueString(ini, section_target, key_target_fixed, bool_str_true) < 0)
644 goto fail;
645 if (IniFile_SetKeyValueInt(ini, section_target, key_target_tls_seclevel, 1) < 0)
646 goto fail;
647
648 /* Codec configuration */
649 if (IniFile_SetKeyValueString(ini, section_codecs, key_codecs_rfx, bool_str_true) < 0)
650 goto fail;
651 if (IniFile_SetKeyValueString(ini, section_codecs, key_codecs_nsc, bool_str_true) < 0)
652 goto fail;
653
654 /* Channel configuration */
655 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_gfx, bool_str_true) < 0)
656 goto fail;
657 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_disp, bool_str_true) < 0)
658 goto fail;
659 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_clip, bool_str_true) < 0)
660 goto fail;
661 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_mic, bool_str_true) < 0)
662 goto fail;
663 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_sound, bool_str_true) < 0)
664 goto fail;
665 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_rdpdr, bool_str_true) < 0)
666 goto fail;
667 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_video, bool_str_true) < 0)
668 goto fail;
669 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_camera, bool_str_true) < 0)
670 goto fail;
671 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_rails, bool_str_false) < 0)
672 goto fail;
673
674 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_blacklist, bool_str_true) < 0)
675 goto fail;
676 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_pass, "") < 0)
677 goto fail;
678 if (IniFile_SetKeyValueString(ini, section_channels, key_channels_intercept, "") < 0)
679 goto fail;
680
681 /* Input configuration */
682 if (IniFile_SetKeyValueString(ini, section_input, key_input_kbd, bool_str_true) < 0)
683 goto fail;
684 if (IniFile_SetKeyValueString(ini, section_input, key_input_mouse, bool_str_true) < 0)
685 goto fail;
686 if (IniFile_SetKeyValueString(ini, section_input, key_input_multitouch, bool_str_true) < 0)
687 goto fail;
688
689 /* Security settings */
690 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_tls, bool_str_true) <
691 0)
692 goto fail;
693 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_nla, bool_str_false) <
694 0)
695 goto fail;
696 if (IniFile_SetKeyValueString(ini, section_security, key_security_server_rdp, bool_str_true) <
697 0)
698 goto fail;
699
700 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_tls, bool_str_true) <
701 0)
702 goto fail;
703 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_nla, bool_str_true) <
704 0)
705 goto fail;
706 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_rdp, bool_str_true) <
707 0)
708 goto fail;
709 if (IniFile_SetKeyValueString(ini, section_security, key_security_client_fallback,
710 bool_str_true) < 0)
711 goto fail;
712
713 /* Module configuration */
714 if (IniFile_SetKeyValueString(ini, section_plugins, key_plugins_modules,
715 "module1,module2,...") < 0)
716 goto fail;
717 if (IniFile_SetKeyValueString(ini, section_plugins, key_plugins_required,
718 "module1,module2,...") < 0)
719 goto fail;
720
721 /* Certificate configuration */
722 if (IniFile_SetKeyValueString(ini, section_certificates, key_cert_file,
723 "<absolute path to some certificate file> OR") < 0)
724 goto fail;
725 if (IniFile_SetKeyValueString(ini, section_certificates, key_cert_content,
726 "<Contents of some certificate file in PEM format>") < 0)
727 goto fail;
728
729 if (IniFile_SetKeyValueString(ini, section_certificates, key_private_key_file,
730 "<absolute path to some private key file> OR") < 0)
731 goto fail;
732 if (IniFile_SetKeyValueString(ini, section_certificates, key_private_key_content,
733 "<Contents of some private key file in PEM format>") < 0)
734 goto fail;
735
736 /* store configuration */
737 if (IniFile_WriteFile(ini, file) < 0)
738 goto fail;
739
740 rc = TRUE;
741
742fail:
743 IniFile_Free(ini);
744 return rc;
745}

◆ pf_server_config_free()

FREERDP_API void pf_server_config_free ( proxyConfig *  config)

pf_server_config_free Releases all resources associated with proxyConfig

Parameters
configA pointer to the proxyConfig to clean up. Might be nullptr.

Definition at line 900 of file pf_config.c.

901{
902 if (config == nullptr)
903 return;
904
905 free(config->Host);
906 free(config->TargetHost);
907 free(config->TargetUser);
908 free(config->TargetDomain);
909 free(config->TargetPassword);
910
911 CommandLineParserFree(config->Passthrough);
912 CommandLineParserFree(config->Intercept);
913 CommandLineParserFree(config->Modules);
914 CommandLineParserFree(config->RequiredPlugins);
915
916 free(config->CertificateFile);
917 zfree(config->CertificateContent);
918 znfree(config->CertificatePEM, config->CertificatePEMLength);
919 free(config->PrivateKeyFile);
920 zfree(config->PrivateKeyContent);
921 znfree(config->PrivateKeyPEM, config->PrivateKeyPEMLength);
922 IniFile_Free(config->ini);
923 free(config);
924}

Referenced by pf_config_clone(), and server_config_load_ini().

Here is the caller graph for this function:

◆ pf_server_config_load_buffer()

WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * pf_server_config_load_buffer ( const char *  buffer)

pf_server_config_load_buffer Create a proxyConfig from a memory string buffer in INI file format

Parameters
bufferA pointer to the '\0' terminated INI string.
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 747 of file pf_config.c.

748{
749 proxyConfig* config = nullptr;
750 wIniFile* ini = nullptr;
751
752 ini = IniFile_New();
753
754 if (!ini)
755 {
756 WLog_ERR(TAG, "IniFile_New() failed!");
757 return nullptr;
758 }
759
760 if (IniFile_ReadBuffer(ini, buffer) < 0)
761 {
762 WLog_ERR(TAG, "failed to parse ini: '%s'", buffer);
763 goto out;
764 }
765
766 config = server_config_load_ini(ini);
767out:
768 IniFile_Free(ini);
769 return config;
770}
proxyConfig * server_config_load_ini(wIniFile *ini)
server_config_load_ini Create a proxyConfig from a already loaded INI file.
Definition pf_config.c:575

References server_config_load_ini().

Here is the call graph for this function:

◆ pf_server_config_load_file()

WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * pf_server_config_load_file ( const char *  path)

pf_server_config_load_file Create a proxyConfig from a INI file found at path.

Parameters
pathThe path of the INI file
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 772 of file pf_config.c.

773{
774 proxyConfig* config = nullptr;
775 wIniFile* ini = IniFile_New();
776
777 if (!ini)
778 {
779 WLog_ERR(TAG, "IniFile_New() failed!");
780 return nullptr;
781 }
782
783 if (IniFile_ReadFile(ini, path) < 0)
784 {
785 WLog_ERR(TAG, "failed to parse ini file: '%s'", path);
786 goto out;
787 }
788
789 config = server_config_load_ini(ini);
790out:
791 IniFile_Free(ini);
792 return config;
793}

References server_config_load_ini().

Here is the call graph for this function:

◆ pf_server_config_print()

FREERDP_API void pf_server_config_print ( const proxyConfig *  config)

pf_server_config_print Print the configuration to stdout

Parameters
configA pointer to the configuration to print. Must NOT be nullptr.

Definition at line 802 of file pf_config.c.

803{
804 WINPR_ASSERT(config);
805 WLog_INFO(TAG, "Proxy configuration:");
806
807 CONFIG_PRINT_SECTION(section_server);
808 CONFIG_PRINT_STR(config, Host);
809 CONFIG_PRINT_UINT16(config, Port);
810
811 if (config->FixedTarget)
812 {
813 CONFIG_PRINT_SECTION(section_target);
814 CONFIG_PRINT_STR(config, TargetHost);
815 CONFIG_PRINT_UINT16(config, TargetPort);
816 CONFIG_PRINT_UINT32(config, TargetTlsSecLevel);
817
818 if (config->TargetUser)
819 CONFIG_PRINT_STR(config, TargetUser);
820 if (config->TargetDomain)
821 CONFIG_PRINT_STR(config, TargetDomain);
822 }
823
824 CONFIG_PRINT_SECTION(section_input);
825 CONFIG_PRINT_BOOL(config, Keyboard);
826 CONFIG_PRINT_BOOL(config, Mouse);
827 CONFIG_PRINT_BOOL(config, Multitouch);
828
829 CONFIG_PRINT_SECTION(section_security);
830 CONFIG_PRINT_BOOL(config, ServerNlaSecurity);
831 CONFIG_PRINT_BOOL(config, ServerTlsSecurity);
832 CONFIG_PRINT_BOOL(config, ServerRdpSecurity);
833 CONFIG_PRINT_BOOL(config, ClientNlaSecurity);
834 CONFIG_PRINT_BOOL(config, ClientTlsSecurity);
835 CONFIG_PRINT_BOOL(config, ClientRdpSecurity);
836 CONFIG_PRINT_BOOL(config, ClientAllowFallbackToTls);
837
838 CONFIG_PRINT_SECTION(section_codecs);
839 CONFIG_PRINT_BOOL(config, RFX);
840 CONFIG_PRINT_BOOL(config, NSC);
841
842 CONFIG_PRINT_SECTION(section_channels);
843 CONFIG_PRINT_BOOL(config, GFX);
844 CONFIG_PRINT_BOOL(config, DisplayControl);
845 CONFIG_PRINT_BOOL(config, Clipboard);
846 CONFIG_PRINT_BOOL(config, AudioOutput);
847 CONFIG_PRINT_BOOL(config, AudioInput);
848 CONFIG_PRINT_BOOL(config, DeviceRedirection);
849 CONFIG_PRINT_BOOL(config, VideoRedirection);
850 CONFIG_PRINT_BOOL(config, CameraRedirection);
851 CONFIG_PRINT_BOOL(config, RemoteApp);
852 CONFIG_PRINT_BOOL(config, PassthroughIsBlacklist);
853
854 if (config->PassthroughCount)
855 {
856 WLog_INFO(TAG, "\tStatic Channels Proxy:");
857 pf_server_config_print_list(config->Passthrough, config->PassthroughCount);
858 }
859
860 if (config->InterceptCount)
861 {
862 WLog_INFO(TAG, "\tStatic Channels Proxy-Intercept:");
863 pf_server_config_print_list(config->Intercept, config->InterceptCount);
864 }
865
866 /* modules */
867 CONFIG_PRINT_SECTION_KEY(section_plugins, key_plugins_modules);
868 for (size_t x = 0; x < config->ModulesCount; x++)
869 CONFIG_PRINT_STR(config, Modules[x]);
870
871 /* Required plugins */
872 CONFIG_PRINT_SECTION_KEY(section_plugins, key_plugins_required);
873 for (size_t x = 0; x < config->RequiredPluginsCount; x++)
874 CONFIG_PRINT_STR(config, RequiredPlugins[x]);
875
876 CONFIG_PRINT_SECTION(section_certificates);
877 CONFIG_PRINT_STR(config, CertificateFile);
878 CONFIG_PRINT_STR_CONTENT(config, CertificateContent);
879 CONFIG_PRINT_STR(config, PrivateKeyFile);
880 CONFIG_PRINT_STR_CONTENT(config, PrivateKeyContent);
881}

◆ server_config_load_ini()

WINPR_ATTR_NODISCARD FREERDP_API proxyConfig * server_config_load_ini ( wIniFile *  ini)

server_config_load_ini Create a proxyConfig from a already loaded INI file.

Parameters
iniA pointer to the parsed INI file. Must NOT be nullptr.
Returns
A proxyConfig or nullptr in case of failure.

Definition at line 575 of file pf_config.c.

576{
577 proxyConfig* config = nullptr;
578
579 WINPR_ASSERT(ini);
580
581 config = calloc(1, sizeof(proxyConfig));
582 if (config)
583 {
584 /* Set default values != 0 */
585 config->TargetTlsSecLevel = 1;
586
587 /* Load from ini */
588 if (!pf_config_load_server(ini, config))
589 goto out;
590
591 if (!pf_config_load_target(ini, config))
592 goto out;
593
594 if (!pf_config_load_codecs(ini, config))
595 goto out;
596
597 if (!pf_config_load_channels(ini, config))
598 goto out;
599
600 if (!pf_config_load_input(ini, config))
601 goto out;
602
603 if (!pf_config_load_security(ini, config))
604 goto out;
605
606 if (!pf_config_load_modules(ini, config))
607 goto out;
608
609 if (!pf_config_load_certificates(ini, config))
610 goto out;
611 config->ini = IniFile_Clone(ini);
612 if (!config->ini)
613 goto out;
614 }
615 return config;
616out:
617 WINPR_PRAGMA_DIAG_PUSH
618 WINPR_PRAGMA_DIAG_IGNORED_MISMATCHED_DEALLOC
619 pf_server_config_free(config);
620 WINPR_PRAGMA_DIAG_POP
621
622 return nullptr;
623}

References pf_server_config_free().

Referenced by pf_server_config_load_buffer(), and pf_server_config_load_file().

Here is the call graph for this function:
Here is the caller graph for this function: