aboutsummaryrefslogtreecommitdiff
path: root/include/backend
diff options
context:
space:
mode:
Diffstat (limited to 'include/backend')
-rw-r--r--include/backend/rdp.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/include/backend/rdp.h b/include/backend/rdp.h
new file mode 100644
index 00000000..f8faa8fd
--- /dev/null
+++ b/include/backend/rdp.h
@@ -0,0 +1,98 @@
+#ifndef BACKEND_RDP_H
+#define BACKEND_RDP_H
+#include <freerdp/codec/color.h>
+#include <freerdp/codec/nsc.h>
+#include <freerdp/codec/rfx.h>
+#include <freerdp/freerdp.h>
+#include <freerdp/input.h>
+#include <freerdp/listener.h>
+#include <freerdp/locale/keyboard.h>
+#include <freerdp/update.h>
+#include <pixman.h>
+#include <wlr/backend/interface.h>
+#include <wlr/backend/rdp.h>
+#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_keyboard.h>
+#include <wlr/types/wlr_output.h>
+#include <wlr/types/wlr_pointer.h>
+#include <xkbcommon/xkbcommon.h>
+
+#define MAX_FREERDP_FDS 64
+
+struct wlr_rdp_peer_context;
+
+struct wlr_rdp_output {
+ struct wlr_output wlr_output;
+ struct wlr_rdp_backend *backend;
+ struct wlr_rdp_peer_context *context;
+
+ void *egl_surface;
+ pixman_image_t *shadow_surface;
+ struct wl_event_source *frame_timer;
+ int frame_delay; // ms
+};
+
+struct wlr_rdp_input_device {
+ struct wlr_input_device wlr_input_device;
+};
+
+struct wlr_rdp_keyboard {
+ struct wlr_keyboard keyboard;
+ struct xkb_keymap *keymap;
+};
+
+enum wlr_rdp_peer_flags {
+ RDP_PEER_ACTIVATED = 1 << 0,
+ RDP_PEER_OUTPUT_ENABLED = 1 << 1,
+};
+
+struct wlr_rdp_peer_context {
+ rdpContext _p;
+
+ struct wlr_rdp_backend *backend;
+ struct wl_event_source *events[MAX_FREERDP_FDS];
+ freerdp_peer *peer;
+ uint32_t flags;
+ RFX_CONTEXT *rfx_context;
+ wStream *encode_stream;
+ RFX_RECT *rfx_rects;
+ NSC_CONTEXT *nsc_context;
+
+ struct wlr_rdp_output *output;
+ struct wlr_rdp_input_device *pointer;
+ struct wlr_rdp_input_device *keyboard;
+
+ struct wl_list link;
+};
+
+struct wlr_rdp_backend {
+ struct wlr_backend backend;
+ struct wlr_egl egl;
+ struct wlr_renderer *renderer;
+ struct wl_display *display;
+ struct wl_listener display_destroy;
+
+ const char *tls_cert_path;
+ const char *tls_key_path;
+ char *address;
+ int port;
+
+ freerdp_listener *listener;
+ struct wl_event_source *listener_events[MAX_FREERDP_FDS];
+
+ struct wl_list clients;
+};
+
+struct wlr_rdp_backend *rdp_backend_from_backend(
+ struct wlr_backend *wlr_backend);
+bool rdp_configure_listener(struct wlr_rdp_backend *backend);
+int rdp_peer_init(freerdp_peer *client, struct wlr_rdp_backend *backend);
+struct wlr_rdp_output *wlr_rdp_output_create(struct wlr_rdp_backend *backend,
+ struct wlr_rdp_peer_context *context, unsigned int width,
+ unsigned int height);
+struct wlr_rdp_input_device *wlr_rdp_pointer_create(
+ struct wlr_rdp_backend *backend, struct wlr_rdp_peer_context *context);
+struct wlr_rdp_input_device *wlr_rdp_keyboard_create(
+ struct wlr_rdp_backend *backend, rdpSettings *settings);
+
+#endif