22#include <winpr/collections.h>
24#include <freerdp/version.h>
25#include <freerdp/freerdp.h>
27#include <freerdp/server/proxy/proxy_server.h>
28#include <freerdp/server/proxy/proxy_log.h>
33#define TAG PROXY_TAG("server")
35static proxyServer* server =
nullptr;
39static const char* strsignal(
int signum)
54static void cleanup_handler(
int signum)
57 WLog_INFO(TAG,
"caught signal %s [%d], starting cleanup...", strsignal(signum), signum);
59 WLog_INFO(TAG,
"stopping all connections.");
60 pf_server_stop(server);
64static void pf_server_register_signal_handlers(
void)
66 (void)signal(SIGINT, cleanup_handler);
67 (void)signal(SIGTERM, cleanup_handler);
69 (void)signal(SIGQUIT, cleanup_handler);
70 (void)signal(SIGKILL, cleanup_handler);
74static int usage(
const char* app)
77 printf(
"%s -h Display this help text.\n", app);
78 printf(
"%s --help Display this help text.\n", app);
79 printf(
"%s --buildconfig Print the build configuration.\n", app);
80 printf(
"%s <config ini file> Start the proxy with <config.ini>\n", app);
81 printf(
"%s --dump-config [<config ini file>|stdout|stderr] Create a template <config.ini> or "
85 printf(
"%s -v Print out binary version.\n", app);
86 printf(
"%s --version Print out binary version.\n", app);
91static int version(
const char* app)
93 printf(
"%s version %s", app, freerdp_get_version_string());
98static int buildconfig(WINPR_ATTR_UNUSED
const char* app)
100 printf(
"This is FreeRDP version %s (%s)\n", FREERDP_VERSION_FULL, FREERDP_GIT_REVISION);
101 printf(
"%s", freerdp_get_build_config());
105int main(
int argc,
char* argv[])
109 pf_server_register_signal_handlers();
111 WLog_INFO(TAG,
"freerdp-proxy version info:");
112 WLog_INFO(TAG,
"\tFreeRDP version: %s", FREERDP_VERSION_FULL);
113 WLog_INFO(TAG,
"\tGit commit: %s", FREERDP_GIT_REVISION);
114 WLog_DBG(TAG,
"\tBuild config: %s", freerdp_get_build_config());
118 status = usage(argv[0]);
123 const char* arg = argv[1];
124 if (_stricmp(arg,
"-h") == 0)
126 status = usage(argv[0]);
129 else if (_stricmp(arg,
"--help") == 0)
131 status = usage(argv[0]);
134 else if (_stricmp(arg,
"--buildconfig") == 0)
136 status = buildconfig(argv[0]);
139 else if (_stricmp(arg,
"--dump-config") == 0)
143 status = usage(argv[0]);
149 else if (_stricmp(arg,
"-v") == 0)
151 status = version(argv[0]);
154 else if (_stricmp(arg,
"--version") == 0)
156 status = version(argv[0]);
162 const char* config_path = argv[1];
165 status = usage(argv[0]);
176 server = pf_server_new(config);
184 if (!pf_server_start(server))
187 if (!pf_server_run(server))
193 pf_server_free(server);
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 * pf_server_config_load_file(const char *path)
pf_server_config_load_file Create a proxyConfig from a INI file found at path.
FREERDP_API void pf_server_config_print(const proxyConfig *config)
pf_server_config_print Print the configuration to stdout
WINPR_ATTR_NODISCARD FREERDP_API BOOL pf_server_config_dump(const char *file)
pf_server_config_dump Dumps a default INI configuration file