a2064e51c1
- xrdp is not now built with XRDP_IBUS to allow other input methods to be more easily supported. - chansrv is only aked to start an input method if the client supports it. - chansrv sends a status report back to xrdp when asked to start and input method. - ./configure without --enable-ibus now works.
264 lines
7.5 KiB
C
264 lines
7.5 KiB
C
/**
|
|
* xrdp: A Remote Desktop Protocol server.
|
|
*
|
|
* Copyright (C) Jay Sorg 2004-2014
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* xrdp / xserver info / caps
|
|
*/
|
|
|
|
#include "xrdp_constants.h"
|
|
#include "ms-rdpbcgr.h"
|
|
|
|
#if !defined(XRDP_CLIENT_INFO_H)
|
|
#define XRDP_CLIENT_INFO_H
|
|
|
|
/*
|
|
* 2.2.1.3.6.1 Monitor Definition (TS_MONITOR_DEF)
|
|
* 2.2.1.3.9.1 Monitor Attributes (TS_MONITOR_ATTRIBUTES)
|
|
* 2.2.2.2.1 DISPLAYCONTROL_MONITOR_LAYOUT
|
|
*/
|
|
struct monitor_info
|
|
{
|
|
/* From 2.2.1.3.6.1 Monitor Definition (TS_MONITOR_DEF) */
|
|
int left;
|
|
int top;
|
|
int right;
|
|
int bottom;
|
|
int flags;
|
|
|
|
/* From [MS-RDPEDISP] 2.2.2.2.1 DISPLAYCONTROL_MONITOR_LAYOUT, or
|
|
* [MS-RDPBCGR] 2.2.1.3.9.1 (TS_MONITOR_ATTRIBUTES) */
|
|
unsigned int physical_width;
|
|
unsigned int physical_height;
|
|
unsigned int orientation;
|
|
unsigned int desktop_scale_factor;
|
|
unsigned int device_scale_factor;
|
|
|
|
/* Derived setting */
|
|
unsigned int is_primary;
|
|
};
|
|
|
|
/* xrdp keyboard overrids */
|
|
struct xrdp_keyboard_overrides
|
|
{
|
|
int type;
|
|
int subtype;
|
|
int layout;
|
|
};
|
|
|
|
struct display_size_description
|
|
{
|
|
unsigned int monitorCount; /* 2.2.2.2 DISPLAYCONTROL_MONITOR_LAYOUT_PDU: number of monitors detected (max = 16) */
|
|
struct monitor_info minfo[CLIENT_MONITOR_DATA_MAXIMUM_MONITORS]; /* client monitor data */
|
|
struct monitor_info minfo_wm[CLIENT_MONITOR_DATA_MAXIMUM_MONITORS]; /* client monitor data, non-negative values */
|
|
unsigned int session_width;
|
|
unsigned int session_height;
|
|
};
|
|
|
|
enum client_resize_mode
|
|
{
|
|
CRMODE_NONE,
|
|
CRMODE_SINGLE_SCREEN,
|
|
CRMODE_MULTI_SCREEN
|
|
};
|
|
|
|
/**
|
|
* Type describing Unicode input state
|
|
*/
|
|
enum unicode_input_state
|
|
{
|
|
UIS_UNSUPPORTED = 0, ///< Client does not support Unicode
|
|
UIS_SUPPORTED, ///< Client supports Unicode, but it's not active
|
|
UIS_ACTIVE ///< Unicode input is active
|
|
};
|
|
/**
|
|
* Information about the xrdp client
|
|
*
|
|
* @note This structure is shared with xorgxrdp. If you change anything
|
|
* above the 'private to xrdp below this line' comment, you MUST
|
|
* bump the CLIENT_INFO_CURRENT_VERSION number so that the mismatch
|
|
* can be detected.
|
|
*/
|
|
struct xrdp_client_info
|
|
{
|
|
int size; /* bytes for this structure */
|
|
int version; /* Should be CLIENT_INFO_CURRENT_VERSION */
|
|
int bpp;
|
|
/* bitmap cache info */
|
|
int cache1_entries;
|
|
int cache1_size;
|
|
int cache2_entries;
|
|
int cache2_size;
|
|
int cache3_entries;
|
|
int cache3_size;
|
|
int bitmap_cache_persist_enable; /* 0 or 2 */
|
|
int bitmap_cache_version; /* ored 1 = original version, 2 = v2, 4 = v3 */
|
|
/* pointer info */
|
|
int pointer_cache_entries;
|
|
/* other */
|
|
int use_bitmap_comp;
|
|
int use_bitmap_cache;
|
|
int op1; /* use smaller bitmap header, non cache */
|
|
int op2; /* use smaller bitmap header in bitmap cache */
|
|
int desktop_cache;
|
|
int use_compact_packets; /* rdp5 smaller packets */
|
|
char hostname[32];
|
|
int build;
|
|
int keylayout;
|
|
char username[INFO_CLIENT_MAX_CB_LEN];
|
|
char password[INFO_CLIENT_MAX_CB_LEN];
|
|
char domain[INFO_CLIENT_MAX_CB_LEN];
|
|
char program[INFO_CLIENT_MAX_CB_LEN];
|
|
char directory[INFO_CLIENT_MAX_CB_LEN];
|
|
int rdp_compression;
|
|
int rdp_autologin;
|
|
int crypt_level; /* 1, 2, 3 = low, medium, high */
|
|
int channels_allowed; /* 0 = no channels 1 = channels */
|
|
int sound_code; /* 1 = leave sound at server */
|
|
int is_mce;
|
|
int rdp5_performanceflags;
|
|
int brush_cache_code; /* 0 = no cache 1 = 8x8 standard cache
|
|
2 = arbitrary dimensions */
|
|
|
|
int max_bpp;
|
|
int jpeg; /* non standard bitmap cache v2 cap */
|
|
int offscreen_support_level;
|
|
int offscreen_cache_size;
|
|
int offscreen_cache_entries;
|
|
int rfx;
|
|
|
|
/* CAPSETTYPE_RAIL */
|
|
int rail_support_level;
|
|
/* CAPSETTYPE_WINDOW */
|
|
int wnd_support_level;
|
|
int wnd_num_icon_caches;
|
|
int wnd_num_icon_cache_entries;
|
|
/* codecs */
|
|
int rfx_codec_id;
|
|
int rfx_prop_len;
|
|
char rfx_prop[64];
|
|
int ns_codec_id;
|
|
int ns_prop_len;
|
|
char ns_prop[64];
|
|
int jpeg_codec_id;
|
|
int jpeg_prop_len;
|
|
char jpeg_prop[64];
|
|
int v3_codec_id;
|
|
int rfx_min_pixel;
|
|
char orders[32];
|
|
int order_flags_ex;
|
|
int use_bulk_comp;
|
|
int pointer_flags; /* 0 color, 1 new, 2 no new */
|
|
int use_fast_path;
|
|
int require_credentials; /* when true, credentials *must* be passed on cmd line */
|
|
|
|
int security_layer; /* 0 = rdp, 1 = tls , 2 = hybrid */
|
|
int multimon; /* 0 = deny , 1 = allow */
|
|
struct display_size_description display_sizes;
|
|
|
|
int keyboard_type;
|
|
int keyboard_subtype;
|
|
|
|
int png_codec_id;
|
|
int png_prop_len;
|
|
char png_prop[64];
|
|
int vendor_flags[4];
|
|
int mcs_connection_type;
|
|
int mcs_early_capability_flags;
|
|
|
|
int max_fastpath_frag_bytes;
|
|
int capture_code;
|
|
int capture_format;
|
|
|
|
char certificate[1024];
|
|
char key_file[1024];
|
|
|
|
/* X11 keyboard layout - inferred from keyboard type/subtype */
|
|
char model[16];
|
|
char layout[16];
|
|
char variant[16];
|
|
char options[256];
|
|
|
|
/* ==================================================================== */
|
|
/* Private to xrdp below this line */
|
|
/* ==================================================================== */
|
|
|
|
/* codec */
|
|
int h264_codec_id;
|
|
int h264_prop_len;
|
|
char h264_prop[64];
|
|
|
|
int use_frame_acks;
|
|
int max_unacknowledged_frame_count;
|
|
|
|
long ssl_protocols;
|
|
char *tls_ciphers;
|
|
|
|
char client_ip[MAX_PEER_ADDRSTRLEN];
|
|
char client_description[MAX_PEER_DESCSTRLEN];
|
|
|
|
int client_os_major;
|
|
int client_os_minor;
|
|
|
|
int no_orders_supported;
|
|
int use_cache_glyph_v2;
|
|
int rail_enable;
|
|
// Mask of reasons why output may be suppressed
|
|
// (see enum suppress_output_reason)
|
|
unsigned int suppress_output_mask;
|
|
|
|
int enable_token_login;
|
|
char domain_user_separator[16];
|
|
|
|
/* xrdp.override_* values */
|
|
struct xrdp_keyboard_overrides xrdp_keyboard_overrides;
|
|
|
|
/* These values are optionally send over as part of TS_UD_CS_CORE.
|
|
* They can be used as a fallback for a single monitor session
|
|
* if physical sizes are not available in the monitor-specific
|
|
* data */
|
|
unsigned int session_physical_width; /* in mm */
|
|
unsigned int session_physical_height; /* in mm */
|
|
|
|
int large_pointer_support_flags;
|
|
int gfx;
|
|
|
|
// Can we resize the desktop by using a Deactivation-Reactivation Sequence?
|
|
enum client_resize_mode client_resize_mode;
|
|
|
|
enum unicode_input_state unicode_input_support;
|
|
};
|
|
|
|
enum xrdp_encoder_flags
|
|
{
|
|
NONE = 0,
|
|
ENCODE_COMPLETE = 1 << 0,
|
|
GFX_PROGRESSIVE_RFX = 1 << 1,
|
|
GFX_H264 = 1 << 2,
|
|
KEY_FRAME_REQUESTED = 1 << 3
|
|
};
|
|
|
|
/*
|
|
* Return true if output is suppressed for a particular reason
|
|
*/
|
|
#define OUTPUT_SUPPRESSED_FOR_REASON(ci,reason) \
|
|
(((ci)->suppress_output_mask & (unsigned int)reason) != 0)
|
|
|
|
/* yyyymmdd of last incompatible change to xrdp_client_info */
|
|
/* also used for changes to all the xrdp installed headers */
|
|
#define CLIENT_INFO_CURRENT_VERSION 20230425
|
|
|
|
#endif
|