mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-05 13:29:47 -05:00
Add FreeRDP backend for remote desktop support
This commit is contained in:
parent
9faea17c73
commit
fd0d7d0907
16 changed files with 1335 additions and 10 deletions
98
include/backend/rdp.h
Normal file
98
include/backend/rdp.h
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue