Compare commits
No commits in common. "devel" and "gh-pages" have entirely different histories.
19
.cirrus.yml
19
.cirrus.yml
@ -1,19 +0,0 @@
|
||||
FreeBSD_task:
|
||||
matrix:
|
||||
env:
|
||||
SSL: libressl
|
||||
matrix:
|
||||
freebsd_instance:
|
||||
image_family: freebsd-12-1
|
||||
prepare_script:
|
||||
- pkg install -y $SSL git autoconf automake libtool pkgconf opus jpeg-turbo fdk-aac pixman libX11 libXfixes libXrandr nasm
|
||||
- git submodule update --init --recursive
|
||||
configure_script:
|
||||
- ./bootstrap
|
||||
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure --localstatedir=/var --enable-strict-locations --with-pkgconfigdir=/usr/local/libdata/pkgconfig --enable-strict-locations --enable-ipv6 --enable-opus --enable-jpeg --enable-fdkaac --enable-painter --enable-pixman
|
||||
build_script:
|
||||
- make -j $(sysctl -n hw.ncpu || echo 4)
|
||||
install_script:
|
||||
- make install
|
||||
test_script:
|
||||
- /usr/local/sbin/xrdp -v
|
144
.github/workflows/build.yml
vendored
144
.github/workflows/build.yml
vendored
@ -1,144 +0,0 @@
|
||||
name: build and test
|
||||
on:
|
||||
push:
|
||||
branches-ignore:
|
||||
- "gh-pages"
|
||||
tags-ignore:
|
||||
- "v0.[0-8]**"
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- "gh-pages"
|
||||
|
||||
jobs:
|
||||
build_and_test:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
|
||||
# Minimal 64-bit arch builds
|
||||
- CC: gcc
|
||||
feature_set: min
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
|
||||
- CC: g++
|
||||
feature_set: min
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
|
||||
- CC: clang
|
||||
feature_set: min
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
|
||||
# Maximal 64-bit arch builds
|
||||
- CC: gcc
|
||||
feature_set: max
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
DISTCHECK: true
|
||||
|
||||
- CC: g++
|
||||
feature_set: max
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
DISTCHECK: true
|
||||
|
||||
- CC: clang
|
||||
feature_set: max
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
DISTCHECK: true
|
||||
|
||||
# Maximal debug 64-bit arch builds
|
||||
- CC: gcc
|
||||
feature_set: max
|
||||
arch: amd64
|
||||
os: ubuntu-latest
|
||||
name_extra: and DEBUG
|
||||
CONF_FLAGS_EXTRA: "--enable-xrdpdebug"
|
||||
|
||||
# Maximal 32-bit arch builds
|
||||
- CC: gcc
|
||||
feature_set: max
|
||||
arch: i386
|
||||
os: ubuntu-16.04
|
||||
name_extra: for 32-bit arch (legacy OS)
|
||||
|
||||
- CC: g++
|
||||
feature_set: max
|
||||
arch: i386
|
||||
os: ubuntu-16.04
|
||||
name_extra: for 32-bit arch (legacy OS)
|
||||
|
||||
- CC: clang
|
||||
feature_set: max
|
||||
arch: i386
|
||||
os: ubuntu-16.04
|
||||
name_extra: for 32-bit arch (legacy OS)
|
||||
|
||||
name: ${{ matrix.feature_set }} features with ${{ matrix.CC }} ${{ matrix.name_extra }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
CC: ${{ matrix.CC }}
|
||||
|
||||
# HACK (2020-11-16): github actions dosen't support YAML anchors/aliases to
|
||||
# avoid repeating long config values. So instead the config values are defined
|
||||
# as environment variables using a naming convention with fields that come from
|
||||
# the job config. These environment variables are then referenced as regualr
|
||||
# environment variables via the naming convention in the "define env" step to
|
||||
# define the stardard environment variable used in the rest of the steps.
|
||||
CONF_FLAGS_amd64_min: "--disable-ipv6 --disable-jpeg --disable-fuse --disable-mp3lame
|
||||
--disable-fdkaac --disable-opus --disable-rfxcodec --disable-painter
|
||||
--disable-pixman"
|
||||
CONF_FLAGS_amd64_max: "--enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame
|
||||
--enable-fdkaac --enable-opus --enable-rfxcodec --enable-painter
|
||||
--enable-pixman"
|
||||
CONF_FLAGS_i386_max: "--enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame
|
||||
--enable-fdkaac --enable-opus --enable-rfxcodec --enable-painter
|
||||
--disable-pixman --host=i686-linux"
|
||||
|
||||
PKG_CONFIG_PATH_i386: "/usr/lib/i386-linux-gnu/pkgconfig"
|
||||
CFLAGS_i386: "-m32"
|
||||
LDFLAGS_i386: "-m32"
|
||||
steps:
|
||||
- name: Define feature and arch dependent environment variables
|
||||
# Note: any "variable=value" written to the $GITHUB_ENV file will be
|
||||
# defined as an environment variable for all future steps in this job
|
||||
# See: https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
|
||||
run: |
|
||||
echo "CONF_FLAGS=$CONF_FLAGS_${{ matrix.arch }}_${{ matrix.feature_set }} ${{ matrix.CONF_FLAGS_EXTRA }}" >> $GITHUB_ENV
|
||||
echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH_${{ matrix.arch }}" >> $GITHUB_ENV
|
||||
echo "CFLAGS=$CFLAGS_${{ matrix.arch }}" >> $GITHUB_ENV
|
||||
echo "LDFLAGS=$LDFLAGS_${{ matrix.arch }}" >> $GITHUB_ENV
|
||||
- uses: actions/checkout@v2
|
||||
- run: sudo scripts/install_xrdp_build_dependencies_with_apt.sh ${{ matrix.feature_set }} ${{ matrix.arch }} --allow-downgrades --allow-remove-essential --allow-change-held-packages
|
||||
- run: ./bootstrap
|
||||
- run: ./configure $CONF_FLAGS
|
||||
- run: make
|
||||
- if: ${{ matrix.DISTCHECK }}
|
||||
run: make distcheck
|
||||
|
||||
cppcheck:
|
||||
name: cppcheck
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
CC: gcc
|
||||
# This is required to use a version of cppcheck other than that
|
||||
# supplied with the operating system
|
||||
CPPCHECK_VER: 2.3
|
||||
CPPCHECK_REPO: https://github.com/danmar/cppcheck.git
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Cache cppcheck
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-cppcheck
|
||||
with:
|
||||
path: ~/cppcheck.local
|
||||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.CPPCHECK_VER }}
|
||||
- run: sudo scripts/install_cppcheck_dependencies_with_apt.sh
|
||||
- run: ./bootstrap
|
||||
- run: scripts/install_cppcheck.sh $CPPCHECK_REPO $CPPCHECK_VER
|
||||
- run: scripts/run_cppcheck.sh -v $CPPCHECK_VER
|
46
.gitignore
vendored
46
.gitignore
vendored
@ -1,46 +0,0 @@
|
||||
*~
|
||||
*.a
|
||||
aclocal.m4
|
||||
AUTHORS
|
||||
autom4te.cache/
|
||||
ChangeLog
|
||||
compile
|
||||
config_ac.h
|
||||
config_ac-h.in
|
||||
config.guess
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
.deps/
|
||||
genkeymap/xrdp-genkeymap
|
||||
install-sh
|
||||
instfiles/pam.d/xrdp-sesman
|
||||
keygen/xrdp-keygen
|
||||
*.la
|
||||
.libs
|
||||
libtool
|
||||
*.lo
|
||||
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
|
||||
sesman/sesman.ini
|
||||
*.so
|
||||
stamp-h1
|
||||
xrdp/xrdp
|
||||
xrdp/xrdp.ini
|
||||
xrdp_configure_options.h
|
11
.gitmodules
vendored
11
.gitmodules
vendored
@ -1,11 +0,0 @@
|
||||
[submodule "librfxcodec"]
|
||||
path = librfxcodec
|
||||
url = https://github.com/neutrinolabs/librfxcodec.git
|
||||
branch = .
|
||||
ignore = untracked
|
||||
|
||||
[submodule "libpainter"]
|
||||
path = libpainter
|
||||
url = https://github.com/neutrinolabs/libpainter.git
|
||||
branch = .
|
||||
ignore = untracked
|
176
COPYING
176
COPYING
@ -1,176 +0,0 @@
|
||||
Apache License, Version 2.0
|
||||
|
||||
Version 2.0, January 2004
|
||||
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction, and
|
||||
distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by the
|
||||
copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all other
|
||||
entities that control, are controlled by, or are under common control
|
||||
with that entity. For the purposes of this definition, "control" means
|
||||
(i) the power, direct or indirect, to cause the direction or management
|
||||
of such entity, whether by contract or otherwise, or (ii) ownership of
|
||||
fifty percent (50%) or more of the outstanding shares, or
|
||||
(iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
||||
permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation source,
|
||||
and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical transformation
|
||||
or translation of a Source form, including but not limited to compiled
|
||||
object code, generated documentation, and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or Object form,
|
||||
made available under the License, as indicated by a copyright notice that is
|
||||
included in or attached to the work (an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object form,
|
||||
that is based on (or derived from) the Work and for which the editorial
|
||||
revisions, annotations, elaborations, or other modifications represent, as a
|
||||
whole, an original work of authorship. For the purposes of this License,
|
||||
Derivative Works shall not include works that remain separable from, or
|
||||
merely link (or bind by name) to the interfaces of, the Work and
|
||||
Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including the original
|
||||
version of the Work and any modifications or additions to that Work or Derivative
|
||||
Works thereof, that is intentionally submitted to Licensor for inclusion in the
|
||||
Work by the copyright owner or by an individual or Legal Entity authorized to
|
||||
submit on behalf of the copyright owner. For the purposes of this definition,
|
||||
"submitted" means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems, and
|
||||
issue tracking systems that are managed by, or on behalf of, the Licensor for
|
||||
the purpose of discussing and improving the Work, but excluding communication
|
||||
that is conspicuously marked or otherwise designated in writing by the copyright
|
||||
owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
||||
of whom a Contribution has been received by Licensor and subsequently incorporated
|
||||
within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of this License,
|
||||
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
|
||||
Derivative Works of, publicly display, publicly perform, sublicense, and distribute
|
||||
the Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of this License,
|
||||
each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||
no-charge, royalty-free, irrevocable (except as stated in this section) patent
|
||||
license to make, have made, use, offer to sell, sell, import, and otherwise transfer
|
||||
the Work, where such license applies only to those patent claims licensable by such
|
||||
Contributor that are necessarily infringed by their Contribution(s) alone or by
|
||||
combination of their Contribution(s) with the Work to which such Contribution(s) was
|
||||
submitted. If You institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution
|
||||
incorporated within the Work constitutes direct or contributory patent infringement,
|
||||
then any patent licenses granted to You under this License for that Work shall
|
||||
terminate as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the Work or Derivative
|
||||
Works thereof in any medium, with or without modifications, and in Source or Object
|
||||
form, provided that You meet the following conditions:
|
||||
|
||||
You must give any other recipients of the Work or Derivative Works a copy of this
|
||||
License; and
|
||||
|
||||
You must cause any modified files to carry prominent notices stating that You changed
|
||||
the files; and
|
||||
|
||||
You must retain, in the Source form of any Derivative Works that You distribute,
|
||||
all copyright, patent, trademark, and attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of the Derivative Works; and
|
||||
|
||||
If the Work includes a "NOTICE" text file as part of its distribution, then any
|
||||
Derivative Works that You distribute must include a readable copy of the attribution
|
||||
notices contained within such NOTICE file, excluding those notices that do not pertain
|
||||
to any part of the Derivative Works, in at least one of the following places: within a
|
||||
NOTICE text file distributed as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or, within a display
|
||||
generated by the Derivative Works, if and wherever such third-party notices normally
|
||||
appear. The contents of the NOTICE file are for informational purposes only and do not
|
||||
modify the License. You may add Your own attribution notices within Derivative Works
|
||||
that You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
||||
provided that such additional attribution notices cannot be construed as modifying
|
||||
the License. You may add Your own copyright statement to Your modifications and may
|
||||
provide additional or different license terms and conditions for use, reproduction,
|
||||
or distribution of Your modifications, or for any such Derivative Works as a whole,
|
||||
provided Your use, reproduction, and distribution of the Work otherwise complies
|
||||
with the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
|
||||
intentionally submitted for inclusion in the Work by You to the Licensor shall be under
|
||||
the terms and conditions of this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify the terms of any
|
||||
separate license agreement you may have executed with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade names, trademarks,
|
||||
service marks, or product names of the Licensor, except as required for reasonable and
|
||||
customary use in describing the origin of the Work and reproducing the content of
|
||||
the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing,
|
||||
Licensor provides the Work (and each Contributor provides its Contributions) on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||||
including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
|
||||
MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for
|
||||
determining the appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory, whether in tort
|
||||
(including negligence), contract, or otherwise, unless required by applicable law
|
||||
(such as deliberate and grossly negligent acts) or agreed to in writing, shall any
|
||||
Contributor be liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a result of this
|
||||
License or out of the use or inability to use the Work (including but not limited to
|
||||
damages for loss of goodwill, work stoppage, computer failure or malfunction, or any
|
||||
and all other commercial damages or losses), even if such Contributor has been advised
|
||||
of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing the Work or
|
||||
Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance
|
||||
of support, warranty, indemnity, or other liability obligations and/or rights consistent
|
||||
with this License. However, in accepting such obligations, You may act only on Your
|
||||
own behalf and on Your sole responsibility, not on behalf of any other Contributor,
|
||||
and only if You agree to indemnify, defend, and hold each Contributor harmless for any
|
||||
liability incurred by, or claims asserted against, such Contributor by reason of your
|
||||
accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work
|
||||
To apply the Apache License to your work, attach the following boilerplate notice,
|
||||
with the fields enclosed by brackets "[]" replaced with your own identifying
|
||||
information. (Don't include the brackets!) The text should be enclosed in the
|
||||
appropriate comment syntax for the file format. We also recommend that a file or class
|
||||
name and description of purpose be included on the same "printed page" as the
|
||||
copyright notice for easier identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
|
70
Makefile.am
70
Makefile.am
@ -1,70 +0,0 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
AM_DISTCHECK_CONFIGURE_FLAGS = \
|
||||
--without-systemdsystemunitdir \
|
||||
--enable-strict-locations
|
||||
|
||||
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 \
|
||||
tcutils \
|
||||
tests \
|
||||
vrplayer
|
||||
|
||||
if XRDP_NEUTRINORDP
|
||||
NEUTRINORDPDIR = neutrinordp
|
||||
else
|
||||
NEUTRINORDPDIR =
|
||||
endif
|
||||
|
||||
if XRDP_XRDPVR
|
||||
XRDPVRDIR = xrdpvr
|
||||
else
|
||||
XRDPVRDIR =
|
||||
endif
|
||||
|
||||
if XRDP_PAINTER
|
||||
PAINTERDIR = libpainter
|
||||
else
|
||||
PAINTERDIR =
|
||||
endif
|
||||
|
||||
if XRDP_RFXCODEC
|
||||
RFXCODECDIR = librfxcodec
|
||||
else
|
||||
RFXCODECDIR =
|
||||
endif
|
||||
|
||||
SUBDIRS = \
|
||||
common \
|
||||
vnc \
|
||||
xup \
|
||||
mc \
|
||||
$(NEUTRINORDPDIR) \
|
||||
libxrdp \
|
||||
$(PAINTERDIR) \
|
||||
$(RFXCODECDIR) \
|
||||
xrdp \
|
||||
sesman \
|
||||
keygen \
|
||||
docs \
|
||||
instfiles \
|
||||
genkeymap \
|
||||
xrdpapi \
|
||||
pkgconfig \
|
||||
$(XRDPVRDIR)
|
||||
|
||||
distclean-local:
|
||||
-rm -f xrdp_configure_options.h
|
460
NEWS.md
460
NEWS.md
@ -1,460 +0,0 @@
|
||||
# Release notes for xrdp v0.9.15 (2020/12/28)
|
||||
|
||||
## New features
|
||||
* Allow token sign in without autologon for SSO (#1667 #1668)
|
||||
* Norwegian keyboard support (#1675)
|
||||
* Improved config support for chansrv (#1635)
|
||||
* Unified chansrv, sesman and libxrdp logging (#1633 #1708 #1738) - thanks to @aquesnel
|
||||
* Support SUSE move to /usr/etc (#1702)
|
||||
* Parameters may now be specified for user-specified shell (#1270 #1695)
|
||||
* xrdp executables now allow alternative config files to be specified with -c (#1588 #1650 #1651)
|
||||
* sesrun improvements (#1741)
|
||||
* Drive redirection location can now be specified (#1048)
|
||||
* Now compiles on RISC-V (#1761)
|
||||
|
||||
## Bug fixes
|
||||
* Additional buffer overflow checks (#1662)
|
||||
* FUSE support now builds on 32-bit platforms (#1682)
|
||||
* genkeymap array size conflict fixed (#1691)
|
||||
* Buffering issue with neutrinordp over a slow link fixed (#1608 1634)
|
||||
* Various documentation fixes (#1704 #1741 #1755 #1759)
|
||||
* Prevent PAM info message from causing authentication failure (#1727)
|
||||
* Cosmetic fixes for minor issues (#1751 #1755 #1749)
|
||||
* Try harder to clean up socket files on session exit (#1740 #1756)
|
||||
* xrdp-chansrv become defunct in docker while file copy (#1658)
|
||||
|
||||
## Internal changes
|
||||
* Compilation warnings with newer compilers (#1659 #1680)
|
||||
* Continuation Integration checks on 32-bit platforms now include FUSE support (#1682)
|
||||
* Continuation Integration builds now default to the Ubuntu Focal platform (#1666)
|
||||
* FUSE type tidy-ups (#1686)
|
||||
* Switch from Travis CI to GitHub Actions (#1728 #1732)
|
||||
* Easier to set up console logging for utilities (#1711)
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.14 (2020/08/31)
|
||||
|
||||
## New features
|
||||
* VNC multi-monitor support if you are using a suitable Xvnc server #1343
|
||||
* VNC sessions now resize by default on reconnection if you are using a suitable Xvnc server #1343
|
||||
* Support Slackware for PAM #1558 #1560
|
||||
* Support Programmer Dvorak Keyboard #1663
|
||||
|
||||
**[HEADS UP]** The VNC changes are significant. They described in more detail on the following wiki page.
|
||||
* [Xvnc backend : Multi monitor and resize support](https://github.com/neutrinolabs/xrdp/wiki/Xvnc-backend-:-Multi-monitor-and-resize-support)
|
||||
|
||||
## Bug fixes
|
||||
* Fix odd shift key behavior (workaround) #397 #1522
|
||||
* Fix Xorg path in the document for Arch Linux #1448 #1529
|
||||
* Fix Xorg path in the document for CentOS 8 #1646 #1647
|
||||
* Fix internal username/password buffer is smaller than RDP protocol specification #1648 #1653
|
||||
* Fix possible memory out-of-bounds accesses #1549
|
||||
* Fix memory allocation overflow #1557
|
||||
* Prevent chansrv input channels being scanned during a server reset #1595
|
||||
* Ignore TS_MULTIFRAGMENTUPDATE_CAPABILITYSET from client if fp disabled #1593
|
||||
* Minor manpage fixes #1611
|
||||
|
||||
## Other changes
|
||||
* CI error fixes
|
||||
* Introduce cppcheck
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
# Release notes for xrdp v0.9.13.1 (2020/06/30)
|
||||
|
||||
This is a security fix release that includes fixes for the following local buffer overflow vulnerability.
|
||||
|
||||
* [CVE-2022-4044: Local users can perform a buffer overflow attack against the xrdp-sesman service and then impersonate it](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-4044)
|
||||
|
||||
This update is recommended for all xrdp users.
|
||||
|
||||
## Special thanks
|
||||
|
||||
Thanks to [Ashley Newson](https://github.com/ashleynewson) reporting the vulnerability and reviewing fix.
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.13 (2020/03/11)
|
||||
|
||||
This release is an intermediate bugfix release. The previous version v0.9.12 has some regressions on drive redirection.
|
||||
|
||||
## Bug fixes (drive redirection related)
|
||||
* Fix chansrv crashes with segmentation fault (regression in #1449) #1487
|
||||
* Drive redirection now supports Guacamole client #1505 #1507
|
||||
* Prevent a coredump in the event of a corrupted file system #1507
|
||||
* Resolve double-free in `chansrv_fuse` #1469
|
||||
|
||||
## Bug fixes (other)
|
||||
* Fix the issue `xrdp --version | less` will show empty output #1471 #1472
|
||||
* Fix some warnings found by cppcheck #1479 #1481 #1484 #1485
|
||||
|
||||
## Other changes
|
||||
* Add FreeBSD CI test #1466
|
||||
* Move Microsoft-defined constants into separate includes #1470
|
||||
* Perform cppcheck during CI test #1493
|
||||
* Support mousex button 8/9 #1478
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.12 (2019/12/28)
|
||||
|
||||
## Bug fixes
|
||||
* Fix "The log reference is NULL" error when sesman startup #1425
|
||||
* Fix behavior when shmem_id changes #1439
|
||||
* Make vsock config accept -1 for cid and port #1441
|
||||
* Cleanup refresh rect and check stream bounds #1437
|
||||
* Significant improvements in drive redirection #1449
|
||||
* Fix build on macOS Catalina #1462
|
||||
|
||||
## Other changes
|
||||
* Proprietary microphone redirection via rdpsnd is now default off
|
||||
RDP compatible microphone redirection is on instead #1427
|
||||
* Skip connecting to chansrv when no channels enabled #1393
|
||||
* Add openSUSE's pam rules #1442
|
||||
* Do not terminate xrdp daemon when caught SIGHUP #1319
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
# Release notes for xrdp v0.9.11 (2019/08/19)
|
||||
|
||||
## New features
|
||||
* Suppress output (do not draw screen when client window is minimized) #1330
|
||||
* Audio input (microphone) redirection compatible with [MS-RDPEAI](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpeai/d04ffa42-5a0f-4f80-abb1-cc26f71c9452) #1369
|
||||
* Now xrdp can listen on more than one port #1124 #1366
|
||||
|
||||
## Bug fixes
|
||||
* Fix the issue audio redirection sometimes sounds with long delay #1363
|
||||
* Check term event for more responsive shutdown #1372
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.11 (2019/08/19)
|
||||
|
||||
## New features
|
||||
* Suppress output (do not draw screen when client window is minimized) #1330
|
||||
* Audio input (microphone) redirection compatible with [MS-RDPEAI](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpeai/d04ffa42-5a0f-4f80-abb1-cc26f71c9452) #1369
|
||||
* Now xrdp can listen on more than one port #1124 #1366
|
||||
|
||||
## Bug fixes
|
||||
* Fix the issue audio redirection sometimes sounds with long delay #1363
|
||||
* Check term event for more responsive shutdown #1372
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.10 (2019/04/18)
|
||||
|
||||
## Special thanks
|
||||
Thank you for matt335672 contributing to lots of improvements in drive redirection!
|
||||
|
||||
## New features
|
||||
* Restrict outbound (server->client) clipboard transfer, configured in `sesman.ini` #1298
|
||||
|
||||
## Bug fixes
|
||||
* Fix the issue libscp v1 not setting width but height twice #1293
|
||||
* Fix the issue reconnecting to session causes duplicate drive entries in fuse fs #1299
|
||||
* Fix default_wm and reconnect_sh refer wrong path after sesman caught SIGUP #1315 #1331
|
||||
* Shutdown xrdp more responsively #1325
|
||||
* Improve remote file lookup in drive redirection #996 #1327
|
||||
* Overwriting & appending to existing files is are now supported #1327
|
||||
|
||||
## Other changes
|
||||
* Add Danish Keyboard #1290
|
||||
* Put xrdp- prefix to some executables appear in man page #1313
|
||||
* Replace some URLs from SF.net to xrdp.org #1313
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.9 (2018/12/25)
|
||||
|
||||
## Release cycle
|
||||
From the next release, release cycle will be changed from quarterly to every
|
||||
4 months. xrdp will be released in April, August, December.
|
||||
|
||||
## New features
|
||||
* Disconnection by idle timeout (requires xorgxrdp v0.2.9 or later) #1227
|
||||
* Glyph cache v2 (fixes no font issue on iOS/macOS/Android client) #367 #1235
|
||||
|
||||
## Bug fixes
|
||||
* Fix xrdp-chansrv crashes caused in drive redirection #1202 #1225
|
||||
* Fix build with FDK AAC v2 #1257
|
||||
* Do not enable RemoteApp if the INFO_RAIL flag is not set (RDP-RDP proxy) #1253
|
||||
|
||||
## Other changes
|
||||
* Add Spanish Latin Amarican keyboard #1237 #1240 #1244
|
||||
* Dynamic channel improvements #1222 #1224
|
||||
* Remove some deprecated sesman session types #1232
|
||||
* Refactoring and cleanups
|
||||
|
||||
## Known issues
|
||||
* FreeRDP 2.0.0-rc4 or later might not able to connect to xrdp due to
|
||||
xrdp's bad-mannered behaviour, add `+glyph-cache` option to FreeRDP to connect #1266
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.8 (2018/09/25)
|
||||
|
||||
## Deprecation notice
|
||||
We removed TLSv1 and TLSv1.1 from the default config. The current default is TLSv1.2
|
||||
and TLSv1.3. Users can whenever re-enable these early TLS versions by editing xrdp.
|
||||
To use TLSv1.3, OpenSSL or LibreSSL must support TLSv1.3. You can know the OpenSSL
|
||||
or LibreSSL version by `xrdp --version` command that compiled with xrdp.
|
||||
|
||||
## Other topics
|
||||
|
||||
Pulseaudio modules has been removed from xrdp source tree since it is actually
|
||||
independent and not part of xrdp. The repository has been moved to:
|
||||
https://github.com/neutrinolabs/pulseaudio-module-xrdp
|
||||
|
||||
If you want to use audio redirection, make sure install the module separately.
|
||||
|
||||
## New features
|
||||
* Add TLSv1.3 support #1193
|
||||
|
||||
## Bug fixes
|
||||
* Ensure unmount redirected drive on fatal X error #1140
|
||||
|
||||
## Other changes
|
||||
* Show more helpful message if xrdp-dis failed #1206
|
||||
* Pass pulse socket name via environment variable #1198
|
||||
* Fix xrdp's log path in man page #1168
|
||||
|
||||
# Release notes for xrdp v0.9.7 (2018/06/29)
|
||||
|
||||
## Deprecation notice
|
||||
x11rdp has been removed from xrdp reposiory and stored in the separate repository.
|
||||
Checkout [x11rdp repository](https://github.com/neutrionlabs/x11rdp) if you still need x11rdp.
|
||||
In most cases, [xorgxrdp](https://github.com/neutrinolabs/xorgxrdp) can replace x11rdp.
|
||||
|
||||
## Bug fixes
|
||||
* Fix endianness detection on ppc64el #1082
|
||||
* Fix a bug xrdp file copy slow #1112 #1132
|
||||
* Copy the PAM session environment for the reconnect script #1120
|
||||
* Accept fullpath for DefaultWindowManager, ReconnectScript #1147
|
||||
|
||||
## Other changes
|
||||
* Add PAM support for Arch Linux #1078
|
||||
* Show OpenSSL version to '--version' CLI option #1096
|
||||
* Separate x11rdp from xrdp repository #1104
|
||||
* Support sesrun start xorgxrdp sessions #1108
|
||||
* Show configure summary when configure is done #1126 #1134 #1137
|
||||
* Less spit on the console when sesman starts #1142
|
||||
* Fix memory leaks #1146
|
||||
* Separate rc script for FreeBSD into xrdp and xrdp-sesman #1153
|
||||
* Improve documents and helps
|
||||
|
||||
## Known issues
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.6 (2018/03/26)
|
||||
|
||||
## Compatibility notice
|
||||
Exclamation mark (`!`) has been removed from comment out symbol of config files.
|
||||
Use number sign (`#`) or semicolon (`;`) instead. As a result of this change, now
|
||||
you can use exclamation mark as config value such as in `tls_ciphers`.
|
||||
|
||||
```
|
||||
tls_ciphers=HIGH:!aNULL:!eNULL:!EXPORT:!RC4
|
||||
```
|
||||
|
||||
See also: #1033
|
||||
|
||||
## macOS supports
|
||||
Please note that xrdp still doesn't support macOS officially so far.
|
||||
However, a volunteer is working on macOS compatibility.
|
||||
|
||||
* Generate dylibs for macOS #1015
|
||||
* Add PAM support for macOS #1021
|
||||
|
||||
## Bug fixes
|
||||
* Make listen check before daemon fork #988
|
||||
* Fix xrdp sometimes become zombie processes #1000
|
||||
* Include hostname in sesman password file name #1006 #1007 #1076
|
||||
* Fix default startwm.sh to use bash explicitly #1009 #1049
|
||||
* Fix the issue FreeBSD doesn't acknowledge terminated sessions #1016 #1030
|
||||
|
||||
## Other changes
|
||||
* Add Swiss French keyboard #1053
|
||||
* Improve perfect forward secrecy, explicitly enable ECDHE/DHE #1024 #1052 #1063
|
||||
* Lots of leak fixes, cleanups and refactoring
|
||||
|
||||
## Known issues
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.5 (2017/12/27)
|
||||
|
||||
## Security fixes
|
||||
* Fix local denial of service [CVE-2017-16927](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-16927) #958 #979
|
||||
|
||||
## New features
|
||||
* Add a new log level TRACE more verbose than DEBUG #835 #944
|
||||
* SSH agent forwarding via RDP #867 #868 FreeRDP/FreeRDP#4122
|
||||
* Support horizontal wheel properly #928
|
||||
|
||||
## Bug fixes
|
||||
|
||||
* Avoid use of hard-coded sesman port #895
|
||||
* Workaround for corrupted display with Windows Server 2008 using NeutrinoRDP #869
|
||||
* Fix glitch in audio redirection by AAC #910 #936
|
||||
* Implement vsock support #930 #935 #948
|
||||
* Avoid 100% CPU usage on SSL accept #956
|
||||
|
||||
## Other changes
|
||||
* Add US Dvorak keyboard #929
|
||||
* Suppress some misleading logs #964
|
||||
* Add Finnish keyboard #972
|
||||
* Add more user-friendlier description about Xorg config #974
|
||||
* Renew pulseaudio document #984 #985
|
||||
* Lots of cleanups and refactoring
|
||||
|
||||
## Known issues
|
||||
* Audio redirection by MP3 codec doesn't sound with some client, use AAC instead #965
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.4 (2017/09/28)
|
||||
|
||||
## New features
|
||||
* Accept prefill credentials in base64 form #153 #811
|
||||
* Indroduce AAC encoder to audio redirection (requires Windows 10 client)
|
||||
|
||||
## Bugfixes
|
||||
* Fix ocasional SEGV in drive redirection #838
|
||||
* Fix client's IP addresses in xrdp-sesman.log are always logged as `0.0.0.0` #878 #882
|
||||
* Fix `ls_background_image` didn't accept full path #776 #853
|
||||
* Fix misuse of hidelogwindow #414 #876
|
||||
* Fix WTSVirtualChannelWrite return code #859
|
||||
* Fix no longer needed socket files remained in the socket dir #812 #831
|
||||
* Make creating socket path a bit more robust #823
|
||||
|
||||
## Other changes
|
||||
* Add Belgian keyboard #858
|
||||
* Add a PAM file for FreeBSD #824
|
||||
* Several refactorings and cosmetic changes
|
||||
|
||||
## Known issues
|
||||
* Windows 10 (1703) shows black blank screen in RemoteFX mode
|
||||
* This issue is already fixed at Insider Preview build 16273
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.3.1 (2017/08/16)
|
||||
|
||||
This release fixes a trivial packaging issue #848 occurred in v0.9.3. The issue only affects systemd systems. This release is principally for distro packagers or users who compile & install xrdp from source.
|
||||
|
||||
Users who running xrdp on these systems don't need to upgrade from v0.9.3 to v0.9.3.1.
|
||||
|
||||
* Linux systems without systemd
|
||||
* non-Linux systems such as BSD operating systems
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.3 (2017/07/15)
|
||||
|
||||
## New features
|
||||
* Log user-friendly messages when certificate/privkey is inaccessible
|
||||
|
||||
## Bugfixes
|
||||
* Now sesman sets mandatory LOGNAME environment variable #725
|
||||
* Now sesman ensures socket directory present #801
|
||||
* Exit with failure status if port already in use #644
|
||||
* Eliminate some hard coded paths
|
||||
* Fix glitches with IPv4 struct initialization #803
|
||||
* Fix some keyboard layout integration (UK, Spanish)
|
||||
* Fix handle OS when IPv6 disabled #714
|
||||
* Fix issues around systemd session #778
|
||||
* Fix protocol error when 32 bit color and non RemoteFX session #737 #804
|
||||
* Fix sesadmin shows error when no sessions #797
|
||||
* Fix TLS spins 100% CPU #728
|
||||
* Fix Xvnc backend disconnects when some data copied to clipboard #755
|
||||
* Pick up the first section if given section(domain) doesn't match anything #750
|
||||
|
||||
## Other changes
|
||||
* Change xrdp-chansrv log path to include display number
|
||||
* Optimize startwm.sh for SUSE
|
||||
* Several cleanups and optimizations
|
||||
|
||||
## Known issues
|
||||
* Windows 10 (1703) shows black blank screen in RemoteFX mode
|
||||
|
||||
-----------------------
|
||||
|
||||
# Release notes for xrdp v0.9.2 (2017/03/30)
|
||||
## New features
|
||||
* RemoteFX codec support is now enabled by default.
|
||||
* Bitmap updates support is now enabled by default.
|
||||
* TLS ciphers suites and version is now logged.
|
||||
* Connected computer name is now logged.
|
||||
* Switched to Xorg (xorgxrdp) as the default backend now.
|
||||
* Miscellaneous RemoteFX codec mode improvements.
|
||||
* Socket directory is configurable at the compile time.
|
||||
|
||||
## Bugfixes
|
||||
* Parallels client for MacOS / iOS can now connect (audio redirection must be disabled on client or xrdp server though).
|
||||
* MS RDP client for iOS can now connect using TLS security layer.
|
||||
* MS RDP client for Android can now connect to xrdp.
|
||||
* Large resolutions (4K) can be used with RemoteFX graphics.
|
||||
* Multiple RemoteApps can be opened throguh NeutrinoRDP proxy.
|
||||
* tls_ciphers in xrdp.ini is not limited to 63 chars anymore, it's variable-length.
|
||||
* Fixed an issue where tls_ciphers were ignored and rdp security layer could be used instead.
|
||||
* Kill disconnected sessions feature is working with Xorg (xorgxrdp) backend.
|
||||
* Miscellaneous code cleanup and memory issues fixes.
|
||||
|
||||
-----------------------
|
||||
|
||||
# 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
|
144
README.md
144
README.md
@ -1,144 +0,0 @@
|
||||
[![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-questions)
|
||||
![Apache-License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)
|
||||
|
||||
*Current Version:* 0.9.15
|
||||
|
||||
# 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 ([requires to build additional modules](https://github.com/neutrinolabs/xrdp/wiki/How-to-set-up-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.
|
||||
|
||||
xrdp listens on 3389/tcp. Make sure your firewall accepts connection to
|
||||
3389/tcp from where you want to access.
|
||||
|
||||
### Ubuntu / Debian
|
||||
```bash
|
||||
apt install xrdp
|
||||
```
|
||||
|
||||
### RedHat / CentOS / Fedora
|
||||
|
||||
On RedHat and CentOS, make sure to enable EPEL packages first.
|
||||
|
||||
```bash
|
||||
yum install epel-release
|
||||
```
|
||||
|
||||
Install xrdp package.
|
||||
|
||||
```bash
|
||||
yum install xrdp
|
||||
```
|
||||
|
||||
`yum` is being replaced with `dnf`, so you may need to use `dnf` instead
|
||||
of `yum` in the above commands.
|
||||
|
||||
## 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 macOS 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
|
||||
```
|
||||
|
||||
If you want to use audio redirection, you need to build and install additional
|
||||
pulseaudio modules. The build instructions can be found at wiki.
|
||||
|
||||
* [How to set up audio redirection](https://github.com/neutrinolabs/xrdp/wiki/How-to-set-up-audio-redirection)
|
||||
|
||||
## 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
|
||||
├── 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
|
||||
├── xrdp ········ main server code
|
||||
├── xrdpapi ····· virtual channel API
|
||||
├── xrdpvr ······ API for playing media over RDP
|
||||
└── xup ········· X11rdp and xorgxrdp client module
|
||||
```
|
16
SECURITY.md
16
SECURITY.md
@ -1,16 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please DO NOT report any security issues to public GitHub issue.
|
||||
|
||||
If you find a security vulnerability please kindly inform us about the problem immediately
|
||||
so that we can fix the security problem to protect a lot of users around the world as soon
|
||||
as possible.
|
||||
|
||||
Our email address for security report is below. This is a private mailing list and not open
|
||||
for public viewing.
|
||||
|
||||
* [xrdp-core@googlegroups.com](mailto:xrdp-core@googlegroups.com)
|
||||
|
@ -1,56 +0,0 @@
|
||||
|
||||
# detached brackets
|
||||
--style=allman
|
||||
|
||||
# 4 spaces, no tabs
|
||||
--indent=spaces=4
|
||||
|
||||
# for C++ files only
|
||||
--indent-classes
|
||||
|
||||
# Indent 'switch' blocks so that the 'case X:' statements are indented in the switch block.
|
||||
# The entire case block is indented.
|
||||
--indent-switches
|
||||
|
||||
# Add extra indentation to namespace blocks. This option has no effect on Java files.
|
||||
--indent-namespaces
|
||||
|
||||
# Converts tabs into spaces in the non-indentation part of the line.
|
||||
--convert-tabs
|
||||
|
||||
# requires --convert-tabs to work properly
|
||||
--indent-preprocessor
|
||||
|
||||
--indent-col1-comments
|
||||
|
||||
--min-conditional-indent=2
|
||||
|
||||
--max-instatement-indent=40
|
||||
|
||||
# Insert space padding around operators.
|
||||
--pad-oper
|
||||
|
||||
# Insert space padding after paren headers only (e.g. 'if', 'for', 'while'...).
|
||||
--pad-header
|
||||
|
||||
|
||||
# Add brackets to unbracketed one line conditional statements (e.g. 'if', 'for', 'while'...).
|
||||
--add-brackets
|
||||
|
||||
--align-pointer=name
|
||||
|
||||
# Do not retain a backup of the original file. The original file is purged after it is formatted.
|
||||
--suffix=none
|
||||
|
||||
# For each directory in the command line, process all subdirectories recursively.
|
||||
--recursive
|
||||
|
||||
# Preserve the original file's date and time modified.
|
||||
--preserve-date
|
||||
|
||||
# Formatted files display mode. Display only the files that have been formatted.
|
||||
# Do not display files that are unchanged.
|
||||
--formatted
|
||||
|
||||
--lineend=linux
|
||||
|
41
bootstrap
41
bootstrap
@ -1,41 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
which autoconf
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install autoconf"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which automake
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install automake"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which libtool || which libtoolize
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install libtool"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
which pkg-config
|
||||
if ! test $? -eq 0
|
||||
then
|
||||
echo "error, install pkg-config"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! test -f libpainter/configure.ac
|
||||
then
|
||||
git submodule update --init libpainter
|
||||
fi
|
||||
|
||||
if ! test -f librfxcodec/configure.ac
|
||||
then
|
||||
git submodule update --init librfxcodec
|
||||
fi
|
||||
|
||||
autoreconf -fvi
|
210
coding_style.md
210
coding_style.md
@ -1,210 +0,0 @@
|
||||
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,72 +0,0 @@
|
||||
if XRDP_PIXMAN
|
||||
PIXMAN_SOURCES =
|
||||
else
|
||||
PIXMAN_SOURCES = pixman-region16.c pixman-region.h
|
||||
endif
|
||||
|
||||
EXTRA_DIST = pixman-region.c
|
||||
|
||||
include_HEADERS = \
|
||||
ms-erref.h \
|
||||
ms-fscc.h \
|
||||
ms-rdpbcgr.h \
|
||||
ms-rdpefs.h \
|
||||
ms-rdpegdi.h \
|
||||
ms-rdpele.h \
|
||||
ms-rdperp.h \
|
||||
ms-smb2.h \
|
||||
xrdp_client_info.h \
|
||||
xrdp_constants.h \
|
||||
xrdp_rail.h \
|
||||
xrdp_sockets.h
|
||||
|
||||
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\" \
|
||||
-DXRDP_SOCKET_PATH=\"${socketdir}\"
|
||||
|
||||
if XRDP_DEBUG
|
||||
AM_CPPFLAGS += -DXRDP_DEBUG
|
||||
endif
|
||||
|
||||
AM_CFLAGS = $(OPENSSL_CFLAGS)
|
||||
|
||||
module_LTLIBRARIES = \
|
||||
libcommon.la
|
||||
|
||||
libcommon_la_SOURCES = \
|
||||
arch.h \
|
||||
base64.h \
|
||||
base64.c \
|
||||
defines.h \
|
||||
fifo.c \
|
||||
fifo.h \
|
||||
file.c \
|
||||
file.h \
|
||||
list.c \
|
||||
list.h \
|
||||
list16.c \
|
||||
list16.h \
|
||||
log.c \
|
||||
log.h \
|
||||
os_calls.c \
|
||||
os_calls.h \
|
||||
parse.h \
|
||||
rail.h \
|
||||
ssl_calls.c \
|
||||
ssl_calls.h \
|
||||
string_calls.c \
|
||||
string_calls.h \
|
||||
thread_calls.c \
|
||||
thread_calls.h \
|
||||
trans.c \
|
||||
trans.h \
|
||||
$(PIXMAN_SOURCES)
|
||||
|
||||
libcommon_la_LIBADD = \
|
||||
-lpthread \
|
||||
$(OPENSSL_LIBS) \
|
||||
$(DLOPEN_LIBS)
|
160
common/arch.h
160
common/arch.h
@ -1,160 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if !defined(ARCH_H)
|
||||
#define ARCH_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(HAVE_STDINT_H)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned char uint8_t;
|
||||
typedef signed short int16_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef signed int int32_t;
|
||||
typedef unsigned int uint32_t;
|
||||
#if defined(_WIN64)
|
||||
typedef signed __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef signed __int64 intptr_t;
|
||||
typedef unsigned __int64 uintptr_t;
|
||||
#else
|
||||
typedef signed long long int64_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
typedef signed long intptr_t;
|
||||
typedef unsigned long uintptr_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef int bool_t;
|
||||
|
||||
/* you can define L_ENDIAN or B_ENDIAN and NEED_ALIGN or NO_NEED_ALIGN
|
||||
in the makefile to override */
|
||||
|
||||
/* check endianness */
|
||||
#if !(defined(L_ENDIAN) || defined(B_ENDIAN))
|
||||
#if !defined(__BYTE_ORDER) && defined(__linux__)
|
||||
#include <endian.h>
|
||||
#endif
|
||||
|
||||
#if defined(BYTE_ORDER)
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
#define B_ENDIAN
|
||||
#else
|
||||
#define L_ENDIAN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !(defined(L_ENDIAN) || defined(B_ENDIAN))
|
||||
#if defined(__sparc__) || \
|
||||
defined(__hppa__) || \
|
||||
(defined(__PPC__) && defined(__BIG_ENDIAN__)) || \
|
||||
(defined(__ppc__) && defined(__BIG_ENDIAN__))
|
||||
#define B_ENDIAN
|
||||
#else
|
||||
#define L_ENDIAN
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* check if we need to align data */
|
||||
#if !(defined(NEED_ALIGN) || defined(NO_NEED_ALIGN))
|
||||
#if defined(__sparc__) || defined(__alpha__) || defined(__hppa__) || \
|
||||
defined(__AIX__) || defined(__mips__) || \
|
||||
defined(__ia64__) || defined(__arm__) || \
|
||||
(defined(__PPC__) && defined(__BIG_ENDIAN__)) || \
|
||||
(defined(__ppc__) && defined(__BIG_ENDIAN__))
|
||||
#define NEED_ALIGN
|
||||
#elif defined(__x86__) || defined(__x86_64__) || \
|
||||
defined(__AMD64__) || defined(_M_IX86) || defined (_M_AMD64) || \
|
||||
defined(__i386__) || defined(__aarch64__) || \
|
||||
defined(__riscv)
|
||||
#define NO_NEED_ALIGN
|
||||
#else
|
||||
#warning unknown arch
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* defines for thread creation factory functions */
|
||||
#if defined(_WIN32)
|
||||
#define THREAD_RV unsigned long
|
||||
#define THREAD_CC __stdcall
|
||||
#else
|
||||
#define THREAD_RV void*
|
||||
#define THREAD_CC
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(__BORLANDC__)
|
||||
#define EXPORT_CC _export __cdecl
|
||||
#else
|
||||
#define EXPORT_CC
|
||||
#endif
|
||||
#else
|
||||
#define EXPORT_CC
|
||||
#endif
|
||||
|
||||
#ifndef DEFINED_Ts
|
||||
#define DEFINED_Ts
|
||||
typedef int8_t ti8;
|
||||
typedef uint8_t tui8;
|
||||
typedef int8_t tsi8;
|
||||
typedef int16_t ti16;
|
||||
typedef uint16_t tui16;
|
||||
typedef int16_t tsi16;
|
||||
typedef int32_t ti32;
|
||||
typedef uint32_t tui32;
|
||||
typedef int32_t tsi32;
|
||||
typedef int64_t ti64;
|
||||
typedef uint64_t tui64;
|
||||
typedef int64_t tsi64;
|
||||
typedef bool_t tbool;
|
||||
typedef intptr_t tbus;
|
||||
typedef intptr_t tintptr;
|
||||
|
||||
/* wide char, socket */
|
||||
#if defined(_WIN32)
|
||||
typedef unsigned short twchar;
|
||||
typedef unsigned int tsock;
|
||||
#else
|
||||
typedef int twchar;
|
||||
typedef int tsock;
|
||||
#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(void);
|
||||
int mod_exit(tintptr);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,80 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Koichiro Iwao 2017
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Base64 encoder / decoder
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include "string_calls.h"
|
||||
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/evp.h>
|
||||
|
||||
size_t
|
||||
base64_decoded_bytes(const char *src)
|
||||
{
|
||||
size_t len;
|
||||
size_t padding;
|
||||
|
||||
len = g_strlen(src);
|
||||
padding = 0;
|
||||
|
||||
if (src[len - 1] == '=')
|
||||
{
|
||||
padding++;
|
||||
|
||||
if (src[len - 2] == '=')
|
||||
{
|
||||
padding++;
|
||||
}
|
||||
}
|
||||
|
||||
return len * 3 / 4 - padding;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
char *
|
||||
base64_decode(char *dst, const char *src, size_t len)
|
||||
{
|
||||
BIO *b64;
|
||||
BIO *bio;
|
||||
char *b64str;
|
||||
size_t estimated_decoded_bytes;
|
||||
size_t decoded_bytes;
|
||||
|
||||
b64str = g_strdup(src);
|
||||
estimated_decoded_bytes = base64_decoded_bytes(b64str);
|
||||
dst[estimated_decoded_bytes] = '\0';
|
||||
|
||||
b64 = BIO_new(BIO_f_base64());
|
||||
bio = BIO_new_mem_buf(b64str, len);
|
||||
bio = BIO_push(b64, bio);
|
||||
BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
|
||||
decoded_bytes = BIO_read(bio , dst, len);
|
||||
BIO_free_all(bio);
|
||||
|
||||
/* if input is corrupt, return empty string */
|
||||
if (estimated_decoded_bytes != decoded_bytes)
|
||||
{
|
||||
g_strncpy(dst, "", sizeof(""));
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Koichiro Iwao 2017
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* Base64 encoder / decoder
|
||||
*/
|
||||
|
||||
#if !defined(SSL_CALLS_H)
|
||||
#define SSL_CALLS_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
size_t
|
||||
base64_decoded_bytes(const char *src);
|
||||
char *
|
||||
base64_decode(char *dst, const char *src, size_t len);
|
||||
|
||||
#endif
|
113
common/defines.h
113
common/defines.h
@ -1,113 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* main define/macro file
|
||||
*/
|
||||
|
||||
#ifndef DEFINES_H
|
||||
#define DEFINES_H
|
||||
|
||||
/* check for debug */
|
||||
#ifdef XRDP_DEBUG
|
||||
#define DEBUG(args) g_writeln args;
|
||||
#define LIB_DEBUG(_mod, _text) _mod->server_msg(_mod, _text, 1);
|
||||
#else
|
||||
#define DEBUG(args)
|
||||
#define LIB_DEBUG(_mod, _text)
|
||||
#endif
|
||||
/* other macros */
|
||||
#undef MIN
|
||||
#define MIN(x1, x2) ((x1) < (x2) ? (x1) : (x2))
|
||||
#undef MAX
|
||||
#define MAX(x1, x2) ((x1) > (x2) ? (x1) : (x2))
|
||||
#undef HIWORD
|
||||
#define HIWORD(in) (((in) & 0xffff0000) >> 16)
|
||||
#undef LOWORD
|
||||
#define LOWORD(in) ((in) & 0x0000ffff)
|
||||
#undef MAKELONG
|
||||
#define MAKELONG(lo, hi) ((((hi) & 0xffff) << 16) | ((lo) & 0xffff))
|
||||
#define UNUSED_VAR(x) ((void) (x))
|
||||
|
||||
/* graphics macros */
|
||||
#define MAKERECT(r, x, y, cx, cy) \
|
||||
{ (r).left = x; (r).top = y; (r).right = (x) + (cx); (r).bottom = (y) + (cy); }
|
||||
#define ISRECTEMPTY(r) (((r).right <= (r).left) || ((r).bottom <= (r).top))
|
||||
#define RECTOFFSET(r, dx, dy) \
|
||||
{ (r).left += dx; (r).top += dy; (r).right += dx; (r).bottom += dy; }
|
||||
#define GETPIXEL8(d, x, y, w) (*(((unsigned char*)d) + ((y) * (w) + (x))))
|
||||
#define GETPIXEL16(d, x, y, w) (*(((unsigned short*)d) + ((y) * (w) + (x))))
|
||||
#define GETPIXEL32(d, x, y, w) (*(((unsigned int*)d) + ((y) * (w) + (x))))
|
||||
#define SETPIXEL8(d, x, y, w, v) \
|
||||
(*(((unsigned char*)d) + ((y) * (w) + (x))) = (v))
|
||||
#define SETPIXEL16(d, x, y, w, v) \
|
||||
(*(((unsigned short*)d) + ((y) * (w) + (x))) = (v))
|
||||
#define SETPIXEL32(d, x, y, w, v) \
|
||||
(*(((unsigned int*)d) + ((y) * (w) + (x))) = (v))
|
||||
#define COLOR8(r, g, b) \
|
||||
( \
|
||||
(((r) >> 5) << 0) | \
|
||||
(((g) >> 5) << 3) | \
|
||||
(((b) >> 6) << 6) \
|
||||
)
|
||||
#define COLOR15(r, g, b) ((((r) >> 3) << 10) | (((g) >> 3) << 5) | ((b) >> 3))
|
||||
#define COLOR16(r, g, b) ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
|
||||
#define COLOR24RGB(r, g, b) (((r) << 16) | ((g) << 8) | (b))
|
||||
#define COLOR24BGR(r, g, b) (((b) << 16) | ((g) << 8) | (r))
|
||||
#define HRED(c) ((c & 0xff0000) >> 16)
|
||||
#define HGREEN(c) ((c & 0x00ff00) >> 8)
|
||||
#define HBLUE(c) ((c & 0x0000ff))
|
||||
#define HCOLOR(bpp,c) \
|
||||
( \
|
||||
(bpp==8?COLOR8(HRED(c),HGREEN(c),HBLUE(c)): \
|
||||
(bpp==15?COLOR15(HRED(c),HGREEN(c),HBLUE(c)): \
|
||||
(bpp==16?COLOR16(HRED(c),HGREEN(c),HBLUE(c)): \
|
||||
(bpp>=24?COLOR24BGR(HRED(c),HGREEN(c),HBLUE(c)):c) \
|
||||
) \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
#define SPLITCOLOR15(r, g, b, c) \
|
||||
{ \
|
||||
r = (((c) >> 7) & 0xf8) | (((c) >> 12) & 0x7); \
|
||||
g = (((c) >> 2) & 0xf8) | (((c) >> 8) & 0x7); \
|
||||
b = (((c) << 3) & 0xf8) | (((c) >> 2) & 0x7); \
|
||||
}
|
||||
#define SPLITCOLOR16(r, g, b, c) \
|
||||
{ \
|
||||
r = (((c) >> 8) & 0xf8) | (((c) >> 13) & 0x7); \
|
||||
g = (((c) >> 3) & 0xfc) | (((c) >> 9) & 0x3); \
|
||||
b = (((c) << 3) & 0xf8) | (((c) >> 2) & 0x7); \
|
||||
}
|
||||
#define SPLITCOLOR32(r, g, b, c) \
|
||||
{ \
|
||||
r = ((c) >> 16) & 0xff; \
|
||||
g = ((c) >> 8) & 0xff; \
|
||||
b = (c) & 0xff; \
|
||||
}
|
||||
/* font macros */
|
||||
#define FONT_DATASIZE(f) \
|
||||
((((f)->height * (((f)->width + 7) / 8)) + 3) & ~3);
|
||||
/* use crc for bitmap cache lookups */
|
||||
#define USE_CRC
|
||||
|
||||
#define XR_RGB2BGR(a_ulColor) \
|
||||
(a_ulColor & 0xFF000000) | \
|
||||
((a_ulColor & 0x00FF0000) >> 16) | \
|
||||
(a_ulColor & 0x0000FF00) | \
|
||||
((a_ulColor & 0x000000FF) << 16)
|
||||
|
||||
#endif
|
173
common/fifo.c
173
common/fifo.c
@ -1,173 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Laxmikant Rashinkar 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* FIFO implementation to store pointer to data struct
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include "fifo.h"
|
||||
#include "os_calls.h"
|
||||
|
||||
/**
|
||||
* Create new fifo data struct
|
||||
*
|
||||
* @return pointer to new FIFO or NULL if system out of memory
|
||||
*****************************************************************************/
|
||||
|
||||
FIFO *
|
||||
fifo_create(void)
|
||||
{
|
||||
return (FIFO *) g_malloc(sizeof(FIFO), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete specified FIFO
|
||||
*****************************************************************************/
|
||||
|
||||
void
|
||||
fifo_delete(FIFO *self)
|
||||
{
|
||||
USER_DATA *udp;
|
||||
|
||||
if (!self)
|
||||
return;
|
||||
|
||||
if (!self->head)
|
||||
{
|
||||
/* FIFO is empty */
|
||||
g_free(self);
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->head == self->tail)
|
||||
{
|
||||
/* only one item in FIFO */
|
||||
if (self->auto_free)
|
||||
g_free(self->head->item);
|
||||
|
||||
g_free(self->head);
|
||||
g_free(self);
|
||||
return;
|
||||
}
|
||||
|
||||
/* more then one item in FIFO */
|
||||
while (self->head)
|
||||
{
|
||||
udp = self->head;
|
||||
|
||||
if (self->auto_free)
|
||||
g_free(udp->item);
|
||||
|
||||
self->head = udp->next;
|
||||
g_free(udp);
|
||||
}
|
||||
|
||||
g_free(self);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an item to the specified FIFO
|
||||
*
|
||||
* @param self FIFO to operate on
|
||||
* @param item item to add to specified FIFO
|
||||
*
|
||||
* @return 0 on success, -1 on error
|
||||
*****************************************************************************/
|
||||
|
||||
int
|
||||
fifo_add_item(FIFO *self, void *item)
|
||||
{
|
||||
USER_DATA *udp;
|
||||
|
||||
if (!self || !item)
|
||||
return -1;
|
||||
|
||||
if ((udp = (USER_DATA *) g_malloc(sizeof(USER_DATA), 0)) == 0)
|
||||
return -1;
|
||||
|
||||
udp->item = item;
|
||||
udp->next = 0;
|
||||
|
||||
/* if fifo is empty, add to head */
|
||||
if (!self->head)
|
||||
{
|
||||
self->head = udp;
|
||||
self->tail = udp;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* add to tail */
|
||||
self->tail->next = udp;
|
||||
self->tail = udp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an item from top of FIFO
|
||||
*
|
||||
* @param self FIFO to operate on
|
||||
*
|
||||
* @return top item from FIFO or NULL if FIFO is empty
|
||||
*****************************************************************************/
|
||||
|
||||
void *
|
||||
fifo_remove_item(FIFO *self)
|
||||
{
|
||||
void *item;
|
||||
USER_DATA *udp;
|
||||
|
||||
if (!self || !self->head)
|
||||
return 0;
|
||||
|
||||
if (self->head == self->tail)
|
||||
{
|
||||
/* only one item in FIFO */
|
||||
item = self->head->item;
|
||||
g_free(self->head);
|
||||
self->head = 0;
|
||||
self->tail = 0;
|
||||
return item;
|
||||
}
|
||||
|
||||
/* more then one item in FIFO */
|
||||
udp = self->head;
|
||||
item = self->head->item;
|
||||
self->head = self->head->next;
|
||||
g_free(udp);
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return FIFO status
|
||||
*
|
||||
* @param self FIFO to operate on
|
||||
*
|
||||
* @return true if FIFO is empty, false otherwise
|
||||
*****************************************************************************/
|
||||
|
||||
int
|
||||
fifo_is_empty(FIFO *self)
|
||||
{
|
||||
if (!self)
|
||||
return 1;
|
||||
|
||||
return (self->head == 0);
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Laxmikant Rashinkar 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* FIFO implementation to store pointer to data struct
|
||||
*/
|
||||
|
||||
#ifndef _FIFO_H
|
||||
#define _FIFO_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
typedef struct user_data USER_DATA;
|
||||
|
||||
struct user_data
|
||||
{
|
||||
USER_DATA *next;
|
||||
void *item;
|
||||
};
|
||||
|
||||
typedef struct fifo
|
||||
{
|
||||
USER_DATA *head;
|
||||
USER_DATA *tail;
|
||||
int auto_free;
|
||||
} FIFO;
|
||||
|
||||
FIFO * fifo_create(void);
|
||||
void fifo_delete(FIFO *self);
|
||||
int fifo_add_item(FIFO *self, void *item);
|
||||
void * fifo_remove_item(FIFO *self);
|
||||
int fifo_is_empty(FIFO *self);
|
||||
|
||||
#endif
|
403
common/file.c
403
common/file.c
@ -1,403 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* read a config file
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include "arch.h"
|
||||
#include "os_calls.h"
|
||||
#include "string_calls.h"
|
||||
#include "list.h"
|
||||
#include "file.h"
|
||||
#include "parse.h"
|
||||
|
||||
#define FILE_MAX_LINE_BYTES 2048
|
||||
|
||||
static int
|
||||
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
|
||||
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
|
||||
returns 1 if problem reading file */
|
||||
static int
|
||||
l_file_read_sections(int fd, int max_file_size, struct list *names)
|
||||
{
|
||||
struct stream *s;
|
||||
char text[FILE_MAX_LINE_BYTES];
|
||||
int len;
|
||||
int rv;
|
||||
|
||||
rv = 0;
|
||||
g_file_seek(fd, 0);
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
list_clear(names);
|
||||
make_stream(s);
|
||||
init_stream(s, max_file_size);
|
||||
len = g_file_read(fd, s->data, max_file_size);
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
s->end = s->p + len;
|
||||
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
|
||||
{
|
||||
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
list_add_item(names, (tbus)g_strdup(text));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (len < 0)
|
||||
{
|
||||
rv = 1;
|
||||
}
|
||||
|
||||
free_stream(s);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* 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
|
||||
file_read_ini_line(struct stream *s, char *text, int text_bytes)
|
||||
{
|
||||
int i;
|
||||
int skip_to_end;
|
||||
int at_end;
|
||||
char c;
|
||||
|
||||
skip_to_end = 0;
|
||||
|
||||
if (!s_check_rem(s, 1))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
in_uint8(s, c);
|
||||
|
||||
while (c != 10 && c != 13)
|
||||
{
|
||||
/* these mean skip the rest of the line */
|
||||
if (c == '#' || c == ';')
|
||||
{
|
||||
skip_to_end = 1;
|
||||
}
|
||||
|
||||
if (!skip_to_end)
|
||||
{
|
||||
text[i] = c;
|
||||
i++;
|
||||
if (i >= text_bytes)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (s_check_rem(s, 1))
|
||||
{
|
||||
in_uint8(s, c);
|
||||
}
|
||||
else
|
||||
{
|
||||
c = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (c == 10 || c == 13)
|
||||
{
|
||||
at_end = 0;
|
||||
|
||||
while (c == 10 || c == 13)
|
||||
{
|
||||
if (s_check_rem(s, 1))
|
||||
{
|
||||
in_uint8(s, c);
|
||||
}
|
||||
else
|
||||
{
|
||||
at_end = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!at_end)
|
||||
{
|
||||
s->p--;
|
||||
}
|
||||
}
|
||||
|
||||
text[i] = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
static int
|
||||
file_split_name_value(char *text, char *name, char *value)
|
||||
{
|
||||
int len;
|
||||
int i;
|
||||
int value_index;
|
||||
int name_index;
|
||||
int on_to;
|
||||
|
||||
value_index = 0;
|
||||
name_index = 0;
|
||||
on_to = 0;
|
||||
name[0] = 0;
|
||||
value[0] = 0;
|
||||
len = g_strlen(text);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
if (text[i] == '=' && !on_to)
|
||||
{
|
||||
on_to = 1;
|
||||
}
|
||||
else if (on_to)
|
||||
{
|
||||
value[value_index] = text[i];
|
||||
value_index++;
|
||||
value[value_index] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
name[name_index] = text[i];
|
||||
name_index++;
|
||||
name[name_index] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
g_strtrim(name, 3); /* trim both right and left */
|
||||
g_strtrim(value, 3); /* trim both right and left */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
static int
|
||||
l_file_read_section(int fd, int max_file_size, const char *section,
|
||||
struct list *names, struct list *values)
|
||||
{
|
||||
struct stream *s;
|
||||
char *data;
|
||||
char *text;
|
||||
char *name;
|
||||
char *value;
|
||||
char *lvalue;
|
||||
int len;
|
||||
int file_size;
|
||||
|
||||
data = (char *) g_malloc(FILE_MAX_LINE_BYTES * 3, 0);
|
||||
text = data;
|
||||
name = text + FILE_MAX_LINE_BYTES;
|
||||
value = name + FILE_MAX_LINE_BYTES;
|
||||
|
||||
file_size = 32 * 1024; /* 32 K file size limit */
|
||||
g_file_seek(fd, 0);
|
||||
g_memset(text, 0, FILE_MAX_LINE_BYTES);
|
||||
list_clear(names);
|
||||
list_clear(values);
|
||||
make_stream(s);
|
||||
init_stream(s, file_size);
|
||||
len = g_file_read(fd, s->data, file_size);
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
s->end = s->p + len;
|
||||
while (file_read_ini_line(s, text, FILE_MAX_LINE_BYTES) == 0)
|
||||
{
|
||||
if (line_lookup_for_section_name(text, FILE_MAX_LINE_BYTES) != 0)
|
||||
{
|
||||
if (g_strcasecmp(section, text) == 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);
|
||||
list_add_item(names, (tbus)g_strdup(name));
|
||||
|
||||
if (value[0] == '$')
|
||||
{
|
||||
lvalue = g_getenv(value + 1);
|
||||
|
||||
if (lvalue != 0)
|
||||
{
|
||||
list_add_item(values, (tbus)g_strdup(lvalue));
|
||||
}
|
||||
else
|
||||
{
|
||||
list_add_item(values, (tbus)g_strdup(""));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
list_add_item(values, (tbus)g_strdup(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
free_stream(s);
|
||||
g_free(data);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
free_stream(s);
|
||||
g_free(data);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error
|
||||
returns 0 if everything is ok
|
||||
returns 1 if problem reading file */
|
||||
/* 32 K file size limit */
|
||||
int
|
||||
file_read_sections(int fd, struct list *names)
|
||||
{
|
||||
return l_file_read_sections(fd, 32 * 1024, names);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
/* this function should be preferred over file_read_sections because it can
|
||||
read any file size */
|
||||
int
|
||||
file_by_name_read_sections(const char *file_name, struct list *names)
|
||||
{
|
||||
int fd;
|
||||
int file_size;
|
||||
int rv;
|
||||
|
||||
file_size = g_file_get_size(file_name);
|
||||
|
||||
if (file_size < 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
rv = l_file_read_sections(fd, file_size, names);
|
||||
g_file_close(fd);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
/* 32 K file size limit */
|
||||
int
|
||||
file_read_section(int fd, const char *section,
|
||||
struct list *names, struct list *values)
|
||||
{
|
||||
return l_file_read_section(fd, 32 * 1024, section, names, values);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* return error */
|
||||
/* this function should be preferred over file_read_section because it can
|
||||
read any file size */
|
||||
int
|
||||
file_by_name_read_section(const char *file_name, const char *section,
|
||||
struct list *names, struct list *values)
|
||||
{
|
||||
int fd;
|
||||
int file_size;
|
||||
int rv;
|
||||
|
||||
file_size = g_file_get_size(file_name);
|
||||
|
||||
if (file_size < 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
fd = g_file_open_ex(file_name, 1, 0, 0, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
rv = l_file_read_section(fd, file_size, section, names, values);
|
||||
g_file_close(fd);
|
||||
return rv;
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* read a config file
|
||||
*/
|
||||
|
||||
#if !defined(FILE_H)
|
||||
#define FILE_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
int
|
||||
file_read_sections(int fd, struct list* names);
|
||||
int
|
||||
file_by_name_read_sections(const char* file_name, struct list* names);
|
||||
int
|
||||
file_read_section(int fd, const char* section,
|
||||
struct list* names, struct list* values);
|
||||
int
|
||||
file_by_name_read_section(const char* file_name, const char* section,
|
||||
struct list* names, struct list* values);
|
||||
|
||||
#endif
|
231
common/list.c
231
common/list.c
@ -1,231 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* simple list
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include "arch.h"
|
||||
#include "os_calls.h"
|
||||
#include "string_calls.h"
|
||||
#include "list.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
struct list *
|
||||
list_create(void)
|
||||
{
|
||||
struct list *self;
|
||||
|
||||
self = (struct list *)g_malloc(sizeof(struct list), 1);
|
||||
self->grow_by = 10;
|
||||
self->alloc_size = 10;
|
||||
self->items = (tbus *)g_malloc(sizeof(tbus) * 10, 1);
|
||||
return self;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_delete(struct list *self)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (self == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (self->auto_free)
|
||||
{
|
||||
for (i = 0; i < self->count; i++)
|
||||
{
|
||||
g_free((void *)self->items[i]);
|
||||
self->items[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
g_free(self->items);
|
||||
g_free(self);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_add_item(struct list *self, tbus item)
|
||||
{
|
||||
tbus *p;
|
||||
int i;
|
||||
|
||||
if (self->count >= self->alloc_size)
|
||||
{
|
||||
i = self->alloc_size;
|
||||
self->alloc_size += self->grow_by;
|
||||
p = (tbus *)g_malloc(sizeof(tbus) * self->alloc_size, 1);
|
||||
g_memcpy(p, self->items, sizeof(tbus) * i);
|
||||
g_free(self->items);
|
||||
self->items = p;
|
||||
}
|
||||
|
||||
self->items[self->count] = item;
|
||||
self->count++;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
tbus
|
||||
list_get_item(const struct list *self, int index)
|
||||
{
|
||||
if (index < 0 || index >= self->count)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return self->items[index];
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_clear(struct list *self)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (self->auto_free)
|
||||
{
|
||||
for (i = 0; i < self->count; i++)
|
||||
{
|
||||
g_free((void *)self->items[i]);
|
||||
self->items[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
g_free(self->items);
|
||||
self->count = 0;
|
||||
self->grow_by = 10;
|
||||
self->alloc_size = 10;
|
||||
self->items = (tbus *)g_malloc(sizeof(tbus) * 10, 1);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
list_index_of(struct list *self, tbus item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < self->count; i++)
|
||||
{
|
||||
if (self->items[i] == item)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_remove_item(struct list *self, int index)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (index >= 0 && index < self->count)
|
||||
{
|
||||
if (self->auto_free)
|
||||
{
|
||||
g_free((void *)self->items[index]);
|
||||
self->items[index] = 0;
|
||||
}
|
||||
|
||||
for (i = index; i < (self->count - 1); i++)
|
||||
{
|
||||
self->items[i] = self->items[i + 1];
|
||||
}
|
||||
|
||||
self->count--;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_insert_item(struct list *self, int index, tbus item)
|
||||
{
|
||||
tbus *p;
|
||||
int i;
|
||||
|
||||
if (index == self->count)
|
||||
{
|
||||
list_add_item(self, item);
|
||||
return;
|
||||
}
|
||||
|
||||
if (index >= 0 && index < self->count)
|
||||
{
|
||||
self->count++;
|
||||
|
||||
if (self->count > self->alloc_size)
|
||||
{
|
||||
i = self->alloc_size;
|
||||
self->alloc_size += self->grow_by;
|
||||
p = (tbus *)g_malloc(sizeof(tbus) * self->alloc_size, 1);
|
||||
g_memcpy(p, self->items, sizeof(tbus) * i);
|
||||
g_free(self->items);
|
||||
self->items = p;
|
||||
}
|
||||
|
||||
for (i = (self->count - 2); i >= index; i--)
|
||||
{
|
||||
self->items[i + 1] = self->items[i];
|
||||
}
|
||||
|
||||
self->items[index] = 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 source list */
|
||||
void
|
||||
list_append_list_strdup(struct list *self, struct list *dest, int start_index)
|
||||
{
|
||||
int index;
|
||||
tbus item;
|
||||
char *dup;
|
||||
|
||||
for (index = start_index; index < self->count; index++)
|
||||
{
|
||||
item = list_get_item(self, index);
|
||||
dup = g_strdup((char *)item);
|
||||
list_add_item(dest, (tbus)dup);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list_dump_items(struct list *self)
|
||||
{
|
||||
int index;
|
||||
|
||||
if (self->count == 0)
|
||||
{
|
||||
g_writeln("List is empty");
|
||||
}
|
||||
|
||||
for (index = 0; index < self->count; index++)
|
||||
{
|
||||
g_writeln("%d: %p", index, (void *) list_get_item(self, index));
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* simple list
|
||||
*/
|
||||
|
||||
#if !defined(LIST_H)
|
||||
#define LIST_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
/* list */
|
||||
struct list
|
||||
{
|
||||
tintptr* items;
|
||||
int count;
|
||||
int alloc_size;
|
||||
int grow_by;
|
||||
int auto_free;
|
||||
};
|
||||
|
||||
struct list*
|
||||
list_create(void);
|
||||
void
|
||||
list_delete(struct list* self);
|
||||
void
|
||||
list_add_item(struct list* self, tintptr item);
|
||||
tintptr
|
||||
list_get_item(const struct list *self, int index);
|
||||
void
|
||||
list_clear(struct list* self);
|
||||
int
|
||||
list_index_of(struct list* self, tintptr item);
|
||||
void
|
||||
list_remove_item(struct list* self, int index);
|
||||
void
|
||||
list_insert_item(struct list* self, int index, tintptr item);
|
||||
void
|
||||
list_append_list_strdup(struct list* self, struct list* dest, int start_index);
|
||||
void
|
||||
list_dump_items(struct list* self);
|
||||
|
||||
#endif
|
192
common/list16.c
192
common/list16.c
@ -1,192 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* simple list
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include "arch.h"
|
||||
#include "os_calls.h"
|
||||
#include "list16.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
struct list16 *
|
||||
list16_create(void)
|
||||
{
|
||||
struct list16 *self;
|
||||
|
||||
self = (struct list16 *)g_malloc(sizeof(struct list16), 0);
|
||||
list16_init(self);
|
||||
return self;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_delete(struct list16 *self)
|
||||
{
|
||||
if (self == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
list16_deinit(self);
|
||||
g_free(self);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_init(struct list16* self)
|
||||
{
|
||||
g_memset(self, 0, sizeof(struct list16));
|
||||
self->max_count = 4;
|
||||
self->items = self->mitems;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_deinit(struct list16* self)
|
||||
{
|
||||
if (self->items != self->mitems)
|
||||
{
|
||||
g_free(self->items);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_add_item(struct list16 *self, tui16 item)
|
||||
{
|
||||
tui16 *p;
|
||||
int i;
|
||||
|
||||
if (self->count >= self->max_count)
|
||||
{
|
||||
i = self->max_count;
|
||||
self->max_count += 4;
|
||||
p = (tui16 *)g_malloc(sizeof(tui16) * self->max_count, 1);
|
||||
g_memcpy(p, self->items, sizeof(tui16) * i);
|
||||
if (self->items != self->mitems)
|
||||
{
|
||||
g_free(self->items);
|
||||
}
|
||||
self->items = p;
|
||||
}
|
||||
|
||||
self->items[self->count] = item;
|
||||
self->count++;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
tui16
|
||||
list16_get_item(struct list16 *self, int index)
|
||||
{
|
||||
if (index < 0 || index >= self->count)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return self->items[index];
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_clear(struct list16 *self)
|
||||
{
|
||||
if (self->items != self->mitems)
|
||||
{
|
||||
g_free(self->items);
|
||||
}
|
||||
self->count = 0;
|
||||
self->max_count = 4;
|
||||
self->items = self->mitems;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
list16_index_of(struct list16 *self, tui16 item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < self->count; i++)
|
||||
{
|
||||
if (self->items[i] == item)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_remove_item(struct list16 *self, int index)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (index >= 0 && index < self->count)
|
||||
{
|
||||
for (i = index; i < (self->count - 1); i++)
|
||||
{
|
||||
self->items[i] = self->items[i + 1];
|
||||
}
|
||||
|
||||
self->count--;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
list16_insert_item(struct list16 *self, int index, tui16 item)
|
||||
{
|
||||
tui16 *p;
|
||||
int i;
|
||||
|
||||
if (index == self->count)
|
||||
{
|
||||
list16_add_item(self, item);
|
||||
return;
|
||||
}
|
||||
|
||||
if (index >= 0 && index < self->count)
|
||||
{
|
||||
self->count++;
|
||||
|
||||
if (self->count > self->max_count)
|
||||
{
|
||||
i = self->max_count;
|
||||
self->max_count += 4;
|
||||
p = (tui16 *)g_malloc(sizeof(tui16) * self->max_count, 1);
|
||||
g_memcpy(p, self->items, sizeof(tui16) * i);
|
||||
if (self->items != self->mitems)
|
||||
{
|
||||
g_free(self->items);
|
||||
}
|
||||
self->items = p;
|
||||
}
|
||||
|
||||
for (i = (self->count - 2); i >= index; i--)
|
||||
{
|
||||
self->items[i + 1] = self->items[i];
|
||||
}
|
||||
|
||||
self->items[index] = item;
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* simple list
|
||||
*/
|
||||
|
||||
#if !defined(LIST16_H)
|
||||
#define LIST16_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
/* list */
|
||||
struct list16
|
||||
{
|
||||
tui16* items;
|
||||
int count;
|
||||
int max_count;
|
||||
tui16 mitems[4];
|
||||
};
|
||||
|
||||
struct list16*
|
||||
list16_create(void);
|
||||
void
|
||||
list16_delete(struct list16* self);
|
||||
void
|
||||
list16_init(struct list16* self);
|
||||
void
|
||||
list16_deinit(struct list16* self);
|
||||
void
|
||||
list16_add_item(struct list16* self, tui16 item);
|
||||
tui16
|
||||
list16_get_item(struct list16* self, int index);
|
||||
void
|
||||
list16_clear(struct list16* self);
|
||||
int
|
||||
list16_index_of(struct list16* self, tui16 item);
|
||||
void
|
||||
list16_remove_item(struct list16* self, int index);
|
||||
void
|
||||
list16_insert_item(struct list16* self, int index, tui16 item);
|
||||
|
||||
#endif
|
1112
common/log.c
1112
common/log.c
File diff suppressed because it is too large
Load Diff
381
common/log.h
381
common/log.h
@ -1,381 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef LOG_H
|
||||
#define LOG_H
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "arch.h"
|
||||
#include "list.h"
|
||||
|
||||
/* logging buffer size */
|
||||
#define LOG_BUFFER_SIZE 8192
|
||||
#define LOGGER_NAME_SIZE 50
|
||||
|
||||
/* logging levels */
|
||||
enum logLevels
|
||||
{
|
||||
LOG_LEVEL_ALWAYS = 0,
|
||||
LOG_LEVEL_ERROR, /* for describing non-recoverable error states in a request or method */
|
||||
LOG_LEVEL_WARNING, /* for describing recoverable error states in a request or method */
|
||||
LOG_LEVEL_INFO, /* for low verbosity and high level descriptions of normal operations */
|
||||
LOG_LEVEL_DEBUG, /* for medium verbosity and low level descriptions of normal operations */
|
||||
LOG_LEVEL_TRACE, /* for high verbosity and low level descriptions of normal operations (eg. method or wire tracing) */
|
||||
LOG_LEVEL_NEVER,
|
||||
};
|
||||
|
||||
/* startup return values */
|
||||
enum logReturns
|
||||
{
|
||||
LOG_STARTUP_OK = 0,
|
||||
LOG_ERROR_MALLOC,
|
||||
LOG_ERROR_NULL_FILE,
|
||||
LOG_ERROR_FILE_OPEN,
|
||||
LOG_ERROR_NO_CFG,
|
||||
LOG_ERROR_FILE_NOT_OPEN,
|
||||
LOG_GENERAL_ERROR
|
||||
};
|
||||
|
||||
#define SESMAN_CFG_LOGGING "Logging"
|
||||
#define SESMAN_CFG_LOGGING_LOGGER "LoggingPerLogger"
|
||||
#define SESMAN_CFG_LOG_FILE "LogFile"
|
||||
#define SESMAN_CFG_LOG_LEVEL "LogLevel"
|
||||
#define SESMAN_CFG_LOG_ENABLE_CONSOLE "EnableConsole"
|
||||
#define SESMAN_CFG_LOG_CONSOLE_LEVEL "ConsoleLevel"
|
||||
#define SESMAN_CFG_LOG_ENABLE_SYSLOG "EnableSyslog"
|
||||
#define SESMAN_CFG_LOG_SYSLOG_LEVEL "SyslogLevel"
|
||||
#define SESMAN_CFG_LOG_ENABLE_PID "EnableProcessId"
|
||||
|
||||
/* enable threading */
|
||||
/*#define LOG_ENABLE_THREAD*/
|
||||
|
||||
#ifdef XRDP_DEBUG
|
||||
|
||||
#define LOG_PER_LOGGER_LEVEL
|
||||
|
||||
/**
|
||||
* @brief Logging macro for messages that are for an XRDP developer to
|
||||
* understand and debug XRDP code.
|
||||
*
|
||||
* Note: all log levels are relavant to help a developer understand XRDP at
|
||||
* different levels of granularity.
|
||||
*
|
||||
* Note: the logging function calls are removed when XRDP_DEBUG is NOT defined.
|
||||
*
|
||||
* Note: when the build is configured with --enable-xrdpdebug, then
|
||||
* the log level can be configured per the source file name or method name
|
||||
* (with the suffix "()") in the [LoggingPerLogger]
|
||||
* section of the configuration file.
|
||||
*
|
||||
* For example:
|
||||
* ```
|
||||
* [LoggingPerLogger]
|
||||
* xrdp.c=DEBUG
|
||||
* main()=WARNING
|
||||
* ```
|
||||
*
|
||||
* @param lvl, the log level
|
||||
* @param msg, the log text as a printf format c-string
|
||||
* @param ... the arguments for the printf format c-string
|
||||
*/
|
||||
#define LOG_DEVEL(log_level, args...) \
|
||||
log_message_with_location(__func__, __FILE__, __LINE__, log_level, args);
|
||||
|
||||
/**
|
||||
* @brief Logging macro for messages that are for a systeam administrator to
|
||||
* configure and run XRDP on their machine.
|
||||
*
|
||||
* Note: the logging function calls contain additional code location info when
|
||||
* XRDP_DEBUG is defined.
|
||||
*
|
||||
* @param lvl, the log level
|
||||
* @param msg, the log text as a printf format c-string
|
||||
* @param ... the arguments for the printf format c-string
|
||||
*/
|
||||
#define LOG(log_level, args...) \
|
||||
log_message_with_location(__func__, __FILE__, __LINE__, log_level, args);
|
||||
|
||||
/**
|
||||
* @brief Logging macro for logging the contents of a byte array using a hex
|
||||
* dump format.
|
||||
*
|
||||
* Note: the logging function calls are removed when XRDP_DEBUG is NOT defined.
|
||||
*
|
||||
* @param log_level, the log level
|
||||
* @param message, a message prefix for the hex dump. Note: no printf like
|
||||
* formatting is done to this message.
|
||||
* @param buffer, a pointer to the byte array to log as a hex dump
|
||||
* @param length, the length of the byte array to log
|
||||
*/
|
||||
#define LOG_DEVEL_HEXDUMP(log_level, message, buffer, length) \
|
||||
log_hexdump_with_location(__func__, __FILE__, __LINE__, log_level, message, buffer, length);
|
||||
|
||||
#else
|
||||
#define LOG_DEVEL(log_level, args...)
|
||||
#define LOG(log_level, args...) log_message(log_level, args);
|
||||
#define LOG_DEVEL_HEXDUMP(log_level, message, buffer, length)
|
||||
|
||||
#endif
|
||||
|
||||
enum log_logger_type
|
||||
{
|
||||
LOG_TYPE_FILE = 0,
|
||||
LOG_TYPE_FUNCTION,
|
||||
};
|
||||
|
||||
struct log_logger_level
|
||||
{
|
||||
enum logLevels log_level;
|
||||
enum log_logger_type logger_type;
|
||||
char logger_name[LOGGER_NAME_SIZE + 1];
|
||||
};
|
||||
|
||||
struct log_config
|
||||
{
|
||||
const char *program_name;
|
||||
char *log_file;
|
||||
int fd;
|
||||
enum logLevels log_level;
|
||||
int enable_console;
|
||||
enum logLevels console_level;
|
||||
int enable_syslog;
|
||||
enum logLevels syslog_level;
|
||||
struct list *per_logger_level;
|
||||
int dump_on_start;
|
||||
int enable_pid;
|
||||
pthread_mutex_t log_lock;
|
||||
pthread_mutexattr_t log_lock_attr;
|
||||
};
|
||||
|
||||
/* internal functions, only used in log.c if this ifdef is defined.*/
|
||||
#ifdef LOGINTERNALSTUFF
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Starts the logging subsystem
|
||||
* @param l_cfg logging system configuration
|
||||
* @return
|
||||
*
|
||||
*/
|
||||
enum logReturns
|
||||
internal_log_start(struct log_config *l_cfg);
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Shuts down the logging subsystem
|
||||
* @param l_cfg pointer to the logging subsystem to stop
|
||||
*
|
||||
*/
|
||||
enum logReturns
|
||||
internal_log_end(struct log_config *l_cfg);
|
||||
|
||||
/**
|
||||
* Converts a log level to a string
|
||||
* @param lvl, the loglevel
|
||||
* @param str pointer where the string will be stored.
|
||||
*/
|
||||
void
|
||||
internal_log_lvl2str(const enum logLevels lvl, char *str);
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Converts a string to a log level
|
||||
* @param s The string to convert
|
||||
* @return The corresponding level or LOG_LEVEL_DEBUG if error
|
||||
*
|
||||
*/
|
||||
enum logLevels
|
||||
internal_log_text2level(const char *buf);
|
||||
|
||||
/**
|
||||
* A function that init our struct that holds all state and
|
||||
* also init its content.
|
||||
* @return LOG_STARTUP_OK or LOG_ERROR_MALLOC
|
||||
*/
|
||||
struct log_config *
|
||||
internalInitAndAllocStruct(void);
|
||||
|
||||
/**
|
||||
* Print the contents of the logging config to stdout.
|
||||
*/
|
||||
void
|
||||
internal_log_config_dump(struct log_config *config);
|
||||
|
||||
/**
|
||||
* the log function that all files use to log an event.
|
||||
* @param lvl, the loglevel
|
||||
* @param override_destination_level, if true then the destination log level is not used
|
||||
* @param override_log_level, the loglevel instead of the destination log level if override_destination_level is true
|
||||
* @param msg, the logtext.
|
||||
* @param ap, the values for the message format arguments
|
||||
* @return
|
||||
*/
|
||||
enum logReturns
|
||||
internal_log_message(const enum logLevels lvl,
|
||||
const bool_t override_destination_level,
|
||||
const enum logLevels override_log_level,
|
||||
const char *msg,
|
||||
va_list ap);
|
||||
|
||||
/**
|
||||
* @param log_level, the log level
|
||||
* @param override_destination_level, if true then the destination log level is ignored.
|
||||
* @param override_log_level, the log level to use instead of the destination log level
|
||||
* if override_destination_level is true
|
||||
* @return true if at least one log destination will accept a message logged at the given level.
|
||||
*/
|
||||
bool_t
|
||||
internal_log_is_enabled_for_level(const enum logLevels log_level,
|
||||
const bool_t override_destination_level,
|
||||
const enum logLevels override_log_level);
|
||||
|
||||
/**
|
||||
* @param function_name, the function name (typicaly the __func__ macro)
|
||||
* @param file_name, the file name (typicaly the __FILE__ macro)
|
||||
* @param[out] log_level_return, the log level to use instead of the destination log level
|
||||
* @return true if the logger location overrides the destination log levels
|
||||
*/
|
||||
bool_t
|
||||
internal_log_location_overrides_level(const char *function_name,
|
||||
const char *file_name,
|
||||
enum logLevels *log_level_return);
|
||||
|
||||
/*End of internal functions*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This function initialize the log facilities according to the configuration
|
||||
* file, that is described by the in parameter.
|
||||
* @param iniFile
|
||||
* @param applicationName the name that is used in the log for the running
|
||||
* application
|
||||
* @param dump_on_start Whether to dump the config on stdout before
|
||||
* logging is started
|
||||
* @return LOG_STARTUP_OK on success
|
||||
*/
|
||||
enum logReturns
|
||||
log_start(const char *iniFile, const char *applicationName,
|
||||
bool_t dump_on_start);
|
||||
|
||||
/**
|
||||
* An alternative log_start where the caller gives the params directly.
|
||||
* @param config
|
||||
* @return
|
||||
*
|
||||
* @post to avoid memory leaks, the config argument must be free'ed using
|
||||
* `log_config_free()`
|
||||
*/
|
||||
enum logReturns
|
||||
log_start_from_param(const struct log_config *src_log_config);
|
||||
|
||||
/**
|
||||
* Sets up a suitable log config for writing to the console only
|
||||
* (i.e. for a utility)
|
||||
*
|
||||
* The config can be customised by the caller before calling
|
||||
* log_start_from_param()
|
||||
*
|
||||
* @param Default log level
|
||||
* @param Log level name, or NULL. This can be used to provide an
|
||||
* override to the default log level, by environment variable or
|
||||
* argument.
|
||||
*
|
||||
* @return pointer to struct log_config.
|
||||
*/
|
||||
struct log_config *
|
||||
log_config_init_for_console(enum logLevels lvl, const char *override_name);
|
||||
|
||||
/**
|
||||
* Read configuration from a file and store the values in the returned
|
||||
* log_config.
|
||||
* @param file
|
||||
* @param applicationName, the application name used in the log events.
|
||||
* @param section_prefix, prefix for the logging sections to parse
|
||||
* @return
|
||||
*/
|
||||
struct log_config *
|
||||
log_config_init_from_config(const char *iniFilename,
|
||||
const char *applicationName,
|
||||
const char *section_prefix);
|
||||
|
||||
/**
|
||||
* Free the memory for the log_config struct.
|
||||
*/
|
||||
enum logReturns
|
||||
log_config_free(struct log_config *config);
|
||||
|
||||
/**
|
||||
* Function that terminates all logging
|
||||
* @return
|
||||
*/
|
||||
enum logReturns
|
||||
log_end(void);
|
||||
|
||||
/**
|
||||
* the log function that all files use to log an event.
|
||||
*
|
||||
* Please prefer to use the LOG and LOG_DEVEL macros instead of this function directly.
|
||||
*
|
||||
* @param lvl, the loglevel
|
||||
* @param msg, the logtext.
|
||||
* @param ...
|
||||
* @return
|
||||
*/
|
||||
enum logReturns
|
||||
log_message(const enum logLevels lvl, const char *msg, ...) printflike(2, 3);
|
||||
|
||||
/**
|
||||
* the log function that all files use to log an event,
|
||||
* with the function name and file line.
|
||||
*
|
||||
* Please prefer to use the LOG and LOG_DEVEL macros instead of this function directly.
|
||||
*
|
||||
* @param function_name, the function name (typicaly the __func__ macro)
|
||||
* @param file_name, the file name (typicaly the __FILE__ macro)
|
||||
* @param line_number, the line number in the file (typicaly the __LINE__ macro)
|
||||
* @param lvl, the loglevel
|
||||
* @param msg, the logtext.
|
||||
* @param ...
|
||||
* @return
|
||||
*/
|
||||
enum logReturns
|
||||
log_message_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels lvl,
|
||||
const char *msg,
|
||||
...) printflike(5, 6);
|
||||
|
||||
enum logReturns
|
||||
log_hexdump_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels log_level,
|
||||
const char *msg,
|
||||
const char *p,
|
||||
int len);
|
||||
|
||||
/**
|
||||
* This function returns the configured file name for the logfile
|
||||
* @param replybuf the buffer where the reply is stored
|
||||
* @param bufsize how big is the reply buffer.
|
||||
* @return
|
||||
*/
|
||||
char *getLogFile(char *replybuf, int bufsize);
|
||||
#endif
|
@ -1,43 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-ERREF : Definitions from [MS-ERREF]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-ERREF are currently correct for v20180912 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_ERREF_H)
|
||||
#define MS_ERREF_H
|
||||
|
||||
/*
|
||||
* NTSTATUS codes (section 2.3)
|
||||
*/
|
||||
enum NTSTATUS
|
||||
{
|
||||
STATUS_SUCCESS = 0x00000000,
|
||||
|
||||
STATUS_NO_MORE_FILES = 0x80000006,
|
||||
|
||||
STATUS_UNSUCCESSFUL = 0xc0000001,
|
||||
STATUS_NO_SUCH_FILE = 0xc000000f,
|
||||
STATUS_ACCESS_DENIED = 0xc0000022,
|
||||
STATUS_OBJECT_NAME_INVALID = 0xc0000033,
|
||||
STATUS_OBJECT_NAME_NOT_FOUND = 0xc0000034,
|
||||
STATUS_SHARING_VIOLATION = 0xc0000043,
|
||||
STATUS_NOT_SUPPORTED = 0xc00000bb
|
||||
};
|
||||
|
||||
#endif /* MS_ERREF_H */
|
@ -1,64 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-FSCC : Definitions from [MS-FSCC]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-FSCC are currently correct for v20190923 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_FSCC_H)
|
||||
#define MS_FSCC_H
|
||||
|
||||
/*
|
||||
* File system ioctl codes (section 2.3)
|
||||
*/
|
||||
#define FSCTL_DELETE_OBJECT_ID 0x900a0
|
||||
|
||||
/*
|
||||
* File information classes (section 2.4)
|
||||
*/
|
||||
enum FS_INFORMATION_CLASS
|
||||
{
|
||||
FileAllocationInformation = 19, /* Set */
|
||||
FileBasicInformation = 4, /* Query, Set */
|
||||
FileBothDirectoryInformation = 3, /* Query */
|
||||
FileDirectoryInformation = 1, /* Query */
|
||||
FileDispositionInformation = 13, /* Set */
|
||||
FileEndOfFileInformation = 20, /* Set */
|
||||
FileFullDirectoryInformation = 2, /* Query */
|
||||
FileNamesInformation = 12, /* Query */
|
||||
FileRenameInformation = 10, /* Set */
|
||||
FileStandardInformation = 5 /* Query */
|
||||
};
|
||||
|
||||
/*
|
||||
* Size of structs above without trailing RESERVED fields (MS-RDPEFS
|
||||
* 2.2.3.3.8)
|
||||
*/
|
||||
#define FILE_BASIC_INFORMATION_SIZE 36
|
||||
#define FILE_STD_INFORMATION_SIZE 22
|
||||
#define FILE_END_OF_FILE_INFORMATION_SIZE 8
|
||||
|
||||
/* Windows file attributes (section 2.6) */
|
||||
#define W_FILE_ATTRIBUTE_DIRECTORY 0x00000010
|
||||
#define W_FILE_ATTRIBUTE_READONLY 0x00000001
|
||||
#define W_FILE_ATTRIBUTE_SYSTEM 0x00000004
|
||||
#define W_FILE_ATTRIBUTE_NORMAL 0x00000080
|
||||
|
||||
#endif /* MS_FSCC_H */
|
||||
|
||||
|
||||
|
@ -1,512 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-RDPBCGR : Definitions from [MS-RDPBCGR]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-RDPBCGR are currently correct for v20190923 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_RDPBCGR_H)
|
||||
#define MS_RDPBCGR_H
|
||||
|
||||
/* RDP Security Negotiation codes */
|
||||
#define RDP_NEG_REQ 0x01 /* MS-RDPBCGR 2.2.1.1.1 */
|
||||
#define RDP_NEG_RSP 0x02 /* MS-RDPBCGR 2.2.1.2.1 */
|
||||
#define RDP_NEG_FAILURE 0x03 /* MS-RDPBCGR 2.2.1.2.2 */
|
||||
#define RDP_CORRELATION_INFO 0x06 /* MS-RDPBCGR 2.2.1.1.2 */
|
||||
|
||||
/* Protocol types codes (2.2.1.1.1, 2.2.1.2.1) */
|
||||
#define PROTOCOL_RDP 0x00000000
|
||||
#define PROTOCOL_SSL 0x00000001
|
||||
#define PROTOCOL_HYBRID 0x00000002
|
||||
#define PROTOCOL_RDSTLS 0x00000004
|
||||
#define PROTOCOL_HYBRID_EX 0x00000008
|
||||
|
||||
/* Negotiation packet flags (2.2.1.2.1) */
|
||||
#define EXTENDED_CLIENT_DATA_SUPPORTED 0x01
|
||||
#define DYNVC_GFX_PROTOCOL_SUPPORTED 0x02
|
||||
#define NEGRSP_RESERVED 0x04
|
||||
#define RESTRICTED_ADMIN_MODE_SUPPORTED 0x08
|
||||
#define REDIRECTED_AUTHENTICATION_MODE_SUPPORTED 0x10
|
||||
|
||||
/* RDP Negotiation Failure Codes (2.2.1.2.2) */
|
||||
#define SSL_REQUIRED_BY_SERVER 0x00000001
|
||||
#define SSL_NOT_ALLOWED_BY_SERVER 0x00000002
|
||||
#define SSL_CERT_NOT_ON_SERVER 0x00000003
|
||||
#define INCONSISTENT_FLAGS 0x00000004
|
||||
#define HYBRID_REQUIRED_BY_SERVER 0x00000005
|
||||
#define SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER 0x00000006
|
||||
|
||||
/* TS_UD_HEADER: type ((2.2.1.3.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define SEC_TAG_CLI_INFO 0xc001 /* CS_CORE? */
|
||||
#define SEC_TAG_CLI_CRYPT 0xc002 /* CS_SECURITY? */
|
||||
#define SEC_TAG_CLI_CHANNELS 0xc003 /* CS_CHANNELS? */
|
||||
#define SEC_TAG_CLI_4 0xc004 /* CS_CLUSTER? */
|
||||
#define SEC_TAG_CLI_MONITOR 0xc005 /* CS_MONITOR */
|
||||
|
||||
/* Client Core Data: colorDepth, postBeta2ColorDepth (2.2.1.3.2) */
|
||||
#define RNS_UD_COLOR_4BPP 0xCA00
|
||||
#define RNS_UD_COLOR_8BPP 0xCA01
|
||||
#define RNS_UD_COLOR_16BPP_555 0xCA02
|
||||
#define RNS_UD_COLOR_16BPP_565 0xCA03
|
||||
#define RNS_UD_COLOR_24BPP 0xCA04
|
||||
|
||||
/* Client Core Data: connectionType (2.2.1.3.2) */
|
||||
#define CONNECTION_TYPE_MODEM 0x01
|
||||
#define CONNECTION_TYPE_BROADBAND_LOW 0x02
|
||||
#define CONNECTION_TYPE_SATELLITE 0x03
|
||||
#define CONNECTION_TYPE_BROADBAND_HIGH 0x04
|
||||
#define CONNECTION_TYPE_WAN 0x05
|
||||
#define CONNECTION_TYPE_LAN 0x06
|
||||
#define CONNECTION_TYPE_AUTODETECT 0x07
|
||||
|
||||
/* Channel definition structure CHANNEL_DEF (2.2.1.3.4.1) */
|
||||
/* This isn't explicitly named in MS-RDPBCGR */
|
||||
#define CHANNEL_NAME_LEN 7
|
||||
|
||||
/* Oprions field */
|
||||
/* NOTE: XR_ prefixed to avoid conflict with FreeRDP */
|
||||
#define XR_CHANNEL_OPTION_INITIALIZED 0x80000000
|
||||
#define XR_CHANNEL_OPTION_ENCRYPT_RDP 0x40000000
|
||||
#define XR_CHANNEL_OPTION_ENCRYPT_SC 0x20000000
|
||||
#define XR_CHANNEL_OPTION_ENCRYPT_CS 0x10000000
|
||||
#define XR_CHANNEL_OPTION_PRI_HIGH 0x08000000
|
||||
#define XR_CHANNEL_OPTION_PRI_MED 0x04000000
|
||||
#define XR_CHANNEL_OPTION_PRI_LOW 0x02000000
|
||||
#define XR_CHANNEL_OPTION_COMPRESS_RDP 0x00800000
|
||||
#define XR_CHANNEL_OPTION_COMPRESS 0x00400000
|
||||
#define XR_CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000
|
||||
#define REMOTE_CONTROL_PERSISTENT 0x00100000
|
||||
|
||||
/* Server Proprietary Certificate (2.2.1.4.3.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define SEC_TAG_PUBKEY 0x0006 /* BB_RSA_KEY_BLOB */
|
||||
#define SEC_TAG_KEYSIG 0x0008 /* BB_SIGNATURE_KEY_BLOB */
|
||||
|
||||
/* Info Packet (TS_INFO_PACKET): flags (2.2.1.11.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_LOGON_AUTO 0x0008
|
||||
#define RDP_LOGON_NORMAL 0x0033
|
||||
#define RDP_COMPRESSION 0x0080
|
||||
#define RDP_LOGON_BLOB 0x0100
|
||||
#define RDP_LOGON_LEAVE_AUDIO 0x2000
|
||||
#define RDP_LOGON_RAIL 0x8000
|
||||
|
||||
/* Extended Info Packet: performanceFlags (2.2.1.11.1.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP5_DISABLE_NOTHING 0x00
|
||||
#define RDP5_NO_WALLPAPER 0x01
|
||||
#define RDP5_NO_FULLWINDOWDRAG 0x02
|
||||
#define RDP5_NO_MENUANIMATIONS 0x04
|
||||
#define RDP5_NO_THEMING 0x08
|
||||
#define RDP5_NO_CURSOR_SHADOW 0x20
|
||||
#define RDP5_NO_CURSORSETTINGS 0x40 /* disables cursor blinking */
|
||||
|
||||
/* LICENSE_BINARY_BLOB (2.2.1.12.1.2) */
|
||||
#define LICENCE_TAG_USER 0x000f /* BB_CLIENT_USER_NAME_BLOB */
|
||||
#define LICENCE_TAG_HOST 0x0010 /* BB_CLIENT_MACHINE_NAME_BLOB */
|
||||
|
||||
/* Maps to generalCapabilitySet in T.128 page 138 */
|
||||
|
||||
/* Capability Set: capabilitySetType (2.2.1.13.1.1.1) */
|
||||
#define CAPSTYPE_GENERAL 0x0001
|
||||
#define CAPSTYPE_GENERAL_LEN 0x18
|
||||
|
||||
#define CAPSTYPE_BITMAP 0x0002
|
||||
#define CAPSTYPE_BITMAP_LEN 0x1C
|
||||
|
||||
#define CAPSTYPE_ORDER 0x0003
|
||||
#define CAPSTYPE_ORDER_LEN 0x58
|
||||
#define ORDER_CAP_NEGOTIATE 2 /* NEGOTIATEORDERSUPPORT? not used */
|
||||
#define ORDER_CAP_NOSUPPORT 4 /* not used */
|
||||
|
||||
#define CAPSTYPE_BITMAPCACHE 0x0004
|
||||
#define CAPSTYPE_BITMAPCACHE_LEN 0x28
|
||||
|
||||
#define CAPSTYPE_CONTROL 0x0005
|
||||
#define CAPSTYPE_CONTROL_LEN 0x0C
|
||||
|
||||
#define CAPSTYPE_ACTIVATION 0x0007
|
||||
#define CAPSTYPE_ACTIVATION_LEN 0x0C
|
||||
|
||||
#define CAPSTYPE_POINTER 0x0008
|
||||
#define CAPSTYPE_POINTER_LEN 0x0a
|
||||
#define CAPSTYPE_POINTER_MONO_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_SHARE 0x0009
|
||||
#define CAPSTYPE_SHARE_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_COLORCACHE 0x000A
|
||||
#define CAPSTYPE_COLORCACHE_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_SOUND 0x000C
|
||||
|
||||
#define CAPSTYPE_INPUT 0x000D
|
||||
#define CAPSTYPE_INPUT_LEN 0x58
|
||||
|
||||
#define CAPSTYPE_FONT 0x000E
|
||||
#define CAPSTYPE_FONT_LEN 0x04
|
||||
|
||||
#define CAPSTYPE_BRUSH 0x000F
|
||||
#define CAPSTYPE_BRUSH_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_GLYPHCACHE 0x0010
|
||||
#define CAPSTYPE_OFFSCREENCACHE 0x0011
|
||||
|
||||
#define CAPSTYPE_BITMAPCACHE_HOSTSUPPORT 0x0012
|
||||
#define CAPSTYPE_BITMAPCACHE_HOSTSUPPORT_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_BITMAPCACHE_REV2 0x0013
|
||||
#define CAPSTYPE_BITMAPCACHE_REV2_LEN 0x28
|
||||
#define BMPCACHE2_FLAG_PERSIST ((long)1<<31)
|
||||
|
||||
#define CAPSTYPE_VIRTUALCHANNEL 0x0014
|
||||
#define CAPSTYPE_VIRTUALCHANNEL_LEN 0x08
|
||||
|
||||
#define CAPSTYPE_DRAWNINGRIDCACHE 0x0015
|
||||
#define CAPSTYPE_DRAWGDIPLUS 0x0016
|
||||
#define CAPSTYPE_RAIL 0x0017
|
||||
#define CAPSTYPE_WINDOW 0x0018
|
||||
|
||||
#define CAPSSETTYPE_COMPDESK 0x0019
|
||||
#define CAPSSETTYPE_COMPDESK_LEN 0x06
|
||||
|
||||
#define CAPSSETTYPE_MULTIFRAGMENTUPDATE 0x001A
|
||||
#define CAPSSETTYPE_MULTIFRAGMENTUPDATE_LEN 0x08
|
||||
|
||||
#define CAPSETTYPE_LARGE_POINTER 0x001B
|
||||
#define CAPSETTYPE_LARGE_POINTER_LEN 0x06
|
||||
|
||||
#define CAPSETTYPE_SURFACE_COMMANDS 0x001C
|
||||
#define CAPSETTYPE_SURFACE_COMMANDS_LEN 0x0C
|
||||
|
||||
#define CAPSSETTYPE_BITMAP_CODECS 0x001D
|
||||
#define CAPSSETTYPE_BITMAP_CODECS_LEN 0x1C
|
||||
|
||||
#define CAPSTYPE_FRAME_ACKNOWLEDGE 0x001E
|
||||
#define CAPSTYPE_FRAME_ACKNOWLEDGE_LEN 0x08
|
||||
|
||||
/* Control PDU Data: action (2.2.1.15.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_CTL_REQUEST_CONTROL 1 /* CTRLACTION_REQUEST_CONTROL */
|
||||
#define RDP_CTL_GRANT_CONTROL 2
|
||||
#define RDP_CTL_DETACH 3
|
||||
#define RDP_CTL_COOPERATE 4
|
||||
|
||||
/* RDP5 disconnect PDU */
|
||||
/* Set Error Info PDU Data: errorInfo (2.2.5.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define exDiscReasonNoInfo 0x0000
|
||||
#define exDiscReasonAPIInitiatedDisconnect 0x0001
|
||||
#define exDiscReasonAPIInitiatedLogoff 0x0002
|
||||
#define exDiscReasonServerIdleTimeout 0x0003
|
||||
#define exDiscReasonServerLogonTimeout 0x0004
|
||||
#define exDiscReasonReplacedByOtherConnection 0x0005
|
||||
#define exDiscReasonOutOfMemory 0x0006
|
||||
#define exDiscReasonServerDeniedConnection 0x0007
|
||||
#define exDiscReasonServerDeniedConnectionFips 0x0008
|
||||
#define exDiscReasonLicenseInternal 0x0100
|
||||
#define exDiscReasonLicenseNoLicenseServer 0x0101
|
||||
#define exDiscReasonLicenseNoLicense 0x0102
|
||||
#define exDiscReasonLicenseErrClientMsg 0x0103
|
||||
#define exDiscReasonLicenseHwidDoesntMatchLicense 0x0104
|
||||
#define exDiscReasonLicenseErrClientLicense 0x0105
|
||||
#define exDiscReasonLicenseCantFinishProtocol 0x0106
|
||||
#define exDiscReasonLicenseClientEndedProtocol 0x0107
|
||||
#define exDiscReasonLicenseErrClientEncryption 0x0108
|
||||
#define exDiscReasonLicenseCantUpgradeLicense 0x0109
|
||||
#define exDiscReasonLicenseNoRemoteConnections 0x010a
|
||||
|
||||
/* General Capability Set: osMajorType (2.2.7.1.1) */
|
||||
#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
|
||||
|
||||
/* General Capability Set: osMinorType (2.2.7.1.1) */
|
||||
#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
|
||||
|
||||
/* General Capability Set: protocolVersion (2.2.7.1.1) */
|
||||
#define TS_CAPS_PROTOCOLVERSION 0x0200
|
||||
|
||||
/* General Capability Set: extraFlags (2.2.7.1.1) */
|
||||
#define FASTPATH_OUTPUT_SUPPORTED 0x0001
|
||||
#define NO_BITMAP_COMPRESSION_HDR 0x0400
|
||||
#define LONG_CREDENTIALS_SUPPORTED 0x0004
|
||||
#define AUTORECONNECT_SUPPORTED 0x0008
|
||||
#define ENC_SALTED_CHECKSUM 0x0010
|
||||
|
||||
/* Order Capability Set: orderSupportExFlags (2.2.7.1.3) */
|
||||
/* NOTE: XR_ prefixed to avoid conflict with FreeRDP */
|
||||
#define XR_ORDERFLAGS_EX_CACHE_BITMAP_REV3_SUPPORT 0x0002
|
||||
#define XR_ORDERFLAGS_EX_ALTSEC_FRAME_MARKER_SUPPORT 0x0004
|
||||
|
||||
/* Order Capability Set: orderFlags (2.2.7.1.3) */
|
||||
#define NEGOTIATEORDERSUPPORT 0x0002
|
||||
#define ZEROBOUNDSDELTASUPPORT 0x0008
|
||||
#define COLORINDEXSUPPORT 0x0020
|
||||
#define SOLIDPATTERNBRUSHONLY 0x0040
|
||||
#define ORDERFLAGS_EXTRA_FLAGS 0x0080
|
||||
|
||||
/* Order Capability Set: orderSupport (2.2.7.1.3) */
|
||||
#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 */
|
||||
|
||||
/* Input Capability Set: inputFlags (2.2.7.1.6) */
|
||||
#define INPUT_FLAG_SCANCODES 0x0001
|
||||
#define INPUT_FLAG_MOUSEX 0x0004
|
||||
#define INPUT_FLAG_FASTPATH_INPUT 0x0008
|
||||
#define INPUT_FLAG_UNICODE 0x0010
|
||||
#define INPUT_FLAG_FASTPATH_INPUT2 0x0020
|
||||
#define INPUT_FLAG_UNUSED1 0x0040
|
||||
#define INPUT_FLAG_UNUSED2 0x0080
|
||||
#define TS_INPUT_FLAG_MOUSE_HWHEEL 0x0100
|
||||
#define TS_INPUT_FLAG_QOE_TIMESTAMPS 0x0200
|
||||
|
||||
/* Glyph Cache Capability Set: GlyphSupportLevel (2.2.7.1.8) */
|
||||
#define GLYPH_SUPPORT_NONE 0x0000
|
||||
#define GLYPH_SUPPORT_PARTIAL 0x0001
|
||||
#define GLYPH_SUPPORT_FULL 0x0002
|
||||
#define GLYPH_SUPPORT_ENCODE 0x0003
|
||||
|
||||
/* Desktop Composition Capability Set: CompDeskSupportLevel (2.2.7.2.8) */
|
||||
#define COMPDESK_NOT_SUPPORTED 0x0000
|
||||
#define COMPDESK_SUPPORTED 0x0001
|
||||
|
||||
/* Surface Commands Capability Set: cmdFlags (2.2.7.2.9) */
|
||||
#define SURFCMDS_SETSURFACEBITS 0x00000002
|
||||
#define SURFCMDS_FRAMEMARKER 0x00000010
|
||||
#define SURFCMDS_STREAMSUFRACEBITS 0x00000040
|
||||
|
||||
/* Bitmap Codec: codecGUID (2.2.7.2.10.1.1) */
|
||||
|
||||
/* 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 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_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"
|
||||
|
||||
/* 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"
|
||||
|
||||
/* 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 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"
|
||||
|
||||
/* PDU Types (2.2.8.1.1.1.1) */
|
||||
#define PDUTYPE_DEMANDACTIVEPDU 0x1
|
||||
#define PDUTYPE_CONFIRMACTIVEPDU 0x3
|
||||
#define PDUTYPE_DEACTIVATEALLPDU 0x6
|
||||
#define PDUTYPE_DATAPDU 0x7
|
||||
#define PDUTYPE_SERVER_REDIR_PKT 0xA
|
||||
|
||||
/* Share Data Header: pduType2 (2.2.8.1.1.1.2) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_DATA_PDU_UPDATE 2 /* PDUTYPE2_UPDATE */
|
||||
#define RDP_DATA_PDU_CONTROL 20
|
||||
#define RDP_DATA_PDU_POINTER 27
|
||||
#define RDP_DATA_PDU_INPUT 28
|
||||
#define RDP_DATA_PDU_SYNCHRONISE 31
|
||||
#define PDUTYPE2_REFRESH_RECT 33
|
||||
#define RDP_DATA_PDU_PLAY_SOUND 34
|
||||
#define RDP_DATA_PDU_LOGON 38
|
||||
#define RDP_DATA_PDU_FONT2 39
|
||||
#define RDP_DATA_PDU_DISCONNECT 47
|
||||
|
||||
/* TS_SECURITY_HEADER: flags (2.2.8.1.1.2.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define SEC_CLIENT_RANDOM 0x0001 /* SEC_EXCHANGE_PKT? */
|
||||
#define SEC_ENCRYPT 0x0008
|
||||
#define SEC_LOGON_INFO 0x0040 /* SEC_INFO_PKT */
|
||||
#define SEC_LICENCE_NEG 0x0080 /* SEC_LICENSE_PKT */
|
||||
|
||||
#define SEC_TAG_SRV_INFO 0x0c01 /* SC_CORE */
|
||||
#define SEC_TAG_SRV_CRYPT 0x0c02 /* SC_SECURITY */
|
||||
#define SEC_TAG_SRV_CHANNELS 0x0c03 /* SC_NET? */
|
||||
|
||||
/* Slow-Path Input Event: messageType (2.2.8.1.1.3.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_INPUT_SYNCHRONIZE 0
|
||||
#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
|
||||
|
||||
/* Keyboard Event: keyboardFlags (2.2.8.1.1.3.1.1.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define KBD_FLAG_RIGHT 0x0001
|
||||
#define KBD_FLAG_EXT 0x0100 /* KBDFLAGS_EXTENDED */
|
||||
#define KBD_FLAG_QUIET 0x1000
|
||||
#define KBD_FLAG_DOWN 0x4000
|
||||
#define KBD_FLAG_UP 0x8000
|
||||
|
||||
/* Mouse Event: pointerFlags (2.2.8.1.1.3.1.1.3) */
|
||||
#define PTRFLAGS_HWHEEL 0x0400
|
||||
#define PTRFLAGS_WHEEL 0x0200
|
||||
#define PTRFLAGS_WHEEL_NEGATIVE 0x0100
|
||||
#define WheelRotationMask 0x01FF
|
||||
#define PTRFLAGS_MOVE 0x0800
|
||||
#define PTRFLAGS_DOWN 0x8000
|
||||
#define PTRFLAGS_BUTTON1 0x1000
|
||||
#define PTRFLAGS_BUTTON2 0x2000
|
||||
#define PTRFLAGS_BUTTON3 0x4000
|
||||
|
||||
/* Extended Mouse Event: pointerFlags (2.2.8.1.1.3.1.1.4) */
|
||||
#define PTRXFLAGS_DOWN 0x8000
|
||||
#define PTRXFLAGS_BUTTON1 0x0001
|
||||
#define PTRXFLAGS_BUTTON2 0x0002
|
||||
|
||||
/* Synchronize Event: toggleFlags (2.2.8.1.1.3.1.1.5) */
|
||||
/* TODO: to be renamed */
|
||||
#define KBD_FLAG_SCROLL 0x0001 /* TS_SYNC_SCROLL_LOCK */
|
||||
#define KBD_FLAG_NUMLOCK 0x0002
|
||||
#define KBD_FLAG_CAPITAL 0x0004
|
||||
#define TS_SYNC_KANA_LOCK 0x0008
|
||||
|
||||
/* Client Fast-Path Input Event PDU 2.2.8.1.2 */
|
||||
#define FASTPATH_INPUT_ENCRYPTED 0x2
|
||||
|
||||
/* Fast-Path Input Event: eventCode (2.2.8.1.2.2) */
|
||||
#define FASTPATH_INPUT_EVENT_SCANCODE 0x0
|
||||
#define FASTPATH_INPUT_EVENT_MOUSE 0x1
|
||||
#define FASTPATH_INPUT_EVENT_MOUSEX 0x2
|
||||
#define FASTPATH_INPUT_EVENT_SYNC 0x3
|
||||
#define FASTPATH_INPUT_EVENT_UNICODE 0x4
|
||||
#define FASTPATH_INPUT_EVENT_QOE_TIMESTAMP 0x6
|
||||
|
||||
/* Fast-Path Keyboard Event: eventHeader (2.2.8.1.2.2.1) */
|
||||
#define FASTPATH_INPUT_KBDFLAGS_RELEASE 0x01
|
||||
#define FASTPATH_INPUT_KBDFLAGS_EXTENDED 0x02
|
||||
#define FASTPATH_INPUT_KBDFLAGS_EXTENDED1 0x04
|
||||
|
||||
/* Slow-Path Graphics Update: updateType (2.2.9.1.1.3.1) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_UPDATE_ORDERS 0
|
||||
#define RDP_UPDATE_BITMAP 1
|
||||
#define RDP_UPDATE_PALETTE 2
|
||||
#define RDP_UPDATE_SYNCHRONIZE 3
|
||||
|
||||
/* Server Pointer Update PDU: messageType (2.2.9.1.1.4) */
|
||||
/* TODO: to be renamed */
|
||||
#define RDP_POINTER_SYSTEM 1 /* TS_PTRMSGTYPE_SYSTEM */
|
||||
#define RDP_POINTER_MOVE 3
|
||||
#define RDP_POINTER_COLOR 6
|
||||
#define RDP_POINTER_CACHED 7
|
||||
#define RDP_POINTER_POINTER 8
|
||||
|
||||
/* System Pointer Update: systemPointerType (2.2.9.1.1.4.3) */
|
||||
#define RDP_NULL_POINTER 0
|
||||
#define RDP_DEFAULT_POINTER 0x7F00
|
||||
|
||||
/* Server Fast-Path Update PDU: action (2.2.9.1.2) */
|
||||
#define FASTPATH_OUTPUT_ACTION_FASTPATH 0x0
|
||||
#define FASTPATH_OUTPUT_ACTION_X224 0x3
|
||||
|
||||
/* Server Fast-Path Update PDU: flags (2.2.9.1.2) */
|
||||
#define FASTPATH_OUTPUT_SECURE_CHECKSUM 0x1
|
||||
#define FASTPATH_OUTPUT_ENCRYPTED 0x2
|
||||
|
||||
/* Fast-Path Update: updateCode (2.2.9.1.2.1) */
|
||||
#define FASTPATH_UPDATETYPE_ORDERS 0x0
|
||||
#define FASTPATH_UPDATETYPE_BITMAP 0x1
|
||||
#define FASTPATH_UPDATETYPE_PALETTE 0x2
|
||||
#define FASTPATH_UPDATETYPE_SYNCHRONIZE 0x3
|
||||
#define FASTPATH_UPDATETYPE_SURFCMDS 0x4
|
||||
#define FASTPATH_UPDATETYPE_PTR_NULL 0x5
|
||||
#define FASTPATH_UPDATETYPE_PTR_DEFAULT 0x6
|
||||
#define FASTPATH_UPDATETYPE_PTR_POSITION 0x8
|
||||
#define FASTPATH_UPDATETYPE_COLOR 0x9
|
||||
#define FASTPATH_UPDATETYPE_CACHED 0xA
|
||||
#define FASTPATH_UPDATETYPE_POINTER 0xB
|
||||
|
||||
/* Fast-Path Update: fragmentation (2.2.9.1.2.1) */
|
||||
#define FASTPATH_FRAGMENT_SINGLE 0x0
|
||||
#define FASTPATH_FRAGMENT_LAST 0x1
|
||||
#define FASTPATH_FRAGMENT_FIRST 0x2
|
||||
#define FASTPATH_FRAGMENT_NEXT 0x3
|
||||
#define FASTPATH_OUTPUT_COMPRESSION_USED 0x2
|
||||
|
||||
/* Surface Command Type (2.2.9.1.2.1.10.1) */
|
||||
#define CMDTYPE_SET_SURFACE_BITS 0x0001
|
||||
#define CMDTYPE_FRAME_MARKER 0x0004
|
||||
#define CMDTYPE_STREAM_SURFACE_BITS 0x0006
|
||||
|
||||
/* Compression Flags (3.1.8.2.1) */
|
||||
/* TODO: to be renamed, not used anywhere */
|
||||
#define RDP_MPPC_COMPRESSED 0x20
|
||||
#define RDP_MPPC_RESET 0x40
|
||||
#define RDP_MPPC_FLUSH 0x80
|
||||
#define RDP_MPPC_DICT_SIZE 8192 /* RDP 4.0 | MS-RDPBCGR 3.1.8 */
|
||||
|
||||
#endif /* MS_RDPBCGR_H */
|
@ -1,123 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-RDPEFS : Definitions from [MS-RDPEFS]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-RDPEFS are currently correct for v20180912 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_RDPEFS_H)
|
||||
#define MS_RDPEFS_H
|
||||
|
||||
/*
|
||||
* RDPDR_HEADER definitions (2.2.1.1)
|
||||
*/
|
||||
|
||||
/* device redirector core component; most of the packets in this protocol */
|
||||
/* are sent under this component ID */
|
||||
#define RDPDR_CTYP_CORE 0x4472
|
||||
|
||||
/* printing component. the packets that use this ID are typically about */
|
||||
/* printer cache management and identifying XPS printers */
|
||||
#define RDPDR_CTYP_PRN 0x5052
|
||||
|
||||
/* Server Announce Request, as specified in section 2.2.2.2 */
|
||||
#define PAKID_CORE_SERVER_ANNOUNCE 0x496E
|
||||
|
||||
/* Client Announce Reply and Server Client ID Confirm, as specified in */
|
||||
/* sections 2.2.2.3 and 2.2.2.6. */
|
||||
#define PAKID_CORE_CLIENTID_CONFIRM 0x4343
|
||||
|
||||
/* Client Name Request, as specified in section 2.2.2.4 */
|
||||
#define PAKID_CORE_CLIENT_NAME 0x434E
|
||||
|
||||
/* Client Device List Announce Request, as specified in section 2.2.2.9 */
|
||||
#define PAKID_CORE_DEVICELIST_ANNOUNCE 0x4441
|
||||
|
||||
/* Server Device Announce Response, as specified in section 2.2.2.1 */
|
||||
#define PAKID_CORE_DEVICE_REPLY 0x6472
|
||||
|
||||
/* Device I/O Request, as specified in section 2.2.1.4 */
|
||||
#define PAKID_CORE_DEVICE_IOREQUEST 0x4952
|
||||
|
||||
/* Device I/O Response, as specified in section 2.2.1.5 */
|
||||
#define PAKID_CORE_DEVICE_IOCOMPLETION 0x4943
|
||||
|
||||
/* Server Core Capability Request, as specified in section 2.2.2.7 */
|
||||
#define PAKID_CORE_SERVER_CAPABILITY 0x5350
|
||||
|
||||
/* Client Core Capability Response, as specified in section 2.2.2.8 */
|
||||
#define PAKID_CORE_CLIENT_CAPABILITY 0x4350
|
||||
|
||||
/* Client Drive Device List Remove, as specified in section 2.2.3.2 */
|
||||
#define PAKID_CORE_DEVICELIST_REMOVE 0x444D
|
||||
|
||||
/* Add Printer Cachedata, as specified in [MS-RDPEPC] section 2.2.2.3 */
|
||||
#define PAKID_PRN_CACHE_DATA 0x5043
|
||||
|
||||
/* Server User Logged On, as specified in section 2.2.2.5 */
|
||||
#define PAKID_CORE_USER_LOGGEDON 0x554C
|
||||
|
||||
/* Server Printer Set XPS Mode, as specified in [MS-RDPEPC] section 2.2.2.2 */
|
||||
#define PAKID_PRN_USING_XPS 0x5543
|
||||
|
||||
/*
|
||||
* Capability header definitions (2.2.1.2)
|
||||
*/
|
||||
|
||||
#define CAP_GENERAL_TYPE 0x0001 /* General cap set - GENERAL_CAPS_SET */
|
||||
#define CAP_PRINTER_TYPE 0x0002 /* Print cap set - PRINTER_CAPS_SET */
|
||||
#define CAP_PORT_TYPE 0x0003 /* Port cap set - PORT_CAPS_SET */
|
||||
#define CAP_DRIVE_TYPE 0x0004 /* Drive cap set - DRIVE_CAPS_SET */
|
||||
#define CAP_SMARTCARD_TYPE 0x0005 /* Smart card cap set - SMARTCARD_CAPS_SET */
|
||||
|
||||
/*
|
||||
* Device announce header (2.2.1.3)
|
||||
*/
|
||||
#define RDPDR_DTYP_SERIAL 0x0001
|
||||
#define RDPDR_DTYP_PARALLEL 0x0002
|
||||
#define RDPDR_DTYP_PRINT 0x0004
|
||||
#define RDPDR_DTYP_FILESYSTEM 0x0008
|
||||
#define RDPDR_DTYP_SMARTCARD 0x0020
|
||||
|
||||
/* Device I/O Request definitions (2.2.1.4) */
|
||||
/* MajorFunction */
|
||||
enum IRP_MJ
|
||||
{
|
||||
IRP_MJ_CREATE = 0x00000000,
|
||||
IRP_MJ_CLOSE = 0x00000002,
|
||||
IRP_MJ_READ = 0x00000003,
|
||||
IRP_MJ_WRITE = 0x00000004,
|
||||
IRP_MJ_DEVICE_CONTROL = 0x0000000E,
|
||||
IRP_MJ_QUERY_VOLUME_INFORMATION = 0x0000000A,
|
||||
IRP_MJ_SET_VOLUME_INFORMATION = 0x0000000B,
|
||||
IRP_MJ_QUERY_INFORMATION = 0x00000005,
|
||||
IRP_MJ_SET_INFORMATION = 0x00000006,
|
||||
IRP_MJ_DIRECTORY_CONTROL = 0x0000000C,
|
||||
IRP_MJ_LOCK_CONTROL = 0x00000011
|
||||
};
|
||||
|
||||
/* MinorFunction */
|
||||
/* Set to zero unless MajorFunction code == IRP_MJ_DIRECTORY_CONTROL */
|
||||
enum IRP_MN
|
||||
{
|
||||
IRP_MN_NONE = 0x00000000, /* Name not in MS docs */
|
||||
IRP_MN_QUERY_DIRECTORY = 0x00000001,
|
||||
IRP_MN_NOTIFY_CHANGE_DIRECTORY = 0x00000002
|
||||
};
|
||||
|
||||
|
||||
#endif /* MS_RDPEFS_H */
|
@ -1,59 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-RDPEGDI : Definitions from [MS-RDPEGDI]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-RDPEGDI are currently correct for v20180912 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_RDPEGDI_H)
|
||||
#define MS_RDPEGDI_H
|
||||
|
||||
/* Drawing Order: controlFlags (2.2.2.2.1, 2.2.2.2.1.1.2) */
|
||||
#define TS_STANDARD 0x01
|
||||
#define TS_SECONDARY 0x02
|
||||
#define TS_BOUNDS 0x04
|
||||
#define TS_TYPE_CHANGE 0x08
|
||||
#define TS_DELTA_COORDINATES 0x10
|
||||
#define TS_ZERO_BOUNDS_DELTAS 0x20
|
||||
#define TS_ZERO_FIELD_BYTE_BIT0 0x40
|
||||
#define TS_ZERO_FIELD_BYTE_BIT1 0x80
|
||||
|
||||
/* Drawing Order: orderType (2.2.2.2.1.1.2) */
|
||||
/* Should be renamed */
|
||||
#define RDP_ORDER_DESTBLT 0 /* TS_ENC_DSTBLT_ORDER */
|
||||
#define RDP_ORDER_PATBLT 1
|
||||
#define RDP_ORDER_SCREENBLT 2
|
||||
#define RDP_ORDER_LINE 9
|
||||
#define RDP_ORDER_RECT 10
|
||||
#define RDP_ORDER_DESKSAVE 11
|
||||
#define RDP_ORDER_MEMBLT 13
|
||||
#define RDP_ORDER_TRIBLT 14
|
||||
#define RDP_ORDER_POLYLINE 22
|
||||
#define RDP_ORDER_TEXT2 27
|
||||
#define RDP_ORDER_COMPOSITE 37 /* 0x25 - not defined in RDPEGDI */
|
||||
|
||||
/* Secondary Drawing Order Header: orderType (2.2.2.2.1.2.1.1) */
|
||||
#define TS_CACHE_BITMAP_UNCOMPRESSED 0x00
|
||||
#define TS_CACHE_COLOR_TABLE 0x01
|
||||
#define TS_CACHE_BITMAP_COMPRESSED 0x02
|
||||
#define TS_CACHE_GLYPH 0x03
|
||||
#define TS_CACHE_BITMAP_UNCOMPRESSED_REV2 0x04
|
||||
#define TS_CACHE_BITMAP_COMPRESSED_REV2 0x05
|
||||
#define TS_CACHE_BRUSH 0x07
|
||||
#define TS_CACHE_BITMAP_COMPRESSED_REV3 0x08
|
||||
|
||||
#endif /* MS_RDPEGDI_H */
|
@ -1,36 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-RDPELE : Definitions from [MS-RDPELE]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-RDPELE are currently correct for v20180912 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_RDPELE_H)
|
||||
#define MS_RDPELE_H
|
||||
|
||||
/* LicensingMessage (MS-RDPELE 2.2.2) */
|
||||
/* TODO: to be renamed */
|
||||
#define LICENCE_TAG_DEMAND 0x01 /* LICNSE_REQUEST */
|
||||
#define LICENCE_TAG_AUTHREQ 0x02 /* PLATFORM_CHALLENGE */
|
||||
#define LICENCE_TAG_ISSUE 0x03 /* NEW_LICENSE */
|
||||
#define LICENCE_TAG_REISSUE 0x04 /* UPGRADE_LICENSE */
|
||||
#define LICENCE_TAG_PRESENT 0x12 /* LICENSE_INFO */
|
||||
#define LICENCE_TAG_REQUEST 0x13 /* NEW_LICENSE_REQUEST */
|
||||
#define LICENCE_TAG_AUTHRESP 0x15 /* PLATFORM_CHALLENGE_RESPONSE */
|
||||
#define LICENCE_TAG_RESULT 0xff
|
||||
|
||||
#endif /* MS_RDPELE_H */
|
@ -1,31 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-RDPERP : Definitions from [MS-RDPERP]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-RDPERP are currently correct for v20190923 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_RDPERP_H)
|
||||
#define MS_RDPERP_H
|
||||
|
||||
/* Window List Capability Set: WndSupportLevel (2.2.1.1.2) */
|
||||
#define TS_WINDOW_LEVEL_NOT_SUPPORTED 0x00000000
|
||||
#define TS_WINDOW_LEVEL_SUPPORTED 0x00000001
|
||||
#define TS_WINDOW_LEVEL_SUPPORTED_EX 0x00000002
|
||||
|
||||
|
||||
#endif /* MS_RDPERP_H */
|
@ -1,79 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* MS-SMB2 : Definitions from [MS-SMB2]
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* References to MS-SMB2 are currently correct for v20190923 of that
|
||||
* document
|
||||
*/
|
||||
|
||||
#if !defined(MS_SMB2_H)
|
||||
#define MS_SMB2_H
|
||||
|
||||
/* SMB2 CREATE request values (section 2.2.13) */
|
||||
|
||||
/*
|
||||
* ShareAccess Mask. Currently, this is referred
|
||||
* to in MS-RDPEFS 2.2.1.4.1 as 'SharedAccess' rather than 'ShareAccess'.
|
||||
*/
|
||||
#define SA_FILE_SHARE_READ 0x00000001
|
||||
#define SA_FILE_SHARE_WRITE 0x00000002
|
||||
#define SA_FILE_SHARE_DELETE 0x00000004
|
||||
|
||||
/* CreateDisposition Mask */
|
||||
#define CD_FILE_SUPERSEDE 0x00000000
|
||||
#define CD_FILE_OPEN 0x00000001
|
||||
#define CD_FILE_CREATE 0x00000002
|
||||
#define CD_FILE_OPEN_IF 0x00000003
|
||||
#define CD_FILE_OVERWRITE 0x00000004
|
||||
#define CD_FILE_OVERWRITE_IF 0x00000005
|
||||
|
||||
/* CreateOptions Mask */
|
||||
enum CREATE_OPTIONS
|
||||
{
|
||||
CO_FILE_DIRECTORY_FILE = 0x00000001,
|
||||
CO_FILE_WRITE_THROUGH = 0x00000002,
|
||||
CO_FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020,
|
||||
CO_FILE_DELETE_ON_CLOSE = 0x00001000
|
||||
};
|
||||
|
||||
/*
|
||||
* DesiredAccess Mask (section 2.2.13.1.1)
|
||||
*/
|
||||
|
||||
#define DA_FILE_READ_DATA 0x00000001
|
||||
#define DA_FILE_WRITE_DATA 0x00000002
|
||||
#define DA_FILE_APPEND_DATA 0x00000004
|
||||
#define DA_FILE_READ_EA 0x00000008 /* rd extended attributes */
|
||||
#define DA_FILE_WRITE_EA 0x00000010 /* wr extended attributes */
|
||||
#define DA_FILE_EXECUTE 0x00000020
|
||||
#define DA_FILE_READ_ATTRIBUTES 0x00000080
|
||||
#define DA_FILE_WRITE_ATTRIBUTES 0x00000100
|
||||
#define DA_DELETE 0x00010000
|
||||
#define DA_READ_CONTROL 0x00020000 /* rd security descriptor */
|
||||
#define DA_WRITE_DAC 0x00040000
|
||||
#define DA_WRITE_OWNER 0x00080000
|
||||
#define DA_SYNCHRONIZE 0x00100000
|
||||
#define DA_ACCESS_SYSTEM_SECURITY 0x01000000
|
||||
#define DA_MAXIMUM_ALLOWED 0x02000000
|
||||
#define DA_GENERIC_ALL 0x10000000
|
||||
#define DA_GENERIC_EXECUTE 0x20000000
|
||||
#define DA_GENERIC_WRITE 0x40000000
|
||||
#define DA_GENERIC_READ 0x80000000
|
||||
|
||||
#endif /* MS_SMB2_H */
|
||||
|
||||
|
||||
|
3499
common/os_calls.c
3499
common/os_calls.c
File diff suppressed because it is too large
Load Diff
@ -1,178 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* generic operating system calls
|
||||
*/
|
||||
|
||||
#if !defined(OS_CALLS_H)
|
||||
#define OS_CALLS_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 g_rm_temp_dir(void);
|
||||
int g_mk_socket_path(const char* app_name);
|
||||
void g_init(const char* app_name);
|
||||
void g_deinit(void);
|
||||
void* g_malloc(int size, int zero);
|
||||
void g_free(void* ptr);
|
||||
void g_printf(const char *format, ...) printflike(1, 2);
|
||||
void g_sprintf(char* dest, const char* format, ...) \
|
||||
printflike(2, 3);
|
||||
int g_snprintf(char* dest, int len, const char* format, ...) \
|
||||
printflike(3, 4);
|
||||
void g_writeln(const char* format, ...) printflike(1, 2);
|
||||
void g_write(const char* format, ...) printflike(1, 2);
|
||||
void g_hexdump(const char *p, int len);
|
||||
void g_memset(void* ptr, int val, int size);
|
||||
void g_memcpy(void* d_ptr, const void* s_ptr, int size);
|
||||
int g_getchar(void);
|
||||
int g_tcp_set_no_delay(int sck);
|
||||
int g_tcp_set_keepalive(int sck);
|
||||
int g_tcp_socket(void);
|
||||
int g_sck_set_send_buffer_bytes(int sck, int bytes);
|
||||
int g_sck_get_send_buffer_bytes(int sck, int *bytes);
|
||||
int g_sck_set_recv_buffer_bytes(int sck, int bytes);
|
||||
int g_sck_get_recv_buffer_bytes(int sck, int *bytes);
|
||||
int g_sck_local_socket(void);
|
||||
int g_sck_vsock_socket(void);
|
||||
int g_sck_get_peer_cred(int sck, int *pid, int *uid, int *gid);
|
||||
void g_sck_close(int sck);
|
||||
int g_tcp_connect(int sck, const char* address, const char* port);
|
||||
int g_sck_local_connect(int sck, const char* port);
|
||||
int g_sck_set_non_blocking(int sck);
|
||||
int g_tcp_bind(int sck, const char *port);
|
||||
int g_sck_local_bind(int sck, const char* port);
|
||||
int g_sck_vsock_bind(int sck, const char* port);
|
||||
int g_sck_vsock_bind_address(int sck, const char *port, const char *address);
|
||||
int g_tcp_bind_address(int sck, const char* port, const char* address);
|
||||
int g_sck_listen(int sck);
|
||||
int g_tcp_accept(int sck);
|
||||
int g_sck_accept(int sck, char *addr, int addr_bytes,
|
||||
char *port, int port_bytes);
|
||||
int g_sck_recv(int sck, void* ptr, int len, int flags);
|
||||
int g_sck_send(int sck, const void* ptr, int len, int flags);
|
||||
int g_sck_last_error_would_block(int sck);
|
||||
int g_sck_socket_ok(int sck);
|
||||
int g_sck_can_send(int sck, int millis);
|
||||
int g_sck_can_recv(int sck, int millis);
|
||||
int g_sck_select(int sck1, int sck2);
|
||||
void g_write_ip_address(int rcv_sck, char* ip_address, int bytes);
|
||||
void g_sleep(int msecs);
|
||||
tintptr g_create_wait_obj(const char *name);
|
||||
tintptr g_create_wait_obj_from_socket(tintptr socket, int write);
|
||||
void g_delete_wait_obj_from_socket(tintptr wait_obj);
|
||||
int g_set_wait_obj(tintptr obj);
|
||||
int g_reset_wait_obj(tintptr obj);
|
||||
int g_is_wait_obj_set(tintptr obj);
|
||||
int g_delete_wait_obj(tintptr obj);
|
||||
int g_obj_wait(tintptr* read_objs, int rcount, tintptr* write_objs,
|
||||
int wcount,int mstimeout);
|
||||
void g_random(char* data, int len);
|
||||
int g_abs(int i);
|
||||
int g_memcmp(const void* s1, const void* s2, int len);
|
||||
int g_file_open(const char* file_name);
|
||||
int g_file_open_ex(const char *file_name, int aread, int awrite,
|
||||
int acreate, int atrunc);
|
||||
int g_file_close(int fd);
|
||||
int g_file_read(int fd, char* ptr, int len);
|
||||
int g_file_write(int fd, const char *ptr, int len);
|
||||
int g_file_seek(int fd, int offset);
|
||||
int g_file_lock(int fd, int start, int len);
|
||||
int g_chmod_hex(const char* filename, int flags);
|
||||
int g_chown(const char* name, int uid, int gid);
|
||||
int g_mkdir(const char* dirname);
|
||||
char* g_get_current_dir(char* dirname, int maxlen);
|
||||
int g_set_current_dir(const char *dirname);
|
||||
int g_file_exist(const char* filename);
|
||||
int g_file_readable(const char *filename);
|
||||
int g_directory_exist(const char* dirname);
|
||||
int g_create_dir(const char* dirname);
|
||||
int g_create_path(const char* path);
|
||||
int g_remove_dir(const char* dirname);
|
||||
int g_file_delete(const char* filename);
|
||||
int g_file_get_size(const char* filename);
|
||||
long g_load_library(char* in);
|
||||
int g_free_library(long lib);
|
||||
void* g_get_proc_address(long lib, const char* name);
|
||||
int g_system(char* aexec);
|
||||
char* g_get_strerror(void);
|
||||
int g_get_errno(void);
|
||||
int g_execvp(const char* p1, char* args[]);
|
||||
int g_execlp3(const char* a1, const char* a2, const char* a3);
|
||||
void g_signal_child_stop(void (*func)(int));
|
||||
void g_signal_segfault(void (*func)(int));
|
||||
void g_signal_hang_up(void (*func)(int));
|
||||
void g_signal_user_interrupt(void (*func)(int));
|
||||
void g_signal_terminate(void (*func)(int));
|
||||
void g_signal_pipe(void (*func)(int));
|
||||
void g_signal_usr1(void (*func)(int));
|
||||
int g_fork(void);
|
||||
int g_setgid(int pid);
|
||||
int g_initgroups(const char* user, int gid);
|
||||
int g_getuid(void);
|
||||
int g_getgid(void);
|
||||
int g_setuid(int pid);
|
||||
int g_setsid(void);
|
||||
int g_getlogin(char *name, unsigned int len);
|
||||
int g_setlogin(const char *name);
|
||||
int g_waitchild(void);
|
||||
int g_waitpid(int pid);
|
||||
void g_clearenv(void);
|
||||
int g_setenv(const char* name, const char* value, int rewrite);
|
||||
char* g_getenv(const char* name);
|
||||
int g_exit(int exit_code);
|
||||
int g_getpid(void);
|
||||
int g_sigterm(int pid);
|
||||
int g_getuser_info(const char* username, int* gid, int* uid, char** shell,
|
||||
char** dir, char** gecos);
|
||||
int g_getgroup_info(const char* groupname, int* gid);
|
||||
int g_check_user_in_group(const char* username, int gid, int* ok);
|
||||
int g_time1(void);
|
||||
int g_time2(void);
|
||||
int g_time3(void);
|
||||
int g_save_to_bmp(const char* filename, char* data, int stride_bytes,
|
||||
int width, int height, int depth, int bits_per_pixel);
|
||||
void * g_shmat(int shmid);
|
||||
int g_shmdt(const void *shmaddr);
|
||||
int g_gethostname(char *name, int len);
|
||||
int g_mirror_memcpy(void *dst, const void *src, int len);
|
||||
int g_tcp4_socket(void);
|
||||
int g_tcp4_bind_address(int sck, const char *port, const char *address);
|
||||
int g_tcp6_socket(void);
|
||||
int g_tcp6_bind_address(int sck, const char *port, const char *address);
|
||||
|
||||
/* 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
|
465
common/parse.h
465
common/parse.h
@ -1,465 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Parsing structs and macros
|
||||
*
|
||||
* based on parse.h from rdesktop
|
||||
* this is a super fast stream method, you bet
|
||||
* needed functions g_malloc, g_free, g_memset, g_memcpy
|
||||
*/
|
||||
|
||||
#if !defined(PARSE_H)
|
||||
#define PARSE_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
#if defined(L_ENDIAN)
|
||||
#elif defined(B_ENDIAN)
|
||||
#else
|
||||
#error Unknown endianness.
|
||||
#endif
|
||||
|
||||
/* parser state */
|
||||
struct stream
|
||||
{
|
||||
char *p;
|
||||
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;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_check(s) ((s)->p <= (s)->end)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_check_rem(s, n) ((s)->p + (n) <= (s)->end)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_check_rem_out(s, n) ((s)->p + (n) <= (s)->data + (s)->size)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_check_end(s) ((s)->p == (s)->end)
|
||||
|
||||
/******************************************************************************/
|
||||
#define make_stream(s) \
|
||||
(s) = (struct stream*)g_malloc(sizeof(struct stream), 1)
|
||||
|
||||
/******************************************************************************/
|
||||
#define init_stream(s, v) do \
|
||||
{ \
|
||||
if ((v) > (s)->size) \
|
||||
{ \
|
||||
g_free((s)->data); \
|
||||
(s)->data = (char*)g_malloc((v), 0); \
|
||||
(s)->size = (v); \
|
||||
} \
|
||||
(s)->p = (s)->data; \
|
||||
(s)->end = (s)->data; \
|
||||
(s)->next_packet = 0; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define free_stream(s) do \
|
||||
{ \
|
||||
if ((s) != 0) \
|
||||
{ \
|
||||
g_free((s)->data); \
|
||||
} \
|
||||
g_free((s)); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_push_layer(s, h, n) do \
|
||||
{ \
|
||||
(s)->h = (s)->p; \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_pop_layer(s, h) \
|
||||
(s)->p = (s)->h
|
||||
|
||||
/******************************************************************************/
|
||||
#define s_mark_end(s) \
|
||||
(s)->end = (s)->p
|
||||
|
||||
#define in_sint8(s, v) do \
|
||||
{ \
|
||||
(v) = *((signed char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint8(s, v) do \
|
||||
{ \
|
||||
(v) = *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
/******************************************************************************/
|
||||
#define in_uint8_peek(s, v) do { v = *s->p; } while (0)
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_sint16_le(s, v) do \
|
||||
{ \
|
||||
(v) = (signed short) \
|
||||
( \
|
||||
(*((unsigned char*)((s)->p + 0)) << 0) | \
|
||||
(*((unsigned char*)((s)->p + 1)) << 8) \
|
||||
); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_sint16_le(s, v) do \
|
||||
{ \
|
||||
(v) = *((signed short*)((s)->p)); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_uint16_le(s, v) do \
|
||||
{ \
|
||||
(v) = (unsigned short) \
|
||||
( \
|
||||
(*((unsigned char*)((s)->p + 0)) << 0) | \
|
||||
(*((unsigned char*)((s)->p + 1)) << 8) \
|
||||
); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_uint16_le(s, v) do \
|
||||
{ \
|
||||
(v) = *((unsigned short*)((s)->p)); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint16_be(s, v) do \
|
||||
{ \
|
||||
(v) = *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
(v) <<= 8; \
|
||||
(v) |= *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_uint32_le(s, v) do \
|
||||
{ \
|
||||
(v) = (unsigned int) \
|
||||
( \
|
||||
(*((unsigned char*)((s)->p + 0)) << 0) | \
|
||||
(*((unsigned char*)((s)->p + 1)) << 8) | \
|
||||
(*((unsigned char*)((s)->p + 2)) << 16) | \
|
||||
(*((unsigned char*)((s)->p + 3)) << 24) \
|
||||
); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_uint32_le(s, v) do \
|
||||
{ \
|
||||
(v) = *((unsigned int*)((s)->p)); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define in_uint64_le(s, v) do \
|
||||
{ \
|
||||
(v) = (tui64) \
|
||||
( \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 0)))) << 0) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 1)))) << 8) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 2)))) << 16) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 3)))) << 24) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 4)))) << 32) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 5)))) << 40) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 6)))) << 48) | \
|
||||
(((tui64)(*((unsigned char*)((s)->p + 7)))) << 56) \
|
||||
); \
|
||||
(s)->p += 8; \
|
||||
} while (0)
|
||||
#else
|
||||
#define in_uint64_le(s, v) do \
|
||||
{ \
|
||||
(v) = *((tui64*)((s)->p)); \
|
||||
(s)->p += 8; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint32_be(s, v) do \
|
||||
{ \
|
||||
(v) = *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
(v) <<= 8; \
|
||||
(v) |= *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
(v) <<= 8; \
|
||||
(v) |= *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
(v) <<= 8; \
|
||||
(v) |= *((unsigned char*)((s)->p)); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)(v); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define out_uint16_le(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
#else
|
||||
#define out_uint16_le(s, v) do \
|
||||
{ \
|
||||
*((unsigned short*)((s)->p)) = (unsigned short)(v); \
|
||||
(s)->p += 2; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint16_be(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define out_uint32_le(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 16); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 24); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
#else
|
||||
#define out_uint32_le(s, v) do \
|
||||
{ \
|
||||
*((unsigned int*)((s)->p)) = (v); \
|
||||
(s)->p += 4; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#if defined(B_ENDIAN) || defined(NEED_ALIGN)
|
||||
#define out_uint64_le(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)((v) >> 0); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 16); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 24); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 32); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 40); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 48); \
|
||||
(s)->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 56); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
#else
|
||||
#define out_uint64_le(s, v) do \
|
||||
{ \
|
||||
*((tui64*)((s)->p)) = (v); \
|
||||
(s)->p += 8; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint32_be(s, v) do \
|
||||
{ \
|
||||
*((s)->p) = (unsigned char)((v) >> 24); \
|
||||
s->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 16); \
|
||||
s->p++; \
|
||||
*((s)->p) = (unsigned char)((v) >> 8); \
|
||||
s->p++; \
|
||||
*((s)->p) = (unsigned char)(v); \
|
||||
(s)->p++; \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint8p(s, v, n) do \
|
||||
{ \
|
||||
(v) = (s)->p; \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint8a(s, v, n) do \
|
||||
{ \
|
||||
g_memcpy((v), (s)->p, (n)); \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define in_uint8s(s, n) \
|
||||
(s)->p += (n)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8p(s, v, n) do \
|
||||
{ \
|
||||
g_memcpy((s)->p, (v), (n)); \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8a(s, v, n) \
|
||||
out_uint8p((s), (v), (n))
|
||||
|
||||
/******************************************************************************/
|
||||
#define out_uint8s(s, n) do \
|
||||
{ \
|
||||
g_memset((s)->p, 0, (n)); \
|
||||
(s)->p += (n); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* @brief allocate a new stream
|
||||
*
|
||||
* @param _s opaque handle to the new stream
|
||||
* @param _l length of new stream
|
||||
******************************************************************************/
|
||||
#define xstream_new(_s, _l) \
|
||||
do \
|
||||
{ \
|
||||
make_stream((_s)); \
|
||||
init_stream((_s), (_l)); \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* @brief release a previously allocated stream
|
||||
*
|
||||
* @param _s opaque handle returned by stream_new()
|
||||
*****************************************************************************/
|
||||
#define xstream_free(_s) free_stream(_s)
|
||||
|
||||
#define xstream_rd_u8(_s, _var) in_uint8(_s, _var)
|
||||
#define xstream_rd_u16_le(_s, _var) in_uint16_le(_s, _var)
|
||||
#define xstream_rd_u32_le(_s, _var) in_uint32_le(_s, _var)
|
||||
|
||||
#define xstream_rd_s8_le(_s, _var) in_sint8(_s, _var)
|
||||
#define xstream_rd_s16_le(_s, _var) in_sint16_le(_s, _var)
|
||||
#define xstream_rd_s32_le(_s, _var) TODO
|
||||
|
||||
#define xstream_wr_u8(_s, _var) out_uint8(_s, _var)
|
||||
#define xstream_wr_u16_le(_s, _var) out_uint16_le(_s, _var)
|
||||
#define xstream_wr_u32_le(_s, _var) out_uint32_le(_s, _var)
|
||||
|
||||
#define xstream_wr_s8(_s, _var) TODO
|
||||
#define xstream_wr_s16_le(_s, _var) TODO
|
||||
#define xstream_wr_s32_le(_s, _var) TODO
|
||||
|
||||
#define xstream_rd_u64_le(_s, _v) \
|
||||
do \
|
||||
{ \
|
||||
_v = \
|
||||
(tui64)(*((unsigned char *)_s->p)) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 1))) << 8) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 2))) << 16) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 3))) << 24) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 4))) << 32) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 5))) << 40) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 6))) << 48) | \
|
||||
(((tui64) (*(((unsigned char *)_s->p) + 7))) << 56); \
|
||||
_s->p += 8; \
|
||||
} while (0)
|
||||
|
||||
#define xstream_wr_u64_le(_s, _v) \
|
||||
do \
|
||||
{ \
|
||||
*(((unsigned char *) _s->p) + 0) = (unsigned char) ((_v >> 0) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 1) = (unsigned char) ((_v >> 8) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 2) = (unsigned char) ((_v >> 16) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 3) = (unsigned char) ((_v >> 24) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 4) = (unsigned char) ((_v >> 32) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 5) = (unsigned char) ((_v >> 40) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 6) = (unsigned char) ((_v >> 48) & 0xff); \
|
||||
*(((unsigned char *) _s->p) + 7) = (unsigned char) ((_v >> 56) & 0xff); \
|
||||
_s->p += 8; \
|
||||
} while (0)
|
||||
|
||||
/* copy data into stream */
|
||||
#define xstream_copyin(_s, _dest, _len) \
|
||||
do \
|
||||
{ \
|
||||
g_memcpy((_s)->p, (_dest), (_len)); \
|
||||
(_s)->p += (_len); \
|
||||
} while (0)
|
||||
|
||||
/* copy data out of stream */
|
||||
#define xstream_copyout(_dest, _s, _len) \
|
||||
do \
|
||||
{ \
|
||||
g_memcpy((_dest), (_s)->p, (_len)); \
|
||||
(_s)->p += (_len); \
|
||||
} while (0)
|
||||
|
||||
#define xstream_rd_string(_dest, _s, _len) \
|
||||
do \
|
||||
{ \
|
||||
g_memcpy((_dest), (_s)->p, (_len)); \
|
||||
(_s)->p += (_len); \
|
||||
} while (0)
|
||||
|
||||
#define xstream_wr_string(_s, _src, _len) \
|
||||
do \
|
||||
{ \
|
||||
g_memcpy((_s)->p, (_src), (_len)); \
|
||||
(_s)->p += (_len); \
|
||||
} while (0)
|
||||
|
||||
#define xstream_len(_s) (int) ((_s)->p - (_s)->data)
|
||||
#define xstream_seek(_s, _len) (_s)->p += (_len)
|
||||
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
/**
|
||||
* 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
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* 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"
|
||||
|
147
common/rail.h
147
common/rail.h
@ -1,147 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2012-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if !defined(_RAIL_H)
|
||||
#define _RAIL_H
|
||||
|
||||
/*
|
||||
ORDER_TYPE_WINDOW
|
||||
WINDOW_ORDER_TYPE_WINDOW
|
||||
WINDOW_ORDER_ICON
|
||||
WINDOW_ORDER_CACHED_ICON
|
||||
WINDOW_ORDER_STATE_DELETED
|
||||
WINDOW_ORDER_STATE_NEW on
|
||||
WINDOW_ORDER_STATE_NEW off
|
||||
WINDOW_ORDER_TYPE_NOTIFY
|
||||
WINDOW_ORDER_STATE_DELETED
|
||||
WINDOW_ORDER_STATE_NEW on
|
||||
WINDOW_ORDER_STATE_NEW off
|
||||
WINDOW_ORDER_TYPE_DESKTOP
|
||||
WINDOW_ORDER_FIELD_DESKTOP_NONE on
|
||||
WINDOW_ORDER_FIELD_DESKTOP_NONE off
|
||||
*/
|
||||
|
||||
/* Window Order Header Flags */
|
||||
#define WINDOW_ORDER_TYPE_WINDOW 0x01000000
|
||||
#define WINDOW_ORDER_TYPE_NOTIFY 0x02000000
|
||||
#define WINDOW_ORDER_TYPE_DESKTOP 0x04000000
|
||||
#define WINDOW_ORDER_STATE_NEW 0x10000000
|
||||
#define WINDOW_ORDER_STATE_DELETED 0x20000000
|
||||
#define WINDOW_ORDER_FIELD_OWNER 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_STYLE 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_SHOW 0x00000010
|
||||
#define WINDOW_ORDER_FIELD_TITLE 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET 0x00004000
|
||||
#define WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE 0x00010000
|
||||
#define WINDOW_ORDER_FIELD_RP_CONTENT 0x00020000
|
||||
#define WINDOW_ORDER_FIELD_ROOT_PARENT 0x00040000
|
||||
#define WINDOW_ORDER_FIELD_WND_OFFSET 0x00000800
|
||||
#define WINDOW_ORDER_FIELD_WND_CLIENT_DELTA 0x00008000
|
||||
#define WINDOW_ORDER_FIELD_WND_SIZE 0x00000400
|
||||
#define WINDOW_ORDER_FIELD_WND_RECTS 0x00000100
|
||||
#define WINDOW_ORDER_FIELD_VIS_OFFSET 0x00001000
|
||||
#define WINDOW_ORDER_FIELD_VISIBILITY 0x00000200
|
||||
#define WINDOW_ORDER_FIELD_ICON_BIG 0x00002000
|
||||
#define WINDOW_ORDER_ICON 0x40000000
|
||||
#define WINDOW_ORDER_CACHED_ICON 0x80000000
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_VERSION 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_TIP 0x00000001
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_STATE 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_NONE 0x00000001
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_HOOKED 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_COMPLETED 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_BEGAN 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER 0x00000010
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND 0x00000020
|
||||
|
||||
struct rail_icon_info
|
||||
{
|
||||
int bpp;
|
||||
int width;
|
||||
int height;
|
||||
int cmap_bytes;
|
||||
int mask_bytes;
|
||||
int data_bytes;
|
||||
char* mask;
|
||||
char* cmap;
|
||||
char* data;
|
||||
};
|
||||
|
||||
struct rail_window_rect
|
||||
{
|
||||
short left;
|
||||
short top;
|
||||
short right;
|
||||
short bottom;
|
||||
};
|
||||
|
||||
struct rail_notify_icon_infotip
|
||||
{
|
||||
int timeout;
|
||||
int flags;
|
||||
char* text;
|
||||
char* title;
|
||||
};
|
||||
|
||||
struct rail_window_state_order
|
||||
{
|
||||
int owner_window_id;
|
||||
int style;
|
||||
int extended_style;
|
||||
int show_state;
|
||||
char* title_info;
|
||||
int client_offset_x;
|
||||
int client_offset_y;
|
||||
int client_area_width;
|
||||
int client_area_height;
|
||||
int rp_content;
|
||||
int root_parent_handle;
|
||||
int window_offset_x;
|
||||
int window_offset_y;
|
||||
int window_client_delta_x;
|
||||
int window_client_delta_y;
|
||||
int window_width;
|
||||
int window_height;
|
||||
int num_window_rects;
|
||||
struct rail_window_rect* window_rects;
|
||||
int visible_offset_x;
|
||||
int visible_offset_y;
|
||||
int num_visibility_rects;
|
||||
struct rail_window_rect* visibility_rects;
|
||||
};
|
||||
|
||||
struct rail_notify_state_order
|
||||
{
|
||||
int version;
|
||||
char* tool_tip;
|
||||
struct rail_notify_icon_infotip infotip;
|
||||
int state;
|
||||
int icon_cache_entry;
|
||||
int icon_cache_id;
|
||||
struct rail_icon_info icon_info;
|
||||
};
|
||||
|
||||
struct rail_monitored_desktop_order
|
||||
{
|
||||
int active_window_id;
|
||||
int num_window_ids;
|
||||
int* window_ids;
|
||||
};
|
||||
|
||||
#endif
|
1104
common/ssl_calls.c
1104
common/ssl_calls.c
File diff suppressed because it is too large
Load Diff
@ -1,120 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
* Copyright (C) Idan Freiberg 2013-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if !defined(SSL_CALLS_H)
|
||||
#define SSL_CALLS_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
int
|
||||
ssl_init(void);
|
||||
int
|
||||
ssl_finish(void);
|
||||
void *
|
||||
ssl_rc4_info_create(void);
|
||||
void
|
||||
ssl_rc4_info_delete(void *rc4_info);
|
||||
void
|
||||
ssl_rc4_set_key(void *rc4_info, char *key, int len);
|
||||
void
|
||||
ssl_rc4_crypt(void *rc4_info, char *data, int len);
|
||||
void *
|
||||
ssl_sha1_info_create(void);
|
||||
void
|
||||
ssl_sha1_info_delete(void *sha1_info);
|
||||
void
|
||||
ssl_sha1_clear(void *sha1_info);
|
||||
void
|
||||
ssl_sha1_transform(void *sha1_info, const char *data, int len);
|
||||
void
|
||||
ssl_sha1_complete(void *sha1_info, char *data);
|
||||
void *
|
||||
ssl_md5_info_create(void);
|
||||
void
|
||||
ssl_md5_info_delete(void *md5_info);
|
||||
void
|
||||
ssl_md5_clear(void *md5_info);
|
||||
void
|
||||
ssl_md5_transform(void *md5_info, char *data, int len);
|
||||
void
|
||||
ssl_md5_complete(void *md5_info, char *data);
|
||||
void *
|
||||
ssl_des3_encrypt_info_create(const char *key, const char *ivec);
|
||||
void *
|
||||
ssl_des3_decrypt_info_create(const char *key, const char *ivec);
|
||||
void
|
||||
ssl_des3_info_delete(void *des3);
|
||||
int
|
||||
ssl_des3_encrypt(void *des3, int length, const char *in_data, char *out_data);
|
||||
int
|
||||
ssl_des3_decrypt(void *des3, int length, const char *in_data, char *out_data);
|
||||
void *
|
||||
ssl_hmac_info_create(void);
|
||||
void
|
||||
ssl_hmac_info_delete(void *hmac);
|
||||
void
|
||||
ssl_hmac_sha1_init(void *hmac, const char *data, int len);
|
||||
void
|
||||
ssl_hmac_transform(void *hmac, const char *data, int len);
|
||||
void
|
||||
ssl_hmac_complete(void *hmac, char *data, int len);
|
||||
int
|
||||
ssl_mod_exp(char *out, int out_len, const char *in, int in_len,
|
||||
const char *mod, int mod_len, const char *exp, int exp_len);
|
||||
int
|
||||
ssl_gen_key_xrdp1(int key_size_in_bits, const char *exp, int exp_len,
|
||||
char *mod, int mod_len, char *pri, int pri_len);
|
||||
|
||||
/* ssl_tls */
|
||||
struct ssl_tls
|
||||
{
|
||||
struct ssl_st *ssl; /* SSL * */
|
||||
struct ssl_ctx_st *ctx; /* SSL_CTX * */
|
||||
char *cert;
|
||||
char *key;
|
||||
struct trans *trans;
|
||||
tintptr rwo; /* wait obj */
|
||||
};
|
||||
|
||||
/* xrdp_tls.c */
|
||||
struct ssl_tls *
|
||||
ssl_tls_create(struct trans *trans, const char *key, const char *cert);
|
||||
int
|
||||
ssl_tls_accept(struct ssl_tls *self, long ssl_protocols,
|
||||
const char *tls_ciphers);
|
||||
int
|
||||
ssl_tls_disconnect(struct ssl_tls *self);
|
||||
void
|
||||
ssl_tls_delete(struct ssl_tls *self);
|
||||
int
|
||||
ssl_tls_read(struct ssl_tls *tls, char *data, int length);
|
||||
int
|
||||
ssl_tls_write(struct ssl_tls *tls, const char *data, int length);
|
||||
int
|
||||
ssl_tls_can_recv(struct ssl_tls *tls, int sck, int millis);
|
||||
const char *
|
||||
ssl_get_version(const struct ssl_st *ssl);
|
||||
const char *
|
||||
ssl_get_cipher_name(const struct ssl_st *ssl);
|
||||
int
|
||||
ssl_get_protocols_from_string(const char *str, long *ssl_protocols);
|
||||
const char *
|
||||
get_openssl_version();
|
||||
|
||||
#endif
|
@ -1,653 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2020
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* generic string handling calls
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include "config_ac.h"
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "string_calls.h"
|
||||
#include "os_calls.h"
|
||||
|
||||
unsigned int
|
||||
g_format_info_string(char *dest, unsigned int len,
|
||||
const char *format,
|
||||
const struct info_string_tag map[])
|
||||
{
|
||||
unsigned int result = 0;
|
||||
const char *copy_from; /* Data to add to output */
|
||||
unsigned int copy_len; /* Length of above */
|
||||
unsigned int skip; /* Date to skip over in format string */
|
||||
const char *p;
|
||||
const struct info_string_tag *m;
|
||||
|
||||
for ( ; *format != '\0'; format += skip)
|
||||
{
|
||||
if (*format == '%')
|
||||
{
|
||||
char ch = *(format + 1);
|
||||
if (ch == '%')
|
||||
{
|
||||
/* '%%' in format - replace with single '%' */
|
||||
copy_from = format;
|
||||
copy_len = 1;
|
||||
skip = 2;
|
||||
}
|
||||
else if (ch == '\0')
|
||||
{
|
||||
/* Percent at end of string - ignore */
|
||||
copy_from = NULL;
|
||||
copy_len = 0;
|
||||
skip = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Look up the character in the map, assuming failure */
|
||||
copy_from = NULL;
|
||||
copy_len = 0;
|
||||
skip = 2;
|
||||
|
||||
for (m = map ; m->ch != '\0' ; ++m)
|
||||
{
|
||||
if (ch == m->ch)
|
||||
{
|
||||
copy_from = m->val;
|
||||
copy_len = strlen(copy_from);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((p = strchr(format, '%')) != NULL)
|
||||
{
|
||||
/* Copy up to the next '%' */
|
||||
copy_from = format;
|
||||
copy_len = p - format;
|
||||
skip = copy_len;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Copy the rest of the format string */
|
||||
copy_from = format;
|
||||
copy_len = strlen(format);
|
||||
skip = copy_len;
|
||||
}
|
||||
|
||||
/* Update the result before any truncation */
|
||||
result += copy_len;
|
||||
|
||||
/* Do we have room in the output buffer for any more data? We
|
||||
* must always write a terminator if possible */
|
||||
if (len > 1)
|
||||
{
|
||||
if (copy_len > (len - 1))
|
||||
{
|
||||
copy_len = len - 1;
|
||||
}
|
||||
memcpy(dest, copy_from, copy_len);
|
||||
dest += copy_len;
|
||||
len -= copy_len;
|
||||
}
|
||||
}
|
||||
|
||||
/* Room for a terminator? */
|
||||
if (len > 0)
|
||||
{
|
||||
*dest = '\0';
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
const char *
|
||||
g_bool2text(int value)
|
||||
{
|
||||
return value ? "true" : "false";
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_text2bool(const char *s)
|
||||
{
|
||||
if ( (g_atoi(s) != 0) ||
|
||||
(0 == g_strcasecmp(s, "true")) ||
|
||||
(0 == g_strcasecmp(s, "on")) ||
|
||||
(0 == g_strcasecmp(s, "yes")))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns length of text */
|
||||
int
|
||||
g_strlen(const char *text)
|
||||
{
|
||||
if (text == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return strlen(text);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* locates char in text */
|
||||
const char *
|
||||
g_strchr(const char *text, int c)
|
||||
{
|
||||
if (text == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return strchr(text, c);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns dest */
|
||||
char *
|
||||
g_strcpy(char *dest, const char *src)
|
||||
{
|
||||
if (src == 0 && dest != 0)
|
||||
{
|
||||
dest[0] = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
if (dest == 0 || src == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return strcpy(dest, src);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns dest */
|
||||
char *
|
||||
g_strncpy(char *dest, const char *src, int len)
|
||||
{
|
||||
char *rv;
|
||||
|
||||
if (src == 0 && dest != 0)
|
||||
{
|
||||
dest[0] = 0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
if (dest == 0 || src == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
rv = strncpy(dest, src, len);
|
||||
dest[len] = 0;
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns dest */
|
||||
char *
|
||||
g_strcat(char *dest, const char *src)
|
||||
{
|
||||
if (dest == 0 || src == 0)
|
||||
{
|
||||
return dest;
|
||||
}
|
||||
|
||||
return strcat(dest, src);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns dest */
|
||||
char *
|
||||
g_strncat(char *dest, const char *src, int len)
|
||||
{
|
||||
if (dest == 0 || src == 0)
|
||||
{
|
||||
return dest;
|
||||
}
|
||||
|
||||
return strncat(dest, src, len);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* if in = 0, return 0 else return newly alloced copy of in */
|
||||
char *
|
||||
g_strdup(const char *in)
|
||||
{
|
||||
int len;
|
||||
char *p;
|
||||
|
||||
if (in == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
len = g_strlen(in);
|
||||
p = (char *)g_malloc(len + 1, 0);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
g_strcpy(p, in);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* if in = 0, return 0 else return newly alloced copy of input string
|
||||
* if the input string is larger than maxlen the returned string will be
|
||||
* truncated. All strings returned will include null termination*/
|
||||
char *
|
||||
g_strndup(const char *in, const unsigned int maxlen)
|
||||
{
|
||||
unsigned int len;
|
||||
char *p;
|
||||
|
||||
if (in == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
len = g_strlen(in);
|
||||
|
||||
if (len > maxlen)
|
||||
{
|
||||
len = maxlen - 1;
|
||||
}
|
||||
|
||||
p = (char *)g_malloc(len + 2, 0);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
g_strncpy(p, in, len + 1);
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_strcmp(const char *c1, const char *c2)
|
||||
{
|
||||
return strcmp(c1, c2);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_strncmp(const char *c1, const char *c2, int len)
|
||||
{
|
||||
return strncmp(c1, c2, len);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* compare up to delim */
|
||||
int
|
||||
g_strncmp_d(const char *s1, const char *s2, const char delim, int n)
|
||||
{
|
||||
char c1;
|
||||
char c2;
|
||||
|
||||
c1 = 0;
|
||||
c2 = 0;
|
||||
while (n > 0)
|
||||
{
|
||||
c1 = *(s1++);
|
||||
c2 = *(s2++);
|
||||
if ((c1 == 0) || (c1 != c2) || (c1 == delim) || (c2 == delim))
|
||||
{
|
||||
return c1 - c2;
|
||||
}
|
||||
n--;
|
||||
}
|
||||
return c1 - c2;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_strcasecmp(const char *c1, const char *c2)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return stricmp(c1, c2);
|
||||
#else
|
||||
return strcasecmp(c1, c2);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_strncasecmp(const char *c1, const char *c2, int len)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return strnicmp(c1, c2, len);
|
||||
#else
|
||||
return strncasecmp(c1, c2, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_atoi(const char *str)
|
||||
{
|
||||
if (str == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return atoi(str);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_htoi(char *str)
|
||||
{
|
||||
int len;
|
||||
int index;
|
||||
int rv;
|
||||
int val;
|
||||
int shift;
|
||||
|
||||
rv = 0;
|
||||
len = strlen(str);
|
||||
index = len - 1;
|
||||
shift = 0;
|
||||
|
||||
while (index >= 0)
|
||||
{
|
||||
val = 0;
|
||||
|
||||
switch (str[index])
|
||||
{
|
||||
case '1':
|
||||
val = 1;
|
||||
break;
|
||||
case '2':
|
||||
val = 2;
|
||||
break;
|
||||
case '3':
|
||||
val = 3;
|
||||
break;
|
||||
case '4':
|
||||
val = 4;
|
||||
break;
|
||||
case '5':
|
||||
val = 5;
|
||||
break;
|
||||
case '6':
|
||||
val = 6;
|
||||
break;
|
||||
case '7':
|
||||
val = 7;
|
||||
break;
|
||||
case '8':
|
||||
val = 8;
|
||||
break;
|
||||
case '9':
|
||||
val = 9;
|
||||
break;
|
||||
case 'a':
|
||||
case 'A':
|
||||
val = 10;
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
val = 11;
|
||||
break;
|
||||
case 'c':
|
||||
case 'C':
|
||||
val = 12;
|
||||
break;
|
||||
case 'd':
|
||||
case 'D':
|
||||
val = 13;
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
val = 14;
|
||||
break;
|
||||
case 'f':
|
||||
case 'F':
|
||||
val = 15;
|
||||
break;
|
||||
}
|
||||
|
||||
rv = rv | (val << shift);
|
||||
index--;
|
||||
shift += 4;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns number of bytes copied into out_str */
|
||||
int
|
||||
g_bytes_to_hexstr(const void *bytes, int num_bytes, char *out_str,
|
||||
int bytes_out_str)
|
||||
{
|
||||
int rv;
|
||||
int index;
|
||||
char *lout_str;
|
||||
const tui8 *lbytes;
|
||||
|
||||
rv = 0;
|
||||
lbytes = (const tui8 *) bytes;
|
||||
lout_str = out_str;
|
||||
for (index = 0; index < num_bytes; index++)
|
||||
{
|
||||
if (bytes_out_str < 3)
|
||||
{
|
||||
break;
|
||||
}
|
||||
g_snprintf(lout_str, bytes_out_str, "%2.2x", lbytes[index]);
|
||||
lout_str += 2;
|
||||
bytes_out_str -= 2;
|
||||
rv += 2;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_pos(const char *str, const char *to_find)
|
||||
{
|
||||
const char *pp;
|
||||
|
||||
pp = strstr(str, to_find);
|
||||
|
||||
if (pp == 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return (pp - str);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_mbstowcs(twchar *dest, const char *src, int n)
|
||||
{
|
||||
wchar_t *ldest;
|
||||
int rv;
|
||||
|
||||
ldest = (wchar_t *)dest;
|
||||
rv = mbstowcs(ldest, src, n);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
g_wcstombs(char *dest, const twchar *src, int n)
|
||||
{
|
||||
const wchar_t *lsrc;
|
||||
int rv;
|
||||
|
||||
lsrc = (const wchar_t *)src;
|
||||
rv = wcstombs(dest, lsrc, n);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
/* trim spaces and tabs, anything <= space */
|
||||
/* trim_flags 1 trim left, 2 trim right, 3 trim both, 4 trim through */
|
||||
/* this will always shorten the string or not change it */
|
||||
int
|
||||
g_strtrim(char *str, int trim_flags)
|
||||
{
|
||||
int index;
|
||||
int len;
|
||||
int text1_index;
|
||||
int got_char;
|
||||
wchar_t *text;
|
||||
wchar_t *text1;
|
||||
|
||||
len = mbstowcs(0, str, 0);
|
||||
|
||||
if (len < 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((trim_flags < 1) || (trim_flags > 4))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
text = (wchar_t *)malloc(len * sizeof(wchar_t) + 8);
|
||||
text1 = (wchar_t *)malloc(len * sizeof(wchar_t) + 8);
|
||||
if (text == NULL || text1 == NULL)
|
||||
{
|
||||
free(text);
|
||||
free(text1);
|
||||
return 1;
|
||||
}
|
||||
text1_index = 0;
|
||||
mbstowcs(text, str, len + 1);
|
||||
|
||||
switch (trim_flags)
|
||||
{
|
||||
case 4: /* trim through */
|
||||
|
||||
for (index = 0; index < len; index++)
|
||||
{
|
||||
if (text[index] > 32)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
}
|
||||
}
|
||||
|
||||
text1[text1_index] = 0;
|
||||
break;
|
||||
case 3: /* trim both */
|
||||
got_char = 0;
|
||||
|
||||
for (index = 0; index < len; index++)
|
||||
{
|
||||
if (got_char)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (text[index] > 32)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
got_char = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
text1[text1_index] = 0;
|
||||
len = text1_index;
|
||||
|
||||
/* trim right */
|
||||
for (index = len - 1; index >= 0; index--)
|
||||
{
|
||||
if (text1[index] > 32)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
text1_index = index + 1;
|
||||
text1[text1_index] = 0;
|
||||
break;
|
||||
case 2: /* trim right */
|
||||
|
||||
/* copy it */
|
||||
for (index = 0; index < len; index++)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
}
|
||||
|
||||
/* trim right */
|
||||
for (index = len - 1; index >= 0; index--)
|
||||
{
|
||||
if (text1[index] > 32)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
text1_index = index + 1;
|
||||
text1[text1_index] = 0;
|
||||
break;
|
||||
case 1: /* trim left */
|
||||
got_char = 0;
|
||||
|
||||
for (index = 0; index < len; index++)
|
||||
{
|
||||
if (got_char)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (text[index] > 32)
|
||||
{
|
||||
text1[text1_index] = text[index];
|
||||
text1_index++;
|
||||
got_char = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
text1[text1_index] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
wcstombs(str, text1, text1_index + 1);
|
||||
free(text);
|
||||
free(text1);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,104 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2020
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* generic string handling calls
|
||||
*/
|
||||
|
||||
#if !defined(STRING_CALLS_H)
|
||||
#define STRING_CALLS_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
/**
|
||||
* Map a character to a string value
|
||||
*
|
||||
* This structure is used by g_format_info_string() to specify the
|
||||
* string which chould be output for %'ch', where ch is a character
|
||||
*/
|
||||
struct info_string_tag
|
||||
{
|
||||
char ch;
|
||||
const char *val;
|
||||
};
|
||||
|
||||
#define INFO_STRING_END_OF_LIST { '\0', NULL }
|
||||
|
||||
/**
|
||||
* Processes a format string for general info
|
||||
*
|
||||
* @param[out] dest Destination buffer
|
||||
* @param[in] len Length of buffer, including space for a terminator
|
||||
* @param[in] format Format string to process
|
||||
* @param[in] map Array of struct info_string_tag.
|
||||
*
|
||||
* Where a '%<ch>' is encountered in the format string, the map is scanned
|
||||
* and the corresponding string is copied instead of '%<ch>'.
|
||||
*
|
||||
* '%%' is always replaced with a single '%' in the output. %<ch> strings
|
||||
* not present in the map are ignored.
|
||||
*
|
||||
* The map is terminated with INFO_STRING_END_OF_LIST
|
||||
*
|
||||
* Caller can check for buffer truncation by comparing the result with
|
||||
* the buffer length (as in snprintf())
|
||||
*/
|
||||
unsigned int
|
||||
g_format_info_string(char *dest, unsigned int len,
|
||||
const char *format,
|
||||
const struct info_string_tag map[]);
|
||||
|
||||
|
||||
/**
|
||||
* Converts a boolean to a string for output
|
||||
*
|
||||
* @param[in] value Value to convert
|
||||
* @return String representation
|
||||
*/
|
||||
const char *
|
||||
g_bool2text(int value);
|
||||
|
||||
/**
|
||||
* Converts a string to a boolean value
|
||||
*
|
||||
* @param[in] s String to convert
|
||||
* @return machine representation
|
||||
*/
|
||||
int
|
||||
g_text2bool(const char *s);
|
||||
|
||||
int g_strlen(const char *text);
|
||||
const char *g_strchr(const char *text, int c);
|
||||
char *g_strcpy(char *dest, const char *src);
|
||||
char *g_strncpy(char *dest, const char *src, int len);
|
||||
char *g_strcat(char *dest, const char *src);
|
||||
char *g_strncat(char *dest, const char *src, int len);
|
||||
char *g_strdup(const char *in);
|
||||
char *g_strndup(const char *in, const unsigned int maxlen);
|
||||
int g_strcmp(const char *c1, const char *c2);
|
||||
int g_strncmp(const char *c1, const char *c2, int len);
|
||||
int g_strncmp_d(const char *c1, const char *c2, const char delim, int len);
|
||||
int g_strcasecmp(const char *c1, const char *c2);
|
||||
int g_strncasecmp(const char *c1, const char *c2, int len);
|
||||
int g_atoi(const char *str);
|
||||
int g_htoi(char *str);
|
||||
int g_bytes_to_hexstr(const void *bytes, int num_bytes, char *out_str,
|
||||
int bytes_out_str);
|
||||
int g_pos(const char *str, const char *to_find);
|
||||
int g_mbstowcs(twchar *dest, const char *src, int n);
|
||||
int g_wcstombs(char *dest, const twchar *src, int n);
|
||||
int g_strtrim(char *str, int trim_flags);
|
||||
#endif
|
@ -1,229 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* thread calls
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#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>
|
||||
#endif
|
||||
#include "arch.h"
|
||||
#include "thread_calls.h"
|
||||
#include "os_calls.h"
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
#if defined(_WIN32)
|
||||
int
|
||||
tc_thread_create(unsigned long (__stdcall *start_routine)(void *), void *arg)
|
||||
{
|
||||
int rv = 0;
|
||||
DWORD thread_id = 0;
|
||||
HANDLE thread = (HANDLE)0;
|
||||
|
||||
/* CreateThread returns handle or zero on error */
|
||||
thread = CreateThread(0, 0, start_routine, arg, 0, &thread_id);
|
||||
rv = !thread;
|
||||
CloseHandle(thread);
|
||||
return rv;
|
||||
}
|
||||
#else
|
||||
int
|
||||
tc_thread_create(void * (* start_routine)(void *), void *arg)
|
||||
{
|
||||
int rv = 0;
|
||||
pthread_t thread = (pthread_t)0;
|
||||
|
||||
g_memset(&thread, 0x00, sizeof(pthread_t));
|
||||
|
||||
/* pthread_create returns error */
|
||||
rv = pthread_create(&thread, 0, start_routine, arg);
|
||||
|
||||
if (!rv)
|
||||
{
|
||||
rv = pthread_detach(thread);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
tbus
|
||||
tc_get_threadid(void)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return (tbus)GetCurrentThreadId();
|
||||
#else
|
||||
return (tbus)pthread_self();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* returns boolean */
|
||||
int
|
||||
tc_threadid_equal(tbus tid1, tbus tid2)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return tid1 == tid2;
|
||||
#else
|
||||
return pthread_equal((pthread_t)tid1, (pthread_t)tid2);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
tbus
|
||||
tc_mutex_create(void)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
return (tbus)CreateMutex(0, 0, 0);
|
||||
#else
|
||||
pthread_mutex_t *lmutex;
|
||||
|
||||
lmutex = (pthread_mutex_t *)g_malloc(sizeof(pthread_mutex_t), 0);
|
||||
pthread_mutex_init(lmutex, 0);
|
||||
return (tbus)lmutex;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
tc_mutex_delete(tbus mutex)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
CloseHandle((HANDLE)mutex);
|
||||
#else
|
||||
pthread_mutex_t *lmutex;
|
||||
|
||||
lmutex = (pthread_mutex_t *)mutex;
|
||||
pthread_mutex_destroy(lmutex);
|
||||
g_free(lmutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
tc_mutex_lock(tbus mutex)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
WaitForSingleObject((HANDLE)mutex, INFINITE);
|
||||
return 0;
|
||||
#else
|
||||
pthread_mutex_lock((pthread_mutex_t *)mutex);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
tc_mutex_unlock(tbus mutex)
|
||||
{
|
||||
int rv = 0;
|
||||
#if defined(_WIN32)
|
||||
ReleaseMutex((HANDLE)mutex);
|
||||
#else
|
||||
|
||||
if (mutex != 0)
|
||||
{
|
||||
rv = pthread_mutex_unlock((pthread_mutex_t *)mutex);
|
||||
}
|
||||
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
tbus
|
||||
tc_sem_create(int init_count)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
HANDLE sem;
|
||||
|
||||
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;
|
||||
|
||||
sem = (sem_t *)g_malloc(sizeof(sem_t), 0);
|
||||
sem_init(sem, 0, init_count);
|
||||
return (tbus)sem;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
tc_sem_delete(tbus sem)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
CloseHandle((HANDLE)sem);
|
||||
#elif defined(__APPLE__)
|
||||
dispatch_release((dispatch_semaphore_t)sem);
|
||||
#else
|
||||
sem_t *lsem;
|
||||
|
||||
lsem = (sem_t *)sem;
|
||||
sem_destroy(lsem);
|
||||
g_free(lsem);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
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;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
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;
|
||||
#endif
|
||||
}
|
@ -1,49 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* thread calls
|
||||
*/
|
||||
|
||||
#if !defined(THREAD_CALLS_H)
|
||||
#define THREAD_CALLS_H
|
||||
|
||||
#include "arch.h"
|
||||
|
||||
int
|
||||
tc_thread_create(THREAD_RV (THREAD_CC * start_routine)(void*), void* arg);
|
||||
tbus
|
||||
tc_get_threadid(void);
|
||||
int
|
||||
tc_threadid_equal(tbus tid1, tbus tid2);
|
||||
tbus
|
||||
tc_mutex_create(void);
|
||||
void
|
||||
tc_mutex_delete(tbus mutex);
|
||||
int
|
||||
tc_mutex_lock(tbus mutex);
|
||||
int
|
||||
tc_mutex_unlock(tbus mutex);
|
||||
tbus
|
||||
tc_sem_create(int init_count);
|
||||
void
|
||||
tc_sem_delete(tbus sem);
|
||||
int
|
||||
tc_sem_dec(tbus sem);
|
||||
int
|
||||
tc_sem_inc(tbus sem);
|
||||
|
||||
#endif
|
1015
common/trans.c
1015
common/trans.c
File diff suppressed because it is too large
Load Diff
166
common/trans.h
166
common/trans.h
@ -1,166 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* generic transport
|
||||
*/
|
||||
|
||||
#if !defined(TRANS_H)
|
||||
#define TRANS_H
|
||||
|
||||
#include "arch.h"
|
||||
#include "parse.h"
|
||||
|
||||
#define TRANS_MODE_TCP 1 /* tcp6 if defined, else tcp4 */
|
||||
#define TRANS_MODE_UNIX 2
|
||||
#define TRANS_MODE_VSOCK 3
|
||||
#define TRANS_MODE_TCP4 4 /* tcp4 only */
|
||||
#define TRANS_MODE_TCP6 6 /* tcp6 only */
|
||||
|
||||
#define TRANS_TYPE_LISTENER 1
|
||||
#define TRANS_TYPE_SERVER 2
|
||||
#define TRANS_TYPE_CLIENT 3
|
||||
|
||||
#define TRANS_STATUS_DOWN 0
|
||||
#define TRANS_STATUS_UP 1
|
||||
|
||||
struct trans; /* forward declaration */
|
||||
struct xrdp_tls;
|
||||
|
||||
typedef int (*ttrans_data_in)(struct trans* self);
|
||||
typedef int (*ttrans_conn_in)(struct trans* self,
|
||||
struct trans* new_self);
|
||||
typedef int (*tis_term)(void);
|
||||
typedef int (*trans_recv_proc) (struct trans *self, char *ptr, int len);
|
||||
typedef int (*trans_send_proc) (struct trans *self, const char *data, int len);
|
||||
typedef int (*trans_can_recv_proc) (struct trans *self, int sck, int millis);
|
||||
|
||||
/* optional source info */
|
||||
|
||||
enum xrdp_source
|
||||
{
|
||||
XRDP_SOURCE_NONE = 0,
|
||||
XRDP_SOURCE_CLIENT,
|
||||
XRDP_SOURCE_SESMAN,
|
||||
XRDP_SOURCE_CHANSRV,
|
||||
XRDP_SOURCE_MOD,
|
||||
|
||||
XRDP_SOURCE_MAX_COUNT
|
||||
};
|
||||
|
||||
/*
|
||||
* @brief Provide flow control mechanism for (primarily) xrdp
|
||||
*
|
||||
* There is one of these data structures per-program.
|
||||
*
|
||||
* While input is being read from a 'struct trans' and processed, the
|
||||
* cur_source member is set to the my_source member from the transport.
|
||||
* During this processing, trans_write_copy() may be called to send output
|
||||
* on another struct trans. If this happens, and the ouput needs to be
|
||||
* buffered, trans_write_copy() can add the number of bytes generated by
|
||||
* the input trans to the source field for the cur_source. This allows us to
|
||||
* see how much output has been buffered for each input source.
|
||||
*
|
||||
* When the program assembles 'struct trans' objects to scan for input
|
||||
* (normally in trans_get_wait_objs()), it is able to see how much buffered
|
||||
* output is registered for each input. Inputs which have too much buffered
|
||||
* output owing are skipped, and not considered for input.
|
||||
*
|
||||
* This provides a simple means of providing back-pressure on an input
|
||||
* where the data it is providing is being processed and then sent out on
|
||||
* a much slower link.
|
||||
*/
|
||||
struct source_info
|
||||
{
|
||||
enum xrdp_source cur_source;
|
||||
int source[XRDP_SOURCE_MAX_COUNT];
|
||||
};
|
||||
|
||||
struct trans
|
||||
{
|
||||
tbus sck; /* socket handle */
|
||||
int mode; /* 1 tcp, 2 unix socket, 3 vsock */
|
||||
int status;
|
||||
int type1; /* 1 listener 2 server 3 client */
|
||||
ttrans_data_in trans_data_in;
|
||||
ttrans_conn_in trans_conn_in;
|
||||
void* callback_data;
|
||||
int header_size;
|
||||
struct stream* in_s;
|
||||
struct stream* out_s;
|
||||
char* listen_filename;
|
||||
tis_term is_term; /* used to test for exit */
|
||||
struct stream* wait_s;
|
||||
char addr[256];
|
||||
char port[256];
|
||||
int no_stream_init_on_data_in;
|
||||
int extra_flags; /* user defined */
|
||||
struct ssl_tls *tls;
|
||||
const char *ssl_protocol; /* e.g. TLSv1, TLSv1.1, TLSv1.2, unknown */
|
||||
const char *cipher_name; /* e.g. AES256-GCM-SHA384 */
|
||||
trans_recv_proc trans_recv;
|
||||
trans_send_proc trans_send;
|
||||
trans_can_recv_proc trans_can_recv;
|
||||
struct source_info *si;
|
||||
enum xrdp_source my_source;
|
||||
};
|
||||
|
||||
struct trans*
|
||||
trans_create(int mode, int in_size, int out_size);
|
||||
void
|
||||
trans_delete(struct trans* self);
|
||||
void
|
||||
trans_delete_from_child(struct trans* self);
|
||||
int
|
||||
trans_get_wait_objs(struct trans* self, tbus* objs, int* count);
|
||||
int
|
||||
trans_get_wait_objs_rw(struct trans *self,
|
||||
tbus *robjs, int *rcount,
|
||||
tbus *wobjs, int *wcount, int *timeout);
|
||||
int
|
||||
trans_check_wait_objs(struct trans* self);
|
||||
int
|
||||
trans_force_read_s(struct trans* self, struct stream* in_s, int size);
|
||||
int
|
||||
trans_force_write_s(struct trans* self, struct stream* out_s);
|
||||
int
|
||||
trans_force_read(struct trans* self, int size);
|
||||
int
|
||||
trans_force_write(struct trans* self);
|
||||
int
|
||||
trans_write_copy(struct trans* self);
|
||||
int
|
||||
trans_write_copy_s(struct trans* self, struct stream* out_s);
|
||||
int
|
||||
trans_connect(struct trans* self, const char* server, const char* port,
|
||||
int timeout);
|
||||
int
|
||||
trans_listen_address(struct trans* self, char* port, const char* address);
|
||||
int
|
||||
trans_listen(struct trans* self, char* port);
|
||||
struct stream*
|
||||
trans_get_in_s(struct trans* self);
|
||||
struct stream*
|
||||
trans_get_out_s(struct trans* self, int size);
|
||||
int
|
||||
trans_set_tls_mode(struct trans *self, const char *key, const char *cert,
|
||||
long ssl_protocols, const char *tls_ciphers);
|
||||
int
|
||||
trans_shutdown_tls_mode(struct trans *self);
|
||||
int
|
||||
trans_tcp_force_read_s(struct trans *self, struct stream *in_s, int size);
|
||||
|
||||
#endif
|
@ -1,167 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* xrdp / xserver info / caps
|
||||
*/
|
||||
|
||||
#include "xrdp_constants.h"
|
||||
|
||||
#if !defined(XRDP_CLIENT_INFO_H)
|
||||
#define XRDP_CLIENT_INFO_H
|
||||
|
||||
struct monitor_info
|
||||
{
|
||||
int left;
|
||||
int top;
|
||||
int right;
|
||||
int bottom;
|
||||
int is_primary;
|
||||
};
|
||||
|
||||
struct xrdp_client_info
|
||||
{
|
||||
int size; /* bytes for this structure */
|
||||
int bpp;
|
||||
int width;
|
||||
int height;
|
||||
/* bitmap cache info */
|
||||
int cache1_entries;
|
||||
int cache1_size;
|
||||
int cache2_entries;
|
||||
int cache2_size;
|
||||
int cache3_entries;
|
||||
int cache3_size;
|
||||
int bitmap_cache_persist_enable; /* 0 or 2 */
|
||||
int bitmap_cache_version; /* ored 1 = original version, 2 = v2, 4 = v3 */
|
||||
/* pointer info */
|
||||
int pointer_cache_entries;
|
||||
/* other */
|
||||
int use_bitmap_comp;
|
||||
int use_bitmap_cache;
|
||||
int op1; /* use smaller bitmap header, non cache */
|
||||
int op2; /* use smaller bitmap header in bitmap cache */
|
||||
int desktop_cache;
|
||||
int use_compact_packets; /* rdp5 smaller packets */
|
||||
char hostname[32];
|
||||
int build;
|
||||
int keylayout;
|
||||
char username[INFO_CLIENT_MAX_CB_LEN];
|
||||
char password[INFO_CLIENT_MAX_CB_LEN];
|
||||
char domain[INFO_CLIENT_MAX_CB_LEN];
|
||||
char program[INFO_CLIENT_MAX_CB_LEN];
|
||||
char directory[INFO_CLIENT_MAX_CB_LEN];
|
||||
int rdp_compression;
|
||||
int rdp_autologin;
|
||||
int crypt_level; /* 1, 2, 3 = low, medium, high */
|
||||
int channels_allowed; /* 0 = no channels 1 = channels */
|
||||
int sound_code; /* 1 = leave sound at server */
|
||||
int is_mce;
|
||||
int rdp5_performanceflags;
|
||||
int brush_cache_code; /* 0 = no cache 1 = 8x8 standard cache
|
||||
2 = arbitrary dimensions */
|
||||
char client_ip[256];
|
||||
int max_bpp;
|
||||
int jpeg; /* non standard bitmap cache v2 cap */
|
||||
int offscreen_support_level;
|
||||
int offscreen_cache_size;
|
||||
int offscreen_cache_entries;
|
||||
int rfx;
|
||||
|
||||
/* CAPSETTYPE_RAIL */
|
||||
int rail_support_level;
|
||||
/* CAPSETTYPE_WINDOW */
|
||||
int wnd_support_level;
|
||||
int wnd_num_icon_caches;
|
||||
int wnd_num_icon_cache_entries;
|
||||
/* codecs */
|
||||
int rfx_codec_id;
|
||||
int rfx_prop_len;
|
||||
char rfx_prop[64];
|
||||
int ns_codec_id;
|
||||
int ns_prop_len;
|
||||
char ns_prop[64];
|
||||
int jpeg_codec_id;
|
||||
int jpeg_prop_len;
|
||||
char jpeg_prop[64];
|
||||
int v3_codec_id;
|
||||
int rfx_min_pixel;
|
||||
char orders[32];
|
||||
int order_flags_ex;
|
||||
int use_bulk_comp;
|
||||
int pointer_flags; /* 0 color, 1 new, 2 no new */
|
||||
int use_fast_path;
|
||||
int require_credentials; /* when true, credentials *must* be passed on cmd line */
|
||||
char client_addr[256];
|
||||
char client_port[256];
|
||||
|
||||
int security_layer; /* 0 = rdp, 1 = tls , 2 = hybrid */
|
||||
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;
|
||||
|
||||
int png_codec_id;
|
||||
int png_prop_len;
|
||||
char png_prop[64];
|
||||
int vendor_flags[4];
|
||||
int mcs_connection_type;
|
||||
int mcs_early_capability_flags;
|
||||
|
||||
int max_fastpath_frag_bytes;
|
||||
int capture_code;
|
||||
int capture_format;
|
||||
|
||||
char certificate[1024];
|
||||
char key_file[1024];
|
||||
|
||||
/* X11 keyboard layout - inferred from keyboard type/subtype */
|
||||
char model[16];
|
||||
char layout[16];
|
||||
char variant[16];
|
||||
char options[256];
|
||||
|
||||
/* !!!!!!!!!!!!!!!!!!!!!!!!!! */
|
||||
/* NO CHANGES ABOVE THIS LINE */
|
||||
/* !!!!!!!!!!!!!!!!!!!!!!!!!! */
|
||||
|
||||
/* codec */
|
||||
int h264_codec_id;
|
||||
int h264_prop_len;
|
||||
char h264_prop[64];
|
||||
|
||||
int use_frame_acks;
|
||||
int max_unacknowledged_frame_count;
|
||||
|
||||
long ssl_protocols;
|
||||
char *tls_ciphers;
|
||||
|
||||
int client_os_major;
|
||||
int client_os_minor;
|
||||
|
||||
int no_orders_supported;
|
||||
int use_cache_glyph_v2;
|
||||
int rail_enable;
|
||||
int suppress_output;
|
||||
|
||||
int enable_token_login;
|
||||
char domain_user_separator[16];
|
||||
};
|
||||
|
||||
#endif
|
@ -1,267 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
* Miscellaneous protocol constants
|
||||
*
|
||||
* Copyright (C) Matthew Chapman 1999-2008
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
* Copyright (C) Kevin Zhou 2012
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#if !defined(XRDP_CONSTANTS_H)
|
||||
#define XRDP_CONSTANTS_H
|
||||
|
||||
/* TCP port for Remote Desktop Protocol */
|
||||
#define TCP_PORT_RDP 3389
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* xrdp constants
|
||||
*
|
||||
* Constants defined in publically available Microsoft documents are not
|
||||
* stored here, but are stored in the include files ms-*.h, where the name
|
||||
* of the file is the name of the document defining the constant.
|
||||
*
|
||||
* So for example, NTSTATUS values found in [MS-ERREF] are found in
|
||||
* ms-erref.h
|
||||
******************************************************************************/
|
||||
|
||||
#define INFO_CLIENT_NAME_BYTES 32
|
||||
/**
|
||||
* Maximum length of a string including the mandatory null terminator
|
||||
* [MS-RDPBCGR] TS_INFO_PACKET(2.2.1.11.1.1)
|
||||
*/
|
||||
#define INFO_CLIENT_MAX_CB_LEN 512
|
||||
|
||||
#define XRDP_MAX_BITMAP_CACHE_ID 3
|
||||
#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
|
||||
|
||||
/*
|
||||
* Constants come from ITU-T Recommendations
|
||||
*/
|
||||
|
||||
#define ISO_PDU_CR 0xE0 /* X.224 Connection Request */
|
||||
#define ISO_PDU_CC 0xD0 /* X.224 Connection Confirm */
|
||||
#define ISO_PDU_DR 0x80 /* Disconnect Request */
|
||||
#define ISO_PDU_DT 0xF0 /* Data */
|
||||
#define ISO_PDU_ER 0x70 /* Error */
|
||||
|
||||
/* MCS PDU codes (T.125) */
|
||||
#define MCS_EDRQ 1 /* Erect Domain Request */
|
||||
#define MCS_DPUM 8 /* Disconnect Provider Ultimatum */
|
||||
#define MCS_AURQ 10 /* Attach User Request */
|
||||
#define MCS_AUCF 11 /* Attach User Confirm */
|
||||
#define MCS_CJRQ 14 /* Channel Join Request */
|
||||
#define MCS_CJCF 15 /* Channel Join Confirm */
|
||||
#define MCS_SDRQ 25 /* Send Data Request */
|
||||
#define MCS_SDIN 26 /* Send Data Indication */
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* Constants come from other Microsoft products
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Sound format constants - see also RFC 2361 and MS-RDPAI */
|
||||
#define WAVE_FORMAT_PCM 0x0001
|
||||
#define WAVE_FORMAT_ADPCM 0x0002
|
||||
#define WAVE_FORMAT_ALAW 0x0006
|
||||
#define WAVE_FORMAT_MULAW 0x0007
|
||||
#define WAVE_FORMAT_MPEGLAYER3 0x0055
|
||||
#define WAVE_FORMAT_OPUS 0x0069
|
||||
#define WAVE_FORMAT_AAC 0xA106
|
||||
|
||||
/* https://technet.microsoft.com/ja-jp/library/aa387685.aspx */
|
||||
#define SEC_RSA_MAGIC 0x31415352 /* RSA1 */
|
||||
|
||||
/* NTSTATUS Values (MS-ERREF 2.3.1) */
|
||||
/* used for RDPDR */
|
||||
/*
|
||||
* not yet sorted out
|
||||
*/
|
||||
|
||||
#define MCS_CONNECT_INITIAL 0x7f65
|
||||
#define MCS_CONNECT_RESPONSE 0x7f66
|
||||
|
||||
#define BER_TAG_BOOLEAN 1
|
||||
#define BER_TAG_INTEGER 2
|
||||
#define BER_TAG_OCTET_STRING 4
|
||||
#define BER_TAG_RESULT 10
|
||||
#define MCS_TAG_DOMAIN_PARAMS 0x30
|
||||
|
||||
#define MCS_GLOBAL_CHANNEL 1003
|
||||
#define MCS_USERCHANNEL_BASE 1001
|
||||
|
||||
/* RDP secure transport constants */
|
||||
/* not used anywhere */
|
||||
#define SEC_RANDOM_SIZE 32
|
||||
#define SEC_MODULUS_SIZE 64
|
||||
#define SEC_PADDING_SIZE 8
|
||||
#define SEC_EXPONENT_SIZE 4
|
||||
|
||||
/* RDP licensing constants */
|
||||
#define LICENCE_TOKEN_SIZE 10
|
||||
#define LICENCE_HWID_SIZE 20
|
||||
#define LICENCE_SIGNATURE_SIZE 16
|
||||
|
||||
|
||||
/* See T.128 */
|
||||
/* not used anywhere */
|
||||
#define RDP_KEYPRESS 0
|
||||
#define RDP_KEYRELEASE (KBD_FLAG_DOWN | KBD_FLAG_UP)
|
||||
|
||||
/* Raster operation masks */
|
||||
#define ROP2_S(rop3) (rop3 & 0xf)
|
||||
#define ROP2_P(rop3) ((rop3 & 0x3) | ((rop3 & 0x30) >> 2))
|
||||
|
||||
#define ROP2_COPY 0xc
|
||||
#define ROP2_XOR 0x6
|
||||
#define ROP2_AND 0x8
|
||||
#define ROP2_NXOR 0x9
|
||||
#define ROP2_OR 0xe
|
||||
|
||||
#define MIX_TRANSPARENT 0
|
||||
#define MIX_OPAQUE 1
|
||||
|
||||
#define TEXT2_VERTICAL 0x04
|
||||
#define TEXT2_IMPLICIT_X 0x20
|
||||
|
||||
/* RDP bitmap cache (version 2) constants */
|
||||
#define BMPCACHE2_C0_CELLS 0x78
|
||||
#define BMPCACHE2_C1_CELLS 0x78
|
||||
#define BMPCACHE2_C2_CELLS 0x150
|
||||
#define BMPCACHE2_NUM_PSTCELLS 0x9f6
|
||||
|
||||
#define PDU_FLAG_FIRST 0x01
|
||||
#define PDU_FLAG_LAST 0x02
|
||||
|
||||
#define RDP_SOURCE "MSTSC"
|
||||
|
||||
/* Keymap flags */
|
||||
#define MapRightShiftMask (1 << 0)
|
||||
#define MapLeftShiftMask (1 << 1)
|
||||
#define MapShiftMask (MapRightShiftMask | MapLeftShiftMask)
|
||||
|
||||
#define MapRightAltMask (1 << 2)
|
||||
#define MapLeftAltMask (1 << 3)
|
||||
#define MapAltGrMask MapRightAltMask
|
||||
|
||||
#define MapRightCtrlMask (1 << 4)
|
||||
#define MapLeftCtrlMask (1 << 5)
|
||||
#define MapCtrlMask (MapRightCtrlMask | MapLeftCtrlMask)
|
||||
|
||||
#define MapRightWinMask (1 << 6)
|
||||
#define MapLeftWinMask (1 << 7)
|
||||
#define MapWinMask (MapRightWinMask | MapLeftWinMask)
|
||||
|
||||
#define MapNumLockMask (1 << 8)
|
||||
#define MapCapsLockMask (1 << 9)
|
||||
|
||||
#define MapLocalStateMask (1 << 10)
|
||||
|
||||
#define MapInhibitMask (1 << 11)
|
||||
|
||||
#define MASK_ADD_BITS(var, mask) (var |= mask)
|
||||
#define MASK_REMOVE_BITS(var, mask) (var &= ~mask)
|
||||
#define MASK_HAS_BITS(var, mask) ((var & mask)>0)
|
||||
#define MASK_CHANGE_BIT(var, mask, active) \
|
||||
(var = ((var & ~mask) | (active ? mask : 0)))
|
||||
|
||||
/* Clipboard constants, "borrowed" from GCC system headers in
|
||||
the w32 cross compiler */
|
||||
|
||||
#define CF_TEXT 1
|
||||
#define CF_BITMAP 2
|
||||
#define CF_METAFILEPICT 3
|
||||
#define CF_SYLK 4
|
||||
#define CF_DIF 5
|
||||
#define CF_TIFF 6
|
||||
#define CF_OEMTEXT 7
|
||||
#define CF_DIB 8
|
||||
#define CF_PALETTE 9
|
||||
#define CF_PENDATA 10
|
||||
#define CF_RIFF 11
|
||||
#define CF_WAVE 12
|
||||
#define CF_UNICODETEXT 13
|
||||
#define CF_ENHMETAFILE 14
|
||||
#define CF_HDROP 15
|
||||
#define CF_LOCALE 16
|
||||
#define CF_MAX 17
|
||||
#define CF_OWNERDISPLAY 128
|
||||
#define CF_DSPTEXT 129
|
||||
#define CF_DSPBITMAP 130
|
||||
#define CF_DSPMETAFILEPICT 131
|
||||
#define CF_DSPENHMETAFILE 142
|
||||
#define CF_PRIVATEFIRST 512
|
||||
#define CF_PRIVATELAST 767
|
||||
#define CF_GDIOBJFIRST 768
|
||||
#define CF_GDIOBJLAST 1023
|
||||
|
||||
/* RDPDR constants */
|
||||
#define RDPDR_MAX_DEVICES 0x10
|
||||
|
||||
/* drawable types */
|
||||
#define WND_TYPE_BITMAP 0
|
||||
#define WND_TYPE_WND 1
|
||||
#define WND_TYPE_SCREEN 2
|
||||
#define WND_TYPE_BUTTON 3
|
||||
#define WND_TYPE_IMAGE 4
|
||||
#define WND_TYPE_EDIT 5
|
||||
#define WND_TYPE_LABEL 6
|
||||
#define WND_TYPE_COMBO 7
|
||||
#define WND_TYPE_SPECIAL 8
|
||||
#define WND_TYPE_LISTBOX 9
|
||||
#define WND_TYPE_OFFSCREEN 10
|
||||
|
||||
/* button states */
|
||||
#define BUTTON_STATE_UP 0
|
||||
#define BUTTON_STATE_DOWN 1
|
||||
|
||||
/* messages */
|
||||
#define WM_PAINT 3
|
||||
#define WM_KEYDOWN 15
|
||||
#define WM_KEYUP 16
|
||||
#define WM_MOUSEMOVE 100
|
||||
#define WM_LBUTTONUP 101
|
||||
#define WM_LBUTTONDOWN 102
|
||||
#define WM_RBUTTONUP 103
|
||||
#define WM_RBUTTONDOWN 104
|
||||
#define WM_BUTTON3UP 105
|
||||
#define WM_BUTTON3DOWN 106
|
||||
#define WM_BUTTON4UP 107
|
||||
#define WM_BUTTON4DOWN 108
|
||||
#define WM_BUTTON5UP 109
|
||||
#define WM_BUTTON5DOWN 110
|
||||
#define WM_BUTTON6UP 111
|
||||
#define WM_BUTTON6DOWN 112
|
||||
#define WM_BUTTON7UP 113
|
||||
#define WM_BUTTON7DOWN 114
|
||||
#define WM_BUTTON8UP 115
|
||||
#define WM_BUTTON8DOWN 116
|
||||
#define WM_BUTTON9UP 117
|
||||
#define WM_BUTTON9DOWN 118
|
||||
#define WM_INVALIDATE 200
|
||||
|
||||
#define CB_ITEMCHANGE 300
|
||||
|
||||
#define FASTPATH_MAX_PACKET_SIZE 0x3fff
|
||||
|
||||
#define XR_RDP_SCAN_LSHIFT 42
|
||||
#define XR_RDP_SCAN_ALT 56
|
||||
|
||||
#endif
|
@ -1,147 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2012-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if !defined(_RAIL_H)
|
||||
#define _RAIL_H
|
||||
|
||||
/*
|
||||
ORDER_TYPE_WINDOW
|
||||
WINDOW_ORDER_TYPE_WINDOW
|
||||
WINDOW_ORDER_ICON
|
||||
WINDOW_ORDER_CACHED_ICON
|
||||
WINDOW_ORDER_STATE_DELETED
|
||||
WINDOW_ORDER_STATE_NEW on
|
||||
WINDOW_ORDER_STATE_NEW off
|
||||
WINDOW_ORDER_TYPE_NOTIFY
|
||||
WINDOW_ORDER_STATE_DELETED
|
||||
WINDOW_ORDER_STATE_NEW on
|
||||
WINDOW_ORDER_STATE_NEW off
|
||||
WINDOW_ORDER_TYPE_DESKTOP
|
||||
WINDOW_ORDER_FIELD_DESKTOP_NONE on
|
||||
WINDOW_ORDER_FIELD_DESKTOP_NONE off
|
||||
*/
|
||||
|
||||
/* Window Order Header Flags */
|
||||
#define WINDOW_ORDER_TYPE_WINDOW 0x01000000
|
||||
#define WINDOW_ORDER_TYPE_NOTIFY 0x02000000
|
||||
#define WINDOW_ORDER_TYPE_DESKTOP 0x04000000
|
||||
#define WINDOW_ORDER_STATE_NEW 0x10000000
|
||||
#define WINDOW_ORDER_STATE_DELETED 0x20000000
|
||||
#define WINDOW_ORDER_FIELD_OWNER 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_STYLE 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_SHOW 0x00000010
|
||||
#define WINDOW_ORDER_FIELD_TITLE 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_CLIENT_AREA_OFFSET 0x00004000
|
||||
#define WINDOW_ORDER_FIELD_CLIENT_AREA_SIZE 0x00010000
|
||||
#define WINDOW_ORDER_FIELD_RP_CONTENT 0x00020000
|
||||
#define WINDOW_ORDER_FIELD_ROOT_PARENT 0x00040000
|
||||
#define WINDOW_ORDER_FIELD_WND_OFFSET 0x00000800
|
||||
#define WINDOW_ORDER_FIELD_WND_CLIENT_DELTA 0x00008000
|
||||
#define WINDOW_ORDER_FIELD_WND_SIZE 0x00000400
|
||||
#define WINDOW_ORDER_FIELD_WND_RECTS 0x00000100
|
||||
#define WINDOW_ORDER_FIELD_VIS_OFFSET 0x00001000
|
||||
#define WINDOW_ORDER_FIELD_VISIBILITY 0x00000200
|
||||
#define WINDOW_ORDER_FIELD_ICON_BIG 0x00002000
|
||||
#define WINDOW_ORDER_ICON 0x40000000
|
||||
#define WINDOW_ORDER_CACHED_ICON 0x80000000
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_VERSION 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_TIP 0x00000001
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_NOTIFY_STATE 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_NONE 0x00000001
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_HOOKED 0x00000002
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_COMPLETED 0x00000004
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ARC_BEGAN 0x00000008
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ZORDER 0x00000010
|
||||
#define WINDOW_ORDER_FIELD_DESKTOP_ACTIVE_WND 0x00000020
|
||||
|
||||
struct rail_icon_info
|
||||
{
|
||||
int bpp;
|
||||
int width;
|
||||
int height;
|
||||
int cmap_bytes;
|
||||
int mask_bytes;
|
||||
int data_bytes;
|
||||
char *mask;
|
||||
char *cmap;
|
||||
char *data;
|
||||
};
|
||||
|
||||
struct rail_window_rect
|
||||
{
|
||||
short left;
|
||||
short top;
|
||||
short right;
|
||||
short bottom;
|
||||
};
|
||||
|
||||
struct rail_notify_icon_infotip
|
||||
{
|
||||
int timeout;
|
||||
int flags;
|
||||
char *text;
|
||||
char *title;
|
||||
};
|
||||
|
||||
struct rail_window_state_order
|
||||
{
|
||||
int owner_window_id;
|
||||
int style;
|
||||
int extended_style;
|
||||
int show_state;
|
||||
char *title_info;
|
||||
int client_offset_x;
|
||||
int client_offset_y;
|
||||
int client_area_width;
|
||||
int client_area_height;
|
||||
int rp_content;
|
||||
int root_parent_handle;
|
||||
int window_offset_x;
|
||||
int window_offset_y;
|
||||
int window_client_delta_x;
|
||||
int window_client_delta_y;
|
||||
int window_width;
|
||||
int window_height;
|
||||
int num_window_rects;
|
||||
struct rail_window_rect *window_rects;
|
||||
int visible_offset_x;
|
||||
int visible_offset_y;
|
||||
int num_visibility_rects;
|
||||
struct rail_window_rect *visibility_rects;
|
||||
};
|
||||
|
||||
struct rail_notify_state_order
|
||||
{
|
||||
int version;
|
||||
char *tool_tip;
|
||||
struct rail_notify_icon_infotip infotip;
|
||||
int state;
|
||||
int icon_cache_entry;
|
||||
int icon_cache_id;
|
||||
struct rail_icon_info icon_info;
|
||||
};
|
||||
|
||||
struct rail_monitored_desktop_order
|
||||
{
|
||||
int active_window_id;
|
||||
int num_window_ids;
|
||||
int *window_ids;
|
||||
};
|
||||
|
||||
#endif
|
@ -1,40 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2014
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* names of UNIX sockets for inter-process communication
|
||||
*/
|
||||
|
||||
#if !defined(XRDP_SOCKETS_H)
|
||||
#define XRDP_SOCKETS_H
|
||||
|
||||
/* basename of socket files */
|
||||
#define XRDP_CHANSRV_BASE_STR "xrdp_chansrv_socket_%d"
|
||||
#define CHANSRV_PORT_OUT_BASE_STR "xrdp_chansrv_audio_out_socket_%d"
|
||||
#define CHANSRV_PORT_IN_BASE_STR "xrdp_chansrv_audio_in_socket_%d"
|
||||
#define CHANSRV_API_BASE_STR "xrdpapi_%d"
|
||||
#define XRDP_X11RDP_BASE_STR "xrdp_display_%d"
|
||||
#define XRDP_DISCONNECT_BASE_STR "xrdp_disconnect_display_%d"
|
||||
|
||||
/* fullpath of sockets */
|
||||
#define XRDP_CHANSRV_STR XRDP_SOCKET_PATH "/" XRDP_CHANSRV_BASE_STR
|
||||
#define CHANSRV_PORT_OUT_STR XRDP_SOCKET_PATH "/" CHANSRV_PORT_OUT_BASE_STR
|
||||
#define CHANSRV_PORT_IN_STR XRDP_SOCKET_PATH "/" CHANSRV_PORT_IN_BASE_STR
|
||||
#define CHANSRV_API_STR XRDP_SOCKET_PATH "/" CHANSRV_API_BASE_STR
|
||||
#define XRDP_X11RDP_STR XRDP_SOCKET_PATH "/" XRDP_X11RDP_BASE_STR
|
||||
#define XRDP_DISCONNECT_STR XRDP_SOCKET_PATH "/" XRDP_DISCONNECT_BASE_STR
|
||||
|
||||
#endif
|
442
configure.ac
442
configure.ac
@ -1,442 +0,0 @@
|
||||
# Process this file with autoconf to produce a configure script
|
||||
|
||||
AC_PREREQ(2.65)
|
||||
AC_INIT([xrdp], [0.9.15], [xrdp-devel@googlegroups.com])
|
||||
AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in)
|
||||
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
|
||||
if test "x$PKG_CONFIG" = "x"; then
|
||||
AC_MSG_ERROR([please install pkg-config])
|
||||
fi
|
||||
|
||||
AC_CONFIG_SUBDIRS([libpainter librfxcodec])
|
||||
|
||||
# Use silent rules by default if supported by Automake
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
case $host_os in
|
||||
*linux*)
|
||||
linux=yes
|
||||
;;
|
||||
*kfreebsd*)
|
||||
linux=yes # only used in instfiles/ so that’s ok for us for now
|
||||
;;
|
||||
*freebsd*)
|
||||
freebsd=yes
|
||||
;;
|
||||
*netbsd*)
|
||||
netbsd=yes
|
||||
;;
|
||||
*openbsd*)
|
||||
openbsd=yes
|
||||
;;
|
||||
*darwin*)
|
||||
macos=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])
|
||||
AM_CONDITIONAL(MACOS, [test "x$macos" = xyes])
|
||||
|
||||
AC_ARG_WITH([socketdir],
|
||||
[AS_HELP_STRING([--with-socketdir=DIR],
|
||||
[Use directory for UNIX sockets (default: /tmp/.xrdp)])],
|
||||
[], [with_socketdir="/tmp/.xrdp"])
|
||||
AC_SUBST([socketdir], [$with_socketdir])
|
||||
|
||||
AC_ARG_WITH([systemdsystemunitdir],
|
||||
AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files, no to disable]),
|
||||
[], [
|
||||
if test "x$linux" = xyes; then
|
||||
with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
|
||||
fi
|
||||
])
|
||||
|
||||
if test "x$with_systemdsystemunitdir" != xno; then
|
||||
AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ])
|
||||
|
||||
AC_ARG_ENABLE(pam, AS_HELP_STRING([--enable-pam],
|
||||
[Build PAM support (default: yes)]),
|
||||
[], [enable_pam=yes])
|
||||
AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes])
|
||||
AC_ARG_ENABLE(vsock, AS_HELP_STRING([--enable-vsock],
|
||||
[Build AF_VSOCK support (default: no)]),
|
||||
[], [enable_vsock=no])
|
||||
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 (prefer --enable-pam if available) (default: no)]),
|
||||
[], [enable_kerberos=no])
|
||||
AC_ARG_ENABLE(bsd, AS_HELP_STRING([--enable-bsd],
|
||||
[Build BSD auth support (default: no)]),
|
||||
[bsd=true], [bsd=false])
|
||||
AM_CONDITIONAL(SESMAN_BSD, [test x$bsd = xtrue])
|
||||
AM_CONDITIONAL(SESMAN_KERBEROS, [test x$enable_kerberos = xyes])
|
||||
AC_ARG_ENABLE(pamuserpass, AS_HELP_STRING([--enable-pamuserpass],
|
||||
[Build PAM userpass support (default: no)]),
|
||||
[], [enable_pamuserpass=no])
|
||||
AM_CONDITIONAL(SESMAN_PAMUSERPASS, [test x$enable_pamuserpass = xyes])
|
||||
AC_ARG_ENABLE(pam-config, AS_HELP_STRING([--enable-pam-config=CONF],
|
||||
[Select PAM config to install: arch, debian, redhat, suse, freebsd, macos, unix
|
||||
(default: autodetect)]))
|
||||
|
||||
AC_ARG_ENABLE(xrdpdebug, AS_HELP_STRING([--enable-xrdpdebug],
|
||||
[Build debug (default: no)]),
|
||||
[], [enable_xrdpdebug=no])
|
||||
AM_CONDITIONAL(XRDP_DEBUG, [test x$enable_xrdpdebug = xyes])
|
||||
AC_ARG_ENABLE(neutrinordp, AS_HELP_STRING([--enable-neutrinordp],
|
||||
[Build neutrinordp module (default: no)]),
|
||||
[], [enable_neutrinordp=no])
|
||||
AM_CONDITIONAL(XRDP_NEUTRINORDP, [test x$enable_neutrinordp = xyes])
|
||||
AC_ARG_ENABLE(jpeg, AS_HELP_STRING([--enable-jpeg],
|
||||
[Build jpeg module (default: no)]),
|
||||
[], [enable_jpeg=no])
|
||||
AM_CONDITIONAL(XRDP_JPEG, [test x$enable_jpeg = xyes])
|
||||
AC_ARG_ENABLE(tjpeg, AS_HELP_STRING([--enable-tjpeg],
|
||||
[Build turbo jpeg module (default: no)]),
|
||||
[], [enable_tjpeg=no])
|
||||
AM_CONDITIONAL(XRDP_TJPEG, [test x$enable_tjpeg = xyes])
|
||||
AC_ARG_ENABLE(fuse, AS_HELP_STRING([--enable-fuse],
|
||||
[Build fuse(clipboard file / drive redir) (default: no)]),
|
||||
[], [enable_fuse=no])
|
||||
AM_CONDITIONAL(XRDP_FUSE, [test x$enable_fuse = xyes])
|
||||
AC_ARG_ENABLE(xrdpvr, AS_HELP_STRING([--enable-xrdpvr],
|
||||
[Build xrdpvr module (default: no)]),
|
||||
[], [enable_xrdpvr=no])
|
||||
AM_CONDITIONAL(XRDP_XRDPVR, [test x$enable_xrdpvr = xyes])
|
||||
AC_ARG_ENABLE(fdkaac, AS_HELP_STRING([--enable-fdkaac],
|
||||
[Build aac(audio codec) (default: no)]),
|
||||
[], [enable_fdkaac=no])
|
||||
AM_CONDITIONAL(XRDP_FDK_AAC, [test x$enable_fdkaac = 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])
|
||||
|
||||
AC_ARG_ENABLE(painter, AS_HELP_STRING([--disable-painter],
|
||||
[Do not use included painter library (default: no)]),
|
||||
[], [enable_painter=yes])
|
||||
AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes])
|
||||
|
||||
AC_ARG_ENABLE(rfxcodec, AS_HELP_STRING([--disable-rfxcodec],
|
||||
[Do not use included librfxcodec library (default: no)]),
|
||||
[], [enable_rfxcodec=yes])
|
||||
AM_CONDITIONAL(XRDP_RFXCODEC, [test x$enable_rfxcodec = xyes])
|
||||
|
||||
AC_ARG_ENABLE(rdpsndaudin, AS_HELP_STRING([--enable-rdpsndaudin],
|
||||
[Use rdpsnd audio in (default: no)]),
|
||||
[], [enable_rdpsndaudin=no])
|
||||
AM_CONDITIONAL(XRDP_RDPSNDAUDIN, [test x$enable_rdpsndaudin = xyes])
|
||||
|
||||
# configure compiler options and CFLAGS
|
||||
AX_GCC_FUNC_ATTRIBUTE([format])
|
||||
AX_TYPE_SOCKLEN_T
|
||||
AX_CFLAGS_WARN_ALL
|
||||
AX_APPEND_COMPILE_FLAGS([-Wwrite-strings])
|
||||
|
||||
AM_COND_IF([LINUX],
|
||||
[AX_APPEND_COMPILE_FLAGS([-Werror])]) # bsd has warnings that have not been fixed yet
|
||||
|
||||
AM_COND_IF([XRDP_DEBUG],
|
||||
[AX_APPEND_COMPILE_FLAGS([-g -O0])],
|
||||
[AX_APPEND_COMPILE_FLAGS([-O2])])
|
||||
|
||||
# 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
|
||||
PKG_CHECK_MODULES([OPENSSL], [openssl >= 0.9.8], [],
|
||||
[AC_MSG_ERROR([please install libssl-dev or openssl-devel])])
|
||||
|
||||
# look for openssl binary
|
||||
OPENSSL_BIN=`$PKG_CONFIG --variable=exec_prefix openssl`/bin
|
||||
AC_PATH_PROGS([OPENSSL], [openssl], [:], [$OPENSSL_BIN:$PATH])
|
||||
|
||||
# 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], [])])
|
||||
|
||||
# Check only one auth mechanism is specified, and give it a name
|
||||
auth_cnt=0
|
||||
auth_mech="Builtin"
|
||||
if test x$enable_pam = xyes
|
||||
then
|
||||
auth_cnt=`expr $auth_cnt + 1`
|
||||
auth_mech="PAM"
|
||||
fi
|
||||
if test x$bsd = xtrue
|
||||
then
|
||||
auth_cnt=`expr $auth_cnt + 1`
|
||||
auth_mech="BSD"
|
||||
fi
|
||||
if test x$enable_kerberos = xyes
|
||||
then
|
||||
auth_cnt=`expr $auth_cnt + 1`
|
||||
auth_mech="Kerberos"
|
||||
fi
|
||||
if test x$enable_pamuserpass = xyes
|
||||
then
|
||||
auth_cnt=`expr $auth_cnt + 1`
|
||||
auth_mech="PAM userpass"
|
||||
fi
|
||||
|
||||
if test $auth_cnt -gt 1
|
||||
then
|
||||
AC_MSG_ERROR([--enable-pam, --enable-bsd, --enable-pamuserpass and --enable-kerberos are mutually exclusive])
|
||||
fi
|
||||
|
||||
# checking if pam should be autodetected.
|
||||
if test "x$enable_pam" = "xyes"
|
||||
then
|
||||
if test -z "$enable_bsd"
|
||||
then
|
||||
AC_CHECK_HEADER([security/pam_appl.h], [],
|
||||
[AC_MSG_ERROR([please install libpam0g-dev or pam-devel])])
|
||||
fi
|
||||
if test "x$enable_pam_config" = "x"; then
|
||||
PAM_RULES="auto"
|
||||
else
|
||||
pam_config_file="$srcdir/instfiles/pam.d/xrdp-sesman.$enable_pam_config"
|
||||
if test -f "$pam_config_file"; then
|
||||
PAM_RULES="$enable_pam_config"
|
||||
else
|
||||
AC_MSG_ERROR([PAM file "$pam_config_file" is not available])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(PAM_RULES)
|
||||
|
||||
if test "x$enable_vsock" = "xyes"
|
||||
then
|
||||
enable_vsock=yes
|
||||
AC_CHECK_HEADERS([linux/socket.h linux/vm_sockets.h],
|
||||
[AC_DEFINE([XRDP_ENABLE_VSOCK], 1, [Enable AF_VSOCK])],
|
||||
[],
|
||||
[#include <sys/socket.h>])
|
||||
fi
|
||||
|
||||
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"
|
||||
then
|
||||
AC_DEFINE([USE_NOPAM],1,[Disable PAM])
|
||||
fi
|
||||
|
||||
AS_IF( [test "x$enable_neutrinordp" = "xyes"] , [PKG_CHECK_MODULES(FREERDP, freerdp >= 1.0.0)] )
|
||||
|
||||
# checking for libjpeg
|
||||
if test "x$enable_jpeg" = "xyes"
|
||||
then
|
||||
AC_CHECK_HEADER([jpeglib.h], [],
|
||||
[AC_MSG_ERROR([please install libjpeg-dev or libjpeg-devel])])
|
||||
fi
|
||||
|
||||
# checking for fuse
|
||||
if test "x$enable_fuse" = "xyes"
|
||||
then
|
||||
PKG_CHECK_MODULES([FUSE], [fuse >= 2.6], [],
|
||||
[AC_MSG_ERROR([please install libfuse-dev or fuse-devel])])
|
||||
fi
|
||||
|
||||
# checking for fdk aac
|
||||
if test "x$enable_fdkaac" = "xyes"
|
||||
then
|
||||
PKG_CHECK_MODULES([FDKAAC], [fdk-aac >= 0.1.0], [],
|
||||
[AC_MSG_ERROR([please install libfdk-aac-dev or fdk-aac-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
|
||||
if test ! -z "$TURBOJPEG_PATH"
|
||||
then
|
||||
# env var TURBOJPEG_PATH has been defined, use that
|
||||
AC_CHECK_HEADER([$TURBOJPEG_PATH/include/turbojpeg.h], [],
|
||||
[AC_MSG_ERROR([could not find TurboJPEG in dir specified by env variable TURBOJPEG_PATH ($TURBOJPEG_PATH)])])
|
||||
|
||||
AC_SUBST(TurboJpegIncDir, ["-I$TURBOJPEG_PATH/include"])
|
||||
AC_SUBST(TurboJpegLibDir, ["-L$TURBOJPEG_PATH/lib -Wl,-rpath -Wl,$TURBOJPEG_PATH/lib"])
|
||||
elif test -e /opt/libjpeg-turbo/lib64
|
||||
then
|
||||
# TurboJPEG has been installed to /opt on a 64 bit m/c
|
||||
AC_SUBST(TurboJpegIncDir, ["-I/opt/libjpeg-turbo/include"])
|
||||
AC_SUBST(TurboJpegLibDir, ["-L/opt/libjpeg-turbo/lib64 -Wl,-rpath -Wl,/opt/libjpeg-turbo/lib64"])
|
||||
elif test -e /opt/libjpeg-turbo/lib32
|
||||
then
|
||||
# TurboJPEG has been installed to /opt on a 32 bit m/c
|
||||
AC_SUBST(TurboJpegIncDir, ["-I/opt/libjpeg-turbo/include"])
|
||||
AC_SUBST(TurboJpegLibDir, ["-L/opt/libjpeg-turbo/lib32 -Wl,-rpath -Wl,/opt/libjpeg-turbo/lib32"])
|
||||
else
|
||||
# check in default location
|
||||
AC_CHECK_HEADER([/usr/include/turbojpeg.h], [],
|
||||
[AC_MSG_ERROR([please install TurboJPEG ])])
|
||||
AC_SUBST(TurboJpegIncDir, [""])
|
||||
AC_SUBST(TurboJpegLibDir, [""])
|
||||
fi
|
||||
fi
|
||||
|
||||
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 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>])
|
||||
|
||||
CFLAGS="$save_CFLAGS"
|
||||
|
||||
AC_SUBST([moduledir], '${libdir}/xrdp')
|
||||
|
||||
AC_ARG_ENABLE([strict-locations],
|
||||
[AS_HELP_STRING([--enable-strict-locations],
|
||||
[Use standard Autoconf install directories unless overridden
|
||||
(default: use /etc and /var)])],
|
||||
[], [enable_strict_locations=no])
|
||||
|
||||
if test "x$enable_strict_locations" != "xyes"; then
|
||||
sysconfdir="/etc";
|
||||
localstatedir="/var";
|
||||
fi
|
||||
|
||||
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
|
||||
sesman/chansrv/Makefile
|
||||
sesman/libscp/Makefile
|
||||
sesman/Makefile
|
||||
sesman/tools/Makefile
|
||||
vnc/Makefile
|
||||
xrdpapi/Makefile
|
||||
xrdp/Makefile
|
||||
xrdpvr/Makefile
|
||||
xup/Makefile
|
||||
])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
echo ""
|
||||
echo "xrdp will be compiled with:"
|
||||
echo ""
|
||||
echo " mp3lame $enable_mp3lame"
|
||||
echo " opus $enable_opus"
|
||||
echo " fdkaac $enable_fdkaac"
|
||||
echo " jpeg $enable_jpeg"
|
||||
echo " turbo jpeg $enable_tjpeg"
|
||||
echo " rfxcodec $enable_rfxcodec"
|
||||
echo " painter $enable_painter"
|
||||
echo " pixman $enable_pixman"
|
||||
echo " fuse $enable_fuse"
|
||||
echo " ipv6 $enable_ipv6"
|
||||
echo " ipv6only $enable_ipv6only"
|
||||
echo " vsock $enable_vsock"
|
||||
echo " auth mechanism $auth_mech"
|
||||
echo " debug $enable_xrdpdebug"
|
||||
echo " rdpsndaudin $enable_rdpsndaudin"
|
||||
echo ""
|
||||
echo " strict_locations $enable_strict_locations"
|
||||
echo " prefix $prefix"
|
||||
echo " exec_prefix $exec_prefix"
|
||||
echo " libdir $libdir"
|
||||
echo " bindir $bindir"
|
||||
echo " sysconfdir $sysconfdir"
|
||||
echo ""
|
||||
echo " CFLAGS = $CFLAGS"
|
||||
echo " LDFLAGS = $LDFLAGS"
|
||||
|
||||
# xrdp_configure_options.h will be written to the build directory, not the source directory
|
||||
echo '#define XRDP_CONFIGURE_OPTIONS \' > ./xrdp_configure_options.h
|
||||
./config.status --config | xargs -n 1 | sed -e 's/^/" /' -e 's/$/\\n" \\/' >> ./xrdp_configure_options.h
|
||||
echo '""' >> ./xrdp_configure_options.h
|
||||
|
@ -1 +0,0 @@
|
||||
RDP server for Linux
|
35
design.txt
35
design.txt
@ -1,35 +0,0 @@
|
||||
|
||||
This document is intended to explain xrdp server design.
|
||||
|
||||
Many connections, all capable of running different modules
|
||||
one connection could be using a vnc connection
|
||||
one could be running a custom app made for xrdp
|
||||
one could be running a X11 session
|
||||
clients control the screen size and color depth
|
||||
|
||||
all controlled by a configuration file.
|
||||
|
||||
you can create a lib or use a lib with your executable that talks
|
||||
to xrdp server.
|
||||
|
||||
------ ----------
|
||||
-xrdp---linked-------mylib.so- session 1
|
||||
------ ----------
|
||||
|
|
||||
| -------------------------
|
||||
|----unix socket--myapp linked to libxrdp- session 2
|
||||
| -------------------------
|
||||
|
|
||||
| -----------
|
||||
|----linked-------mylib2.so- session 3
|
||||
-----------
|
||||
|
||||
Any of the above sessions can repeat or have different session
|
||||
numbers or not even be used.
|
||||
If a session is disconnected, all that changes is the rdp connection
|
||||
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 environment
|
||||
variable.
|
@ -1,3 +0,0 @@
|
||||
|
||||
SUBDIRS = \
|
||||
man
|
1
docs/man/.gitignore
vendored
1
docs/man/.gitignore
vendored
@ -1 +0,0 @@
|
||||
*.[1-8]
|
@ -1,33 +0,0 @@
|
||||
man_MANS = \
|
||||
xrdp-dis.1 \
|
||||
sesman.ini.5 \
|
||||
xrdp.ini.5 \
|
||||
xrdp.8 \
|
||||
xrdp-chansrv.8 \
|
||||
xrdp-genkeymap.8 \
|
||||
xrdp-keygen.8 \
|
||||
xrdp-sesadmin.8 \
|
||||
xrdp-sesman.8 \
|
||||
xrdp-sesrun.8
|
||||
|
||||
EXTRA_DIST = $(man_MANS:=.in)
|
||||
|
||||
SUBST_VARS = sed \
|
||||
-e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
|
||||
-e 's|@bindir[@]|$(bindir)|g' \
|
||||
-e 's|@sbindir[@]|$(sbindir)|g' \
|
||||
-e 's|@localstatedir[@]|$(localstatedir)|g' \
|
||||
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
|
||||
-e 's|@socketdir[@]|$(socketdir)|g' \
|
||||
-e 's|@xrdpconfdir[@]|$(sysconfdir)/xrdp|g' \
|
||||
-e 's|@xrdphomeurl[@]|http://www.xrdp.org/|g'
|
||||
|
||||
subst_verbose = $(subst_verbose_@AM_V@)
|
||||
subst_verbose_ = $(subst_verbose_@AM_DEFAULT_V@)
|
||||
subst_verbose_0 = @echo " SUBST $@";
|
||||
|
||||
SUFFIXES = .in
|
||||
.in:
|
||||
$(subst_verbose)$(SUBST_VARS) $< > $@
|
||||
|
||||
CLEANFILES = $(man_MANS)
|
@ -1,309 +0,0 @@
|
||||
.\"
|
||||
.TH "sesman.ini" "5" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBsesman.ini\fR \- Configuration file for \fBxrdp-sesman\fR(8)
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\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:
|
||||
|
||||
.TP
|
||||
\fB[Globals]\fR
|
||||
Global configuration
|
||||
|
||||
.TP
|
||||
\fB[Logging]\fR
|
||||
Logging subsystem
|
||||
|
||||
.TP
|
||||
\fB[Sessions]\fR
|
||||
Session management
|
||||
|
||||
.TP
|
||||
\fB[Security]\fR
|
||||
Access control
|
||||
|
||||
.TP
|
||||
\fB[X11rdp]\fR, \fB[Xvnc]\fR, \fB[Xorg]\fR
|
||||
X11 server settings for supported servers
|
||||
|
||||
.TP
|
||||
\fB[Chansrv]\fR
|
||||
Settings for xrdp-chansrv(8)
|
||||
|
||||
.TP
|
||||
\fB[ChansrvLogging]\fR
|
||||
Logging settings for xrdp-chansrv(8)
|
||||
|
||||
.TP
|
||||
\fB[SessionVariables]\fR
|
||||
Environment variables for the session
|
||||
|
||||
.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"
|
||||
Following parameters can be used in the \fB[Globals]\fR section.
|
||||
|
||||
.TP
|
||||
\fBListenAddress\fR=\fIip address\fR
|
||||
xrdp-sesman listening address. If not specified, defaults to \fI0.0.0.0\fR
|
||||
(all interfaces).
|
||||
|
||||
.TP
|
||||
\fBListenPort\fR=\fIport number\fR
|
||||
xrdp-sesman listening port. If not specified, defaults to \fI3350\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=\fIfilename\fR
|
||||
Path 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=\fIfilename\fR
|
||||
Full path or relative path of the default startup script used by xrdp-sesman
|
||||
to start a session. If the path is not a full path, it will be resolved as
|
||||
relative path to \fI@xrdpconfdir@\fR. If not specified, defaults to
|
||||
\fI@xrdpconfdir@/startwm.sh\fR.
|
||||
|
||||
.TP
|
||||
\fBReconnectScript\fR=\fIfilename\fR
|
||||
Full path or relative path if the script which executed when users reconnects
|
||||
to the existing session. If the path is not a full path, it will be resolved as
|
||||
relative path to \fI@xrdpconfdir@\fR. If not specified, defaults to
|
||||
\fI@xrdpconfdir@/reconnectwm.sh\fR.
|
||||
|
||||
.SH "LOGGING"
|
||||
Following parameters can be used in the \fB[Logging]\fR and \fB[ChansrvLogging]\fR
|
||||
sections.
|
||||
|
||||
.TP
|
||||
\fBLogFile\fR=\fIfilename\fR
|
||||
Log file path. It can be either absolute or relative. If not specified,
|
||||
defaults to \fI./sesman.log\fR It is ignored in the [ChansrvLogging] section
|
||||
since the channel server creates one log file per display and instead uses the
|
||||
following log file naming convention \fIxrdp-chansrv.${DISPLAY}.log\fR
|
||||
|
||||
.TP
|
||||
\fBLogLevel\fR=\fIlevel\fR
|
||||
This option can have one of the following values:
|
||||
|
||||
\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.
|
||||
|
||||
\fBWARNING\fR, \fBWARN\fR or \fB2\fR \- Logs warnings and error messages.
|
||||
|
||||
\fBINFO\fR or \fB3\fR \- Log errors, warnings and informational messages.
|
||||
|
||||
\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
|
||||
\fBEnableSyslog\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging to
|
||||
syslog.
|
||||
|
||||
.TP
|
||||
\fBSyslogLevel\fR=\fIlevel\fR
|
||||
Logging level for syslog. It can have the same values as \fBLogLevel\fR.
|
||||
Defaults to \fBDEBUG\fR.
|
||||
|
||||
.TP
|
||||
\fBEnableConsole\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging to
|
||||
the console (ie. stdout).
|
||||
|
||||
.TP
|
||||
\fBConsoleLevel\fR=\fIlevel\fR
|
||||
Logging level for the console. It can have the same values as \fBLogLevel\fR.
|
||||
Defaults to \fBDEBUG\fR.
|
||||
|
||||
.TP
|
||||
\fBEnableProcessId\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging the
|
||||
process id in all log messages. Defaults to \fBfalse\fR.
|
||||
|
||||
.SH "SESSIONS"
|
||||
Following parameters can be used in the \fB[Sessions]\fR section.
|
||||
|
||||
.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 \fBDisconnectedTimeLimit\fR seconds after the user disconnects.
|
||||
This setting currently only works with xorgxrdp sessions.
|
||||
|
||||
.TP
|
||||
\fBDisconnectedTimeLimit\fR=\fInumber\fR
|
||||
Sets the time limit for \fBKillDisconnected\fR to a value greater than 60.
|
||||
Values less than 60 are to be overridden with 60.
|
||||
This setting currently only works with xorgxrdp sessions.
|
||||
|
||||
.TP
|
||||
\fBIdleTimeLimit\fR=\fInumber\fR
|
||||
Sets the time limit (in seconds) before an idle session is disconnected.
|
||||
Idle means no keyboard inputs and no mouse moves/clicks here.
|
||||
If set to \fI0\fR, idle sessions will never be disconnected by timeout.
|
||||
This works only with xorgxrdp sessions. Moreover, xorgxrdp must be v0.2.9 or later.
|
||||
|
||||
.TP
|
||||
\fBPolicy\fR=\fI[Default|UBD|UBI|UBC|UBDI|UBDC]\fR
|
||||
Session allocation policy. Used to decide when to allocate a
|
||||
new session. Set to one of the following values:
|
||||
.br
|
||||
|
||||
.br
|
||||
\fBDefault\fR - session per <User,BitPerPixel>
|
||||
.br
|
||||
\fBUBD\fR - session per <User,BitPerPixel,DisplaySize>
|
||||
.br
|
||||
\fBUBI\fR - session per <User,BitPerPixel,IPAddr>
|
||||
.br
|
||||
\fBUBC\fR - session per <User,BitPerPixel,Connection>
|
||||
.br
|
||||
\fBUBDI\fR - session per <User,BitPerPixel,DisplaySize,IPAddr>
|
||||
.br
|
||||
\fBUBDC\fR - session per <User,BitPerPixel,DisplaySize,Connection>
|
||||
.br
|
||||
|
||||
.br
|
||||
Note that the \fBUser\fR and \fBBitPerPixel\fR criteria cannot be turned
|
||||
off. \fBDisplaySize\fR refers to the initial geometry of a connection,
|
||||
as actual display sizes can change dynamically.
|
||||
.br
|
||||
|
||||
.SH "SECURITY"
|
||||
Following parameters can be used in the \fB[Security]\fR section.
|
||||
|
||||
.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=\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=\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=\fIgroup\fR
|
||||
\fIThis option is currently ignored!\fR Only members of this group can
|
||||
have session management rights.
|
||||
|
||||
.TP
|
||||
\fBRestrictOutboundClipboard\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, will restrict the clipboard
|
||||
outbound from the server, to prevent data copied inside the xrdp session
|
||||
to be be pasted in the client host. Default value is \fBfalse\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.
|
||||
|
||||
.SH "X11 SERVER"
|
||||
Following parameters can be used in the \fB[X11rdp]\fR, \fB[Xvnc]\fR and
|
||||
\fB[Xorg]\fR sections.
|
||||
|
||||
.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.
|
||||
|
||||
.SH "CHANSRV"
|
||||
Following parameters can be used in the \fB[Chansrv]\fR section.
|
||||
|
||||
.TP
|
||||
\fBFuseMountName\fR=\fIstring\fR
|
||||
Directory for drive redirection.
|
||||
Created if it doesn't exist. If not specified, defaults to \fIxrdp_client\fR.
|
||||
If first character is not a '/', this is relative to $HOME.
|
||||
.P
|
||||
.RS
|
||||
If first character is a '/' this is an absolute path. The following
|
||||
substitutions are made in this string:-
|
||||
%U - Username
|
||||
%u - Numeric UID
|
||||
%% - Percent character
|
||||
.P
|
||||
If this format is used:-
|
||||
.HP 3
|
||||
1) The directory path permissions MUST be configured correctly by
|
||||
the system administrator or the system itself - xrdp-chansrv will not
|
||||
do this for you (although it will create the final directories owned by
|
||||
the user).
|
||||
.HP 3
|
||||
2) The desktop may not automatically display a link for the redirected
|
||||
drive. To fix this, consult the docs for your chosen desktop.
|
||||
.RE
|
||||
|
||||
.TP
|
||||
\fBFileUmask\fR=\fImode\fR
|
||||
Additional umask to apply to files in the \fBFuseMountName\fR directory.
|
||||
The default value of 077 prevents other users on the system from reading
|
||||
files on your redirected drives. This may not be approprate for all
|
||||
environents, and so you can change this value to allow other users to
|
||||
access your remote files if required.
|
||||
|
||||
.TP
|
||||
\fBEnableFuseMount\fR=\fI[true|false]\fR
|
||||
Defaults to \fItrue\fR.
|
||||
Set to \fIfalse\fR to disable xrdp-chansrv's use of the FUSE system
|
||||
feature, even if it has been built with this feature enabled.
|
||||
.P
|
||||
.RS
|
||||
Setting this value to \fIfalse\fR will disable the following application
|
||||
features:-
|
||||
.P
|
||||
- drive redirection
|
||||
.P
|
||||
- copying-and-pasting of files
|
||||
.RE
|
||||
|
||||
.SH "SESSIONS VARIABLES"
|
||||
All entries in the \fB[SessionVariables]\fR section are set as
|
||||
environment variables in the user's session.
|
||||
|
||||
.SH "FILES"
|
||||
@sysconfdir@/xrdp/sesman.ini
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp-sesman (8),
|
||||
.BR xrdp-sesrun (8),
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
For more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,62 +0,0 @@
|
||||
.TH "xrdp\-chansrv" "8" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp\-chansrv\fR \- \fBxrdp\fR channel server
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp\-chansrv
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\-chansrv\fR is the \fBxrdp\fR(8) channel server, which manages the Remote Desktop Protocol (RDP) sub-channels.
|
||||
.PP
|
||||
This program is only forked internally by \fBxrdp\-sesman\fP(8).
|
||||
.PP
|
||||
Currently \fBxrdp\-chansrv\fP knows about the following channels:
|
||||
.RS 8
|
||||
.TP
|
||||
.B cliprdr
|
||||
Clipboard Redirection
|
||||
.TP
|
||||
.B rdpsnd
|
||||
Remote Desktop Protocol Sound
|
||||
.TP
|
||||
.B rdpdr
|
||||
Remote Desktop Protocol Device Redirection
|
||||
.TP
|
||||
.B rail
|
||||
Remote Applications Integrated Locally
|
||||
.TP
|
||||
.B drdynvc
|
||||
Dynamic Virtual Channel
|
||||
.RE
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
.I CHANSRV_LOG_PATH
|
||||
Path to the location where the log file is stored. If not specified,
|
||||
$\fBXDG_DATA_HOME/xrdp\fP or \fB$HOME/.local/share/xrdp\fP is used instead.
|
||||
.TP
|
||||
.I DISPLAY
|
||||
X11 display number. Must be specified.
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.I @sysconfdir@/xrdp/sesman.ini
|
||||
Contains some settings for this program.
|
||||
.TP
|
||||
.I @socketdir@/xrdp_chansrv_socket_*
|
||||
UNIX socket used by external programs to implement channels.
|
||||
.TP
|
||||
.I @socketdir@/xrdp_api_*
|
||||
UNIX socket used by \fBxrdp\-chansrv\fP to communicate with \fBxrdp\-sesman\fP.
|
||||
.TP
|
||||
.I xrdp-chansrv.%s.log
|
||||
Log file used by \fBxrdp\-chansrv\fP(8). \fB%s\fP is display number. See the
|
||||
description of \fBCHANSRV_LOG_PATH\fP above for the file's location.
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp\-sesman (8),
|
||||
.BR sesman.ini (5).
|
||||
|
||||
For more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,27 +0,0 @@
|
||||
.TH "xrdp-dis" "1" "@PACKAGE_VERSION@" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-dis \- xrdp disconnect utility
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B xrdp\-dis
|
||||
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
\fBxrdp\-dis\fP is run with no parameters to disconnect your xrdp session.
|
||||
|
||||
.SH ENVIRONMENT
|
||||
.TP
|
||||
.B DISPLAY
|
||||
to get the default host and display number.
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.I @socketdir@/xrdp_disconnect_display_*
|
||||
UNIX socket used to communicate the disconnect request to xorgxrdp.
|
||||
|
||||
.SH KNOWN ISSUES
|
||||
.TP
|
||||
This utility doesn't support disconnecting Xvnc sessions so far.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR xrdp (8).
|
@ -1,73 +0,0 @@
|
||||
.TH "xrdp\-genkeymap" "8" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.de URL
|
||||
. \\$2 \(laURL: \\$1 \(ra\\$3
|
||||
..
|
||||
.if \n[.g] .mso www.tmac
|
||||
|
||||
.SH "NAME"
|
||||
\fBxrdp\-genkeymap\fR \- key map generator for XRDP
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp\-genkeymap
|
||||
.I file
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\-genkeymap\fR extracts the key map used by the currently running X session to generated a mapping from Remote Desktop Protocol (RDP) key codes to X keysyms and Unicode code points.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.I outfile
|
||||
The key map information is stored in the file named \fIoutfile\fP.
|
||||
|
||||
.SH "FILES"
|
||||
.TP
|
||||
.I @sysconfdir@/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 00000405
|
||||
cs Czech
|
||||
.TP
|
||||
.B 00000407
|
||||
de German
|
||||
.TP
|
||||
.B 00000409
|
||||
en-us US English
|
||||
.TP
|
||||
.B 0000040c
|
||||
fr French
|
||||
.TP
|
||||
.B 00000410
|
||||
it Italian
|
||||
.TP
|
||||
.B 00000416
|
||||
br Portuguese (Brazil)
|
||||
.TP
|
||||
.B 00000419
|
||||
ru Russian
|
||||
.TP
|
||||
.B 0000041d
|
||||
se Swedish
|
||||
.TP
|
||||
.B 00000809
|
||||
en-uk UK English
|
||||
.RE
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp (8),
|
||||
.BR setxkbmap (1),
|
||||
.BR unicode (7)
|
||||
.PP
|
||||
Description of Keyboard Input mapping on the
|
||||
.UR https://github.com/FreeRDP/FreeRDP/wiki/Keyboard
|
||||
FreeRDP wiki
|
||||
.UE
|
||||
.PP
|
||||
For more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,44 +0,0 @@
|
||||
.\" Hey, EMACS: -*- nroff -*-
|
||||
.\"-
|
||||
.\" Copyright © 2007, 2008 Vincent Bernat <bernat@debian.org>
|
||||
.\" License: GPL-2+
|
||||
.\"-
|
||||
.TH xrdp\-keygen 8 "@PACKAGE_VERSION@" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-keygen \- xrdp RSA key generation utility
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B xrdp\-keygen xrdp
|
||||
< \fIoutfile\fP | \fBauto\fP >
|
||||
.br
|
||||
.B xrdp\-keygen test
|
||||
|
||||
.SH DESCRIPTION
|
||||
\fBxrdp\-keygen\fP generates the file
|
||||
.I @sysconfdir@/xrdp/rsakeys.ini
|
||||
which contains the RSA key pair used to perform authentication to
|
||||
remote clients. The public key is self-signed.
|
||||
|
||||
.SH OPTIONS
|
||||
This program takes one of the following options:
|
||||
.TP
|
||||
\fBxrdp\fP \fIoutfile\fP
|
||||
Generate a new key pair.
|
||||
The key data is stored in the file named \fIoutfile\fP.
|
||||
.br
|
||||
If \fBauto\fP is used as \fIoutfile\fP, the default file \fI@sysconfdir@/xrdp/rsakeys.ini\fP gets created if it does not yet exists.
|
||||
.TP
|
||||
.B test
|
||||
Generate a test key pair and print information to standard output.
|
||||
|
||||
.SH FILES
|
||||
.TP
|
||||
.I @sysconfdir@/xrdp/rsakeys.ini
|
||||
RSA public and private key pair used to identify this XRDP server.
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR xrdp (8),
|
||||
.BR xrdp\-sesman (8).
|
||||
|
||||
.SH AUTHOR
|
||||
This manual page was originally written by Vincent Bernat <bernat@luffy.cx>.
|
@ -1,62 +0,0 @@
|
||||
.TH "xrdp-sesadmin" "8" "@PACKAGE_VERSION@" "xrdp team"
|
||||
.SH NAME
|
||||
xrdp\-sesadmin \- console XRDP sessions administration tool
|
||||
|
||||
.SH SYNOPSIS
|
||||
.B xrdp\-sesadmin
|
||||
.RI [ options ]
|
||||
.BI -c= command
|
||||
|
||||
.SH DESCRIPTION
|
||||
This manual page documents briefly the
|
||||
.B xrdp\-sesadmin
|
||||
command.
|
||||
.PP
|
||||
\fBxrdp\-sesadmin\fP is a console program to administer running XRDP sessions.
|
||||
|
||||
.SH OPTIONS
|
||||
A summary of options is included below.
|
||||
.TP
|
||||
.BI \-u= username
|
||||
\fIUsername\fP for authentication on the server.
|
||||
Defaults to \fBroot\fP.
|
||||
|
||||
.TP
|
||||
.BI \-p= password
|
||||
The \fIpassword\fP to authenticate with.
|
||||
The default is to ask for the password interactively.
|
||||
|
||||
.TP
|
||||
.BI \-s= server
|
||||
The host address of the \fIserver\fP to connect to.
|
||||
Defaults to \fBlocalhost\fP.
|
||||
|
||||
.TP
|
||||
.BI \-i= port
|
||||
The TCP \fIport\fP number to connect to.
|
||||
Defaults to \fB3350\fP.
|
||||
|
||||
.TP
|
||||
.BI \-c= command
|
||||
Specifies the \fIcommand\fP to execute on the server.
|
||||
Valid commands are:
|
||||
.RS 4
|
||||
.TP
|
||||
.B list
|
||||
List currently active sessions.
|
||||
.TP
|
||||
.BI kill: sid
|
||||
Kills the session specified the given \fIsession id\fP.
|
||||
(not yet implemented).
|
||||
.RE
|
||||
|
||||
.SH FILES
|
||||
xrdp\-sesadmin.log
|
||||
|
||||
.SH SEE ALSO
|
||||
.BR xrdp (8).
|
||||
|
||||
More info on \fBxrdp\fR can be found on the
|
||||
.UR @xrdphomeurl@
|
||||
xrdp homepage
|
||||
.UE
|
@ -1,75 +0,0 @@
|
||||
.TH "xrdp\-sesman" "8" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
xrdp\-sesman \- \fBxrdp\fR(8) session manager
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp\-sesman
|
||||
\-\-kill
|
||||
.br
|
||||
.B xrdp\-sesman
|
||||
\-\-help
|
||||
.br
|
||||
.B xrdp\-sesman
|
||||
\-\-version
|
||||
.br
|
||||
.B xrdp\-sesman
|
||||
[\-\-nodaemon] [\-\-dump\-config] [\-\-config /path/to/sesman.ini]
|
||||
|
||||
.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.
|
||||
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
\fB\-k\fR, \fB\-\-kill\fR
|
||||
Kills running \fBxrdp\-sesman\fR daemon.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
Output help information and exit.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Output version information and exit.
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-nodaemon\fR
|
||||
Starts \fBxrdp\-sesman\fR in foreground instead of starting it as a daemon.
|
||||
.TP
|
||||
\fB\-\-dump\-config\fR
|
||||
Print the configuration on stdout before starting the daemon.
|
||||
The default is not to do this.
|
||||
.TP
|
||||
\fB\-c\fR, \fB\-\-config\fR
|
||||
Specify a path to a different \fIsesman.ini\fR file. This option is intended
|
||||
to be used primarily for testing or for unusual configurations.
|
||||
.P
|
||||
.RS
|
||||
If you use this option, be aware that you will have to have a
|
||||
\fB@sysconfdir@/xrdp/sesman.ini\fR in place too, as a few elements of
|
||||
the system (notably \fBxrdp(8)\fR and \fBxrdp\-chansrv(8)\fR) will want
|
||||
to read it.
|
||||
.RE
|
||||
.SH "FILES"
|
||||
@sbindir@/xrdp\-sesman
|
||||
.br
|
||||
@bindir@/xrdp\-sesrun
|
||||
.br
|
||||
@sysconfdir@/xrdp/sesman.ini
|
||||
.br
|
||||
@localstatedir@/log/xrdp\-sesman.log
|
||||
.br
|
||||
@localstatedir@/run/xrdp\-sesman.pid
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR sesman.ini (5),
|
||||
.BR xrdp\-sesrun (8),
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
for more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,99 +0,0 @@
|
||||
.TH "xrdp\-sesrun" "8" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp\-sesrun\fR \- \fBxrdp\-sesman\fR(8) session launcher
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp\-sesrun
|
||||
.I [ options ] username
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\-sesrun\fR starts a session using \fBxrdp\-sesman\fR(8).
|
||||
.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.
|
||||
|
||||
Default values for the options are set at compile-time. Run the utility without
|
||||
a username to see what the defaults are for your installation.
|
||||
|
||||
The utility prompts for a password if neither \fB-p\fR or \fB-F\fR is used.
|
||||
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
.B -g <width>x<height>
|
||||
Set session geometry.
|
||||
.br
|
||||
Note that most configurations will resize the session on connection, so this
|
||||
option may not do what you expect.
|
||||
.TP
|
||||
.B -b <bits-per-pixel>
|
||||
Set session bits-per-pixel (colour depth). Some session types (i.e. Xorg)
|
||||
will ignore this setting.
|
||||
.TP
|
||||
.B -s <server>
|
||||
Server on which sesman is running (probably 'localhost').
|
||||
.br
|
||||
Use of this option is discouraged as it will be removed in the future.
|
||||
.TP
|
||||
.B -t <session-type>
|
||||
Session type - one of Xorg, Xvnc or X11rdp. Alternatively, for testing
|
||||
only, use the numeric session code.
|
||||
.TP
|
||||
.B -D <directory>
|
||||
Directory to run the new session in. Defaults to $HOME for the specified user.
|
||||
.TP
|
||||
.B -S <shell>
|
||||
Specify an alternate shell to run, instead of the default window manager.
|
||||
.TP
|
||||
.B -p <password>
|
||||
Password for user. USE FOR TESTING ONLY - the password will be visible
|
||||
in the output of the \fBps\fR command.
|
||||
.TP
|
||||
.B -F <file-descriptor>
|
||||
Specify a file descriptor (normally 0) to read the password in from. This
|
||||
is a secure way to pass the password in to the utility.
|
||||
.TP
|
||||
.B -c <sesman-ini>
|
||||
Specify a different sesman.ini file. This file is used to find out how to
|
||||
connect to \fBxrdp\-sesman\fR.
|
||||
|
||||
.SH "ENVIRONMENT"
|
||||
.TP
|
||||
.I SESRUN_LOG_LEVEL
|
||||
Override the default logging level. One of "error", "warn", "info",
|
||||
"debug", "trace" or a number 1-5.
|
||||
|
||||
.SH "EXAMPLES"
|
||||
.TP
|
||||
.B
|
||||
xrdp-sesrun -F 0 user1 <passwd.txt
|
||||
Create a default session for user \fBuser1\fR with a password from
|
||||
a file
|
||||
.TP
|
||||
.B
|
||||
xrdp-sesrun -t Xvnc -S /usr/bin/xterm user1
|
||||
Create an extremely minimal Xvnc session for user \fBuser1\fR. This
|
||||
could be useful for debugging why the standard session is not starting
|
||||
properly. Note you would need to install the \fBxterm\fR utility
|
||||
first. The \fBgnome\-terminal\fR utility probably won't work here.
|
||||
|
||||
.SH "FILES"
|
||||
@sbindir@/xrdp\-sesman
|
||||
.br
|
||||
@bindir@/xrdp\-sesrun
|
||||
.br
|
||||
@sysconfdir@/xrdp/sesman.ini
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp\-sesman (8),
|
||||
.BR sesman.ini (5),
|
||||
.BR xrdp (8),
|
||||
.BR xrdp.ini (5)
|
||||
|
||||
For more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,79 +0,0 @@
|
||||
.TH "xrdp" "8" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp\fR \- a Remote Desktop Protocol (RDP) server
|
||||
|
||||
.SH "SYNTAX"
|
||||
.B xrdp
|
||||
\-\-kill
|
||||
.br
|
||||
.B xrdp
|
||||
\-\-help
|
||||
.br
|
||||
.B xrdp
|
||||
\-\-version
|
||||
.br
|
||||
.B xrdp
|
||||
[\-\-nodaemon] [\-\-port port] [\-\-fork] [\-\-dump\-config] [\-\-config /path/to/xrdp.ini]
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
\fBxrdp\fR is a Remote Desktop Protocol (RDP) Server.
|
||||
.br
|
||||
Unlike Windows NT/2000/2003 server, \fBxrdp\fR will not display a Windows desktop but an X window desktop to the user.
|
||||
|
||||
It can also be used as a VNC\->RDP bridge.
|
||||
|
||||
.SH "OPTIONS"
|
||||
.TP
|
||||
\fB\-k\fR, \fB\-\-kill\fR
|
||||
Kill running \fBxrdp\fR daemon.
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
Output help information and exit.
|
||||
.TP
|
||||
\fB\-v\fR, \fB\-\-version\fR
|
||||
Output version information and exit.
|
||||
.TP
|
||||
\fB\-n\fR, \fB\-\-nodaemon\fR
|
||||
Start \fBxrdp\fR in foreground instead of starting it as a daemon.
|
||||
.TP
|
||||
\fB\-p\fR, \fB\-\-port\fR
|
||||
Specify TCP port to listen to. This overrides \fIport\fR setting in
|
||||
\fIxrdp.ini\fR file.
|
||||
.TP
|
||||
\fB\-f\fR, \fB\-\-fork\fR
|
||||
Fork a new process on a new connection. If not enabled, use a new thread
|
||||
for every connection. This overrides \fIfork\fR setting in
|
||||
\fIxrdp.ini\fR file.
|
||||
.TP
|
||||
\fB\-\-dump\-config\fR
|
||||
Print the configuration on stdout before starting the daemon.
|
||||
The default is not to do this.
|
||||
.TP
|
||||
\fB\-c\fR, \fB\-\-config\fR
|
||||
Specify a path to a different \fIxrdp.ini\fR file. This option is intended
|
||||
to be used primarily for testing or for unusual configurations.
|
||||
|
||||
|
||||
.SH "FILES"
|
||||
@sbindir@/xrdp
|
||||
.br
|
||||
@sysconfdir@/xrdp/xrdp.ini
|
||||
.br
|
||||
@localstatedir@/log/xrdp.log
|
||||
.br
|
||||
@localstatedir@/run/xrdp.pid
|
||||
|
||||
.SH "AUTHORS"
|
||||
Jay Sorg <jsorg71@users.sourceforge.net>
|
||||
.br
|
||||
Simone Fedele <ilsimo@users.sourceforge.net>
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp.ini (5),
|
||||
.BR sesman (8),
|
||||
.BR sesman.ini (5),
|
||||
.BR sesrun (8)
|
||||
|
||||
for more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,378 +0,0 @@
|
||||
.TH "xrdp.ini" "5" "@PACKAGE_VERSION@" "xrdp team" ""
|
||||
.SH "NAME"
|
||||
\fBxrdp.ini\fR \- Configuration file for \fBxrdp\fR(8)
|
||||
|
||||
.SH "DESCRIPTION"
|
||||
This is the man page for \fBxrdp.ini\fR, \fBxrdp\fR(8) configuration file.
|
||||
It is composed by a number of sections, each one composed by a section name, enclosed by square brackets, followed by a list of \fI<parameter>\fR=\fI<value>\fR lines.
|
||||
|
||||
\fBxrdp.ini\fR supports the following sections:
|
||||
|
||||
.TP
|
||||
\fB[Globals]\fP \- sets some global configuration settings for \fBxrdp\fR(8).
|
||||
|
||||
.TP
|
||||
\fB[Logging]\fP \- logging subsystem parameters
|
||||
|
||||
.TP
|
||||
\fB[Channels]\fP \- channel subsystem parameters
|
||||
|
||||
.LP
|
||||
All options and values (except for file names and paths) are case insensitive, and are described in detail below.
|
||||
|
||||
.SH "GLOBALS"
|
||||
The options to be specified in the \fB[Globals]\fR section are the following:
|
||||
|
||||
.TP
|
||||
\fBautorun\fP=\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[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[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[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
|
||||
\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@sysconfdir@/xrdp/cert.pem\fP, \fB@sysconfdir@/xrdp/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=\fI[low|medium|high|fips]\fP
|
||||
.\" <http://blogs.msdn.com/b/openspecification/archive/2011/12/08/encryption-negotiation-in-rdp-connection.aspx>
|
||||
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.
|
||||
.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 (client compatible).
|
||||
.TP
|
||||
.B high
|
||||
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
|
||||
.I enforces FIPS-compliance mode.
|
||||
.RE
|
||||
|
||||
.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[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|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
|
||||
Specify TCP port and interface to listen on for incoming connections.
|
||||
Specifying only the port means that xrdp will listen on all interfaces.
|
||||
The default port for RDP is \fB3389\fP.
|
||||
Multiple address:port instances must be separated by spaces or commas. Check the .ini file for examples.
|
||||
Specifying interfaces requires said interfaces to be UP before xrdp starts.
|
||||
|
||||
.TP
|
||||
\fBrequire_credentials\fP=\fI[true|false]\fP
|
||||
If set to \fB1\fP, \fBtrue\fP or \fByes\fP, \fBxrdp\fP will scan the user name provided by the
|
||||
client for the ASCII field separator character (0x1F). It will then copy over what is after the
|
||||
separator as the password supplied by the user and treats it as autologon. If not specified,
|
||||
defaults to \fBfalse\fP.
|
||||
|
||||
.TP
|
||||
\domain_user_separator\fP=\separator\fP
|
||||
If specified the domain name supplied by the client is appended to the username separated
|
||||
by \fBseparator\fP.
|
||||
|
||||
.TP
|
||||
\enable_token_login\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
|
||||
\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
|
||||
\fBssl_protocols\fP=\fI[SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]\fP
|
||||
Enables the specified SSL/TLS protocols. Each value should be separated by comma.
|
||||
SSLv2 is always disabled. At least one protocol should be given to accept TLS connections.
|
||||
This parameter is effective only if \fBsecurity_layer\fP is set to \fBtls\fP or \fBnegotiate\fP.
|
||||
|
||||
.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
|
||||
\fBgrey\fP=\fIc0c0c0\fP
|
||||
.TP
|
||||
\fBdark_grey\fP=\fI808080\fP
|
||||
.TP
|
||||
\fBblue\fP=\fI0000ff\fP
|
||||
.TP
|
||||
\fBdark_blue\fP=\fI00007f\fP
|
||||
.TP
|
||||
\fBwhite\fP=\fIffffff\fP
|
||||
.TP
|
||||
\fBred\fP=\fIff0000\fP
|
||||
.TP
|
||||
\fBgreen\fP=\fI00ff00\fP
|
||||
.TP
|
||||
\fBbackground\fP=\fI000000\fP
|
||||
These options override the colors used internally by \fBxrdp\fP(8) to draw the login and log windows.
|
||||
Colors are defined using a hexadecimal (hex) notation for the combination of Red, Green, and Blue color values (RGB).
|
||||
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:
|
||||
|
||||
.TP
|
||||
\fBLogFile\fR=\fI@localstatedir@/log/xrdp.log\fR
|
||||
This options contains the path to logfile. It can be either absolute or relative.\fR
|
||||
|
||||
.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.
|
||||
|
||||
\fBERROR\fR or \fB1\fR \- Log only 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
|
||||
|
||||
\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[true|false]\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.
|
||||
|
||||
.TP
|
||||
\fBEnableConsole\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging to the console (ie. stdout).
|
||||
|
||||
.TP
|
||||
\fBConsoleLevel\fR=\fIlevel\fR
|
||||
Logging level for the console. It can have the same values as \fBLogLevel\fR. Defaults to \fBDEBUG\fR.
|
||||
|
||||
.TP
|
||||
\fBEnableProcessId\fR=\fI[true|false]\fR
|
||||
If set to \fB1\fR, \fBtrue\fR or \fByes\fR, this option enables logging the process id in all log messages. Defaults to \fBfalse\fR.
|
||||
|
||||
.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 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[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[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[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[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[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[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
|
||||
\fBname\fR=\fI<session name>\fR
|
||||
The name displayed in \fBxrdp\fR(8) login window's combo box.
|
||||
|
||||
.TP
|
||||
\fBlib\fR=\fI../vnc/libvnc.so\fR
|
||||
Sets the library to be used with this connection.
|
||||
|
||||
.TP
|
||||
\fBusername\fR=\fI<username>\fR|\fI{base64}<base64-encoded-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.
|
||||
|
||||
If the username includes comment out symbols such as '#', or ';', the username can be
|
||||
provided in base64 form prefixing "{base64}".
|
||||
|
||||
.TP
|
||||
\fBpassword\fR=\fI<password>\fR|\fI{base64}<base64-encoded-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.
|
||||
|
||||
This parameter can be provided in base64 form as well as username. See also examples below.
|
||||
|
||||
.TP
|
||||
\fBip\fR=\fI127.0.0.1\fR
|
||||
Specifies the ip address of the host to connect to.
|
||||
|
||||
.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
|
||||
\fBdisabled_encodings_mask\fR=\fI<number>\fR
|
||||
Set this bitmask to a non-zero value to prevent \fBxrdp\fR(8) requesting
|
||||
some features from the Xvnc server. You should only need to set this
|
||||
to a non-zero value to work around bugs in your Xvnc server. The bit
|
||||
values supported for a particular release of \fBxrdp\fR(8) are documented in
|
||||
\fBxrdp.ini\fR.
|
||||
|
||||
.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=true
|
||||
bitmap_compression=true
|
||||
|
||||
[Xorg]
|
||||
name=Xorg
|
||||
lib=libxup.so
|
||||
username=ask
|
||||
password=ask
|
||||
ip=127.0.0.1
|
||||
port=-1
|
||||
code=20
|
||||
|
||||
[vnc-any]
|
||||
name=vnc-any
|
||||
lib=libvnc.so
|
||||
ip=ask
|
||||
port=ask5900
|
||||
username=na
|
||||
password={base64}cGFzc3dvcmQhCg==
|
||||
.fi
|
||||
|
||||
.SH "FILES"
|
||||
@sysconfdir@/xrdp/xrdp.ini
|
||||
|
||||
.SH "SEE ALSO"
|
||||
.BR xrdp (8),
|
||||
.BR sesman (8),
|
||||
.BR sesrun (8),
|
||||
.BR sesman.ini (5)
|
||||
|
||||
For more info on \fBxrdp\fR see
|
||||
.UR @xrdphomeurl@
|
||||
.UE
|
@ -1,56 +0,0 @@
|
||||
Compile FAQ
|
||||
|
||||
Q. I get one of the following errors:
|
||||
- "security/pam_appl.h: File or directory doesn't exist"
|
||||
- "configure: error: please install libpam0g-dev or pam-devel"
|
||||
What is wrong?
|
||||
|
||||
A. You need to install the pam development package.
|
||||
For Debian / Ubuntu this package is called libpam0g-dev.
|
||||
For Red Hat / SUSE this package is called pam-devel.
|
||||
|
||||
|
||||
Q. I get an error: "configure: error: please install libssl-dev or openssl-devel"
|
||||
|
||||
A. You need to install the openssl development package.
|
||||
For Debian / Ubuntu this package is called libssl-dev.
|
||||
For Red Hat / Fedora this package is called openssl-devel.
|
||||
For SUSE / openSUSE this package is called libopenssl-devel.
|
||||
|
||||
|
||||
Q. I get one of the following errors:
|
||||
- "configure: error: please install libx11-dev or libX11-devel"
|
||||
- "configure: error: please install libx11-dev and libxfixes-dev or libXfixes-devel"
|
||||
|
||||
A. You need to install the X11 and X11 Xfixes development package(s).
|
||||
For Debian: libx11-dev and libxfixes-dev.
|
||||
For Red Hat / SUSE: libX11-devel and libXfixes-devel.
|
||||
|
||||
|
||||
Q. I get an error: "rail.c:31:35: fatal error: X11/extensions/Xrandr.h: No such file or directory"
|
||||
|
||||
A. You need to install the Xrandr development package.
|
||||
For Debian / Ubuntu this package is called libxrandr-dev.
|
||||
For SUSE / openSUSE this package is called libXrandr-devel.
|
||||
|
||||
Q. How do I configure the same continuous integration bulids for my XRDP fork as the official XRDP repository?
|
||||
|
||||
A. The XRDP project uses both Travis-CI.org and Cirrus-CI.com for continuous integration.
|
||||
Both of these services are free for open source projects (both the official
|
||||
repository and forks), and these services integrate with Github to build any
|
||||
changes pushed to public Github repositories.
|
||||
|
||||
To configure Travis CI for your XRDP fork on github:
|
||||
1. Follow Travis CI instructions for connecting your github account to Travis CI
|
||||
https://docs.travis-ci.com/user/tutorial/#to-get-started-with-travis-ci-using-github
|
||||
2. In the Travis CI dashboard setting page select your XRDP fork repository for building pushed branches.
|
||||
3. Push a commit to a branch in your XRDP fork on github and Travis CI should
|
||||
start building the branch because the XRDP repository already contain a .travis.yml file.
|
||||
|
||||
To configure Cirrus CI for your XRDP fork on github:
|
||||
1. Follow Cirrus CI instructions for connecting your github account to Cirrus CI
|
||||
https://cirrus-ci.org/guide/quick-start/
|
||||
2. In the Github setting page for the Cirrus CI application, enable Cirrus CI
|
||||
access to your XRDP fork repository.
|
||||
3. Push a commit to a branch in your XRDP fork on github and Cirrus CI should
|
||||
start building the branch because the XRDP repository already contain a .cirrus.yml file.
|
@ -1,22 +0,0 @@
|
||||
General FAQ
|
||||
|
||||
Q. What is RDP?
|
||||
|
||||
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 spelled in lower case, is as open source implementation of the
|
||||
RDP protocol.
|
||||
|
||||
|
||||
Q. I can't get xrdp to compile in Ubuntu. What can I do?
|
||||
|
||||
A. See faq-compile.txt.
|
||||
|
||||
|
||||
Q. Can I use LDAP?
|
||||
|
||||
A. Yes, xrdp uses PAM and thus can be configured to use LDAP for authentication.
|
78
file-loc.txt
78
file-loc.txt
@ -1,78 +0,0 @@
|
||||
|
||||
default build will install the following
|
||||
|
||||
/usr/local/lib/xrdp
|
||||
libcommon.so
|
||||
libmc.so
|
||||
libscp.so
|
||||
libvnc.so
|
||||
libxrdp.so
|
||||
libxrdpapi.so
|
||||
libxup.so
|
||||
|
||||
/usr/local/bin
|
||||
xrdp-dis
|
||||
xrdp-genkeymap
|
||||
xrdp-keygen
|
||||
xrdp-sesadmin
|
||||
xrdp-sesrun
|
||||
|
||||
/usr/local/sbin
|
||||
xrdp
|
||||
xrdp-sesman
|
||||
xrdp-sessvc
|
||||
xrdp-chansrv
|
||||
|
||||
/etc/xrdp
|
||||
km-xxxxxxxx.ini
|
||||
sesman.ini
|
||||
rsakeys.ini
|
||||
startwm.sh
|
||||
xrdp.ini
|
||||
xrdp_keyboard.ini
|
||||
|
||||
/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-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
|
||||
xrdp.pid
|
||||
sesman.pid
|
||||
|
||||
/var/log
|
||||
xrdp.log
|
||||
xrdp-sesman.log
|
||||
|
||||
/tmp/.xrdp
|
||||
xrdp*
|
1
fontdump/.gitignore
vendored
1
fontdump/.gitignore
vendored
@ -1 +0,0 @@
|
||||
!Makefile
|
@ -1,17 +0,0 @@
|
||||
|
||||
OBJS = fontdump.obj os_calls.obj
|
||||
|
||||
#CFLAGS = -O2 -I../common
|
||||
CFLAGS = -O2 -I../common -DUNICODE -D_UNICODE
|
||||
LDFLAGS = -W -efontdump.exe
|
||||
|
||||
all: fontdump1
|
||||
|
||||
fontdump1: $(OBJS)
|
||||
$(CC) $(LDFLAGS) $(OBJS)
|
||||
|
||||
clean:
|
||||
del $(OBJS) fontdump.exe *.tds
|
||||
|
||||
os_calls.obj: ../common/os_calls.c
|
||||
$(CC) $(CFLAGS) -c ../common/os_calls.c
|
@ -1,534 +0,0 @@
|
||||
/**
|
||||
* xrdp: A Remote Desktop Protocol server.
|
||||
*
|
||||
* Copyright (C) Jay Sorg 2004-2012
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "os_calls.h"
|
||||
#include "arch.h"
|
||||
|
||||
static HINSTANCE g_instance = 0;
|
||||
static HWND g_wnd = 0;
|
||||
static HWND g_lb = 0;
|
||||
static HWND g_exit_button = 0;
|
||||
static HWND g_go_button = 0;
|
||||
static HWND g_font_list = 0;
|
||||
static char g_font_name[512] = "";
|
||||
static int g_font_size = 10;
|
||||
static HFONT g_font = 0;
|
||||
static int g_running = 0;
|
||||
|
||||
#define FONT_DATASIZE(_w, _h) (((_h * ((_w + 7) / 8)) + 3) & ~3)
|
||||
|
||||
/*****************************************************************************/
|
||||
int
|
||||
check_messages(void)
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
while (PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
|
||||
{
|
||||
GetMessage(&msg, NULL, 0, 0);
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
msg(char *msg1, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char text1[512];
|
||||
|
||||
va_start(ap, msg1);
|
||||
vsnprintf(text1, 511, msg1, ap);
|
||||
SendMessageA(g_lb, LB_ADDSTRING, 0, (LPARAM)text1);
|
||||
va_end(ap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
show_last_error(void)
|
||||
{
|
||||
LPVOID lpMsgBuf;
|
||||
|
||||
FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL, GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
(LPSTR)&lpMsgBuf, 0, NULL);
|
||||
msg("GetLastError - %s", lpMsgBuf);
|
||||
LocalFree(lpMsgBuf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
font_dump(void)
|
||||
{
|
||||
HDC dc;
|
||||
HDC dc1;
|
||||
RECT rect;
|
||||
HBRUSH brush;
|
||||
HGDIOBJ saved;
|
||||
HBITMAP bitmap;
|
||||
BITMAPINFO bi;
|
||||
char *bits;
|
||||
ABC abc;
|
||||
SIZE sz;
|
||||
char filename[256];
|
||||
TCHAR text[256];
|
||||
char zero1;
|
||||
char *bmtext;
|
||||
int bmtextindex;
|
||||
int fd;
|
||||
int x1;
|
||||
int strlen1;
|
||||
int index1;
|
||||
int index2;
|
||||
int len;
|
||||
int pixel;
|
||||
int red;
|
||||
int green;
|
||||
int blue;
|
||||
int width;
|
||||
int height;
|
||||
int roller;
|
||||
int outlen;
|
||||
tui8 b1;
|
||||
short x2;
|
||||
|
||||
if (g_running)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
g_running = 1;
|
||||
msg("starting");
|
||||
g_font_name[0] = 0;
|
||||
SendMessageA(g_font_list, WM_GETTEXT, 255, (LPARAM)g_font_name);
|
||||
|
||||
if (g_strlen(g_font_name) == 0)
|
||||
{
|
||||
msg("error font not set");
|
||||
g_running = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
dc = GetDC(g_wnd);
|
||||
height = -MulDiv(g_font_size, GetDeviceCaps(dc, LOGPIXELSY), 72);
|
||||
g_font = CreateFontA(height, 0, 0, 0, FW_DONTCARE, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, g_font_name);
|
||||
ReleaseDC(g_wnd, dc);
|
||||
|
||||
if (g_font == 0)
|
||||
{
|
||||
msg("error - Font creation failed");
|
||||
}
|
||||
|
||||
zero1 = 0;
|
||||
g_snprintf(filename, 255, "%s-%d.fv1", g_font_name, g_font_size);
|
||||
msg("creating file %s", filename);
|
||||
g_file_delete(filename);
|
||||
fd = g_file_open(filename);
|
||||
g_file_write(fd, "FNT1", 4);
|
||||
strlen1 = g_strlen(g_font_name);
|
||||
g_file_write(fd, g_font_name, strlen1);
|
||||
x1 = strlen1;
|
||||
|
||||
while (x1 < 32)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
x1++;
|
||||
}
|
||||
|
||||
x2 = g_font_size; /* font size */
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
x2 = 1; /* style */
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* pad */
|
||||
index1 = 0;
|
||||
|
||||
while (index1 < 8)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
index1++;
|
||||
}
|
||||
|
||||
for (x1 = 32; x1 < 0x4e00; x1++)
|
||||
{
|
||||
check_messages();
|
||||
dc = GetWindowDC(g_wnd);
|
||||
saved = SelectObject(dc, g_font);
|
||||
|
||||
if (!GetCharABCWidths(dc, x1, x1, &abc))
|
||||
{
|
||||
show_last_error();
|
||||
}
|
||||
|
||||
text[0] = (TCHAR)x1;
|
||||
text[1] = 0;
|
||||
|
||||
if (!GetTextExtentPoint32(dc, text, 1, &sz))
|
||||
{
|
||||
show_last_error();
|
||||
}
|
||||
|
||||
SelectObject(dc, saved);
|
||||
ReleaseDC(g_wnd, dc);
|
||||
|
||||
if ((sz.cx > 0) && (sz.cy > 0))
|
||||
{
|
||||
dc = GetWindowDC(g_wnd);
|
||||
saved = SelectObject(dc, g_font);
|
||||
SetBkColor(dc, RGB(255, 255, 255));
|
||||
|
||||
if (!ExtTextOut(dc, 50, 50, ETO_OPAQUE, 0, text, 1, 0))
|
||||
{
|
||||
show_last_error();
|
||||
}
|
||||
|
||||
SelectObject(dc, saved);
|
||||
ReleaseDC(g_wnd, dc);
|
||||
Sleep(10);
|
||||
/* width */
|
||||
x2 = abc.abcB;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* height */
|
||||
x2 = sz.cy;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* baseline */
|
||||
x2 = -sz.cy;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* offset */
|
||||
x2 = abc.abcA;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* incby */
|
||||
x2 = sz.cx;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* pad */
|
||||
index1 = 0;
|
||||
|
||||
while (index1 < 6)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
index1++;
|
||||
}
|
||||
|
||||
dc = GetWindowDC(g_wnd);
|
||||
rect.left = 50 + abc.abcA;
|
||||
rect.top = 50;
|
||||
rect.right = rect.left + abc.abcB;
|
||||
rect.bottom = rect.top + sz.cy;
|
||||
memset(&bi, 0, sizeof(bi));
|
||||
width = (abc.abcB + 7) & (~7);
|
||||
height = sz.cy;
|
||||
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
|
||||
bi.bmiHeader.biWidth = width;
|
||||
bi.bmiHeader.biHeight = height;
|
||||
bi.bmiHeader.biPlanes = 1;
|
||||
bi.bmiHeader.biBitCount = 32;
|
||||
bitmap = CreateDIBSection(dc, &bi, DIB_RGB_COLORS, (void *)&bits, 0, 0);
|
||||
|
||||
if (bitmap == 0)
|
||||
{
|
||||
msg("error - CreateDIBSection failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(bits, 0, width * height * 4);
|
||||
dc1 = CreateCompatibleDC(dc);
|
||||
SelectObject(dc1, bitmap);
|
||||
|
||||
if (!BitBlt(dc1, 0, 0, width, height, dc, rect.left, rect.top, SRCCOPY))
|
||||
{
|
||||
show_last_error();
|
||||
}
|
||||
|
||||
bmtext = (char *)g_malloc(width * height + 16, 1);
|
||||
bmtextindex = 0;
|
||||
|
||||
for (index1 = (height - 1); index1 >= 0; index1--)
|
||||
{
|
||||
for (index2 = 0; index2 < width; index2++)
|
||||
{
|
||||
pixel = ((int *)bits)[index1 * width + index2];
|
||||
red = (pixel >> 16) & 0xff;
|
||||
green = (pixel >> 8) & 0xff;
|
||||
blue = (pixel >> 0) & 0xff;
|
||||
|
||||
if (red == 0 && green == 0 && blue == 0)
|
||||
{
|
||||
bmtext[bmtextindex] = '1';
|
||||
bmtextindex++;
|
||||
}
|
||||
else
|
||||
{
|
||||
bmtext[bmtextindex] = '0';
|
||||
bmtextindex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
outlen = 0;
|
||||
b1 = 0;
|
||||
roller = 0;
|
||||
len = g_strlen(bmtext);
|
||||
|
||||
for (index2 = 0; index2 < len; index2++)
|
||||
{
|
||||
if (bmtext[index2] == '1')
|
||||
{
|
||||
switch (roller)
|
||||
{
|
||||
case 0:
|
||||
b1 = b1 | 0x80;
|
||||
break;
|
||||
case 1:
|
||||
b1 = b1 | 0x40;
|
||||
break;
|
||||
case 2:
|
||||
b1 = b1 | 0x20;
|
||||
break;
|
||||
case 3:
|
||||
b1 = b1 | 0x10;
|
||||
break;
|
||||
case 4:
|
||||
b1 = b1 | 0x08;
|
||||
break;
|
||||
case 5:
|
||||
b1 = b1 | 0x04;
|
||||
break;
|
||||
case 6:
|
||||
b1 = b1 | 0x02;
|
||||
break;
|
||||
case 7:
|
||||
b1 = b1 | 0x01;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
roller++;
|
||||
|
||||
if (roller == 8)
|
||||
{
|
||||
roller = 0;
|
||||
g_file_write(fd, &b1, 1);
|
||||
outlen++;
|
||||
b1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
while ((outlen % 4) != 0)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
outlen++;
|
||||
}
|
||||
|
||||
free(bmtext);
|
||||
DeleteDC(dc1);
|
||||
DeleteObject(bitmap);
|
||||
}
|
||||
|
||||
if (sz.cx != (long)(abc.abcA + abc.abcB + abc.abcC))
|
||||
{
|
||||
msg("error - width not right 1");
|
||||
}
|
||||
|
||||
brush = CreateSolidBrush(RGB(255, 255, 255));
|
||||
FillRect(dc, &rect, brush);
|
||||
DeleteObject(brush);
|
||||
ReleaseDC(g_wnd, dc);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* write out a blank glyph here */
|
||||
/* width */
|
||||
x2 = 1;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* height */
|
||||
x2 = 1;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* baseline */
|
||||
x2 = 0;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* offset */
|
||||
x2 = 0;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* incby */
|
||||
x2 = 1;
|
||||
g_file_write(fd, (char *)&x2, 2);
|
||||
/* pad */
|
||||
index1 = 0;
|
||||
|
||||
while (index1 < 6)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
index1++;
|
||||
}
|
||||
|
||||
/* blank bitmap */
|
||||
index1 = 0;
|
||||
|
||||
while (index1 < 4)
|
||||
{
|
||||
g_file_write(fd, &zero1, 1);
|
||||
index1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
g_file_close(fd);
|
||||
msg("done");
|
||||
g_running = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static LRESULT CALLBACK
|
||||
wnd_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HBRUSH brush;
|
||||
RECT rect;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_PAINT:
|
||||
BeginPaint(hWnd, &ps);
|
||||
brush = CreateSolidBrush(RGB(255, 255, 255));
|
||||
rect = ps.rcPaint;
|
||||
FillRect(ps.hdc, &rect, brush);
|
||||
DeleteObject(brush);
|
||||
EndPaint(hWnd, &ps);
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
DestroyWindow(g_wnd);
|
||||
g_wnd = 0;
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case WM_TIMER:
|
||||
KillTimer(g_wnd, 1);
|
||||
font_dump();
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
|
||||
if ((HWND)lParam == g_exit_button)
|
||||
{
|
||||
PostMessage(g_wnd, WM_CLOSE, 0, 0);
|
||||
}
|
||||
else if ((HWND)lParam == g_go_button)
|
||||
{
|
||||
while (SendMessage(g_lb, LB_GETCOUNT, 0, 0) > 0)
|
||||
{
|
||||
SendMessage(g_lb, LB_DELETESTRING, 0, 0);
|
||||
}
|
||||
|
||||
SetTimer(g_wnd, 1, 1000, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
create_window(void)
|
||||
{
|
||||
WNDCLASS wc;
|
||||
DWORD style;
|
||||
HDC dc;
|
||||
int height;
|
||||
int left;
|
||||
int top;
|
||||
|
||||
ZeroMemory(&wc, sizeof(wc));
|
||||
wc.lpfnWndProc = wnd_proc; /* points to window procedure */
|
||||
/* name of window class */
|
||||
wc.lpszClassName = _T("fontdump");
|
||||
wc.hCursor = LoadCursor(0, IDC_ARROW);
|
||||
|
||||
/* Register the window class. */
|
||||
if (!RegisterClass(&wc))
|
||||
{
|
||||
return 0; /* Failed to register window class */
|
||||
}
|
||||
|
||||
style = WS_OVERLAPPED | WS_CAPTION | WS_POPUP | WS_MINIMIZEBOX |
|
||||
WS_SYSMENU | WS_SIZEBOX | WS_MAXIMIZEBOX;
|
||||
left = GetSystemMetrics(SM_CXSCREEN) / 2 - 640 / 2;
|
||||
top = GetSystemMetrics(SM_CYSCREEN) / 2 - 480 / 2;
|
||||
g_wnd = CreateWindow(wc.lpszClassName, _T("fontdump"),
|
||||
style, left, top, 640, 480,
|
||||
(HWND) NULL, (HMENU) NULL, g_instance,
|
||||
(LPVOID) NULL);
|
||||
style = WS_CHILD | WS_VISIBLE | WS_BORDER;
|
||||
g_lb = CreateWindow(_T("LISTBOX"), _T("LISTBOX1"), style,
|
||||
200, 10, 400, 400, g_wnd, 0, g_instance, 0);
|
||||
style = WS_CHILD | WS_VISIBLE;
|
||||
g_exit_button = CreateWindow(_T("BUTTON"), _T("Exit"), style,
|
||||
540, 410, 75, 25, g_wnd, 0, g_instance, 0);
|
||||
g_go_button = CreateWindow(_T("BUTTON"), _T("Go"), style,
|
||||
440, 410, 75, 25, g_wnd, 0, g_instance, 0);
|
||||
style = WS_CHILD | WS_VISIBLE | CBS_DROPDOWN;
|
||||
g_font_list = CreateWindow(_T("COMBOBOX"), _T("COMBOBOX1"), style,
|
||||
50, 250, 125, 125, g_wnd, 0, g_instance, 0);
|
||||
ShowWindow(g_wnd, SW_SHOWNORMAL);
|
||||
PostMessage(g_wnd, WM_SETFONT, (WPARAM)g_font, 0);
|
||||
SendMessageA(g_font_list, CB_ADDSTRING, 0, (LPARAM)"Tahoma");
|
||||
SendMessageA(g_font_list, CB_ADDSTRING, 0, (LPARAM)"DejaVu Serif");
|
||||
SendMessageA(g_font_list, CB_ADDSTRING, 0, (LPARAM)"DejaVu Sans");
|
||||
SendMessageA(g_font_list, CB_ADDSTRING, 0, (LPARAM)"Arial");
|
||||
SendMessageA(g_font_list, CB_ADDSTRING, 0, (LPARAM)"Comic Sans MS");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
main_loop(void)
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
return (int)(msg.wParam);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
g_instance = hInstance;
|
||||
create_window();
|
||||
return main_loop();
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
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 = \
|
||||
$(X_PRE_LIBS) -lX11 $(X_EXTRA_LIBS)
|
@ -1,57 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
which setxkbmap
|
||||
if test $? -ne 0
|
||||
then
|
||||
echo "error, setxkbmap not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# English - US 'en-us' 0x00000409
|
||||
setxkbmap -model pc104 -layout us
|
||||
./xrdp-genkeymap ../instfiles/km-00000409.ini
|
||||
|
||||
# English - US 'dvorak' 0x00010409
|
||||
setxkbmap -model pc104 -layout dvorak
|
||||
./xrdp-genkeymap ../instfiles/km-00010409.ini
|
||||
|
||||
# English - US 'dvp' 0x19360409
|
||||
OLD_SETTINGS=$(setxkbmap -query -verbose 4 | sed "s/^\([a-z]\+\):\s*\(.*\)$/-\1 \2/;s/^-options/-option \"\" -option/;s/,/ -option /g" | xargs -d \\n)
|
||||
setxkbmap -rules xfree86 -model pc105 -layout us -variant dvp -option "" -option compose:102 -option caps:shift -option numpad:sg -option numpad:shift3 -option keypad:hex -option keypad:atm -option kpdl:semi -option lv3:ralt_alt
|
||||
./xrdp-genkeymap ../instfiles/km-19360409.ini
|
||||
setxkbmap ${OLD_SETTINGS}
|
||||
|
||||
# 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-00000407.ini
|
||||
|
||||
# Italian 'it' 0x00000410
|
||||
setxkbmap -model pc104 -layout it
|
||||
./xrdp-genkeymap ../instfiles/km-00000410.ini
|
||||
|
||||
# Japanese 'jp' 0x00000411
|
||||
setxkbmap -model pc105 -layout jp -variant OADG109A
|
||||
./xrdp-genkeymap ../instfiles/km-00000411.ini
|
||||
|
||||
# Polish 'pl' 0x00000415
|
||||
setxkbmap -model pc104 -layout pl
|
||||
./xrdp-genkeymap ../instfiles/km-00000415.ini
|
||||
|
||||
# Russia 'ru' 0x00000419
|
||||
setxkbmap -model pc104 -layout ru
|
||||
./xrdp-genkeymap ../instfiles/km-00000419.ini
|
||||
|
||||
# Sweden 'se' 0x0000041d
|
||||
setxkbmap -model pc104 -layout se
|
||||
./xrdp-genkeymap ../instfiles/km-0000041d.ini
|
||||
|
||||
# Portuguese -PT 'pt-pt' 0x00000816
|
||||
setxkbmap -model pc104 -layout pt
|
||||
./xrdp-genkeymap ../instfiles/km-00000816.ini
|
||||
|
||||
# set back to en-us
|
||||
setxkbmap -model pc104 -layout us
|
@ -1,156 +0,0 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
|
||||
/*
|
||||
* evdev-map.c
|
||||
* Copyright (C) Michał Górny 2014 <mgorny@gentoo.org>
|
||||
*
|
||||
* You may redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License, as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* main.cc 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.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with main.cc. If not, write to:
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301, USA
|
||||
*
|
||||
* xfree86(base)->evdev keycode mapping
|
||||
*/
|
||||
|
||||
int xfree86_to_evdev[137-8+1] = {
|
||||
/* MDSW */ 203,
|
||||
/* ESC */ 9,
|
||||
/* AE01 */ 10,
|
||||
/* AE02 */ 11,
|
||||
/* AE03 */ 12,
|
||||
/* AE04 */ 13,
|
||||
/* AE05 */ 14,
|
||||
/* AE06 */ 15,
|
||||
/* AE07 */ 16,
|
||||
/* AE08 */ 17,
|
||||
/* AE09 */ 18,
|
||||
/* AE10 */ 19,
|
||||
/* AE11 */ 20,
|
||||
/* AE12 */ 21,
|
||||
/* BKSP */ 22,
|
||||
/* TAB */ 23,
|
||||
/* AD01 */ 24,
|
||||
/* AD02 */ 25,
|
||||
/* AD03 */ 26,
|
||||
/* AD04 */ 27,
|
||||
/* AD05 */ 28,
|
||||
/* AD06 */ 29,
|
||||
/* AD07 */ 30,
|
||||
/* AD08 */ 31,
|
||||
/* AD09 */ 32,
|
||||
/* AD10 */ 33,
|
||||
/* AD11 */ 34,
|
||||
/* AD12 */ 35,
|
||||
/* RTRN */ 36,
|
||||
/* LCTL */ 37,
|
||||
/* AC01 */ 38,
|
||||
/* AC02 */ 39,
|
||||
/* AC03 */ 40,
|
||||
/* AC04 */ 41,
|
||||
/* AC05 */ 42,
|
||||
/* AC06 */ 43,
|
||||
/* AC07 */ 44,
|
||||
/* AC08 */ 45,
|
||||
/* AC09 */ 46,
|
||||
/* AC10 */ 47,
|
||||
/* AC11 */ 48,
|
||||
/* TLDE */ 49,
|
||||
/* LFSH */ 50,
|
||||
/* BKSL */ 51,
|
||||
/* AB01 */ 52,
|
||||
/* AB02 */ 53,
|
||||
/* AB03 */ 54,
|
||||
/* AB04 */ 55,
|
||||
/* AB05 */ 56,
|
||||
/* AB06 */ 57,
|
||||
/* AB07 */ 58,
|
||||
/* AB08 */ 59,
|
||||
/* AB09 */ 60,
|
||||
/* AB10 */ 61,
|
||||
/* RTSH */ 62,
|
||||
/* KPMU */ 63,
|
||||
/* LALT */ 64,
|
||||
/* SPCE */ 65,
|
||||
/* CAPS */ 66,
|
||||
/* FK01 */ 67,
|
||||
/* FK02 */ 68,
|
||||
/* FK03 */ 69,
|
||||
/* FK04 */ 70,
|
||||
/* FK05 */ 71,
|
||||
/* FK06 */ 72,
|
||||
/* FK07 */ 73,
|
||||
/* FK08 */ 74,
|
||||
/* FK09 */ 75,
|
||||
/* FK10 */ 76,
|
||||
/* NMLK */ 77,
|
||||
/* SCLK */ 78,
|
||||
/* KP7 */ 79,
|
||||
/* KP8 */ 80,
|
||||
/* KP9 */ 81,
|
||||
/* KPSU */ 82,
|
||||
/* KP4 */ 83,
|
||||
/* KP5 */ 84,
|
||||
/* KP6 */ 85,
|
||||
/* KPAD */ 86,
|
||||
/* KP1 */ 87,
|
||||
/* KP2 */ 88,
|
||||
/* KP3 */ 89,
|
||||
/* KP0 */ 90,
|
||||
/* KPDL */ 91,
|
||||
/* SYRQ */ 107,
|
||||
/* II5D */ 0,
|
||||
/* LSGT */ 94,
|
||||
/* FK11 */ 95,
|
||||
/* FK12 */ 96,
|
||||
/* HOME */ 110,
|
||||
/* UP */ 111,
|
||||
/* PGUP */ 112,
|
||||
/* LEFT */ 113,
|
||||
/* II65 */ 0,
|
||||
/* RGHT */ 114,
|
||||
/* END */ 115,
|
||||
/* DOWN */ 116,
|
||||
/* PGDN */ 117,
|
||||
/* INS */ 118,
|
||||
/* DELE */ 119,
|
||||
/* KPEN */ 104,
|
||||
/* RCTL */ 105,
|
||||
/* PAUS */ 127,
|
||||
/* PRSC */ 107,
|
||||
/* KPDV */ 106,
|
||||
/* RALT */ 108,
|
||||
/* BRK */ 419,
|
||||
/* LWIN */ 133,
|
||||
/* RWIN */ 134,
|
||||
/* MENU */ 0,
|
||||
/* FK13 */ 191,
|
||||
/* FK14 */ 192,
|
||||
/* FK15 */ 193,
|
||||
/* FK16 */ 194,
|
||||
/* FK17 */ 195,
|
||||
/* KPDC */ 0,
|
||||
/* LVL3 */ 92,
|
||||
/* ALT */ 204,
|
||||
/* KPEQ */ 125,
|
||||
/* SUPR */ 206,
|
||||
/* HYPR */ 207,
|
||||
/* XFER */ 0,
|
||||
/* I02 */ 0,
|
||||
/* NFER */ 0,
|
||||
/* I04 */ 0,
|
||||
/* AE13 */ 132,
|
||||
/* I06 */ 0,
|
||||
/* I07 */ 0,
|
||||
0,
|
||||
0
|
||||
};
|
@ -1,167 +0,0 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
|
||||
/*
|
||||
* genkeymap.c
|
||||
* Copyright (C) Ádám Wallner 2008 <wallner@bitbaro.hu>
|
||||
*
|
||||
* You may redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License, as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* main.cc 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.
|
||||
* See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with main.cc. If not, write to:
|
||||
* The Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301, USA
|
||||
|
||||
Updated Jay Sorg 2009
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
#include <config_ac.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#include <X11/XKBlib.h>
|
||||
#include <locale.h>
|
||||
|
||||
extern int xfree86_to_evdev[137-8+1];
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *programname;
|
||||
char text[256];
|
||||
char *displayname = NULL;
|
||||
char *outfname;
|
||||
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;
|
||||
int char_count;
|
||||
int nbytes = 0;
|
||||
int unicode;
|
||||
Display *dpy;
|
||||
KeySym ks;
|
||||
FILE *outf;
|
||||
XKeyPressedEvent e;
|
||||
wchar_t wtext[256];
|
||||
XkbDescPtr kbdesc;
|
||||
char *symatom;
|
||||
int is_evdev;
|
||||
|
||||
setlocale(LC_CTYPE, "");
|
||||
programname = argv[0];
|
||||
|
||||
if (argc != 2)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s out_filename\n", programname);
|
||||
fprintf(stderr, "Example: %s /etc/xrdp/km-00000409.ini\n", programname);
|
||||
return 1;
|
||||
}
|
||||
|
||||
outfname = argv[1];
|
||||
dpy = XOpenDisplay(displayname);
|
||||
|
||||
if (!dpy)
|
||||
{
|
||||
fprintf(stderr, "%s: unable to open display '%s'\n",
|
||||
programname, XDisplayName(displayname));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* check whether evdev is used */
|
||||
kbdesc = XkbAllocKeyboard();
|
||||
if (!kbdesc)
|
||||
{
|
||||
fprintf(stderr, "%s: unable to allocate keyboard desc\n",
|
||||
programname);
|
||||
XCloseDisplay(dpy);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (XkbGetNames(dpy, XkbKeycodesNameMask, kbdesc) != Success)
|
||||
{
|
||||
fprintf(stderr, "%s: unable to obtain keycode name for keyboard\n",
|
||||
programname);
|
||||
XkbFreeKeyboard(kbdesc, 0, True);
|
||||
XCloseDisplay(dpy);
|
||||
return 1;
|
||||
}
|
||||
|
||||
symatom = XGetAtomName(dpy, kbdesc->names->keycodes);
|
||||
is_evdev = !strncmp(symatom, "evdev", 5);
|
||||
XFree(symatom);
|
||||
XkbFreeKeyboard(kbdesc, 0, True);
|
||||
|
||||
outf = fopen(outfname, "w");
|
||||
|
||||
if (outf == NULL)
|
||||
{
|
||||
fprintf(stderr, "%s: unable to create file '%s'\n", programname, outfname);
|
||||
XCloseDisplay(dpy);
|
||||
return 1;
|
||||
}
|
||||
|
||||
memset(&e, 0, sizeof(e));
|
||||
e.type = KeyPress;
|
||||
e.serial = 16;
|
||||
e.send_event = True;
|
||||
e.display = dpy;
|
||||
e.same_screen = True;
|
||||
|
||||
for (idx = 0; idx < 8; idx++) /* Sections and states */
|
||||
{
|
||||
fprintf(outf, "[%s]\n", sections[idx]);
|
||||
e.state = states[idx];
|
||||
|
||||
for (i = 8; i < 137; i++) /* Keycodes */
|
||||
{
|
||||
if (is_evdev)
|
||||
e.keycode = xfree86_to_evdev[i-8];
|
||||
else
|
||||
e.keycode = i;
|
||||
nbytes = XLookupString(&e, text, 255, &ks, NULL);
|
||||
text[nbytes] = 0;
|
||||
char_count = mbstowcs(wtext, text, 255);
|
||||
unicode = 0;
|
||||
|
||||
if (char_count == 1)
|
||||
{
|
||||
unicode = wtext[0];
|
||||
}
|
||||
|
||||
fprintf(outf, "Key%d=%d:%d\n", i, (int) ks, unicode);
|
||||
}
|
||||
|
||||
if (idx != 7)
|
||||
{
|
||||
fprintf(outf, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
XCloseDisplay(dpy);
|
||||
fclose(outf);
|
||||
return 0;
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
Creating a new keymap file.
|
||||
---------------------------
|
||||
|
||||
The names of the files are of the format;
|
||||
|
||||
km-xxxxxxxx.ini
|
||||
|
||||
where the xxxxxxxx is replaced by the hex number of the layout of interest.
|
||||
|
||||
The files have 8 sections;
|
||||
|
||||
[noshift], [shift], [altgr], [shiftaltgr], [capslock], [capslockaltgr],
|
||||
[shiftcapslock], [shiftcapslockaltgr]
|
||||
|
||||
In each section there are multiple lines for each key.
|
||||
|
||||
An example line looks like;
|
||||
|
||||
Key10=49:49
|
||||
|
||||
In this line, 10 is the X11 scancode, the first 49 is the keysym value,
|
||||
the second 49 if the unicode value of the key. This is the definition
|
||||
for the 'noshift' '1' key on a en-us keyboard. In this case, the keysym
|
||||
and the unicode value are the same.
|
||||
|
||||
Here is an example where they are not;
|
||||
|
||||
This is the definition for the backspace key;
|
||||
Key22=65288:8
|
||||
|
||||
And this is the star on the keypad;
|
||||
Key63=65450:42
|
||||
|
||||
To create a new file run "xrdp-genkeymap <filename>"
|
||||
|
||||
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.
|
||||
|
||||
Alternatively, create the keymap file in a directory of your choice, then
|
||||
copy or move it over to /etc/xrdp using sudo/su.
|
||||
|
72
index.html
Normal file
72
index.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>xrdp by neutrinolabs</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
|
||||
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
|
||||
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
|
||||
</head>
|
||||
<body>
|
||||
<section class="page-header">
|
||||
<h1 class="project-name">xrdp</h1>
|
||||
<h2 class="project-tagline">an open-source Remote Desktop Protocol server</h2>
|
||||
<a href="https://github.com/neutrinolabs/xrdp" class="btn">View on GitHub</a>
|
||||
<a href="https://github.com/neutrinolabs/xrdp/releases" class="btn">View xrdp releases</a>
|
||||
<a href="https://github.com/neutrinolabs/xorgxrdp/releases" class="btn">View xorgxrdp releases</a>
|
||||
</section>
|
||||
|
||||
<section class="main-content">
|
||||
<h2>
|
||||
<a id="overview" class="anchor" href="#overview" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Overview</h2>
|
||||
|
||||
<p>xrdp provides a graphical login to remote machines using RDP (Microsoft Remote Desktop Protocol). xrdp accepts connections from variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, macOS, iOS and Android).</p>
|
||||
|
||||
<p>As Windows-to-Windows Remote Desktop can, xrdp supports not only graphics remoting but also</p>
|
||||
|
||||
<ul>
|
||||
<li>two-way clipboard transfer (text, bitmap, file)</li>
|
||||
<li>audio redirection</li>
|
||||
<li>drive redirection (mount local client drives on remote machine)</li>
|
||||
</ul>
|
||||
|
||||
<p>RDP transport is encrypted using TLS by default.</p>
|
||||
|
||||
<p><img src="https://github.com/neutrinolabs/xrdp/raw/gh-pages/xrdp_demo.gif" alt="demo"></p>
|
||||
|
||||
<h2>
|
||||
<a id="contact" class="anchor" href="#contact" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Contact</h2>
|
||||
|
||||
<ul>
|
||||
<li>Google Groups:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://groups.google.com/forum/#!forum/xrdp-users">Users Group</a> (<a href="mailto:xrdp-users@googlegroups.com">xrdp-users@googlegroups.com</a>)</li>
|
||||
<li>
|
||||
<a href="https://groups.google.com/forum/#!forum/xrdp-devel">Development Group</a> (<a href="mailto:xrdp-devel@googlegroups.com">xrdp-devel@googlegroups.com</a>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="https://gitter.im/neutrinolabs/xrdp">Gitter Chat</a></li>
|
||||
</ul>
|
||||
|
||||
<h2>
|
||||
<a id="credits" class="anchor" href="#credits" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Credits</h2>
|
||||
|
||||
<ul>
|
||||
<li>Author: Jay Sorg (<a href="https://github.com/jsorg71" class="user-mention">@jsorg71</a>)</li>
|
||||
</ul>
|
||||
|
||||
<footer class="site-footer">
|
||||
<span class="site-footer-owner"><a href="https://github.com/neutrinolabs/xrdp">xrdp</a> is maintained by <a href="https://github.com/neutrinolabs">neutrinolabs</a>.</span>
|
||||
|
||||
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
|
||||
</footer>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
112
index_files/css.css
Normal file
112
index_files/css.css
Normal file
@ -0,0 +1,112 @@
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTa-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTaaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTf8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTT0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url(https://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTegdm0LZdjqr5-oayXSOefg.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+0370-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
|
||||
unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Open Sans'), local('OpenSans'), url(https://fonts.gstatic.com/s/opensans/v13/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
||||
}
|
77
index_files/ga.js
Normal file
77
index_files/ga.js
Normal file
@ -0,0 +1,77 @@
|
||||
(function(){var E;function Aa(a,b){switch(b){case 0:return""+a;case 1:return 1*a;case 2:return!!a;case 3:return 1E3*a}return a}function Ba(a){return"function"==typeof a}function Ca(a){return void 0!=a&&-1<(a.constructor+"").indexOf("String")}function F(a,b){return void 0==a||"-"==a&&!b||""==a}function Da(a){if(!a||""==a)return"";for(;a&&-1<" \n\r\t".indexOf(a.charAt(0));)a=a.substring(1);for(;a&&-1<" \n\r\t".indexOf(a.charAt(a.length-1));)a=a.substring(0,a.length-1);return a}
|
||||
function Ea(){return Math.round(2147483647*Math.random())}function Fa(){}function G(a,b){if(encodeURIComponent instanceof Function)return b?encodeURI(a):encodeURIComponent(a);H(68);return escape(a)}function I(a){a=a.split("+").join(" ");if(decodeURIComponent instanceof Function)try{return decodeURIComponent(a)}catch(b){H(17)}else H(68);return unescape(a)}var Ga=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,!!d):a.attachEvent&&a.attachEvent("on"+b,c)};
|
||||
function Ia(a,b){if(a){var c=J.createElement("script");c.type="text/javascript";c.async=!0;c.src=a;c.id=b;var d=J.getElementsByTagName("script")[0];d.parentNode.insertBefore(c,d);return c}}function K(a){return a&&0<a.length?a[0]:""}function L(a){var b=a?a.length:0;return 0<b?a[b-1]:""}var nf=function(){this.prefix="ga.";this.values={}};nf.prototype.set=function(a,b){this.values[this.prefix+a]=b};nf.prototype.get=function(a){return this.values[this.prefix+a]};
|
||||
nf.prototype.contains=function(a){return void 0!==this.get(a)};function Ka(a){0==a.indexOf("www.")&&(a=a.substring(4));return a.toLowerCase()}
|
||||
function La(a,b){var c,d={url:a,protocol:"http",host:"",path:"",R:new nf,anchor:""};if(!a)return d;c=a.indexOf("://");0<=c&&(d.protocol=a.substring(0,c),a=a.substring(c+3));c=a.search("/|\\?|#");if(0<=c)d.host=a.substring(0,c).toLowerCase(),a=a.substring(c);else return d.host=a.toLowerCase(),d;c=a.indexOf("#");0<=c&&(d.anchor=a.substring(c+1),a=a.substring(0,c));c=a.indexOf("?");0<=c&&(Na(d.R,a.substring(c+1)),a=a.substring(0,c));d.anchor&&b&&Na(d.R,d.anchor);a&&"/"==a.charAt(0)&&(a=a.substring(1));
|
||||
d.path=a;return d}
|
||||
function Oa(a,b){function c(a){var b=(a.hostname||"").split(":")[0].toLowerCase(),c=(a.protocol||"").toLowerCase(),c=1*a.port||("http:"==c?80:"https:"==c?443:"");a=a.pathname||"";0==a.indexOf("/")||(a="/"+a);return[b,""+c,a]}var d=b||J.createElement("a");d.href=J.location.href;var e=(d.protocol||"").toLowerCase(),f=c(d),Be=d.search||"",k=e+"//"+f[0]+(f[1]?":"+f[1]:"");0==a.indexOf("//")?a=e+a:0==a.indexOf("/")?a=k+a:a&&0!=a.indexOf("?")?0>a.split("/")[0].indexOf(":")&&(a=k+f[2].substring(0,f[2].lastIndexOf("/"))+
|
||||
"/"+a):a=k+f[2]+(a||Be);d.href=a;e=c(d);return{protocol:(d.protocol||"").toLowerCase(),host:e[0],port:e[1],path:e[2],Oa:d.search||"",url:a||""}}function Na(a,b){function c(b,c){a.contains(b)||a.set(b,[]);a.get(b).push(c)}for(var d=Da(b).split("&"),e=0;e<d.length;e++)if(d[e]){var f=d[e].indexOf("=");0>f?c(d[e],"1"):c(d[e].substring(0,f),d[e].substring(f+1))}}
|
||||
function Pa(a,b){if(F(a)||"["==a.charAt(0)&&"]"==a.charAt(a.length-1))return"-";var c=J.domain;return a.indexOf(c+(b&&"/"!=b?b:""))==(0==a.indexOf("http://")?7:0==a.indexOf("https://")?8:0)?"0":a};var Qa=0;function Ra(a,b,c){1<=Qa||1<=100*Math.random()||ld()||(a=["utmt=error","utmerr="+a,"utmwv=5.6.7","utmn="+Ea(),"utmsp=1"],b&&a.push("api="+b),c&&a.push("msg="+G(c.substring(0,100))),M.w&&a.push("aip=1"),Sa(a.join("&")),Qa++)};var Ta=0,Ua={};function N(a){return Va("x"+Ta++,a)}function Va(a,b){Ua[a]=!!b;return a}
|
||||
var Wa=N(),Xa=Va("anonymizeIp"),Ya=N(),$a=N(),ab=N(),bb=N(),O=N(),P=N(),cb=N(),db=N(),eb=N(),fb=N(),gb=N(),hb=N(),ib=N(),jb=N(),kb=N(),lb=N(),nb=N(),ob=N(),pb=N(),qb=N(),rb=N(),sb=N(),tb=N(),ub=N(),vb=N(),wb=N(),xb=N(),yb=N(),zb=N(),Ab=N(),Bb=N(),Cb=N(),Db=N(),Eb=N(),Fb=N(!0),Gb=Va("currencyCode"),Hb=Va("page"),Ib=Va("title"),Jb=N(),Kb=N(),Lb=N(),Mb=N(),Nb=N(),Ob=N(),Pb=N(),Qb=N(),Rb=N(),Q=N(!0),Sb=N(!0),Tb=N(!0),Ub=N(!0),Vb=N(!0),Wb=N(!0),Zb=N(!0),$b=N(!0),ac=N(!0),bc=N(!0),cc=N(!0),R=N(!0),dc=N(!0),
|
||||
ec=N(!0),fc=N(!0),gc=N(!0),hc=N(!0),ic=N(!0),jc=N(!0),S=N(!0),kc=N(!0),lc=N(!0),mc=N(!0),nc=N(!0),oc=N(!0),pc=N(!0),qc=N(!0),rc=Va("campaignParams"),sc=N(),tc=Va("hitCallback"),uc=N();N();var vc=N(),wc=N(),xc=N(),yc=N(),zc=N(),Ac=N(),Bc=N(),Cc=N(),Dc=N(),Ec=N(),Fc=N(),Gc=N(),Hc=N(),Ic=N();N();var Mc=N(),Nc=N(),Yb=N(),Jc=N(),Kc=N(),Lc=Va("utmtCookieName"),Cd=Va("displayFeatures"),Oc=N(),of=Va("gtmid"),Oe=Va("uaName"),Pe=Va("uaDomain"),Qe=Va("uaPath"),pf=Va("linkid");var Re=function(){function a(a,c,d){T(qf.prototype,a,c,d)}a("_createTracker",qf.prototype.hb,55);a("_getTracker",qf.prototype.oa,0);a("_getTrackerByName",qf.prototype.u,51);a("_getTrackers",qf.prototype.pa,130);a("_anonymizeIp",qf.prototype.aa,16);a("_forceSSL",qf.prototype.la,125);a("_getPlugin",Pc,120)},Se=function(){function a(a,c,d){T(U.prototype,a,c,d)}Qc("_getName",$a,58);Qc("_getAccount",Wa,64);Qc("_visitCode",Q,54);Qc("_getClientInfo",ib,53,1);Qc("_getDetectTitle",lb,56,1);Qc("_getDetectFlash",
|
||||
jb,65,1);Qc("_getLocalGifPath",wb,57);Qc("_getServiceMode",xb,59);V("_setClientInfo",ib,66,2);V("_setAccount",Wa,3);V("_setNamespace",Ya,48);V("_setAllowLinker",fb,11,2);V("_setDetectFlash",jb,61,2);V("_setDetectTitle",lb,62,2);V("_setLocalGifPath",wb,46,0);V("_setLocalServerMode",xb,92,void 0,0);V("_setRemoteServerMode",xb,63,void 0,1);V("_setLocalRemoteServerMode",xb,47,void 0,2);V("_setSampleRate",vb,45,1);V("_setCampaignTrack",kb,36,2);V("_setAllowAnchor",gb,7,2);V("_setCampNameKey",ob,41);V("_setCampContentKey",
|
||||
tb,38);V("_setCampIdKey",nb,39);V("_setCampMediumKey",rb,40);V("_setCampNOKey",ub,42);V("_setCampSourceKey",qb,43);V("_setCampTermKey",sb,44);V("_setCampCIdKey",pb,37);V("_setCookiePath",P,9,0);V("_setMaxCustomVariables",yb,0,1);V("_setVisitorCookieTimeout",cb,28,1);V("_setSessionCookieTimeout",db,26,1);V("_setCampaignCookieTimeout",eb,29,1);V("_setReferrerOverride",Jb,49);V("_setSiteSpeedSampleRate",Dc,132);a("_trackPageview",U.prototype.Fa,1);a("_trackEvent",U.prototype.F,4);a("_trackPageLoadTime",
|
||||
U.prototype.Ea,100);a("_trackSocial",U.prototype.Ga,104);a("_trackTrans",U.prototype.Ia,18);a("_sendXEvent",U.prototype.ib,78);a("_createEventTracker",U.prototype.ia,74);a("_getVersion",U.prototype.qa,60);a("_setDomainName",U.prototype.B,6);a("_setAllowHash",U.prototype.va,8);a("_getLinkerUrl",U.prototype.na,52);a("_link",U.prototype.link,101);a("_linkByPost",U.prototype.ua,102);a("_setTrans",U.prototype.za,20);a("_addTrans",U.prototype.$,21);a("_addItem",U.prototype.Y,19);a("_clearTrans",U.prototype.ea,
|
||||
105);a("_setTransactionDelim",U.prototype.Aa,82);a("_setCustomVar",U.prototype.wa,10);a("_deleteCustomVar",U.prototype.ka,35);a("_getVisitorCustomVar",U.prototype.ra,50);a("_setXKey",U.prototype.Ca,83);a("_setXValue",U.prototype.Da,84);a("_getXKey",U.prototype.sa,76);a("_getXValue",U.prototype.ta,77);a("_clearXKey",U.prototype.fa,72);a("_clearXValue",U.prototype.ga,73);a("_createXObj",U.prototype.ja,75);a("_addIgnoredOrganic",U.prototype.W,15);a("_clearIgnoredOrganic",U.prototype.ba,97);a("_addIgnoredRef",
|
||||
U.prototype.X,31);a("_clearIgnoredRef",U.prototype.ca,32);a("_addOrganic",U.prototype.Z,14);a("_clearOrganic",U.prototype.da,70);a("_cookiePathCopy",U.prototype.ha,30);a("_get",U.prototype.ma,106);a("_set",U.prototype.xa,107);a("_addEventListener",U.prototype.addEventListener,108);a("_removeEventListener",U.prototype.removeEventListener,109);a("_addDevId",U.prototype.V);a("_getPlugin",Pc,122);a("_setPageGroup",U.prototype.ya,126);a("_trackTiming",U.prototype.Ha,124);a("_initData",U.prototype.initData,
|
||||
2);a("_setVar",U.prototype.Ba,22);V("_setSessionTimeout",db,27,3);V("_setCookieTimeout",eb,25,3);V("_setCookiePersistence",cb,24,1);a("_setAutoTrackOutbound",Fa,79);a("_setTrackOutboundSubdomains",Fa,81);a("_setHrefExamineLimit",Fa,80)};function Pc(a){var b=this.plugins_;if(b)return b.get(a)}
|
||||
var T=function(a,b,c,d){a[b]=function(){try{return void 0!=d&&H(d),c.apply(this,arguments)}catch(a){throw Ra("exc",b,a&&a.name),a;}}},Qc=function(a,b,c,d){U.prototype[a]=function(){try{return H(c),Aa(this.a.get(b),d)}catch(e){throw Ra("exc",a,e&&e.name),e;}}},V=function(a,b,c,d,e){U.prototype[a]=function(f){try{H(c),void 0==e?this.a.set(b,Aa(f,d)):this.a.set(b,e)}catch(Be){throw Ra("exc",a,Be&&Be.name),Be;}}},Te=function(a,b){return{type:b,target:a,stopPropagation:function(){throw"aborted";}}};var Rc=new RegExp(/(^|\.)doubleclick\.net$/i),Sc=function(a,b){return Rc.test(J.location.hostname)?!0:"/"!==b?!1:0!=a.indexOf("www.google.")&&0!=a.indexOf(".google.")&&0!=a.indexOf("google.")||-1<a.indexOf("google.org")?!1:!0},Tc=function(a){var b=a.get(bb),c=a.c(P,"/");Sc(b,c)&&a.stopPropagation()};var Zc=function(){var a={},b={},c=new Uc;this.g=function(a,b){c.add(a,b)};var d=new Uc;this.v=function(a,b){d.add(a,b)};var e=!1,f=!1,Be=!0;this.T=function(){e=!0};this.j=function(a){this.load();this.set(sc,a,!0);a=new Vc(this);e=!1;d.cb(this);e=!0;b={};this.gb();a.Ja()};this.load=function(){e&&(e=!1,this.Ka(),Wc(this),f||(f=!0,c.cb(this),Xc(this),Wc(this)),e=!0)};this.gb=function(){e&&(f?(e=!1,Xc(this),e=!0):this.load())};this.get=function(c){Ua[c]&&this.load();return void 0!==b[c]?b[c]:a[c]};this.set=
|
||||
function(c,d,e){Ua[c]&&this.load();e?b[c]=d:a[c]=d;Ua[c]&&this.gb()};this.Za=function(b){a[b]=this.b(b,0)+1};this.b=function(a,b){var c=this.get(a);return void 0==c||""===c?b:1*c};this.c=function(a,b){var c=this.get(a);return void 0==c?b:c+""};this.Ka=function(){if(Be){var b=this.c(bb,""),c=this.c(P,"/");Sc(b,c)||(a[O]=a[hb]&&""!=b?Yc(b):1,Be=!1)}}};Zc.prototype.stopPropagation=function(){throw"aborted";};
|
||||
var Vc=function(a){var b=this;this.fb=0;var c=a.get(tc);this.Ua=function(){0<b.fb&&c&&(b.fb--,b.fb||c())};this.Ja=function(){!b.fb&&c&&setTimeout(c,10)};a.set(uc,b,!0)};function $c(a,b){b=b||[];for(var c=0;c<b.length;c++){var d=b[c];if(""+a==d||0==d.indexOf(a+"."))return d}return"-"}
|
||||
var bd=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(6!==b.length||ad(b[0],c))return!1;c=1*b[1];var d=1*b[2],e=1*b[3],f=1*b[4];b=1*b[5];if(!(0<=c&&0<d&&0<e&&0<f&&0<=b))return!1;a.set(Q,c);a.set(Vb,d);a.set(Wb,e);a.set(Zb,f);a.set($b,b);return!0},cd=function(a){var b=a.get(Q),c=a.get(Vb),d=a.get(Wb),e=a.get(Zb),f=a.b($b,1);return[a.b(O,1),void 0!=b?b:"-",c||"-",d||"-",e||"-",f].join(".")},dd=function(a){return[a.b(O,1),a.b(cc,0),a.b(R,1),a.b(dc,0)].join(".")},ed=function(a,b,c){c=c?"":a.c(O,
|
||||
"1");var d=b.split(".");if(4!==d.length||ad(d[0],c))d=null;a.set(cc,d?1*d[1]:0);a.set(R,d?1*d[2]:10);a.set(dc,d?1*d[3]:a.get(ab));return null!=d||!ad(b,c)},fd=function(a,b){var c=G(a.c(Tb,"")),d=[],e=a.get(Fb);if(!b&&e){for(var f=0;f<e.length;f++){var Be=e[f];Be&&1==Be.scope&&d.push(f+"="+G(Be.name)+"="+G(Be.value)+"=1")}0<d.length&&(c+="|"+d.join("^"))}return c?a.b(O,1)+"."+c:null},gd=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(2>b.length||ad(b[0],c))return!1;b=b.slice(1).join(".").split("|");
|
||||
0<b.length&&a.set(Tb,I(b[0]));if(1>=b.length)return!0;b=b[1].split(-1==b[1].indexOf(",")?"^":",");for(c=0;c<b.length;c++){var d=b[c].split("=");if(4==d.length){var e={};e.name=I(d[1]);e.value=I(d[2]);e.scope=1;a.get(Fb)[d[0]]=e}}return!0},hd=function(a,b){var c=Ue(a,b);return c?[a.b(O,1),a.b(ec,0),a.b(fc,1),a.b(gc,1),c].join("."):""},Ue=function(a){function b(b,e){if(!F(a.get(b))){var f=a.c(b,""),f=f.split(" ").join("%20"),f=f.split("+").join("%20");c.push(e+"="+f)}}var c=[];b(ic,"utmcid");b(nc,"utmcsr");
|
||||
b(S,"utmgclid");b(kc,"utmgclsrc");b(lc,"utmdclid");b(mc,"utmdsid");b(jc,"utmccn");b(oc,"utmcmd");b(pc,"utmctr");b(qc,"utmcct");return c.join("|")},id=function(a,b,c){c=c?"":a.c(O,"1");b=b.split(".");if(5>b.length||ad(b[0],c))return a.set(ec,void 0),a.set(fc,void 0),a.set(gc,void 0),a.set(ic,void 0),a.set(jc,void 0),a.set(nc,void 0),a.set(oc,void 0),a.set(pc,void 0),a.set(qc,void 0),a.set(S,void 0),a.set(kc,void 0),a.set(lc,void 0),a.set(mc,void 0),!1;a.set(ec,1*b[1]);a.set(fc,1*b[2]);a.set(gc,1*b[3]);
|
||||
Ve(a,b.slice(4).join("."));return!0},Ve=function(a,b){function c(a){return(a=b.match(a+"=(.*?)(?:\\|utm|$)"))&&2==a.length?a[1]:void 0}function d(b,c){c?(c=e?I(c):c.split("%20").join(" "),a.set(b,c)):a.set(b,void 0)}-1==b.indexOf("=")&&(b=I(b));var e="2"==c("utmcvr");d(ic,c("utmcid"));d(jc,c("utmccn"));d(nc,c("utmcsr"));d(oc,c("utmcmd"));d(pc,c("utmctr"));d(qc,c("utmcct"));d(S,c("utmgclid"));d(kc,c("utmgclsrc"));d(lc,c("utmdclid"));d(mc,c("utmdsid"))},ad=function(a,b){return b?a!=b:!/^\d+$/.test(a)};var Uc=function(){this.filters=[]};Uc.prototype.add=function(a,b){this.filters.push({name:a,s:b})};Uc.prototype.cb=function(a){try{for(var b=0;b<this.filters.length;b++)this.filters[b].s.call(W,a)}catch(c){}};function jd(a){100!=a.get(vb)&&a.get(Q)%1E4>=100*a.get(vb)&&a.stopPropagation()}function kd(a){ld(a.get(Wa))&&a.stopPropagation()}function md(a){"file:"==J.location.protocol&&a.stopPropagation()}function Ge(a){He()&&a.stopPropagation()}
|
||||
function nd(a){a.get(Ib)||a.set(Ib,J.title,!0);a.get(Hb)||a.set(Hb,J.location.pathname+J.location.search,!0)}function lf(a){a.get(Wa)&&"UA-XXXXX-X"!=a.get(Wa)||a.stopPropagation()};var od=new function(){var a=[];this.set=function(b){a[b]=!0};this.encode=function(){for(var b=[],c=0;c<a.length;c++)a[c]&&(b[Math.floor(c/6)]^=1<<c%6);for(c=0;c<b.length;c++)b[c]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".charAt(b[c]||0);return b.join("")+"~"}};function H(a){od.set(a)};var W=window,J=document,ld=function(a){var b=W._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===W["ga-disable-"+a])return!0;try{var c=W.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(d){}return!1},He=function(){return W.navigator&&"preview"==W.navigator.loadPurpose},We=function(a,b){setTimeout(a,b)},pd=function(a){var b=[],c=J.cookie.split(";");a=new RegExp("^\\s*"+a+"=\\s*(.*?)\\s*$");for(var d=0;d<c.length;d++){var e=c[d].match(a);e&&b.push(e[1])}return b},X=function(a,b,c,d,e,f){e=
|
||||
ld(e)?!1:Sc(d,c)?!1:He()?!1:!0;e&&((b=mf(b))&&2E3<b.length&&(b=b.substring(0,2E3),H(69)),a=a+"="+b+"; path="+c+"; ",f&&(a+="expires="+(new Date((new Date).getTime()+f)).toGMTString()+"; "),d&&(a+="domain="+d+";"),J.cookie=a)},mf=function(a){if(!a)return a;var b=a.indexOf(";");-1!=b&&(a=a.substring(0,b),H(141));if(!(0<=W.navigator.userAgent.indexOf("Firefox")))return a;a=a.replace(/\n|\r/g," ");for(var b=0,c=a.length;b<c;++b){var d=a.charCodeAt(b)&255;if(10==d||13==d)a=a.substring(0,b)+"?"+a.substring(b+
|
||||
1)}return a};var qd,rd,sd=function(){if(!qd){var a={},b=W.navigator,c=W.screen;a.jb=c?c.width+"x"+c.height:"-";a.P=c?c.colorDepth+"-bit":"-";a.language=(b&&(b.language||b.browserLanguage)||"-").toLowerCase();a.javaEnabled=b&&b.javaEnabled()?1:0;a.characterSet=J.characterSet||J.charset||"-";try{var d;var e=J.documentElement,f=J.body,Be=f&&f.clientWidth&&f.clientHeight,b=[];e&&e.clientWidth&&e.clientHeight&&("CSS1Compat"===J.compatMode||!Be)?b=[e.clientWidth,e.clientHeight]:Be&&(b=[f.clientWidth,f.clientHeight]);
|
||||
d=0>=b[0]||0>=b[1]?"":b.join("x");a.Wa=d}catch(k){H(135)}qd=a}},td=function(){sd();for(var a=qd,b=W.navigator,a=b.appName+b.version+a.language+b.platform+b.userAgent+a.javaEnabled+a.jb+a.P+(J.cookie?J.cookie:"")+(J.referrer?J.referrer:""),b=a.length,c=W.history.length;0<c;)a+=c--^b++;return Yc(a)},ud=function(a){sd();var b=qd;a.set(Lb,b.jb);a.set(Mb,b.P);a.set(Pb,b.language);a.set(Qb,b.characterSet);a.set(Nb,b.javaEnabled);a.set(Rb,b.Wa);if(a.get(ib)&&a.get(jb)){if(!(b=rd)){var c,d,e;d="ShockwaveFlash";
|
||||
if((b=(b=W.navigator)?b.plugins:void 0)&&0<b.length)for(c=0;c<b.length&&!e;c++)d=b[c],-1<d.name.indexOf("Shockwave Flash")&&(e=d.description.split("Shockwave Flash ")[1]);else{d=d+"."+d;try{c=new ActiveXObject(d+".7"),e=c.GetVariable("$version")}catch(f){}if(!e)try{c=new ActiveXObject(d+".6"),e="WIN 6,0,21,0",c.AllowScriptAccess="always",e=c.GetVariable("$version")}catch(Be){}if(!e)try{c=new ActiveXObject(d),e=c.GetVariable("$version")}catch(k){}e&&(e=e.split(" ")[1].split(","),e=e[0]+"."+e[1]+" r"+
|
||||
e[2])}b=e?e:"-"}rd=b;a.set(Ob,rd)}else a.set(Ob,"-")};var vd=function(a){if(Ba(a))this.s=a;else{var b=a[0],c=b.lastIndexOf(":"),d=b.lastIndexOf(".");this.h=this.i=this.l="";-1==c&&-1==d?this.h=b:-1==c&&-1!=d?(this.i=b.substring(0,d),this.h=b.substring(d+1)):-1!=c&&-1==d?(this.l=b.substring(0,c),this.h=b.substring(c+1)):c>d?(this.i=b.substring(0,d),this.l=b.substring(d+1,c),this.h=b.substring(c+1)):(this.i=b.substring(0,d),this.h=b.substring(d+1));this.Xa=a.slice(1);this.Ma=!this.l&&"_require"==this.h;this.J=!this.i&&!this.l&&"_provide"==this.h}},Y=function(){T(Y.prototype,
|
||||
"push",Y.prototype.push,5);T(Y.prototype,"_getPlugin",Pc,121);T(Y.prototype,"_createAsyncTracker",Y.prototype.Sa,33);T(Y.prototype,"_getAsyncTracker",Y.prototype.Ta,34);this.I=new nf;this.eb=[]};E=Y.prototype;E.Na=function(a,b,c){var d=this.I.get(a);if(!Ba(d))return!1;b.plugins_=b.plugins_||new nf;b.plugins_.set(a,new d(b,c||{}));return!0};E.push=function(a){var b=Z.Va.apply(this,arguments),b=Z.eb.concat(b);for(Z.eb=[];0<b.length&&!Z.O(b[0])&&!(b.shift(),0<Z.eb.length););Z.eb=Z.eb.concat(b);return 0};
|
||||
E.Va=function(a){for(var b=[],c=0;c<arguments.length;c++)try{var d=new vd(arguments[c]);d.J?this.O(d):b.push(d)}catch(e){}return b};
|
||||
E.O=function(a){try{if(a.s)a.s.apply(W);else if(a.J)this.I.set(a.Xa[0],a.Xa[1]);else{var b="_gat"==a.i?M:"_gaq"==a.i?Z:M.u(a.i);if(a.Ma){if(!this.Na(a.Xa[0],b,a.Xa[2])){if(!a.Pa){var c=Oa(""+a.Xa[1]);var d=c.protocol,e=J.location.protocol;var f;if(f="https:"==d||d==e?!0:"http:"!=d?!1:"http:"==e)a:{var Be=Oa(J.location.href);if(!(c.Oa||0<=c.url.indexOf("?")||0<=c.path.indexOf("://")||c.host==Be.host&&c.port==Be.port))for(var k="http:"==c.protocol?80:443,Ja=M.S,b=0;b<Ja.length;b++)if(c.host==Ja[b][0]&&
|
||||
(c.port||k)==(Ja[b][1]||k)&&0==c.path.indexOf(Ja[b][2])){f=!0;break a}f=!1}f&&!ld()&&(a.Pa=Ia(c.url))}return!0}}else a.l&&(b=b.plugins_.get(a.l)),b[a.h].apply(b,a.Xa)}}catch(t){}};E.Sa=function(a,b){return M.hb(a,b||"")};E.Ta=function(a){return M.u(a)};var yd=function(){function a(a,b,c,d){void 0==f[a]&&(f[a]={});void 0==f[a][b]&&(f[a][b]=[]);f[a][b][c]=d}function b(a,b,c){if(void 0!=f[a]&&void 0!=f[a][b])return f[a][b][c]}function c(a,b){if(void 0!=f[a]&&void 0!=f[a][b]){f[a][b]=void 0;var c=!0,d;for(d=0;d<Be.length;d++)if(void 0!=f[a][Be[d]]){c=!1;break}c&&(f[a]=void 0)}}function d(a){var b="",c=!1,d,e;for(d=0;d<Be.length;d++)if(e=a[Be[d]],void 0!=e){c&&(b+=Be[d]);for(var c=[],f=void 0,Bd=void 0,Bd=0;Bd<e.length;Bd++)if(void 0!=e[Bd]){f="";1!=
|
||||
Bd&&void 0==e[Bd-1]&&(f+=Bd.toString()+"!");for(var fa=e[Bd],Ke="",Le=void 0,Me=void 0,ga=void 0,Le=0;Le<fa.length;Le++)Me=fa.charAt(Le),ga=k[Me],Ke+=void 0!=ga?ga:Me;f+=Ke;c.push(f)}b+="("+c.join("*")+")";c=!1}else c=!0;return b}var e=this,f=[],Be=["k","v"],k={"'":"'0",")":"'1","*":"'2","!":"'3"};e.Ra=function(a){return void 0!=f[a]};e.A=function(){for(var a="",b=0;b<f.length;b++)void 0!=f[b]&&(a+=b.toString()+d(f[b]));return a};e.Qa=function(a){if(void 0==a)return e.A();for(var b=a.A(),c=0;c<f.length;c++)void 0==
|
||||
f[c]||a.Ra(c)||(b+=c.toString()+d(f[c]));return b};e.f=function(b,c,d){if(!wd(d))return!1;a(b,"k",c,d);return!0};e.o=function(b,c,d){if(!xd(d))return!1;a(b,"v",c,d.toString());return!0};e.getKey=function(a,c){return b(a,"k",c)};e.N=function(a,c){return b(a,"v",c)};e.L=function(a){c(a,"k")};e.M=function(a){c(a,"v")};T(e,"_setKey",e.f,89);T(e,"_setValue",e.o,90);T(e,"_getKey",e.getKey,87);T(e,"_getValue",e.N,88);T(e,"_clearKey",e.L,85);T(e,"_clearValue",e.M,86)};
|
||||
function wd(a){return"string"==typeof a}function xd(a){return!("number"==typeof a||void 0!=Number&&a instanceof Number)||Math.round(a)!=a||isNaN(a)||Infinity==a?!1:!0};var zd=function(a){var b=W.gaGlobal;a&&!b&&(W.gaGlobal=b={});return b},Ad=function(){var a=zd(!0).hid;null==a&&(a=Ea(),zd(!0).hid=a);return a},Dd=function(a){a.set(Kb,Ad());var b=zd();if(b&&b.dh==a.get(O)){var c=b.sid;c&&(a.get(ac)?H(112):H(132),a.set(Zb,c),a.get(Sb)&&a.set(Wb,c));b=b.vid;a.get(Sb)&&b&&(b=b.split("."),a.set(Q,1*b[0]),a.set(Vb,1*b[1]))}};var Ed,Fd=function(a,b,c,d){var e=a.c(bb,""),f=a.c(P,"/");d=void 0!=d?d:a.b(cb,0);a=a.c(Wa,"");X(b,c,f,e,a,d)},Xc=function(a){var b=a.c(bb,"");a.b(O,1);var c=a.c(P,"/"),d=a.c(Wa,"");X("__utma",cd(a),c,b,d,a.get(cb));X("__utmb",dd(a),c,b,d,a.get(db));X("__utmc",""+a.b(O,1),c,b,d);var e=hd(a,!0);e?X("__utmz",e,c,b,d,a.get(eb)):X("__utmz","",c,b,"",-1);(e=fd(a,!1))?X("__utmv",e,c,b,d,a.get(cb)):X("__utmv","",c,b,"",-1)},Wc=function(a){var b=a.b(O,1);if(!bd(a,$c(b,pd("__utma"))))return a.set(Ub,!0),!1;
|
||||
var c=!ed(a,$c(b,pd("__utmb")));a.set(bc,c);id(a,$c(b,pd("__utmz")));gd(a,$c(b,pd("__utmv")));Ed=!c;return!0},Gd=function(a){Ed||0<pd("__utmb").length||(X("__utmd","1",a.c(P,"/"),a.c(bb,""),a.c(Wa,""),1E4),0==pd("__utmd").length&&a.stopPropagation())};var h=0,Jd=function(a){void 0==a.get(Q)?Hd(a):a.get(Ub)&&!a.get(Mc)?Hd(a):a.get(bc)&&Id(a)},Kd=function(a){a.get(hc)&&!a.get(ac)&&(Id(a),a.set(fc,a.get($b)))},Hd=function(a){h++;1<h&&H(137);var b=a.get(ab);a.set(Sb,!0);a.set(Q,Ea()^td(a)&2147483647);a.set(Tb,"");a.set(Vb,b);a.set(Wb,b);a.set(Zb,b);a.set($b,1);a.set(ac,!0);a.set(cc,0);a.set(R,10);a.set(dc,b);a.set(Fb,[]);a.set(Ub,!1);a.set(bc,!1)},Id=function(a){h++;1<h&&H(137);a.set(Wb,a.get(Zb));a.set(Zb,a.get(ab));a.Za($b);a.set(ac,!0);a.set(cc,
|
||||
0);a.set(R,10);a.set(dc,a.get(ab));a.set(bc,!1)};var Ld="daum:q eniro:search_word naver:query pchome:q images.google:q google:q yahoo:p yahoo:q msn:q bing:q aol:query aol:q lycos:q lycos:query ask:q cnn:query virgilio:qs baidu:wd baidu:word alice:qs yandex:text najdi:q seznam:q rakuten:qt biglobe:q goo.ne:MT search.smt.docomo:MT onet:qt onet:q kvasir:q terra:query rambler:query conduit:q babylon:q search-results:q avg:q comcast:q incredimail:q startsiden:q go.mail.ru:q centrum.cz:q 360.cn:q sogou:query tut.by:query globo:q ukr:q so.com:q haosou.com:q auone:q".split(" "),
|
||||
Sd=function(a){if(a.get(kb)&&!a.get(Mc)){var b;b=!F(a.get(ic))||!F(a.get(nc))||!F(a.get(S))||!F(a.get(lc));for(var c={},d=0;d<Md.length;d++){var e=Md[d];c[e]=a.get(e)}(d=a.get(rc))?(H(149),e=new nf,Na(e,d),d=e):d=La(J.location.href,a.get(gb)).R;if("1"!=L(d.get(a.get(ub)))||!b)if(d=Xe(a,d)||Qd(a),d||b||!a.get(ac)||(Pd(a,void 0,"(direct)",void 0,void 0,void 0,"(direct)","(none)",void 0,void 0),d=!0),d&&(a.set(hc,Rd(a,c)),b="(direct)"==a.get(nc)&&"(direct)"==a.get(jc)&&"(none)"==a.get(oc),a.get(hc)||
|
||||
a.get(ac)&&!b))a.set(ec,a.get(ab)),a.set(fc,a.get($b)),a.Za(gc)}},Xe=function(a,b){function c(c,d){d=d||"-";var e=L(b.get(a.get(c)));return e&&"-"!=e?I(e):d}var d=L(b.get(a.get(nb)))||"-",e=L(b.get(a.get(qb)))||"-",f=L(b.get(a.get(pb)))||"-",Be=L(b.get("gclsrc"))||"-",k=L(b.get("dclid"))||"-",Ja=c(ob,"(not set)"),t=c(rb,"(not set)"),Za=c(sb),Ma=c(tb);if(F(d)&&F(f)&&F(k)&&F(e))return!1;var mb=!F(f)&&!F(Be),mb=F(e)&&(!F(k)||mb),Xb=F(Za);if(mb||Xb){var Bd=Nd(a),Bd=La(Bd,!0);(Bd=Od(a,Bd))&&!F(Bd[1]&&
|
||||
!Bd[2])&&(mb&&(e=Bd[0]),Xb&&(Za=Bd[1]))}Pd(a,d,e,f,Be,k,Ja,t,Za,Ma);return!0},Qd=function(a){var b=Nd(a),c=La(b,!0);(b=!(void 0!=b&&null!=b&&""!=b&&"0"!=b&&"-"!=b&&0<=b.indexOf("://")))||(b=c&&-1<c.host.indexOf("google")&&c.R.contains("q")&&"cse"==c.path);if(b)return!1;if((b=Od(a,c))&&!b[2])return Pd(a,void 0,b[0],void 0,void 0,void 0,"(organic)","organic",b[1],void 0),!0;if(b||!a.get(ac))return!1;a:{for(var b=a.get(Bb),d=Ka(c.host),e=0;e<b.length;++e)if(-1<d.indexOf(b[e])){a=!1;break a}Pd(a,void 0,
|
||||
d,void 0,void 0,void 0,"(referral)","referral",void 0,"/"+c.path);a=!0}return a},Od=function(a,b){for(var c=a.get(zb),d=0;d<c.length;++d){var e=c[d].split(":");if(-1<b.host.indexOf(e[0].toLowerCase())){var f=b.R.get(e[1]);if(f&&(f=K(f),!f&&-1<b.host.indexOf("google.")&&(f="(not provided)"),!e[3]||-1<b.url.indexOf(e[3]))){f||H(151);a:{for(var c=f,d=a.get(Ab),c=I(c).toLowerCase(),Be=0;Be<d.length;++Be)if(c==d[Be]){c=!0;break a}c=!1}return[e[2]||e[0],f,c]}}}return null},Pd=function(a,b,c,d,e,f,Be,k,
|
||||
Ja,t){a.set(ic,b);a.set(nc,c);a.set(S,d);a.set(kc,e);a.set(lc,f);a.set(jc,Be);a.set(oc,k);a.set(pc,Ja);a.set(qc,t)},Md=[jc,ic,S,lc,nc,oc,pc,qc],Rd=function(a,b){function c(a){a=(""+a).split("+").join("%20");return a=a.split(" ").join("%20")}function d(c){var d=""+(a.get(c)||"");c=""+(b[c]||"");return 0<d.length&&d==c}if(d(S)||d(lc))return H(131),!1;for(var e=0;e<Md.length;e++){var f=Md[e],Be=b[f]||"-",f=a.get(f)||"-";if(c(Be)!=c(f))return!0}return!1},Td=new RegExp(/^https?:\/\/(www\.)?google(\.com?)?(\.[a-z]{2}t?)?\/?$/i),
|
||||
jf=/^https?:\/\/(r\.)?search\.yahoo\.com?(\.jp)?\/?[^?]*$/i,rf=/^https?:\/\/(www\.)?bing\.com\/?$/i,Nd=function(a){a=Pa(a.get(Jb),a.get(P));try{if(Td.test(a))return H(136),a+"?q=";if(jf.test(a))return H(150),a+"?p=(not provided)";if(rf.test(a))return a+"?q=(not provided)"}catch(b){H(145)}return a};var Ud,Vd,Wd=function(a){Ud=a.c(S,"");Vd=a.c(kc,"")},Xd=function(a){var b=a.c(S,""),c=a.c(kc,"");b!=Ud&&(-1<c.indexOf("ds")?a.set(mc,void 0):!F(Ud)&&-1<Vd.indexOf("ds")&&a.set(mc,Ud))};var Zd=function(a){Yd(a,J.location.href)?(a.set(Mc,!0),H(12)):a.set(Mc,!1)},Yd=function(a,b){if(!a.get(fb))return!1;var c=La(b,a.get(gb)),d=K(c.R.get("__utma")),e=K(c.R.get("__utmb")),f=K(c.R.get("__utmc")),Be=K(c.R.get("__utmx")),k=K(c.R.get("__utmz")),Ja=K(c.R.get("__utmv")),c=K(c.R.get("__utmk"));if(Yc(""+d+e+f+Be+k+Ja)!=c){d=I(d);e=I(e);f=I(f);Be=I(Be);f=$d(d+e+f+Be,k,Ja,c);if(!f)return!1;k=f[0];Ja=f[1]}if(!bd(a,d,!0))return!1;ed(a,e,!0);id(a,k,!0);gd(a,Ja,!0);ae(a,Be,!0);return!0},ce=function(a,
|
||||
b,c){var d;d=cd(a)||"-";var e=dd(a)||"-",f=""+a.b(O,1)||"-",Be=be(a)||"-",k=hd(a,!1)||"-";a=fd(a,!1)||"-";var Ja=Yc(""+d+e+f+Be+k+a),t=[];t.push("__utma="+d);t.push("__utmb="+e);t.push("__utmc="+f);t.push("__utmx="+Be);t.push("__utmz="+k);t.push("__utmv="+a);t.push("__utmk="+Ja);d=t.join("&");if(!d)return b;e=b.indexOf("#");if(c)return 0>e?b+"#"+d:b+"&"+d;c="";f=b.indexOf("?");0<e&&(c=b.substring(e),b=b.substring(0,e));return 0>f?b+"?"+d+c:b+"&"+d+c},$d=function(a,b,c,d){for(var e=0;3>e;e++){for(var f=
|
||||
0;3>f;f++){if(d==Yc(a+b+c))return H(127),[b,c];var Be=b.replace(/ /g,"%20"),k=c.replace(/ /g,"%20");if(d==Yc(a+Be+k))return H(128),[Be,k];Be=Be.replace(/\+/g,"%20");k=k.replace(/\+/g,"%20");if(d==Yc(a+Be+k))return H(129),[Be,k];try{var Ja=b.match("utmctr=(.*?)(?:\\|utm|$)");if(Ja&&2==Ja.length&&(Be=b.replace(Ja[1],G(I(Ja[1]))),d==Yc(a+Be+c)))return H(139),[Be,c]}catch(t){}b=I(b)}c=I(c)}};var de="|",fe=function(a,b,c,d,e,f,Be,k,Ja){var t=ee(a,b);t||(t={},a.get(Cb).push(t));t.id_=b;t.affiliation_=c;t.total_=d;t.tax_=e;t.shipping_=f;t.city_=Be;t.state_=k;t.country_=Ja;t.items_=t.items_||[];return t},ge=function(a,b,c,d,e,f,Be){a=ee(a,b)||fe(a,b,"",0,0,0,"","","");var k;a:{if(a&&a.items_){k=a.items_;for(var Ja=0;Ja<k.length;Ja++)if(k[Ja].sku_==c){k=k[Ja];break a}}k=null}Ja=k||{};Ja.transId_=b;Ja.sku_=c;Ja.name_=d;Ja.category_=e;Ja.price_=f;Ja.quantity_=Be;k||a.items_.push(Ja);return Ja},
|
||||
ee=function(a,b){for(var c=a.get(Cb),d=0;d<c.length;d++)if(c[d].id_==b)return c[d];return null};var he,ie=function(a){if(!he){var b;b=J.location.hash;var c=W.name,d=/^#?gaso=([^&]*)/;if(c=(b=(b=b&&b.match(d)||c&&c.match(d))?b[1]:K(pd("GASO")))&&b.match(/^(?:!([-0-9a-z.]{1,40})!)?([-.\w]{10,1200})$/i))Fd(a,"GASO",""+b,0),M._gasoDomain=a.get(bb),M._gasoCPath=a.get(P),a=c[1],Ia("https://www.google.com/analytics/web/inpage/pub/inpage.js?"+(a?"prefix="+a+"&":"")+Ea(),"_gasojs");he=!0}};var ae=function(a,b,c){c&&(b=I(b));c=a.b(O,1);b=b.split(".");2>b.length||!/^\d+$/.test(b[0])||(b[0]=""+c,Fd(a,"__utmx",b.join("."),void 0))},be=function(a,b){var c=$c(a.get(O),pd("__utmx"));"-"==c&&(c="");return b?G(c):c},Ye=function(a){try{var b=La(J.location.href,!1),c=decodeURIComponent(L(b.R.get("utm_referrer")))||"";c&&a.set(Jb,c);var d=decodeURIComponent(K(b.R.get("utm_expid")))||"";d&&(d=d.split(".")[0],a.set(Oc,""+d))}catch(e){H(146)}},l=function(a){var b=W.gaData&&W.gaData.expId;b&&a.set(Oc,
|
||||
""+b)};var ke=function(a,b){var c=Math.min(a.b(Dc,0),100);if(a.b(Q,0)%100>=c)return!1;c=Ze()||$e();if(void 0==c)return!1;var d=c[0];if(void 0==d||Infinity==d||isNaN(d))return!1;0<d?af(c)?b(je(c)):b(je(c.slice(0,1))):Ga(W,"load",function(){ke(a,b)},!1);return!0},me=function(a,b,c,d){var e=new yd;e.f(14,90,b.substring(0,500));e.f(14,91,a.substring(0,150));e.f(14,92,""+le(c));void 0!=d&&e.f(14,93,d.substring(0,500));e.o(14,90,c);return e},af=function(a){for(var b=1;b<a.length;b++)if(isNaN(a[b])||Infinity==
|
||||
a[b]||0>a[b])return!1;return!0},le=function(a){return isNaN(a)||0>a?0:5E3>a?10*Math.floor(a/10):5E4>a?100*Math.floor(a/100):41E5>a?1E3*Math.floor(a/1E3):41E5},je=function(a){for(var b=new yd,c=0;c<a.length;c++)b.f(14,c+1,""+le(a[c])),b.o(14,c+1,a[c]);return b},Ze=function(){var a=W.performance||W.webkitPerformance;if(a=a&&a.timing){var b=a.navigationStart;if(0==b)H(133);else return[a.loadEventStart-b,a.domainLookupEnd-a.domainLookupStart,a.connectEnd-a.connectStart,a.responseStart-a.requestStart,
|
||||
a.responseEnd-a.responseStart,a.fetchStart-b,a.domInteractive-b,a.domContentLoadedEventStart-b]}},$e=function(){if(W.top==W){var a=W.external,b=a&&a.onloadT;a&&!a.isValidLoadTime&&(b=void 0);2147483648<b&&(b=void 0);0<b&&a.setPageReadyTime();return void 0==b?void 0:[b]}};var cf=function(a){if(a.get(Sb))try{var b;a:{var c=pd(a.get(Oe)||"_ga");if(c&&!(1>c.length)){for(var d=[],e=0;e<c.length;e++){var f;var Be=c[e].split("."),k=Be.shift();if(("GA1"==k||"1"==k)&&1<Be.length){var Ja=Be.shift().split("-");1==Ja.length&&(Ja[1]="1");Ja[0]*=1;Ja[1]*=1;f={Ya:Ja,$a:Be.join(".")}}else f=void 0;f&&d.push(f)}if(1==d.length){b=d[0].$a;break a}if(0!=d.length){var t=a.get(Pe)||a.get(bb),d=bf(d,(0==t.indexOf(".")?t.substr(1):t).split(".").length,0);if(1==d.length){b=d[0].$a;break a}var Za=
|
||||
a.get(Qe)||a.get(P);(c=Za)?(1<c.length&&"/"==c.charAt(c.length-1)&&(c=c.substr(0,c.length-1)),0!=c.indexOf("/")&&(c="/"+c),Za=c):Za="/";d=bf(d,"/"==Za?1:Za.split("/").length,1);b=d[0].$a;break a}}b=void 0}if(b){var Ma=(""+b).split(".");2==Ma.length&&/[0-9.]/.test(Ma)&&(H(114),a.set(Q,Ma[0]),a.set(Vb,Ma[1]),a.set(Sb,!1))}}catch(mb){H(115)}},bf=function(a,b,c){for(var d=[],e=[],f=128,Be=0;Be<a.length;Be++){var k=a[Be];k.Ya[c]==b?d.push(k):k.Ya[c]==f?e.push(k):k.Ya[c]<f&&(e=[k],f=k.Ya[c])}return 0<d.length?
|
||||
d:e};var kf=/^gtm\d+$/,hf=function(a){var b;b=!!a.b(Cd,1);b&&(H(140),"page"!=a.get(sc)?a.set(Kc,"",!0):(b=a.c(Lc,""),b||(b=(b=a.c($a,""))&&"~0"!=b?kf.test(b)?"__utmt_"+G(a.c(Wa,"")):"__utmt_"+G(b):"__utmt"),0<pd(b).length?a.set(Kc,"",!0):(X(b,"1",a.c(P,"/"),a.c(bb,""),a.c(Wa,""),6E5),0<pd(b).length&&(a.set(Kc,Ea(),!0),a.set(Yb,1,!0),a.set(Jc,Ne()+"/r/__utm.gif?",!0)))))};var U=function(a,b,c){function d(a){return function(b){if((b=b.get(Nc)[a])&&b.length)for(var c=Te(e,a),d=0;d<b.length;d++)b[d].call(e,c)}}var e=this;this.a=new Zc;this.get=function(a){return this.a.get(a)};this.set=function(a,b,c){this.a.set(a,b,c)};this.set(Wa,b||"UA-XXXXX-X");this.set($a,a||"");this.set(Ya,c||"");this.set(ab,Math.round((new Date).getTime()/1E3));this.set(P,"/");this.set(cb,63072E6);this.set(eb,15768E6);this.set(db,18E5);this.set(fb,!1);this.set(yb,50);this.set(gb,!1);this.set(hb,
|
||||
!0);this.set(ib,!0);this.set(jb,!0);this.set(kb,!0);this.set(lb,!0);this.set(ob,"utm_campaign");this.set(nb,"utm_id");this.set(pb,"gclid");this.set(qb,"utm_source");this.set(rb,"utm_medium");this.set(sb,"utm_term");this.set(tb,"utm_content");this.set(ub,"utm_nooverride");this.set(vb,100);this.set(Dc,1);this.set(Ec,!1);this.set(wb,"/__utm.gif");this.set(xb,1);this.set(Cb,[]);this.set(Fb,[]);this.set(zb,Ld.slice(0));this.set(Ab,[]);this.set(Bb,[]);this.B("auto");this.set(Jb,J.referrer);Ye(this.a);this.set(Nc,
|
||||
{hit:[],load:[]});this.a.g("0",Zd);this.a.g("1",Wd);this.a.g("2",Jd);this.a.g("3",cf);this.a.g("4",Sd);this.a.g("5",Xd);this.a.g("6",Kd);this.a.g("7",d("load"));this.a.g("8",ie);this.a.v("A",kd);this.a.v("B",md);this.a.v("C",Ge);this.a.v("D",Jd);this.a.v("E",jd);this.a.v("F",Tc);this.a.v("G",ne);this.a.v("H",lf);this.a.v("I",Gd);this.a.v("J",nd);this.a.v("K",ud);this.a.v("L",Dd);this.a.v("M",l);this.a.v("N",hf);this.a.v("O",d("hit"));this.a.v("P",oe);this.a.v("Q",pe);0===this.get(ab)&&H(111);this.a.T();
|
||||
this.H=void 0};E=U.prototype;E.m=function(){var a=this.get(Db);a||(a=new yd,this.set(Db,a));return a};E.La=function(a){for(var b in a){var c=a[b];a.hasOwnProperty(b)&&this.set(b,c,!0)}};E.K=function(a){if(this.get(Ec))return!1;var b=this,c=ke(this.a,function(c){b.set(Hb,a,!0);b.ib(c)});this.set(Ec,c);return c};E.Fa=function(a){a&&Ca(a)?(H(13),this.set(Hb,a,!0)):"object"===typeof a&&null!==a&&this.La(a);this.H=a=this.get(Hb);this.a.j("page");this.K(a)};
|
||||
E.F=function(a,b,c,d,e){if(""==a||!wd(a)||""==b||!wd(b)||void 0!=c&&!wd(c)||void 0!=d&&!xd(d))return!1;this.set(wc,a,!0);this.set(xc,b,!0);this.set(yc,c,!0);this.set(zc,d,!0);this.set(vc,!!e,!0);this.a.j("event");return!0};E.Ha=function(a,b,c,d,e){var f=this.a.b(Dc,0);1*e===e&&(f=e);if(this.a.b(Q,0)%100>=f)return!1;c=1*(""+c);if(""==a||!wd(a)||""==b||!wd(b)||!xd(c)||isNaN(c)||0>c||0>f||100<f||void 0!=d&&(""==d||!wd(d)))return!1;this.ib(me(a,b,c,d));return!0};
|
||||
E.Ga=function(a,b,c,d){if(!a||!b)return!1;this.set(Ac,a,!0);this.set(Bc,b,!0);this.set(Cc,c||J.location.href,!0);d&&this.set(Hb,d,!0);this.a.j("social");return!0};E.Ea=function(){this.set(Dc,10);this.K(this.H)};E.Ia=function(){this.a.j("trans")};E.ib=function(a){this.set(Eb,a,!0);this.a.j("event")};E.ia=function(a){this.initData();var b=this;return{_trackEvent:function(c,d,e){H(91);b.F(a,c,d,e)}}};E.ma=function(a){return this.get(a)};
|
||||
E.xa=function(a,b){if(a)if(Ca(a))this.set(a,b);else if("object"==typeof a)for(var c in a)a.hasOwnProperty(c)&&this.set(c,a[c])};E.addEventListener=function(a,b){var c=this.get(Nc)[a];c&&c.push(b)};E.removeEventListener=function(a,b){for(var c=this.get(Nc)[a],d=0;c&&d<c.length;d++)if(c[d]==b){c.splice(d,1);break}};E.qa=function(){return"5.6.7"};E.B=function(a){this.get(hb);a="auto"==a?Ka(J.domain):a&&"-"!=a&&"none"!=a?a.toLowerCase():"";this.set(bb,a)};E.va=function(a){this.set(hb,!!a)};
|
||||
E.na=function(a,b){return ce(this.a,a,b)};E.link=function(a,b){if(this.a.get(fb)&&a){var c=ce(this.a,a,b);J.location.href=c}};E.ua=function(a,b){this.a.get(fb)&&a&&a.action&&(a.action=ce(this.a,a.action,b))};
|
||||
E.za=function(){this.initData();var a=this.a,b=J.getElementById?J.getElementById("utmtrans"):J.utmform&&J.utmform.utmtrans?J.utmform.utmtrans:null;if(b&&b.value){a.set(Cb,[]);for(var b=b.value.split("UTM:"),c=0;c<b.length;c++){b[c]=Da(b[c]);for(var d=b[c].split(de),e=0;e<d.length;e++)d[e]=Da(d[e]);"T"==d[0]?fe(a,d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8]):"I"==d[0]&&ge(a,d[1],d[2],d[3],d[4],d[5],d[6])}}};E.$=function(a,b,c,d,e,f,Be,k){return fe(this.a,a,b,c,d,e,f,Be,k)};
|
||||
E.Y=function(a,b,c,d,e,f){return ge(this.a,a,b,c,d,e,f)};E.Aa=function(a){de=a||"|"};E.ea=function(){this.set(Cb,[])};E.wa=function(a,b,c,d){var e=this.a;if(0>=a||a>e.get(yb))a=!1;else if(!b||!c||128<b.length+c.length)a=!1;else{1!=d&&2!=d&&(d=3);var f={};f.name=b;f.value=c;f.scope=d;e.get(Fb)[a]=f;a=!0}a&&this.a.gb();return a};E.ka=function(a){this.a.get(Fb)[a]=void 0;this.a.gb()};E.ra=function(a){return(a=this.a.get(Fb)[a])&&1==a.scope?a.value:void 0};
|
||||
E.Ca=function(a,b,c){12==a&&1==b?this.set(pf,c):this.m().f(a,b,c)};E.Da=function(a,b,c){this.m().o(a,b,c)};E.sa=function(a,b){return this.m().getKey(a,b)};E.ta=function(a,b){return this.m().N(a,b)};E.fa=function(a){this.m().L(a)};E.ga=function(a){this.m().M(a)};E.ja=function(){return new yd};E.W=function(a){a&&this.get(Ab).push(a.toLowerCase())};E.ba=function(){this.set(Ab,[])};E.X=function(a){a&&this.get(Bb).push(a.toLowerCase())};E.ca=function(){this.set(Bb,[])};
|
||||
E.Z=function(a,b,c,d,e){if(a&&b){a=[a,b.toLowerCase()].join(":");if(d||e)a=[a,d,e].join(":");d=this.get(zb);d.splice(c?0:d.length,0,a)}};E.da=function(){this.set(zb,[])};E.ha=function(a){this.a.load();var b=this.get(P),c=be(this.a);this.set(P,a);this.a.gb();ae(this.a,c);this.set(P,b)};E.ya=function(a,b){if(0<a&&5>=a&&Ca(b)&&""!=b){var c=this.get(Fc)||[];c[a]=b;this.set(Fc,c)}};E.V=function(a){a=""+a;if(a.match(/^[A-Za-z0-9]{1,5}$/)){var b=this.get(Ic)||[];b.push(a);this.set(Ic,b)}};E.initData=function(){this.a.load()};
|
||||
E.Ba=function(a){a&&""!=a&&(this.set(Tb,a),this.a.j("var"))};var ne=function(a){"trans"!==a.get(sc)&&500<=a.b(cc,0)&&a.stopPropagation();if("event"===a.get(sc)){var b=(new Date).getTime(),c=a.b(dc,0),d=a.b(Zb,0),c=Math.floor((b-(c!=d?c:1E3*c))/1E3*1);0<c&&(a.set(dc,b),a.set(R,Math.min(10,a.b(R,0)+c)));0>=a.b(R,0)&&a.stopPropagation()}},pe=function(a){"event"===a.get(sc)&&a.set(R,Math.max(0,a.b(R,10)-1))};var qe=function(){var a=[];this.add=function(b,c,d){d&&(c=G(""+c));a.push(b+"="+c)};this.toString=function(){return a.join("&")}},re=function(a,b){(b||2!=a.get(xb))&&a.Za(cc)},se=function(a,b){b.add("utmwv","5.6.7");b.add("utms",a.get(cc));b.add("utmn",Ea());var c=J.location.hostname;F(c)||b.add("utmhn",c,!0);c=a.get(vb);100!=c&&b.add("utmsp",c,!0)},te=function(a,b){b.add("utmht",(new Date).getTime());b.add("utmac",Da(a.get(Wa)));a.get(Oc)&&b.add("utmxkey",a.get(Oc),!0);a.get(vc)&&b.add("utmni",1);
|
||||
a.get(of)&&b.add("utmgtm",a.get(of),!0);var c=a.get(Ic);c&&0<c.length&&b.add("utmdid",c.join("."));ff(a,b);!1!==a.get(Xa)&&(a.get(Xa)||M.w)&&b.add("aip",1);void 0!==a.get(Kc)&&b.add("utmjid",a.c(Kc,""),!0);a.b(Yb,0)&&b.add("utmredir",a.b(Yb,0),!0);M.bb||(M.bb=a.get(Wa));(1<M.ab()||M.bb!=a.get(Wa))&&b.add("utmmt",1);b.add("utmu",od.encode())},ue=function(a,b){for(var c=a.get(Fc)||[],d=[],e=1;e<c.length;e++)c[e]&&d.push(e+":"+G(c[e].replace(/%/g,"%25").replace(/:/g,"%3A").replace(/,/g,"%2C")));d.length&&
|
||||
b.add("utmpg",d.join(","))},ff=function(a,b){function c(a,b){b&&d.push(a+"="+b+";")}var d=[];c("__utma",cd(a));c("__utmz",hd(a,!1));c("__utmv",fd(a,!0));c("__utmx",be(a));b.add("utmcc",d.join("+"),!0)},ve=function(a,b){a.get(ib)&&(b.add("utmcs",a.get(Qb),!0),b.add("utmsr",a.get(Lb)),a.get(Rb)&&b.add("utmvp",a.get(Rb)),b.add("utmsc",a.get(Mb)),b.add("utmul",a.get(Pb)),b.add("utmje",a.get(Nb)),b.add("utmfl",a.get(Ob),!0))},we=function(a,b){a.get(lb)&&a.get(Ib)&&b.add("utmdt",a.get(Ib),!0);b.add("utmhid",
|
||||
a.get(Kb));b.add("utmr",Pa(a.get(Jb),a.get(P)),!0);b.add("utmp",G(a.get(Hb),!0),!0)},xe=function(a,b){for(var c=a.get(Db),d=a.get(Eb),e=a.get(Fb)||[],f=0;f<e.length;f++){var Be=e[f];Be&&(c||(c=new yd),c.f(8,f,Be.name),c.f(9,f,Be.value),3!=Be.scope&&c.f(11,f,""+Be.scope))}F(a.get(wc))||F(a.get(xc),!0)||(c||(c=new yd),c.f(5,1,a.get(wc)),c.f(5,2,a.get(xc)),e=a.get(yc),void 0!=e&&c.f(5,3,e),e=a.get(zc),void 0!=e&&c.o(5,1,e));F(a.get(pf))||(c||(c=new yd),c.f(12,1,a.get(pf)));c?b.add("utme",c.Qa(d),!0):
|
||||
d&&b.add("utme",d.A(),!0)},ye=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","tran");d.add("utmtid",b.id_,!0);d.add("utmtst",b.affiliation_,!0);d.add("utmtto",b.total_,!0);d.add("utmttx",b.tax_,!0);d.add("utmtsp",b.shipping_,!0);d.add("utmtci",b.city_,!0);d.add("utmtrg",b.state_,!0);d.add("utmtco",b.country_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d.toString()},ze=function(a,b,c){var d=new qe;re(a,c);se(a,d);d.add("utmt","item");d.add("utmtid",
|
||||
b.transId_,!0);d.add("utmipc",b.sku_,!0);d.add("utmipn",b.name_,!0);d.add("utmiva",b.category_,!0);d.add("utmipr",b.price_,!0);d.add("utmiqt",b.quantity_,!0);xe(a,d);ve(a,d);we(a,d);(b=a.get(Gb))&&d.add("utmcu",b,!0);c||(ue(a,d),te(a,d));return d.toString()},Ae=function(a,b){var c=a.get(sc);if("page"==c)c=new qe,re(a,b),se(a,c),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),c=[c.toString()];else if("event"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","event"),xe(a,c),ve(a,c),we(a,c),b||(ue(a,c),te(a,c)),
|
||||
c=[c.toString()];else if("var"==c)c=new qe,re(a,b),se(a,c),c.add("utmt","var"),!b&&te(a,c),c=[c.toString()];else if("trans"==c)for(var c=[],d=a.get(Cb),e=0;e<d.length;++e){c.push(ye(a,d[e],b));for(var f=d[e].items_,Be=0;Be<f.length;++Be)c.push(ze(a,f[Be],b))}else"social"==c?b?c=[]:(c=new qe,re(a,b),se(a,c),c.add("utmt","social"),c.add("utmsn",a.get(Ac),!0),c.add("utmsa",a.get(Bc),!0),c.add("utmsid",a.get(Cc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),c=[c.toString()]):"feedback"==c?b?c=[]:(c=new qe,
|
||||
re(a,b),se(a,c),c.add("utmt","feedback"),c.add("utmfbid",a.get(Gc),!0),c.add("utmfbpr",a.get(Hc),!0),xe(a,c),ve(a,c),we(a,c),ue(a,c),te(a,c),c=[c.toString()]):c=[];return c},oe=function(a){var b,c=a.get(xb),d=a.get(uc),e=d&&d.Ua,f=0;if(0==c||2==c){var Be=a.get(wb)+"?";b=Ae(a,!0);for(var k=0,Ja=b.length;k<Ja;k++)Sa(b[k],e,Be,!0),f++}if(1==c||2==c)for(b=Ae(a),a=a.c(Jc,""),k=0,Ja=b.length;k<Ja;k++)try{Sa(b[k],e,a),f++}catch(t){t&&Ra(t.name,void 0,t.message)}d&&(d.fb=f)};var Ne=function(){return"https:"==J.location.protocol||M.G?"https://ssl.google-analytics.com":"http://www.google-analytics.com"},Ce=function(a){this.name="len";this.message=a+"-8192"},De=function(a){this.name="ff2post";this.message=a+"-2036"},Sa=function(a,b,c,d){b=b||Fa;if(d||2036>=a.length)gf(a,b,c);else if(8192>=a.length){if(0<=W.navigator.userAgent.indexOf("Firefox")&&![].reduce)throw new De(a.length);df(a,b)||ef(a,b)||Ee(a,b)||b()}else throw new Ce(a.length);},gf=function(a,b,c){c=c||Ne()+"/__utm.gif?";
|
||||
var d=new Image(1,1);d.src=c+a;d.onload=function(){d.onload=null;d.onerror=null;b()};d.onerror=function(){d.onload=null;d.onerror=null;b()}},ef=function(a,b){if(0!=Ne().indexOf(J.location.protocol))return!1;var c;c=W.XDomainRequest;if(!c)return!1;c=new c;c.open("POST",Ne()+"/p/__utm.gif");c.onerror=function(){b()};c.onload=b;c.send(a);return!0},df=function(a,b){var c=W.XMLHttpRequest;if(!c)return!1;var d=new c;if(!("withCredentials"in d))return!1;d.open("POST",Ne()+"/p/__utm.gif",!0);d.withCredentials=
|
||||
!0;d.setRequestHeader("Content-Type","text/plain");d.onreadystatechange=function(){4==d.readyState&&(b(),d=null)};d.send(a);return!0},Ee=function(a,b){if(!J.body)return We(function(){Ee(a,b)},100),!0;a=encodeURIComponent(a);try{var c=J.createElement('<iframe name="'+a+'"></iframe>')}catch(d){c=J.createElement("iframe"),c.name=a}c.height="0";c.width="0";c.style.display="none";c.style.visibility="hidden";var e=Ne()+"/u/post_iframe.html";Ga(W,"beforeunload",function(){c.src="";c.parentNode&&c.parentNode.removeChild(c)});
|
||||
setTimeout(b,1E3);J.body.appendChild(c);c.src=e;return!0};var qf=function(){this.G=this.w=!1;0==Ea()%1E4&&(H(142),this.G=!0);this.C={};this.D=[];this.U=0;this.S=[["www.google-analytics.com","","/plugins/"]];this._gasoCPath=this._gasoDomain=this.bb=void 0;Re();Se()};E=qf.prototype;E.oa=function(a,b){return this.hb(a,void 0,b)};E.hb=function(a,b,c){b&&H(23);c&&H(67);void 0==b&&(b="~"+M.U++);a=new U(b,a,c);M.C[b]=a;M.D.push(a);return a};E.u=function(a){a=a||"";return M.C[a]||M.hb(void 0,a)};E.pa=function(){return M.D.slice(0)};E.ab=function(){return M.D.length};
|
||||
E.aa=function(){this.w=!0};E.la=function(){this.G=!0};var Fe=function(a){if("prerender"==J.visibilityState)return!1;a();return!0};var M=new qf;var Ha=W._gat;Ha&&Ba(Ha._getTracker)?M=Ha:W._gat=M;var Z=new Y;(function(a){if(!Fe(a)){H(123);var b=!1,c=function(){if(!b&&Fe(a)){b=!0;var d=J,e=c;d.removeEventListener?d.removeEventListener("visibilitychange",e,!1):d.detachEvent&&d.detachEvent("onvisibilitychange",e)}};Ga(J,"visibilitychange",c)}})(function(){var a=W._gaq,b=!1;if(a&&Ba(a.push)&&(b="[object Array]"==Object.prototype.toString.call(Object(a)),!b)){Z=a;return}W._gaq=Z;b&&Z.push.apply(Z,a)});function Yc(a){var b=1,c=0,d;if(a)for(b=0,d=a.length-1;0<=d;d--)c=a.charCodeAt(d),b=(b<<6&268435455)+c+(c<<14),c=b&266338304,b=0!=c?b^c>>21:b;return b};})();
|
90
index_files/style.css
Normal file
90
index_files/style.css
Normal file
@ -0,0 +1,90 @@
|
||||
html {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
background-color: white;
|
||||
padding: 1.5em 5em;
|
||||
font-family: 'Open Sans', verdana;
|
||||
font-size: 14px;
|
||||
color: black;
|
||||
}
|
||||
h1 {
|
||||
font-weight: 300;
|
||||
font-size: 270%;
|
||||
color: black;
|
||||
margin-bottom: 0;
|
||||
padding-top: 0.5em;
|
||||
}
|
||||
h1 span {
|
||||
color: #888;
|
||||
}
|
||||
h1 + p {
|
||||
font-size: 130%;
|
||||
margin-top: 0;
|
||||
padding-top: 0;
|
||||
}
|
||||
h2 {
|
||||
font-weight: 400;
|
||||
font-size: 230%;
|
||||
padding-top: 0.3em;
|
||||
color: black;
|
||||
margin-top: 2.6em;
|
||||
}
|
||||
hr + h2 {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.logo {
|
||||
background-image: url('xrdp_logo_nodarkfill-256x75.png');
|
||||
background-repeat: no-repeat;
|
||||
padding-left: 256px;
|
||||
padding-bottom: 6em;
|
||||
}
|
||||
.mytbl {
|
||||
display: table;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
.myrow {
|
||||
display: table-row;
|
||||
}
|
||||
.prop {
|
||||
display: table-cell;
|
||||
text-align: right;
|
||||
padding: 0.2em 0.6em;
|
||||
color: black;
|
||||
white-space: nowrap;
|
||||
}
|
||||
hr {
|
||||
padding: 0;
|
||||
margin: 3em 0 3em 0;
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-color: #ddd;
|
||||
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
}
|
||||
.prop span {
|
||||
background-color: #333;
|
||||
color: white;
|
||||
border-radius: 3px;
|
||||
padding: 4px 0.7em;
|
||||
}
|
||||
.value {
|
||||
display: table-cell;
|
||||
padding: 0.2em 0.5em;
|
||||
padding-bottom: 2em;
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #446;
|
||||
color: #FF9106;
|
||||
padding: 2px 0.4em;
|
||||
}
|
||||
a:hover {
|
||||
background-color: #333;
|
||||
color: white;
|
||||
border-radius: 3px;
|
||||
}
|
BIN
index_files/xrdp_logo_nodarkfill-256x75.png
Normal file
BIN
index_files/xrdp_logo_nodarkfill-256x75.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
54
install.txt
54
install.txt
@ -1,54 +0,0 @@
|
||||
|
||||
Installation directions for xrdp.
|
||||
|
||||
Things you need to compile and install. Most systems don't
|
||||
have these installed by default.
|
||||
gcc and make
|
||||
Header files for pam
|
||||
Header files for openssl
|
||||
|
||||
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 license, I can't include it in this project.
|
||||
|
||||
http://server1.xrdp.org/xrdp/openssl/
|
||||
|
||||
unpack the tarball
|
||||
|
||||
tar -zxvf xrdp-0.1.tar.gz
|
||||
|
||||
this will create a folder xrdp
|
||||
|
||||
switch to the xrdp folder(cd xrdp)
|
||||
|
||||
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 configuration
|
||||
files.
|
||||
|
||||
files and location
|
||||
/usr/local/xrdp/startwm.sh - script that starts the window manager
|
||||
You may need to edit this file to run your window manager.
|
||||
/etc/sesman.ini - sesman configuration file
|
||||
/etc/rsakeys.ini - rsa stuff
|
||||
/etc/xrdp.ini - xrdp configuration file
|
||||
/var/run/sesman.pid
|
||||
/var/rub/xrdp.pid
|
||||
|
||||
Sesman and xrdp both have to be running as root.
|
||||
You should set them to start when the system starts.
|
||||
You can use xrdp_control.sh script to start them.
|
||||
|
||||
To completely remove xrdp
|
||||
remove directory /usr/local/xrdp
|
||||
remove directory /etc/xrdp
|
||||
remove file /var/run/xrdp.pid
|
||||
remove file /var/run/sesman.pid
|
||||
remove any startup links added to /etc/init.d or /etc/rcX.d
|
||||
|
||||
jay.sorg@gmail.com
|
@ -1,103 +0,0 @@
|
||||
EXTRA_DIST = \
|
||||
keymap-names.txt \
|
||||
xrdp-sesman.service.in \
|
||||
xrdp.service.in
|
||||
|
||||
#
|
||||
# substitute directories in service file
|
||||
#
|
||||
CLEANFILES= \
|
||||
xrdp-sesman.service \
|
||||
xrdp.service
|
||||
|
||||
SUBST_VARS = sed \
|
||||
-e 's|@sbindir[@]|$(sbindir)|g' \
|
||||
-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
|
||||
-e 's|@localstatedir[@]|$(localstatedir)|g'
|
||||
|
||||
subst_verbose = $(subst_verbose_@AM_V@)
|
||||
subst_verbose_ = $(subst_verbose_@AM_DEFAULT_V@)
|
||||
subst_verbose_0 = @echo " SUBST $@";
|
||||
|
||||
SUFFIXES = .in
|
||||
.in:
|
||||
$(subst_verbose)$(SUBST_VARS) $< > $@
|
||||
|
||||
#
|
||||
# files for all platforms
|
||||
#
|
||||
startscriptdir=$(sysconfdir)/xrdp
|
||||
|
||||
dist_startscript_DATA = \
|
||||
km-00000406.ini \
|
||||
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-0000080a.ini \
|
||||
km-0000080c.ini \
|
||||
km-00000813.ini \
|
||||
km-00000816.ini \
|
||||
km-0000100c.ini \
|
||||
km-00010409.ini \
|
||||
km-19360409.ini
|
||||
|
||||
#
|
||||
# platform specific files
|
||||
#
|
||||
SUBDIRS =
|
||||
if LINUX
|
||||
SUBDIRS += \
|
||||
pam.d \
|
||||
pulse
|
||||
if HAVE_SYSTEMD
|
||||
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
|
||||
|
||||
if MACOS
|
||||
SUBDIRS += pam.d
|
||||
endif
|
||||
|
||||
#
|
||||
# install-data-hook for each platform
|
||||
# TODO: subst these directories as well as service files
|
||||
#
|
||||
if LINUX
|
||||
# must be tab below
|
||||
install-data-hook:
|
||||
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 \
|
||||
$(DESTDIR)$(sysconfdir)/rc.d/xrdp-sesman
|
||||
endif
|
@ -1,2 +0,0 @@
|
||||
startscriptdir = $(sysconfdir)/default
|
||||
dist_startscript_DATA = xrdp
|
@ -1,5 +0,0 @@
|
||||
# Do we need to start sesman ?
|
||||
SESMAN_START=yes
|
||||
# Do we restart xrdp on upgrade ? If not set to no, any xrdp session will
|
||||
# be shutdown on upgrade.
|
||||
# RESTART_ON_UPGRADE=no
|
@ -1,2 +0,0 @@
|
||||
startscriptdir = $(sysconfdir)/init.d
|
||||
dist_startscript_SCRIPTS = xrdp
|
@ -1,174 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# start/stop xrdp and sesman daemons
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: xrdp
|
||||
# Required-Start: $network $remote_fs
|
||||
# Required-Stop: $network $remote_fs
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Start xrdp and sesman daemons
|
||||
# Description: XRDP uses the Remote Desktop Protocol to present a
|
||||
# graphical login to a remote client allowing connection
|
||||
# to a VNC server or another RDP server.
|
||||
### END INIT INFO
|
||||
|
||||
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/
|
||||
SESMAN_START=yes
|
||||
#USERID=xrdp
|
||||
# the X11rdp backend only works as root at the moment - GH 20/03/2013
|
||||
USERID=root
|
||||
NAME=xrdp
|
||||
DESC="Remote Desktop Protocol server"
|
||||
|
||||
test -x $DAEMON || exit 0
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
check_root() {
|
||||
if [ "$(id -u)" != "0" ]; then
|
||||
log_failure_msg "You must be root to start, stop or restart $NAME."
|
||||
exit 4
|
||||
fi
|
||||
}
|
||||
|
||||
force_stop() {
|
||||
|
||||
DELAY=1
|
||||
PROCLIST="xrdp-sesman xrdp-sessvc xrdp-chansrv X11rdp Xvnc"
|
||||
|
||||
for p in $PROCLIST; do
|
||||
pgrep -x $p >/dev/null && pkill -x $p
|
||||
sleep $DELAY
|
||||
pgrep -x $p >/dev/null && pkill -9 -x $p
|
||||
done
|
||||
# let's not kill ourselves - the init script is called xrdp as well
|
||||
pgrep -fx $DAEMON >/dev/null && pkill -fx $DAEMON
|
||||
sleep $DELAY
|
||||
pgrep -fx $DAEMON >/dev/null && pkill -9 -fx $DAEMON
|
||||
|
||||
rm -f $PIDDIR/xrdp*.pid
|
||||
}
|
||||
|
||||
if [ -r /etc/default/$NAME ]; then
|
||||
. /etc/default/$NAME
|
||||
fi
|
||||
|
||||
# Tasks that can only be run as root
|
||||
if [ "$(id -u)" = "0" ]; then
|
||||
# Check for pid dir
|
||||
if [ ! -d $PIDDIR ] ; then
|
||||
mkdir $PIDDIR
|
||||
fi
|
||||
chown $USERID:$USERID $PIDDIR
|
||||
fi
|
||||
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
check_root
|
||||
exitval=0
|
||||
log_daemon_msg "Starting $DESC "
|
||||
if pidofproc -p $PIDDIR/$NAME.pid $DAEMON > /dev/null; then
|
||||
log_progress_msg "$NAME apparently already running"
|
||||
log_end_msg 0
|
||||
exit 0
|
||||
fi
|
||||
log_progress_msg $NAME
|
||||
start-stop-daemon --start --quiet --oknodo --pidfile $PIDDIR/$NAME.pid \
|
||||
--chuid $USERID:$USERID --exec $DAEMON >/dev/null
|
||||
exitval=$?
|
||||
if [ "$SESMAN_START" = "yes" ] ; then
|
||||
log_progress_msg "sesman"
|
||||
start-stop-daemon --start --quiet --oknodo --pidfile $PIDDIR/xrdp-sesman.pid \
|
||||
--exec $SDAEMON >/dev/null
|
||||
value=$?
|
||||
[ $value -gt 0 ] && exitval=$value
|
||||
fi
|
||||
# Make pidfile readables for all users (for status to work)
|
||||
[ -e $PIDDIR/xrdp-sesman.pid ] && chmod 0644 $PIDDIR/xrdp-sesman.pid
|
||||
[ -e $PIDDIR/$NAME.pid ] && chmod 0644 $PIDDIR/$NAME.pid
|
||||
# Note: Unfortunately, xrdp currently takes too long to create
|
||||
# the pidffile unless properly patched
|
||||
log_end_msg $exitval
|
||||
;;
|
||||
stop)
|
||||
check_root
|
||||
[ -n "$XRDP_UPGRADE" -a "$RESTART_ON_UPGRADE" = "no" ] && {
|
||||
echo "Upgrade in progress, no restart of xrdp."
|
||||
exit 0
|
||||
}
|
||||
exitval=0
|
||||
log_daemon_msg "Stopping RDP Session manager "
|
||||
log_progress_msg "sesman"
|
||||
if pidofproc -p $PIDDIR/xrdp-sesman.pid $SDAEMON > /dev/null; then
|
||||
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/xrdp-sesman.pid \
|
||||
--chuid $USERID:$USERID --exec $SDAEMON
|
||||
exitval=$?
|
||||
else
|
||||
log_progress_msg "apparently not running"
|
||||
fi
|
||||
log_progress_msg $NAME
|
||||
if pidofproc -p $PIDDIR/$NAME.pid $DAEMON > /dev/null; then
|
||||
start-stop-daemon --stop --quiet --oknodo --pidfile $PIDDIR/$NAME.pid \
|
||||
--exec $DAEMON
|
||||
value=$?
|
||||
[ $value -gt 0 ] && exitval=$value
|
||||
else
|
||||
log_progress_msg "apparently not running"
|
||||
fi
|
||||
log_end_msg $exitval
|
||||
;;
|
||||
force-stop)
|
||||
$0 stop
|
||||
# because it doesn't always die the right way
|
||||
force_stop
|
||||
;;
|
||||
restart|force-reload)
|
||||
check_root
|
||||
$0 stop
|
||||
# Wait for things to settle down
|
||||
sleep 1
|
||||
$0 start
|
||||
;;
|
||||
reload)
|
||||
log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
|
||||
log_warning_msg "cannot re-read the config file (use restart)."
|
||||
;;
|
||||
status)
|
||||
exitval=0
|
||||
log_daemon_msg "Checking status of $DESC" "$NAME"
|
||||
if pidofproc -p $PIDDIR/$NAME.pid $DAEMON > /dev/null; then
|
||||
log_progress_msg "running"
|
||||
log_end_msg 0
|
||||
else
|
||||
log_progress_msg "apparently not running"
|
||||
log_end_msg 1 || true
|
||||
exitval=1
|
||||
fi
|
||||
if [ "$SESMAN_START" = "yes" ] ; then
|
||||
log_daemon_msg "Checking status of RDP Session Manager" "sesman"
|
||||
if pidofproc -p $PIDDIR/xrdp-sesman.pid $SDAEMON > /dev/null; then
|
||||
log_progress_msg "running"
|
||||
log_end_msg 0
|
||||
else
|
||||
log_progress_msg "apparently not running"
|
||||
log_end_msg 1 || true
|
||||
exitval=1
|
||||
fi
|
||||
fi
|
||||
exit $exitval
|
||||
;;
|
||||
*)
|
||||
N=/etc/init.d/$NAME
|
||||
echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
@ -1,124 +0,0 @@
|
||||
|
||||
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
|
||||
|
@ -1,659 +0,0 @@
|
||||
[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=43:43
|
||||
Key21=65105:180
|
||||
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=229:229
|
||||
Key35=168: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=230:230
|
||||
Key48=248:248
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=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=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=35:35
|
||||
Key13=164:164
|
||||
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=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=197:197
|
||||
Key35=94:94
|
||||
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=198:198
|
||||
Key48=216:216
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
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=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=65452:44
|
||||
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=65027: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=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=124:124
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
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=126:126
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=170:170
|
||||
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=248:248
|
||||
Key48=230:230
|
||||
Key49=182:182
|
||||
Key50=65505:0
|
||||
Key51=180:180
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=169:169
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
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=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=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=43:43
|
||||
Key21=65105:180
|
||||
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=197:197
|
||||
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=214:214
|
||||
Key48=196:196
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=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=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=35:35
|
||||
Key13=164:164
|
||||
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=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=229:229
|
||||
Key35=65106:94
|
||||
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=246:246
|
||||
Key48=228:228
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
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=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=65452:44
|
||||
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=65027: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
|
@ -1,791 +0,0 @@
|
||||
[noshift]
|
||||
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=223:223
|
||||
Key21=65105:180
|
||||
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=252:252
|
||||
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=246:246
|
||||
Key48=228:228
|
||||
Key49=65106:94
|
||||
Key50=65505:0
|
||||
Key51=35:35
|
||||
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=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shift]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=167:167
|
||||
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=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=220:220
|
||||
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=214:214
|
||||
Key48=196:196
|
||||
Key49=176:176
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=65032: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=65452:44
|
||||
Key92=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[altgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=185:185
|
||||
Key11=178:178
|
||||
Key12=179:179
|
||||
Key13=188:188
|
||||
Key14=189:189
|
||||
Key15=172:172
|
||||
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=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=65111:168
|
||||
Key35=126:126
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=230:230
|
||||
Key39=16777599:383
|
||||
Key40=240:240
|
||||
Key41=496:273
|
||||
Key42=959:331
|
||||
Key43=689:295
|
||||
Key44=65120:0
|
||||
Key45=930:312
|
||||
Key46=435:322
|
||||
Key47=65113:733
|
||||
Key48=65106:94
|
||||
Key49=16785458:8242
|
||||
Key50=65505:0
|
||||
Key51=2769:8217
|
||||
Key52=187:187
|
||||
Key53=171:171
|
||||
Key54=162:162
|
||||
Key55=2814:8222
|
||||
Key56=2770:8220
|
||||
Key57=2771:8221
|
||||
Key58=181:181
|
||||
Key59=183:183
|
||||
Key60=16785446:8230
|
||||
Key61=2730:8211
|
||||
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=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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=161:161
|
||||
Key11=2755:8539
|
||||
Key12=163:163
|
||||
Key13=164:164
|
||||
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=2009:937
|
||||
Key25=419:321
|
||||
Key26=8364:8364
|
||||
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=175:175
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=198:198
|
||||
Key39=16785054:7838
|
||||
Key40=208:208
|
||||
Key41=170:170
|
||||
Key42=957:330
|
||||
Key43=673:294
|
||||
Key44=65110:729
|
||||
Key45=38:38
|
||||
Key46=419:321
|
||||
Key47=65120:0
|
||||
Key48=65114:711
|
||||
Key49=16785459:8243
|
||||
Key50=65505:0
|
||||
Key51=65109:728
|
||||
Key52=16785466:8250
|
||||
Key53=16785465:8249
|
||||
Key54=169:169
|
||||
Key55=2813:8218
|
||||
Key56=2768:8216
|
||||
Key57=2769:8217
|
||||
Key58=186:186
|
||||
Key59=215:215
|
||||
Key60=247:247
|
||||
Key61=2729:8212
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65032: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=65452:44
|
||||
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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslock]
|
||||
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=16785054:7838
|
||||
Key21=65105:180
|
||||
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=220:220
|
||||
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=214:214
|
||||
Key48=196:196
|
||||
Key49=65106:94
|
||||
Key50=65505:0
|
||||
Key51=35:35
|
||||
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=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
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=167:167
|
||||
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=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=252:252
|
||||
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=246:246
|
||||
Key48=228:228
|
||||
Key49=176:176
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=65032: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=65452:44
|
||||
Key92=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
@ -1,791 +0,0 @@
|
||||
[noshift]
|
||||
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=61:61
|
||||
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=91:91
|
||||
Key35=93:93
|
||||
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=39:39
|
||||
Key49=96:96
|
||||
Key50=65505:0
|
||||
Key51=92:92
|
||||
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=47:47
|
||||
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=65377: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=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shift]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=64:64
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
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
|
||||
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=123:123
|
||||
Key35=125:125
|
||||
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=58:58
|
||||
Key48=34:34
|
||||
Key49=126:126
|
||||
Key50=65505:0
|
||||
Key51=124:124
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65032: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=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=65032:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
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=61:61
|
||||
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=91:91
|
||||
Key35=93:93
|
||||
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=39:39
|
||||
Key49=96:96
|
||||
Key50=65505:0
|
||||
Key51=92:92
|
||||
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=47:47
|
||||
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=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=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=64:64
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
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
|
||||
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=123:123
|
||||
Key35=125:125
|
||||
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=58:58
|
||||
Key48=34:34
|
||||
Key49=126:126
|
||||
Key50=65505:0
|
||||
Key51=124:124
|
||||
Key52=90:90
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=77:77
|
||||
Key59=60:60
|
||||
Key60=62:62
|
||||
Key61=63:63
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65032: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=65032:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslock]
|
||||
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=61:61
|
||||
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=91:91
|
||||
Key35=93:93
|
||||
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=39:39
|
||||
Key49=96:96
|
||||
Key50=65505:0
|
||||
Key51=92:92
|
||||
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=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=65377: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=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
[shiftcapslock]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=64:64
|
||||
Key12=35:35
|
||||
Key13=36:36
|
||||
Key14=37:37
|
||||
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
|
||||
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=123:123
|
||||
Key35=125:125
|
||||
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=58:58
|
||||
Key48=34:34
|
||||
Key49=126:126
|
||||
Key50=65505:0
|
||||
Key51=124:124
|
||||
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=65032: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=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=65032:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
@ -1,659 +0,0 @@
|
||||
[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
|
@ -1,791 +0,0 @@
|
||||
[noshift]
|
||||
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=43:43
|
||||
Key21=65105:180
|
||||
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=229:229
|
||||
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=246:246
|
||||
Key48=228:228
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=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=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shift]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
Key10=33:33
|
||||
Key11=34:34
|
||||
Key12=35:35
|
||||
Key13=164:164
|
||||
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=89:89
|
||||
Key30=85:85
|
||||
Key31=73:73
|
||||
Key32=79:79
|
||||
Key33=80:80
|
||||
Key34=197:197
|
||||
Key35=65106:94
|
||||
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=214:214
|
||||
Key48=196:196
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
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=65032: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=65452:44
|
||||
Key92=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[altgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
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=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=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=180:180
|
||||
Key52=171:171
|
||||
Key53=187:187
|
||||
Key54=169:169
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
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=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=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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[shiftaltgr]
|
||||
Key8=65406:0
|
||||
Key9=65307:27
|
||||
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=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=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=215:215
|
||||
Key52=60:60
|
||||
Key53=62:62
|
||||
Key54=169:169
|
||||
Key55=2768:8216
|
||||
Key56=2769:8217
|
||||
Key57=78:78
|
||||
Key58=186:186
|
||||
Key59=65116:731
|
||||
Key60=65110:729
|
||||
Key61=65110:729
|
||||
Key62=65506:0
|
||||
Key63=65450:42
|
||||
Key64=65032:0
|
||||
Key65=160:160
|
||||
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=65452:44
|
||||
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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
||||
[capslock]
|
||||
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=43:43
|
||||
Key21=65105:180
|
||||
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=197:197
|
||||
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=214:214
|
||||
Key48=196:196
|
||||
Key49=167:167
|
||||
Key50=65505:0
|
||||
Key51=39:39
|
||||
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=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=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
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=164:164
|
||||
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=121:121
|
||||
Key30=117:117
|
||||
Key31=105:105
|
||||
Key32=111:111
|
||||
Key33=112:112
|
||||
Key34=229:229
|
||||
Key35=65106:94
|
||||
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=246:246
|
||||
Key48=228:228
|
||||
Key49=189:189
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
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=65032: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=65452:44
|
||||
Key92=65377: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=65027:0
|
||||
Key114=269025049:0
|
||||
Key115=65515:0
|
||||
Key116=65312: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=0:0
|
||||
Key134=0:0
|
||||
Key135=0:0
|
||||
Key136=0:0
|
||||
Key137=0:0
|
||||
|
@ -1,659 +0,0 @@
|
||||
[noshift]
|
||||
Key8=0:0
|
||||
Key9=65307:27
|
||||
Key10=38:38
|
||||
Key11=233:233
|
||||
Key12=34:34
|
||||
Key13=39:39
|
||||
Key14=40:40
|
||||
Key15=45:45
|
||||
Key16=232:232
|
||||
Key17=95:95
|
||||
Key18=231:231
|
||||
Key19=224:224
|
||||
Key20=41:41
|
||||
Key21=61:61
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=97:97
|
||||
Key25=122:122
|
||||
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=36:36
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=113:113
|
||||
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=109:109
|
||||
Key48=249:249
|
||||
Key49=178:178
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
Key52=119:119
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=44:44
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=33:33
|
||||
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=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=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=176:176
|
||||
Key21=43:43
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=65:65
|
||||
Key25=90:90
|
||||
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=65111:168
|
||||
Key35=163:163
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=81:81
|
||||
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=77:77
|
||||
Key48=37:37
|
||||
Key49=126:126
|
||||
Key50=65505:0
|
||||
Key51=181:181
|
||||
Key52=87:87
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=63:63
|
||||
Key59=46:46
|
||||
Key60=47:47
|
||||
Key61=167:167
|
||||
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=65027: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=185:185
|
||||
Key11=126:126
|
||||
Key12=35:35
|
||||
Key13=123:123
|
||||
Key14=91:91
|
||||
Key15=124:124
|
||||
Key16=96:96
|
||||
Key17=92:92
|
||||
Key18=94:94
|
||||
Key19=64:64
|
||||
Key20=93:93
|
||||
Key21=125:125
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=230:230
|
||||
Key25=171:171
|
||||
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=65111:168
|
||||
Key35=164:164
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=64:64
|
||||
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=181:181
|
||||
Key48=65106:94
|
||||
Key49=172:172
|
||||
Key50=65505:0
|
||||
Key51=65104:96
|
||||
Key52=435:322
|
||||
Key53=187:187
|
||||
Key54=162:162
|
||||
Key55=2770:8220
|
||||
Key56=2771:8221
|
||||
Key57=110:110
|
||||
Key58=65105:180
|
||||
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=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=65027: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=38:38
|
||||
Key11=201:201
|
||||
Key12=34:34
|
||||
Key13=39:39
|
||||
Key14=40:40
|
||||
Key15=45:45
|
||||
Key16=200:200
|
||||
Key17=95:95
|
||||
Key18=199:199
|
||||
Key19=192:192
|
||||
Key20=41:41
|
||||
Key21=61:61
|
||||
Key22=65288:8
|
||||
Key23=65289:9
|
||||
Key24=65:65
|
||||
Key25=90:90
|
||||
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=36:36
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=81:81
|
||||
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=77:77
|
||||
Key48=217:217
|
||||
Key49=178:178
|
||||
Key50=65505:0
|
||||
Key51=42:42
|
||||
Key52=87:87
|
||||
Key53=88:88
|
||||
Key54=67:67
|
||||
Key55=86:86
|
||||
Key56=66:66
|
||||
Key57=78:78
|
||||
Key58=44:44
|
||||
Key59=59:59
|
||||
Key60=58:58
|
||||
Key61=33:33
|
||||
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=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=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=176:176
|
||||
Key21=43:43
|
||||
Key22=65288:8
|
||||
Key23=65056:0
|
||||
Key24=97:97
|
||||
Key25=122:122
|
||||
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=65111:168
|
||||
Key35=163:163
|
||||
Key36=65293:13
|
||||
Key37=65507:0
|
||||
Key38=113:113
|
||||
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=109:109
|
||||
Key48=37:37
|
||||
Key49=126:126
|
||||
Key50=65505:0
|
||||
Key51=924:0
|
||||
Key52=119:119
|
||||
Key53=120:120
|
||||
Key54=99:99
|
||||
Key55=118:118
|
||||
Key56=98:98
|
||||
Key57=110:110
|
||||
Key58=63:63
|
||||
Key59=46:46
|
||||
Key60=47:47
|
||||
Key61=167:167
|
||||
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=65027: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
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user