aboutsummaryrefslogtreecommitdiff
path: root/backend/backend.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-02-22 13:58:52 -0500
committerDrew DeVault <sir@cmpwn.com>2019-04-08 08:09:07 -0600
commitfd0d7d0907fcb8783c4bd2fbbd8c8812f3ba1494 (patch)
tree003f3d8f144c92cb4073a348fd4191c96eced18d /backend/backend.c
parent9faea17c738d9bfcdd241de7bae0bbe7590c77bf (diff)
Add FreeRDP backend for remote desktop support
Diffstat (limited to 'backend/backend.c')
-rw-r--r--backend/backend.c39
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) {