Merge branch 'devel' of https://github.com/neutrinolabs/xrdp
Conflicts: xorgxrdp
This commit is contained in:
commit
93c55e58a8
24
.gitignore
vendored
24
.gitignore
vendored
@ -1,11 +1,12 @@
|
||||
*~
|
||||
*.a
|
||||
aclocal.m4
|
||||
AUTHORS
|
||||
autom4te.cache/
|
||||
ChangeLog
|
||||
compile
|
||||
config_ac.h
|
||||
config_ac-h.in
|
||||
config.c
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
@ -13,7 +14,10 @@ config.sub
|
||||
configure
|
||||
depcomp
|
||||
.deps/
|
||||
genkeymap/xrdp-genkeymap
|
||||
install-sh
|
||||
instfiles/pam.d/xrdp-sesman
|
||||
keygen/xrdp-keygen
|
||||
*.la
|
||||
.libs
|
||||
libtool
|
||||
@ -22,17 +26,17 @@ ltmain.sh
|
||||
Makefile
|
||||
Makefile.in
|
||||
missing
|
||||
mkinstalldirs
|
||||
NEWS
|
||||
*.o
|
||||
README
|
||||
sesman/chansrv/xrdp-chansrv
|
||||
sesman/sessvc/xrdp-sessvc
|
||||
sesman/tools/xrdp-dis
|
||||
sesman/tools/xrdp-sesadmin
|
||||
sesman/tools/xrdp-sesrun
|
||||
sesman/tools/xrdp-sestest
|
||||
sesman/tools/xrdp-xcon
|
||||
sesman/xrdp-sesman
|
||||
stamp-h1
|
||||
xrdp-chansrv
|
||||
xrdp-genkeymap
|
||||
xrdp-keygen
|
||||
xrdp-sesadmin
|
||||
xrdp-sesman
|
||||
xrdp-sesrun
|
||||
xrdp-sessvc
|
||||
xrdp-sestest
|
||||
xrdp-dis
|
||||
xrdp/xrdp
|
||||
|
10
.gitmodules
vendored
10
.gitmodules
vendored
@ -1,6 +1,8 @@
|
||||
[submodule "librfxcodec"]
|
||||
path = librfxcodec
|
||||
url = git://github.com/neutrinolabs/librfxcodec
|
||||
[submodule "xorgxrdp"]
|
||||
path = xorgxrdp
|
||||
url = git://github.com/neutrinolabs/xorgxrdp
|
||||
url = https://github.com/neutrinolabs/librfxcodec.git
|
||||
|
||||
[submodule "libpainter"]
|
||||
path = libpainter
|
||||
url = https://github.com/neutrinolabs/libpainter.git
|
||||
branch = devel
|
||||
|
40
.travis.yml
Normal file
40
.travis.yml
Normal file
@ -0,0 +1,40 @@
|
||||
sudo: false # use new container
|
||||
language: c
|
||||
|
||||
branches:
|
||||
except: /^(gh-pages|v[0-9]\..*)/
|
||||
|
||||
compiler:
|
||||
- clang
|
||||
- gcc
|
||||
- g++
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
# xrdp
|
||||
- libpam0g-dev
|
||||
- libjpeg-dev
|
||||
- libfuse-dev
|
||||
- libmp3lame-dev
|
||||
- libx11-dev
|
||||
- libxrandr-dev
|
||||
- libpixman-1-dev
|
||||
- nasm
|
||||
# x11rdp
|
||||
#- flex
|
||||
#- bison
|
||||
#- libxml2-dev
|
||||
#- intltool
|
||||
#- xsltproc
|
||||
#- xutils-dev
|
||||
#- python-libxml2
|
||||
#- g++
|
||||
#- xutils
|
||||
|
||||
script:
|
||||
# disable librfxcodec as no remotefx for v0.9.1 release
|
||||
#- (cd librfxcodec && ./bootstrap && ./configure && make)
|
||||
- (./bootstrap && ./configure --enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame --enable-pixman && make && make distcheck)
|
||||
# disable x11rdp build as it takes long time and it is to be deprecated
|
||||
#- (cd xorg/X11R7.6 && ./buildx.sh default)
|
BIN
Coding_Style.odt
BIN
Coding_Style.odt
Binary file not shown.
40
Makefile.am
40
Makefile.am
@ -1,4 +1,27 @@
|
||||
EXTRA_DIST = bootstrap COPYING design.txt faq-compile.txt faq-general.txt file-loc.txt install.txt prog_std.txt readme.txt
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = --without-systemdsystemunitdir
|
||||
|
||||
EXTRA_DIST = \
|
||||
COPYING \
|
||||
README.md \
|
||||
NEWS.md \
|
||||
astyle_config.as \
|
||||
bootstrap \
|
||||
coding_style.md \
|
||||
description-pak \
|
||||
design.txt \
|
||||
faq-compile.txt \
|
||||
faq-general.txt \
|
||||
file-loc.txt \
|
||||
fontdump \
|
||||
install.txt \
|
||||
m4 \
|
||||
postinstall-pak \
|
||||
readme.txt \
|
||||
tcutils \
|
||||
tests \
|
||||
vrplayer \
|
||||
xorg
|
||||
|
||||
if XRDP_NEUTRINORDP
|
||||
NEUTRINORDPDIR = neutrinordp
|
||||
@ -12,6 +35,18 @@ else
|
||||
XRDPVRDIR =
|
||||
endif
|
||||
|
||||
if XRDP_PAINTER
|
||||
PAINTERDIR = libpainter
|
||||
else
|
||||
PAINTERDIR =
|
||||
endif
|
||||
|
||||
if XRDP_RFXCODEC
|
||||
RFXCODECDIR = librfxcodec
|
||||
else
|
||||
RFXCODECDIR =
|
||||
endif
|
||||
|
||||
SUBDIRS = \
|
||||
common \
|
||||
vnc \
|
||||
@ -20,6 +55,8 @@ SUBDIRS = \
|
||||
mc \
|
||||
$(NEUTRINORDPDIR) \
|
||||
libxrdp \
|
||||
$(PAINTERDIR) \
|
||||
$(RFXCODECDIR) \
|
||||
xrdp \
|
||||
sesman \
|
||||
keygen \
|
||||
@ -27,4 +64,5 @@ SUBDIRS = \
|
||||
instfiles \
|
||||
genkeymap \
|
||||
xrdpapi \
|
||||
pkgconfig \
|
||||
$(XRDPVRDIR)
|
||||
|
25
NEWS.md
Normal file
25
NEWS.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Release notes for xrdp v0.9.1 (2016/12/21)
|
||||
## New features
|
||||
* New xorgxrdp backend using existing Xorg with additional modules
|
||||
* Improvements to X11rdp backend
|
||||
* Support for IPv6 (disabled by default)
|
||||
* Initial support for RemoteFX Codec (disabled by default)
|
||||
* Support for TLS security layer (preferred over RDP layer if supported by the client)
|
||||
* Support for disabling deprecated SSLv3 protocol and for selecting custom cipher suites in xrdp.ini
|
||||
* Support for bidirectional fastpath (enabled in both directions by default)
|
||||
* Support clients that don't support drawing orders, such as MS RDP client for Android, ChromeRDP (disabled by default)
|
||||
* More configurable login screen
|
||||
* Support for new virtual channels:
|
||||
* rdpdr: device redirection
|
||||
* rdpsnd: audio output
|
||||
* cliprdr: clipboard
|
||||
* xrdpvr: xrdp video redirection channel (can be used along with NeutrinoRDP client)
|
||||
* Support for disabling virtual channels globally or by session type
|
||||
* Allow to specify the path for backends (Xorg, X11rdp, Xvnc)
|
||||
* Added files for systemd support
|
||||
* Multi-monitor support
|
||||
* xrdp-chansrv stroes logs in `${XDG_DATA_HOME}/xrdp` now
|
||||
|
||||
## Security fixes
|
||||
* User's password could be recovered from the Xvnc password file
|
||||
* X11 authentication was not used
|
126
README.md
Normal file
126
README.md
Normal file
@ -0,0 +1,126 @@
|
||||
[![Build Status](https://travis-ci.org/neutrinolabs/xrdp.svg?branch=devel)](https://travis-ci.org/neutrinolabs/xrdp)
|
||||
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/neutrinolabs/xrdp)
|
||||
![Apache-License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)
|
||||
|
||||
*Current Version:* 0.9.1
|
||||
|
||||
# xrdp - an open source RDP server
|
||||
|
||||
## Overview
|
||||
|
||||
**xrdp** provides a graphical login to remote machines using Microsoft
|
||||
Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of
|
||||
RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop
|
||||
Client (for Windows, Mac OS, iOS and Android).
|
||||
|
||||
RDP transport is encrypted using TLS by default.
|
||||
|
||||
![demo](https://github.com/neutrinolabs/xrdp/raw/gh-pages/xrdp_demo.gif)
|
||||
|
||||
## Features
|
||||
|
||||
### Remote Desktop Access
|
||||
|
||||
* Connect to a Linux desktop using RDP from anywhere (requires
|
||||
[xorgxrdp](https://github.com/neutrinolabs/xorgxrdp) Xorg module)
|
||||
* Reconnect to an existing session
|
||||
* Session resizing
|
||||
* RDP/VNC proxy (connect to another RDP/VNC server via xrdp)
|
||||
|
||||
### Access to Remote Resources
|
||||
* two-way clipboard transfer (text, bitmap, file)
|
||||
* audio redirection
|
||||
* drive redirection (mount local client drives on remote machine)
|
||||
|
||||
## Quick Start
|
||||
|
||||
Most Linux distributions should distribute the latest release of xrdp in their
|
||||
repository. You would need xrdp and xorgxrdp packages for the best
|
||||
experience. It is recommended that xrdp depends on xorgxrdp, so it should
|
||||
be sufficient to install xrdp. If xorgxrdp is not provided, use Xvnc
|
||||
server.
|
||||
|
||||
### Ubuntu / Debian
|
||||
```bash
|
||||
apt-get install xrdp
|
||||
```
|
||||
|
||||
### RedHat / CentOS / Fedora
|
||||
```bash
|
||||
yum install xrdp
|
||||
```
|
||||
|
||||
## Environment
|
||||
|
||||
**xrdp** primarily targets to GNU/Linux. Tested on x86, x86_64, SPARC and
|
||||
PowerPC.
|
||||
|
||||
xorgxrdp and RemoteFX Codec have special optimization for x86 and x86_64 using
|
||||
SIMD instructions.
|
||||
|
||||
FreeBSD is not a primary target of xrdp. It is working on FreeBSD except
|
||||
for the drive redirection feature.
|
||||
|
||||
Other operating systems such as Mac OS are not supported so far, but we
|
||||
welcome your contributions.
|
||||
|
||||
## Compiling
|
||||
|
||||
See also https://github.com/neutrinolabs/xrdp/wiki#building-from-sources
|
||||
|
||||
### Prerequisites
|
||||
|
||||
To compile xrdp from the packaged sources, you need basic build tools - a
|
||||
compiler (**gcc** or **clang**) and the **make** program. Additionally,
|
||||
you would need **openssl-devel**, **pam-devel**, **libX11-devel**,
|
||||
**libXfixes-devel**, **libXrandr-devel**. More additional software would
|
||||
be needed depending on your configuration.
|
||||
|
||||
To compile xrdp from a checked out git repository, you would additionally
|
||||
need **autoconf**, **automake**, **libtool** and **pkgconfig**.
|
||||
|
||||
### Get the source and build it
|
||||
|
||||
If compiling from the packaged source, unpack the tarball and change to the
|
||||
resulting directory.
|
||||
|
||||
If compiling from a checked out repository, please make sure you've got the submodules
|
||||
cloned too (use `git clone --recursive https://github.com/neutrinolabs/xrdp`)
|
||||
|
||||
Then run following commands to compile and install xrdp:
|
||||
```bash
|
||||
./bootstrap
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
```
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
xrdp
|
||||
├── common ------ common code
|
||||
├── docs -------- documentation
|
||||
├── fontdump ---- font dump for Windows
|
||||
├── genkeymap --- keymap generator
|
||||
├── instfiles --- installable data file
|
||||
├── keygen ------ xrdp RSA key pair generator
|
||||
├── libpainter -- painter library
|
||||
├── librfxcodec - RFX codec library
|
||||
├── libxrdp ----- core RDP protocol implementation
|
||||
├── m4 ---------- Autoconf macros
|
||||
├── mc ---------- media center module
|
||||
├── neutrinordp - RDP client module for proxying RDP connections using NeutrinoRDP
|
||||
├── pkgconfig --- pkg-config configuration
|
||||
├── rdp --------- RDP client module for connecting to another RDP server
|
||||
├── sesman ------ session manager for xrdp
|
||||
├── tcutils ----- QT based utility program for thin clients
|
||||
├── tests ------- tests for the code
|
||||
├── vnc --------- VNC client module for xrdp
|
||||
├── vrplayer ---- QT player redirecting video/audio to clients over xrdpvr channel
|
||||
├── xorg -------- X11rdp, an Xorg backend for xrdp
|
||||
├── xrdp -------- main server code
|
||||
├── xrdpapi ----- virtual channel API
|
||||
├── xrdpvr ------ API for playing media over RDP
|
||||
└── xup --------- X11rdp and xorgxrdp client module
|
||||
```
|
@ -14,7 +14,7 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which libtool
|
||||
which libtool || which libtoolize
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install libtool"
|
||||
@ -28,10 +28,4 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
touch configure.ac
|
||||
touch NEWS
|
||||
touch AUTHORS
|
||||
touch README
|
||||
touch ChangeLog
|
||||
ln -s ../config.c $PWD/sesman/tools/config.c
|
||||
autoreconf -fvi
|
||||
|
210
coding_style.md
Normal file
210
coding_style.md
Normal file
@ -0,0 +1,210 @@
|
||||
XRdp Coding Style
|
||||
=================
|
||||
|
||||
The coding style used by XRdp is described below.
|
||||
|
||||
The XRdp project uses astyle (artistic style) to format the code. Astyle
|
||||
requires a configuration file that describes how you want your code
|
||||
formatted. This file is present in the XRdp root directory and is named
|
||||
`astyle_config.as`.
|
||||
|
||||
Here is how we run the astyle command:
|
||||
|
||||
astyle --options=/path/to/file/astyle_config.as "*.c"
|
||||
|
||||
This coding style is a work in progress and is still evolving.
|
||||
|
||||
|
||||
Language Standard
|
||||
-----------------
|
||||
|
||||
Try to make all code compile with both C and C++ compiler. C++ is more
|
||||
strict, which makes the code safer.
|
||||
|
||||
|
||||
Indentation
|
||||
-----------
|
||||
|
||||
* 4 spaces per indent
|
||||
* No tabs for any indents
|
||||
|
||||
☞
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Line wrapping
|
||||
-------------
|
||||
|
||||
* Keep lines not longer than 80 chars
|
||||
* Align wrapped argument to the first argument
|
||||
|
||||
☞
|
||||
|
||||
log_message("connection aborted: error %d",
|
||||
ret);
|
||||
|
||||
|
||||
Variable names
|
||||
--------------
|
||||
|
||||
* Use lowercase with underscores as needed
|
||||
* Don't use camelCase
|
||||
* Preprocessor constants should be uppercase
|
||||
|
||||
☞
|
||||
|
||||
#define BUF_SIZE 1024
|
||||
int fd;
|
||||
int bytes_in_stream;
|
||||
|
||||
|
||||
Variable declaration
|
||||
--------------------
|
||||
|
||||
* Each variable is declared on a separate line
|
||||
|
||||
☞
|
||||
|
||||
int i;
|
||||
int j;
|
||||
|
||||
|
||||
Whitespace
|
||||
----------
|
||||
|
||||
* Use blank lines to group statements
|
||||
* Use at most one empty line between statements
|
||||
* For pointers and references, use a single space before * or & but not after
|
||||
* Use one space after a cast
|
||||
* No space before square brackets
|
||||
|
||||
☞
|
||||
|
||||
char *cptr;
|
||||
int *iptr;
|
||||
cptr = (char *) malloc(1024);
|
||||
|
||||
write(fd, &buf[12], 16);
|
||||
|
||||
|
||||
Function declarations
|
||||
---------------------
|
||||
|
||||
* Use newline before function name
|
||||
|
||||
☞
|
||||
|
||||
static int
|
||||
value_ok(int val)
|
||||
{
|
||||
return (val >= 0);
|
||||
}
|
||||
|
||||
|
||||
Braces
|
||||
------
|
||||
|
||||
* Opening brace is always on a separate line
|
||||
* Align braces with the line preceding the opening brace
|
||||
|
||||
☞
|
||||
|
||||
struct stream
|
||||
{
|
||||
int flags;
|
||||
char *data;
|
||||
};
|
||||
|
||||
void
|
||||
process_data(struct stream *s)
|
||||
{
|
||||
if (stream == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
`if` statements
|
||||
---------------
|
||||
|
||||
* Always use braces
|
||||
* Put both braces on separate lines
|
||||
|
||||
☞
|
||||
|
||||
if (val <= 0xff)
|
||||
{
|
||||
out_uint8(s, val);
|
||||
}
|
||||
else if (val <= 0xffff)
|
||||
{
|
||||
out_uint16_le(s, val);
|
||||
}
|
||||
else
|
||||
{
|
||||
out_uint32_le(s, val);
|
||||
}
|
||||
|
||||
|
||||
`for` statements
|
||||
----------------
|
||||
|
||||
* Always use braces
|
||||
* Put both braces on separate lines
|
||||
|
||||
☞
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
printf("i = %d\n", i);
|
||||
}
|
||||
|
||||
|
||||
`while` and `do while` statements
|
||||
---------------------------------
|
||||
|
||||
* Always use braces
|
||||
* `while` after the closing brace is on the same line
|
||||
|
||||
☞
|
||||
|
||||
while (cptr)
|
||||
{
|
||||
cptr—;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
cptr--;
|
||||
} while (cptr);
|
||||
|
||||
|
||||
`switch` statements
|
||||
-------------------
|
||||
|
||||
* Indent `case` once
|
||||
* Indent statements under `case` one more time
|
||||
* Put both braces on separate lines
|
||||
|
||||
☞
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case READ:
|
||||
read(fd, buf, 1024);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("bad cmd\n");
|
||||
}
|
||||
|
||||
Comments
|
||||
--------
|
||||
|
||||
Use /* */ for comments
|
||||
Don't use //
|
@ -1,47 +1,57 @@
|
||||
EXTRA_DIST = \
|
||||
arch.h \
|
||||
d3des.h \
|
||||
defines.h \
|
||||
file.h \
|
||||
file_loc.h \
|
||||
list.h \
|
||||
list16.h \
|
||||
fifo.h \
|
||||
log.h \
|
||||
os_calls.h \
|
||||
os_calls.h \
|
||||
parse.h \
|
||||
rail.h \
|
||||
ssl_calls.h \
|
||||
thread_calls.h \
|
||||
trans.h \
|
||||
if XRDP_PIXMAN
|
||||
PIXMAN_SOURCES =
|
||||
else
|
||||
PIXMAN_SOURCES = pixman-region16.c pixman-region.h
|
||||
endif
|
||||
|
||||
EXTRA_DIST = pixman-region.c
|
||||
|
||||
include_HEADERS = \
|
||||
xrdp_client_info.h \
|
||||
xrdp_constants.h \
|
||||
xrdp_rail.h
|
||||
xrdp_rail.h
|
||||
|
||||
AM_CFLAGS = \
|
||||
AM_CPPFLAGS = \
|
||||
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
|
||||
-DXRDP_SBIN_PATH=\"${sbindir}\" \
|
||||
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
|
||||
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
|
||||
-DXRDP_LOG_PATH=\"${localstatedir}/log\"
|
||||
|
||||
lib_LTLIBRARIES = \
|
||||
AM_CFLAGS = $(OPENSSL_CFLAGS)
|
||||
|
||||
module_LTLIBRARIES = \
|
||||
libcommon.la
|
||||
|
||||
libcommon_la_SOURCES = \
|
||||
d3des.c \
|
||||
file.c \
|
||||
list.c \
|
||||
list16.c \
|
||||
arch.h \
|
||||
crc16.h \
|
||||
defines.h \
|
||||
fifo.c \
|
||||
fifo.h \
|
||||
file.c \
|
||||
file.h \
|
||||
file_loc.h \
|
||||
list.c \
|
||||
list.h \
|
||||
list16.c \
|
||||
list16.h \
|
||||
log.c \
|
||||
log.h \
|
||||
os_calls.c \
|
||||
os_calls.h \
|
||||
os_calls.h \
|
||||
parse.h \
|
||||
rail.h \
|
||||
ssl_calls.c \
|
||||
ssl_calls.h \
|
||||
thread_calls.c \
|
||||
trans.c
|
||||
thread_calls.h \
|
||||
trans.c \
|
||||
trans.h \
|
||||
$(PIXMAN_SOURCES)
|
||||
|
||||
libcommon_la_LIBADD = \
|
||||
-lcrypto \
|
||||
-lssl \
|
||||
-lpthread
|
||||
-lpthread \
|
||||
$(OPENSSL_LIBS) \
|
||||
$(DLOPEN_LIBS)
|
||||
|
@ -19,10 +19,14 @@
|
||||
#if !defined(ARCH_H)
|
||||
#define ARCH_H
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include "config_ac.h"
|
||||
#endif
|
||||
|
||||
/* you can define L_ENDIAN or B_ENDIAN and NEED_ALIGN or NO_NEED_ALIGN
|
||||
in the makefile to override */
|
||||
|
||||
/* check endianess */
|
||||
/* check endianness */
|
||||
#if !(defined(L_ENDIAN) || defined(B_ENDIAN))
|
||||
#if !defined(__BYTE_ORDER) && defined(__linux__)
|
||||
#include <endian.h>
|
||||
@ -109,7 +113,6 @@ typedef __int64 tbus;
|
||||
#else
|
||||
typedef long tbus;
|
||||
#endif
|
||||
typedef tbus thandle;
|
||||
typedef tbus tintptr;
|
||||
/* wide char, socket */
|
||||
#if defined(_WIN32)
|
||||
@ -125,4 +128,22 @@ typedef signed long long tsi64;
|
||||
#endif
|
||||
#endif /* DEFINED_Ts */
|
||||
|
||||
/* format string verification */
|
||||
#if defined(HAVE_FUNC_ATTRIBUTE_FORMAT)
|
||||
#define printflike(arg_format, arg_first_check) \
|
||||
__attribute__((__format__(__printf__, arg_format, arg_first_check)))
|
||||
#else
|
||||
#define printflike(arg_format, arg_first_check)
|
||||
#endif
|
||||
|
||||
/* module interface */
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
tintptr mod_init();
|
||||
int mod_exit(tintptr);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
510
common/d3des.c
510
common/d3des.c
@ -1,510 +0,0 @@
|
||||
/*
|
||||
* This is D3DES (V5.09) by Richard Outerbridge with the double and
|
||||
* triple-length support removed for use in VNC. Also the bytebit[] array
|
||||
* has been reversed so that the most significant bit in each byte of the
|
||||
* key is ignored, not the least significant.
|
||||
*
|
||||
* These changes are:
|
||||
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/* D3DES (V5.09) -
|
||||
*
|
||||
* A portable, public domain, version of the Data Encryption Standard.
|
||||
*
|
||||
* Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
|
||||
* Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
|
||||
* code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
|
||||
* Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
|
||||
* for humouring me on.
|
||||
*
|
||||
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
|
||||
* (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
|
||||
*/
|
||||
|
||||
#include "d3des.h"
|
||||
|
||||
static void scrunch(unsigned char *, unsigned long *);
|
||||
static void unscrun(unsigned long *, unsigned char *);
|
||||
static void desfunc(unsigned long *, unsigned long *);
|
||||
static void cookey(unsigned long *);
|
||||
|
||||
static unsigned long KnL[32] = { 0L };
|
||||
/*
|
||||
static unsigned long KnR[32] = { 0L };
|
||||
static unsigned long Kn3[32] = { 0L };
|
||||
static unsigned char Df_Key[24] = {
|
||||
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
|
||||
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
|
||||
0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
|
||||
*/
|
||||
|
||||
static unsigned short bytebit[8] =
|
||||
{
|
||||
01, 02, 04, 010, 020, 040, 0100, 0200
|
||||
};
|
||||
|
||||
static unsigned long bigbyte[24] =
|
||||
{
|
||||
0x800000L, 0x400000L, 0x200000L, 0x100000L,
|
||||
0x80000L, 0x40000L, 0x20000L, 0x10000L,
|
||||
0x8000L, 0x4000L, 0x2000L, 0x1000L,
|
||||
0x800L, 0x400L, 0x200L, 0x100L,
|
||||
0x80L, 0x40L, 0x20L, 0x10L,
|
||||
0x8L, 0x4L, 0x2L, 0x1L
|
||||
};
|
||||
|
||||
/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
|
||||
|
||||
static unsigned char pc1[56] =
|
||||
{
|
||||
56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
|
||||
9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
|
||||
62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
|
||||
13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3
|
||||
};
|
||||
|
||||
static unsigned char totrot[16] =
|
||||
{
|
||||
1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28
|
||||
};
|
||||
|
||||
static unsigned char pc2[48] =
|
||||
{
|
||||
13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
|
||||
22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
|
||||
40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
|
||||
43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31
|
||||
};
|
||||
|
||||
/* Thanks to James Gillogly & Phil Karn! */
|
||||
void rfbDesKey(unsigned char *key, int edf)
|
||||
{
|
||||
register int i, j, l, m, n;
|
||||
unsigned char pc1m[56], pcr[56];
|
||||
unsigned long kn[32];
|
||||
|
||||
for ( j = 0; j < 56; j++ )
|
||||
{
|
||||
l = pc1[j];
|
||||
m = l & 07;
|
||||
pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
|
||||
}
|
||||
|
||||
for ( i = 0; i < 16; i++ )
|
||||
{
|
||||
if ( edf == DE1 )
|
||||
{
|
||||
m = (15 - i) << 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m = i << 1;
|
||||
}
|
||||
|
||||
n = m + 1;
|
||||
kn[m] = kn[n] = 0L;
|
||||
|
||||
for ( j = 0; j < 28; j++ )
|
||||
{
|
||||
l = j + totrot[i];
|
||||
|
||||
if ( l < 28 )
|
||||
{
|
||||
pcr[j] = pc1m[l];
|
||||
}
|
||||
else
|
||||
{
|
||||
pcr[j] = pc1m[l - 28];
|
||||
}
|
||||
}
|
||||
|
||||
for ( j = 28; j < 56; j++ )
|
||||
{
|
||||
l = j + totrot[i];
|
||||
|
||||
if ( l < 56 )
|
||||
{
|
||||
pcr[j] = pc1m[l];
|
||||
}
|
||||
else
|
||||
{
|
||||
pcr[j] = pc1m[l - 28];
|
||||
}
|
||||
}
|
||||
|
||||
for ( j = 0; j < 24; j++ )
|
||||
{
|
||||
if ( pcr[pc2[j]] )
|
||||
{
|
||||
kn[m] |= bigbyte[j];
|
||||
}
|
||||
|
||||
if ( pcr[pc2[j + 24]] )
|
||||
{
|
||||
kn[n] |= bigbyte[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cookey(kn);
|
||||
return;
|
||||
}
|
||||
|
||||
static void cookey(register unsigned long *raw1)
|
||||
{
|
||||
register unsigned long *cook, *raw0;
|
||||
unsigned long dough[32];
|
||||
register int i;
|
||||
|
||||
cook = dough;
|
||||
|
||||
for ( i = 0; i < 16; i++, raw1++ )
|
||||
{
|
||||
raw0 = raw1++;
|
||||
*cook = (*raw0 & 0x00fc0000L) << 6;
|
||||
*cook |= (*raw0 & 0x00000fc0L) << 10;
|
||||
*cook |= (*raw1 & 0x00fc0000L) >> 10;
|
||||
*cook++ |= (*raw1 & 0x00000fc0L) >> 6;
|
||||
*cook = (*raw0 & 0x0003f000L) << 12;
|
||||
*cook |= (*raw0 & 0x0000003fL) << 16;
|
||||
*cook |= (*raw1 & 0x0003f000L) >> 4;
|
||||
*cook++ |= (*raw1 & 0x0000003fL);
|
||||
}
|
||||
|
||||
rfbUseKey(dough);
|
||||
return;
|
||||
}
|
||||
|
||||
void rfbCPKey(register unsigned long *into)
|
||||
{
|
||||
register unsigned long *from, *endp;
|
||||
|
||||
from = KnL, endp = &KnL[32];
|
||||
|
||||
while ( from < endp )
|
||||
{
|
||||
*into++ = *from++;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void rfbUseKey(register unsigned long *from)
|
||||
{
|
||||
register unsigned long *to, *endp;
|
||||
|
||||
to = KnL, endp = &KnL[32];
|
||||
|
||||
while ( to < endp )
|
||||
{
|
||||
*to++ = *from++;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void rfbDes(unsigned char *inblock, unsigned char *outblock)
|
||||
{
|
||||
unsigned long work[2];
|
||||
|
||||
scrunch(inblock, work);
|
||||
desfunc(work, KnL);
|
||||
unscrun(work, outblock);
|
||||
return;
|
||||
}
|
||||
|
||||
static void scrunch(register unsigned char *outof, register unsigned long *into)
|
||||
{
|
||||
*into = (*outof++ & 0xffL) << 24;
|
||||
*into |= (*outof++ & 0xffL) << 16;
|
||||
*into |= (*outof++ & 0xffL) << 8;
|
||||
*into++ |= (*outof++ & 0xffL);
|
||||
*into = (*outof++ & 0xffL) << 24;
|
||||
*into |= (*outof++ & 0xffL) << 16;
|
||||
*into |= (*outof++ & 0xffL) << 8;
|
||||
*into |= (*outof & 0xffL);
|
||||
return;
|
||||
}
|
||||
|
||||
static void unscrun(register unsigned long *outof, register unsigned char *into)
|
||||
{
|
||||
*into++ = (unsigned char)((*outof >> 24) & 0xffL);
|
||||
*into++ = (unsigned char)((*outof >> 16) & 0xffL);
|
||||
*into++ = (unsigned char)((*outof >> 8) & 0xffL);
|
||||
*into++ = (unsigned char)( *outof++ & 0xffL);
|
||||
*into++ = (unsigned char)((*outof >> 24) & 0xffL);
|
||||
*into++ = (unsigned char)((*outof >> 16) & 0xffL);
|
||||
*into++ = (unsigned char)((*outof >> 8) & 0xffL);
|
||||
*into = (unsigned char)( *outof & 0xffL);
|
||||
return;
|
||||
}
|
||||
|
||||
static unsigned long SP1[64] =
|
||||
{
|
||||
0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
|
||||
0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
|
||||
0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
|
||||
0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
|
||||
0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
|
||||
0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
|
||||
0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
|
||||
0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
|
||||
0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
|
||||
0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
|
||||
0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
|
||||
0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
|
||||
0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
|
||||
0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
|
||||
0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
|
||||
0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L
|
||||
};
|
||||
|
||||
static unsigned long SP2[64] =
|
||||
{
|
||||
0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
|
||||
0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
|
||||
0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
|
||||
0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
|
||||
0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
|
||||
0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
|
||||
0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
|
||||
0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
|
||||
0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
|
||||
0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
|
||||
0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
|
||||
0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
|
||||
0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
|
||||
0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
|
||||
0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
|
||||
0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L
|
||||
};
|
||||
|
||||
static unsigned long SP3[64] =
|
||||
{
|
||||
0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
|
||||
0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
|
||||
0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
|
||||
0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
|
||||
0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
|
||||
0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
|
||||
0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
|
||||
0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
|
||||
0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
|
||||
0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
|
||||
0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
|
||||
0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
|
||||
0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
|
||||
0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
|
||||
0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
|
||||
0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L
|
||||
};
|
||||
|
||||
static unsigned long SP4[64] =
|
||||
{
|
||||
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
|
||||
0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
|
||||
0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
|
||||
0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
|
||||
0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
|
||||
0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
|
||||
0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
|
||||
0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
|
||||
0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
|
||||
0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
|
||||
0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
|
||||
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
|
||||
0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
|
||||
0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
|
||||
0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
|
||||
0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L
|
||||
};
|
||||
|
||||
static unsigned long SP5[64] =
|
||||
{
|
||||
0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
|
||||
0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
|
||||
0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
|
||||
0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
|
||||
0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
|
||||
0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
|
||||
0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
|
||||
0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
|
||||
0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
|
||||
0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
|
||||
0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
|
||||
0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
|
||||
0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
|
||||
0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
|
||||
0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
|
||||
0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L
|
||||
};
|
||||
|
||||
static unsigned long SP6[64] =
|
||||
{
|
||||
0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
|
||||
0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
|
||||
0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
|
||||
0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
|
||||
0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
|
||||
0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
|
||||
0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
|
||||
0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
|
||||
0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
|
||||
0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
|
||||
0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
|
||||
0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
|
||||
0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
|
||||
0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
|
||||
0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
|
||||
0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L
|
||||
};
|
||||
|
||||
static unsigned long SP7[64] =
|
||||
{
|
||||
0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
|
||||
0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
|
||||
0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
|
||||
0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
|
||||
0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
|
||||
0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
|
||||
0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
|
||||
0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
|
||||
0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
|
||||
0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
|
||||
0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
|
||||
0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
|
||||
0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
|
||||
0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
|
||||
0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
|
||||
0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L
|
||||
};
|
||||
|
||||
static unsigned long SP8[64] =
|
||||
{
|
||||
0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
|
||||
0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
|
||||
0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
|
||||
0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
|
||||
0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
|
||||
0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
|
||||
0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
|
||||
0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
|
||||
0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
|
||||
0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
|
||||
0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
|
||||
0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
|
||||
0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
|
||||
0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
|
||||
0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
|
||||
0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L
|
||||
};
|
||||
|
||||
static void desfunc(register unsigned long *block, register unsigned long *keys)
|
||||
{
|
||||
register unsigned long fval, work, right, leftt;
|
||||
register int round;
|
||||
|
||||
leftt = block[0];
|
||||
right = block[1];
|
||||
work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
|
||||
right ^= work;
|
||||
leftt ^= (work << 4);
|
||||
work = ((leftt >> 16) ^ right) & 0x0000ffffL;
|
||||
right ^= work;
|
||||
leftt ^= (work << 16);
|
||||
work = ((right >> 2) ^ leftt) & 0x33333333L;
|
||||
leftt ^= work;
|
||||
right ^= (work << 2);
|
||||
work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
|
||||
leftt ^= work;
|
||||
right ^= (work << 8);
|
||||
right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
|
||||
work = (leftt ^ right) & 0xaaaaaaaaL;
|
||||
leftt ^= work;
|
||||
right ^= work;
|
||||
leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
|
||||
|
||||
for ( round = 0; round < 8; round++ )
|
||||
{
|
||||
work = (right << 28) | (right >> 4);
|
||||
work ^= *keys++;
|
||||
fval = SP7[ work & 0x3fL];
|
||||
fval |= SP5[(work >> 8) & 0x3fL];
|
||||
fval |= SP3[(work >> 16) & 0x3fL];
|
||||
fval |= SP1[(work >> 24) & 0x3fL];
|
||||
work = right ^ *keys++;
|
||||
fval |= SP8[ work & 0x3fL];
|
||||
fval |= SP6[(work >> 8) & 0x3fL];
|
||||
fval |= SP4[(work >> 16) & 0x3fL];
|
||||
fval |= SP2[(work >> 24) & 0x3fL];
|
||||
leftt ^= fval;
|
||||
work = (leftt << 28) | (leftt >> 4);
|
||||
work ^= *keys++;
|
||||
fval = SP7[ work & 0x3fL];
|
||||
fval |= SP5[(work >> 8) & 0x3fL];
|
||||
fval |= SP3[(work >> 16) & 0x3fL];
|
||||
fval |= SP1[(work >> 24) & 0x3fL];
|
||||
work = leftt ^ *keys++;
|
||||
fval |= SP8[ work & 0x3fL];
|
||||
fval |= SP6[(work >> 8) & 0x3fL];
|
||||
fval |= SP4[(work >> 16) & 0x3fL];
|
||||
fval |= SP2[(work >> 24) & 0x3fL];
|
||||
right ^= fval;
|
||||
}
|
||||
|
||||
right = (right << 31) | (right >> 1);
|
||||
work = (leftt ^ right) & 0xaaaaaaaaL;
|
||||
leftt ^= work;
|
||||
right ^= work;
|
||||
leftt = (leftt << 31) | (leftt >> 1);
|
||||
work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
|
||||
right ^= work;
|
||||
leftt ^= (work << 8);
|
||||
work = ((leftt >> 2) ^ right) & 0x33333333L;
|
||||
right ^= work;
|
||||
leftt ^= (work << 2);
|
||||
work = ((right >> 16) ^ leftt) & 0x0000ffffL;
|
||||
leftt ^= work;
|
||||
right ^= (work << 16);
|
||||
work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
|
||||
leftt ^= work;
|
||||
right ^= (work << 4);
|
||||
*block++ = right;
|
||||
*block = leftt;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Validation sets:
|
||||
*
|
||||
* Single-length key, single-length plaintext -
|
||||
* Key : 0123 4567 89ab cdef
|
||||
* Plain : 0123 4567 89ab cde7
|
||||
* Cipher : c957 4425 6a5e d31d
|
||||
*
|
||||
* Double-length key, single-length plaintext -
|
||||
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
|
||||
* Plain : 0123 4567 89ab cde7
|
||||
* Cipher : 7f1d 0a77 826b 8aff
|
||||
*
|
||||
* Double-length key, double-length plaintext -
|
||||
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
|
||||
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
|
||||
* Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
|
||||
*
|
||||
* Triple-length key, single-length plaintext -
|
||||
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
|
||||
* Plain : 0123 4567 89ab cde7
|
||||
* Cipher : de0b 7c06 ae5e 0ed5
|
||||
*
|
||||
* Triple-length key, double-length plaintext -
|
||||
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
|
||||
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
|
||||
* Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
|
||||
*
|
||||
* d3des V5.0a rwo 9208.07 18:44 Graven Imagery
|
||||
**********************************************************************/
|
@ -1,56 +0,0 @@
|
||||
#ifndef D3DES_H
|
||||
#define D3DES_H
|
||||
|
||||
/*
|
||||
* This is D3DES (V5.09) by Richard Outerbridge with the double and
|
||||
* triple-length support removed for use in VNC.
|
||||
*
|
||||
* These changes are:
|
||||
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/* d3des.h -
|
||||
*
|
||||
* Headers and defines for d3des.c
|
||||
* Graven Imagery, 1992.
|
||||
*
|
||||
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
|
||||
* (GEnie : OUTER; CIS : [71755,204])
|
||||
*/
|
||||
|
||||
#define EN0 0 /* MODE == encrypt */
|
||||
#define DE1 1 /* MODE == decrypt */
|
||||
|
||||
extern void rfbDesKey(unsigned char *, int);
|
||||
/* hexkey[8] MODE
|
||||
* Sets the internal key register according to the hexadecimal
|
||||
* key contained in the 8 bytes of hexkey, according to the DES,
|
||||
* for encryption or decryption according to MODE.
|
||||
*/
|
||||
|
||||
extern void rfbUseKey(unsigned long *);
|
||||
/* cookedkey[32]
|
||||
* Loads the internal key register with the data in cookedkey.
|
||||
*/
|
||||
|
||||
extern void rfbCPKey(unsigned long *);
|
||||
/* cookedkey[32]
|
||||
* Copies the contents of the internal key register into the storage
|
||||
* located at &cookedkey[0].
|
||||
*/
|
||||
|
||||
extern void rfbDes(unsigned char *, unsigned char *);
|
||||
/* from[8] to[8]
|
||||
* Encrypts/Decrypts (according to the key currently loaded in the
|
||||
* internal key register) one block of eight bytes at address 'from'
|
||||
* into the block at address 'to'. They can be the same.
|
||||
*/
|
||||
|
||||
/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
|
||||
********************************************************************/
|
||||
|
||||
#endif
|
146
common/file.c
146
common/file.c
@ -26,6 +26,48 @@
|
||||
|
||||
#define FILE_MAX_LINE_BYTES 2048
|
||||
|
||||
static int APP_CC
|
||||
file_read_ini_line(struct stream *s, char *text, int text_bytes);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* look up for a section name within str (i.e. pattern [section_name])
|
||||
* if a section name is found, this function return 1 and copy the section
|
||||
* inplace of str. */
|
||||
static int APP_CC
|
||||
line_lookup_for_section_name(char *str, int str_bytes)
|
||||
{
|
||||
int name_index_start;
|
||||
int index;
|
||||
char c;
|
||||
|
||||
name_index_start = -1;
|
||||
index = 0;
|
||||
while ((c = str[index]) != 0)
|
||||
{
|
||||
if (c == '[')
|
||||
{
|
||||
name_index_start = index + 1;
|
||||
}
|
||||
else if (c == ']' && name_index_start > 0)
|
||||
{
|
||||
if (name_index_start + index >= str_bytes)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
for (index = index - name_index_start; index > 0; index--)
|
||||
{
|
||||
str[0] = str[name_index_start];
|
||||
str++;
|
||||
}
|
||||
str[0] = 0;
|
||||
return 1;
|
||||
}
|
||||
++index;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error
|
||||
returns 0 if everything is ok
|
||||
@ -35,17 +77,11 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
|
||||
{
|
||||
struct stream *s;
|
||||
char text[FILE_MAX_LINE_BYTES];
|
||||
char c;
|
||||
int in_it;
|
||||
int in_it_index;
|
||||
int len;
|
||||
int index;
|
||||
int rv;
|
||||
|
||||
rv = 0;
|
||||
g_file_seek(fd, 0);
|
||||
in_it_index = 0;
|
||||
in_it = 0;
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
list_clear(names);
|
||||
make_stream(s);
|
||||
@ -55,26 +91,11 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
|
||||
if (len > 0)
|
||||
{
|
||||
s->end = s->p + len;
|
||||
|
||||
for (index = 0; index < len; index++)
|
||||
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
|
||||
{
|
||||
in_uint8(s, c);
|
||||
|
||||
if (c == '[')
|
||||
{
|
||||
in_it = 1;
|
||||
}
|
||||
else if (c == ']')
|
||||
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
list_add_item(names, (tbus)g_strdup(text));
|
||||
in_it = 0;
|
||||
in_it_index = 0;
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
}
|
||||
else if (in_it)
|
||||
{
|
||||
text[in_it_index] = c;
|
||||
in_it_index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -88,15 +109,17 @@ l_file_read_sections(int fd, int max_file_size, struct list *names)
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
/* Read a line in the stream 's', removing comments.
|
||||
* returns error
|
||||
* returns 0 if everything is ok
|
||||
* returns 1 if problem reading file */
|
||||
static int APP_CC
|
||||
file_read_line(struct stream *s, char *text, int text_bytes)
|
||||
file_read_ini_line(struct stream *s, char *text, int text_bytes)
|
||||
{
|
||||
int i;
|
||||
int skip_to_end;
|
||||
int at_end;
|
||||
char c;
|
||||
char *hold;
|
||||
|
||||
skip_to_end = 0;
|
||||
|
||||
@ -105,7 +128,6 @@ file_read_line(struct stream *s, char *text, int text_bytes)
|
||||
return 1;
|
||||
}
|
||||
|
||||
hold = s->p;
|
||||
i = 0;
|
||||
in_uint8(s, c);
|
||||
|
||||
@ -163,15 +185,10 @@ file_read_line(struct stream *s, char *text, int text_bytes)
|
||||
|
||||
text[i] = 0;
|
||||
|
||||
if (text[0] == '[')
|
||||
{
|
||||
s->p = hold;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
static int APP_CC
|
||||
@ -227,11 +244,7 @@ l_file_read_section(int fd, int max_file_size, const char *section,
|
||||
char *name;
|
||||
char *value;
|
||||
char *lvalue;
|
||||
char c;
|
||||
int in_it;
|
||||
int in_it_index;
|
||||
int len;
|
||||
int index;
|
||||
int file_size;
|
||||
|
||||
data = (char *) g_malloc(FILE_MAX_LINE_BYTES * 3, 0);
|
||||
@ -241,8 +254,6 @@ l_file_read_section(int fd, int max_file_size, const char *section,
|
||||
|
||||
file_size = 32 * 1024; /* 32 K file size limit */
|
||||
g_file_seek(fd, 0);
|
||||
in_it_index = 0;
|
||||
in_it = 0;
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
list_clear(names);
|
||||
list_clear(values);
|
||||
@ -253,36 +264,20 @@ l_file_read_section(int fd, int max_file_size, const char *section,
|
||||
if (len > 0)
|
||||
{
|
||||
s->end = s->p + len;
|
||||
|
||||
for (index = 0; index < len; index++)
|
||||
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
|
||||
{
|
||||
if (!s_check_rem(s, 1))
|
||||
{
|
||||
break;
|
||||
}
|
||||
in_uint8(s, c);
|
||||
if ((c == '#') || (c == ';'))
|
||||
{
|
||||
if (file_read_line(s, text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
in_it = 0;
|
||||
in_it_index = 0;
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
continue;
|
||||
}
|
||||
if (c == '[')
|
||||
{
|
||||
in_it = 1;
|
||||
}
|
||||
else if (c == ']')
|
||||
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
if (g_strcasecmp(section, text) == 0)
|
||||
{
|
||||
file_read_line(s, text, FILE_MAX_LINE_BYTES);
|
||||
while (file_read_line(s, text, FILE_MAX_LINE_BYTES) == 0)
|
||||
while (file_read_ini_line(s, text,
|
||||
FILE_MAX_LINE_BYTES) == 0)
|
||||
{
|
||||
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (g_strlen(text) > 0)
|
||||
{
|
||||
file_split_name_value(text, name, value);
|
||||
@ -307,27 +302,14 @@ l_file_read_section(int fd, int max_file_size, const char *section,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free_stream(s);
|
||||
g_free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
in_it = 0;
|
||||
in_it_index = 0;
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
}
|
||||
else if (in_it)
|
||||
{
|
||||
text[in_it_index] = c;
|
||||
in_it_index++;
|
||||
if (in_it_index >= FILE_MAX_LINE_BYTES)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free_stream(s);
|
||||
g_free(data);
|
||||
return 1;
|
||||
@ -346,7 +328,7 @@ file_read_sections(int fd, struct list *names)
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
/* this function should be prefered over file_read_sections because it can
|
||||
/* this function should be preferred over file_read_sections because it can
|
||||
read any file size */
|
||||
int APP_CC
|
||||
file_by_name_read_sections(const char *file_name, struct list *names)
|
||||
@ -362,7 +344,7 @@ file_by_name_read_sections(const char *file_name, struct list *names)
|
||||
return 1;
|
||||
}
|
||||
|
||||
fd = g_file_open(file_name);
|
||||
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
@ -386,7 +368,7 @@ file_read_section(int fd, const char *section,
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
/* this function should be prefered over file_read_section because it can
|
||||
/* this function should be preferred over file_read_section because it can
|
||||
read any file size */
|
||||
int APP_CC
|
||||
file_by_name_read_section(const char *file_name, const char *section,
|
||||
@ -403,7 +385,7 @@ file_by_name_read_section(const char *file_name, const char *section,
|
||||
return 1;
|
||||
}
|
||||
|
||||
fd = g_file_open(file_name);
|
||||
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
|
@ -37,8 +37,8 @@
|
||||
#define XRDP_SHARE_PATH "/usr/local/share/xrdp"
|
||||
#endif
|
||||
|
||||
#if !defined(XRDP_LIB_PATH)
|
||||
#define XRDP_LIB_PATH "/usr/local/lib/xrdp"
|
||||
#if !defined(XRDP_MODULE_PATH)
|
||||
#define XRDP_MODULE_PATH "/usr/local/lib/xrdp"
|
||||
#endif
|
||||
|
||||
#if !defined(XRDP_LOG_PATH)
|
||||
|
@ -82,7 +82,7 @@ list_add_item(struct list *self, tbus item)
|
||||
|
||||
/*****************************************************************************/
|
||||
tbus APP_CC
|
||||
list_get_item(struct list *self, int index)
|
||||
list_get_item(const struct list *self, int index)
|
||||
{
|
||||
if (index < 0 || index >= self->count)
|
||||
{
|
||||
@ -192,7 +192,7 @@ list_insert_item(struct list *self, int index, tbus item)
|
||||
|
||||
/*****************************************************************************/
|
||||
/* append one list to another using strdup for each item in the list */
|
||||
/* begins copy at start_index, a zero based index on the soure list */
|
||||
/* begins copy at start_index, a zero based index on the source list */
|
||||
void APP_CC
|
||||
list_append_list_strdup(struct list *self, struct list *dest, int start_index)
|
||||
{
|
||||
@ -221,6 +221,6 @@ list_dump_items(struct list *self)
|
||||
|
||||
for (index = 0; index < self->count; index++)
|
||||
{
|
||||
g_writeln("%d: %s", index, list_get_item(self, index));
|
||||
g_writeln("%d: 0x%lx", index, list_get_item(self, index));
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ list_delete(struct list* self);
|
||||
void APP_CC
|
||||
list_add_item(struct list* self, tintptr item);
|
||||
tintptr APP_CC
|
||||
list_get_item(struct list* self, int index);
|
||||
list_get_item(const struct list *self, int index);
|
||||
void APP_CC
|
||||
list_clear(struct list* self);
|
||||
int APP_CC
|
||||
|
25
common/log.c
25
common/log.c
@ -59,6 +59,13 @@ internal_log_file_open(const char *fname)
|
||||
S_IRUSR | S_IWUSR);
|
||||
}
|
||||
|
||||
#ifdef FD_CLOEXEC
|
||||
if (ret != -1)
|
||||
{
|
||||
fcntl(ret, F_SETFD, FD_CLOEXEC);
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -142,7 +149,7 @@ internal_log_start(struct log_config *l_cfg)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* if progname is NULL, we ureturn error */
|
||||
/* if progname is NULL, we return error */
|
||||
if (0 == l_cfg->program_name)
|
||||
{
|
||||
g_writeln("program_name not properly assigned");
|
||||
@ -186,7 +193,7 @@ internal_log_end(struct log_config *l_cfg)
|
||||
/* closing log file */
|
||||
log_message(LOG_LEVEL_ALWAYS, "shutting down log subsystem...");
|
||||
|
||||
if (0 > l_cfg->fd)
|
||||
if (-1 != l_cfg->fd)
|
||||
{
|
||||
/* closing logfile... */
|
||||
g_file_close(l_cfg->fd);
|
||||
@ -205,12 +212,6 @@ internal_log_end(struct log_config *l_cfg)
|
||||
l_cfg->log_file = 0;
|
||||
}
|
||||
|
||||
if (0 != l_cfg->program_name)
|
||||
{
|
||||
g_free(l_cfg->program_name);
|
||||
l_cfg->program_name = 0;
|
||||
}
|
||||
|
||||
ret = LOG_STARTUP_OK;
|
||||
return ret;
|
||||
}
|
||||
@ -221,7 +222,7 @@ internal_log_end(struct log_config *l_cfg)
|
||||
* @return
|
||||
*/
|
||||
enum logLevels DEFAULT_CC
|
||||
internal_log_text2level(char *buf)
|
||||
internal_log_text2level(const char *buf)
|
||||
{
|
||||
if (0 == g_strcasecmp(buf, "0") ||
|
||||
0 == g_strcasecmp(buf, "core"))
|
||||
@ -329,7 +330,7 @@ internal_config_read_logging(int file, struct log_config *lc,
|
||||
list_clear(param_n);
|
||||
|
||||
/* setting defaults */
|
||||
lc->program_name = g_strdup(applicationName);
|
||||
lc->program_name = applicationName;
|
||||
lc->log_file = 0;
|
||||
lc->fd = 0;
|
||||
lc->log_level = LOG_LEVEL_DEBUG;
|
||||
@ -394,7 +395,7 @@ enum logReturns DEFAULT_CC
|
||||
internalInitAndAllocStruct(void)
|
||||
{
|
||||
enum logReturns ret = LOG_GENERAL_ERROR;
|
||||
g_staticLogConfig = g_malloc(sizeof(struct log_config), 1);
|
||||
g_staticLogConfig = g_new0(struct log_config, 1);
|
||||
|
||||
if (g_staticLogConfig != NULL)
|
||||
{
|
||||
@ -448,7 +449,7 @@ log_start_from_param(const struct log_config *iniParams)
|
||||
g_staticLogConfig->log_level = iniParams->log_level;
|
||||
g_staticLogConfig->log_lock = iniParams->log_lock;
|
||||
g_staticLogConfig->log_lock_attr = iniParams->log_lock_attr;
|
||||
g_staticLogConfig->program_name = g_strdup(iniParams->program_name);
|
||||
g_staticLogConfig->program_name = iniParams->program_name;
|
||||
g_staticLogConfig->syslog_level = iniParams->syslog_level;
|
||||
ret = internal_log_start(g_staticLogConfig);
|
||||
|
||||
|
22
common/log.h
22
common/log.h
@ -65,12 +65,12 @@ enum logReturns
|
||||
|
||||
struct log_config
|
||||
{
|
||||
char *program_name;
|
||||
const char *program_name;
|
||||
char *log_file;
|
||||
int fd;
|
||||
unsigned int log_level;
|
||||
enum logLevels log_level;
|
||||
int enable_syslog;
|
||||
unsigned int syslog_level;
|
||||
enum logLevels syslog_level;
|
||||
pthread_mutex_t log_lock;
|
||||
pthread_mutexattr_t log_lock_attr;
|
||||
};
|
||||
@ -81,7 +81,7 @@ struct log_config
|
||||
/**
|
||||
*
|
||||
* @brief Starts the logging subsystem
|
||||
* @param l_cfg loggging system configuration
|
||||
* @param l_cfg logging system configuration
|
||||
* @return
|
||||
*
|
||||
*/
|
||||
@ -113,7 +113,7 @@ internal_log_lvl2str(const enum logLevels lvl, char *str);
|
||||
*
|
||||
*/
|
||||
enum logLevels DEFAULT_CC
|
||||
internal_log_text2level(char *s);
|
||||
internal_log_text2level(const char *s);
|
||||
|
||||
/**
|
||||
* A function that init our struct that holds all state and
|
||||
@ -171,17 +171,7 @@ log_end(void);
|
||||
* @return
|
||||
*/
|
||||
enum logReturns DEFAULT_CC
|
||||
log_message(const enum logLevels lvl, const char *msg, ...);
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Reads configuration
|
||||
* @param s translates the strings "1", "true" and "yes" in 1 (true) and
|
||||
* other strings in 0
|
||||
* @return 0 on success, 1 on failure
|
||||
*
|
||||
*/
|
||||
int APP_CC text2bool(char *s);
|
||||
log_message(const enum logLevels lvl, const char *msg, ...) printflike(2, 3);
|
||||
|
||||
/**
|
||||
* This function returns the configured file name for the logfile
|
||||
|
1025
common/os_calls.c
1025
common/os_calls.c
File diff suppressed because it is too large
Load Diff
@ -25,20 +25,37 @@
|
||||
#define NULL 0
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "arch.h"
|
||||
|
||||
#define g_tcp_can_recv g_sck_can_recv
|
||||
#define g_tcp_can_send g_sck_can_send
|
||||
#define g_tcp_recv g_sck_recv
|
||||
#define g_tcp_send g_sck_send
|
||||
#define g_tcp_close g_sck_close
|
||||
#define g_tcp_last_error_would_block g_sck_last_error_would_block
|
||||
#define g_tcp_set_non_blocking g_sck_set_non_blocking
|
||||
#define g_tcp_local_socket g_sck_local_socket
|
||||
#define g_tcp_local_connect g_sck_local_connect
|
||||
#define g_tcp_listen g_sck_listen
|
||||
#define g_tcp_local_bind g_sck_local_bind
|
||||
#define g_tcp_select g_sck_select
|
||||
#define g_close_wait_obj g_delete_wait_obj
|
||||
|
||||
int APP_CC g_rm_temp_dir(void);
|
||||
int APP_CC g_mk_temp_dir(const char* app_name);
|
||||
void APP_CC g_init(const char* app_name);
|
||||
void APP_CC g_deinit(void);
|
||||
void* APP_CC g_malloc(int size, int zero);
|
||||
void APP_CC g_free(void* ptr);
|
||||
void DEFAULT_CC g_printf(const char *format, ...);
|
||||
void DEFAULT_CC g_sprintf(char* dest, const char* format, ...);
|
||||
void DEFAULT_CC g_snprintf(char* dest, int len, const char* format, ...);
|
||||
void DEFAULT_CC g_writeln(const char* format, ...);
|
||||
void DEFAULT_CC g_write(const char* format, ...);
|
||||
void APP_CC g_hexdump(char* p, int len);
|
||||
void DEFAULT_CC g_printf(const char *format, ...) printflike(1, 2);
|
||||
void DEFAULT_CC g_sprintf(char* dest, const char* format, ...) \
|
||||
printflike(2, 3);
|
||||
int DEFAULT_CC g_snprintf(char* dest, int len, const char* format, ...) \
|
||||
printflike(3, 4);
|
||||
void DEFAULT_CC g_writeln(const char* format, ...) printflike(1, 2);
|
||||
void DEFAULT_CC g_write(const char* format, ...) printflike(1, 2);
|
||||
void APP_CC g_hexdump(const char *p, int len);
|
||||
void APP_CC g_memset(void* ptr, int val, int size);
|
||||
void APP_CC g_memcpy(void* d_ptr, const void* s_ptr, int size);
|
||||
int APP_CC g_getchar(void);
|
||||
@ -49,39 +66,36 @@ int APP_CC g_sck_set_send_buffer_bytes(int sck, int bytes);
|
||||
int APP_CC g_sck_get_send_buffer_bytes(int sck, int *bytes);
|
||||
int APP_CC g_sck_set_recv_buffer_bytes(int sck, int bytes);
|
||||
int APP_CC g_sck_get_recv_buffer_bytes(int sck, int *bytes);
|
||||
int APP_CC g_tcp_local_socket(void);
|
||||
int APP_CC g_sck_local_socket(void);
|
||||
int APP_CC g_sck_get_peer_cred(int sck, int *pid, int *uid, int *gid);
|
||||
void APP_CC g_tcp_close(int sck);
|
||||
void APP_CC g_sck_close(int sck);
|
||||
int APP_CC g_tcp_connect(int sck, const char* address, const char* port);
|
||||
int APP_CC g_tcp_local_connect(int sck, const char* port);
|
||||
int APP_CC g_tcp_force_send(int sck, char* data, int len);
|
||||
int APP_CC g_tcp_force_recv(int sck, char* data, int len);
|
||||
int APP_CC g_tcp_set_non_blocking(int sck);
|
||||
int APP_CC g_sck_local_connect(int sck, const char* port);
|
||||
int APP_CC g_sck_set_non_blocking(int sck);
|
||||
int APP_CC g_tcp_bind(int sck, const char *port);
|
||||
int APP_CC g_tcp_local_bind(int sck, const char* port);
|
||||
int APP_CC g_sck_local_bind(int sck, const char* port);
|
||||
int APP_CC g_tcp_bind_address(int sck, const char* port, const char* address);
|
||||
int APP_CC g_tcp_listen(int sck);
|
||||
int APP_CC g_sck_listen(int sck);
|
||||
int APP_CC g_tcp_accept(int sck);
|
||||
int APP_CC g_sck_accept(int sck, char *addr, int addr_bytes,
|
||||
char *port, int port_bytes);
|
||||
int APP_CC g_tcp_recv(int sck, void* ptr, int len, int flags);
|
||||
int APP_CC g_tcp_send(int sck, const void* ptr, int len, int flags);
|
||||
int APP_CC g_tcp_last_error_would_block(int sck);
|
||||
int APP_CC g_tcp_socket_ok(int sck);
|
||||
int APP_CC g_tcp_can_send(int sck, int millis);
|
||||
int APP_CC g_tcp_can_recv(int sck, int millis);
|
||||
int APP_CC g_tcp_select(int sck1, int sck2);
|
||||
int APP_CC g_sck_recv(int sck, void* ptr, int len, int flags);
|
||||
int APP_CC g_sck_send(int sck, const void* ptr, int len, int flags);
|
||||
int APP_CC g_sck_last_error_would_block(int sck);
|
||||
int APP_CC g_sck_socket_ok(int sck);
|
||||
int APP_CC g_sck_can_send(int sck, int millis);
|
||||
int APP_CC g_sck_can_recv(int sck, int millis);
|
||||
int APP_CC g_sck_select(int sck1, int sck2);
|
||||
void APP_CC g_write_ip_address(int rcv_sck, char* ip_address, int bytes);
|
||||
void APP_CC g_sleep(int msecs);
|
||||
tbus APP_CC g_create_wait_obj(char* name);
|
||||
tbus APP_CC g_create_wait_obj_from_socket(tbus socket, int write);
|
||||
void APP_CC g_delete_wait_obj_from_socket(tbus wait_obj);
|
||||
int APP_CC g_set_wait_obj(tbus obj);
|
||||
int APP_CC g_reset_wait_obj(tbus obj);
|
||||
int APP_CC g_is_wait_obj_set(tbus obj);
|
||||
int APP_CC g_delete_wait_obj(tbus obj);
|
||||
int APP_CC g_close_wait_obj(tbus obj);
|
||||
int APP_CC g_obj_wait(tbus* read_objs, int rcount, tbus* write_objs,
|
||||
tintptr APP_CC g_create_wait_obj(const char *name);
|
||||
tintptr APP_CC g_create_wait_obj_from_socket(tintptr socket, int write);
|
||||
void APP_CC g_delete_wait_obj_from_socket(tintptr wait_obj);
|
||||
int APP_CC g_set_wait_obj(tintptr obj);
|
||||
int APP_CC g_reset_wait_obj(tintptr obj);
|
||||
int APP_CC g_is_wait_obj_set(tintptr obj);
|
||||
int APP_CC g_delete_wait_obj(tintptr obj);
|
||||
int APP_CC g_obj_wait(tintptr* read_objs, int rcount, tintptr* write_objs,
|
||||
int wcount,int mstimeout);
|
||||
void APP_CC g_random(char* data, int len);
|
||||
int APP_CC g_abs(int i);
|
||||
@ -91,14 +105,14 @@ int APP_CC g_file_open_ex(const char *file_name, int aread, int awrite,
|
||||
int acreate, int atrunc);
|
||||
int APP_CC g_file_close(int fd);
|
||||
int APP_CC g_file_read(int fd, char* ptr, int len);
|
||||
int APP_CC g_file_write(int fd, char* ptr, int len);
|
||||
int APP_CC g_file_write(int fd, const char *ptr, int len);
|
||||
int APP_CC g_file_seek(int fd, int offset);
|
||||
int APP_CC g_file_lock(int fd, int start, int len);
|
||||
int APP_CC g_chmod_hex(const char* filename, int flags);
|
||||
int APP_CC g_chown(const char* name, int uid, int gid);
|
||||
int APP_CC g_mkdir(const char* dirname);
|
||||
char* APP_CC g_get_current_dir(char* dirname, int maxlen);
|
||||
int APP_CC g_set_current_dir(char* dirname);
|
||||
int APP_CC g_set_current_dir(const char *dirname);
|
||||
int APP_CC g_file_exist(const char* filename);
|
||||
int APP_CC g_directory_exist(const char* dirname);
|
||||
int APP_CC g_create_dir(const char* dirname);
|
||||
@ -107,7 +121,7 @@ int APP_CC g_remove_dir(const char* dirname);
|
||||
int APP_CC g_file_delete(const char* filename);
|
||||
int APP_CC g_file_get_size(const char* filename);
|
||||
int APP_CC g_strlen(const char* text);
|
||||
char* APP_CC g_strchr(const char* text, int c);
|
||||
const char *APP_CC g_strchr(const char *text, int c);
|
||||
char* APP_CC g_strcpy(char* dest, const char* src);
|
||||
char* APP_CC g_strncpy(char* dest, const char* src, int len);
|
||||
char* APP_CC g_strcat(char* dest, const char* src);
|
||||
@ -120,6 +134,8 @@ int APP_CC g_strcasecmp(const char* c1, const char* c2);
|
||||
int APP_CC g_strncasecmp(const char* c1, const char* c2, int len);
|
||||
int APP_CC g_atoi(const char* str);
|
||||
int APP_CC g_htoi(char* str);
|
||||
int APP_CC g_bytes_to_hexstr(const void *bytes, int num_bytes, char *out_str,
|
||||
int bytes_out_str);
|
||||
int APP_CC g_pos(const char* str, const char* to_find);
|
||||
int APP_CC g_mbstowcs(twchar* dest, const char* src, int n);
|
||||
int APP_CC g_wcstombs(char* dest, const twchar* src, int n);
|
||||
@ -136,7 +152,6 @@ void APP_CC g_signal_child_stop(void (*func)(int));
|
||||
void APP_CC g_signal_segfault(void (*func)(int));
|
||||
void APP_CC g_signal_hang_up(void (*func)(int));
|
||||
void APP_CC g_signal_user_interrupt(void (*func)(int));
|
||||
void APP_CC g_signal_kill(void (*func)(int));
|
||||
void APP_CC g_signal_terminate(void (*func)(int));
|
||||
void APP_CC g_signal_pipe(void (*func)(int));
|
||||
void APP_CC g_signal_usr1(void (*func)(int));
|
||||
@ -146,6 +161,8 @@ int APP_CC g_initgroups(const char* user, int gid);
|
||||
int APP_CC g_getuid(void);
|
||||
int APP_CC g_getgid(void);
|
||||
int APP_CC g_setuid(int pid);
|
||||
int APP_CC g_setsid(void);
|
||||
int APP_CC g_setlogin(const char *name);
|
||||
int APP_CC g_waitchild(void);
|
||||
int APP_CC g_waitpid(int pid);
|
||||
void APP_CC g_clearenv(void);
|
||||
@ -154,8 +171,8 @@ char* APP_CC g_getenv(const char* name);
|
||||
int APP_CC g_exit(int exit_code);
|
||||
int APP_CC g_getpid(void);
|
||||
int APP_CC g_sigterm(int pid);
|
||||
int APP_CC g_getuser_info(const char* username, int* gid, int* uid, char* shell,
|
||||
char* dir, char* gecos);
|
||||
int APP_CC g_getuser_info(const char* username, int* gid, int* uid, char** shell,
|
||||
char** dir, char** gecos);
|
||||
int APP_CC g_getgroup_info(const char* groupname, int* gid);
|
||||
int APP_CC g_check_user_in_group(const char* username, int gid, int* ok);
|
||||
int APP_CC g_time1(void);
|
||||
@ -167,5 +184,12 @@ int APP_CC g_text2bool(const char *s);
|
||||
void * APP_CC g_shmat(int shmid);
|
||||
int APP_CC g_shmdt(const void *shmaddr);
|
||||
int APP_CC g_gethostname(char *name, int len);
|
||||
int APP_CC g_mirror_memcpy(void *dst, const void *src, int len);
|
||||
|
||||
/* glib-style wrappers */
|
||||
#define g_new(struct_type, n_structs) \
|
||||
(struct_type *) malloc(sizeof(struct_type) * (n_structs))
|
||||
#define g_new0(struct_type, n_structs) \
|
||||
(struct_type *) calloc((n_structs), sizeof(struct_type))
|
||||
|
||||
#endif
|
||||
|
@ -40,13 +40,17 @@ struct stream
|
||||
char *end;
|
||||
char *data;
|
||||
int size;
|
||||
int pad0;
|
||||
/* offsets of various headers */
|
||||
char *iso_hdr;
|
||||
char *mcs_hdr;
|
||||
char *sec_hdr;
|
||||
char *rdp_hdr;
|
||||
char *channel_hdr;
|
||||
/* other */
|
||||
char *next_packet;
|
||||
struct stream *next;
|
||||
int *source;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
2549
common/pixman-region.c
Normal file
2549
common/pixman-region.c
Normal file
File diff suppressed because it is too large
Load Diff
76
common/pixman-region.h
Normal file
76
common/pixman-region.h
Normal file
@ -0,0 +1,76 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2016
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* region, from pixman.h
|
||||
*/
|
||||
|
||||
#if !defined(PIXMAN_PIXMAN_H__)
|
||||
#define PIXMAN_PIXMAN_H__
|
||||
|
||||
typedef int pixman_bool_t;
|
||||
|
||||
struct pixman_region16_data
|
||||
{
|
||||
long size;
|
||||
long numRects;
|
||||
};
|
||||
|
||||
struct pixman_box16
|
||||
{
|
||||
signed short x1, y1, x2, y2;
|
||||
};
|
||||
|
||||
struct pixman_region16
|
||||
{
|
||||
struct pixman_box16 extents;
|
||||
struct pixman_region16_data *data;
|
||||
};
|
||||
|
||||
enum _pixman_region_overlap_t
|
||||
{
|
||||
PIXMAN_REGION_OUT,
|
||||
PIXMAN_REGION_IN,
|
||||
PIXMAN_REGION_PART
|
||||
};
|
||||
|
||||
typedef enum _pixman_region_overlap_t pixman_region_overlap_t;
|
||||
|
||||
typedef struct pixman_region16_data pixman_region16_data_t;
|
||||
typedef struct pixman_box16 pixman_box16_t;
|
||||
typedef struct pixman_region16 pixman_region16_t;
|
||||
|
||||
/* creation/destruction */
|
||||
void pixman_region_init (pixman_region16_t *region);
|
||||
void pixman_region_init_rect (pixman_region16_t *region,
|
||||
int x,
|
||||
int y,
|
||||
unsigned int width,
|
||||
unsigned int height);
|
||||
void pixman_region_fini (pixman_region16_t *region);
|
||||
pixman_bool_t pixman_region_union (pixman_region16_t *new_reg,
|
||||
pixman_region16_t *reg1,
|
||||
pixman_region16_t *reg2);
|
||||
pixman_bool_t pixman_region_subtract (pixman_region16_t *reg_d,
|
||||
pixman_region16_t *reg_m,
|
||||
pixman_region16_t *reg_s);
|
||||
pixman_bool_t pixman_region_intersect (pixman_region16_t *new_reg,
|
||||
pixman_region16_t *reg1,
|
||||
pixman_region16_t *reg2);
|
||||
pixman_box16_t * pixman_region_rectangles (pixman_region16_t *region,
|
||||
int *n_rects);
|
||||
|
||||
#endif
|
77
common/pixman-region16.c
Normal file
77
common/pixman-region16.c
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright © 2008 Red Hat, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software
|
||||
* and its documentation for any purpose is hereby granted without
|
||||
* fee, provided that the above copyright notice appear in all copies
|
||||
* and that both that copyright notice and this permission notice
|
||||
* appear in supporting documentation, and that the name of
|
||||
* Red Hat, Inc. not be used in advertising or publicity pertaining to
|
||||
* distribution of the software without specific, written prior
|
||||
* permission. Red Hat, Inc. makes no representations about the
|
||||
* suitability of this software for any purpose. It is provided "as
|
||||
* is" without express or implied warranty.
|
||||
*
|
||||
* RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
|
||||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
|
||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
|
||||
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
||||
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* Author: Soren Sandmann <sandmann@redhat.com>
|
||||
*/
|
||||
|
||||
/* taken from pixman 0.34
|
||||
altered to compile without all of pixman */
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include "config_ac.h"
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#if defined(HAVE_STDINT_H)
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#include "pixman-region.h"
|
||||
|
||||
#if !defined(UINT32_MAX)
|
||||
#define UINT32_MAX (4294967295U)
|
||||
#endif
|
||||
#if !defined(INT16_MIN)
|
||||
#define INT16_MIN (-32767-1)
|
||||
#endif
|
||||
#if !defined(INT16_MAX)
|
||||
#define INT16_MAX (32767)
|
||||
#endif
|
||||
|
||||
#define PIXMAN_EXPORT
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
#define MIN(x1, x2) ((x1) < (x2) ? (x1) : (x2))
|
||||
#define MAX(x1, x2) ((x1) > (x2) ? (x1) : (x2))
|
||||
|
||||
typedef pixman_box16_t box_type_t;
|
||||
typedef pixman_region16_data_t region_data_type_t;
|
||||
typedef pixman_region16_t region_type_t;
|
||||
typedef signed int overflow_int_t;
|
||||
|
||||
#define PREFIX(x) pixman_region##x
|
||||
|
||||
#define PIXMAN_REGION_MAX INT16_MAX
|
||||
#define PIXMAN_REGION_MIN INT16_MIN
|
||||
|
||||
#define FUNC "func"
|
||||
|
||||
#define critical_if_fail(expr)
|
||||
|
||||
int _pixman_log_error(const char *func, const char *format, ...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "pixman-region.c"
|
||||
|
@ -40,6 +40,32 @@
|
||||
#define OLD_RSA_GEN1
|
||||
#endif
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
static inline HMAC_CTX *
|
||||
HMAC_CTX_new()
|
||||
{
|
||||
HMAC_CTX *hmac_ctx = g_new(HMAC_CTX, 1);
|
||||
HMAC_CTX_init(hmac_ctx);
|
||||
return hmac_ctx;
|
||||
}
|
||||
|
||||
static inline void
|
||||
HMAC_CTX_free(HMAC_CTX *hmac_ctx)
|
||||
{
|
||||
HMAC_CTX_cleanup(hmac_ctx);
|
||||
g_free(hmac_ctx);
|
||||
}
|
||||
|
||||
static inline void
|
||||
RSA_get0_key(const RSA *key, const BIGNUM **n, const BIGNUM **e,
|
||||
const BIGNUM **d)
|
||||
{
|
||||
*n = key->n;
|
||||
*d = key->d;
|
||||
}
|
||||
#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
ssl_init(void)
|
||||
@ -111,7 +137,7 @@ ssl_sha1_clear(void *sha1_info)
|
||||
|
||||
/*****************************************************************************/
|
||||
void APP_CC
|
||||
ssl_sha1_transform(void *sha1_info, char *data, int len)
|
||||
ssl_sha1_transform(void *sha1_info, const char *data, int len)
|
||||
{
|
||||
SHA1_Update((SHA_CTX *)sha1_info, data, len);
|
||||
}
|
||||
@ -170,8 +196,7 @@ ssl_des3_encrypt_info_create(const char *key, const char* ivec)
|
||||
const tui8 *lkey;
|
||||
const tui8 *livec;
|
||||
|
||||
des3_ctx = (EVP_CIPHER_CTX *) g_malloc(sizeof(EVP_CIPHER_CTX), 1);
|
||||
EVP_CIPHER_CTX_init(des3_ctx);
|
||||
des3_ctx = EVP_CIPHER_CTX_new();
|
||||
lkey = (const tui8 *) key;
|
||||
livec = (const tui8 *) ivec;
|
||||
EVP_EncryptInit_ex(des3_ctx, EVP_des_ede3_cbc(), NULL, lkey, livec);
|
||||
@ -187,8 +212,7 @@ ssl_des3_decrypt_info_create(const char *key, const char* ivec)
|
||||
const tui8 *lkey;
|
||||
const tui8 *livec;
|
||||
|
||||
des3_ctx = g_malloc(sizeof(EVP_CIPHER_CTX), 1);
|
||||
EVP_CIPHER_CTX_init(des3_ctx);
|
||||
des3_ctx = EVP_CIPHER_CTX_new();
|
||||
lkey = (const tui8 *) key;
|
||||
livec = (const tui8 *) ivec;
|
||||
EVP_DecryptInit_ex(des3_ctx, EVP_des_ede3_cbc(), NULL, lkey, livec);
|
||||
@ -205,8 +229,7 @@ ssl_des3_info_delete(void *des3)
|
||||
des3_ctx = (EVP_CIPHER_CTX *) des3;
|
||||
if (des3_ctx != 0)
|
||||
{
|
||||
EVP_CIPHER_CTX_cleanup(des3_ctx);
|
||||
g_free(des3_ctx);
|
||||
EVP_CIPHER_CTX_free(des3_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@ -250,8 +273,7 @@ ssl_hmac_info_create(void)
|
||||
{
|
||||
HMAC_CTX *hmac_ctx;
|
||||
|
||||
hmac_ctx = (HMAC_CTX *) g_malloc(sizeof(HMAC_CTX), 1);
|
||||
HMAC_CTX_init(hmac_ctx);
|
||||
hmac_ctx = HMAC_CTX_new();
|
||||
return hmac_ctx;
|
||||
}
|
||||
|
||||
@ -264,8 +286,7 @@ ssl_hmac_info_delete(void *hmac)
|
||||
hmac_ctx = (HMAC_CTX *) hmac;
|
||||
if (hmac_ctx != 0)
|
||||
{
|
||||
HMAC_CTX_cleanup(hmac_ctx);
|
||||
g_free(hmac_ctx);
|
||||
HMAC_CTX_free(hmac_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@ -332,10 +353,10 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
|
||||
char *mod, int mod_len, char *exp, int exp_len)
|
||||
{
|
||||
BN_CTX *ctx;
|
||||
BIGNUM lmod;
|
||||
BIGNUM lexp;
|
||||
BIGNUM lin;
|
||||
BIGNUM lout;
|
||||
BIGNUM *lmod;
|
||||
BIGNUM *lexp;
|
||||
BIGNUM *lin;
|
||||
BIGNUM *lout;
|
||||
int rv;
|
||||
char *l_out;
|
||||
char *l_in;
|
||||
@ -353,15 +374,15 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
|
||||
ssl_reverse_it(l_mod, mod_len);
|
||||
ssl_reverse_it(l_exp, exp_len);
|
||||
ctx = BN_CTX_new();
|
||||
BN_init(&lmod);
|
||||
BN_init(&lexp);
|
||||
BN_init(&lin);
|
||||
BN_init(&lout);
|
||||
BN_bin2bn((tui8 *)l_mod, mod_len, &lmod);
|
||||
BN_bin2bn((tui8 *)l_exp, exp_len, &lexp);
|
||||
BN_bin2bn((tui8 *)l_in, in_len, &lin);
|
||||
BN_mod_exp(&lout, &lin, &lexp, &lmod, ctx);
|
||||
rv = BN_bn2bin(&lout, (tui8 *)l_out);
|
||||
lmod = BN_new();
|
||||
lexp = BN_new();
|
||||
lin = BN_new();
|
||||
lout = BN_new();
|
||||
BN_bin2bn((tui8 *)l_mod, mod_len, lmod);
|
||||
BN_bin2bn((tui8 *)l_exp, exp_len, lexp);
|
||||
BN_bin2bn((tui8 *)l_in, in_len, lin);
|
||||
BN_mod_exp(lout, lin, lexp, lmod, ctx);
|
||||
rv = BN_bn2bin(lout, (tui8 *)l_out);
|
||||
|
||||
if (rv <= out_len)
|
||||
{
|
||||
@ -373,10 +394,10 @@ ssl_mod_exp(char *out, int out_len, char *in, int in_len,
|
||||
rv = 0;
|
||||
}
|
||||
|
||||
BN_free(&lin);
|
||||
BN_free(&lout);
|
||||
BN_free(&lexp);
|
||||
BN_free(&lmod);
|
||||
BN_free(lin);
|
||||
BN_free(lout);
|
||||
BN_free(lexp);
|
||||
BN_free(lmod);
|
||||
BN_CTX_free(ctx);
|
||||
g_free(l_out);
|
||||
g_free(l_in);
|
||||
@ -401,6 +422,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
tui8 *lexp;
|
||||
int error;
|
||||
int len;
|
||||
int diff;
|
||||
|
||||
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
|
||||
((pri_len != 64) && (pri_len != 256)))
|
||||
@ -408,8 +430,9 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
return 1;
|
||||
}
|
||||
|
||||
lmod = (char *)g_malloc(mod_len, 0);
|
||||
lpri = (char *)g_malloc(pri_len, 0);
|
||||
diff = 0;
|
||||
lmod = (char *)g_malloc(mod_len, 1);
|
||||
lpri = (char *)g_malloc(pri_len, 1);
|
||||
lexp = (tui8 *)exp;
|
||||
my_e = lexp[0];
|
||||
my_e |= lexp[1] << 8;
|
||||
@ -423,24 +446,26 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
if (error == 0)
|
||||
{
|
||||
len = BN_num_bytes(my_key->n);
|
||||
error = len != mod_len;
|
||||
error = (len < 1) || (len > mod_len);
|
||||
diff = mod_len - len;
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
BN_bn2bin(my_key->n, (tui8 *)lmod);
|
||||
BN_bn2bin(my_key->n, (tui8 *)(lmod + diff));
|
||||
ssl_reverse_it(lmod, mod_len);
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
len = BN_num_bytes(my_key->d);
|
||||
error = len != pri_len;
|
||||
error = (len < 1) || (len > pri_len);
|
||||
diff = pri_len - len;
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
BN_bn2bin(my_key->d, (tui8 *)lpri);
|
||||
BN_bn2bin(my_key->d, (tui8 *)(lpri + diff));
|
||||
ssl_reverse_it(lpri, pri_len);
|
||||
}
|
||||
|
||||
@ -471,6 +496,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
char *lpri;
|
||||
int error;
|
||||
int len;
|
||||
int diff;
|
||||
|
||||
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
|
||||
((pri_len != 64) && (pri_len != 256)))
|
||||
@ -478,9 +504,10 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
return 1;
|
||||
}
|
||||
|
||||
lexp = (char *)g_malloc(exp_len, 0);
|
||||
lmod = (char *)g_malloc(mod_len, 0);
|
||||
lpri = (char *)g_malloc(pri_len, 0);
|
||||
diff = 0;
|
||||
lexp = (char *)g_malloc(exp_len, 1);
|
||||
lmod = (char *)g_malloc(mod_len, 1);
|
||||
lpri = (char *)g_malloc(pri_len, 1);
|
||||
g_memcpy(lexp, exp, exp_len);
|
||||
ssl_reverse_it(lexp, exp_len);
|
||||
my_e = BN_new();
|
||||
@ -488,27 +515,33 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
|
||||
my_key = RSA_new();
|
||||
error = RSA_generate_key_ex(my_key, key_size_in_bits, my_e, 0) == 0;
|
||||
|
||||
const BIGNUM *n;
|
||||
const BIGNUM *d;
|
||||
RSA_get0_key(my_key, &n, NULL, &d);
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
len = BN_num_bytes(my_key->n);
|
||||
error = len != mod_len;
|
||||
len = BN_num_bytes(n);
|
||||
error = (len < 1) || (len > mod_len);
|
||||
diff = mod_len - len;
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
BN_bn2bin(my_key->n, (tui8 *)lmod);
|
||||
BN_bn2bin(n, (tui8 *)(lmod + diff));
|
||||
ssl_reverse_it(lmod, mod_len);
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
len = BN_num_bytes(my_key->d);
|
||||
error = len != pri_len;
|
||||
len = BN_num_bytes(d);
|
||||
error = (len < 1) || (len > pri_len);
|
||||
diff = pri_len - len;
|
||||
}
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
BN_bn2bin(my_key->d, (tui8 *)lpri);
|
||||
BN_bn2bin(d, (tui8 *)(lpri + diff));
|
||||
ssl_reverse_it(lpri, pri_len);
|
||||
}
|
||||
|
||||
@ -552,7 +585,7 @@ ssl_tls_create(struct trans *trans, const char *key, const char *cert)
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
ssl_tls_print_error(char *func, SSL *connection, int value)
|
||||
ssl_tls_print_error(const char *func, SSL *connection, int value)
|
||||
{
|
||||
switch (SSL_get_error(connection, value))
|
||||
{
|
||||
@ -562,11 +595,7 @@ ssl_tls_print_error(char *func, SSL *connection, int value)
|
||||
return 1;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
g_writeln("ssl_tls_print_error: SSL_ERROR_WANT_READ");
|
||||
return 0;
|
||||
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
g_writeln("ssl_tls_print_error: SSL_ERROR_WANT_WRITE");
|
||||
return 0;
|
||||
|
||||
case SSL_ERROR_SYSCALL:
|
||||
@ -586,18 +615,22 @@ ssl_tls_print_error(char *func, SSL *connection, int value)
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
ssl_tls_accept(struct ssl_tls *self)
|
||||
ssl_tls_accept(struct ssl_tls *self, int disableSSLv3,
|
||||
const char *tls_ciphers)
|
||||
{
|
||||
int connection_status;
|
||||
long options = 0;
|
||||
|
||||
/**
|
||||
* SSL_OP_NO_SSLv2:
|
||||
*
|
||||
* We only want SSLv3 and TLSv1, so disable SSLv2.
|
||||
* SSL_OP_NO_SSLv2
|
||||
* SSLv3 is used by, eg. Microsoft RDC for Mac OS X.
|
||||
* No SSLv3 if disableSSLv3=yes so only tls used
|
||||
*/
|
||||
options |= SSL_OP_NO_SSLv2;
|
||||
if (disableSSLv3)
|
||||
{
|
||||
options |= SSL_OP_NO_SSLv3;
|
||||
}
|
||||
|
||||
#if defined(SSL_OP_NO_COMPRESSION)
|
||||
/**
|
||||
@ -634,6 +667,16 @@ ssl_tls_accept(struct ssl_tls *self)
|
||||
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER |
|
||||
SSL_MODE_ENABLE_PARTIAL_WRITE);
|
||||
SSL_CTX_set_options(self->ctx, options);
|
||||
|
||||
if (g_strlen(tls_ciphers) > 1)
|
||||
{
|
||||
if (SSL_CTX_set_cipher_list(self->ctx, tls_ciphers) == 0)
|
||||
{
|
||||
g_writeln("ssl_tls_accept: invalid cipher options");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
SSL_CTX_set_read_ahead(self->ctx, 1);
|
||||
|
||||
if (self->ctx == NULL)
|
||||
@ -669,13 +712,24 @@ ssl_tls_accept(struct ssl_tls *self)
|
||||
return 1;
|
||||
}
|
||||
|
||||
connection_status = SSL_accept(self->ssl);
|
||||
while(1) {
|
||||
connection_status = SSL_accept(self->ssl);
|
||||
|
||||
if (connection_status <= 0)
|
||||
{
|
||||
if (ssl_tls_print_error("SSL_accept", self->ssl, connection_status))
|
||||
if (connection_status <= 0)
|
||||
{
|
||||
return 1;
|
||||
if (ssl_tls_print_error("SSL_accept", self->ssl, connection_status))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
/**
|
||||
* retry when SSL_get_error returns:
|
||||
* SSL_ERROR_WANT_READ
|
||||
* SSL_ERROR_WANT_WRITE
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -709,6 +763,11 @@ ssl_tls_disconnect(struct ssl_tls *self)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
/**
|
||||
* retry when SSL_get_error returns:
|
||||
* SSL_ERROR_WANT_READ
|
||||
* SSL_ERROR_WANT_WRITE
|
||||
*/
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -737,23 +796,37 @@ int APP_CC
|
||||
ssl_tls_read(struct ssl_tls *tls, char *data, int length)
|
||||
{
|
||||
int status;
|
||||
int break_flag;
|
||||
|
||||
status = SSL_read(tls->ssl, data, length);
|
||||
while(1) {
|
||||
status = SSL_read(tls->ssl, data, length);
|
||||
|
||||
switch (SSL_get_error(tls->ssl, status))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
break;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
status = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
ssl_tls_print_error("SSL_read", tls->ssl, status);
|
||||
status = -1;
|
||||
switch (SSL_get_error(tls->ssl, status))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
break_flag = 1;
|
||||
break;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
/**
|
||||
* retry when SSL_get_error returns:
|
||||
* SSL_ERROR_WANT_READ
|
||||
* SSL_ERROR_WANT_WRITE
|
||||
*/
|
||||
continue;
|
||||
|
||||
default:
|
||||
ssl_tls_print_error("SSL_read", tls->ssl, status);
|
||||
status = -1;
|
||||
break_flag = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (break_flag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (SSL_pending(tls->ssl) > 0)
|
||||
@ -769,23 +842,37 @@ int APP_CC
|
||||
ssl_tls_write(struct ssl_tls *tls, const char *data, int length)
|
||||
{
|
||||
int status;
|
||||
int break_flag;
|
||||
|
||||
status = SSL_write(tls->ssl, data, length);
|
||||
while(1) {
|
||||
status = SSL_write(tls->ssl, data, length);
|
||||
|
||||
switch (SSL_get_error(tls->ssl, status))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
break;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
status = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
ssl_tls_print_error("SSL_write", tls->ssl, status);
|
||||
status = -1;
|
||||
switch (SSL_get_error(tls->ssl, status))
|
||||
{
|
||||
case SSL_ERROR_NONE:
|
||||
break_flag = 1;
|
||||
break;
|
||||
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
/**
|
||||
* retry when SSL_get_error returns:
|
||||
* SSL_ERROR_WANT_READ
|
||||
* SSL_ERROR_WANT_WRITE
|
||||
*/
|
||||
continue;
|
||||
|
||||
default:
|
||||
ssl_tls_print_error("SSL_write", tls->ssl, status);
|
||||
status = -1;
|
||||
break_flag = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (break_flag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
@ -801,6 +888,6 @@ ssl_tls_can_recv(struct ssl_tls *tls, int sck, int millis)
|
||||
return 1;
|
||||
}
|
||||
g_reset_wait_obj(tls->rwo);
|
||||
return g_tcp_can_recv(sck, millis);
|
||||
return g_sck_can_recv(sck, millis);
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ ssl_sha1_info_delete(void* sha1_info);
|
||||
void APP_CC
|
||||
ssl_sha1_clear(void* sha1_info);
|
||||
void APP_CC
|
||||
ssl_sha1_transform(void* sha1_info, char* data, int len);
|
||||
ssl_sha1_transform(void* sha1_info, const char *data, int len);
|
||||
void APP_CC
|
||||
ssl_sha1_complete(void* sha1_info, char* data);
|
||||
void* APP_CC
|
||||
@ -84,8 +84,8 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char* exp, int exp_len,
|
||||
/* ssl_tls */
|
||||
struct ssl_tls
|
||||
{
|
||||
void *ssl; /* SSL * */
|
||||
void *ctx; /* SSL_CTX * */
|
||||
struct ssl_st *ssl; /* SSL * */
|
||||
struct ssl_ctx_st *ctx; /* SSL_CTX * */
|
||||
char *cert;
|
||||
char *key;
|
||||
struct trans *trans;
|
||||
@ -96,7 +96,8 @@ struct ssl_tls
|
||||
struct ssl_tls *APP_CC
|
||||
ssl_tls_create(struct trans *trans, const char *key, const char *cert);
|
||||
int APP_CC
|
||||
ssl_tls_accept(struct ssl_tls *self);
|
||||
ssl_tls_accept(struct ssl_tls *self, int disableSSLv3,
|
||||
const char *tls_ciphers);
|
||||
int APP_CC
|
||||
ssl_tls_disconnect(struct ssl_tls *self);
|
||||
void APP_CC
|
||||
|
@ -20,6 +20,10 @@
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <pthread.h>
|
||||
#include <dispatch/dispatch.h>
|
||||
#include <dispatch/time.h>
|
||||
#else
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
@ -159,6 +163,9 @@ tc_sem_create(int init_count)
|
||||
|
||||
sem = CreateSemaphore(0, init_count, init_count + 10, 0);
|
||||
return (tbus)sem;
|
||||
#elif defined(__APPLE__)
|
||||
dispatch_semaphore_t sem = dispatch_semaphore_create(init_count);
|
||||
return (tbus)sem;
|
||||
#else
|
||||
sem_t *sem = (sem_t *)NULL;
|
||||
|
||||
@ -174,6 +181,8 @@ tc_sem_delete(tbus sem)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
CloseHandle((HANDLE)sem);
|
||||
#elif defined(__APPLE__)
|
||||
dispatch_release((dispatch_semaphore_t)sem);
|
||||
#else
|
||||
sem_t *lsem;
|
||||
|
||||
@ -190,6 +199,9 @@ tc_sem_dec(tbus sem)
|
||||
#if defined(_WIN32)
|
||||
WaitForSingleObject((HANDLE)sem, INFINITE);
|
||||
return 0;
|
||||
#elif defined(__APPLE__)
|
||||
dispatch_semaphore_wait((dispatch_semaphore_t)sem, DISPATCH_TIME_FOREVER);
|
||||
return 0;
|
||||
#else
|
||||
sem_wait((sem_t *)sem);
|
||||
return 0;
|
||||
@ -203,6 +215,9 @@ tc_sem_inc(tbus sem)
|
||||
#if defined(_WIN32)
|
||||
ReleaseSemaphore((HANDLE)sem, 1, 0);
|
||||
return 0;
|
||||
#elif defined(__APPLE__)
|
||||
dispatch_semaphore_signal((dispatch_semaphore_t)sem);
|
||||
return 0;
|
||||
#else
|
||||
sem_post((sem_t *)sem);
|
||||
return 0;
|
||||
|
257
common/trans.c
257
common/trans.c
@ -24,9 +24,11 @@
|
||||
#include "parse.h"
|
||||
#include "ssl_calls.h"
|
||||
|
||||
#define MAX_SBYTES 0
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_tls_recv(struct trans *self, void *ptr, int len)
|
||||
trans_tls_recv(struct trans *self, char *ptr, int len)
|
||||
{
|
||||
if (self->tls == NULL)
|
||||
{
|
||||
@ -37,7 +39,7 @@ trans_tls_recv(struct trans *self, void *ptr, int len)
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_tls_send(struct trans *self, const void *data, int len)
|
||||
trans_tls_send(struct trans *self, const char *data, int len)
|
||||
{
|
||||
if (self->tls == NULL)
|
||||
{
|
||||
@ -59,14 +61,14 @@ trans_tls_can_recv(struct trans *self, int sck, int millis)
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_tcp_recv(struct trans *self, void *ptr, int len)
|
||||
trans_tcp_recv(struct trans *self, char *ptr, int len)
|
||||
{
|
||||
return g_tcp_recv(self->sck, ptr, len, 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_tcp_send(struct trans *self, const void *data, int len)
|
||||
trans_tcp_send(struct trans *self, const char *data, int len)
|
||||
{
|
||||
return g_tcp_send(self->sck, data, len, 0);
|
||||
}
|
||||
@ -75,7 +77,7 @@ trans_tcp_send(struct trans *self, const void *data, int len)
|
||||
int APP_CC
|
||||
trans_tcp_can_recv(struct trans *self, int sck, int millis)
|
||||
{
|
||||
return g_tcp_can_recv(sck, millis);
|
||||
return g_sck_can_recv(sck, millis);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -169,13 +171,29 @@ trans_get_wait_objs(struct trans *self, tbus *objs, int *count)
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_get_wait_objs_rw(struct trans *self, tbus *robjs, int *rcount,
|
||||
tbus *wobjs, int *wcount)
|
||||
tbus *wobjs, int *wcount, int *timeout)
|
||||
{
|
||||
if (trans_get_wait_objs(self, robjs, rcount) != 0)
|
||||
if (self == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (self->status != TRANS_STATUS_UP)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((self->si != 0) && (self->si->source[self->my_source] > MAX_SBYTES))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if (trans_get_wait_objs(self, robjs, rcount) != 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->wait_s != 0)
|
||||
{
|
||||
wobjs[*wcount] = self->sck;
|
||||
@ -187,7 +205,7 @@ trans_get_wait_objs_rw(struct trans *self, tbus *robjs, int *rcount,
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
send_waiting(struct trans *self, int block)
|
||||
trans_send_waiting(struct trans *self, int block)
|
||||
{
|
||||
struct stream *temp_s;
|
||||
int bytes;
|
||||
@ -209,9 +227,13 @@ send_waiting(struct trans *self, int block)
|
||||
if (sent > 0)
|
||||
{
|
||||
temp_s->p += sent;
|
||||
if (temp_s->source != 0)
|
||||
{
|
||||
temp_s->source[0] -= sent;
|
||||
}
|
||||
if (temp_s->p >= temp_s->end)
|
||||
{
|
||||
self->wait_s = (struct stream *) (temp_s->next_packet);
|
||||
self->wait_s = temp_s->next;
|
||||
free_stream(temp_s);
|
||||
}
|
||||
}
|
||||
@ -227,6 +249,18 @@ send_waiting(struct trans *self, int block)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (block)
|
||||
{
|
||||
/* check for term here */
|
||||
if (self->is_term != 0)
|
||||
{
|
||||
if (self->is_term())
|
||||
{
|
||||
/* term */
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -247,6 +281,7 @@ trans_check_wait_objs(struct trans *self)
|
||||
int to_read = 0;
|
||||
int read_so_far = 0;
|
||||
int rv = 0;
|
||||
int cur_source;
|
||||
|
||||
if (self == 0)
|
||||
{
|
||||
@ -262,7 +297,7 @@ trans_check_wait_objs(struct trans *self)
|
||||
|
||||
if (self->type1 == TRANS_TYPE_LISTENER) /* listening */
|
||||
{
|
||||
if (g_tcp_can_recv(self->sck, 0))
|
||||
if (g_sck_can_recv(self->sck, 0))
|
||||
{
|
||||
in_sck = g_sck_accept(self->sck, self->addr, sizeof(self->addr),
|
||||
self->port, sizeof(self->port));
|
||||
@ -295,7 +330,7 @@ trans_check_wait_objs(struct trans *self)
|
||||
sizeof(self->addr) - 1);
|
||||
g_strncpy(in_trans->port, self->port,
|
||||
sizeof(self->port) - 1);
|
||||
|
||||
g_sck_set_non_blocking(in_sck);
|
||||
if (self->trans_conn_in(self, in_trans) != 0)
|
||||
{
|
||||
trans_delete(in_trans);
|
||||
@ -310,8 +345,17 @@ trans_check_wait_objs(struct trans *self)
|
||||
}
|
||||
else /* connected server or client (2 or 3) */
|
||||
{
|
||||
if (self->trans_can_recv(self, self->sck, 0))
|
||||
if (self->si != 0 && self->si->source[self->my_source] > MAX_SBYTES)
|
||||
{
|
||||
}
|
||||
else if (self->trans_can_recv(self, self->sck, 0))
|
||||
{
|
||||
cur_source = 0;
|
||||
if (self->si != 0)
|
||||
{
|
||||
cur_source = self->si->cur_source;
|
||||
self->si->cur_source = self->my_source;
|
||||
}
|
||||
read_so_far = (int) (self->in_s->end - self->in_s->data);
|
||||
to_read = self->header_size - read_so_far;
|
||||
|
||||
@ -329,6 +373,10 @@ trans_check_wait_objs(struct trans *self)
|
||||
{
|
||||
/* error */
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
if (self->si != 0)
|
||||
{
|
||||
self->si->cur_source = cur_source;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@ -336,6 +384,10 @@ trans_check_wait_objs(struct trans *self)
|
||||
{
|
||||
/* error */
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
if (self->si != 0)
|
||||
{
|
||||
self->si->cur_source = cur_source;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@ -357,8 +409,12 @@ trans_check_wait_objs(struct trans *self)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (self->si != 0)
|
||||
{
|
||||
self->si->cur_source = cur_source;
|
||||
}
|
||||
}
|
||||
if (send_waiting(self, 0) != 0)
|
||||
if (trans_send_waiting(self, 0) != 0)
|
||||
{
|
||||
/* error */
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
@ -368,6 +424,7 @@ trans_check_wait_objs(struct trans *self)
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_force_read_s(struct trans *self, struct stream *in_s, int size)
|
||||
@ -378,7 +435,6 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (size > 0)
|
||||
{
|
||||
/* make sure stream has room */
|
||||
@ -386,14 +442,12 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
rcvd = self->trans_recv(self, in_s->end, size);
|
||||
|
||||
if (rcvd == -1)
|
||||
{
|
||||
if (g_tcp_last_error_would_block(self->sck))
|
||||
{
|
||||
if (!g_tcp_can_recv(self->sck, 100))
|
||||
if (!self->trans_can_recv(self, self->sck, 100))
|
||||
{
|
||||
/* check for term here */
|
||||
if (self->is_term != 0)
|
||||
@ -426,7 +480,6 @@ trans_force_read_s(struct trans *self, struct stream *in_s, int size)
|
||||
size -= rcvd;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -449,20 +502,16 @@ trans_force_write_s(struct trans *self, struct stream *out_s)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
size = (int) (out_s->end - out_s->data);
|
||||
total = 0;
|
||||
|
||||
if (send_waiting(self, 1) != 0)
|
||||
if (trans_send_waiting(self, 1) != 0)
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
|
||||
while (total < size)
|
||||
{
|
||||
sent = self->trans_send(self, out_s->data + total, size - total);
|
||||
|
||||
if (sent == -1)
|
||||
{
|
||||
if (g_tcp_last_error_would_block(self->sck))
|
||||
@ -499,7 +548,6 @@ trans_force_write_s(struct trans *self, struct stream *out_s)
|
||||
total = total + sent;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -512,23 +560,69 @@ trans_force_write(struct trans *self)
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_write_copy(struct trans *self)
|
||||
trans_write_copy_s(struct trans *self, struct stream *out_s)
|
||||
{
|
||||
int size;
|
||||
struct stream *out_s;
|
||||
int sent;
|
||||
struct stream *wait_s;
|
||||
struct stream *temp_s;
|
||||
char *out_data;
|
||||
|
||||
if (self->status != TRANS_STATUS_UP)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
out_s = self->out_s;
|
||||
/* try to send any left over */
|
||||
if (trans_send_waiting(self, 0) != 0)
|
||||
{
|
||||
/* error */
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
out_data = out_s->data;
|
||||
sent = 0;
|
||||
size = (int) (out_s->end - out_s->data);
|
||||
if (self->wait_s == 0)
|
||||
{
|
||||
/* if no left over, try to send this new data */
|
||||
if (g_tcp_can_send(self->sck, 0))
|
||||
{
|
||||
sent = self->trans_send(self, out_s->data, size);
|
||||
if (sent > 0)
|
||||
{
|
||||
out_data += sent;
|
||||
size -= sent;
|
||||
}
|
||||
else if (sent == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!g_tcp_last_error_would_block(self->sck))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (size < 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/* did not send right away, have to copy */
|
||||
make_stream(wait_s);
|
||||
init_stream(wait_s, size);
|
||||
out_uint8a(wait_s, out_s->data, size);
|
||||
if (self->si != 0)
|
||||
{
|
||||
if ((self->si->cur_source != 0) &&
|
||||
(self->si->cur_source != self->my_source))
|
||||
{
|
||||
self->si->source[self->si->cur_source] += size;
|
||||
wait_s->source = self->si->source + self->si->cur_source;
|
||||
}
|
||||
}
|
||||
out_uint8a(wait_s, out_data, size);
|
||||
s_mark_end(wait_s);
|
||||
wait_s->p = wait_s->data;
|
||||
if (self->wait_s == 0)
|
||||
@ -538,53 +632,110 @@ trans_write_copy(struct trans *self)
|
||||
else
|
||||
{
|
||||
temp_s = self->wait_s;
|
||||
while (temp_s->next_packet != 0)
|
||||
while (temp_s->next != 0)
|
||||
{
|
||||
temp_s = (struct stream *) (temp_s->next_packet);
|
||||
temp_s = temp_s->next;
|
||||
}
|
||||
temp_s->next_packet = (char *) wait_s;
|
||||
temp_s->next = wait_s;
|
||||
}
|
||||
|
||||
/* try to send */
|
||||
if (send_waiting(self, 0) != 0)
|
||||
{
|
||||
/* error */
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_write_copy(struct trans* self)
|
||||
{
|
||||
return trans_write_copy_s(self, self->out_s);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int APP_CC
|
||||
trans_connect(struct trans *self, const char *server, const char *port,
|
||||
int timeout)
|
||||
{
|
||||
int error;
|
||||
int now;
|
||||
int start_time;
|
||||
|
||||
start_time = g_time3();
|
||||
|
||||
if (self->sck != 0)
|
||||
{
|
||||
g_tcp_close(self->sck);
|
||||
self->sck = 0;
|
||||
}
|
||||
|
||||
if (self->mode == TRANS_MODE_TCP) /* tcp */
|
||||
{
|
||||
self->sck = g_tcp_socket();
|
||||
if (self->sck < 0)
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
|
||||
}
|
||||
g_tcp_set_non_blocking(self->sck);
|
||||
error = g_tcp_connect(self->sck, server, port);
|
||||
while (1)
|
||||
{
|
||||
error = g_tcp_connect(self->sck, server, port);
|
||||
if (error == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (timeout < 1)
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
now = g_time3();
|
||||
if (now - start_time < timeout)
|
||||
{
|
||||
g_sleep(timeout / 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (self->mode == TRANS_MODE_UNIX) /* unix socket */
|
||||
{
|
||||
self->sck = g_tcp_local_socket();
|
||||
if (self->sck < 0)
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
|
||||
}
|
||||
g_tcp_set_non_blocking(self->sck);
|
||||
error = g_tcp_local_connect(self->sck, port);
|
||||
while (1)
|
||||
{
|
||||
error = g_tcp_local_connect(self->sck, port);
|
||||
if (error == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (timeout < 1)
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
now = g_time3();
|
||||
if (now - start_time < timeout)
|
||||
{
|
||||
g_sleep(timeout / 5);
|
||||
}
|
||||
else
|
||||
{
|
||||
self->status = TRANS_STATUS_DOWN;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -596,6 +747,15 @@ trans_connect(struct trans *self, const char *server, const char *port,
|
||||
{
|
||||
if (g_tcp_last_error_would_block(self->sck))
|
||||
{
|
||||
now = g_time3();
|
||||
if (now - start_time < timeout)
|
||||
{
|
||||
timeout = timeout - (now - start_time);
|
||||
}
|
||||
else
|
||||
{
|
||||
timeout = 0;
|
||||
}
|
||||
if (g_tcp_can_send(self->sck, timeout))
|
||||
{
|
||||
self->status = TRANS_STATUS_UP; /* ok */
|
||||
@ -717,10 +877,12 @@ trans_get_out_s(struct trans *self, int size)
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
int APP_CC
|
||||
trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
|
||||
trans_set_tls_mode(struct trans *self, const char *key, const char *cert,
|
||||
int disableSSLv3, const char *tls_ciphers)
|
||||
{
|
||||
self->tls = ssl_tls_create(self, key, cert);
|
||||
if (self->tls == NULL)
|
||||
@ -729,7 +891,7 @@ trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ssl_tls_accept(self->tls) != 0)
|
||||
if (ssl_tls_accept(self->tls, disableSSLv3, tls_ciphers) != 0)
|
||||
{
|
||||
g_writeln("trans_set_tls_mode: ssl_tls_accept failed");
|
||||
return 1;
|
||||
@ -742,6 +904,7 @@ trans_set_tls_mode(struct trans *self, const char *key, const char *cert)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
int APP_CC
|
||||
|
@ -41,10 +41,24 @@ typedef int (DEFAULT_CC *ttrans_data_in)(struct trans* self);
|
||||
typedef int (DEFAULT_CC *ttrans_conn_in)(struct trans* self,
|
||||
struct trans* new_self);
|
||||
typedef int (DEFAULT_CC *tis_term)(void);
|
||||
typedef int (APP_CC *trans_recv_proc) (struct trans *self, void *ptr, int len);
|
||||
typedef int (APP_CC *trans_send_proc) (struct trans *self, const void *data, int len);
|
||||
typedef int (APP_CC *trans_recv_proc) (struct trans *self, char *ptr, int len);
|
||||
typedef int (APP_CC *trans_send_proc) (struct trans *self, const char *data, int len);
|
||||
typedef int (APP_CC *trans_can_recv_proc) (struct trans *self, int sck, int millis);
|
||||
|
||||
/* optional source info */
|
||||
|
||||
#define XRDP_SOURCE_NONE 0
|
||||
#define XRDP_SOURCE_CLIENT 1
|
||||
#define XRDP_SOURCE_SESMAN 2
|
||||
#define XRDP_SOURCE_CHANSRV 3
|
||||
#define XRDP_SOURCE_MOD 4
|
||||
|
||||
struct source_info
|
||||
{
|
||||
int cur_source;
|
||||
int source[7];
|
||||
};
|
||||
|
||||
struct trans
|
||||
{
|
||||
tbus sck; /* socket handle */
|
||||
@ -68,6 +82,8 @@ struct trans
|
||||
trans_recv_proc trans_recv;
|
||||
trans_send_proc trans_send;
|
||||
trans_can_recv_proc trans_can_recv;
|
||||
struct source_info *si;
|
||||
int my_source;
|
||||
};
|
||||
|
||||
struct trans* APP_CC
|
||||
@ -79,7 +95,7 @@ trans_get_wait_objs(struct trans* self, tbus* objs, int* count);
|
||||
int APP_CC
|
||||
trans_get_wait_objs_rw(struct trans *self,
|
||||
tbus *robjs, int *rcount,
|
||||
tbus *wobjs, int *wcount);
|
||||
tbus *wobjs, int *wcount, int *timeout);
|
||||
int APP_CC
|
||||
trans_check_wait_objs(struct trans* self);
|
||||
int APP_CC
|
||||
@ -93,6 +109,8 @@ trans_force_write(struct trans* self);
|
||||
int APP_CC
|
||||
trans_write_copy(struct trans* self);
|
||||
int APP_CC
|
||||
trans_write_copy_s(struct trans* self, struct stream* out_s);
|
||||
int APP_CC
|
||||
trans_connect(struct trans* self, const char* server, const char* port,
|
||||
int timeout);
|
||||
int APP_CC
|
||||
@ -104,7 +122,8 @@ trans_get_in_s(struct trans* self);
|
||||
struct stream* APP_CC
|
||||
trans_get_out_s(struct trans* self, int size);
|
||||
int APP_CC
|
||||
trans_set_tls_mode(struct trans *self, const char *key, const char *cert);
|
||||
trans_set_tls_mode(struct trans *self, const char *key, const char *cert,
|
||||
int disableSSLv3, const char *tls_ciphers);
|
||||
int APP_CC
|
||||
trans_shutdown_tls_mode(struct trans *self);
|
||||
int APP_CC
|
||||
|
@ -110,6 +110,7 @@ struct xrdp_client_info
|
||||
int multimon; /* 0 = deny , 1 = allow */
|
||||
int monitorCount; /* number of monitors detected (max = 16) */
|
||||
struct monitor_info minfo[16]; /* client monitor data */
|
||||
struct monitor_info minfo_wm[16]; /* client monitor data, non-negative values */
|
||||
|
||||
int keyboard_type;
|
||||
int keyboard_subtype;
|
||||
@ -134,6 +135,21 @@ struct xrdp_client_info
|
||||
char variant[16];
|
||||
char options[256];
|
||||
|
||||
/* codec */
|
||||
int h264_codec_id;
|
||||
int h264_prop_len;
|
||||
char h264_prop[64];
|
||||
|
||||
int use_frame_acks;
|
||||
int max_unacknowledged_frame_count;
|
||||
|
||||
int disableSSLv3; /* 0 = no, 1 = yes */
|
||||
char tls_ciphers[64];
|
||||
|
||||
int client_os_major;
|
||||
int client_os_minor;
|
||||
|
||||
int no_orders_supported;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -160,6 +160,7 @@
|
||||
#define RDP_INPUT_CODEPOINT 1
|
||||
#define RDP_INPUT_VIRTKEY 2
|
||||
#define RDP_INPUT_SCANCODE 4
|
||||
#define RDP_INPUT_UNICODE 5
|
||||
#define RDP_INPUT_MOUSE 0x8001
|
||||
#define RDP_INPUT_MOUSEX 0x8002
|
||||
|
||||
@ -217,8 +218,25 @@
|
||||
/* RDP capabilities */
|
||||
#define RDP_CAPSET_GENERAL 1
|
||||
#define RDP_CAPLEN_GENERAL 0x18
|
||||
#define OS_MAJOR_TYPE_UNIX 4
|
||||
#define OS_MINOR_TYPE_XSERVER 7
|
||||
#define OSMAJORTYPE_UNSPECIFIED 0x0000
|
||||
#define OSMAJORTYPE_WINDOWS 0x0001
|
||||
#define OSMAJORTYPE_OS2 0x0002
|
||||
#define OSMAJORTYPE_MACINTOSH 0x0003
|
||||
#define OSMAJORTYPE_UNIX 0x0004
|
||||
#define OSMAJORTYPE_IOS 0x0005
|
||||
#define OSMAJORTYPE_OSX 0x0006
|
||||
#define OSMAJORTYPE_ANDROID 0x0007
|
||||
#define OSMAJORTYPE_CHROME_OS 0x0008
|
||||
#define OSMINORTYPE_UNSPECIFIED 0x0000
|
||||
#define OSMINORTYPE_WINDOWS_31X 0x0001
|
||||
#define OSMINORTYPE_WINDOWS_95 0x0002
|
||||
#define OSMINORTYPE_WINDOWS_NT 0x0003
|
||||
#define OSMINORTYPE_OS2_V21 0x0004
|
||||
#define OSMINORTYPE_POWER_PC 0x0005
|
||||
#define OSMINORTYPE_MACINTOSH 0x0006
|
||||
#define OSMINORTYPE_NATIVE_XSERVER 0x0007
|
||||
#define OSMINORTYPE_PSEUDO_XSERVER 0x0008
|
||||
#define OSMINORTYPE_WINDOWS_RT 0x0009
|
||||
|
||||
#define RDP_CAPSET_BITMAP 2
|
||||
#define RDP_CAPLEN_BITMAP 0x1C
|
||||
@ -266,6 +284,24 @@
|
||||
#define RDP_CAPSET_VIRCHAN 20
|
||||
#define RDP_CAPLEN_VIRCHAN 0x08
|
||||
|
||||
#define RDP_CAPSET_MULTIFRAGMENT 0x001A
|
||||
#define RDP_CAPLEN_MULTIFRAGMENT 0x08
|
||||
|
||||
#define RDP_CAPSET_FRAME_ACKNOWLEDGE 0x001E
|
||||
#define RDP_CAPLEN_FRAME_ACKNOWLEDGE 0x08
|
||||
|
||||
#define RDP_CAPSET_SURFCMDS 0x1C
|
||||
#define RDP_CAPLEN_SURFCMDS 0x0C
|
||||
|
||||
#define RDP_CAPSET_BMPCODECS 0x1D
|
||||
#define RDP_CAPLEN_BMPCODECS 0x1C
|
||||
|
||||
#define RDP_CAPSET_COMPDESK 0x19
|
||||
#define RDP_CAPLEN_COMPDESK 0x06
|
||||
|
||||
#define RDP_CAPSET_LPOINTER 0x1B
|
||||
#define RDP_CAPLEN_LPOINTER 0x06
|
||||
|
||||
#define RDP_SOURCE "MSTSC"
|
||||
|
||||
/* Logon flags */
|
||||
@ -459,6 +495,40 @@
|
||||
#define XR_ORDERFLAGS_EX_ALTSEC_FRAME_MARKER_SUPPORT 0x0004
|
||||
#define XR_ORDERFLAGS_EX_OFFSCREEN_COMPOSITE_SUPPORT 0x0100
|
||||
|
||||
/* orders negotiation indexes */
|
||||
#define TS_NEG_DSTBLT_INDEX 0x00
|
||||
#define TS_NEG_PATBLT_INDEX 0x01
|
||||
#define TS_NEG_SCRBLT_INDEX 0x02
|
||||
#define TS_NEG_MEMBLT_INDEX 0x03
|
||||
#define TS_NEG_MEM3BLT_INDEX 0x04
|
||||
/* 0x05 */
|
||||
/* 0x06 */
|
||||
#define TS_NEG_DRAWNINEGRID_INDEX 0x07
|
||||
#define TS_NEG_LINETO_INDEX 0x08
|
||||
#define TS_NEG_MULTI_DRAWNINEGRID_INDEX 0x09
|
||||
/* 0x0A */
|
||||
#define TS_NEG_SAVEBITMAP_INDEX 0x0B
|
||||
/* 0x0C */
|
||||
/* 0x0D */
|
||||
/* 0x0E */
|
||||
#define TS_NEG_MULTIDSTBLT_INDEX 0x0F
|
||||
#define TS_NEG_MULTIPATBLT_INDEX 0x10
|
||||
#define TS_NEG_MULTISCRBLT_INDEX 0x11
|
||||
#define TS_NEG_MULTIOPAQUERECT_INDEX 0x12
|
||||
#define TS_NEG_FAST_INDEX_INDEX 0x13
|
||||
#define TS_NEG_POLYGON_SC_INDEX 0x14
|
||||
#define TS_NEG_POLYGON_CB_INDEX 0x15
|
||||
#define TS_NEG_POLYLINE_INDEX 0x16
|
||||
/* 0x17 */
|
||||
#define TS_NEG_FAST_GLYPH_INDEX 0x18
|
||||
#define TS_NEG_ELLIPSE_SC_INDEX 0x19
|
||||
#define TS_NEG_ELLIPSE_CB_INDEX 0x1A
|
||||
#define TS_NEG_INDEX_INDEX 0x1B
|
||||
/* 0x1C */
|
||||
/* 0x1D */
|
||||
/* 0x1E */
|
||||
/* 0x1F */
|
||||
|
||||
/* drawable types */
|
||||
#define WND_TYPE_BITMAP 0
|
||||
#define WND_TYPE_WND 1
|
||||
@ -499,29 +569,13 @@
|
||||
|
||||
#define CB_ITEMCHANGE 300
|
||||
|
||||
#define OSMAJORTYPE_UNSPECIFIED 0x0000
|
||||
#define OSMAJORTYPE_WINDOWS 0x0001
|
||||
#define OSMAJORTYPE_OS2 0x0002
|
||||
#define OSMAJORTYPE_MACINTOSH 0x0003
|
||||
#define OSMAJORTYPE_UNIX 0x0004
|
||||
|
||||
#define OSMINORTYPE_UNSPECIFIED 0x0000
|
||||
#define OSMINORTYPE_WINDOWS_31X 0x0001
|
||||
#define TS_OSMINORTYPE_WINDOWS_95 0x0002
|
||||
#define TS_OSMINORTYPE_WINDOWS_NT 0x0003
|
||||
#define TS_OSMINORTYPE_OS2_V21 0x0004
|
||||
|
||||
#define TS_OSMINORTYPE_POWER_PC 0x0005
|
||||
#define TS_OSMINORTYPE_MACINTOSH 0x0006
|
||||
#define TS_OSMINORTYPE_NATIVE_XSERVER 0x0007
|
||||
#define TS_OSMINORTYPE_PSEUDO_XSERVER 0x0008
|
||||
|
||||
#define TS_CAPS_PROTOCOLVERSION 0x0200
|
||||
#define FASTPATH_OUTPUT_SUPPORTED 0x0001
|
||||
#define NO_BITMAP_COMPRESSION_HDR 0x0400
|
||||
#define LONG_CREDENTIALS_SUPPORTED 0x0004
|
||||
#define AUTORECONNECT_SUPPORTED 0x0008
|
||||
#define ENC_SALTED_CHEKSUM 0x0010
|
||||
#define ENC_SALTED_CHECKSUM 0x0010
|
||||
#define NEGOTIATEORDERSUPPORT 0x0002
|
||||
#define ZEROBOUNDSDELTASUPPORT 0x0008
|
||||
#define COLORINDEXSUPPORT 0x0020
|
||||
@ -537,34 +591,33 @@
|
||||
#define COMPDESK_NOT_SUPPORTED 0x0000
|
||||
#define COMPDESK_SUPPORTED 0x0001
|
||||
|
||||
#define SURCMDS_SETSURFACEBITS 0x00000002
|
||||
#define SURCMDS_FRAMEMARKER 0x00000010
|
||||
#define SURCMDS_STREAMSUFRACEBITS 0x00000040
|
||||
#define SURFCMDS_SETSURFACEBITS 0x00000002
|
||||
#define SURFCMDS_FRAMEMARKER 0x00000010
|
||||
#define SURFCMDS_STREAMSUFRACEBITS 0x00000040
|
||||
|
||||
/* CODEC_GUID_NSCODEC 0xCA8D1BB9000F154F589FAE2D1A87E2D6 */
|
||||
/* CODEC_GUID_NSCODEC CA8D1BB9-000F-154F-589FAE2D1A87E2D6 */
|
||||
#define XR_CODEC_GUID_NSCODEC \
|
||||
"\xb9\x1b\x8d\xca\x0f\x00\x4f\x15\x58\x9f\xae\x2d\x1a\x87\xe2\xd6"
|
||||
|
||||
/* CODEC_GUID_REMOTEFX 0x76772F12BD724463AFB3B73C9C6F7886 */
|
||||
/* CODEC_GUID_REMOTEFX 76772F12-BD72-4463-AFB3B73C9C6F7886 */
|
||||
#define XR_CODEC_GUID_REMOTEFX \
|
||||
"\x12\x2F\x77\x76\x72\xBD\x63\x44\xAF\xB3\xB7\x3C\x9C\x6F\x78\x86"
|
||||
|
||||
/* CODEC_GUID_JPEG 0x1BAF4CE6 9EED 430C 869ACB8B37B66237 */
|
||||
/* CODEC_GUID_IMAGE_REMOTEFX 2744CCD4-9D8A-4E74-803C-0ECBEEA19C54 */
|
||||
#define XR_CODEC_GUID_IMAGE_REMOTEFX \
|
||||
"\xD4\xCC\x44\x27\x8A\x9D\x74\x4E\x80\x3C\x0E\xCB\xEE\xA1\x9C\x54"
|
||||
|
||||
/* CODEC_GUID_JPEG 1BAF4CE6-9EED-430C-869ACB8B37B66237 */
|
||||
#define XR_CODEC_GUID_JPEG \
|
||||
"\xE6\x4C\xAF\x1B\xED\x9E\x0C\x43\x86\x9A\xCB\x8B\x37\xB6\x62\x37"
|
||||
|
||||
/* CODEC_GUID_PNG 0xOE0C858D 28E0 45DB ADAA0F83E57CC560 */
|
||||
/* CODEC_GUID_PNG 0E0C858D-28E0-45DB-ADAA0F83E57CC560 */
|
||||
#define XR_CODEC_GUID_PNG \
|
||||
"\x8D\x85\x0C\x0E\xE0\x28\xDB\x45\xAD\xAA\x0F\x83\xE5\x7C\xC5\x60"
|
||||
|
||||
#define RDP_CAPSET_SURFCMDS 0x1c
|
||||
#define RDP_CAPLEN_SURFCMDS 0x0c
|
||||
#define RDP_CAPSET_BMPCODECS 0x1d
|
||||
#define RDP_CAPLEN_BMPCODECS 0x1c
|
||||
#define RDP_CAPSET_COMPDESK 0x19
|
||||
#define RDP_CAPLEN_COMPDESK 0x06
|
||||
#define RDP_CAPSET_LPOINTER 0x27
|
||||
#define RDP_CAPLEN_LPOINTER 0x06
|
||||
/* MFVideoFormat_H264 0x34363248-0000-0010-800000AA00389B71 */
|
||||
#define XR_CODEC_GUID_H264 \
|
||||
"\x48\x32\x36\x34\x00\x00\x10\x00\x80\x00\x00\xAA\x00\x38\x9B\x71"
|
||||
|
||||
/* fastpath input */
|
||||
#define FASTPATH_INPUT_SECURE_CHECKSUM 0x1
|
||||
@ -617,4 +670,10 @@
|
||||
#define XRDP_MAX_BITMAP_CACHE_IDX 2000
|
||||
#define XRDP_BITMAP_CACHE_ENTRIES 2048
|
||||
|
||||
#define XR_MIN_KEY_CODE 8
|
||||
#define XR_MAX_KEY_CODE 256
|
||||
|
||||
#define XR_RDP_SCAN_LSHIFT 42
|
||||
#define XR_RDP_SCAN_ALT 56
|
||||
|
||||
#endif
|
||||
|
213
configure.ac
213
configure.ac
@ -1,13 +1,45 @@
|
||||
# Process this file with autoconf to produce a configure script
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT([xrdp], [0.9.0], [xrdp-devel@lists.sourceforge.net])
|
||||
AC_PREREQ(2.65)
|
||||
AC_INIT([xrdp], [0.9.1], [xrdp-devel@googlegroups.com])
|
||||
AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in)
|
||||
AM_INIT_AUTOMAKE([1.6 foreign])
|
||||
AM_INIT_AUTOMAKE([1.7.2 foreign])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_PROG_CC
|
||||
AC_C_CONST
|
||||
AC_PROG_LIBTOOL
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
AC_CONFIG_SUBDIRS([libpainter librfxcodec])
|
||||
|
||||
# Use silent rules by default if supported by Automake
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
AX_CFLAGS_WARN_ALL
|
||||
AX_APPEND_COMPILE_FLAGS([-Wwrite-strings])
|
||||
AX_GCC_FUNC_ATTRIBUTE([format])
|
||||
AX_TYPE_SOCKLEN_T
|
||||
|
||||
case $host_os in
|
||||
*linux*)
|
||||
linux=yes
|
||||
;;
|
||||
*freebsd*)
|
||||
freebsd=yes
|
||||
;;
|
||||
*netbsd*)
|
||||
netbsd=yes
|
||||
;;
|
||||
*openbsd*)
|
||||
openbsd=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
AM_CONDITIONAL(LINUX, [test "x$linux" = xyes])
|
||||
AM_CONDITIONAL(FREEBSD, [test "x$freebsd" = xyes])
|
||||
AM_CONDITIONAL(OPENBSD, [test "x$openbsd" = xyes])
|
||||
AM_CONDITIONAL(NETBSD, [test "x$netbsd" = xyes])
|
||||
|
||||
AC_ARG_WITH([systemdsystemunitdir],
|
||||
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),
|
||||
[], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)])
|
||||
@ -29,6 +61,12 @@ AC_ARG_ENABLE(nopam, AS_HELP_STRING([--enable-nopam],
|
||||
fi
|
||||
])
|
||||
AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes])
|
||||
AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6],
|
||||
[Build IPv6 support (default: no, experimental)]),
|
||||
[], [enable_ipv6=no])
|
||||
AC_ARG_ENABLE(ipv6only, AS_HELP_STRING([--enable-ipv6only],
|
||||
[Build IPv6-only (default: no)]),
|
||||
[], [enable_ipv6only=no])
|
||||
AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos],
|
||||
[Build kerberos support (default: no)]),
|
||||
[], [enable_kerberos=no])
|
||||
@ -69,13 +107,48 @@ AC_ARG_ENABLE(rfxcodec, AS_HELP_STRING([--enable-rfxcodec],
|
||||
[Build using librfxcodec (default: no)]),
|
||||
[], [enable_rfxcodec=no])
|
||||
AM_CONDITIONAL(XRDP_RFXCODEC, [test x$enable_rfxcodec = xyes])
|
||||
AC_ARG_ENABLE(opus, AS_HELP_STRING([--enable-opus],
|
||||
[Build opus(audio codec) (default: no)]),
|
||||
[], [enable_opus=no])
|
||||
AM_CONDITIONAL(XRDP_OPUS, [test x$enable_opus = xyes])
|
||||
AC_ARG_ENABLE(mp3lame, AS_HELP_STRING([--enable-mp3lame],
|
||||
[Build lame mp3(audio codec) (default: no)]),
|
||||
[], [enable_mp3lame=no])
|
||||
AM_CONDITIONAL(XRDP_MP3LAME, [test x$enable_mp3lame = xyes])
|
||||
AC_ARG_ENABLE(pixman, AS_HELP_STRING([--enable-pixman],
|
||||
[Use pixman library (default: no)]),
|
||||
[], [enable_pixman=no])
|
||||
AM_CONDITIONAL(XRDP_PIXMAN, [test x$enable_pixman = xyes])
|
||||
AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes])
|
||||
AC_ARG_ENABLE(painter, AS_HELP_STRING([--enable-painter],
|
||||
[Use painter library (default: no)]),
|
||||
[], [enable_painter=no])
|
||||
AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes])
|
||||
|
||||
AM_CONDITIONAL(GOT_PREFIX, test "x${prefix}" != "xNONE"])
|
||||
# Don't fail without working nasm if rfxcodec is not enabled
|
||||
if test "x$enable_rfxcodec" != xyes; then
|
||||
with_simd=no
|
||||
export with_simd
|
||||
fi
|
||||
|
||||
# Check if -ldl is needed to use dlopen()
|
||||
DLOPEN_LIBS=
|
||||
AC_CHECK_FUNC(dlopen, [],
|
||||
[AC_CHECK_LIB(dl, dlopen, [DLOPEN_LIBS=-ldl])])
|
||||
AC_SUBST(DLOPEN_LIBS)
|
||||
|
||||
# checking for openssl
|
||||
AC_CHECK_HEADER([openssl/rc4.h], [],
|
||||
[AC_MSG_ERROR([please install libssl-dev or openssl-devel])],
|
||||
[#include <stdlib.h>])
|
||||
PKG_CHECK_MODULES([OPENSSL], [openssl >= 0], [],
|
||||
[AC_MSG_ERROR([please install libssl-dev or openssl-devel])])
|
||||
|
||||
# checking for pam variation
|
||||
# Linux-PAM is used in Linux systems
|
||||
# OpenPAM is used by FreeBSD, NetBSD, DragonFly BSD and OS X
|
||||
# OpenBSD uses BSD Authentication rather than both PAMs
|
||||
AC_CHECK_HEADER([security/_pam_types.h],
|
||||
[AC_DEFINE([HAVE__PAM_TYPES_H], 1, [Using Linux-PAM], [])])
|
||||
AC_CHECK_HEADER([security/pam_constants.h],
|
||||
[AC_DEFINE([HAVE_PAM_CONSTANTS_H], 1, [Using OpenPAM], [])])
|
||||
|
||||
# checking if pam should be autodetected.
|
||||
if test "x$enable_pam" = "xyes"
|
||||
@ -90,10 +163,16 @@ then
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_CHECK_MEMBER([struct in6_addr.s6_addr],
|
||||
[],
|
||||
[AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
|
||||
[#include <arpa/inet.h>])
|
||||
if test "x$enable_ipv6only" = "xyes"
|
||||
then
|
||||
enable_ipv6=yes
|
||||
AC_DEFINE([XRDP_ENABLE_IPV6ONLY],1,[Enable IPv6 only])
|
||||
fi
|
||||
|
||||
if test "x$enable_ipv6" = "xyes"
|
||||
then
|
||||
AC_DEFINE([XRDP_ENABLE_IPV6],1,[Enable IPv6])
|
||||
fi
|
||||
|
||||
if test "x$enable_pam" != "xyes" || test "x$bsd" = "xtrue"
|
||||
then
|
||||
@ -117,11 +196,26 @@ fi
|
||||
# checking for fuse
|
||||
if test "x$enable_fuse" = "xyes"
|
||||
then
|
||||
AC_CHECK_HEADER([fuse.h], [],
|
||||
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])],
|
||||
[#define _FILE_OFFSET_BITS 64])
|
||||
PKG_CHECK_MODULES([FUSE], [fuse >= 2.6], [],
|
||||
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])])
|
||||
fi
|
||||
|
||||
# checking for opus
|
||||
if test "x$enable_opus" = "xyes"
|
||||
then
|
||||
AC_CHECK_HEADER([opus/opus.h], [],
|
||||
[AC_MSG_ERROR([please install libopus-dev or opus-devel])])
|
||||
fi
|
||||
|
||||
# checking for lame mp3
|
||||
if test "x$enable_mp3lame" = "xyes"
|
||||
then
|
||||
AC_CHECK_HEADER([lame/lame.h], [],
|
||||
[AC_MSG_ERROR([please install libmp3lame-dev or lamemp3-devel])])
|
||||
fi
|
||||
|
||||
AS_IF( [test "x$enable_pixman" = "xyes"] , [PKG_CHECK_MODULES(PIXMAN, pixman-1 >= 0.1.0)] )
|
||||
|
||||
# checking for TurboJPEG
|
||||
if test "x$enable_tjpeg" = "xyes"
|
||||
then
|
||||
@ -152,54 +246,67 @@ else
|
||||
fi
|
||||
fi
|
||||
|
||||
# checking for Xlib, Xfixes
|
||||
AC_CHECK_HEADER([X11/Xlib.h], [],
|
||||
[AC_MSG_ERROR([please install libx11-dev or libX11-devel])])
|
||||
AC_PATH_XTRA
|
||||
if test "x$no_x" == "xyes"; then
|
||||
AC_MSG_ERROR([please install libx11-dev or libX11-devel])
|
||||
fi
|
||||
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $X_CFLAGS"
|
||||
|
||||
# checking for Xfixes
|
||||
AC_CHECK_HEADER([X11/extensions/Xfixes.h], [],
|
||||
[AC_MSG_ERROR([please install libx11-dev and libxfixes-dev or libXfixes-devel])],
|
||||
[#include <X11/Xlib.h>])
|
||||
|
||||
# checking for Xrandr
|
||||
AC_CHECK_HEADER([X11/extensions/Xrandr.h], [],
|
||||
[AC_MSG_ERROR([please install libxrandr-dev or libXrandr-devel])],
|
||||
[#include <X11/Xlib.h>])
|
||||
|
||||
libdir="${libdir}/xrdp";
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_SUBST([moduledir], '${libdir}/xrdp')
|
||||
|
||||
if test "x${prefix}" = "xNONE" ; then
|
||||
sysconfdir="/etc";
|
||||
localstatedir="/var";
|
||||
fi
|
||||
AC_CONFIG_FILES([Makefile
|
||||
common/Makefile
|
||||
vnc/Makefile
|
||||
rdp/Makefile
|
||||
libxrdp/Makefile
|
||||
xup/Makefile
|
||||
mc/Makefile
|
||||
neutrinordp/Makefile
|
||||
xrdp/Makefile
|
||||
sesman/Makefile
|
||||
sesman/libscp/Makefile
|
||||
sesman/tools/Makefile
|
||||
sesman/sessvc/Makefile
|
||||
sesman/chansrv/Makefile
|
||||
keygen/Makefile
|
||||
docs/Makefile
|
||||
docs/man/Makefile
|
||||
instfiles/Makefile
|
||||
instfiles/pam.d/Makefile
|
||||
instfiles/init.d/Makefile
|
||||
instfiles/default/Makefile
|
||||
instfiles/pulse/Makefile
|
||||
genkeymap/Makefile
|
||||
xrdpapi/Makefile
|
||||
xrdpvr/Makefile
|
||||
])
|
||||
# fontdump/Makefile
|
||||
# xrdp/cursors/Makefile
|
||||
# Xserver/hw/rdp/Makefile
|
||||
AC_OUTPUT
|
||||
|
||||
# example of how to check for a struct in a header
|
||||
#AC_CHECK_MEMBER([struct in6_addr.s6_addr],
|
||||
# [],
|
||||
# [AC_DEFINE(NO_ARPA_INET_H_IP6, 1, [for IPv6])],
|
||||
# [#include <arpa/inet.h>])
|
||||
PKG_INSTALLDIR
|
||||
|
||||
AC_CHECK_HEADERS([sys/prctl.h])
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
common/Makefile
|
||||
docs/Makefile
|
||||
docs/man/Makefile
|
||||
genkeymap/Makefile
|
||||
instfiles/default/Makefile
|
||||
instfiles/init.d/Makefile
|
||||
instfiles/Makefile
|
||||
instfiles/pam.d/Makefile
|
||||
instfiles/pulse/Makefile
|
||||
instfiles/rc.d/Makefile
|
||||
keygen/Makefile
|
||||
libxrdp/Makefile
|
||||
Makefile
|
||||
mc/Makefile
|
||||
neutrinordp/Makefile
|
||||
pkgconfig/Makefile
|
||||
pkgconfig/xrdp.pc
|
||||
pkgconfig/xrdp-uninstalled.pc
|
||||
rdp/Makefile
|
||||
sesman/chansrv/Makefile
|
||||
sesman/libscp/Makefile
|
||||
sesman/Makefile
|
||||
sesman/sessvc/Makefile
|
||||
sesman/tools/Makefile
|
||||
vnc/Makefile
|
||||
xrdpapi/Makefile
|
||||
xrdp/Makefile
|
||||
xrdpvr/Makefile
|
||||
xup/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
@ -31,5 +31,5 @@ is lost, the session remains.
|
||||
|
||||
For X11, start the XServer after the user is
|
||||
authenticated. First check for the next available X11 display,
|
||||
create a user session, start the XServer and set the DISPLAY enviromenet
|
||||
create a user session, start the XServer and set the DISPLAY environment
|
||||
variable.
|
||||
|
@ -1,4 +1,4 @@
|
||||
man_MANS = \
|
||||
dist_man_MANS = \
|
||||
xrdp-dis.1 \
|
||||
sesman.ini.5 \
|
||||
xrdp.ini.5 \
|
||||
@ -14,4 +14,4 @@ man_MANS = \
|
||||
noinst_man_MANS = \
|
||||
xrdp-xcon.8
|
||||
|
||||
EXTRA_DIST = $(man_MANS) $(noinst_man_MANS)
|
||||
EXTRA_DIST = $(noinst_man_MANS)
|
||||
|
@ -1,206 +1,225 @@
|
||||
.\"
|
||||
.TH "sesman.ini" "5" "0.1.0" "xrdp team" ""
|
||||
.\"
|
||||
.TH "sesman.ini" "5" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBsesman.ini\fR \- Configuration file for \fBsesman\fR(8)
|
||||
\fBsesman.ini\fR \- Configuration file for \fBxrdp-sesman\fR(8)
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
This is the man page for \fBsesman.ini\fR, \fBsesman\fR(8) configuration file.
|
||||
It is composed by a number of sections, each one composed by a section name, enclosed by square brackets, folowed by a list of \fI<parameter>\fR=\fI<value>\fR lines.
|
||||
\fBsesman.ini\fR consists of several sections. Each section starts with
|
||||
the section name in square brackets, followed by a list of
|
||||
\fIparameter\fR=\fIvalue\fR lines. Following sections are recognized:
|
||||
|
||||
\fBsesman.ini\fR supports the following sections:
|
||||
.TP
|
||||
\fB[Globals]\fR
|
||||
Global configuration
|
||||
|
||||
.TP
|
||||
\fB[Globals]\fR \- sesman global configuration section,
|
||||
.TP
|
||||
\fB[Logging]\fR
|
||||
Logging subsystem
|
||||
|
||||
.TP
|
||||
\fB[Logging]\fR \- logging subsystem parameters
|
||||
.TP
|
||||
\fB[Sessions]\fR
|
||||
Session management
|
||||
|
||||
.TP
|
||||
\fB[Security]\fR \- Access control parameters
|
||||
.TP
|
||||
\fB[Security]\fR
|
||||
Access control
|
||||
|
||||
.TP
|
||||
\fB[Sessions]\fR \- Session management parameters
|
||||
.TP
|
||||
\fB[X11rdp]\fR, \fB[Xvnc]\fR, \fB[Xorg]\fR
|
||||
X11 server settings for supported servers
|
||||
|
||||
.LP
|
||||
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
|
||||
.TP
|
||||
\fB[Chansrv]\fR
|
||||
Settings for xrdp-chansrv(8)
|
||||
|
||||
.LP
|
||||
For any of the following parameter, if it's specified more than one time the last entry encountered will be used.
|
||||
.TP
|
||||
\fB[SessionVariables]\fR
|
||||
Environment variables for the session
|
||||
|
||||
\fBNOTE\fR: if any of these options is specified outside its section, it will be \fIignored\fR.
|
||||
.LP
|
||||
All parameters and values (except for file names and paths) are case
|
||||
insensitive, and are described in detail below. If any parameter is
|
||||
specified more than once, the last entry will be used. Options specified
|
||||
outside their proper section will be \fIignored\fR.
|
||||
|
||||
.SH "GLOBALS"
|
||||
The options to be specified in the \fB[globals]\fR section are the following:
|
||||
Following parameters can be used in the \fB[Globals]\fR section.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBListenAddress\fR=\fIip address\fR
|
||||
Specifies sesman listening address. Default is 0.0.0.0 (all interfaces)
|
||||
xrdp-sesman listening address. If not specified, defaults to \fI0.0.0.0\fR
|
||||
(all interfaces).
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBListenPort\fR=\fIport number\fR
|
||||
Specifies sesman listening port. Default is 3350
|
||||
xrdp-sesman listening port. If not specified, defaults to \fI3350\fR.
|
||||
|
||||
.TP
|
||||
\fBEnableUserWindowManager\fR=\fI[0|1]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables user specific window manager, that is, anyone can define it's own script executed by sesman when starting a new session, specified by \fBUserWindowManager\fR
|
||||
.TP
|
||||
\fBEnableUserWindowManager\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables user
|
||||
specific startup script. That is, xrdp-sesman will execute the script
|
||||
specified by \fBUserWindowManager\fR if it exists.
|
||||
|
||||
.TP
|
||||
\fBUserWindowManager\fR=\fIstartwm.sh\fR
|
||||
This option specifies the script run by sesman when starting a session and per\-user window manager is enabled.
|
||||
.br
|
||||
The path is relative to user's HOME directory
|
||||
.TP
|
||||
\fBUserWindowManager\fR=\fIfilename\fR
|
||||
Name of the startup script relative to the user's home directory. If
|
||||
present and enabled by \fBEnableUserWindowManager\fR, that script is
|
||||
executed instead of \fBDefaultWindowManager\fR.
|
||||
|
||||
.TP
|
||||
\fBDefaultWindowManager\fR=\fI${SESMAN_BIN_DIR}/startwm.sh\fR
|
||||
This contains full path to the default window manager startup script used by sesman to start a session
|
||||
.TP
|
||||
\fBDefaultWindowManager\fR=\fIfilename\fR
|
||||
Full path to the default startup script used by xrdp-sesman to start a
|
||||
session if the user script is disabled or missing.
|
||||
|
||||
.SH "LOGGING"
|
||||
The following parameters can be used in the \fB[logging]\fR section:
|
||||
Following parameters can be used in the \fB[Logging]\fR section.
|
||||
|
||||
.TP
|
||||
\fBLogFile\fR=\fI${SESMAN_LOG_DIR}/sesman.log\fR
|
||||
This options contains the path to logfile. It can be either absolute or relative, and the default is \fI${SESMAN_LOG_DIR}/sesman.log\fR
|
||||
.TP
|
||||
\fBLogFile\fR=\fIfilename\fR
|
||||
Log file path. It can be either absolute or relative. If not specified,
|
||||
defaults to \fI./sesman.log\fR
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBLogLevel\fR=\fIlevel\fR
|
||||
This option can have one of the following values:
|
||||
|
||||
\fBCORE\fR or \fB0\fR \- Log only core messages. these messages are _always_ logged, regardless the logging level selected.
|
||||
\fBCORE\fR or \fB0\fR \- Log only core messages. Those messages are
|
||||
logged \fIregardless\fR of the selected logging level.
|
||||
|
||||
\fBERROR\fR or \fB1\fR \- Log only error messages
|
||||
\fBERROR\fR or \fB1\fR \- Log only error messages.
|
||||
|
||||
\fBWARNING\fR, \fBWARN\fR or \fB2\fR \- Logs warnings and error messages
|
||||
\fBWARNING\fR, \fBWARN\fR or \fB2\fR \- Logs warnings and error messages.
|
||||
|
||||
\fBINFO\fR or \fB3\fR \- Logs errors, warnings and informational messages
|
||||
\fBINFO\fR or \fB3\fR \- Log errors, warnings and informational messages.
|
||||
|
||||
\fBDEBUG\fR or \fB4\fR \- Log everything. If \fBsesman\fR is compiled in debug mode, this options will output many more low\-level message, useful for developers
|
||||
|
||||
.TP
|
||||
\fBEnableSyslog\fR=\fI[0|1]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables logging to syslog. Otherwise syslog is disabled.
|
||||
|
||||
.TP
|
||||
\fBSyslogLevel\fR=\fIlevel\fR
|
||||
This option sets the logging level for syslog. It can have the same values of \fBLogLevel\fR. If \fBSyslogLevel\fR is greater than \fBLogLevel\fR, its value is lowered to that of \fBLogLevel\fR.
|
||||
|
||||
.SH "SESSIONS"
|
||||
The following parameters can be used in the \fB[Sessions]\fR section:
|
||||
|
||||
.TP
|
||||
\fBX11DisplayOffset\fR=\fI<number>\fR
|
||||
Specifies the first X display number available for \fBsesman\fP(8). This prevents sesman from interfering with real X11 servers. The default is 10.
|
||||
\fBDEBUG\fR or \fB4\fR \- Log everything. If xrdp-sesman is compiled in
|
||||
debug mode, this options will output many more low\-level messages.
|
||||
|
||||
.TP
|
||||
\fBMaxSessions\fR=\fI<number>\fR
|
||||
Sets the maximum number of simultaneous session on terminal server.
|
||||
.br
|
||||
If unset or set to \fI0\fR, unlimited session are allowed.
|
||||
\fBEnableSyslog\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging to
|
||||
syslog.
|
||||
|
||||
.TP
|
||||
\fBKillDisconnected\fR=\fI[0|1]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, every session will be killed within 60 seconds when the user disconnects.
|
||||
.br
|
||||
.TP
|
||||
\fBSyslogLevel\fR=\fIlevel\fR
|
||||
Logging level for syslog. It can have the same values as \fBLogLevel\fR.
|
||||
If \fBSyslogLevel\fR and \fBLogLevel\fR differ, the least verbose setting
|
||||
takes effect for syslog.
|
||||
|
||||
.TP
|
||||
\fBIdleTimeLimit\fR=\fI<number>\fR
|
||||
Sets the the time limit before an idle session is disconnected.
|
||||
.br
|
||||
If set to \fI0\fR, automatic disconnection is disabled.
|
||||
.br
|
||||
\fI\-this option is currently ignored!\-\fR
|
||||
.SH "SESSIONS"
|
||||
Following parameters can be used in the \fB[Sessions]\fR section.
|
||||
|
||||
.TP
|
||||
\fBDisconnectedTimeLimit\fR=\fI<number>\fR
|
||||
Sets the time(in seconds) limit before a disconnected session is killed.
|
||||
.br
|
||||
.TP
|
||||
\fBX11DisplayOffset\fR=\fInumber\fR
|
||||
The first X display number available for xrdp-sesman. This prevents
|
||||
xrdp-sesman from interfering with real X11 servers. If not specified,
|
||||
defaults to \fI10\fR.
|
||||
|
||||
.TP
|
||||
\fBMaxSessions\fR=\fInumber\fR
|
||||
Sets the maximum number of simultaneous sessions. If not set or set to
|
||||
\fI0\fR, unlimited session are allowed.
|
||||
|
||||
.TP
|
||||
\fBKillDisconnected\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, every session will be killed
|
||||
within 60 seconds after the user disconnects.
|
||||
|
||||
.TP
|
||||
\fBIdleTimeLimit\fR=\fInumber\fR
|
||||
\fI\This option is currently ignored!\fR Time limit before an idle
|
||||
session is disconnected. If set to \fI0\fR, automatic disconnection is
|
||||
disabled.
|
||||
|
||||
.TP
|
||||
\fBDisconnectedTimeLimit\fR=\fInumber\fR
|
||||
Sets the time limit (in seconds) before a disconnected session is killed.
|
||||
If set to \fI0\fR, automatic killing is disabled.
|
||||
.br
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBPolicy\fR=\fI[Default|UBD|UBI|UBC|UBDI|UBDC]\fR
|
||||
Session allocation policy. By Default, a new session is created
|
||||
for the combination <User,BitPerPixel> when using Xrdp, and
|
||||
Session allocation policy. By default, a new session is created
|
||||
for the combination <User,BitPerPixel> when using Xrdp, and
|
||||
for the combination <User,BitPerPixel,DisplaySize> when using Xvnc.
|
||||
This behaviour can be changed by setting session policy to:
|
||||
This behavior can be changed by setting session policy to:
|
||||
.br
|
||||
|
||||
.br
|
||||
.br
|
||||
\fBUBD\fR - session per <User,BitPerPixel,DisplaySize>
|
||||
.br
|
||||
.br
|
||||
\fBUBI\fR - session per <User,BitPerPixel,IPAddr>
|
||||
.br
|
||||
.br
|
||||
\fBUBC\fR - session per <User,BitPerPixel,Connection>
|
||||
.br
|
||||
.br
|
||||
\fBUBDI\fR - session per <User,BitPerPixel,DisplaySize,IPAddr>
|
||||
.br
|
||||
.br
|
||||
\fBUBDC\fR - session per <User,BitPerPixel,DisplaySize,Connection>
|
||||
.br
|
||||
|
||||
.br
|
||||
Note that the criteria <User,BitPerPixel> can not be turned off
|
||||
and <DisplaySize> will always be checkt when for Xvnc connections.
|
||||
Note that the \fBUser\fR and \fBBitPerPixel\fR criteria cannot be turned
|
||||
off. For Xvnc connections, \fBDisplaySize\fR is always enabled as well.
|
||||
.br
|
||||
|
||||
.SH "SECURITY"
|
||||
The following parameters can be used in the \fB[Sessions]\fR section:
|
||||
Following parameters can be used in the \fB[Security]\fR section.
|
||||
|
||||
.TP
|
||||
\fBAllowRootLogin\fR=\fI[0|1]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR enables root login on the terminal server
|
||||
.TP
|
||||
\fBAllowRootLogin\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, enables root login on the
|
||||
terminal server.
|
||||
|
||||
.TP
|
||||
\fBMaxLoginRetry\fR=\fI[0|1]\fR
|
||||
The number of login attempts that are allowed on terminal server. If set to \fI0\fR, unlimited attempts are allowed. The default value for this field is \fI3\fR.
|
||||
.TP
|
||||
\fBMaxLoginRetry\fR=\fInumber\fR
|
||||
The number of login attempts that are allowed on terminal server. If set
|
||||
to \fI0\fR, unlimited attempts are allowed. If not specified, defaults to
|
||||
\fI3\fR.
|
||||
|
||||
.TP
|
||||
\fBTerminalServerUsers\fR=\fItsusers\fR
|
||||
Only the users belonging to the group \fItsusers\fR are allowed to login on terminal server.
|
||||
.br
|
||||
If unset or set to an invalid or non\-existent group, login for all users is enabled.
|
||||
.TP
|
||||
\fBTerminalServerUsers\fR=\fIgroup\fR
|
||||
Only the users belonging to the specified group are allowed to login on
|
||||
terminal server. If unset or set to an invalid or non\-existent group,
|
||||
login for all users is enabled.
|
||||
|
||||
.TP
|
||||
\fBTerminalServerAdmins\fR=\fItsadmins\fR
|
||||
Sets the group which a user shall belong to have session management rights.
|
||||
.br
|
||||
\fI\-this option is currently ignored!\-\fR
|
||||
.TP
|
||||
\fBTerminalServerAdmins\fR=\fIgroup\fR
|
||||
\fIThis option is currently ignored!\fR Only members of this group can
|
||||
have session management rights.
|
||||
|
||||
.SH "EXAMPLES"
|
||||
This is an example \fBsesman.ini\fR:
|
||||
.TP
|
||||
\fBAlwaysGroupCheck\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, require group membership even
|
||||
if the group specified in \fBTerminalServerUsers\fR doesn't exist.
|
||||
|
||||
.nf
|
||||
[Globals]
|
||||
ListenAddress=127.0.0.1
|
||||
ListenPort=3350
|
||||
EnableUserWindowManager=1
|
||||
UserWindowManager=startwm.sh
|
||||
DefaultWindowManager=startwm.sh
|
||||
.SH "X11 SERVER"
|
||||
Following parameters can be used in the \fB[X11rdp]\fR, \fB[Xvnc]\fR and
|
||||
\fB[Xorg]\fR sections.
|
||||
|
||||
[Logging]
|
||||
LogFile=/usr/local/xrdp/sesman.log
|
||||
LogLevel=DEBUG
|
||||
EnableSyslog=0
|
||||
SyslogLevel=DEBUG
|
||||
.TP
|
||||
\fBparam\fR=\fIstring\fR
|
||||
Multiple \fIparam\fR lines are supported. This first line specifies the
|
||||
path to the X11 server executable. Following lines specify command line
|
||||
arguments passed to the X11 server.
|
||||
|
||||
[Sessions]
|
||||
MaxSessions=10
|
||||
KillDisconnected=0
|
||||
IdleTimeLimit=0
|
||||
DisconnectedTimeLimit=0
|
||||
.SH "CHANSRV"
|
||||
Following parameters can be used in the \fB[Chansrv]\fR section.
|
||||
|
||||
[Security]
|
||||
AllowRootLogin=1
|
||||
MaxLoginRetry=3
|
||||
TerminalServerUsers=tsusers
|
||||
TerminalServerAdmins=tsadmins
|
||||
.fi
|
||||
.TP
|
||||
\fBFuseMountName\fR=\fIstring\fR
|
||||
Directory for drive redirection, relative to the user home directory.
|
||||
Created if it doesn't exist. If not specified, defaults to \fIxrdp_client\fR.
|
||||
|
||||
.SH "SESSIONS VARIABLES"
|
||||
All entries in the \fB[SessionVariables]\fR section are set as
|
||||
environment variables in the user's session.
|
||||
|
||||
.SH "FILES"
|
||||
${SESMAN_CFG_DIR}/sesman.ini
|
||||
/etc/xrdp/sesman.ini
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR sesman (8),
|
||||
.BR sesrun (8),
|
||||
.BR xrdp-sesman (8),
|
||||
.BR xrdp-sesrun (8),
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
For more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp\-chansrv" "8" "0.7.0" "xrdp team" ""
|
||||
.TH "xrdp\-chansrv" "8" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp\-chansrv\fR \- \fBxrdp\fR channel server
|
||||
|
||||
@ -36,11 +36,11 @@ UNIX socket used by external programs to implement channels.
|
||||
.I /tmp/.xrdp/xrdp_api_*
|
||||
UNIX socket used by \fBxrdp\-chansrv\fP to communicate with \fBxrdp\-sesman\fP.
|
||||
.TP
|
||||
.I $HOME/xrdp-chansrv.log
|
||||
.I $XDG_DATA_HOME/xrdp/xrdp-chansrv.log
|
||||
Log file used by \fBxrdp\-chansrv\fP(8).
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp\-sesman (8),
|
||||
.BR sesman.ini (5).
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp-dis" "8" "0.7.0" "xrdp team"
|
||||
.TH "xrdp-dis" "1" "0.9.1" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-dis \- xrdp disconnect utility
|
||||
|
||||
@ -7,7 +7,7 @@ xrdp\-dis \- xrdp disconnect utility
|
||||
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\fBxrdp\-dix\fP is run with no parameters to disconnect your xrdp session.
|
||||
\fBxrdp\-dis\fP is run with no parameters to disconnect your xrdp session.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
@ -19,5 +19,9 @@ to get the default host and display number.
|
||||
.I /tmp/.xrdp/xrdp_disconnect_display_*
|
||||
UNIX socket used to communicate with the \fBxrdp\fP(8) session manager.
|
||||
|
||||
.SH KNOWN ISSUES
|
||||
.TP
|
||||
This utility doesn't support disconnecting xorgxrdp sessions so far.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR xrdp (1).
|
||||
.BR xrdp (8).
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp\-genkeymap" "8" "0.1.0" "xrdp team" ""
|
||||
.TH "xrdp\-genkeymap" "8" "0.9.1" "xrdp team" ""
|
||||
.de URL
|
||||
. \\$2 \(laURL: \\$1 \(ra\\$3
|
||||
..
|
||||
@ -21,36 +21,36 @@ The key map information is stored in the file named \fIoutfile\fP.
|
||||
|
||||
.SH "FILES"
|
||||
.TP
|
||||
.I /etc/xrdp/km-XXXX.ini
|
||||
Files containing the keyboard mapping for language \fIXXXX\fP, which is a 4 digit hexadecimal number identifying the country and language code.
|
||||
.I /etc/xrdp/km-XXXXXXXX.ini
|
||||
Files containing the keyboard mapping for language \fIXXXXXXXX\fP, which is a 8 digit hexadecimal number identifying the country and language code.
|
||||
.RS 8
|
||||
.TP
|
||||
.B 0405
|
||||
cs czech
|
||||
.B 00000405
|
||||
cs Czech
|
||||
.TP
|
||||
.B 0407
|
||||
de german
|
||||
.B 00000407
|
||||
de German
|
||||
.TP
|
||||
.B 0409
|
||||
en-us us english
|
||||
.B 00000409
|
||||
en-us US English
|
||||
.TP
|
||||
.B 040c
|
||||
fr french
|
||||
.B 0000040c
|
||||
fr French
|
||||
.TP
|
||||
.B 0410
|
||||
it italy
|
||||
.B 00000410
|
||||
it Italian
|
||||
.TP
|
||||
.B 0416
|
||||
.B 00000416
|
||||
br Portuguese (Brazil)
|
||||
.TP
|
||||
.B 0419
|
||||
ru russian
|
||||
.B 00000419
|
||||
ru Russian
|
||||
.TP
|
||||
.B 041d
|
||||
se swedish
|
||||
.B 0000041d
|
||||
se Swedish
|
||||
.TP
|
||||
.B 0809
|
||||
en-uk uk english
|
||||
.B 00000809
|
||||
en-uk UK English
|
||||
.RE
|
||||
|
||||
.SH "AUTHORS"
|
||||
@ -64,4 +64,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
.BR unicode (7),
|
||||
.URL "https://github.com/FreeRDP/FreeRDP/wiki/Keyboard" "Description of Keyboard Input mapping" .
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,5 +1,9 @@
|
||||
.\" Hey, EMACS: -*- nroff -*-
|
||||
.TH xrdp\-keygen 8 "0.7.0" "xrdp team"
|
||||
.\"-
|
||||
.\" Copyright © 2007, 2008 Vincent Bernat <bernat@debian.org>
|
||||
.\" License: GPL-2+
|
||||
.\"-
|
||||
.TH xrdp\-keygen 8 "0.9.1" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-keygen \- xrdp RSA key generation utility
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp-sesadmin" "8" "0.7.0" "xrdp team"
|
||||
.TH "xrdp-sesadmin" "8" "0.9.1" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-sesadmin \- console XRDP sessions administration tool
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp\-sesman" "8" "0.1.0" "xrdp team" ""
|
||||
.TH "xrdp\-sesman" "8" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
xrdp\-sesman \- \fBxrdp\fR(8) session manager
|
||||
|
||||
@ -8,34 +8,34 @@ xrdp\-sesman \- \fBxrdp\fR(8) session manager
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\-sesman\fR is \fBxrdp\fR(8) session manager.
|
||||
.br
|
||||
It manages user sessions by authenticating the user and starting the appropriate Xserver
|
||||
.br
|
||||
It manages user sessions by authenticating the user and starting the appropriate Xserver.
|
||||
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-nodaemon\fR
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-nodaemon\fR
|
||||
Starts \fBxrdp\-sesman\fR in foreground instead of starting it as a daemon.
|
||||
.TP
|
||||
.TP
|
||||
\fB\-k\fR, \fB\-\-kill\fR
|
||||
Kills running \fBxrdp\-sesman\fR daemon.
|
||||
.TP
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
Output help information and exit.
|
||||
|
||||
.SH "FILES"
|
||||
${SESMAN_BIN_DIR}/sesman
|
||||
.br
|
||||
.br
|
||||
${SESMAN_BIN_DIR}/sesrun
|
||||
.br
|
||||
.br
|
||||
${SESMAN_CFG_DIR}/sesman.ini
|
||||
.br
|
||||
.br
|
||||
${SESMAN_LOG_DIR}/sesman.log
|
||||
.br
|
||||
.br
|
||||
${SESMAN_PID_DIR}/sesman.pid
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
@ -44,4 +44,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp\-sesrun" "8" "0.7.0" "xrdp team" ""
|
||||
.TH "xrdp\-sesrun" "8" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
xrdp\-sesrun \- \fBsesman\fR(8) session launcher
|
||||
|
||||
@ -8,37 +8,37 @@ xrdp\-sesrun \- \fBsesman\fR(8) session launcher
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\-sesrun\fR starts a session using \fBxrdp\-sesman\fR(8).
|
||||
.br
|
||||
.br
|
||||
This is a tool useful for testing, it simply behaves like xrdp when some user logs in a new session and authenticates, thus starting a new session.
|
||||
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
.TP
|
||||
.I server
|
||||
Server on which sesman is running
|
||||
.TP
|
||||
.TP
|
||||
.I username
|
||||
user name of the session being started
|
||||
.TP
|
||||
.TP
|
||||
.I password
|
||||
user password
|
||||
.TP
|
||||
.TP
|
||||
.I width
|
||||
Screen width
|
||||
.TP
|
||||
.TP
|
||||
.I height
|
||||
Screen height
|
||||
.TP
|
||||
.TP
|
||||
.I bpp
|
||||
Session color depth
|
||||
|
||||
.SH "FILES"
|
||||
${SESMAN_BIN_DIR}/sesman
|
||||
.br
|
||||
.br
|
||||
${SESMAN_BIN_DIR}/sesrun
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
@ -47,4 +47,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,9 +1,9 @@
|
||||
.TH "xrdp\-sessvc" "8" "0.7.0" "xrdp team" ""
|
||||
.TH "xrdp\-sessvc" "8" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
xrdp\-sessvc \- \fBxrdp\fR session supervisor
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp\-sessman
|
||||
.B xrdp\-sessvc
|
||||
.I x_pid wm_pid
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
@ -23,4 +23,4 @@ The process ID of the forked Window Manager to monitor.
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp\-sesrun (8).
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp-xcon" "8" "0.7.0" "xrdp team"
|
||||
.TH "xrdp-xcon" "8" "0.9.1" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-xcon \- X11 event loop debugging helper for XRDP
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp" "8" "0.1.0" "xrdp team" ""
|
||||
.TH "xrdp" "8" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp\fR \- a Remote Desktop Protocol (RDP) server
|
||||
|
||||
@ -43,4 +43,4 @@ Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
.BR sesman.ini (5),
|
||||
.BR sesrun (8)
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -1,4 +1,4 @@
|
||||
.TH "xrdp.ini" "5" "0.7.0" "xrdp team" ""
|
||||
.TH "xrdp.ini" "5" "0.9.1" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp.ini\fR \- Configuration file for \fBxrdp\fR(8)
|
||||
|
||||
@ -17,10 +17,7 @@ It is composed by a number of sections, each one composed by a section name, enc
|
||||
.TP
|
||||
\fB[Channels]\fP \- channel subsystem parameters
|
||||
|
||||
.TP
|
||||
\fI[Connection]\fP \- contain the info on which services \fBxrdp\fR(8) can connect to.
|
||||
|
||||
.LP
|
||||
.LP
|
||||
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
|
||||
|
||||
.SH "GLOBALS"
|
||||
@ -28,65 +25,99 @@ The options to be specified in the \fB[Globals]\fR section are the following:
|
||||
|
||||
.TP
|
||||
\fBaddress\fP=\fIip address\fP
|
||||
Specifies xrdp listening address. Default is 0.0.0.0 (all interfaces)
|
||||
Specify xrdp listening address. If not specified, defaults to 0.0.0.0 (all interfaces).
|
||||
|
||||
.TP
|
||||
\fBautorun\fP=\fIsession_name\fP
|
||||
Automatically run the connection specified by \fIsession_name\fP, which must match a section as described below.
|
||||
By default a drop-down list with all available connections is shown.
|
||||
A connection can also be chosen by the connecting client by setting the \fBLOGIN DOMAIN\fP to a valid \fIsession name\fP.
|
||||
Section name for automatic login. If set and the client supplies valid
|
||||
username and password, the user will be logged in automatically using the
|
||||
connection specified by \fIsession_name\fP.
|
||||
|
||||
If \fIsession_name\fP is empty, the \fBLOGIN DOMAIN\fR from the client
|
||||
with be used to select the section. If no domain name is supplied, the
|
||||
first suitable section will be used for automatic login.
|
||||
|
||||
.TP
|
||||
\fBbitmap_cache\fR=\fI[0|1]\fR
|
||||
\fBbitmap_cache\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap caching in \fBxrdp\fR(8).
|
||||
|
||||
.TP
|
||||
\fBbitmap_compression\fR=\fI[0|1]\fR
|
||||
\fBbitmap_compression\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables bitmap compression in \fBxrdp\fR(8).
|
||||
|
||||
.TP
|
||||
\fBbulk_compression\fP=\fI[0|1]\fP
|
||||
\fBbulk_compression\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables compression of bulk data in \fBxrdp\fR(8).
|
||||
|
||||
.TP
|
||||
\fBchannel_code\fP=\fI[0|1]\fP
|
||||
\fBcertificate\fP=\fI/path/to/certificate\fP
|
||||
.TP
|
||||
\fBkey_file\fP=\fI/path/to/private_key\fP
|
||||
Set location of TLS certificate and private key. They must be written in PEM format.
|
||||
If not specified, defaults to \fB${XRDP_CFG_DIR}/cert.pem\fP, \fB${XRDP_CFG_DIR}/key.pem\fP.
|
||||
|
||||
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
|
||||
|
||||
.TP
|
||||
\fBchannel_code\fP=\fI[true|false]\fP
|
||||
If set to \fB0\fR, \fBfalse\fR or \fBno\fR this option disables all channels \fBxrdp\fR(8).
|
||||
See section \fBCHANNELS\fP below for more fine grained options.
|
||||
|
||||
.TP
|
||||
\fBcrypt_level\fP=\fIlow|medium|high|fips\fP
|
||||
\fBcrypt_level\fP=\fI[low|medium|high|fips]\fP
|
||||
.\" <http://blogs.msdn.com/b/openspecification/archive/2011/12/08/encryption-negotiation-in-rdp-connection.aspx>
|
||||
RDP connection are controlled by two encryption settings: \fIEncryption Level\fP and \fIEncryption Method\fP.
|
||||
The only supported \fIEncryption Method\fP is \fB40BIT_ENCRYPTION\fP, \fB128BIT_ENCRYPTION\fP and \fB56BIT_ENCRYPTION\fP are currently not supported.
|
||||
Regulate encryption level of Standard RDP Security.
|
||||
This parameter is effective only if \fBsecurity_layer\fP is set to \fBrdp\fP or \fBnegotiate\fP.
|
||||
|
||||
Encryption in Standard RDP Security is controlled by two settings: \fIEncryption Level\fP
|
||||
and \fIEncryption Method\fP. The only supported \fIEncryption Method\fP are \fB40BIT_ENCRYPTION\fP
|
||||
and \fB128BIT_ENCRYPTION\fP. \fB56BIT_ENCRYPTION\fP is not supported.
|
||||
This option controls the \fIEncryption Level\fP:
|
||||
.RS 8
|
||||
.TP
|
||||
.B low
|
||||
All data sent from the client to the server is protected by encryption based on the maximum key strength supported by the client.
|
||||
All data sent from the client to the server is protected by encryption based on
|
||||
the maximum key strength supported by the client.
|
||||
.I This is the only level that the traffic sent by the server to client is not encrypted.
|
||||
.TP
|
||||
.B medium
|
||||
All data sent between the client and the server is protected by encryption based on the maximum key strength supported by the client.
|
||||
All data sent between the client and the server is protected by encryption based on
|
||||
the maximum key strength supported by the client (client compatible).
|
||||
.TP
|
||||
.B high
|
||||
All data sent between the client and server is protected by encryption based on the server's maximum key strength.
|
||||
All data sent between the client and the server is protected by encryption based on
|
||||
the server's maximum key strength (sever compatible).
|
||||
.TP
|
||||
.B fips
|
||||
All data sent between the client and server is protected using Federal Information Processing Standard 140-1 validated encryption methods.
|
||||
.I This level is required for Windows clients (mstsc.exe) if the client's group policy enforces FIPS-compliance mode.
|
||||
All data sent between the client and server is protected using Federal Information
|
||||
Processing Standard 140-1 validated encryption methods.
|
||||
.I This level is required for Windows clients (mstsc.exe) if the client's group policy
|
||||
.I enforces FIPS-compliance mode.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
\fBfork\fP=\fI[0|1]\fP
|
||||
\fBdisableSSLv3\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will not accept SSLv3 connections.
|
||||
If not specified, defaults to \fBfalse\fP.
|
||||
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
|
||||
|
||||
.TP
|
||||
\fBfork\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR for each incoming connection \fBxrdp\fR(8) forks a sub-process instead of using threads.
|
||||
|
||||
.TP
|
||||
\fBhidelogwindow\fP=\fI[0|1]\fP
|
||||
\fBhidelogwindow\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will not show a window for log messages.
|
||||
If not specified, defaults to \fBfalse\fP.
|
||||
|
||||
.TP
|
||||
\fBmax_bpp\fP=\fI[8|15|16|24]\fP
|
||||
\fBmax_bpp\fP=\fI[8|15|16|24|32]\fP
|
||||
Limit the color depth by specifying the maximum number of bits per pixel.
|
||||
If not specified or set to \fB0\fP, unlimited.
|
||||
|
||||
.TP
|
||||
\fBpamerrortxt\fP=\fIerror_text\fP
|
||||
Specify text passed to PAM when authentication failed. The maximum length is \fB256\fP.
|
||||
|
||||
.TP
|
||||
\fBport\fP=\fIport\fP
|
||||
@ -94,15 +125,60 @@ Specify TCP port to listen on for incoming connections.
|
||||
The default for RDP is \fB3389\fP.
|
||||
|
||||
.TP
|
||||
\fBtcp_keepalive\fP=\fI[yes|no]\fP
|
||||
Regulate if the listening socket uses socket option \fBSO_KEEPALIVE\fP.
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP and the network connection disappears without closing messages, the connection will be closed.
|
||||
\fBrequire_credentials\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP requires clients to include username and
|
||||
password initial connection phase. In other words, xrdp doesn't allow clients to show login
|
||||
screen if set to true. If not specified, defaults to \fBfalse\fP.
|
||||
|
||||
.TP
|
||||
\fBtcp_nodelay\fP=\fI[yes|no]\fP
|
||||
\fBsecurity_layer\fP=\fI[tls|rdp|negotiate]\fP
|
||||
Regulate security methods. If not specified, defaults to \fBnegotiate\fP.
|
||||
.RS 8
|
||||
.TP
|
||||
.B tls
|
||||
Enhanced RDP Security is used. All security operations (encryption, decryption, data integrity
|
||||
verification, and server authentication) are implemented by TLS.
|
||||
|
||||
.TP
|
||||
.B rdp
|
||||
Standard RDP Security, which is not safe from man-in-the-middle attack, is used. The encryption level
|
||||
of Standard RDP Security is controlled by \fBcrypt_level\fP.
|
||||
|
||||
.TP
|
||||
.B negotiate
|
||||
Negotiate these security methods with clients.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
\fBtcp_keepalive\fP=\fI[true|false]\fP
|
||||
Regulate if the listening socket uses socket option \fBSO_KEEPALIVE\fP.
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP and the network connection disappears
|
||||
without closing messages, the connection will be closed.
|
||||
|
||||
.TP
|
||||
\fBtcp_nodelay\fP=\fI[true|false]\fP
|
||||
Regulate if the listening socket uses socket option \fBTCP_NODELAY\fP.
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, no buffering will be performed in the TCP stack.
|
||||
|
||||
.TP
|
||||
\fBtcp_send_buffer_bytes\fP=\fIbuffer_size\fP
|
||||
.TP
|
||||
\fBtcp_recv_buffer_bytes\fP=\fIbuffer_size\fP
|
||||
Specify send/recv buffer sizes in bytes. The default value depends on operating system.
|
||||
|
||||
.TP
|
||||
\fBtls_ciphers\fP=\fIcipher_suite\fP
|
||||
Specifies TLS cipher suite. The format of this parameter is equivalent to which
|
||||
\fBopenssl\fP(1) ciphers subcommand accepts.
|
||||
|
||||
(ex. $ openssl ciphers 'HIGH:!ADH:!SHA1')
|
||||
|
||||
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
|
||||
|
||||
.TP
|
||||
\fBuse_fastpath\fP=\fI[input|output|both|none]\fP
|
||||
If not specified, defaults to \fBnone\fP.
|
||||
|
||||
.TP
|
||||
\fBblack\fP=\fI000000\fP
|
||||
.TP
|
||||
@ -127,7 +203,7 @@ The lowest value that can be given to one of the light sources is 0 (hex 00).
|
||||
The highest value is 255 (hex FF).
|
||||
|
||||
.SH "LOGGING"
|
||||
The following parameters can be used in the \fB[logging]\fR section:
|
||||
The following parameters can be used in the \fB[Logging]\fR section:
|
||||
|
||||
.TP
|
||||
\fBLogFile\fR=\fI${SESMAN_LOG_DIR}/sesman.log\fR
|
||||
@ -148,7 +224,7 @@ This option can have one of the following values:
|
||||
\fBDEBUG\fR or \fB4\fR \- Log everything. If \fBsesman\fR is compiled in debug mode, this options will output many more low\-level message, useful for developers
|
||||
|
||||
.TP
|
||||
\fBEnableSyslog\fR=\fI[0|1]\fR
|
||||
\fBEnableSyslog\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR this option enables logging to syslog. Otherwise syslog is disabled.
|
||||
|
||||
.TP
|
||||
@ -158,70 +234,81 @@ This option sets the logging level for syslog. It can have the same values of \f
|
||||
.SH "CHANNELS"
|
||||
The Remote Desktop Protocol supports several channels, which are used to transfer additional data like sound, clipboard data and others.
|
||||
Channel names not listed here will be blocked by \fBxrdp\fP.
|
||||
Not all channels are supported in all cases, so setting a value to \fItrue\fP is a pre-requisite, but does not force it's use.
|
||||
Not all channels are supported in all cases, so setting a value to \fItrue\fP is a prerequisite, but does not force its use.
|
||||
.br
|
||||
Channels can also be enabled or disabled on a per connection basis by prefixing each setting with \fBchannel.\fP in the channel section.
|
||||
|
||||
.TP
|
||||
\fBrdpdr\fP=\fI[0|1]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for device re-direction is allowed.
|
||||
\fBrdpdr\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for device redirection is allowed.
|
||||
|
||||
.TP
|
||||
\fBrdpsnd\fP=\fI[0|1]\fP
|
||||
\fBrdpsnd\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for sound is allowed.
|
||||
|
||||
.TP
|
||||
\fBdrdynvc\fP=\fI[0|1]\fP
|
||||
\fBdrdynvc\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel to initiate additional dynamic virtual channels is allowed.
|
||||
|
||||
.TP
|
||||
\fBcliprdr\fP=\fI[0|1]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for clipboard re-direction is allowed.
|
||||
\fBcliprdr\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for clipboard redirection is allowed.
|
||||
|
||||
.TP
|
||||
\fBrail\fP=\fI[0|1]\fP
|
||||
\fBrail\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for remote applications integrated locally (RAIL) is allowed.
|
||||
|
||||
.TP
|
||||
\fBxrdpvr\fP=\fI[0|1]\fP
|
||||
\fBxrdpvr\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR using the RDP channel for XRDP Video streaming is allowed.
|
||||
|
||||
.SH "CONNECTIONS"
|
||||
A connection section is made of a section name, enclosed in square brackets, and the following entries:
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBname\fR=\fI<session name>\fR
|
||||
The name displayed in \fBxrdp\fR(8) login window's combo box.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBlib\fR=\fI../vnc/libvnc.so\fR
|
||||
Sets the library to be used with this connection.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBusername\fR=\fI<username>\fR|\fIask\fR
|
||||
Specifies the username used for authenticating in the connection.
|
||||
If set to \fIask\fR, user name should be provided in the login window.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBpassword\fR=\fI<password>\fR|\fIask\fR
|
||||
Specifies the password used for authenticating in the connection.
|
||||
If set to \fIask\fR, password should be provided in the login window.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBip\fR=\fI127.0.0.1\fR
|
||||
Specifies the ip address of the host to connect to.
|
||||
|
||||
.TP
|
||||
.TP
|
||||
\fBport\fR=\fI<number>\fR|\fI\-1\fR
|
||||
Specifies the port number to connect to. If set to \fI\-1\fR, the default port for the specified library is used.
|
||||
|
||||
.TP
|
||||
\fBxserverbpp\fR=\fI<number>\fR
|
||||
Specifies color depth of the backend X server. The default is the color
|
||||
depth of the client. Only Xvnc and X11rdp use that setting. Xorg runs at
|
||||
\fI24\fR bpp.
|
||||
|
||||
.TP
|
||||
\fBcode\fR=\fI<number>\fR|\fI0\fR
|
||||
Specifies the session type. The default, \fI0\fR, is Xvnc, \fI10\fR is
|
||||
X11rdp, and \fI20\fR is Xorg with xorgxrdp modules.
|
||||
|
||||
.SH "EXAMPLES"
|
||||
This is an example \fBxrdp.ini\fR:
|
||||
|
||||
.nf
|
||||
[Globals]
|
||||
bitmap_cache=yes
|
||||
bitmap_compression=yes
|
||||
bitmap_cache=true
|
||||
bitmap_compression=true
|
||||
|
||||
[vnc1]
|
||||
name=sesman
|
||||
@ -241,4 +328,4 @@ ${XRDP_CFG_DIR}/xrdp.ini
|
||||
.BR sesrun (8),
|
||||
.BR sesman.ini (5)
|
||||
|
||||
for more info on \fBxrdp\fR see http://xrdp.sf.net
|
||||
for more info on \fBxrdp\fR see http://www.xrdp.org/
|
||||
|
@ -2,17 +2,17 @@ General FAQ
|
||||
|
||||
Q. What is RDP?
|
||||
|
||||
A. RDP stands for Remote Desktop Protocol. Its the protocol used by Windows
|
||||
A. RDP stands for Remote Desktop Protocol. It's the protocol used by Windows
|
||||
terminal servers to talk to the terminal server clients.
|
||||
|
||||
|
||||
Q. What is xrdp?
|
||||
|
||||
A. xrdp, usually spell lower case, is as open source implementation of the RDP
|
||||
protocol.
|
||||
A. xrdp, usually spelled in lower case, is as open source implementation of the
|
||||
RDP protocol.
|
||||
|
||||
|
||||
Q. I can't get it to compile in Ubuntu. What can I do?
|
||||
Q. I can't get xrdp to compile in Ubuntu. What can I do?
|
||||
|
||||
A. See faq-compile.txt.
|
||||
|
||||
|
39
file-loc.txt
39
file-loc.txt
@ -1,63 +1,80 @@
|
||||
|
||||
default build will install the following
|
||||
|
||||
/usr/local/lib/xrdp/
|
||||
/usr/local/lib/xrdp
|
||||
libcommon.so
|
||||
libmc.so
|
||||
librdp.so
|
||||
libscp.so
|
||||
libvnc.so
|
||||
libxrdp.so
|
||||
libxrdpapi.so
|
||||
libxup.so
|
||||
|
||||
/usr/local/bin/
|
||||
/usr/local/bin
|
||||
xrdp-dis
|
||||
xrdp-genkeymap
|
||||
xrdp-keygen
|
||||
xrdp-sesadmin
|
||||
xrdp-sesrun
|
||||
xrdp-sestest
|
||||
|
||||
/usr/local/sbin/
|
||||
/usr/local/sbin
|
||||
xrdp
|
||||
xrdp-sesman
|
||||
xrdp-sessvc
|
||||
xrdp-chansrv
|
||||
|
||||
/etc/xrdp/
|
||||
km-xxxx.ini
|
||||
/etc/xrdp
|
||||
km-xxxxxxxx.ini
|
||||
sesman.ini
|
||||
rsakeys.ini
|
||||
startwm.sh
|
||||
xrdp.ini
|
||||
xrdp_keyboard.ini
|
||||
xrdp.sh
|
||||
|
||||
/etc/pam.d/
|
||||
/etc/xrdp/pulse
|
||||
default.pa
|
||||
|
||||
/etc/pam.d
|
||||
xrdp-sesman
|
||||
|
||||
/usr/local/share/man/man1
|
||||
xrdp-dis.1
|
||||
|
||||
/usr/local/share/man/man5
|
||||
sesman.ini.5
|
||||
xrdp.ini.5
|
||||
|
||||
/usr/local/share/man/man8
|
||||
xrdp.8
|
||||
xrdp-chansrv.8
|
||||
xrdp-genkeymap.8
|
||||
xrdp-keygen.8
|
||||
xrdp-sesadmin.8
|
||||
xrdp-sesman.8
|
||||
xrdp-sesrun.8
|
||||
xrdp-sessvc.8
|
||||
xrdp.8
|
||||
|
||||
/usr/local/share/xrdp
|
||||
ad24b.bmp
|
||||
ad256.bmp
|
||||
cursor0.cur
|
||||
cursor1.cur
|
||||
sans-10.fv1
|
||||
xrdp24b.bmp
|
||||
xrdp256.bmp
|
||||
xrdp_logo.bmp
|
||||
|
||||
when running, the following are created and written to
|
||||
|
||||
/var/run/
|
||||
/var/run
|
||||
xrdp.pid
|
||||
sesman.pid
|
||||
|
||||
/var/log/
|
||||
/var/log
|
||||
xrdp.log
|
||||
xrdp-sesman.log
|
||||
|
||||
/tmp
|
||||
/tmp/.xrdp
|
||||
xrdp*
|
||||
|
1
fontdump/.gitignore
vendored
Normal file
1
fontdump/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
!Makefile
|
0
fontdump/Makefile
Executable file → Normal file
0
fontdump/Makefile
Executable file → Normal file
0
fontdump/fontdump.c
Executable file → Normal file
0
fontdump/fontdump.c
Executable file → Normal file
@ -1,9 +1,16 @@
|
||||
EXTRA_DIST = \
|
||||
dump-keymaps.sh \
|
||||
readme.txt
|
||||
|
||||
AM_CFLAGS = $(X_CFLAGS)
|
||||
|
||||
bin_PROGRAMS = \
|
||||
xrdp-genkeymap
|
||||
|
||||
xrdp_genkeymap_SOURCES = genkeymap.c evdev-map.c
|
||||
|
||||
xrdp_genkeymap_LDFLAGS = \
|
||||
$(X_LIBS)
|
||||
|
||||
xrdp_genkeymap_LDADD = \
|
||||
-L/usr/X11R6/lib \
|
||||
-lX11
|
||||
$(X_PRE_LIBS) -lX11 $(X_EXTRA_LIBS)
|
||||
|
@ -7,40 +7,41 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# English - US 'en-us' 0x0409
|
||||
# English - US 'en-us' 0x00000409
|
||||
setxkbmap -model pc104 -layout us
|
||||
./xrdp-genkeymap ../instfiles/km-0409.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000409.ini
|
||||
|
||||
# German 'de' 0x0407
|
||||
# English - UK 'en-GB' 0x00000809
|
||||
setxkbmap -model pc105 -layout gb
|
||||
./xrdp-genkeymap ../instfiles/km-00000809.ini
|
||||
|
||||
# German 'de' 0x00000407
|
||||
setxkbmap -model pc104 -layout de
|
||||
./xrdp-genkeymap ../instfiles/km-0407.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000407.ini
|
||||
|
||||
# Italy 'it' 0x0410
|
||||
# Italian 'it' 0x00000410
|
||||
setxkbmap -model pc104 -layout it
|
||||
./xrdp-genkeymap ../instfiles/km-0410.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000410.ini
|
||||
|
||||
# Japanese 'jp' 0x0411
|
||||
setxkbmap -model jp106 -layout jp -variant OADG109A
|
||||
./xrdp-genkeymap ../instfiles/km-0411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0010411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0200411.ini
|
||||
./xrdp-genkeymap ../instfiles/km-e0210411.ini
|
||||
# Japanese 'jp' 0x00000411
|
||||
setxkbmap -model pc105 -layout jp -variant OADG109A
|
||||
./xrdp-genkeymap ../instfiles/km-00000411.ini
|
||||
|
||||
# Polish 'pl' 0x0415
|
||||
# Polish 'pl' 0x00000415
|
||||
setxkbmap -model pc104 -layout pl
|
||||
./xrdp-genkeymap ../instfiles/km-0415.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000415.ini
|
||||
|
||||
# Russia 'ru' 0x0419
|
||||
# Russia 'ru' 0x00000419
|
||||
setxkbmap -model pc104 -layout ru
|
||||
./xrdp-genkeymap ../instfiles/km-0419.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000419.ini
|
||||
|
||||
# Sweden 'se' 0x041d
|
||||
# Sweden 'se' 0x0000041d
|
||||
setxkbmap -model pc104 -layout se
|
||||
./xrdp-genkeymap ../instfiles/km-041d.ini
|
||||
./xrdp-genkeymap ../instfiles/km-0000041d.ini
|
||||
|
||||
# Portuguese -PT 'pt-pt' 0x0816
|
||||
# Portuguese -PT 'pt-pt' 0x00000816
|
||||
setxkbmap -model pc104 -layout pt
|
||||
./xrdp-genkeymap ../instfiles/km-0816.ini
|
||||
./xrdp-genkeymap ../instfiles/km-00000816.ini
|
||||
|
||||
# set back to en-us
|
||||
setxkbmap -model pc104 -layout us
|
||||
|
@ -21,15 +21,15 @@
|
||||
|
||||
Updated Jay Sorg 2009
|
||||
|
||||
cs czech 0x405
|
||||
de german 0x407
|
||||
en-us us english 0x409
|
||||
fr french 0x40c
|
||||
it italy 0x410
|
||||
cs Czech 0x405
|
||||
de German 0x407
|
||||
en-us US English 0x409
|
||||
fr French 0x40c
|
||||
it Italian 0x410
|
||||
br Portuguese (Brazil) 0x416
|
||||
ru russian 0x419
|
||||
se swedish 0x41d
|
||||
en-uk uk english 0x809
|
||||
ru Russian 0x419
|
||||
se Swedish 0x41d
|
||||
en-uk UK English 0x809
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -48,7 +48,10 @@ int main(int argc, char **argv)
|
||||
char text[256];
|
||||
char *displayname = NULL;
|
||||
char *outfname;
|
||||
char *sections[8] = {"noshift", "shift", "altgr", "shiftaltgr", "capslock", "capslockaltgr", "shiftcapslock", "shiftcapslockaltgr"};
|
||||
const char *sections[8] = {
|
||||
"noshift", "shift", "altgr", "shiftaltgr",
|
||||
"capslock", "capslockaltgr", "shiftcapslock", "shiftcapslockaltgr"
|
||||
};
|
||||
int states[8] = {0, 1, 0x80, 0x81, 2, 0x82, 3, 0x83};
|
||||
int i;
|
||||
int idx;
|
||||
@ -70,7 +73,7 @@ int main(int argc, char **argv)
|
||||
if (argc != 2)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s out_filename\n", programname);
|
||||
fprintf(stderr, "Example: %s /etc/xrdp/km-0409.ini\n", programname);
|
||||
fprintf(stderr, "Example: %s /etc/xrdp/km-00000409.ini\n", programname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -3,9 +3,9 @@ Creating a new keymap file.
|
||||
|
||||
The names of the files are of the format;
|
||||
|
||||
km-xxxx.ini
|
||||
km-xxxxxxxx.ini
|
||||
|
||||
where the xxxx is replaced by the hex number of the layout of interest.
|
||||
where the xxxxxxxx is replaced by the hex number of the layout of interest.
|
||||
|
||||
The files have 8 sections;
|
||||
|
||||
@ -33,7 +33,7 @@ Key63=65450:42
|
||||
|
||||
To create a new file run "xrdp-genkeymap <filename>"
|
||||
|
||||
Example: ./xrdp-genkeymap /etc/xrdp/km-0409.ini
|
||||
Example: ./xrdp-genkeymap /etc/xrdp/km-00000409.ini
|
||||
|
||||
Note: You need to have enough rights to be able to write to the
|
||||
/etc/xrdp directory.
|
||||
|
@ -11,11 +11,11 @@ You can build sesman without pam, there is a Makefile parameter
|
||||
for that.
|
||||
I also have a replacement ssl_calls.c to avoid the openssl dependency
|
||||
email me(Jay) for it or see http://server1.xrdp.org/xrdp/openssl.
|
||||
Due to the licence, I can't include it in this project.
|
||||
Due to the license, I can't include it in this project.
|
||||
|
||||
http://server1.xrdp.org/xrdp/openssl/
|
||||
|
||||
unpackage the tarball
|
||||
unpack the tarball
|
||||
|
||||
tar -zxvf xrdp-0.1.tar.gz
|
||||
|
||||
@ -28,7 +28,7 @@ run make
|
||||
as root, run make install
|
||||
|
||||
This will install most of the files in /usr/local/xrdp.
|
||||
Some files install in /etc/xrdp. These are configuation
|
||||
Some files install in /etc/xrdp. These are configuration
|
||||
files.
|
||||
|
||||
files and location
|
||||
|
@ -1,38 +1,75 @@
|
||||
EXTRA_DIST = xrdp.sh km-0407.ini km-0409.ini km-040c.ini km-0410.ini km-0419.ini km-041d.ini km-0816.ini \
|
||||
xrdp-sesman.service \
|
||||
xrdp.service
|
||||
|
||||
SUBDIRS = \
|
||||
pam.d \
|
||||
init.d \
|
||||
default \
|
||||
pulse
|
||||
|
||||
if HAVE_SYSTEMD
|
||||
systemdsystemunit_DATA = \
|
||||
xrdp-sesman.service \
|
||||
xrdp.service
|
||||
endif
|
||||
EXTRA_DIST = \
|
||||
keymap-names.txt \
|
||||
xrdp.sh \
|
||||
xrdp-sesman.service \
|
||||
xrdp.service
|
||||
|
||||
#
|
||||
# files for all platforms
|
||||
#
|
||||
startscriptdir=$(sysconfdir)/xrdp
|
||||
|
||||
startscript_DATA = \
|
||||
xrdp.sh \
|
||||
km-0407.ini \
|
||||
km-0409.ini \
|
||||
km-040c.ini \
|
||||
km-0410.ini \
|
||||
km-0411.ini \
|
||||
km-0415.ini \
|
||||
km-0419.ini \
|
||||
km-041d.ini \
|
||||
km-0816.ini \
|
||||
km-e0010411.ini \
|
||||
km-e0200411.ini \
|
||||
km-e0210411.ini
|
||||
dist_startscript_DATA = \
|
||||
km-00000407.ini \
|
||||
km-00000409.ini \
|
||||
km-0000040a.ini \
|
||||
km-0000040b.ini \
|
||||
km-0000040c.ini \
|
||||
km-00000410.ini \
|
||||
km-00000411.ini \
|
||||
km-00000412.ini \
|
||||
km-00000414.ini \
|
||||
km-00000415.ini \
|
||||
km-00000416.ini \
|
||||
km-00000419.ini \
|
||||
km-0000041d.ini \
|
||||
km-00000807.ini \
|
||||
km-00000809.ini \
|
||||
km-0000080c.ini \
|
||||
km-00000813.ini \
|
||||
km-00000816.ini \
|
||||
km-0000100c.ini
|
||||
|
||||
#
|
||||
# platform specific files
|
||||
#
|
||||
SUBDIRS =
|
||||
if LINUX
|
||||
SUBDIRS += \
|
||||
pam.d \
|
||||
pulse
|
||||
dist_startscript_SCRIPTS = xrdp.sh
|
||||
if HAVE_SYSTEMD
|
||||
dist_systemdsystemunit_DATA = \
|
||||
xrdp-sesman.service \
|
||||
xrdp.service
|
||||
else
|
||||
SUBDIRS += \
|
||||
default \
|
||||
init.d
|
||||
endif # HAVE_SYSTEMD
|
||||
endif # LINUX
|
||||
|
||||
if FREEBSD
|
||||
SUBDIRS += \
|
||||
pam.d \
|
||||
rc.d \
|
||||
pulse
|
||||
endif
|
||||
|
||||
#
|
||||
# install-data-hook for each platform
|
||||
#
|
||||
if LINUX
|
||||
# must be tab below
|
||||
install-data-hook:
|
||||
chmod 755 $(DESTDIR)$(sysconfdir)/xrdp/xrdp.sh
|
||||
chmod 755 $(DESTDIR)$(sysconfdir)/init.d/xrdp
|
||||
sed -i 's|__BASE__|$(prefix)|' $(DESTDIR)$(sysconfdir)/init.d/xrdp;
|
||||
if [ -f $(DESTDIR)$(sysconfdir)/init.d/xrdp ]; then \
|
||||
sed -i 's|__BASE__|$(prefix)|' $(DESTDIR)$(sysconfdir)/init.d/xrdp; \
|
||||
fi
|
||||
endif
|
||||
|
||||
if FREEBSD
|
||||
# must be tab below
|
||||
install-data-hook:
|
||||
sed -i '' 's|%%PREFIX%%|$(prefix)|g' $(DESTDIR)$(sysconfdir)/rc.d/xrdp
|
||||
endif
|
||||
|
@ -1,3 +1,2 @@
|
||||
EXTRA_DIST = xrdp
|
||||
startscriptdir=$(sysconfdir)/default
|
||||
startscript_DATA = xrdp
|
||||
startscriptdir = $(sysconfdir)/default
|
||||
dist_startscript_DATA = xrdp
|
||||
|
@ -1,4 +1,2 @@
|
||||
EXTRA_DIST = xrdp
|
||||
startscriptdir=$(sysconfdir)/init.d
|
||||
startscript_DATA = xrdp
|
||||
|
||||
startscriptdir = $(sysconfdir)/init.d
|
||||
dist_startscript_SCRIPTS = xrdp
|
||||
|
@ -18,12 +18,11 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
BASE=__BASE__
|
||||
DAEMON=${BASE}/sbin/xrdp
|
||||
SDAEMON=${BASE}/sbin/xrdp-sesman
|
||||
PIDDIR=/var/run/xrdp/
|
||||
PIDDIR=/var/run/
|
||||
SESMAN_START=yes
|
||||
#USERID=xrdp
|
||||
# the X11rdp backend only works as root at the moment - GH 20/03/2013
|
||||
USERID=root
|
||||
RSAKEYS=/etc/xrdp/rsakeys.ini
|
||||
NAME=xrdp
|
||||
DESC="Remote Desktop Protocol server"
|
||||
|
||||
@ -67,18 +66,6 @@ if [ "$(id -u)" = "0" ]; then
|
||||
mkdir $PIDDIR
|
||||
fi
|
||||
chown $USERID:$USERID $PIDDIR
|
||||
|
||||
# Check for rsa key
|
||||
if [ ! -f $RSAKEYS ] ; then
|
||||
log_action_begin_msg "Generating xrdp RSA keys..."
|
||||
(umask 077 ; xrdp-keygen xrdp $RSAKEYS)
|
||||
chown $USERID:$USERID $RSAKEYS
|
||||
if [ ! -f $RSAKEYS ] ; then
|
||||
log_action_end_msg 1 "could not create $RSAKEYS"
|
||||
exit 1
|
||||
fi
|
||||
log_action_end_msg 0 "done"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@ -139,7 +126,7 @@ case "$1" in
|
||||
;;
|
||||
force-stop)
|
||||
$0 stop
|
||||
# because it doesn't allways die the right way
|
||||
# because it doesn't always die the right way
|
||||
force_stop
|
||||
;;
|
||||
restart|force-reload)
|
||||
|
124
instfiles/keymap-names.txt
Normal file
124
instfiles/keymap-names.txt
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
0x00000436 af Afrikaans
|
||||
0x0000041C sq Albanian
|
||||
0x00000001 ar Arabic
|
||||
0x00000401 ar-sa Arabic (Saudi Arabia)
|
||||
0x00000801 ar-iq Arabic (Iraq)
|
||||
0x00000C01 ar-eg Arabic (Egypt)
|
||||
0x00001001 ar-ly Arabic (Libya)
|
||||
0x00001401 ar-dz Arabic (Algeria)
|
||||
0x00001801 ar-ma Arabic (Morocco)
|
||||
0x00001C01 ar-tn Arabic (Tunisia)
|
||||
0x00002001 ar-om Arabic (Oman)
|
||||
0x00002401 ar-ye Arabic (Yemen)
|
||||
0x00002801 ar-sy Arabic (Syria)
|
||||
0x00002C01 ar-jo Arabic (Jordan)
|
||||
0x00003001 ar-lb Arabic (Lebanon)
|
||||
0x00003401 ar-kw Arabic (Kuwait)
|
||||
0x00003801 ar-ae Arabic (U.A.E.)
|
||||
0x00003C01 ar-bh Arabic (Bahrain)
|
||||
0x00004001 ar-qa Arabic (Qatar)
|
||||
0x0000042D eu Basque
|
||||
0x00000402 bg Bulgarian
|
||||
0x00000423 be Belarusian
|
||||
0x00000403 ca Catalan
|
||||
0x00000004 zh Chinese
|
||||
0x00000404 zh-tw Chinese (Taiwan)
|
||||
0x00000804 zh-cn Chinese (China)
|
||||
0x00000C04 zh-hk Chinese (Hong Kong SAR)
|
||||
0x00001004 zh-sg Chinese (Singapore)
|
||||
0x0000041A hr Croatian
|
||||
0x00000405 cs Czech
|
||||
0x00000406 da Danish
|
||||
0x00000413 nl Dutch (Netherlands)
|
||||
0x00000813 nl-be Dutch (Belgium)
|
||||
0x00000009 en English
|
||||
0x00000409 en-us English (United States)
|
||||
0x00000809 en-gb English (United Kingdom)
|
||||
0x00000C09 en-au English (Australia)
|
||||
0x00001009 en-ca English (Canada)
|
||||
0x00001409 en-nz English (New Zealand)
|
||||
0x00001809 en-ie English (Ireland)
|
||||
0x00001C09 en-za English (South Africa)
|
||||
0x00002009 en-jm English (Jamaica)
|
||||
0x00002809 en-bz English (Belize)
|
||||
0x00002C09 en-tt English (Trinidad)
|
||||
0x00000425 et Estonian
|
||||
0x00000438 fo Faeroese
|
||||
0x00000429 fa Farsi
|
||||
0x0000040B fi Finnish
|
||||
0x0000040C fr French (France)
|
||||
0x0000080C fr-be French (Belgium)
|
||||
0x00000C0C fr-ca French (Canada)
|
||||
0x0000100C fr-ch French (Switzerland)
|
||||
0x0000140C fr-lu French (Luxembourg)
|
||||
0x0000043C gd Gaelic
|
||||
0x00000407 de German (Germany)
|
||||
0x00000807 de-ch German (Switzerland)
|
||||
0x00000C07 de-at German (Austria)
|
||||
0x00001007 de-lu German (Luxembourg)
|
||||
0x00001407 de-li German (Liechtenstein)
|
||||
0x00000408 el Greek
|
||||
0x0000040D he Hebrew
|
||||
0x00000439 hi Hindi
|
||||
0x0000040E hu Hungarian
|
||||
0x0000040F is Icelandic
|
||||
0x00000421 in Indonesian
|
||||
0x00000410 it Italian (Italy)
|
||||
0x00000810 it-ch Italian (Switzerland)
|
||||
0x00000411 ja Japanese
|
||||
0x00000412 ko Korean
|
||||
0x00000426 lv Latvian
|
||||
0x00000427 lt Lithuanian
|
||||
0x0000042F mk FYRO Macedonian
|
||||
0x0000043E ms Malay (Malaysia)
|
||||
0x0000043A mt Maltese
|
||||
0x00000414 no Norwegian (Bokmal)
|
||||
0x00000814 no Norwegian (Nynorsk)
|
||||
0x00000415 pl Polish
|
||||
0x00000416 pt-br Portuguese (Brazil)
|
||||
0x00000816 pt Portuguese (Portugal)
|
||||
0x00000417 rm Rhaeto-Romanic
|
||||
0x00000418 ro Romanian
|
||||
0x00000818 ro-mo Romanian (Moldova)
|
||||
0x00000419 ru Russian
|
||||
0x00000819 ru-mo Russian (Moldova)
|
||||
0x00000C1A sr Serbian (Cyrillic)
|
||||
0x0000081A sr Serbian (Latin)
|
||||
0x0000041B sk Slovak
|
||||
0x00000424 sl Slovenian
|
||||
0x0000042E sb Sorbian
|
||||
0x0000040A es Spanish (Traditional Sort)
|
||||
0x0000080A es-mx Spanish (Mexico)
|
||||
0x00000C0A es Spanish (International Sort)
|
||||
0x0000100A es-gt Spanish (Guatemala)
|
||||
0x0000140A es-cr Spanish (Costa Rica)
|
||||
0x0000180A es-pa Spanish (Panama)
|
||||
0x00001C0A es-do Spanish (Dominican Republic)
|
||||
0x0000200A es-ve Spanish (Venezuela)
|
||||
0x0000240A es-co Spanish (Colombia)
|
||||
0x0000280A es-pe Spanish (Peru)
|
||||
0x00002C0A es-ar Spanish (Argentina)
|
||||
0x0000300A es-ec Spanish (Ecuador)
|
||||
0x0000340A es-cl Spanish (Chile)
|
||||
0x0000380A es-uy Spanish (Uruguay)
|
||||
0x00003C0A es-py Spanish (Paraguay)
|
||||
0x0000400A es-bo Spanish (Bolivia)
|
||||
0x0000440A es-sv Spanish (El Salvador)
|
||||
0x0000480A es-hn Spanish (Honduras)
|
||||
0x00004C0A es-ni Spanish (Nicaragua)
|
||||
0x0000500A es-pr Spanish (Puerto Rico)
|
||||
0x00000430 sx Sutu
|
||||
0x0000041D sv Swedish
|
||||
0x0000081D sv-fi Swedish (Finland)
|
||||
0x0000041E th Thai
|
||||
0x00000431 ts Tsonga
|
||||
0x00000432 tn Tswana
|
||||
0x0000041F tr Turkish
|
||||
0x00000422 uk Ukrainian
|
||||
0x00000420 ur Urdu
|
||||
0x0000042A vi Vietnamese
|
||||
0x00000434 xh Xhosa
|
||||
0x0000043D ji Yiddish
|
||||
0x00000435 zu Zulu
|
||||
|
659
instfiles/km-0000040a.ini
Normal file
659
instfiles/km-0000040a.ini
Normal file
@ -0,0 +1,659 @@
|
||||
[noshift]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=39:39
|
||||
Key21=161:161
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=65104:96
|
||||
Key35=43:43
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=241:241
|
||||
Key48=65105:180
|
||||
Key49=186:186
|
||||
Key50=65505:0
|
||||
Key51=231:231
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65364:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=0:0
|
||||
Key94=60:60
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key114=0:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=65383:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shift]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=183:183
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=191:191
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=65106:94
|
||||
Key35=42:42
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=209:209
|
||||
Key48=65111:168
|
||||
Key49=170:170
|
||||
Key50=65505:0
|
||||
Key51=199:199
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65364:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65273:0
|
||||
Key78=65300:0
|
||||
Key79=65463:55
|
||||
Key80=65464:56
|
||||
Key81=65465:57
|
||||
Key82=65453:45
|
||||
Key83=65460:52
|
||||
Key84=65461:53
|
||||
Key85=65462:54
|
||||
Key86=65451:43
|
||||
Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=0:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key114=0:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=65383:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[altgr]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=124:124
|
||||
Key11=64:64
|
||||
Key12=35:35
|
||||
Key13=126:126
|
||||
Key14=189:189
|
||||
Key15=172:172
|
||||
Key16=123:123
|
||||
Key17=91:91
|
||||
Key18=93:93
|
||||
Key19=125:125
|
||||
Key20=92:92
|
||||
Key21=126:126
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=64:64
|
||||
Key25=435:322
|
||||
Key26=8364:8364
|
||||
Key27=182:182
|
||||
Key28=956:359
|
||||
Key29=2299:8592
|
||||
Key30=2302:8595
|
||||
Key31=2301:8594
|
||||
Key32=248:248
|
||||
Key33=254:254
|
||||
Key34=91:91
|
||||
Key35=93:93
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=230:230
|
||||
Key39=223:223
|
||||
Key40=240:240
|
||||
Key41=496:273
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=106:106
|
||||
Key45=930:312
|
||||
Key46=435:322
|
||||
Key47=126:126
|
||||
Key48=123:123
|
||||
Key49=92:92
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=162:162
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
Key58=181:181
|
||||
Key59=2211:0
|
||||
Key60=183:183
|
||||
Key61=65120:0
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65364:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=0:0
|
||||
Key94=124:124
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=0:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key114=0:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=65383:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslock]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=39:39
|
||||
Key21=161:161
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=65104:96
|
||||
Key35=43:43
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=209:209
|
||||
Key48=65105:180
|
||||
Key49=186:186
|
||||
Key50=65505:0
|
||||
Key51=199:199
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65364:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=0:0
|
||||
Key94=60:60
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key114=0:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=65383:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftcapslock]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=183:183
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=191:191
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=65106:94
|
||||
Key35=42:42
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=241:241
|
||||
Key48=65111:168
|
||||
Key49=170:170
|
||||
Key50=65505:0
|
||||
Key51=231:231
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65364:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65273:0
|
||||
Key78=65300:0
|
||||
Key79=65463:55
|
||||
Key80=65464:56
|
||||
Key81=65465:57
|
||||
Key82=65453:45
|
||||
Key83=65460:52
|
||||
Key84=65461:53
|
||||
Key85=65462:54
|
||||
Key86=65451:43
|
||||
Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=0:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key114=0:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=65383:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
@ -120,9 +120,9 @@ Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key134=0:0
|
||||
@ -252,9 +252,9 @@ Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key134=0:0
|
||||
@ -384,9 +384,9 @@ Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key134=0:0
|
||||
@ -516,9 +516,9 @@ Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key134=0:0
|
||||
@ -648,9 +648,9 @@ Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key134=0:0
|
||||
@ -780,9 +780,9 @@ Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key134=0:0
|
||||
@ -912,9 +912,9 @@ Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key134=0:0
|
||||
@ -1044,9 +1044,9 @@ Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key129=65315:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key131=65314:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key134=0:0
|
File diff suppressed because it is too large
Load Diff
@ -11,8 +11,8 @@ Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key20=43:43
|
||||
Key21=65105:180
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
@ -25,8 +25,8 @@ Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key34=229:229
|
||||
Key35=65111:168
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
@ -38,11 +38,11 @@ Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key47=246:246
|
||||
Key48=228:228
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key51=39:39
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
@ -52,12 +52,12 @@ Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -104,17 +104,17 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=92:92
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
@ -124,7 +124,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -136,15 +136,15 @@ Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key13=164:164
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=65104:96
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
@ -157,8 +157,8 @@ Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key34=197:197
|
||||
Key35=65106:94
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
@ -170,11 +170,11 @@ Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key47=214:214
|
||||
Key48=196:196
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key51=42:42
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
@ -182,12 +182,12 @@ Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key64=65032:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
@ -214,7 +214,7 @@ Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key91=65452:44
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
@ -236,17 +236,17 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=95:95
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
@ -256,7 +256,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -265,63 +265,63 @@ Key137=0:0
|
||||
[altgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key10=161:161
|
||||
Key11=64:64
|
||||
Key12=163:163
|
||||
Key13=36:36
|
||||
Key14=8364:8364
|
||||
Key15=165:165
|
||||
Key16=123:123
|
||||
Key17=91:91
|
||||
Key18=93:93
|
||||
Key19=125:125
|
||||
Key20=92:92
|
||||
Key21=177:177
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key24=64:64
|
||||
Key25=435:322
|
||||
Key26=8364:8364
|
||||
Key27=174:174
|
||||
Key28=254:254
|
||||
Key29=2299:8592
|
||||
Key30=2302:8595
|
||||
Key31=2301:8594
|
||||
Key32=5053:339
|
||||
Key33=254:254
|
||||
Key34=65111:168
|
||||
Key35=65107:126
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key38=170:170
|
||||
Key39=223:223
|
||||
Key40=240:240
|
||||
Key41=496:273
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=65121:0
|
||||
Key45=930:312
|
||||
Key46=435:322
|
||||
Key47=248:248
|
||||
Key48=230:230
|
||||
Key49=182:182
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key51=180:180
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=169:169
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key58=181:181
|
||||
Key59=65115:184
|
||||
Key60=183:183
|
||||
Key61=65120:0
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -368,10 +368,10 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
@ -388,7 +388,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -397,62 +397,62 @@ Key137=0:0
|
||||
[shiftaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key10=185:185
|
||||
Key11=178:178
|
||||
Key12=179:179
|
||||
Key13=188:188
|
||||
Key14=162:162
|
||||
Key15=2757:8541
|
||||
Key16=247:247
|
||||
Key17=171:171
|
||||
Key18=187:187
|
||||
Key19=176:176
|
||||
Key20=191:191
|
||||
Key21=172:172
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key24=2009:937
|
||||
Key25=419:321
|
||||
Key26=162:162
|
||||
Key27=174:174
|
||||
Key28=222:222
|
||||
Key29=165:165
|
||||
Key30=2300:8593
|
||||
Key31=697:305
|
||||
Key32=5052:338
|
||||
Key33=222:222
|
||||
Key34=65112:176
|
||||
Key35=65114:711
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key38=186:186
|
||||
Key39=167:167
|
||||
Key40=208:208
|
||||
Key41=170:170
|
||||
Key42=957:330
|
||||
Key43=673:294
|
||||
Key44=65122:0
|
||||
Key45=38:38
|
||||
Key46=419:321
|
||||
Key47=216:216
|
||||
Key48=198:198
|
||||
Key49=190:190
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key51=215:215
|
||||
Key52=60:60
|
||||
Key53=62:62
|
||||
Key54=169:169
|
||||
Key55=2768:8216
|
||||
Key56=2769:8217
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key58=186:186
|
||||
Key59=65116:731
|
||||
Key60=65110:729
|
||||
Key61=65110:729
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key65=32:32
|
||||
Key64=65032:0
|
||||
Key65=160:160
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
@ -478,7 +478,7 @@ Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key91=65452:44
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=166:166
|
||||
@ -500,10 +500,10 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
@ -520,7 +520,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -539,8 +539,8 @@ Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key20=43:43
|
||||
Key21=65105:180
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
@ -553,8 +553,8 @@ Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key34=197:197
|
||||
Key35=65111:168
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
@ -566,11 +566,11 @@ Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key47=214:214
|
||||
Key48=196:196
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key51=39:39
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
@ -580,12 +580,12 @@ Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -632,10 +632,10 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
@ -652,159 +652,26 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslockaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=124:124
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftcapslock]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key13=164:164
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=65104:96
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
@ -817,8 +684,8 @@ Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key34=229:229
|
||||
Key35=65106:94
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
@ -830,11 +697,11 @@ Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key47=246:246
|
||||
Key48=228:228
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key51=42:42
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
@ -842,12 +709,12 @@ Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key64=65032:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
@ -874,7 +741,7 @@ Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key91=65452:44
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
@ -896,10 +763,10 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key116=65312:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
@ -916,140 +783,9 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftcapslockaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65463:55
|
||||
Key80=65464:56
|
||||
Key81=65465:57
|
||||
Key82=65453:45
|
||||
Key83=65460:52
|
||||
Key84=65461:53
|
||||
Key85=65462:54
|
||||
Key86=65451:43
|
||||
Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=166:166
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
Key117=0:0
|
||||
Key118=269025153:0
|
||||
Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
@ -12,7 +12,7 @@ Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key21=61:61
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
@ -25,8 +25,8 @@ Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key34=91:91
|
||||
Key35=93:93
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
@ -39,10 +39,10 @@ Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key48=39:39
|
||||
Key49=96:96
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key51=35:35
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
@ -57,7 +57,7 @@ Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -85,7 +85,7 @@ Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=60:60
|
||||
Key94=92:92
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
@ -104,7 +104,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -114,7 +114,7 @@ Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=92:92
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
@ -124,7 +124,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -135,16 +135,16 @@ Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key12=163:163
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key15=94:94
|
||||
Key16=38:38
|
||||
Key17=42:42
|
||||
Key18=40:40
|
||||
Key19=41:41
|
||||
Key20=95:95
|
||||
Key21=43:43
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
@ -157,8 +157,8 @@ Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key34=123:123
|
||||
Key35=125:125
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
@ -170,11 +170,11 @@ Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key47=58:58
|
||||
Key48=64:64
|
||||
Key49=172:172
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key51=126:126
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
@ -217,7 +217,7 @@ Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
Key94=124:124
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
@ -236,7 +236,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65312:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -246,7 +246,7 @@ Key119=269025093:0
|
||||
Key120=269025094:0
|
||||
Key121=269025095:0
|
||||
Key122=269025096:0
|
||||
Key123=95:95
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
@ -256,7 +256,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -265,63 +265,63 @@ Key137=0:0
|
||||
[altgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key10=185:185
|
||||
Key11=178:178
|
||||
Key12=179:179
|
||||
Key13=8364:8364
|
||||
Key14=189:189
|
||||
Key15=190:190
|
||||
Key16=123:123
|
||||
Key17=91:91
|
||||
Key18=93:93
|
||||
Key19=125:125
|
||||
Key20=92:92
|
||||
Key21=65115:184
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key24=64:64
|
||||
Key25=435:322
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key27=182:182
|
||||
Key28=956:359
|
||||
Key29=2299:8592
|
||||
Key30=2302:8595
|
||||
Key31=2301:8594
|
||||
Key32=248:248
|
||||
Key33=254:254
|
||||
Key34=65111:168
|
||||
Key35=65107:126
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key38=230:230
|
||||
Key39=223:223
|
||||
Key40=240:240
|
||||
Key41=496:273
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=65121:0
|
||||
Key45=930:312
|
||||
Key46=435:322
|
||||
Key47=65105:180
|
||||
Key48=65106:94
|
||||
Key49=124:124
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key51=65104:96
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=162:162
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key58=181:181
|
||||
Key59=2211:0
|
||||
Key60=183:183
|
||||
Key61=65120:0
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -368,7 +368,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -388,7 +388,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -397,58 +397,58 @@ Key137=0:0
|
||||
[shiftaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key10=161:161
|
||||
Key11=2755:8539
|
||||
Key12=163:163
|
||||
Key13=188:188
|
||||
Key14=2756:8540
|
||||
Key15=2757:8541
|
||||
Key16=2758:8542
|
||||
Key17=2761:8482
|
||||
Key18=177:177
|
||||
Key19=176:176
|
||||
Key20=191:191
|
||||
Key21=65116:731
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key24=2009:937
|
||||
Key25=419:321
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key27=174:174
|
||||
Key28=940:358
|
||||
Key29=165:165
|
||||
Key30=2300:8593
|
||||
Key31=697:305
|
||||
Key32=216:216
|
||||
Key33=222:222
|
||||
Key34=65112:176
|
||||
Key35=65108:175
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key38=198:198
|
||||
Key39=167:167
|
||||
Key40=208:208
|
||||
Key41=170:170
|
||||
Key42=957:330
|
||||
Key43=673:294
|
||||
Key44=65122:0
|
||||
Key45=38:38
|
||||
Key46=419:321
|
||||
Key47=65113:733
|
||||
Key48=65114:711
|
||||
Key49=124:124
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key51=65109:728
|
||||
Key52=60:60
|
||||
Key53=62:62
|
||||
Key54=169:169
|
||||
Key55=2768:8216
|
||||
Key56=2769:8217
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key58=186:186
|
||||
Key59=215:215
|
||||
Key60=247:247
|
||||
Key61=65110:729
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
@ -500,7 +500,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65312:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -520,7 +520,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -540,7 +540,7 @@ Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key21=61:61
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
@ -553,8 +553,8 @@ Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key34=91:91
|
||||
Key35=93:93
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
@ -567,10 +567,10 @@ Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key48=39:39
|
||||
Key49=96:96
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key51=35:35
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
@ -585,7 +585,7 @@ Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -613,7 +613,7 @@ Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=60:60
|
||||
Key94=92:92
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
@ -632,7 +632,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -652,7 +652,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -661,63 +661,63 @@ Key137=0:0
|
||||
[capslockaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=45:45
|
||||
Key21=94:94
|
||||
Key10=185:185
|
||||
Key11=178:178
|
||||
Key12=179:179
|
||||
Key13=8364:8364
|
||||
Key14=189:189
|
||||
Key15=190:190
|
||||
Key16=123:123
|
||||
Key17=91:91
|
||||
Key18=93:93
|
||||
Key19=125:125
|
||||
Key20=92:92
|
||||
Key21=65115:184
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key24=64:64
|
||||
Key25=419:321
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=64:64
|
||||
Key35=91:91
|
||||
Key27=182:182
|
||||
Key28=940:358
|
||||
Key29=2299:8592
|
||||
Key30=2302:8595
|
||||
Key31=2301:8594
|
||||
Key32=216:216
|
||||
Key33=222:222
|
||||
Key34=65111:168
|
||||
Key35=65107:126
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=59:59
|
||||
Key48=58:58
|
||||
Key49=65322:0
|
||||
Key38=198:198
|
||||
Key39=223:223
|
||||
Key40=208:208
|
||||
Key41=464:272
|
||||
Key42=957:330
|
||||
Key43=673:294
|
||||
Key44=65121:0
|
||||
Key45=930:312
|
||||
Key46=419:321
|
||||
Key47=65105:180
|
||||
Key48=65106:94
|
||||
Key49=124:124
|
||||
Key50=65505:0
|
||||
Key51=93:93
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key51=65104:96
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=162:162
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=47:47
|
||||
Key58=924:0
|
||||
Key59=2211:0
|
||||
Key60=183:183
|
||||
Key61=65120:0
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65328:0
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
@ -764,7 +764,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65514:0
|
||||
Key113=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -784,7 +784,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=165:165
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -795,16 +795,16 @@ Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key12=163:163
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key15=94:94
|
||||
Key16=38:38
|
||||
Key17=42:42
|
||||
Key18=40:40
|
||||
Key19=41:41
|
||||
Key20=95:95
|
||||
Key21=43:43
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
@ -817,8 +817,8 @@ Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key34=123:123
|
||||
Key35=125:125
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
@ -830,11 +830,11 @@ Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key47=58:58
|
||||
Key48=64:64
|
||||
Key49=172:172
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key51=126:126
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
@ -877,7 +877,7 @@ Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=65377:0
|
||||
Key93=0:0
|
||||
Key94=62:62
|
||||
Key94=124:124
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
@ -896,7 +896,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65312:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -916,7 +916,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
@ -925,58 +925,58 @@ Key137=0:0
|
||||
[shiftcapslockaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=39:39
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=48:48
|
||||
Key20=61:61
|
||||
Key21=126:126
|
||||
Key10=161:161
|
||||
Key11=2755:8539
|
||||
Key12=163:163
|
||||
Key13=188:188
|
||||
Key14=2756:8540
|
||||
Key15=2757:8541
|
||||
Key16=2758:8542
|
||||
Key17=2761:8482
|
||||
Key18=177:177
|
||||
Key19=176:176
|
||||
Key20=191:191
|
||||
Key21=65116:731
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key24=2009:937
|
||||
Key25=435:322
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=96:96
|
||||
Key35=123:123
|
||||
Key27=174:174
|
||||
Key28=956:359
|
||||
Key29=165:165
|
||||
Key30=2300:8593
|
||||
Key31=697:305
|
||||
Key32=248:248
|
||||
Key33=254:254
|
||||
Key34=65112:176
|
||||
Key35=65108:175
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=43:43
|
||||
Key48=42:42
|
||||
Key49=65322:0
|
||||
Key38=230:230
|
||||
Key39=167:167
|
||||
Key40=240:240
|
||||
Key41=170:170
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=65122:0
|
||||
Key45=38:38
|
||||
Key46=435:322
|
||||
Key47=65113:733
|
||||
Key48=65114:711
|
||||
Key49=124:124
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=122:122
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key51=65109:728
|
||||
Key52=60:60
|
||||
Key53=62:62
|
||||
Key54=169:169
|
||||
Key55=2768:8216
|
||||
Key56=2769:8217
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key58=186:186
|
||||
Key59=215:215
|
||||
Key60=247:247
|
||||
Key61=65110:729
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
@ -1028,7 +1028,7 @@ Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65512:0
|
||||
Key113=65312:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65516:0
|
||||
@ -1048,7 +1048,7 @@ Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=124:124
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
659
instfiles/km-0000100c.ini
Normal file
659
instfiles/km-0000100c.ini
Normal file
@ -0,0 +1,659 @@
|
||||
[noshift]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=39:39
|
||||
Key21=65106:94
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=122:122
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=232:232
|
||||
Key35=65111:168
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=233:233
|
||||
Key48=224:224
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=36:36
|
||||
Key52=121:121
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=65406:0
|
||||
Key94=60:60
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65027:0
|
||||
Key114=0:0
|
||||
Key115=0:0
|
||||
Key116=0:0
|
||||
Key117=0:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shift]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=43:43
|
||||
Key11=34:34
|
||||
Key12=42:42
|
||||
Key13=231:231
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=65104:96
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=90:90
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=252:252
|
||||
Key35=33:33
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=246:246
|
||||
Key48=228:228
|
||||
Key49=176:176
|
||||
Key50=65505:0
|
||||
Key51=163:163
|
||||
Key52=89:89
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65273:0
|
||||
Key78=65300:0
|
||||
Key79=65463:55
|
||||
Key80=65464:56
|
||||
Key81=65465:57
|
||||
Key82=65453:45
|
||||
Key83=65460:52
|
||||
Key84=65461:53
|
||||
Key85=65462:54
|
||||
Key86=65451:43
|
||||
Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=0:0
|
||||
Key93=65406:0
|
||||
Key94=62:62
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65312:0
|
||||
Key114=0:0
|
||||
Key115=0:0
|
||||
Key116=0:0
|
||||
Key117=0:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[altgr]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=124:124
|
||||
Key11=64:64
|
||||
Key12=35:35
|
||||
Key13=188:188
|
||||
Key14=189:189
|
||||
Key15=172:172
|
||||
Key16=166:166
|
||||
Key17=162:162
|
||||
Key18=93:93
|
||||
Key19=125:125
|
||||
Key20=65105:180
|
||||
Key21=65107:126
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=64:64
|
||||
Key25=435:322
|
||||
Key26=8364:8364
|
||||
Key27=182:182
|
||||
Key28=956:359
|
||||
Key29=2299:8592
|
||||
Key30=2302:8595
|
||||
Key31=2301:8594
|
||||
Key32=248:248
|
||||
Key33=254:254
|
||||
Key34=91:91
|
||||
Key35=93:93
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=230:230
|
||||
Key39=223:223
|
||||
Key40=240:240
|
||||
Key41=496:273
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=106:106
|
||||
Key45=930:312
|
||||
Key46=435:322
|
||||
Key47=65105:180
|
||||
Key48=123:123
|
||||
Key49=172:172
|
||||
Key50=65505:0
|
||||
Key51=125:125
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=162:162
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
Key58=181:181
|
||||
Key59=2211:0
|
||||
Key60=183:183
|
||||
Key61=65120:0
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=65406:0
|
||||
Key94=92:92
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=0:0
|
||||
Key112=65455:47
|
||||
Key113=65027:0
|
||||
Key114=0:0
|
||||
Key115=0:0
|
||||
Key116=0:0
|
||||
Key117=0:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslock]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=49:49
|
||||
Key11=50:50
|
||||
Key12=51:51
|
||||
Key13=52:52
|
||||
Key14=53:53
|
||||
Key15=54:54
|
||||
Key16=55:55
|
||||
Key17=56:56
|
||||
Key18=57:57
|
||||
Key19=48:48
|
||||
Key20=39:39
|
||||
Key21=65106:94
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=81:81
|
||||
Key25=87:87
|
||||
Key26=69:69
|
||||
Key27=82:82
|
||||
Key28=84:84
|
||||
Key29=90:90
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=200:200
|
||||
Key35=65111:168
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=65:65
|
||||
Key39=83:83
|
||||
Key40=68:68
|
||||
Key41=70:70
|
||||
Key42=71:71
|
||||
Key43=72:72
|
||||
Key44=74:74
|
||||
Key45=75:75
|
||||
Key46=76:76
|
||||
Key47=201:201
|
||||
Key48=192:192
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=36:36
|
||||
Key52=89:89
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=44:44
|
||||
Key60=46:46
|
||||
Key61=45:45
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65513:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65407:0
|
||||
Key78=65300:0
|
||||
Key79=65429:0
|
||||
Key80=65431:0
|
||||
Key81=65434:0
|
||||
Key82=65453:45
|
||||
Key83=65430:0
|
||||
Key84=65437:0
|
||||
Key85=65432:0
|
||||
Key86=65451:43
|
||||
Key87=65436:0
|
||||
Key88=65433:0
|
||||
Key89=65435:0
|
||||
Key90=65438:0
|
||||
Key91=65439:0
|
||||
Key92=0:0
|
||||
Key93=65406:0
|
||||
Key94=60:60
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65027:0
|
||||
Key114=0:0
|
||||
Key115=0:0
|
||||
Key116=0:0
|
||||
Key117=0:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=0:0
|
||||
Key126=65469:61
|
||||
Key127=0:0
|
||||
Key128=0:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftcapslock]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=43:43
|
||||
Key11=34:34
|
||||
Key12=42:42
|
||||
Key13=199:199
|
||||
Key14=37:37
|
||||
Key15=38:38
|
||||
Key16=47:47
|
||||
Key17=40:40
|
||||
Key18=41:41
|
||||
Key19=61:61
|
||||
Key20=63:63
|
||||
Key21=65104:96
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=113:113
|
||||
Key25=119:119
|
||||
Key26=101:101
|
||||
Key27=114:114
|
||||
Key28=116:116
|
||||
Key29=122:122
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=220:220
|
||||
Key35=33:33
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=97:97
|
||||
Key39=115:115
|
||||
Key40=100:100
|
||||
Key41=102:102
|
||||
Key42=103:103
|
||||
Key43=104:104
|
||||
Key44=106:106
|
||||
Key45=107:107
|
||||
Key46=108:108
|
||||
Key47=214:214
|
||||
Key48=196:196
|
||||
Key49=176:176
|
||||
Key50=65505:0
|
||||
Key51=163:163
|
||||
Key52=121:121
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=109:109
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=95:95
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65511:0
|
||||
Key65=32:32
|
||||
Key66=65509:0
|
||||
Key67=65470:0
|
||||
Key68=65471:0
|
||||
Key69=65472:0
|
||||
Key70=65473:0
|
||||
Key71=65474:0
|
||||
Key72=65475:0
|
||||
Key73=65476:0
|
||||
Key74=65477:0
|
||||
Key75=65478:0
|
||||
Key76=65479:0
|
||||
Key77=65273:0
|
||||
Key78=65300:0
|
||||
Key79=65463:55
|
||||
Key80=65464:56
|
||||
Key81=65465:57
|
||||
Key82=65453:45
|
||||
Key83=65460:52
|
||||
Key84=65461:53
|
||||
Key85=65462:54
|
||||
Key86=65451:43
|
||||
Key87=65457:49
|
||||
Key88=65458:50
|
||||
Key89=65459:51
|
||||
Key90=65456:48
|
||||
Key91=65454:46
|
||||
Key92=0:0
|
||||
Key93=65406:0
|
||||
Key94=62:62
|
||||
Key95=65480:0
|
||||
Key96=65481:0
|
||||
Key97=65360:0
|
||||
Key98=65362:0
|
||||
Key99=65365:0
|
||||
Key100=65361:0
|
||||
Key101=0:0
|
||||
Key102=65363:0
|
||||
Key103=65367:0
|
||||
Key104=65364:0
|
||||
Key105=65366:0
|
||||
Key106=65379:0
|
||||
Key107=65535:127
|
||||
Key108=65421:13
|
||||
Key109=65508:0
|
||||
Key110=65299:0
|
||||
Key111=65377:0
|
||||
Key112=65455:47
|
||||
Key113=65312:0
|
||||
Key114=0:0
|
||||
Key115=0:0
|
||||
Key116=0:0
|
||||
Key117=0:0
|
||||
Key118=0:0
|
||||
Key119=0:0
|
||||
Key120=0:0
|
||||
Key121=0:0
|
||||
Key122=0:0
|
||||
Key123=0:0
|
||||
Key124=65027:0
|
||||
Key125=65513:0
|
||||
Key126=65469:61
|
||||
Key127=65515:0
|
||||
Key128=65517:0
|
||||
Key129=0:0
|
||||
Key130=0:0
|
||||
Key131=0:0
|
||||
Key132=0:0
|
||||
Key133=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
@ -1,4 +1,9 @@
|
||||
EXTRA_DIST = xrdp-sesman
|
||||
EXTRA_DIST = \
|
||||
xrdp-sesman.common \
|
||||
xrdp-sesman.other \
|
||||
xrdp-sesman.password-auth
|
||||
|
||||
CLEANFILES = xrdp-sesman
|
||||
|
||||
if SESMAN_NOPAM
|
||||
PAMFILE =
|
||||
@ -14,7 +19,19 @@ endif
|
||||
endif
|
||||
endif
|
||||
|
||||
pamddir=$(sysconfdir)/pam.d
|
||||
pamddir = $(sysconfdir)/pam.d
|
||||
|
||||
pamd_DATA = \
|
||||
$(PAMFILE)
|
||||
|
||||
xrdp-sesman:
|
||||
if test -e /etc/pam.d/password-auth; then \
|
||||
pamrules=xrdp-sesman.password-auth; \
|
||||
else \
|
||||
if test -e /etc/pam.d/common-auth; then \
|
||||
pamrules=xrdp-sesman.common; \
|
||||
else \
|
||||
pamrules=xrdp-sesman.other; \
|
||||
fi; \
|
||||
fi; \
|
||||
$(LN_S) $(srcdir)/$$pamrules $@
|
||||
|
@ -2,4 +2,3 @@
|
||||
@include common-auth
|
||||
@include common-account
|
||||
@include common-session
|
||||
@include common-password
|
4
instfiles/pam.d/xrdp-sesman.password-auth
Normal file
4
instfiles/pam.d/xrdp-sesman.password-auth
Normal file
@ -0,0 +1,4 @@
|
||||
#%PAM-1.0
|
||||
auth include password-auth
|
||||
account include password-auth
|
||||
session include password-auth
|
@ -1,3 +1,2 @@
|
||||
EXTRA_DIST = default.pa
|
||||
pulsedir=$(sysconfdir)/xrdp/pulse
|
||||
pulse_DATA = default.pa
|
||||
pulsedir = $(sysconfdir)/xrdp/pulse
|
||||
dist_pulse_DATA = default.pa
|
||||
|
2
instfiles/rc.d/Makefile.am
Normal file
2
instfiles/rc.d/Makefile.am
Normal file
@ -0,0 +1,2 @@
|
||||
startscriptdir = $(sysconfdir)/rc.d
|
||||
dist_startscript_SCRIPTS = xrdp
|
80
instfiles/rc.d/xrdp
Normal file
80
instfiles/rc.d/xrdp
Normal file
@ -0,0 +1,80 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 1992-2015 The FreeBSD Project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# REQUIRE: DAEMON
|
||||
# PROVIDE: xrdp xrdp_sesman
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="xrdp"
|
||||
rcvar=xrdp_enable
|
||||
xrdp_daemons="xrdp"
|
||||
|
||||
# Read settings and set default values.
|
||||
load_rc_config "$name"
|
||||
: ${xrdp_enable="NO"}
|
||||
|
||||
# Enable/disable dependent daemon.
|
||||
if [ -n "${rcvar}" ] && checkyesno "xrdp_sesman_enable"; then
|
||||
xrdp_daemons="xrdp xrdp_sesman"
|
||||
fi
|
||||
|
||||
# Commands.
|
||||
extra_commands="reload status"
|
||||
start_cmd="xrdp_cmd"
|
||||
stop_cmd="xrdp_cmd"
|
||||
status_cmd="xrdp_cmd"
|
||||
reload_cmd="xrdp_cmd"
|
||||
rcvar_cmd="xrdp_cmd"
|
||||
|
||||
# Command wrapper to call each of them per daemon.
|
||||
xrdp_cmd() {
|
||||
local name rcvar command pidfile xrdp_daemons
|
||||
# Prevent recursive calling.
|
||||
unset "${rc_arg}_cmd"
|
||||
# Stop processes in the reverse to order.
|
||||
if [ "${rc_arg}" = "stop" ] ; then
|
||||
xrdp_daemons=$(reverse_list ${xrdp_daemons})
|
||||
fi
|
||||
|
||||
# Apply to all the daemons.
|
||||
for name in ${xrdp_daemons}; do
|
||||
rcvar=${name}_enable
|
||||
if [ "${name}" = "xrdp_sesman" ]; then
|
||||
command="%%PREFIX%%/sbin/xrdp-sesman"
|
||||
pidfile="/var/run/xrdp-sesman.pid"
|
||||
else
|
||||
command="%%PREFIX%%/sbin/${name}"
|
||||
pidfile="/var/run/${name}.pid"
|
||||
fi
|
||||
|
||||
run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args}
|
||||
done
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
@ -2,11 +2,13 @@
|
||||
Description=xrdp session manager
|
||||
After=syslog.target network.target
|
||||
StopWhenUnneeded=true
|
||||
BindTo=xrdp.service
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
PIDFile=/var/run/xrdp-sesman.pid
|
||||
EnvironmentFile=/etc/sysconfig/xrdp
|
||||
EnvironmentFile=-/etc/sysconfig/xrdp
|
||||
EnvironmentFile=-/etc/default/xrdp
|
||||
ExecStart=/usr/sbin/xrdp-sesman $SESMAN_OPTIONS
|
||||
ExecStop=/usr/sbin/xrdp-sesman $SESMAN_OPTIONS --kill
|
||||
|
||||
|
@ -6,7 +6,8 @@ After=syslog.target network.target xrdp-sesman.service
|
||||
[Service]
|
||||
Type=forking
|
||||
PIDFile=/var/run/xrdp.pid
|
||||
EnvironmentFile=/etc/sysconfig/xrdp
|
||||
EnvironmentFile=-/etc/sysconfig/xrdp
|
||||
EnvironmentFile=-/etc/default/xrdp
|
||||
ExecStart=/usr/sbin/xrdp $XRDP_OPTIONS
|
||||
ExecStop=/usr/sbin/xrdp $XRDP_OPTIONS --kill
|
||||
|
||||
|
@ -1,11 +1,10 @@
|
||||
EXTRA_DIST = openssl.conf
|
||||
|
||||
AM_CFLAGS = \
|
||||
AM_CPPFLAGS = \
|
||||
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
|
||||
-DXRDP_SBIN_PATH=\"${sbindir}\" \
|
||||
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
|
||||
-DXRDP_PID_PATH=\"${localstatedir}/run\"
|
||||
|
||||
INCLUDES = \
|
||||
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
|
||||
-I$(top_srcdir)/common
|
||||
|
||||
bin_PROGRAMS = \
|
||||
@ -15,3 +14,23 @@ xrdp_keygen_SOURCES = keygen.c
|
||||
|
||||
xrdp_keygen_LDADD = \
|
||||
$(top_builddir)/common/libcommon.la
|
||||
|
||||
xrdpsysconfdir = $(sysconfdir)/xrdp
|
||||
|
||||
install-data-hook:
|
||||
umask 077 && \
|
||||
if [ ! -f $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini ]; then \
|
||||
./xrdp-keygen xrdp $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini; \
|
||||
fi && \
|
||||
if [ ! -f $(DESTDIR)$(xrdpsysconfdir)/cert.pem ]; then \
|
||||
openssl req -x509 -newkey rsa:2048 -sha256 -nodes \
|
||||
-keyout $(DESTDIR)$(xrdpsysconfdir)/key.pem -out \
|
||||
$(DESTDIR)$(xrdpsysconfdir)/cert.pem -days 365 \
|
||||
-subj /C=US/ST=CA/L=Sunnyvale/O=xrdp/CN=www.xrdp.org \
|
||||
-config $(srcdir)/openssl.conf; \
|
||||
fi
|
||||
|
||||
uninstall-hook:
|
||||
rm -f $(DESTDIR)$(xrdpsysconfdir)/rsakeys.ini
|
||||
rm -f $(DESTDIR)$(xrdpsysconfdir)/cert.pem
|
||||
rm -f $(DESTDIR)$(xrdpsysconfdir)/key.pem
|
||||
|
@ -34,8 +34,8 @@
|
||||
/* this is the signature size in bytes */
|
||||
#define TSSK_KEY_LENGTH 64
|
||||
|
||||
/* default to 512 bit key size, can set changed, set */
|
||||
static int g_key_size_bits = 512;
|
||||
/* default to 2048 bit key size, can set changed, set */
|
||||
static int g_key_size_bits = 2048;
|
||||
|
||||
static tui8 g_exponent[4] =
|
||||
{
|
||||
@ -195,11 +195,11 @@ static tui8 g_testkey2048[376] = /* 2048 bit test key */
|
||||
static int APP_CC
|
||||
out_params(void)
|
||||
{
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
g_writeln("xrdp rsa key gen utility examples");
|
||||
g_writeln(" xrdp-keygen xrdp ['path and file name' | auto] [512 or 2048]");
|
||||
g_writeln(" xrdp-keygen test");
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -282,7 +282,7 @@ sign_key(char *e_data, int e_len, char *n_data, int n_len,
|
||||
|
||||
/*****************************************************************************/
|
||||
static int APP_CC
|
||||
write_out_line(int fd, char *name, char *data, int len)
|
||||
write_out_line(int fd, const char *name, char *data, int len)
|
||||
{
|
||||
int max;
|
||||
int error;
|
||||
@ -351,7 +351,7 @@ save_all(char *e_data, int e_len, char *n_data, int n_len,
|
||||
}
|
||||
|
||||
g_writeln("saving to %s", filename);
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
|
||||
if (g_file_exist(filename))
|
||||
{
|
||||
@ -411,15 +411,14 @@ key_gen(const char *path_and_file_name)
|
||||
d_len = n_len;
|
||||
sign_len = 64;
|
||||
error = 0;
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
g_writeln("Generating %d bit rsa key...", g_key_size_bits);
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
error = ssl_gen_key_xrdp1(g_key_size_bits, e_data, e_len, n_data, n_len,
|
||||
d_data, d_len);
|
||||
|
||||
if (error != 0)
|
||||
{
|
||||
g_writeln("error %d in key_gen, ssl_gen_key_xrdp1", error);
|
||||
@ -429,7 +428,7 @@ key_gen(const char *path_and_file_name)
|
||||
if (error == 0)
|
||||
{
|
||||
g_writeln("ssl_gen_key_xrdp1 ok");
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
error = sign_key(e_data, e_len, n_data, n_len, sign_data, sign_len);
|
||||
|
||||
if (error != 0)
|
||||
@ -589,10 +588,10 @@ main(int argc, char **argv)
|
||||
}
|
||||
else if (g_strcasecmp(argv[1], "test") == 0)
|
||||
{
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
g_writeln("testing 512 bit key");
|
||||
key_test512();
|
||||
g_writeln("");
|
||||
g_writeln("%s", "");
|
||||
g_writeln("testing 2048 bit key");
|
||||
key_test2048();
|
||||
return 0;
|
||||
|
4
keygen/openssl.conf
Normal file
4
keygen/openssl.conf
Normal file
@ -0,0 +1,4 @@
|
||||
[req]
|
||||
distinguished_name = req_distinguished_name
|
||||
|
||||
[req_distinguished_name]
|
1
libpainter
Submodule
1
libpainter
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 71561310ccb2cf9c086e1ca533cd3b846283c3e5
|
@ -1 +1 @@
|
||||
Subproject commit 61f6e92ecdfd057215da7932b6afefcbfa928446
|
||||
Subproject commit 03a36890da75d6c27a31bcd1caae4bb9c839c6f6
|
@ -1,71 +1,65 @@
|
||||
EXTRA_DIST = libxrdp.h libxrdpinc.h
|
||||
EXTRA_DIST = \
|
||||
xrdp_surface.c
|
||||
|
||||
EXTRA_DEFINES =
|
||||
EXTRA_INCLUDES =
|
||||
EXTRA_LIBS =
|
||||
EXTRA_FLAGS =
|
||||
|
||||
if XRDP_DEBUG
|
||||
EXTRA_DEFINES += -DXRDP_DEBUG
|
||||
else
|
||||
EXTRA_DEFINES += -DXRDP_NODEBUG
|
||||
endif
|
||||
|
||||
if XRDP_NEUTRINORDP
|
||||
EXTRA_DEFINES += -DXRDP_NEUTRINORDP
|
||||
EXTRA_LIBS += $(FREERDP_LIBS)
|
||||
endif
|
||||
|
||||
if XRDP_TJPEG
|
||||
EXTRA_DEFINES += -DXRDP_JPEG -DXRDP_TJPEG
|
||||
EXTRA_INCLUDES += @TurboJpegIncDir@
|
||||
EXTRA_FLAGS += @TurboJpegLibDir@
|
||||
EXTRA_LIBS += -lturbojpeg
|
||||
else
|
||||
if XRDP_JPEG
|
||||
EXTRA_DEFINES += -DXRDP_JPEG
|
||||
EXTRA_LIBS += -ljpeg
|
||||
endif
|
||||
endif
|
||||
|
||||
if GOT_PREFIX
|
||||
EXTRA_INCLUDES += -I$(prefix)/include
|
||||
EXTRA_FLAGS += -L$(prefix)/lib -Wl,-rpath -Wl,$(prefix)/lib
|
||||
endif
|
||||
|
||||
AM_CFLAGS = \
|
||||
AM_CPPFLAGS = \
|
||||
-DXRDP_CFG_PATH=\"${sysconfdir}/xrdp\" \
|
||||
-DXRDP_SBIN_PATH=\"${sbindir}\" \
|
||||
-DXRDP_SHARE_PATH=\"${datadir}/xrdp\" \
|
||||
-DXRDP_PID_PATH=\"${localstatedir}/run\" \
|
||||
$(EXTRA_DEFINES)
|
||||
-I$(top_srcdir)/common
|
||||
|
||||
INCLUDES = \
|
||||
-I$(top_srcdir)/common \
|
||||
$(EXTRA_INCLUDES)
|
||||
AM_LDFLAGS =
|
||||
|
||||
lib_LTLIBRARIES = \
|
||||
LIBXRDP_EXTRA_LIBS =
|
||||
|
||||
if XRDP_DEBUG
|
||||
AM_CPPFLAGS += -DXRDP_DEBUG
|
||||
else
|
||||
AM_CPPFLAGS += -DXRDP_NODEBUG
|
||||
endif
|
||||
|
||||
if XRDP_NEUTRINORDP
|
||||
AM_CPPFLAGS += -DXRDP_NEUTRINORDP
|
||||
LIBXRDP_EXTRA_LIBS += $(FREERDP_LIBS)
|
||||
endif
|
||||
|
||||
if XRDP_RFXCODEC
|
||||
AM_CPPFLAGS += -DXRDP_RFXCODEC
|
||||
endif
|
||||
|
||||
if XRDP_TJPEG
|
||||
AM_CPPFLAGS += -DXRDP_JPEG -DXRDP_TJPEG @TurboJpegIncDir@
|
||||
AM_LDFLAGS += @TurboJpegLibDir@
|
||||
LIBXRDP_EXTRA_LIBS += -lturbojpeg
|
||||
else
|
||||
if XRDP_JPEG
|
||||
AM_CPPFLAGS += -DXRDP_JPEG
|
||||
LIBXRDP_EXTRA_LIBS += -ljpeg
|
||||
endif
|
||||
endif
|
||||
|
||||
module_LTLIBRARIES = \
|
||||
libxrdp.la
|
||||
|
||||
libxrdp_la_SOURCES = \
|
||||
libxrdp.c \
|
||||
xrdp_channel.c \
|
||||
xrdp_iso.c \
|
||||
xrdp_mcs.c \
|
||||
xrdp_orders.c \
|
||||
xrdp_rdp.c \
|
||||
xrdp_sec.c \
|
||||
xrdp_bitmap_compress.c \
|
||||
libxrdp.h \
|
||||
libxrdpinc.h \
|
||||
xrdp_bitmap32_compress.c \
|
||||
xrdp_jpeg_compress.c \
|
||||
xrdp_orders_rail.c \
|
||||
xrdp_mppc_enc.c \
|
||||
xrdp_bitmap_compress.c \
|
||||
xrdp_caps.c \
|
||||
xrdp_channel.c \
|
||||
xrdp_fastpath.c \
|
||||
xrdp_caps.c
|
||||
|
||||
libxrdp_la_LDFLAGS = \
|
||||
$(EXTRA_FLAGS)
|
||||
xrdp_iso.c \
|
||||
xrdp_jpeg_compress.c \
|
||||
xrdp_mcs.c \
|
||||
xrdp_mppc_enc.c \
|
||||
xrdp_orders.c \
|
||||
xrdp_orders_rail.c \
|
||||
xrdp_orders_rail.h \
|
||||
xrdp_rdp.c \
|
||||
xrdp_sec.c
|
||||
|
||||
libxrdp_la_LIBADD = \
|
||||
$(top_builddir)/common/libcommon.la \
|
||||
$(EXTRA_LIBS)
|
||||
$(LIBXRDP_EXTRA_LIBS)
|
||||
|
@ -27,6 +27,8 @@
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { g_writeln _args ; } } while (0)
|
||||
|
||||
#define MAX_BITMAP_BUF_SIZE (16 * 1024) /* 16K */
|
||||
|
||||
/******************************************************************************/
|
||||
struct xrdp_session *EXPORT_CC
|
||||
libxrdp_init(tbus id, struct trans *trans)
|
||||
@ -66,7 +68,7 @@ libxrdp_disconnect(struct xrdp_session *session)
|
||||
|
||||
/******************************************************************************/
|
||||
int EXPORT_CC
|
||||
libxrdp_process_incomming(struct xrdp_session *session)
|
||||
libxrdp_process_incoming(struct xrdp_session *session)
|
||||
{
|
||||
int rv;
|
||||
|
||||
@ -105,7 +107,7 @@ libxrdp_get_pdu_bytes(const char *aheader)
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/* only used durring connection */
|
||||
/* only used during connection */
|
||||
struct stream * APP_CC
|
||||
libxrdp_force_read(struct trans* trans)
|
||||
{
|
||||
@ -253,8 +255,8 @@ libxrdp_process_data(struct xrdp_session *session, struct stream *s)
|
||||
{
|
||||
/*This situation can happen and this is a workaround*/
|
||||
cont = 0;
|
||||
g_writeln("Serious programming error we were locked in a deadly loop") ;
|
||||
g_writeln("remaining :%d", s->end - s->next_packet);
|
||||
g_writeln("Serious programming error: we were locked in a deadly loop");
|
||||
g_writeln("Remaining: %d", (int) (s->end - s->next_packet));
|
||||
s->next_packet = 0;
|
||||
}
|
||||
|
||||
@ -373,15 +375,15 @@ libxrdp_send_bell(struct xrdp_session *session)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
int EXPORT_CC
|
||||
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
int bpp, char *data, int x, int y, int cx, int cy)
|
||||
{
|
||||
int line_size = 0;
|
||||
int line_bytes = 0;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int k;
|
||||
int total_lines = 0;
|
||||
int lines_sending = 0;
|
||||
int Bpp = 0;
|
||||
@ -389,27 +391,43 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
int bufsize = 0;
|
||||
int total_bufsize = 0;
|
||||
int num_updates = 0;
|
||||
int line_pad_bytes;
|
||||
int server_line_bytes;
|
||||
char *p_num_updates = (char *)NULL;
|
||||
char *p = (char *)NULL;
|
||||
char *q = (char *)NULL;
|
||||
struct stream *s = (struct stream *)NULL;
|
||||
struct stream *temp_s = (struct stream *)NULL;
|
||||
tui32 pixel;
|
||||
|
||||
DEBUG(("libxrdp_send_bitmap sending bitmap"));
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: sending bitmap"));
|
||||
Bpp = (bpp + 7) / 8;
|
||||
e = width % 4;
|
||||
|
||||
if (e != 0)
|
||||
e = (4 - width) & 3;
|
||||
switch (bpp)
|
||||
{
|
||||
e = 4 - e;
|
||||
case 15:
|
||||
case 16:
|
||||
server_line_bytes = width * 2;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
server_line_bytes = width * 4;
|
||||
break;
|
||||
default: /* 8 bpp */
|
||||
server_line_bytes = width;
|
||||
break;
|
||||
}
|
||||
line_bytes = width * Bpp;
|
||||
line_pad_bytes = line_bytes + e * Bpp;
|
||||
|
||||
line_size = width * Bpp;
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: bpp %d Bpp %d line_bytes %d "
|
||||
"server_line_bytes %d", bpp, Bpp, line_bytes, server_line_bytes));
|
||||
make_stream(s);
|
||||
init_stream(s, 8192);
|
||||
init_stream(s, MAX_BITMAP_BUF_SIZE);
|
||||
|
||||
if (session->client_info->use_bitmap_comp)
|
||||
{
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: compression"));
|
||||
make_stream(temp_s);
|
||||
init_stream(temp_s, 65536);
|
||||
i = 0;
|
||||
@ -421,6 +439,8 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
|
||||
while (i > 0)
|
||||
{
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: i %d", i));
|
||||
|
||||
total_bufsize = 0;
|
||||
num_updates = 0;
|
||||
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
|
||||
@ -440,10 +460,26 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
}
|
||||
|
||||
p = s->p;
|
||||
lines_sending = xrdp_bitmap_compress(data, width, height,
|
||||
s, bpp,
|
||||
4096 - total_bufsize,
|
||||
i - 1, temp_s, e);
|
||||
|
||||
if (bpp > 24)
|
||||
{
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: 32 bpp"));
|
||||
lines_sending = xrdp_bitmap32_compress(data, width, height,
|
||||
s, 32,
|
||||
(MAX_BITMAP_BUF_SIZE - 100) - total_bufsize,
|
||||
i - 1, temp_s, e, 0x10);
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: i %d lines_sending %d",
|
||||
i, lines_sending));
|
||||
}
|
||||
else
|
||||
{
|
||||
lines_sending = xrdp_bitmap_compress(data, width, height,
|
||||
s, bpp,
|
||||
(MAX_BITMAP_BUF_SIZE - 100) - total_bufsize,
|
||||
i - 1, temp_s, e);
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: i %d lines_sending %d",
|
||||
i, lines_sending));
|
||||
}
|
||||
|
||||
if (lines_sending == 0)
|
||||
{
|
||||
@ -470,6 +506,7 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
out_uint16_le(s, bufsize); /* compressed size */
|
||||
j = (width + e) * Bpp;
|
||||
j = j * lines_sending;
|
||||
total_bufsize += 18; /* bytes since pop layer */
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -481,31 +518,42 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
out_uint16_le(s, j); /* line size */
|
||||
j = j * lines_sending;
|
||||
out_uint16_le(s, j); /* final size */
|
||||
total_bufsize += 26; /* bytes since pop layer */
|
||||
}
|
||||
|
||||
if (j > 32768)
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: decompressed pixels %d "
|
||||
"decompressed bytes %d compressed bytes %d",
|
||||
lines_sending * (width + e),
|
||||
line_pad_bytes * lines_sending, bufsize));
|
||||
|
||||
if (j > MAX_BITMAP_BUF_SIZE)
|
||||
{
|
||||
g_writeln("error, decompressed size too big, its %d", j);
|
||||
LLOGLN(0, ("libxrdp_send_bitmap: error, decompressed "
|
||||
"size too big: %d bytes", j));
|
||||
}
|
||||
|
||||
if (bufsize > 8192)
|
||||
if (bufsize > MAX_BITMAP_BUF_SIZE)
|
||||
{
|
||||
g_writeln("error, compressed size too big, its %d", bufsize);
|
||||
LLOGLN(0, ("libxrdp_send_bitmap: error, compressed size "
|
||||
"too big: %d bytes", bufsize));
|
||||
}
|
||||
|
||||
s->p = s->end;
|
||||
}
|
||||
while (total_bufsize < 4096 && i > 0);
|
||||
while (total_bufsize < MAX_BITMAP_BUF_SIZE && i > 0);
|
||||
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: num_updates %d total_bufsize %d",
|
||||
num_updates, total_bufsize));
|
||||
|
||||
p_num_updates[0] = num_updates;
|
||||
p_num_updates[1] = num_updates >> 8;
|
||||
xrdp_rdp_send_data((struct xrdp_rdp *)session->rdp, s,
|
||||
RDP_DATA_PDU_UPDATE);
|
||||
|
||||
if (total_bufsize > 8192)
|
||||
if (total_bufsize > MAX_BITMAP_BUF_SIZE)
|
||||
{
|
||||
g_writeln("error, total compressed size too big, its %d",
|
||||
total_bufsize);
|
||||
LLOGLN(0, ("libxrdp_send_bitmap: error, total compressed "
|
||||
"size too big: %d bytes", total_bufsize));
|
||||
}
|
||||
}
|
||||
|
||||
@ -513,22 +561,30 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
}
|
||||
else
|
||||
{
|
||||
LLOGLN(10, ("libxrdp_send_bitmap: no compression"));
|
||||
total_lines = height;
|
||||
i = 0;
|
||||
p = data;
|
||||
|
||||
if (line_size > 0 && total_lines > 0)
|
||||
if (line_bytes > 0 && total_lines > 0)
|
||||
{
|
||||
while (i < total_lines)
|
||||
{
|
||||
lines_sending = 4096 / (line_size + e * Bpp);
|
||||
|
||||
lines_sending = (MAX_BITMAP_BUF_SIZE - 100) / line_pad_bytes;
|
||||
|
||||
if (i + lines_sending > total_lines)
|
||||
{
|
||||
lines_sending = total_lines - i;
|
||||
}
|
||||
|
||||
p = p + line_size * lines_sending;
|
||||
if (lines_sending == 0)
|
||||
{
|
||||
LLOGLN(0, ("libxrdp_send_bitmap: error, lines_sending == zero"));
|
||||
break;
|
||||
}
|
||||
|
||||
p += server_line_bytes * lines_sending;
|
||||
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
|
||||
out_uint16_le(s, RDP_UPDATE_BITMAP);
|
||||
out_uint16_le(s, 1); /* num updates */
|
||||
@ -540,14 +596,58 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
|
||||
out_uint16_le(s, lines_sending);
|
||||
out_uint16_le(s, bpp); /* bpp */
|
||||
out_uint16_le(s, 0); /* compress */
|
||||
out_uint16_le(s, (line_size + e * Bpp) * lines_sending); /* bufsize */
|
||||
out_uint16_le(s, line_pad_bytes * lines_sending); /* bufsize */
|
||||
q = p;
|
||||
|
||||
for (j = 0; j < lines_sending; j++)
|
||||
switch (bpp)
|
||||
{
|
||||
q = q - line_size;
|
||||
out_uint8a(s, q, line_size); /* B_ENDIAN doesn't work here, todo */
|
||||
out_uint8s(s, e * Bpp);
|
||||
case 8:
|
||||
for (j = 0; j < lines_sending; j++)
|
||||
{
|
||||
q = q - line_bytes;
|
||||
out_uint8a(s, q, line_bytes);
|
||||
out_uint8s(s, e);
|
||||
}
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
for (j = 0; j < lines_sending; j++)
|
||||
{
|
||||
q = q - server_line_bytes;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
pixel = *((tui16*)(q + k * 2));
|
||||
out_uint16_le(s, pixel);
|
||||
}
|
||||
out_uint8s(s, e * 2);
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
for (j = 0; j < lines_sending; j++)
|
||||
{
|
||||
q = q - server_line_bytes;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
pixel = *((tui32*)(q + k * 4));
|
||||
out_uint8(s, pixel);
|
||||
out_uint8(s, pixel >> 8);
|
||||
out_uint8(s, pixel >> 16);
|
||||
}
|
||||
out_uint8s(s, e * 3);
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
for (j = 0; j < lines_sending; j++)
|
||||
{
|
||||
q = q - server_line_bytes;
|
||||
for (k = 0; k < width; k++)
|
||||
{
|
||||
pixel = *((int*)(q + k * 4));
|
||||
out_uint32_le(s, pixel);
|
||||
}
|
||||
out_uint8s(s, e * 4);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
s_mark_end(s);
|
||||
@ -971,7 +1071,7 @@ libxrdp_reset(struct xrdp_session *session,
|
||||
}
|
||||
|
||||
/* shut down the rdp client */
|
||||
if (xrdp_rdp_send_deactive((struct xrdp_rdp *)session->rdp) != 0)
|
||||
if (xrdp_rdp_send_deactivate((struct xrdp_rdp *)session->rdp) != 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -982,14 +1082,6 @@ libxrdp_reset(struct xrdp_session *session,
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* process till up and running */
|
||||
session->up_and_running = 0;
|
||||
|
||||
if (libxrdp_process_data(session, 0) != 0)
|
||||
{
|
||||
g_writeln("non handled error from libxrdp_process_data");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1082,10 +1174,10 @@ libxrdp_query_channel(struct xrdp_session *session, int index,
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns a zero based index of the channel, -1 if error or it dosen't
|
||||
/* returns a zero based index of the channel, -1 if error or it doesn't
|
||||
exist */
|
||||
int EXPORT_CC
|
||||
libxrdp_get_channel_id(struct xrdp_session *session, char *name)
|
||||
libxrdp_get_channel_id(struct xrdp_session *session, const char *name)
|
||||
{
|
||||
int index = 0;
|
||||
int count = 0;
|
||||
@ -1306,13 +1398,12 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
|
||||
struct stream ls;
|
||||
struct stream *s;
|
||||
struct xrdp_rdp *rdp;
|
||||
int rv;
|
||||
int sec_bytes;
|
||||
int rdp_bytes;
|
||||
int max_bytes;
|
||||
int cmd_bytes;
|
||||
|
||||
LLOGLN(10, ("libxrdp_fastpath_init:"));
|
||||
LLOGLN(10, ("libxrdp_fastpath_send_surface:"));
|
||||
if ((session->client_info->use_fast_path & 1) == 0)
|
||||
{
|
||||
return 1;
|
||||
@ -1341,13 +1432,13 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
|
||||
s->rdp_hdr = s->sec_hdr + sec_bytes;
|
||||
s->end = data_pad + pad_bytes + data_bytes;
|
||||
s->p = s->data + (rdp_bytes + sec_bytes);
|
||||
/* TS_SURFCMD_SET_SURF_BITS */
|
||||
out_uint16_le(s, 0x0001); /* CMDTYPE_SET_SURFACE_BITS */
|
||||
/* TS_SURFCMD_STREAM_SURF_BITS */
|
||||
out_uint16_le(s, CMDTYPE_STREAM_SURFACE_BITS);
|
||||
out_uint16_le(s, destLeft);
|
||||
out_uint16_le(s, destTop);
|
||||
out_uint16_le(s, destRight);
|
||||
out_uint16_le(s, destBottom);
|
||||
/* TS_ BITMAP_DATA_EX */
|
||||
/* TS_BITMAP_DATA_EX */
|
||||
out_uint8(s, bpp);
|
||||
out_uint8(s, 0);
|
||||
out_uint8(s, 0);
|
||||
@ -1362,3 +1453,40 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int EXPORT_CC
|
||||
libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
|
||||
int frame_action, int frame_id)
|
||||
{
|
||||
struct stream *s;
|
||||
struct xrdp_rdp *rdp;
|
||||
|
||||
LLOGLN(10, ("libxrdp_fastpath_send_frame_marker:"));
|
||||
if ((session->client_info->use_fast_path & 1) == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (session->client_info->use_frame_acks == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
rdp = (struct xrdp_rdp *) (session->rdp);
|
||||
make_stream(s);
|
||||
init_stream(s, 8192);
|
||||
xrdp_rdp_init_fastpath(rdp, s);
|
||||
out_uint16_le(s, 0x0004); /* CMDTYPE_FRAME_MARKER */
|
||||
out_uint16_le(s, frame_action);
|
||||
out_uint32_le(s, frame_id);
|
||||
s_mark_end(s);
|
||||
/* 4 = FASTPATH_UPDATETYPE_SURFCMDS */
|
||||
if (xrdp_rdp_send_fastpath(rdp, s, 4) != 0)
|
||||
{
|
||||
free_stream(s);
|
||||
return 1;
|
||||
}
|
||||
free_stream(s);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
@ -281,7 +281,7 @@ struct xrdp_mppc_enc
|
||||
char *outputBuffer; /* contains compressed data */
|
||||
char *outputBufferPlus;
|
||||
int historyOffset; /* next free slot in historyBuffer */
|
||||
int buf_len; /* length of historyBuffer, protocol dependant */
|
||||
int buf_len; /* length of historyBuffer, protocol dependent */
|
||||
int bytes_in_opb; /* compressed bytes available in outputBuffer */
|
||||
int flags; /* PACKET_COMPRESSED, PACKET_AT_FRONT, PACKET_FLUSHED etc */
|
||||
int flagsHold;
|
||||
@ -401,7 +401,7 @@ xrdp_rdp_process_data(struct xrdp_rdp *self, struct stream *s);
|
||||
int APP_CC
|
||||
xrdp_rdp_disconnect(struct xrdp_rdp *self);
|
||||
int APP_CC
|
||||
xrdp_rdp_send_deactive(struct xrdp_rdp *self);
|
||||
xrdp_rdp_send_deactivate(struct xrdp_rdp *self);
|
||||
|
||||
/* xrdp_orders.c */
|
||||
struct xrdp_orders * APP_CC
|
||||
|
@ -27,8 +27,8 @@
|
||||
|
||||
struct xrdp_brush
|
||||
{
|
||||
int x_orgin;
|
||||
int y_orgin;
|
||||
int x_origin;
|
||||
int y_origin;
|
||||
int style;
|
||||
char pattern[8];
|
||||
};
|
||||
@ -72,6 +72,8 @@ struct xrdp_session
|
||||
int up_and_running;
|
||||
int (*is_term)(void);
|
||||
int in_process_data; /* inc / dec libxrdp_process_data calls */
|
||||
|
||||
struct source_info si;
|
||||
};
|
||||
|
||||
struct xrdp_session * DEFAULT_CC
|
||||
@ -81,7 +83,7 @@ libxrdp_exit(struct xrdp_session *session);
|
||||
int DEFAULT_CC
|
||||
libxrdp_disconnect(struct xrdp_session *session);
|
||||
int DEFAULT_CC
|
||||
libxrdp_process_incomming(struct xrdp_session *session);
|
||||
libxrdp_process_incoming(struct xrdp_session *session);
|
||||
int EXPORT_CC
|
||||
libxrdp_get_pdu_bytes(const char *aheader);
|
||||
struct stream * APP_CC
|
||||
@ -187,7 +189,7 @@ int DEFAULT_CC
|
||||
libxrdp_query_channel(struct xrdp_session *session, int index,
|
||||
char *channel_name, int *channel_flags);
|
||||
int DEFAULT_CC
|
||||
libxrdp_get_channel_id(struct xrdp_session *session, char *name);
|
||||
libxrdp_get_channel_id(struct xrdp_session *session, const char *name);
|
||||
int DEFAULT_CC
|
||||
libxrdp_send_to_channel(struct xrdp_session *session, int channel_id,
|
||||
char *data, int data_len,
|
||||
@ -242,5 +244,8 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
|
||||
int destLeft, int dst_Top,
|
||||
int destRight, int destBottom, int bpp,
|
||||
int codecID, int width, int height);
|
||||
int EXPORT_CC
|
||||
libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
|
||||
int frame_action, int frame_id);
|
||||
|
||||
#endif
|
||||
|
@ -107,7 +107,7 @@ fsplit3(char *in_data, int start_line, int width, int e,
|
||||
}
|
||||
start_line--;
|
||||
cy++;
|
||||
if (out_index > 64 * 64)
|
||||
if (out_index + width + e > 64 * 64)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -195,7 +195,7 @@ fsplit4(char *in_data, int start_line, int width, int e,
|
||||
}
|
||||
start_line--;
|
||||
cy++;
|
||||
if (out_index > 64 * 64)
|
||||
if (out_index + width + e > 64 * 64)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -422,6 +422,7 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
|
||||
char *sr_data;
|
||||
char *sg_data;
|
||||
char *sb_data;
|
||||
char *hold_p;
|
||||
int a_bytes;
|
||||
int r_bytes;
|
||||
int g_bytes;
|
||||
@ -449,6 +450,7 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
|
||||
r_data = a_data + max_bytes;
|
||||
g_data = r_data + max_bytes;
|
||||
b_data = g_data + max_bytes;
|
||||
hold_p = s->p;
|
||||
|
||||
if (header & FLAGS_NOALPHA)
|
||||
{
|
||||
@ -459,35 +461,44 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
|
||||
fdelta(sr_data, r_data, cx, cy);
|
||||
fdelta(sg_data, g_data, cx, cy);
|
||||
fdelta(sb_data, b_data, cx, cy);
|
||||
out_uint8(s, header);
|
||||
r_bytes = fpack(r_data, cx, cy, s);
|
||||
g_bytes = fpack(g_data, cx, cy, s);
|
||||
b_bytes = fpack(b_data, cx, cy, s);
|
||||
total_bytes = r_bytes + g_bytes + b_bytes;
|
||||
if (1 + total_bytes > byte_limit)
|
||||
while (cy > 0)
|
||||
{
|
||||
/* failed */
|
||||
LLOGLN(0, ("xrdp_bitmap32_compress: too big, rgb "
|
||||
"bytes %d %d %d total_bytes %d cx %d cy %d "
|
||||
"byte_limit %d", r_bytes, g_bytes, b_bytes,
|
||||
total_bytes, cx, cy, byte_limit));
|
||||
return 0;
|
||||
}
|
||||
max_bytes = cx * cy * 3;
|
||||
if (total_bytes > max_bytes)
|
||||
{
|
||||
/* raw is better */
|
||||
LLOGLN(10, ("xrdp_bitmap32_compress: too big, rgb "
|
||||
"bytes %d %d %d total_bytes %d cx %d cy %d "
|
||||
"max_bytes %d", r_bytes, g_bytes, b_bytes,
|
||||
total_bytes, cx, cy, max_bytes));
|
||||
init_stream(s, 0);
|
||||
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
|
||||
s->p = hold_p;
|
||||
out_uint8(s, header);
|
||||
r_bytes = fpack(r_data, cx, cy, s);
|
||||
g_bytes = fpack(g_data, cx, cy, s);
|
||||
b_bytes = fpack(b_data, cx, cy, s);
|
||||
max_bytes = cx * cy * 3;
|
||||
total_bytes = r_bytes + g_bytes + b_bytes;
|
||||
if (total_bytes > max_bytes)
|
||||
{
|
||||
if (2 + max_bytes <= byte_limit)
|
||||
{
|
||||
s->p = hold_p;
|
||||
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (1 + total_bytes <= byte_limit)
|
||||
{
|
||||
break;
|
||||
}
|
||||
cy--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
|
||||
while (cy > 0)
|
||||
{
|
||||
max_bytes = cx * cy * 3;
|
||||
if (2 + max_bytes <= byte_limit)
|
||||
{
|
||||
s->p = hold_p;
|
||||
foutraw3(s, cx * cy, FLAGS_NOALPHA, sr_data, sg_data, sb_data);
|
||||
break;
|
||||
}
|
||||
cy--;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -500,36 +511,45 @@ xrdp_bitmap32_compress(char *in_data, int width, int height,
|
||||
fdelta(sr_data, r_data, cx, cy);
|
||||
fdelta(sg_data, g_data, cx, cy);
|
||||
fdelta(sb_data, b_data, cx, cy);
|
||||
out_uint8(s, header);
|
||||
a_bytes = fpack(a_data, cx, cy, s);
|
||||
r_bytes = fpack(r_data, cx, cy, s);
|
||||
g_bytes = fpack(g_data, cx, cy, s);
|
||||
b_bytes = fpack(b_data, cx, cy, s);
|
||||
max_bytes = cx * cy * 4;
|
||||
total_bytes = a_bytes + r_bytes + g_bytes + b_bytes;
|
||||
if (1 + total_bytes > byte_limit)
|
||||
while (cy > 0)
|
||||
{
|
||||
/* failed */
|
||||
LLOGLN(0, ("xrdp_bitmap32_compress: too big, argb "
|
||||
"bytes %d %d %d %d total_bytes %d cx %d cy %d "
|
||||
"byte_limit %d", a_bytes, r_bytes, g_bytes, b_bytes,
|
||||
total_bytes, cx, cy, byte_limit));
|
||||
return 0;
|
||||
}
|
||||
if (total_bytes > max_bytes)
|
||||
{
|
||||
/* raw is better */
|
||||
LLOGLN(10, ("xrdp_bitmap32_compress: too big, argb "
|
||||
"bytes %d %d %d %d total_bytes %d cx %d cy %d "
|
||||
"max_bytes %d", a_bytes, r_bytes, g_bytes, b_bytes,
|
||||
total_bytes, cx, cy, max_bytes));
|
||||
init_stream(s, 0);
|
||||
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
|
||||
s->p = hold_p;
|
||||
out_uint8(s, header);
|
||||
a_bytes = fpack(a_data, cx, cy, s);
|
||||
r_bytes = fpack(r_data, cx, cy, s);
|
||||
g_bytes = fpack(g_data, cx, cy, s);
|
||||
b_bytes = fpack(b_data, cx, cy, s);
|
||||
max_bytes = cx * cy * 4;
|
||||
total_bytes = a_bytes + r_bytes + g_bytes + b_bytes;
|
||||
if (total_bytes > max_bytes)
|
||||
{
|
||||
if (2 + max_bytes <= byte_limit)
|
||||
{
|
||||
s->p = hold_p;
|
||||
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (1 + total_bytes <= byte_limit)
|
||||
{
|
||||
break;
|
||||
}
|
||||
cy--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
|
||||
while (cy > 0)
|
||||
{
|
||||
max_bytes = cx * cy * 4;
|
||||
if (2 + max_bytes <= byte_limit)
|
||||
{
|
||||
s->p = hold_p;
|
||||
foutraw4(s, cx * cy, 0, sa_data, sr_data, sg_data, sb_data);
|
||||
break;
|
||||
}
|
||||
cy--;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cy;
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include "libxrdp.h"
|
||||
|
||||
#define BC_MAX_BYTES (16 * 1024)
|
||||
|
||||
/*****************************************************************************/
|
||||
#define IN_PIXEL8(in_ptr, in_x, in_y, in_w, in_last_pixel, in_pixel); \
|
||||
do { \
|
||||
@ -695,7 +697,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
|
||||
out_count = end;
|
||||
line = in_data + width * start_line;
|
||||
|
||||
while (start_line >= 0 && out_count < 32768)
|
||||
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
|
||||
{
|
||||
i = (s->p - s->data) + count;
|
||||
|
||||
@ -987,7 +989,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
|
||||
out_count = end * 2;
|
||||
line = in_data + width * start_line * 2;
|
||||
|
||||
while (start_line >= 0 && out_count < 32768)
|
||||
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
|
||||
{
|
||||
i = (s->p - s->data) + count * 2;
|
||||
|
||||
@ -1279,7 +1281,7 @@ xrdp_bitmap_compress(char *in_data, int width, int height,
|
||||
out_count = end * 3;
|
||||
line = in_data + width * start_line * 4;
|
||||
|
||||
while (start_line >= 0 && out_count < 32768)
|
||||
while (start_line >= 0 && out_count <= BC_MAX_BYTES)
|
||||
{
|
||||
i = (s->p - s->data) + count * 3;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user