diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-02-22 13:58:52 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-04-08 08:09:07 -0600 |
commit | fd0d7d0907fcb8783c4bd2fbbd8c8812f3ba1494 (patch) | |
tree | 003f3d8f144c92cb4073a348fd4191c96eced18d /backend/backend.c | |
parent | 9faea17c738d9bfcdd241de7bae0bbe7590c77bf (diff) |
Add FreeRDP backend for remote desktop support
Diffstat (limited to 'backend/backend.c')
-rw-r--r-- | backend/backend.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/backend/backend.c b/backend/backend.c index 33ad20f2..2c76d989 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -21,6 +21,9 @@ #if WLR_HAS_X11_BACKEND #include <wlr/backend/x11.h> #endif +#if WLR_HAS_RDP_BACKEND +#include <wlr/backend/rdp.h> +#endif void wlr_backend_init(struct wlr_backend *backend, const struct wlr_backend_impl *impl) { @@ -134,6 +137,38 @@ static struct wlr_backend *attempt_headless_backend( return backend; } +#if WLR_HAS_RDP_BACKEND +static struct wlr_backend *attempt_rdp_backend(struct wl_display *display, + wlr_renderer_create_func_t create_renderer_func) { + const char *cert_path = getenv("WLR_RDP_TLS_CERT_PATH"); + const char *key_path = getenv("WLR_RDP_TLS_KEY_PATH"); + if (!cert_path || !key_path) { + wlr_log(WLR_ERROR, "The RDP backend requires WLR_RDP_TLS_CERT_PATH " + "and WLR_RDP_TLS_KEY_PATH to be set."); + return NULL; + } + struct wlr_backend *backend = wlr_rdp_backend_create( + display, create_renderer_func, cert_path, key_path); + const char *address = getenv("WLR_RDP_ADDRESS"); + if (address) { + wlr_rdp_backend_set_address(backend, address); + } + const char *_port = getenv("WLR_RDP_PORT"); + if (_port) { + char *endptr; + int port = strtol(_port, &endptr, 10); + if (*endptr || port <= 0 || port >= 1024) { + wlr_log(WLR_ERROR, "Expected WLR_RDP_PORT to be a " + "positive integer less than 1024"); + wlr_backend_destroy(backend); + return NULL; + } + wlr_rdp_backend_set_port(backend, port); + } + return backend; +} +#endif + static struct wlr_backend *attempt_noop_backend(struct wl_display *display) { struct wlr_backend *backend = wlr_noop_backend_create(display); if (backend == NULL) { @@ -185,6 +220,10 @@ static struct wlr_backend *attempt_backend_by_name(struct wl_display *display, #endif } else if (strcmp(name, "headless") == 0) { return attempt_headless_backend(display, create_renderer_func); +#if WLR_HAS_RDP_BACKEND + } else if (strcmp(name, "rdp") == 0) { + return attempt_rdp_backend(display, create_renderer_func); +#endif } else if (strcmp(name, "noop") == 0) { return attempt_noop_backend(display); } else if (strcmp(name, "drm") == 0 || strcmp(name, "libinput") == 0) { |