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> Create a template <config.ini>\n", app);
82 printf(
"%s -v Print out binary version.\n", app);
83 printf(
"%s --version Print out binary version.\n", app);
88static int version(
const char* app)
90 printf(
"%s version %s", app, freerdp_get_version_string());
95static int buildconfig(WINPR_ATTR_UNUSED
const char* app)
97 printf(
"This is FreeRDP version %s (%s)\n", FREERDP_VERSION_FULL, FREERDP_GIT_REVISION);
98 printf(
"%s", freerdp_get_build_config());
102int main(
int argc,
char* argv[])
106 pf_server_register_signal_handlers();
108 WLog_INFO(TAG,
"freerdp-proxy version info:");
109 WLog_INFO(TAG,
"\tFreeRDP version: %s", FREERDP_VERSION_FULL);
110 WLog_INFO(TAG,
"\tGit commit: %s", FREERDP_GIT_REVISION);
111 WLog_DBG(TAG,
"\tBuild config: %s", freerdp_get_build_config());
115 status = usage(argv[0]);
120 const char* arg = argv[1];
121 if (_stricmp(arg,
"-h") == 0)
123 status = usage(argv[0]);
126 else if (_stricmp(arg,
"--help") == 0)
128 status = usage(argv[0]);
131 else if (_stricmp(arg,
"--buildconfig") == 0)
133 status = buildconfig(argv[0]);
136 else if (_stricmp(arg,
"--dump-config") == 0)
140 status = usage(argv[0]);
146 else if (_stricmp(arg,
"-v") == 0)
148 status = version(argv[0]);
151 else if (_stricmp(arg,
"--version") == 0)
153 status = version(argv[0]);
159 const char* config_path = argv[1];
162 status = usage(argv[0]);
173 server = pf_server_new(config);
181 if (!pf_server_start(server))
184 if (!pf_server_run(server))
190 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