Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Adam <dev@robert-adam.de>2022-09-10 20:00:09 +0300
committerGitHub <noreply@github.com>2022-09-10 20:00:09 +0300
commit98fb1cd8b42ce5020a9696c571ca470fe7cd569b (patch)
tree83ea9e337fda98991e38a83ac5b0dfd51760045f
parentc8bf3b203c404c5e7223979f62efc08c607b2be8 (diff)
parentb81b06001db4c7b76dc8ee3fc25b900452869336 (diff)
Merge PR #5838: MAINT/BUILD: Clean up scripts directory
-rwxr-xr-x.github/workflows/build.sh1
-rw-r--r--CMakeLists.txt19
-rw-r--r--auxiliary_files/CMakeLists.txt122
-rw-r--r--auxiliary_files/config_files/info.mumble.Mumble.appdata.xml.in (renamed from scripts/info.mumble.Mumble.appdata.xml.in)8
-rw-r--r--auxiliary_files/config_files/info.mumble.Mumble.desktop.in (renamed from scripts/info.mumble.Mumble.desktop)4
-rw-r--r--auxiliary_files/config_files/mumble-server.conf (renamed from scripts/murmur.conf)0
-rw-r--r--auxiliary_files/config_files/mumble-server.service.in36
-rw-r--r--auxiliary_files/config_files/mumble-server.sysusers5
-rw-r--r--auxiliary_files/man_files/mumble-overlay.1 (renamed from man/mumble-overlay.1)0
-rw-r--r--auxiliary_files/man_files/mumble-server-user-wrapper.1 (renamed from man/mumble-server-user-wrapper.1)0
-rw-r--r--auxiliary_files/man_files/mumble-server.1 (renamed from man/mumble-server.1)0
-rw-r--r--auxiliary_files/man_files/mumble.1 (renamed from man/mumble.1)0
-rw-r--r--auxiliary_files/mumble-server.ini (renamed from scripts/murmur.ini)84
-rw-r--r--auxiliary_files/mumble.appcompat.manifest (renamed from src/mumble/mumble.appcompat.manifest)2
-rwxr-xr-xauxiliary_files/run_scripts/mumble-overlay.in (renamed from scripts/mumble-overlay)12
-rwxr-xr-xauxiliary_files/run_scripts/mumble-server-user-wrapper.in (renamed from scripts/mumble-server-user-wrapper)40
-rw-r--r--cmake/check_mysql.cmake13
-rw-r--r--cmake/delayed_configure_files.cmake115
-rw-r--r--cmake/install-paths.cmake68
-rw-r--r--cmake/pkg-utils.cmake73
-rw-r--r--cmake/qt-utils.cmake28
-rw-r--r--docs/dev/ExtendingTheIceInterface.md91
-rw-r--r--helpers/g15helper/CMakeLists.txt (renamed from g15helper/CMakeLists.txt)2
-rw-r--r--helpers/g15helper/g15helper.c (renamed from g15helper/g15helper.c)0
-rw-r--r--helpers/g15helper/g15helper.h (renamed from g15helper/g15helper.h)0
-rw-r--r--helpers/g15helper/g15helper.plist.in (renamed from g15helper/g15helper.plist.in)0
-rw-r--r--helpers/g15helper/g15helper.rc.in (renamed from g15helper/g15helper.rc.in)0
-rw-r--r--helpers/g15helper/g15helper_emu.cpp (renamed from g15helper/g15helper_emu.cpp)0
-rw-r--r--helpers/g15helper/g15helper_emu.h (renamed from g15helper/g15helper_emu.h)0
-rw-r--r--helpers/g15helper/g15helper_macx.c (renamed from g15helper/g15helper_macx.c)0
-rw-r--r--installer/ServerInstaller.cs2
-rw-r--r--overlay/CMakeLists.txt10
-rw-r--r--overlay/overlay_exe/CMakeLists.txt6
-rw-r--r--overlay_gl/CMakeLists.txt7
-rw-r--r--scripts/development/IconSync.cpp70
-rw-r--r--scripts/docker-compose.yml17
-rwxr-xr-xscripts/extract-emojione-flags.py65
-rwxr-xr-xscripts/generate-ApplicationPalette-class.py21
-rwxr-xr-x[-rw-r--r--]scripts/generate-ffdhe.py582
-rwxr-xr-xscripts/generate-mumble_qt-qrc.py30
-rwxr-xr-xscripts/generate-qrc.py50
-rwxr-xr-xscripts/generateIceWrapper.py10
-rwxr-xr-xscripts/generate_configure_cmake_script.py79
-rwxr-xr-xscripts/generate_flag_qrc.py63
-rwxr-xr-xscripts/generate_license_header.py144
-rwxr-xr-xscripts/generate_mumble_ico.py68
-rwxr-xr-xscripts/git2cl.pl69
-rw-r--r--scripts/mkflags.py111
-rwxr-xr-xscripts/mkini-win32.bat14
-rwxr-xr-xscripts/mkini.sh18
-rwxr-xr-xscripts/mklic.pl141
-rw-r--r--scripts/mumble.protocol8
-rwxr-xr-xscripts/murmur.init149
-rw-r--r--scripts/murmur.logrotate10
-rw-r--r--scripts/murmur.service15
-rw-r--r--scripts/php.ini1
-rwxr-xr-xscripts/rcc-depends.py46
-rwxr-xr-xscripts/release.pl77
-rw-r--r--scripts/server/dbus/ListUsers.cs82
-rwxr-xr-xscripts/server/dbus/dbusauth.pl300
-rwxr-xr-xscripts/server/dbus/murmur.pl292
-rwxr-xr-xscripts/server/dbus/weblist.pl154
-rw-r--r--scripts/server/ice/addban.php50
-rw-r--r--scripts/server/ice/glacier/config3
-rw-r--r--scripts/server/ice/glacier/glacier.php45
-rw-r--r--scripts/server/ice/glacier/passwords3
-rw-r--r--scripts/server/ice/icedemo.php209
-rw-r--r--scripts/server/ice/idle.php81
-rwxr-xr-xscripts/server/ice/mumble-auth.py280
-rwxr-xr-xscripts/server/ice/rubytest.rb64
-rw-r--r--scripts/server/ice/simpleregister.php76
-rwxr-xr-xscripts/server/ice/testauth.py125
-rwxr-xr-xscripts/server/ice/testcallback.py123
-rwxr-xr-xscripts/server/ice/testdynamic.py35
-rw-r--r--scripts/server/ice/weblist.php60
-rwxr-xr-x[-rw-r--r--]scripts/sign_macOS.py0
-rwxr-xr-xscripts/transtate.py61
-rw-r--r--src/CMakeLists.txt31
-rw-r--r--src/FFDHETable.h86
-rw-r--r--src/License.cpp4
-rw-r--r--src/License.h2
-rw-r--r--src/licenses.h5883
-rw-r--r--src/mumble/About.cpp13
-rw-r--r--src/mumble/ApplicationPalette.h1293
-rw-r--r--src/mumble/ApplicationPaletteTemplate.h41
-rw-r--r--src/mumble/CMakeLists.txt50
-rw-r--r--src/mumble/G15LCDEngine_helper.h2
-rw-r--r--src/mumble/G15LCDEngine_lglcd.h2
-rw-r--r--src/mumble/flags/mumble_flags_0.qrc262
-rw-r--r--src/mumble/main.cpp3
-rw-r--r--src/mumble/mumble_ar.ts4
-rw-r--r--src/mumble/mumble_bg.ts4
-rw-r--r--src/mumble/mumble_br.ts4
-rw-r--r--src/mumble/mumble_ca.ts4
-rw-r--r--src/mumble/mumble_cs.ts4
-rw-r--r--src/mumble/mumble_cy.ts4
-rw-r--r--src/mumble/mumble_da.ts4
-rw-r--r--src/mumble/mumble_de.ts4
-rw-r--r--src/mumble/mumble_el.ts4
-rw-r--r--src/mumble/mumble_en.ts4
-rw-r--r--src/mumble/mumble_en_GB.ts4
-rw-r--r--src/mumble/mumble_eo.ts4
-rw-r--r--src/mumble/mumble_es.ts4
-rw-r--r--src/mumble/mumble_et.ts4
-rw-r--r--src/mumble/mumble_eu.ts4
-rw-r--r--src/mumble/mumble_fa_IR.ts4
-rw-r--r--src/mumble/mumble_fi.ts4
-rw-r--r--src/mumble/mumble_fr.ts4
-rw-r--r--src/mumble/mumble_gl.ts4
-rw-r--r--src/mumble/mumble_he.ts4
-rw-r--r--src/mumble/mumble_hu.ts4
-rw-r--r--src/mumble/mumble_it.ts4
-rw-r--r--src/mumble/mumble_ja.ts4
-rw-r--r--src/mumble/mumble_ko.ts4
-rw-r--r--src/mumble/mumble_lt.ts4
-rw-r--r--src/mumble/mumble_nl.ts4
-rw-r--r--src/mumble/mumble_no.ts4
-rw-r--r--src/mumble/mumble_oc.ts4
-rw-r--r--src/mumble/mumble_pl.ts4
-rw-r--r--src/mumble/mumble_pt_BR.ts4
-rw-r--r--src/mumble/mumble_pt_PT.ts4
-rw-r--r--src/mumble/mumble_ro.ts4
-rw-r--r--src/mumble/mumble_ru.ts4
-rw-r--r--src/mumble/mumble_si.ts4
-rw-r--r--src/mumble/mumble_sk.ts4
-rw-r--r--src/mumble/mumble_sq.ts4
-rw-r--r--src/mumble/mumble_sv.ts4
-rw-r--r--src/mumble/mumble_te.ts4
-rw-r--r--src/mumble/mumble_th.ts4
-rw-r--r--src/mumble/mumble_tr.ts4
-rw-r--r--src/mumble/mumble_uk.ts4
-rw-r--r--src/mumble/mumble_zh_CN.ts4
-rw-r--r--src/mumble/mumble_zh_HK.ts4
-rw-r--r--src/mumble/mumble_zh_TW.ts4
-rw-r--r--src/mumble_exe/CMakeLists.txt2
-rw-r--r--src/murmur/About.cpp13
-rw-r--r--src/murmur/CMakeLists.txt33
-rw-r--r--src/murmur/Meta.cpp23
-rw-r--r--src/murmur/MumbleServer.ice (renamed from src/murmur/Murmur.ice)2
-rw-r--r--src/murmur/MumbleServerI.h200
-rw-r--r--src/murmur/MumbleServerIce.cpp (renamed from src/murmur/MurmurIce.cpp)535
-rw-r--r--src/murmur/MumbleServerIce.h (renamed from src/murmur/MurmurIce.h)69
-rw-r--r--src/murmur/MurmurI.h193
-rw-r--r--src/murmur/MurmurIceWrapper.cpp2356
-rw-r--r--src/murmur/ServerDB.cpp37
-rw-r--r--src/murmur/main.cpp3
-rw-r--r--src/tests/TestAudioReceiverBuffer/CMakeLists.txt4
147 files changed, 2128 insertions, 13839 deletions
diff --git a/.github/workflows/build.sh b/.github/workflows/build.sh
index 668e0bb58..a1f23a78a 100755
--- a/.github/workflows/build.sh
+++ b/.github/workflows/build.sh
@@ -20,6 +20,7 @@ cmake -G Ninja \
-DBUILD_NUMBER=$BUILD_NUMBER \
$CMAKE_OPTIONS \
-DCMAKE_UNITY_BUILD=ON \
+ -Ddisplay-install-paths=ON \
$ADDITIONAL_CMAKE_OPTIONS \
$VCPKG_CMAKE_OPTIONS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 147e4a852..2b69a987d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -51,6 +51,21 @@ include(pkg-utils)
include(project-utils)
include(TargetArch)
include(CheckIPOSupported)
+include(FindPythonInterpreter)
+
+# Locate a usable Python3 interpreter
+set(PYTHON_HINTS
+ "C:/Python39-x64" # Path on the AppVeyor CI server
+)
+
+find_python_interpreter(
+ VERSION 3
+ INTERPRETER_OUT_VAR PYTHON_INTERPRETER
+ HINTS ${PYTHON_HINTS}
+ REQUIRED
+)
+
+
check_ipo_supported(RESULT LTO_DEFAULT)
@@ -149,7 +164,7 @@ set(CMAKE_UNITY_BUILD_BATCH_SIZE 40)
add_subdirectory(src)
if(g15 AND WIN32)
- add_subdirectory(g15helper)
+ add_subdirectory("helpers/g15helper")
endif()
if(APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
@@ -175,6 +190,8 @@ if(plugins AND client)
add_subdirectory(plugins)
endif()
+add_subdirectory(auxiliary_files)
+
if(packaging)
file(COPY
${CMAKE_SOURCE_DIR}/installer/gpl.txt
diff --git a/auxiliary_files/CMakeLists.txt b/auxiliary_files/CMakeLists.txt
new file mode 100644
index 000000000..1eb3121c4
--- /dev/null
+++ b/auxiliary_files/CMakeLists.txt
@@ -0,0 +1,122 @@
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+include(delayed_configure_files)
+include(pkg-utils)
+
+if(NOT BUILD_RELEASE_DATE)
+ # If BUILD_RELEASE_DATE has not been set, default to time of build
+ string(TIMESTAMP BUILD_RELEASE_DATE "%Y-%m-%d")
+endif()
+
+if(client)
+ if(UNIX AND NOT APPLE)
+ delayed_configure_files(
+ TARGET mumble
+ FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_files/info.mumble.Mumble.appdata.xml.in=${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.appdata.xml"
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_files/info.mumble.Mumble.desktop.in=${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.desktop"
+ PASSTHROUGH_VARIABLES
+ MUMBLE_BUILD_YEAR
+ CMAKE_PROJECT_VERSION
+ BUILD_RELEASE_DATE
+ CMAKE_PROJECT_HOMEPAGE_URL
+ CMAKE_PROJECT_DESCRIPTION
+ VARIABLES
+ "MUMBLE_CLIENT_BINARY_NAME=$<TARGET_FILE_NAME:mumble>"
+ PYTHON_INTERPRETER "${PYTHON_INTERPRETER}"
+ @ONLY
+ )
+
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.appdata.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo")
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/info.mumble.Mumble.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
+
+ # Install Mumble client man files
+ install(FILES "man_files/mumble.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
+
+ endif()
+
+ if(overlay)
+ if(UNIX)
+ delayed_configure_files(
+ TARGET overlay_gl
+ FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/run_scripts/mumble-overlay.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-overlay"
+ PASSTHROUGH_VARIABLES
+ MUMBLE_BUILD_YEAR
+ MUMBLE_INSTALL_ABS_LIBDIR
+ VARIABLES
+ "MUMBLE_OVERLAY_BINARY_BASENAME=$<TARGET_FILE_BASE_NAME:overlay_gl>"
+ PYTHON_INTERPRETER "${PYTHON_INTERPRETER}"
+ @ONLY
+ )
+
+ # install overlay script
+ install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/mumble-overlay" DESTINATION "${MUMBLE_INSTALL_SCRIPTDIR}")
+
+ # install overlay man-files
+ install(FILES "man_files/mumble-overlay.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
+ endif()
+ endif()
+endif()
+
+if(server)
+ file(COPY "mumble-server.ini" DESTINATION ${CMAKE_BINARY_DIR})
+ file(COPY "config_files/mumble-server.conf" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+ if(UNIX AND NOT APPLE)
+ get_pkgconf_variable(
+ OUTPUT_VARIABLE SYSUSERS_DIR
+ MODULE systemd
+ VARIABLE_NAME sysusersdir
+ QUIET
+ )
+ if(NOT SYSUSERS_DIR)
+ # Fallback value, in case it could not be fetched via pkg-config
+ set(SYSUSERS_DIR "${CMAKE_INSTALL_SYSCONFDIR}/sysconfig.d")
+ endif()
+ get_pkgconf_variable(
+ OUTPUT_VARIABLE SYSTEMD_SERVICE_DIR
+ MODULE systemd
+ VARIABLE_NAME systemd_system_unit_dir
+ QUIET
+ )
+ if(NOT SYSTEMD_SERVICE_DIR)
+ # Default to /etc/systemd/system - This is not where packages ought to install their service files (rather
+ # it's where an admin is supposed to add their system files), but this seems to be the most consistent
+ # path across different platforms, so we use it anyway.
+ set(SYSTEMD_SERVICE_DIR "${CMAKE_INSTALL_SYSCONFDIR}/systemd/system")
+ endif()
+
+ delayed_configure_files(
+ TARGET mumble-server
+ FILES
+ "${CMAKE_CURRENT_SOURCE_DIR}/config_files/mumble-server.service.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service"
+ "${CMAKE_CURRENT_SOURCE_DIR}/run_scripts/mumble-server-user-wrapper.in=${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper"
+ PASSTHROUGH_VARIABLES
+ MUMBLE_BUILD_YEAR
+ MUMBLE_INSTALL_ABS_EXECUTABLEDIR
+ MUMBLE_INSTALL_ABS_SYSCONFDIR
+ VARIABLES
+ "MUMBLE_SERVER_BINARY_NAME=$<TARGET_FILE_NAME:mumble-server>"
+ PYTHON_INTERPRETER "${PYTHON_INTERPRETER}"
+ @ONLY
+ )
+
+ # Install Mumble server man files
+ install(FILES "man_files/mumble-server.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
+ install(FILES "man_files/mumble-server-user-wrapper.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
+
+ install(FILES "mumble-server.ini" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server)
+
+ install(FILES "config_files/mumble-server.sysusers" DESTINATION "${SYSUSERS_DIR}" COMPONENT mumble_server RENAME "mumble-server.conf")
+
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server.service" DESTINATION "${SYSTEMD_SERVICE_DIR}" COMPONENT mumble_server)
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mumble-server-user-wrapper" DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server)
+ install(FILES "config_files/mumble-server.conf" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/system.d" COMPONENT mumble_server)
+ install(FILES "${CMAKE_SOURCE_DIR}/src/murmur/MumbleServer.ice" DESTINATION "${MUMBLE_INSTALL_SYSCONFDIR}" COMPONENT mumble_server)
+ endif()
+endif()
+
diff --git a/scripts/info.mumble.Mumble.appdata.xml.in b/auxiliary_files/config_files/info.mumble.Mumble.appdata.xml.in
index c55463c74..ac6dd1713 100644
--- a/scripts/info.mumble.Mumble.appdata.xml.in
+++ b/auxiliary_files/config_files/info.mumble.Mumble.appdata.xml.in
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright 2019-2022 The Mumble Developers -->
+<!-- Copyright 2019-@MUMBLE_BUILD_YEAR@ The Mumble Developers -->
<component type="desktop-application">
<id>info.mumble.Mumble</id>
<name>Mumble</name>
@@ -8,13 +8,13 @@
<metadata_license>CC0-1.0</metadata_license>
<developer_name>The Mumble Dev-Team</developer_name>
<description>
- <p>Mumble is an open source, low-latency, high quality voice chat software.</p>
+ <p>@CMAKE_PROJECT_DESCRIPTION@</p>
</description>
<content_rating type="oars-1.0">
<content_attribute id="social-chat">intense</content_attribute>
<content_attribute id="social-audio">intense</content_attribute>
</content_rating>
- <url type="homepage">https://www.mumble.info/</url>
+ <url type="homepage">@CMAKE_PROJECT_HOMEPAGE_URL@</url>
<url type="bugtracker">https://github.com/mumble-voip/mumble/issues</url>
<url type="help">https://wiki.mumble.info/wiki/Main_Page</url>
<url type="translate">https://wiki.mumble.info/wiki/Language_Translation</url>
@@ -30,6 +30,6 @@
<release type="stable" version="@CMAKE_PROJECT_VERSION@" date="@BUILD_RELEASE_DATE@" />
</releases>
<provides>
- <binary>mumble</binary>
+ <binary>@MUMBLE_CLIENT_BINARY_NAME@</binary>
</provides>
</component>
diff --git a/scripts/info.mumble.Mumble.desktop b/auxiliary_files/config_files/info.mumble.Mumble.desktop.in
index bfb06ff2c..d22599b5b 100644
--- a/scripts/info.mumble.Mumble.desktop
+++ b/auxiliary_files/config_files/info.mumble.Mumble.desktop.in
@@ -3,10 +3,10 @@ Name=Mumble
GenericName=Voice Chat
GenericName[de]=Sprachkonferenz
GenericName[fr]=Chat vocal
-Comment=An open source low-latency, high quality voice chat program
+Comment=@CMAKE_PROJECT_DESCRIPTION@
Comment[de]=Ein Open Source Sprachkonferenzprogramm mit niedriger Latenz und hoher Qualität
Comment[fr]=Un logiciel de chat vocal de haute qualité et de faible latence
-Exec=mumble %u
+Exec=@MUMBLE_CLIENT_BINARY_NAME@ %u
Icon=mumble
Terminal=false
Type=Application
diff --git a/scripts/murmur.conf b/auxiliary_files/config_files/mumble-server.conf
index 1c81f9027..1c81f9027 100644
--- a/scripts/murmur.conf
+++ b/auxiliary_files/config_files/mumble-server.conf
diff --git a/auxiliary_files/config_files/mumble-server.service.in b/auxiliary_files/config_files/mumble-server.service.in
new file mode 100644
index 000000000..0447a022e
--- /dev/null
+++ b/auxiliary_files/config_files/mumble-server.service.in
@@ -0,0 +1,36 @@
+[Unit]
+Description=Mumble server
+After=network.target
+Wants=network-online.target
+
+[Service]
+AmbientCapabilities=CAP_NET_BIND_SERVICE
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE
+ExecStart=@MUMBLE_INSTALL_ABS_EXECUTABLEDIR@/@MUMBLE_SERVER_BINARY_NAME@ -ini @MUMBLE_INSTALL_ABS_SYSCONFDIR@/mumble-server.ini -fg
+Group=_mumble-server
+LockPersonality=yes
+MemoryDenyWriteExecute=yes
+NoNewPrivileges=yes
+PrivateDevices=true
+PrivateTmp=true
+ProtectClock=yes
+ProtectControlGroups=yes
+ProtectHome=true
+ProtectHostname=yes
+ProtectKernelLogs=yes
+ProtectKernelModules=yes
+ProtectKernelTunables=yes
+ProtectSystem=full
+RestrictAddressFamilies=~AF_PACKET AF_NETLINK
+RestrictNamespaces=yes
+RestrictSUIDSGID=yes
+RestrictRealtime=yes
+Restart=always
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+Type=simple
+User=_mumble-server
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/auxiliary_files/config_files/mumble-server.sysusers b/auxiliary_files/config_files/mumble-server.sysusers
new file mode 100644
index 000000000..6c4933429
--- /dev/null
+++ b/auxiliary_files/config_files/mumble-server.sysusers
@@ -0,0 +1,5 @@
+# When this file is processed by systemd-sysusers, it will create the user and group that the Mumble server
+# is intended to run under (e.g. when started via systemd)
+
+# Type # Name # ID # GECOS # Home # Shell
+u _mumble-server - "Mumble server user" - -
diff --git a/man/mumble-overlay.1 b/auxiliary_files/man_files/mumble-overlay.1
index 63dd2749d..63dd2749d 100644
--- a/man/mumble-overlay.1
+++ b/auxiliary_files/man_files/mumble-overlay.1
diff --git a/man/mumble-server-user-wrapper.1 b/auxiliary_files/man_files/mumble-server-user-wrapper.1
index 8afd9d70f..8afd9d70f 100644
--- a/man/mumble-server-user-wrapper.1
+++ b/auxiliary_files/man_files/mumble-server-user-wrapper.1
diff --git a/man/mumble-server.1 b/auxiliary_files/man_files/mumble-server.1
index 72cb902b0..72cb902b0 100644
--- a/man/mumble-server.1
+++ b/auxiliary_files/man_files/mumble-server.1
diff --git a/man/mumble.1 b/auxiliary_files/man_files/mumble.1
index 731837883..731837883 100644
--- a/man/mumble.1
+++ b/auxiliary_files/man_files/mumble.1
diff --git a/scripts/murmur.ini b/auxiliary_files/mumble-server.ini
index b09818191..9722b4445 100644
--- a/scripts/murmur.ini
+++ b/auxiliary_files/mumble-server.ini
@@ -1,4 +1,4 @@
-; Murmur configuration file.
+; Mumble server configuration file.
;
; General notes:
; * Settings in this file are default settings and many of them can be overridden
@@ -12,10 +12,10 @@
; NOT regex = \w* BUT regex = \\w*
; Path to database. If blank, will search for
-; murmur.sqlite in default locations or create it if not found.
+; mumble-server.sqlite in default locations or create it if not found.
database=
-; Murmur defaults to using SQLite with its default rollback journal.
+; The server defaults to using SQLite with its default rollback journal.
; In some situations, using SQLite's write-ahead log (WAL) can be
; advantageous.
; If you encounter slowdowns when moving between channels and similar
@@ -26,13 +26,13 @@ database=
;
; 0 - Use SQLite's default rollback journal.
; 1 - Use write-ahead log with synchronous=NORMAL.
-; If Murmur crashes, the database will be in a consistent state, but
+; If the server crashes, the database will be in a consistent state, but
; the most recent changes might be lost if the operating system did
-; not write them to disk yet. This option can improve Murmur's
+; not write them to disk yet. This option can improve the server's
; interactivity on busy servers, or servers with slow storage.
; 2 - Use write-ahead log with synchronous=FULL.
; All database writes are synchronized to disk when they are made.
-; If Murmur crashes, the database will be include all completed writes.
+; If the server crashes, the database will be include all completed writes.
;sqlite_wal=0
; If you wish to use something other than SQLite, you'll need to set the name
@@ -45,19 +45,19 @@ database=
;dbPassword=
;dbHost=
;dbPort=
-;dbPrefix=murmur_
+;dbPrefix=mumble-server_
;dbOpts=
-; Murmur defaults to not using D-Bus. If you wish to use dbus, which is one of the
-; RPC methods available in Murmur, please specify so here.
+; The server defaults to not using D-Bus. If you wish to use dbus, which is one of the
+; RPC methods available in the server, please specify so here.
;
;dbus=session
; Alternate D-Bus service name. Only use if you are running distinct
-; murmurd processes connected to the same D-Bus daemon.
+; mumble server processes connected to the same D-Bus daemon.
;dbusservice=net.sourceforge.mumble.murmur
-; If you want to use ZeroC Ice to communicate with Murmur, you need
+; If you want to use ZeroC Ice to communicate with the server, you need
; to specify the endpoint to use. Since there is no authentication
; with ICE, you should only use it if you trust all the users who have
; shell access to your machine.
@@ -79,13 +79,13 @@ ice="tcp -h 127.0.0.1 -p 6502"
;icesecretread=
icesecretwrite=
-; Specifies the file Murmur should log to. By default, Murmur
-; logs to the file 'murmur.log'. If you leave this field blank
-; on Unix-like systems, Murmur will force itself into foreground
+; Specifies the file the server should log to. By default the server
+; logs to the file 'mumble-server.log'. If you leave this field blank
+; on Unix-like systems, the server will force itself into foreground
; mode which logs to the console.
-;logfile=murmur.log
+;logfile=mumble-server.log
-; If set, Murmur will write its process ID to this file
+; If set, the server will write its process ID to this file
; when running in daemon mode (when the -fg flag is not
; specified on the command line). Only available on
; Unix-like systems.
@@ -98,7 +98,7 @@ icesecretwrite=
; Welcome message sent to clients when they connect.
; If the welcome message is set to an empty string,
; no welcome message will be sent to clients.
-welcometext="<br />Welcome to this server running <b>Murmur</b>.<br />Enjoy your stay!<br />"
+welcometext="<br />Welcome to this server running <b>Mumble</b>.<br />Enjoy your stay!<br />"
; The welcometext can also be read from an external file which might be useful
; if you want to specify a rather lengthy text. If a value for welcometext is
@@ -109,7 +109,7 @@ welcometext="<br />Welcome to this server running <b>Murmur</b>.<br />Enjoy your
port=64738
; Specific IP or hostname to bind to.
-; If this is left blank (default), Murmur will bind to all available addresses.
+; If this is left blank (default), the server will bind to all available addresses.
;host=
; Password to join server.
@@ -119,8 +119,8 @@ serverpassword=
; to send speech at.
bandwidth=558000
-; Murmur and Mumble are usually pretty good about cleaning up hung clients, but
-; occasionally one will get stuck on the server. The timeout setting will cause
+; The Mumble client and server are usually pretty good about cleaning up hung clients,
+; but occasionally one will get stuck on the server. The timeout setting will cause
; a periodic check of all clients who haven't communicated with the server in
; this many seconds - causing zombie clients to be disconnected.
;
@@ -193,7 +193,7 @@ allowping=true
; moved into that channel instead. Note that this is the numeric ID of the
; channel, which can be a little tricky to get (you'll either need to use an
; RPC mechanism, watch the console of a debug client, or root around through
-; the Murmur Database to get it).
+; the server database to get it).
;
;defaultchannel=0
@@ -217,7 +217,7 @@ allowping=true
; Allow clients to use HTML in messages, user comments and channel descriptions?
;allowhtml=true
-; Murmur retains the per-server log entries in an internal database which
+; The server retains the per-server log entries in an internal database which
; allows it to be accessed over D-Bus/ICE.
; How many days should such entries be kept?
; Set to 0 to keep forever, or -1 to disable logging to the DB.
@@ -249,18 +249,18 @@ allowping=true
;bonjour=true
; If you have a proper SSL certificate, you can provide the filenames here.
-; Otherwise, Murmur will create its own certificate automatically.
+; Otherwise, the server will create its own certificate automatically.
;sslCert=
;sslKey=
; If the keyfile specified above is encrypted with a passphrase, you can enter
; it in this setting. It must be plaintext, so you may wish to adjust the
-; permissions on your murmur.ini file accordingly.
+; permissions on your mumble-server.ini file accordingly.
;sslPassPhrase=
; If your certificate is signed by an authority that uses a sub-signed or
; "intermediate" certificate, you probably need to bundle it with your
-; certificate in order to get Murmur to accept it. You can either concatenate
+; certificate in order to get the server to accept it. You can either concatenate
; the two certificates into one file, or you can put it in a file by itself and
; put the path to that PEM-file in sslCA.
;sslCA=
@@ -270,13 +270,13 @@ allowping=true
; Hellman parameters for all virtual servers.
;
; Instead of pointing sslDHParams to a file, you can also use the option
-; to specify a named set of Diffie-Hellman parameters for Murmur to use.
-; Murmur comes bundled with the Diffie-Hellman parameters from RFC 7919.
+; to specify a named set of Diffie-Hellman parameters for the server to use.
+; The server comes bundled with the Diffie-Hellman parameters from RFC 7919.
; These parameters are available by using the following names:
;
; @ffdhe2048, @ffdhe3072, @ffdhe4096, @ffdhe6144, @ffdhe8192
;
-; By default, Murmur uses @ffdhe2048.
+; By default, the server uses @ffdhe2048.
;sslDHParams=@ffdhe2048
; The sslCiphers option chooses the cipher suites to make available for use
@@ -289,21 +289,21 @@ allowping=true
; It is recommended that you try your cipher string using 'openssl ciphers <string>'
; before setting it here, to get a feel for which cipher suites you will get.
;
-; After setting this option, it is recommend that you inspect your Murmur log
-; to ensure that Murmur is using the cipher suites that you expected it to.
+; After setting this option, it is recommend that you inspect your server log
+; to ensure that the server is using the cipher suites that you expected it to.
;
; Note: Changing this option may impact the backwards compatibility of your
-; Murmur server, and can remove the ability for older Mumble clients to be able
+; server, and can remove the ability for older Mumble clients to be able
; to connect to it.
;sslCiphers=EECDH+AESGCM:EDH+aRSA+AESGCM:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-SHA:AES128-SHA
-; If Murmur is started as root, which user should it switch to?
-; This option is ignored if Murmur isn't started with root privileges.
+; If the server is started as root, which user should it switch to?
+; This option is ignored if the server isn't started with root privileges.
;uname=
; By default, in log files and in the user status window for privileged users,
; Mumble will show IP addresses - in some situations you may find this unwanted
-; behavior. If obfuscate is set to true, Murmur will randomize the IP addresses
+; behavior. If obfuscate is set to true, the server will randomize the IP addresses
; of connecting users.
;
; The obfuscate function only affects the log file and DOES NOT effect the user
@@ -361,19 +361,19 @@ allowping=true
;kdfiterations=-1
; In order to prevent misconfigured, impolite or malicious clients from
-; affecting the low-latency of other users, Murmur has a rudimentary global-ban
+; affecting the low-latency of other users, the server has a rudimentary global-ban
; system. It's configured using the autobanAttempts, autobanTimeframe and
; autobanTime settings.
;
; If a client attempts autobanAttempts connections in autobanTimeframe seconds,
; they will be banned for autobanTime seconds. This is a global ban, from all
-; virtual servers on the Murmur process. It will not show up in any of the
+; virtual servers on the server process. It will not show up in any of the
; ban-lists on the server, and they can't be removed without restarting the
-; Murmur process - just let them expire. A single, properly functioning client
+; server process - just let them expire. A single, properly functioning client
; should not trip these bans.
;
; To disable, set autobanAttempts or autobanTimeframe to 0. Commenting these
-; settings out will cause Murmur to use the defaults:
+; settings out will cause the server to use the defaults:
;
; To avoid autobanning successful connection attempts from the same IP address,
; set autobanSuccessfulConnections=false.
@@ -386,14 +386,14 @@ allowping=true
; Enables logging of group changes. This means that every time a group in a
; channel changes, the server will log all groups and their members from before
; the change and after the change. Default is false. This option was introduced
-; with Murmur 1.4.0.
+; with Mumble server 1.4.0.
;
;loggroupchanges=false
; Enables logging of ACL changes. This means that every time the ACL in a
; channel changes, the server will log all ACLs from before the change and
-; after the change. Default is false. This option was introduced with Murmur
-; 1.4.0.
+; after the change. Default is false. This option was introduced with
+; Mumble server 1.4.0.
;
;logaclchanges=false
@@ -401,7 +401,7 @@ allowping=true
; clients will respect this option in the UI (e.g. disable the recording feature
; in the UI). Additionally any client that tries to start a recording is kicked
; from the server with a corresponding message, if recording is disabled.
-; Default is true. This option was introduced with Murmur 1.5.0.
+; Default is true. This option was introduced with Mumble server 1.5.0.
;
; allowRecording=true
diff --git a/src/mumble/mumble.appcompat.manifest b/auxiliary_files/mumble.appcompat.manifest
index fa9d34422..09a0a7348 100644
--- a/src/mumble/mumble.appcompat.manifest
+++ b/auxiliary_files/mumble.appcompat.manifest
@@ -6,7 +6,7 @@
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- Win 7 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- Win 8 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- Win 8.1 -->
- <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- Win 10 -->
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- Win 10 & 11 -->
</application>
</compatibility>
</assembly>
diff --git a/scripts/mumble-overlay b/auxiliary_files/run_scripts/mumble-overlay.in
index f512c5c98..0c8d9e0b5 100755
--- a/scripts/mumble-overlay
+++ b/auxiliary_files/run_scripts/mumble-overlay.in
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright 2005-2020 The Mumble Developers. All rights reserved.
+# Copyright 2005-@MUMBLE_BUILD_YEAR@ The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
@@ -10,9 +10,9 @@ if [ -z "$1" -o "$1" = '--help' ]; then
exit 1
fi
-for libpath in /usr/lib /usr/lib/mumble /usr/lib32 /usr/lib32/mumble /usr/lib64 /usr/lib64/mumble; do
+for libpath in @MUMBLE_INSTALL_ABS_LIBDIR@ /usr/lib /usr/lib/mumble /usr/lib32 /usr/lib32/mumble /usr/lib64 /usr/lib64/mumble; do
if [ -d "$libpath" ]; then
- for lib in $libpath/libmumbleoverlay*.so
+ for lib in $libpath/lib@MUMBLE_OVERLAY_BINARY_BASENAME@*.so
do
case $(file -L "$lib") in
*64-bit*) MUMBLE_OVERLAY_PATH_64="$lib" ; echo set ;;
@@ -41,14 +41,14 @@ is32=no
case $(file -L "$binary") in
*64-bit*)
if [ -z "${MUMBLE_OVERLAY_PATH_64}" ]; then
- echo "64-bit libmumbleoverlay.so not found" >&2
+ echo "64-bit lib@MUMBLE_OVERLAY_BINARY_BASENAME@.so not found" >&2
exit 1
fi
MUMBLE_PRELOAD="${MUMBLE_OVERLAY_PATH_64}"
;;
*32-bit*)
if [ -z "${MUMBLE_OVERLAY_PATH_32}" ]; then
- echo "32-bit libmumbleoverlay.so not found" >&2
+ echo "32-bit lib@MUMBLE_OVERLAY_BINARY_BASENAME@.so not found" >&2
exit 1
fi
MUMBLE_PRELOAD="${MUMBLE_OVERLAY_PATH_32}"
@@ -61,7 +61,7 @@ case $(file -L "$binary") in
MUMBLE_PRELOAD="${MUMBLE_PRELOAD} ${MUMBLE_OVERLAY_PATH_32}"
fi
if [ -z "${MUMBLE_PRELOAD}" ]; then
- echo "Neither 32-bit or 64-bit libmumbleoverlay.so found"
+ echo "Neither 32-bit or 64-bit lib@MUMBLE_OVERLAY_BINARY_BASENAME@.so found"
exit 1
fi
esac
diff --git a/scripts/mumble-server-user-wrapper b/auxiliary_files/run_scripts/mumble-server-user-wrapper.in
index a2c3f50fe..3890e5753 100755
--- a/scripts/mumble-server-user-wrapper
+++ b/auxiliary_files/run_scripts/mumble-server-user-wrapper.in
@@ -1,11 +1,11 @@
#! /bin/bash
#
-# Copyright 2005-2020 The Mumble Developers. All rights reserved.
+# Copyright 2005-@MUMBLE_BUILD_YEAR@ The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file at the root of the
# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-DIR=$HOME/murmur
+DIR=$HOME/mumble-server
SYSDIR=/usr/share/doc/mumble-server/examples
if [ $UID == 0 ] || [ $EUID == 0 ]; then
@@ -44,10 +44,10 @@ done
DBUSFILE=$DIR/.dbus.sh
if [ $DO_KILL == 1 ]; then
- if pkill -U $UID -u $EUID -o -x -f "/usr/sbin/murmurd -ini $DIR/murmur.ini"; then
+ if pkill -U $UID -u $EUID -o -x -f "/usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini"; then
echo "Termination signal sent"
else
- echo "Murmur process not found; not terminated"
+ echo "Mumble server process not found; not terminated"
exit 2
fi
exit 0
@@ -60,46 +60,46 @@ fi
cd $DIR || exit 2
-if [ ! -f $DIR/murmur.ini ]; then
- echo "Creating $DIR/murmur.ini"
- if [ -f $SYSDIR/murmur.ini ]; then
- cp $SYSDIR/murmur.ini $DIR
- elif [ -f $SYSDIR/murmur.ini.gz ]; then
- gzip -cd $SYSDIR/murmur.ini.gz > $DIR/murmur.ini
+if [ ! -f $DIR/mumble-server.ini ]; then
+ echo "Creating $DIR/mumble-server.ini"
+ if [ -f $SYSDIR/mumble-server.ini ]; then
+ cp $SYSDIR/mumble-server.ini $DIR
+ elif [ -f $SYSDIR/mumble-server.ini.gz ]; then
+ gzip -cd $SYSDIR/mumble-server.ini.gz > $DIR/mumble-server.ini
else
- echo "Could not find template for murmur.ini in $SYSDIR."
+ echo "Could not find template for mumble-server.ini in $SYSDIR."
exit 2
fi
elif [ $DO_INITONLY == 1 ]; then
- echo "$DIR/murmur.ini already exists, initialization failed."
+ echo "$DIR/mumble-server.ini already exists, initialization failed."
exit 2
fi
if [ $DO_INITONLY == 1 ]; then
- echo "Initialization done. Please edit $DIR/murmur.ini"
+ echo "Initialization done. Please edit $DIR/mumble-server.ini"
exit 0
fi
if [ "X$SETPW" != "X" ]; then
echo "Setting superuser password to \"$SETPW\""
- /usr/sbin/murmurd -ini $DIR/murmur.ini -supw $SETPW
+ /usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini -supw $SETPW
exit 0
fi
-PID=$(pgrep -U $UID -u $EUID -o -x -f "/usr/sbin/murmurd -ini $DIR/murmur.ini")
+PID=$(pgrep -U $UID -u $EUID -o -x -f "/usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini")
if [ $DO_STATUS == 1 ]; then
if [ "X$PID" != "X" ]; then
- echo "Murmur is running"
+ echo "Mumble server is running"
exit 1
else
- echo "Murmur is not running"
+ echo "Mumble server is not running"
exit 0
fi
fi
if [ "X$PID" != "X" ]; then
- echo "Murmur is already running."
+ echo "Mumble server is already running."
exit 1
fi
@@ -116,5 +116,5 @@ if ! dbus-send --print-reply --dest=org.freedesktop.DBus --type=method_call / or
fi
fi
-echo "Starting Murmur"
-exec /usr/sbin/murmurd -ini $DIR/murmur.ini
+echo "Starting Mumble server"
+exec /usr/sbin/@MUMBLE_SERVER_BINARY_NAME@ -ini $DIR/mumble-server.ini
diff --git a/cmake/check_mysql.cmake b/cmake/check_mysql.cmake
new file mode 100644
index 000000000..5aa19fbe6
--- /dev/null
+++ b/cmake/check_mysql.cmake
@@ -0,0 +1,13 @@
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+function(check_mysql_connectivity)
+ set(options REQUIRED)
+ set(oneValueArgs USERNAME PASSWORD)
+ set(multiValueArgs "")
+ cmake_parse_arguments(MYSQL_CONNECTIVITY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ find_program(MYSQL_CLI "mysql" MYSQL_CONNECTIVITY_REQUIRED)
+endfunction()
diff --git a/cmake/delayed_configure_files.cmake b/cmake/delayed_configure_files.cmake
new file mode 100644
index 000000000..c75200564
--- /dev/null
+++ b/cmake/delayed_configure_files.cmake
@@ -0,0 +1,115 @@
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+# This function allows to delay calls to configure_file to the post-build phase. This can become necessary, if one wants to
+# use the result of generator expressions for the substitutions performed via configure_file. Generator expressions are only
+# evaluated at build time, while configure_file runs at configure time. To work around this issue, this function will create
+# an auxiliary target that generates a new cmake script at build time and this cmake script in turn will call configure_file.
+# The variables set in that cmake script are passed as arguments to this function. Since the auxiliary script is generated
+# at build time, generator expressions can be used in the variable definitions.
+#
+# Parameters:
+# PYTHON_INTERPRETER <path> Path to a working Python interpreter. Mandatory argument.
+# FILES <inFile=outFile> ... Set of files to configure as key-value-pairs (in-file=out-file). Mandatory argument.
+# TARGET <target> If given, it is made sure that <target> is fully built, before the configure_file action happens
+# SCRIPT_NAME <name> The name of the auxiliary cmake script. If not provided, a default name is generated
+# PASSTHROUGH_VARIABLES <var> ... Set of existing variables to pass-through to the generated script so that they can be used
+# in the configured file(s).
+# VARIABLES <name=value> ... Set of additional variables defined as key-value-pairs. The definition of <value> may make
+# use of generator expressions.
+# @ONLY Passes the @ONLY parameter to the generated configure_file invocations
+function(delayed_configure_files)
+ set(options "@ONLY")
+ set(oneValueArgs TARGET SCRIPT_NAME PYTHON_INTERPRETER)
+ set(multiValueArgs FILES PASSTHROUGH_VARIABLES VARIABLES)
+
+ cmake_parse_arguments(DELAYED_CONFIGURE_FILES "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if(DELAYED_CONFIGURE_FILES_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments to delayed_configure_file: \"${DELAYED_CONFIGURE_FILES_UNPARSED_ARGUMENTS}\"")
+ endif()
+ # Check required args
+ if(NOT DELAYED_CONFIGURE_FILES_FILES)
+ message(FATAL_ERROR "Called delayed_configure_files without the FILES parameter")
+ endif()
+ if(DELAYED_CONFIGURE_FILES_TARGET)
+ if(NOT TARGET ${DELAYED_CONFIGURE_FILES_TARGET})
+ message(FATAL_ERROR "delayed_configure_files: Provided target \"${DELAYED_CONFIGURE_FILES_TARGET}\" is not actually a (valid) target")
+ endif()
+ endif()
+ if(NOT DELAYED_CONFIGURE_FILES_PYTHON_INTERPRETER)
+ message(FATAL_ERROR "Called delayed_configure_files without the PYTHON_INTERPRETER parameter")
+ endif()
+
+
+ # Generate a free target name
+ set(AUX_TARGET_NUM 1)
+ set(AUX_TARGET_BASENAME "delayed_configure_files_target_")
+ while(TARGET "${AUX_TARGET_BASENAME}${AUX_TARGET_NUM}")
+ math(EXPR AUX_TARGET_NUM "${AUX_TARGET_NUM} + 1")
+ endwhile()
+ set(AUX_TARGET_NAME "${AUX_TARGET_BASENAME}${AUX_TARGET_NUM}")
+
+
+ # Handle defaults
+ if(NOT DELAYED_CONFIGURE_FILES_SCRIPT_NAME)
+ set(DELAYED_CONFIGURE_FILES_SCRIPT_NAME "configure_files_${AUX_TARGET_NUM}.cmake")
+ endif()
+
+ if(DELAYED_CONFIGURE_FILES_@ONLY)
+ set(AT_ONLY "--at-only")
+ else()
+ set(AT_ONLY "")
+ endif()
+
+
+ if(DELAYED_CONFIGURE_FILES_VARIABLES)
+ set(VARIABLES ${DELAYED_CONFIGURE_FILES_VARIABLES})
+ else()
+ set(VARIABLES "")
+ endif()
+ if(DELAYED_CONFIGURE_FILES_PASSTHROUGH_VARIABLES)
+ foreach(CURRENT_VAR IN LISTS DELAYED_CONFIGURE_FILES_PASSTHROUGH_VARIABLES)
+ if(NOT DEFINED ${CURRENT_VAR})
+ message(FATAL_ERROR "delayed_configure_files: Can't passthrough non-existing variable \"${CURRENT_VAR}\"")
+ endif()
+
+ list(APPEND VARIABLES "${CURRENT_VAR}=${${CURRENT_VAR}}")
+ endforeach()
+ endif()
+
+ if(NOT VARIABLES STREQUAL "")
+ set(VARIABLES --variables ${VARIABLES})
+ endif()
+
+
+
+ # Create a command to generate an intermediary cmake script that will take care of configuring the respective
+ # files, once executed
+ add_custom_command(
+ OUTPUT "${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ COMMAND "${DELAYED_CONFIGURE_FILES_PYTHON_INTERPRETER}"
+ ARGS "${CMAKE_SOURCE_DIR}/scripts/generate_configure_cmake_script.py"
+ --files ${DELAYED_CONFIGURE_FILES_FILES} ${VARIABLES}
+ --output "${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ ${AT_ONLY}
+ COMMENT "Generating delayed configure script ${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ )
+
+ # Create a target that will execute the generated cmake script. Make sure that this target will be
+ # added to the default build target, ensuring that it is always executed.
+ add_custom_target(
+ ${AUX_TARGET_NAME} ALL
+ DEPENDS "${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ COMMAND "${CMAKE_COMMAND}" -P "${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ COMMENT "Executing delayed configure script ${DELAYED_CONFIGURE_FILES_SCRIPT_NAME}"
+ )
+
+ if(DELAYED_CONFIGURE_FILES_TARGET)
+ # Make our auxiliary target depend on the provided main target to ensure that the main target is always built
+ # before our auxiliary target executes.
+ add_dependencies(${AUX_TARGET_NAME} ${DELAYED_CONFIGURE_FILES_TARGET})
+ endif()
+endfunction()
diff --git a/cmake/install-paths.cmake b/cmake/install-paths.cmake
index 87069e98d..11162c91b 100644
--- a/cmake/install-paths.cmake
+++ b/cmake/install-paths.cmake
@@ -29,6 +29,7 @@ if(UNIX)
set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1")
set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}")
set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses")
+ set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble")
else()
set(EXECUTABLEDIR_DEFAULT "bin")
set(LIBDIR_DEFAULT "${CMAKE_INSTALL_LIBDIR}/mumble")
@@ -37,6 +38,7 @@ if(UNIX)
set(MANDIR_DEFAULT "${CMAKE_INSTALL_MANDIR}/man1")
set(DOCDIR_DEFAULT "${CMAKE_INSTALL_DOCDIR}")
set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses")
+ set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble")
endif()
else()
set(EXECUTABLEDIR_DEFAULT ".")
@@ -48,6 +50,7 @@ else()
set(MANDIR_DEFAULT "./man1")
set(DOCDIR_DEFAULT "./docs")
set(LICENSEDIR_DEFAULT "${EXECUTABLEDIR_DEFAULT}/licenses")
+ set(SYSCONFDIR_DEFAULT "${CMAKE_INSTALL_SYSCONFDIR}/mumble")
endif()
set(MUMBLE_INSTALL_EXECUTABLEDIR "${EXECUTABLEDIR_DEFAULT}" CACHE PATH "The directory to install the main executable(s) into")
@@ -57,47 +60,50 @@ set(MUMBLE_INSTALL_SCRIPTDIR "${SCRIPTDIR_DEFAULT}" CACHE PATH "The directory to
set(MUMBLE_INSTALL_MANDIR "${MANDIR_DEFAULT}" CACHE PATH "The directory to install man files into")
set(MUMBLE_INSTALL_DOCDIR "${DOCDIR_DEFAULT}" CACHE PATH "The directory to install documentation files into")
set(MUMBLE_INSTALL_LICENSEDIR "${LICENSEDIR_DEFAULT}" CACHE PATH "The directory to install license files into")
+set(MUMBLE_INSTALL_SYSCONFDIR "${SYSCONFDIR_DEFAULT}" CACHE PATH "The directory to install system-wide config files to")
-if(packaging)
- # Using absolute install paths doesn't allow CPack to create the installer for us.
- # Therefore we have to make sure that the paths are indeed relative.
- assert_is_relative("${MUMBLE_INSTALL_EXECUTABLEDIR}")
- assert_is_relative("${MUMBLE_INSTALL_LIBDIR}")
- assert_is_relative("${MUMBLE_INSTALL_PLUGINDIR}")
- assert_is_relative("${MUMBLE_INSTALL_SCRIPTDIR}")
- assert_is_relative("${MUMBLE_INSTALL_MANDIR}")
- assert_is_relative("${MUMBLE_INSTALL_DOCDIR}")
- assert_is_relative("${MUMBLE_INSTALL_LICENSEDIR}")
+# Using absolute install paths doesn't allow CPack to create the installer for us.
+# Therefore we have to make sure that the paths are indeed relative.
+assert_is_relative("${MUMBLE_INSTALL_EXECUTABLEDIR}")
+assert_is_relative("${MUMBLE_INSTALL_LIBDIR}")
+assert_is_relative("${MUMBLE_INSTALL_PLUGINDIR}")
+assert_is_relative("${MUMBLE_INSTALL_SCRIPTDIR}")
+assert_is_relative("${MUMBLE_INSTALL_MANDIR}")
+assert_is_relative("${MUMBLE_INSTALL_DOCDIR}")
+assert_is_relative("${MUMBLE_INSTALL_LICENSEDIR}")
+assert_is_relative("${MUMBLE_INSTALL_SYSCONFDIR}")
- if(WIN32)
- if(NOT "${MUMBLE_INSTALL_LIBDIR}" STREQUAL "${LIBDIR_DEFAULT}")
- # The path has been altered which will not allow for a working installer to be created
- message(FATAL_ERROR "Found non default MUMBLE_INSTALL_LIBDIR path, that will not result in a working installer! (\"${MUMBLE_INSTALL_LIBDIR}\")")
- endif()
+if (packaging AND WIN32)
+ if(NOT "${MUMBLE_INSTALL_LIBDIR}" STREQUAL "${LIBDIR_DEFAULT}")
+ # The path has been altered which will not allow for a working installer to be created
+ message(FATAL_ERROR "Found non default MUMBLE_INSTALL_LIBDIR path, that will not result in a working installer! (\"${MUMBLE_INSTALL_LIBDIR}\")")
endif()
-else()
- # Turn all install paths into absolute ones as this is required for e.g. shared libraries to be loaded
- make_absolute(MUMBLE_INSTALL_EXECUTABLEDIR "${MUMBLE_INSTALL_EXECUTABLEDIR}")
- make_absolute(MUMBLE_INSTALL_LIBDIR "${MUMBLE_INSTALL_LIBDIR}")
- make_absolute(MUMBLE_INSTALL_PLUGINDIR "${MUMBLE_INSTALL_PLUGINDIR}")
- make_absolute(MUMBLE_INSTALL_SCRIPTDIR "${MUMBLE_INSTALL_SCRIPTDIR}")
- make_absolute(MUMBLE_INSTALL_MANDIR "${MUMBLE_INSTALL_MANDIR}")
- make_absolute(MUMBLE_INSTALL_DOCDIR "${MUMBLE_INSTALL_DOCDIR}")
- make_absolute(MUMBLE_INSTALL_LICENSEDIR "${MUMBLE_INSTALL_LICENSEDIR}")
endif()
+# Generate an absolute path from all our relative install paths, so they can be used in places where
+# the final, full installation path is required.
+make_absolute(MUMBLE_INSTALL_ABS_EXECUTABLEDIR "${MUMBLE_INSTALL_EXECUTABLEDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_LIBDIR "${MUMBLE_INSTALL_LIBDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_PLUGINDIR "${MUMBLE_INSTALL_PLUGINDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_SCRIPTDIR "${MUMBLE_INSTALL_SCRIPTDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_MANDIR "${MUMBLE_INSTALL_MANDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_DOCDIR "${MUMBLE_INSTALL_DOCDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_LICENSEDIR "${MUMBLE_INSTALL_LICENSEDIR}")
+make_absolute(MUMBLE_INSTALL_ABS_SYSCONFDIR "${MUMBLE_INSTALL_SYSCONFDIR}")
+
option(display-install-paths OFF)
if(display-install-paths)
message(STATUS "")
message(STATUS "These are the paths the different components will be installed to:")
- message(STATUS "Executables: \"${MUMBLE_INSTALL_EXECUTABLEDIR}\"")
- message(STATUS "Libraries: \"${MUMBLE_INSTALL_LIBDIR}\"")
- message(STATUS "Plugins: \"${MUMBLE_INSTALL_PLUGINDIR}\"")
- message(STATUS "Scripts: \"${MUMBLE_INSTALL_SCRIPTDIR}\"")
- message(STATUS "Man-files: \"${MUMBLE_INSTALL_MANDIR}\"")
- message(STATUS "Documentation: \"${MUMBLE_INSTALL_DOCDIR}\"")
- message(STATUS "Licenses: \"${MUMBLE_INSTALL_LICENSEDIR}\"")
+ message(STATUS "Executables: \"${MUMBLE_INSTALL_ABS_EXECUTABLEDIR}\"")
+ message(STATUS "Libraries: \"${MUMBLE_INSTALL_ABS_LIBDIR}\"")
+ message(STATUS "Plugins: \"${MUMBLE_INSTALL_ABS_PLUGINDIR}\"")
+ message(STATUS "Scripts: \"${MUMBLE_INSTALL_ABS_SCRIPTDIR}\"")
+ message(STATUS "Man-files: \"${MUMBLE_INSTALL_ABS_MANDIR}\"")
+ message(STATUS "Documentation: \"${MUMBLE_INSTALL_ABS_DOCDIR}\"")
+ message(STATUS "Licenses: \"${MUMBLE_INSTALL_ABS_LICENSEDIR}\"")
+ message(STATUS "Config files: \"${MUMBLE_INSTALL_ABS_SYSCONFDIR}\"")
message(STATUS "")
endif()
diff --git a/cmake/pkg-utils.cmake b/cmake/pkg-utils.cmake
index 07cf55208..fabccdd26 100644
--- a/cmake/pkg-utils.cmake
+++ b/cmake/pkg-utils.cmake
@@ -211,3 +211,76 @@ macro(find_pkg ARG_ALIASES)
unset(ALIASES)
unset(NAME)
endmacro()
+
+
+# Uses pkg-config to obtain the value of a module variable
+# In contrast to standard cmake's pkg_get_variable, this function abstracts the
+# difference between pkg-config and pkgconf where one of them uses underscores in
+# the variable names, whereas the other does not. Thus, when provided with a
+# variable name that contains underscores and for which no value could be fetched,
+# the function will automatically check whether removing the underscores from the
+# variable name will yield a non-empty value and if this is the case, this value
+# will be returned.
+#
+# OUTPUT_VARIABLE <varName> Name of the output variable (Required)
+# MODULE <module> Name of the module to search for (Required)
+# VARIABLE_NAME <varName> Name of the variable to search for within the module (Required)
+# Note: This name should be the one containing underscores.
+# QUIET Don't print any status messages
+# REQUIRED Error, if no non-empty value could be retrieved
+# DEBUG Print status messages intended to debug this function
+function(get_pkgconf_variable)
+ set(options QUIET REQUIRED DEBUG)
+ set(oneValueArgs OUTPUT_VARIABLE MODULE VARIABLE_NAME)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(GET_PKGCONF_VAR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ # Handle required args
+ set(REQUIRED_ARGS ${oneValueArgs})
+ foreach(CURRENT IN LISTS REQUIRED_ARGS)
+ if (NOT GET_PKGCONF_VAR_${CURRENT})
+ message(FATAL_ERROR "get_pkgconf_variable: Missing mandatory parameter \"${CURRENT}\"")
+ endif()
+ endforeach()
+
+ # Check that we have found pkg-config to begin with
+ if(NOT PkgConfig_FOUND)
+ message(FATAL_ERROR "get_pkgconf_variable: pkg-config was not found - can't use it to fetch variables")
+ endif()
+
+ if(GET_PKGCONF_VAR_DEBUG)
+ message(STATUS "get_pkgconf_variable: Searching for \"${GET_PKGCONF_VAR_VARIABLE_NAME}\" in module \"${GET_PKGCONF_VAR_MODULE}\"")
+ endif()
+
+ pkg_get_variable(VAR_VALUE "${GET_PKGCONF_VAR_MODULE}" "${GET_PKGCONF_VAR_VARIABLE_NAME}")
+
+ if(NOT VAR_VALUE AND GET_PKGCONF_VAR_VARIABLE_NAME MATCHES ".*_.*")
+ # There seems to be a difference between pkgconf and pkg-config where one uses underscores
+ # in variable names, whereas the other does not. We assume that VAR_NAME is the version with
+ # the underscores, so if that failed to fetch a value, we try again without the underscores.
+ string(REPLACE "_" "" VAR_NAME_WITHOUT_UNDERSCORES "${GET_PKGCONF_VAR_VARIABLE_NAME}")
+
+ if(GET_PKGCONF_VAR_DEBUG)
+ message(STATUS "get_pkgconf_variable: Removed underscores from variable name")
+ message(STATUS "get_pkgconf_variable: Now searching for variable \"${VAR_NAME_WITHOUT_UNDERSCORES}\"")
+ endif()
+
+ pkg_get_variable(VAR_VALUE "${GET_PKGCONF_VAR_MODULE}" "${VAR_NAME_WITHOUT_UNDERSCORES}")
+ endif()
+
+ if(NOT VAR_VALUE)
+ if(GET_PKGCONF_VAR_REQUIRED)
+ message(FATAL_ERROR "get_pkgconf_variable: Failed to fetch \"${GET_PKGCONF_VAR_VARIABLE_NAME}\" of module \"${GET_PKGCONF_VAR_MODULE}\"")
+ endif()
+ if(NOT GET_PKGCONF_VAR_QUIET)
+ message(WARNING "get_pkgconf_variable: Failed to fetch \"${GET_PKGCONF_VAR_VARIABLE_NAME}\" of module \"${GET_PKGCONF_VAR_MODULE}\"")
+ endif()
+ endif()
+
+ if(GET_PKGCONF_VAR_DEBUG)
+ message(STATUS "get_pkgconf_variable: Determined ${GET_PKGCONF_VAR_VARIABLE_NAME}=\"${VAR_VALUE}\"")
+ endif()
+
+ set(${GET_PKGCONF_VAR_OUTPUT_VARIABLE} "${VAR_VALUE}" PARENT_SCOPE)
+endfunction()
diff --git a/cmake/qt-utils.cmake b/cmake/qt-utils.cmake
index ba322ca5f..2b0207a38 100644
--- a/cmake/qt-utils.cmake
+++ b/cmake/qt-utils.cmake
@@ -59,18 +59,37 @@ function(include_translations OUT_VAR OUT_DIR TS_FILES)
compile_translations(QM_FILES "${OUT_DIR}" "${TS_FILES}")
set(QRC_PATH "${OUT_DIR}/mumble_translations.qrc")
+ set(TMP_PATH "${QRC_PATH}.tmp")
# Create a resource file (.qrc) containing the name of the compiled translation files (.qm).
# This is required in order to embed those files into the built executable.
# NOTE: We write the files' name instead of their path because they are in the same directory as the resource file.
- file(WRITE ${QRC_PATH} "<!DOCTYPE RCC><RCC version=\"1.0\">\n<qresource>\n")
+ file(WRITE ${TMP_PATH} "<!DOCTYPE RCC><RCC version=\"1.0\">\n<qresource>\n")
foreach(QM_FILE ${QM_FILES})
get_filename_component(FILENAME ${QM_FILE} NAME)
- file(APPEND ${QRC_PATH} "\t<file>${FILENAME}</file>\n")
+ file(APPEND ${TMP_PATH} "\t<file>${FILENAME}</file>\n")
endforeach()
- file(APPEND ${QRC_PATH} "</qresource>\n</RCC>\n")
+ file(APPEND ${TMP_PATH} "</qresource>\n</RCC>\n")
+
+ if(EXISTS "${QRC_PATH}")
+ # The QRC file already exists - there's a chance that it has been generated before already and that
+ # its contents have not changed. In this case, we don't want to overwrite it, as to not suggest to
+ # cmake that it has changed and that it needs to be recompiled.
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E compare_files "${TMP_PATH}" "${QRC_PATH}" RESULT_VARIABLE COMP_RESULT)
+
+ if(COMP_RESULT EQUAL 0)
+ # Files are equal -> Don't overwrite
+ elseif(COMP_RESULT 1)
+ # Files are different -> overwrite
+ file(RENAME "${TMP_PATH}" "${QRC_PATH}")
+ else()
+ message(FATAL_ERROR "Encountered error while comparing files \"${QRC_PATH}\" and \"${TMP_PATH}\"")
+ endif()
+ else()
+ file(RENAME "${TMP_PATH}" "${QRC_PATH}")
+ endif()
set("${OUT_VAR}" "${QRC_PATH}" PARENT_SCOPE)
endfunction()
@@ -122,7 +141,8 @@ function(bundle_qt_translations TARGET)
# Generate the QRC file that contains the Qt translations and potentially our overwrites of them
execute_process(
COMMAND "${PYTHON_INTERPRETER}" "${CMAKE_SOURCE_DIR}/scripts/generate-mumble_qt-qrc.py"
- "${GENERATED_QRC_FILE}" "${QT_TRANSLATIONS_DIRECTORY}" "${QT_TRANSLATION_OVERWRITE_DIR}"
+ --output "${GENERATED_QRC_FILE}" --translation-dir "${QT_TRANSLATIONS_DIRECTORY}"
+ --local-translation-dir "${QT_TRANSLATION_OVERWRITE_DIR}"
RESULT_VARIABLE GENERATOR_EXIT_CODE
)
diff --git a/docs/dev/ExtendingTheIceInterface.md b/docs/dev/ExtendingTheIceInterface.md
index 754aaf6e1..602d95046 100644
--- a/docs/dev/ExtendingTheIceInterface.md
+++ b/docs/dev/ExtendingTheIceInterface.md
@@ -8,73 +8,58 @@ Note: If not stated otherwise all referenced files live in `src/murmur/`.
The files involved in extending the Ice interface are
| **File** | **Description** |
| -------- | --------------- |
-| `Murmur.ice` | Contains the formal definition of the interface |
-| `Murmur.h` | Contains the C++ interface definition (abstract base classes). This file is automatically generated based on `Murmur.ice` when invoking cmake (via `slice2cpp`). It lives in `<build directory>/src/murmur`. This file is needed to generate `MurmurIceWrapper.cpp` |
-| `Murmur.cpp` | Contains some boilerplate and Ice-internal implementation code. This file is generated and lives alongside `Murmur.h` |
-| `MurmurI.h` | Contains the definition of the actually implemented API classes (`ServerI` and `MetaI`). These extend the abstract base classes from `Murmur.h` |
-| `MurmurIceWrapper.cpp` | Contains wrapper implementation of the `*I` API classes. This file is auto-generated by the `scripts/generateIceWrapper.py` script |
-| `MurmurIce.h` | Contains the definition of a statically used helper class |
-| `MurmurIce.cpp` | Contains the implementation of that helper class **and** _static_ functions used to actually implement the server-side functionality of the Ice API functions |
-| `RPC.cpp` | Contains the implementations of the `Server` (the Mumble server, _not_ the Ice API type) class's member functions that are required to make certain functionality accessible to the static functions in `MurmurIce.cpp` |
+| `MumbleServer.ice` | Contains the formal definition of the interface |
+| `MumbleServer.h` | Contains the C++ interface definition (abstract base classes). This file is generated based on `MumbleServer.ice` when invoking cmake (via `slice2cpp`). |
+| `MumbleServer.cpp` | Contains some boilerplate and Ice-internal implementation code. This file is automatically generated. |
+| `MumbleServerI.h` | Contains the definition of the actually implemented API classes (`ServerI` and `MetaI`). These extend the abstract base classes from `MumbleServer.h` |
+| `MumbleServerWrapper.cpp` | Contains wrapper implementation of the `*I` API classes. This file is automatically generated. |
+| `MumbleServere.h` | Contains the definition of a statically used helper class |
+| `MumbleServere.cpp` | Contains the implementation of that helper class **and** _static_ functions used to actually implement the server-side functionality of the Ice API functions |
+| `RPC.cpp` | Contains the implementations of the `Server` (the Mumble server, _not_ the Ice API type) class's member functions that are required to make certain functionality accessible to the static functions in `MumbleServerIce.cpp` |
+
+All auto-generated functions will end up in the corresponding directory inside the `build` directory.
## Overview
The steps are
-1. Let cmake invoke `slice2cpp` to generate `Murmur.h` and `Murmur.cpp`
-2. Invoke `generateIceWrapper.py` to generate `MurmurIceWrapper.cpp`
-3. Add new function declarations to `MurmurU.h`
-4. Write impl function in `MurmurIce.cpp`
-5. Potentially write new public API functions (declare in `Server.h` and define in `RPC.cpp`
-
-## Detailed instructions
-
-Before proceeding any further you should run cmake once in order for these files to get generated as they are needed for the next step. Assuming your
-build directory lives directly under the repository's root, you can do this by invoking
-```bash
-cmake ..
-```
+1. Add new function declarations to `MumbleServerI.h`
+2. Write impl function in `MumbleServerIce.cpp`
+3. Potentially write new public API functions (declare in `Server.h` and define in `RPC.cpp`
-The next step is the generation of the `MurmurIceWrapper.cpp` file by executing the following command (assuming the call is performed from the
-repository's root and the build directory is called `build`):
-```bash
-$ python3 scripts/generateIceWrapper.py --ice-file src/murmur/Murmur.ice --generated-ice-header build/src/murmur/Murmur.h --out-file src/murmur/MurmurIceWrapper.cpp
-Using ICE-file at "src/murmur/Murmur.ice"
-Using ICE-generated header file at "build/src/murmur/Murmur.h"
-```
-The paths that are given in the example may have to be adapted in order for it to work on your machine.
+## Details
-The `MurmurIceWrapper.cpp` file generates the `*_async` versions of the Ice callbacks that handle the async nature of these callbacks and also
+The `MumbleServerIceWrapper.cpp` file contains the `*_async` versions of the Ice callbacks that handle the async nature of these callbacks and also
contain the boilerplate for e.g. verification of the caller and things like this. Most importantly though these functions call the `impl_*` functions
-defined in `MurmurIce.cpp`. For instance a function called `updateCertificates` inside the `Server` class will call `impl_Server_updateCertificate`
-which has to be defined as a `static` function inside `MurmurIce.cpp`.
+defined in `MumbleServerIce.cpp`. For instance a function called `updateCertificates` inside the `Server` class will call
+`impl_Server_updateCertificate` which has to be defined as a `static` function inside `MumbleServerIce.cpp`.
-The declaration of the async functions generated this way are contained inside `MurmurI.h`. You have to manually add the function's declaration into
-there. The easiest way to do this is to let the script generate the implementation as described above and then copy the function signature from there
-into the `Murmur.h` file (make the declaration `virtual` though).
+The declarations of the async functions generated this way are contained inside `MumbleServerI.h`. You have to manually add the function's declaration
+into there. The easiest way to do this is to let the implementation be auto-generated and then copy the function signature from there into the
+`MumbleServer.h` file (make the declaration `virtual` though).
The impl function's signature is always
```cpp
-static void impl_<className>_<functionName>(const ::Murmur::AMD_<className>_<functionName>Ptr cb [, int server_id] [, <function arguments>]) {
+static void impl_<className>_<functionName>(const ::MumbleServer::AMD_<className>_<functionName>Ptr cb [, int server_id] [, <function arguments>]) {
// Implementation goes here
cb->ice_response([<function return value>]);
}
```
- `<className>`: Name of the class the function is declared in (e.g. `Server` or `Meta`)
-- `<functionName>`: Name of the function as declared in the `Murmur.ice` file
+- `<functionName>`: Name of the function as declared in the `MumbleServer.ice` file
- `[, int server_id]`: Only needed when extending the `Server` API class (the brackets are not part of what needs to be written in code)
- `[, <function arguments>]`: To be replaced by the list of arguments the function takes
- `[<function return value>]`: To be replaced with the value this function returns or to be removed if the function does not return anything.
-If you have used non-default types that are declared in `Murmur.ice` (e.g. `IdList`), you can reference them here as `::Murmur::<typeName>` (e.g.
-`::Murmur::IdList`).
+If you have used non-default types that are declared in `MumbleServer.ice` (e.g. `IdList`), you can reference them here as
+`::MumbleServer::<typeName>` (e.g. `::MumbleServer::IdList`).
Error reporting works via the `cb->ice_exception` function and if everything went well, the function must end by calling `cb->ice_response`
(potentially passing a value to that function that shall be returned to the caller of the function).
-In general it is a good idea to have a look at the existing implementation inside `MurmurIce.cpp` and take inspiration from those.
+In general it is a good idea to have a look at the existing implementation inside `MumbleServerIce.cpp` and take inspiration from those.
Note that the implementations make heavy use of macros (e.g. `NEED_SERVER`, `NEED_CHANNEL`, etc.). These will initialize the corresponding variables
(`server`, `channel`, etc.) based in the parameters fed into the function (In order to obtain the channel, user, etc. you always have to initialize
@@ -91,22 +76,26 @@ public API function in the Mumble `Server` class that has the implementation in
## Testing Ice interface changes
-So far, you've used `Murmur.ice` to modify and generate **server-side** code. The same file can be used to create Ice **clients**, which then interact with the server. A small amount of configuration is required, namely:
+So far, you've used `MumbleServer.ice` to modify and generate **server-side** code. The same file can be used to create Ice **clients**, which then
+interact with the server. A small amount of configuration is required, namely:
| **Setting** | **Example** | **Description** |
| --- | --- | --- |
-| `host` | `127.0.0.1` | The IP address (or domain) to which Murmur's Ice interface is bound. (Check [`murmur.ini`'s `ice` property `-h` flag](../../scripts/murmur.ini#L65).) |
+| `host` | `127.0.0.1` | The IP address (or domain) to which MumbleServer's Ice interface is bound. (Check [`murmur.ini`'s `ice` property `-h` flag](../../scripts/murmur.ini#L65).) |
| `port` | `6502` | The TCP port on which Ice's interface is listening. (Check [`murmur.ini`'s `ice` property `-p` flag](../../scripts/murmur.ini#L65).) |
| `secret` | `ice_pa55word` | A clear-text "password" used to authorize with the Ice server. (This will either be [`icesecretread`](../../scripts/murmur.ini#L79) or [`icesecretwrite`](../../scripts/murmur.ini#L80) from [`murmur.ini`](../../scripts/murmur.ini), with read-only or read-write privileges respectively.) |
-| `slicefile` | `Murmur.ice` | The [`Murmur.ice`](../../src/murmur/Murmur.ice) file, containing any changes you intend to test. (This can be dynamically fetched from the Murmur server, provided it's running, has Ice exposed, and was built with the updated `Murmur.ice` file.) |
+| `slicefile` | `MumbleServer.ice` | The [`MumbleServer.ice`](../../src/murmur/MumbleServer.ice) file, containing any changes you intend to test. (This can be dynamically fetched from the Mumble server, provided it's running, has Ice exposed, and was built with the updated `MumbleServer.ice` file.) |
-> :warning: Since Murmur's Ice interface is clear-text, there are security factors to consider. Use a strong-ish, unique secret, not used for any other case.
+> :warning: Since the server's Ice interface is clear-text, there are security factors to consider. Use a strong-ish, unique secret, not used for
+> any other case.
-An existing Python Ice client is [`mice.py`](https://github.com/mumble-voip/mumble-scripts/blob/master/Helpers/mice.py), which simply creates necessary Ice objects and then drops you into an interactive Python shell. (Refer to the [Wiki](https://wiki.mumble.info/wiki/Mice) and [Natenom](https://blog.natenom.com/2016/02/an-introduction-on-how-to-manage-your-mumble-server-murmur-through-ice-with-mice/) for longer guides.)
+An existing Python Ice client is [`mice.py`](https://github.com/mumble-voip/mumble-scripts/blob/master/Helpers/mice.py), which simply creates
+necessary Ice objects and then drops you into an interactive Python shell. (Refer to the [Wiki](https://wiki.mumble.info/wiki/Mice) and
+[Natenom](https://blog.natenom.com/2016/02/an-introduction-on-how-to-manage-your-mumble-server-murmur-through-ice-with-mice/) for longer guides.)
```python
-# Make sure Murmur is running (in a separate terminal)
-# $ ./murmur.x86 ...
+# Make sure the Mumble server is running (in a separate terminal)
+# $ ./mumble-server ...
# Grab mice.py
$ wget --quiet https://raw.githubusercontent.com/mumble-voip/mumble-scripts/master/Helpers/mice.py
@@ -117,7 +106,7 @@ host = "127.0.0.1"
port = 6502
secret = "ice_pa55word"
prxstr = "Meta:tcp -h {} -p {} -t 1000".format(host, port)
-slicefile = "Murmur.ice"
+slicefile = "MumbleServer.ice"
EOF
@@ -129,7 +118,7 @@ Import ice... Done
Trying to retrieve slice dynamically from server... Success
Import dynamically compiled murmur class... Done
Establish ice connection... [protected]... Done
-Murmur object accessible via 'murmur' or 'm'
+MumbleServer object accessible via 'murmur' or 'm'
1 booted servers in 'sl', 's' contains 's/1 -t -e 1.0:tcp -h 127.0.0.1 -p 6502 -t 60000'
--- Reached interactive mode ---
@@ -155,4 +144,6 @@ In [5]: [(user.session, user.name) for user in s.getUsers().values()]
Out[5]: [(7L, 'Bob')]
```
-> :information_source: Refer to [the Wiki for additional 3rd-party applications](https://wiki.mumble.info/wiki/3rd_Party_Applications) which leverage Murmur's Ice interface.
+> :information_source: Refer to [the Wiki for additional 3rd-party applications](https://wiki.mumble.info/wiki/3rd_Party_Applications) which leverage
+> the server's Ice interface.
+
diff --git a/g15helper/CMakeLists.txt b/helpers/g15helper/CMakeLists.txt
index 1d5ae585e..384062460 100644
--- a/g15helper/CMakeLists.txt
+++ b/helpers/g15helper/CMakeLists.txt
@@ -15,7 +15,7 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/g15helper.rc.in" "${G15HELPER_RC}")
get_target_property(MUMBLE_SOURCE_DIR mumble SOURCE_DIR)
add_executable(g15-helper WIN32
- "${MUMBLE_SOURCE_DIR}/mumble.appcompat.manifest"
+ "${CMAKE_SOURCE_DIR}/auxiliary_files/mumble.appcompat.manifest"
"${G15HELPER_RC}"
)
diff --git a/g15helper/g15helper.c b/helpers/g15helper/g15helper.c
index 696452679..696452679 100644
--- a/g15helper/g15helper.c
+++ b/helpers/g15helper/g15helper.c
diff --git a/g15helper/g15helper.h b/helpers/g15helper/g15helper.h
index e0da34a59..e0da34a59 100644
--- a/g15helper/g15helper.h
+++ b/helpers/g15helper/g15helper.h
diff --git a/g15helper/g15helper.plist.in b/helpers/g15helper/g15helper.plist.in
index a1a2280fb..a1a2280fb 100644
--- a/g15helper/g15helper.plist.in
+++ b/helpers/g15helper/g15helper.plist.in
diff --git a/g15helper/g15helper.rc.in b/helpers/g15helper/g15helper.rc.in
index 85fc022a2..85fc022a2 100644
--- a/g15helper/g15helper.rc.in
+++ b/helpers/g15helper/g15helper.rc.in
diff --git a/g15helper/g15helper_emu.cpp b/helpers/g15helper/g15helper_emu.cpp
index 16790a829..16790a829 100644
--- a/g15helper/g15helper_emu.cpp
+++ b/helpers/g15helper/g15helper_emu.cpp
diff --git a/g15helper/g15helper_emu.h b/helpers/g15helper/g15helper_emu.h
index 43cdf9c23..43cdf9c23 100644
--- a/g15helper/g15helper_emu.h
+++ b/helpers/g15helper/g15helper_emu.h
diff --git a/g15helper/g15helper_macx.c b/helpers/g15helper/g15helper_macx.c
index c4fff8082..c4fff8082 100644
--- a/g15helper/g15helper_macx.c
+++ b/helpers/g15helper/g15helper_macx.c
diff --git a/installer/ServerInstaller.cs b/installer/ServerInstaller.cs
index a18fa3827..e9b4ac5c5 100644
--- a/installer/ServerInstaller.cs
+++ b/installer/ServerInstaller.cs
@@ -18,7 +18,7 @@ public class ServerInstaller : MumbleInstall {
string upgradeGuid = "03E9476F-0F75-4661-BFC9-A9DAEB23D3A0";
string[] binaries = {
"mumble-server.exe",
- "Murmur.ice"
+ "MumbleServer.ice"
};
string[] licenses = {
diff --git a/overlay/CMakeLists.txt b/overlay/CMakeLists.txt
index 45fa96a75..62b2ab1ba 100644
--- a/overlay/CMakeLists.txt
+++ b/overlay/CMakeLists.txt
@@ -14,7 +14,7 @@ if(BUILD_OVERLAY_XCOMPILE)
LANGUAGES CXX
)
- include("${PARENT_SOURCE_DIR}/cmake/compiler.cmake")
+ include("${MUMBLE_SOURCE_ROOT}/cmake/compiler.cmake")
endif()
set(DX11_PIXEL_SHADERS "overlay11.ps")
@@ -118,7 +118,7 @@ if(BUILD_OVERLAY_XCOMPILE)
target_include_directories(overlay
PRIVATE
${Boost_INCLUDE_DIRS}
- ${PARENT_SOURCE_DIR}
+ ${MUMBLE_SOURCE_ROOT}
${CMAKE_CURRENT_BINARY_DIR}
)
else()
@@ -156,8 +156,7 @@ if(64_BIT AND MSVC)
CMAKE_GENERATOR ${CMAKE_GENERATOR}
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
"-DVCPKG_TARGET_TRIPLET=x86-windows-static-md"
- "-DPARENT_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
- "-DMUMBLE_SOURCE_DIR=${CMAKE_SOURCE_DIR}/src/mumble"
+ "-DMUMBLE_SOURCE_ROOT=${CMAKE_SOURCE_DIR}"
"-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
# Force MSVC, because CMake prioritizes MinGW over it.
@@ -179,8 +178,7 @@ if(64_BIT AND MSVC)
-G ${CMAKE_GENERATOR}
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
"-DVCPKG_TARGET_TRIPLET=x86-windows-static-md"
- "-DPARENT_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
- "-DMUMBLE_SOURCE_DIR=${CMAKE_SOURCE_DIR}/src/mumble"
+ "-DMUMBLE_SOURCE_ROOT=${CMAKE_SOURCE_DIR}"
"-DMUMBLE_BINARY_DIR=${CMAKE_BINARY_DIR}"
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
# Force MSVC, because CMake prioritizes MinGW over it.
diff --git a/overlay/overlay_exe/CMakeLists.txt b/overlay/overlay_exe/CMakeLists.txt
index 3b9f6adbe..2f4d25250 100644
--- a/overlay/overlay_exe/CMakeLists.txt
+++ b/overlay/overlay_exe/CMakeLists.txt
@@ -17,14 +17,14 @@ else()
endif()
if(NOT BUILD_OVERLAY_XCOMPILE)
- get_target_property(MUMBLE_SOURCE_DIR mumble SOURCE_DIR)
+ set(MUMBLE_SOURCE_ROOT "${CMAKE_SOURCE_DIR}")
endif()
add_executable(overlay_exe WIN32
"overlay_exe.cpp"
"overlay_exe.h"
- "${MUMBLE_SOURCE_DIR}/mumble.appcompat.manifest"
+ "${MUMBLE_SOURCE_ROOT}/auxiliary_files/mumble.appcompat.manifest"
"${OVERLAY_EXE_RC}"
)
@@ -33,7 +33,7 @@ set_target_properties(overlay_exe PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
if(BUILD_OVERLAY_XCOMPILE)
set_target_properties(overlay_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${MUMBLE_BINARY_DIR})
- target_include_directories(overlay_exe PRIVATE ${PARENT_SOURCE_DIR}/overlay)
+ target_include_directories(overlay_exe PRIVATE ${MUMBLE_SOURCE_ROOT}/overlay)
else()
set_target_properties(overlay_exe PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/overlay_gl/CMakeLists.txt b/overlay_gl/CMakeLists.txt
index 4beb157b3..4a0a2dc67 100644
--- a/overlay_gl/CMakeLists.txt
+++ b/overlay_gl/CMakeLists.txt
@@ -101,7 +101,7 @@ if(NOT APPLE)
endif()
endif()
else()
- add_subdirectory("${3RDPARTY_DIR}/mach-override-build" "${CMAKE_CURRENT_BINARY_DIR}/mach-override")
+ add_subdirectory("${3RDPARTY_DIR}/mach-override-build" "${CMAKE_CURRENT_BINARY_DIR}/mach-override" EXCLUDE_FROM_ALL)
find_library(LIB_COREFOUNDATION "CoreFoundation")
@@ -129,8 +129,3 @@ endif()
# install native overlay library
install(TARGETS overlay_gl LIBRARY DESTINATION "${MUMBLE_INSTALL_LIBDIR}")
-# install overlay script
-install(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/mumble-overlay" DESTINATION "${MUMBLE_INSTALL_SCRIPTDIR}")
-
-# install overlay man-files
-install(FILES "${CMAKE_SOURCE_DIR}/man/mumble-overlay.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
diff --git a/scripts/development/IconSync.cpp b/scripts/development/IconSync.cpp
deleted file mode 100644
index f5edb540b..000000000
--- a/scripts/development/IconSync.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2013-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-#include <QtCore>
-#include <QtGui>
-#include <QtNetwork>
-#include <QtSvg>
-
-void svg2png(const QString &svgpath, const QList< int > &sizes, QStringList &qslImages) {
- QSvgRenderer svg(svgpath);
- QImage original(512, 512, QImage::Format_ARGB32);
- original.fill(Qt::transparent);
-
- QPainter painter(&original);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setRenderHint(QPainter::TextAntialiasing);
- painter.setRenderHint(QPainter::SmoothPixmapTransform);
- painter.setRenderHint(QPainter::HighQualityAntialiasing);
- svg.render(&painter);
-
- foreach (int size, sizes) {
- QImage img = original.scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- QString png = QDir::temp().absoluteFilePath(QString::fromLatin1("mumble.%1.png").arg(size));
-
- QImageWriter qiw(png);
- qiw.write(img);
-
- qslImages << png;
- }
-}
-
-int main(int argc, char **argv) {
- QCoreApplication a(argc, argv);
-
-
- QStringList qslImages;
-
- QString svgSmallPath = QLatin1String("../../icons/mumble_small.svg");
- QList< int > sizesSmall;
- sizesSmall << 16;
- sizesSmall << 24;
- svg2png(svgSmallPath, sizesSmall, qslImages);
-
- QLatin1String svgPath("../../icons/mumble.svg");
- QList< int > sizes;
- sizes << 32;
- sizes << 48;
- sizes << 64;
- sizes << 96;
- sizes << 128;
- sizes << 256;
- svg2png(svgPath, sizes, qslImages);
-
-
- QStringList args;
- args << qslImages;
- args << QDir::current().absoluteFilePath("../../icons/mumble.ico");
-
- qWarning() << args;
-
- QProcess qp;
- qp.setProcessChannelMode(QProcess::ForwardedChannels);
- qp.start("/usr/bin/convert", args);
- if (!qp.waitForFinished())
- qWarning() << "No finish";
- foreach (const QString &png, qslImages)
- QDir::temp().remove(png);
-}
diff --git a/scripts/docker-compose.yml b/scripts/docker-compose.yml
deleted file mode 100644
index c70aaa0fe..000000000
--- a/scripts/docker-compose.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2021-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-version: '3'
-services:
- mumble-server:
- build: github.com/mumble-voip/mumble#master
- container_name: mumble-server
- ports:
- - 64738:64738/tcp
- - 64738:64738/udp
- volumes:
- - ./murmur.ini:/etc/murmur/murmur.ini
- - ./data:/var/lib/murmur/
- restart: unless-stopped
diff --git a/scripts/extract-emojione-flags.py b/scripts/extract-emojione-flags.py
index 4dfd660cb..cf1d4504b 100755
--- a/scripts/extract-emojione-flags.py
+++ b/scripts/extract-emojione-flags.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Copyright 2015-2022 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
@@ -28,7 +28,7 @@ from __future__ import (unicode_literals, print_function, division)
import os
import shutil
-import sys
+import argparse
# Beginning and end of the Regional Indicator Symbol range,
# as defined by Unicode 6.0's emoji support.
@@ -39,47 +39,42 @@ REGIONAL_INDICATOR_SYMBOL_LETTER_A = 0x1F1E6
REGIONAL_INDICATOR_SYMBOL_LETTER_Z = 0x1F1FF
def is_region(points):
- for point in points:
- if point > REGIONAL_INDICATOR_SYMBOL_LETTER_Z \
- or point < REGIONAL_INDICATOR_SYMBOL_LETTER_A:
- return False
- return True
+ for point in points:
+ if point > REGIONAL_INDICATOR_SYMBOL_LETTER_Z \
+ or point < REGIONAL_INDICATOR_SYMBOL_LETTER_A:
+ return False
+ return True
+
def region_name(points):
- name = ''
- for point in points:
- name += chr(point - REGIONAL_INDICATOR_SYMBOL_LETTER_A + ord('a'))
- return name
+ name = ''
+ for point in points:
+ name += chr(point - REGIONAL_INDICATOR_SYMBOL_LETTER_A + ord('a'))
+ return name
+
def main():
- if len(sys.argv) < 3:
- print('''Usage: extract-emojione-flags.py [emojione-svg-dir] [dst-dir]
+ parser = argparse.ArgumentParser(description="Extract SVG flags from the Emoji One (now joypixels) emoji collection.")
+ parser.add_argument("emojione-svg-dir", help="Path to the directory containing Emoji One SVGs, such as $EMOJIONE_SRC_TREE/assets/svg")
+ parser.add_argument("dst-dir", help="Path to which the resulting SVGs shall be written")
-emojione-svg-dir: point this to the directory containing Emoji One SVGs, such as
- $EMOJIONE_SRC_TREE/assets/svg.
+ args = parser.parse_args()
-dst-dir: point this to the directory you want the resulting SVGs to be written to.
-''')
- sys.exit(1)
+ files = os.listdir(args.emojione_svg_dir)
+ for fn in files:
+ base, ext = os.path.splitext(fn.lower())
+ if not ext == '.svg':
+ continue
- emojiOneSvgDir = sys.argv[1]
- dstDir = sys.argv[2]
+ pointsStr = base.split('-')
+ points = [int(p, 16) for p in pointsStr]
- files = os.listdir(emojiOneSvgDir)
- for fn in files:
- base, ext = os.path.splitext(fn.lower())
- if not ext == '.svg':
- continue
-
- pointsStr = base.split('-')
- points = [int(p, 16) for p in pointsStr]
-
- if is_region(points):
- name = region_name(points)
- svgName = name + '.svg'
- shutil.copy(os.path.join(emojiOneSvgDir, fn),
- os.path.join(dstDir, svgName))
+ if is_region(points):
+ name = region_name(points)
+ svgName = name + '.svg'
+ shutil.copy(os.path.join(args.emojione_svg_dir, fn),
+ os.path.join(args.dst_dir, svgName))
if __name__ == '__main__':
- main()
+ main()
diff --git a/scripts/generate-ApplicationPalette-class.py b/scripts/generate-ApplicationPalette-class.py
index 27814a4ae..112246571 100755
--- a/scripts/generate-ApplicationPalette-class.py
+++ b/scripts/generate-ApplicationPalette-class.py
@@ -10,8 +10,8 @@
# template_source and writes it into target after
# template expansion.
-template_source = "ApplicationPaletteTemplate.h"
-target = "ApplicationPalette.h"
+import argparse
+import os
color_group = ["Active", "Disabled", "Inactive"]
color_role = [ "WindowText", "Button", "Light", "Midlight", "Dark", "Mid",
@@ -110,9 +110,15 @@ def add_role_group_property(variables, role, group):
if __name__ == "__main__":
- template = open(template_source, "r").read()
+ parser = argparse.ArgumentParser("Turns the ApplicationPalette template into an actually usable source file")
+ parser.add_argument("--template", help="Path to the template file", metavar="PATH", required=True)
+ parser.add_argument("--output", help="Path to the file to which to write the generated source file", metavar="PATH", default=None)
- variables = {"warning": "// Auto-generated from %s . Do not edit manually." % template_source,
+ args = parser.parse_args()
+
+ template = open(args.template, "r").read()
+
+ variables = {"warning": "// Auto-generated from %s . Do not edit manually." % os.path.basename(args.template),
"properties": "",
"propertyresets": "",
"getterssetters": "",
@@ -126,4 +132,9 @@ if __name__ == "__main__":
add_role_group_property(variables, role, group)
- open(target, "w").write(template % variables)
+ generatedSource = template % variables
+
+ if args.output:
+ open(args.output, "w").write(generatedSource)
+ else:
+ print(generatedSource)
diff --git a/scripts/generate-ffdhe.py b/scripts/generate-ffdhe.py
index 396b84b31..80bee073f 100644..100755
--- a/scripts/generate-ffdhe.py
+++ b/scripts/generate-ffdhe.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Copyright 2017-2022 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
@@ -104,14 +104,15 @@ from __future__ import (unicode_literals, print_function, division)
# we can easily be compatible with both
# interpreters.
try:
- type(long)
+ type(long)
except NameError:
- long = int
+ long = int
import doctest
import os
import base64
import codecs
+import argparse
# The following P values are copy/pasted from RFC 7919 at
# https://tools.ietf.org/rfc/rfc7919.txt
@@ -266,319 +267,318 @@ g = '''02''' # Not just '2' because these hex strings must
# only contain bytes.
def dehexify(hexString):
- '''
- Convert the "bignum" hexString
- representation to a bytearray
- containing the number.
- '''
- return bytearray.fromhex(' '.join(line.strip() for line in hexString.splitlines()))
+ '''
+ Convert the "bignum" hexString
+ representation to a bytearray
+ containing the number.
+ '''
+ return bytearray.fromhex(' '.join(line.strip() for line in hexString.splitlines()))
def derLength(size):
- '''
- Returns the ASN.1 DER length bytes
- for the given size.
-
- Short form: For lengths <= 127,
- the length is just a byte containing
- the literal number. (Note that for
- numbers <= 127, the MSB is not
- set.)
-
- In doctest form, that is:
-
- >>> derLength(1)
- bytearray(b'\\x01')
-
- >>> derLength(127)
- bytearray(b'\\x7f')
-
- Long form: For lengths > 127,
- the encoding is different: The
- first byte has the MSB set (that
- is, by itself, 0x80). The rest of
- the bits in the first byte specify
- the number of bytes that follow.
-
- So, to encode the length 128, you
- would emit
-
- 0x81 0x80
-
- The high bit of the first byte is set.
- This means the remaining 7 bits contain
- how many bytes follow it. If we mask the
- MSB away, we end up with 0x01. So, only
- a single byte follows.
- The value of the following byte is 0x80,
- which is 128 decimal.
-
- In doctest form, that is:
-
- >>> derLength(128)
- bytearray(b'\\x81\\x80')
-
- Error cases:
-
- The size passed to this function must be an integer:
-
- >>> derLength(0.1)
- Traceback (most recent call last):
- ...
- Exception: bad type
-
- >>> derLength('5')
- Traceback (most recent call last):
- ...
- Exception: bad type
-
- Negative numbers are not supported, and throw an exception:
-
- >>> derLength(-1)
- Traceback (most recent call last):
- ...
- Exception: bad size
-
- The long form does not support very large numbers. This is
- because the 'additional bytes' counter can only count up to
- 127 (2**7-1) bytes.
-
- So, if we try to encode a length that will use exactly 127
- bytes, it will succeed:
-
- >>> derLength(int('ff'*127, 16)) # doctest:+ELLIPSIS
- bytearray(b'\\xff...\\xff')
-
- But if we try to go over that limit, we get an exception:
-
- >>> derLength(int('ff'*128, 16))
- Traceback (most recent call last):
- ...
- Exception: unencodable
- '''
-
- # Ensure that the passed-in size is an integer.
- if not isinstance(size, (int, long)):
- raise Exception('bad type')
-
- if size > 127:
- # Convert 'size' to a hexString-style
- # bignum that we can pass to dehexify.
- #
- # Strip '0x' prefix from the hex string.
- hexString = hex(size)[2:]
- # In Python 2.7, the output of hex()
- # can have an L suffix. Make sure we
- # strip that.
- if hexString.endswith('L'):
- hexString = hexString[:-1]
- # Ensure the final hex string only
- # contains full bytes. If not, prepend
- # a zero byte.
- if len(hexString) % 2 != 0:
- hexString = '0' + hexString
-
- # If the computed hexString bignum
- # contains more than 127 bytes, we
- # can't encode it using ASN.1 DER
- # encoding. Throw an exception.
- nbytes = len(hexString) // 2
- if nbytes > 127:
- raise Exception('unencodable')
-
- buf = dehexify(hexString)
- out = bytearray((0x80 | nbytes,))
- out += buf
- return out
- elif size > 0:
- # Short form is simply the number itself,
- # as a byte.
- return bytearray((size,))
- else:
- # We don't support negative sizes.
- raise Exception('bad size')
+ '''
+ Returns the ASN.1 DER length bytes
+ for the given size.
+
+ Short form: For lengths <= 127,
+ the length is just a byte containing
+ the literal number. (Note that for
+ numbers <= 127, the MSB is not
+ set.)
+
+ In doctest form, that is:
+
+ >>> derLength(1)
+ bytearray(b'\\x01')
+
+ >>> derLength(127)
+ bytearray(b'\\x7f')
+
+ Long form: For lengths > 127,
+ the encoding is different: The
+ first byte has the MSB set (that
+ is, by itself, 0x80). The rest of
+ the bits in the first byte specify
+ the number of bytes that follow.
+
+ So, to encode the length 128, you
+ would emit
+
+ 0x81 0x80
+
+ The high bit of the first byte is set.
+ This means the remaining 7 bits contain
+ how many bytes follow it. If we mask the
+ MSB away, we end up with 0x01. So, only
+ a single byte follows.
+ The value of the following byte is 0x80,
+ which is 128 decimal.
+
+ In doctest form, that is:
+
+ >>> derLength(128)
+ bytearray(b'\\x81\\x80')
+
+ Error cases:
+
+ The size passed to this function must be an integer:
+
+ >>> derLength(0.1)
+ Traceback (most recent call last):
+ ...
+ Exception: bad type
+
+ >>> derLength('5')
+ Traceback (most recent call last):
+ ...
+ Exception: bad type
+
+ Negative numbers are not supported, and throw an exception:
+
+ >>> derLength(-1)
+ Traceback (most recent call last):
+ ...
+ Exception: bad size
+
+ The long form does not support very large numbers. This is
+ because the 'additional bytes' counter can only count up to
+ 127 (2**7-1) bytes.
+
+ So, if we try to encode a length that will use exactly 127
+ bytes, it will succeed:
+
+ >>> derLength(int('ff'*127, 16)) # doctest:+ELLIPSIS
+ bytearray(b'\\xff...\\xff')
+
+ But if we try to go over that limit, we get an exception:
+
+ >>> derLength(int('ff'*128, 16))
+ Traceback (most recent call last):
+ ...
+ Exception: unencodable
+ '''
+
+ # Ensure that the passed-in size is an integer.
+ if not isinstance(size, (int, long)):
+ raise Exception('bad type')
+
+ if size > 127:
+ # Convert 'size' to a hexString-style
+ # bignum that we can pass to dehexify.
+ #
+ # Strip '0x' prefix from the hex string.
+ hexString = hex(size)[2:]
+ # In Python 2.7, the output of hex()
+ # can have an L suffix. Make sure we
+ # strip that.
+ if hexString.endswith('L'):
+ hexString = hexString[:-1]
+ # Ensure the final hex string only
+ # contains full bytes. If not, prepend
+ # a zero byte.
+ if len(hexString) % 2 != 0:
+ hexString = '0' + hexString
+
+ # If the computed hexString bignum
+ # contains more than 127 bytes, we
+ # can't encode it using ASN.1 DER
+ # encoding. Throw an exception.
+ nbytes = len(hexString) // 2
+ if nbytes > 127:
+ raise Exception('unencodable')
+
+ buf = dehexify(hexString)
+ out = bytearray((0x80 | nbytes,))
+ out += buf
+ return out
+ elif size > 0:
+ # Short form is simply the number itself,
+ # as a byte.
+ return bytearray((size,))
+ else:
+ # We don't support negative sizes.
+ raise Exception('bad size')
def derSequence(sequence):
- '''
- Encode an ASN.1 DER sequence
-
- Takes a sequence of DER data as its input.
-
- Returns a bytearray of the resulting data.
-
- The encoding of a DER sequence is simply
- an identifier (0x30), a length (the length
- of the content bytes -- see the derLength
- function), and the content itself (just a
- byte stream of other ASN.1 DER objects)
- '''
- out = bytearray((0x30,)) # SEQUENCE tag
- content = bytearray()
- for entry in sequence:
- content += entry
- out += derLength(len(content))
- out += content
- return out
+ '''
+ Encode an ASN.1 DER sequence
+
+ Takes a sequence of DER data as its input.
+
+ Returns a bytearray of the resulting data.
+
+ The encoding of a DER sequence is simply
+ an identifier (0x30), a length (the length
+ of the content bytes -- see the derLength
+ function), and the content itself (just a
+ byte stream of other ASN.1 DER objects)
+ '''
+ out = bytearray((0x30,)) # SEQUENCE tag
+ content = bytearray()
+ for entry in sequence:
+ content += entry
+ out += derLength(len(content))
+ out += content
+ return out
def derUnsignedInteger(hexString):
- '''
- Encode a hex string to a ASN.1 DER INTEGER.
- This function only handles unsigned integers.
-
- Returns a bytearray of the resulting data.
-
- The encoding of an ASN.1 DER INTEGER is an
- identifier (0x02), a length (the length of the
- content bytes -- see the derLength function),
- and the content, which in this case is the
- bytes that make up the integer.
-
- An INTEGER can be signed, or unsigned. Our
- function here only deals with unsigned integers.
-
- Signed integers have the MSB/sign bit set.
-
- Our input data is guaranteed to be unsigned,
- so if we detect that the MSB is set in the
- data, we prepend a zero byte to it. This
- is the way to signal that the value is unsigned
- rather than signed.
- '''
- out = bytearray((0x02,)) # INTEGER tag
- buf = dehexify(hexString)
-
- # If the sign bit is set, prepend a zero byte.
- # Otherwise, the number will be treated as signed,
- # which we don't want.
- if (buf[0] & 0x80) != 0:
- buf = bytearray((0,)) + buf
- out += derLength(len(buf))
- out += buf
- return out
+ '''
+ Encode a hex string to a ASN.1 DER INTEGER.
+ This function only handles unsigned integers.
+
+ Returns a bytearray of the resulting data.
+
+ The encoding of an ASN.1 DER INTEGER is an
+ identifier (0x02), a length (the length of the
+ content bytes -- see the derLength function),
+ and the content, which in this case is the
+ bytes that make up the integer.
+
+ An INTEGER can be signed, or unsigned. Our
+ function here only deals with unsigned integers.
+
+ Signed integers have the MSB/sign bit set.
+
+ Our input data is guaranteed to be unsigned,
+ so if we detect that the MSB is set in the
+ data, we prepend a zero byte to it. This
+ is the way to signal that the value is unsigned
+ rather than signed.
+ '''
+ out = bytearray((0x02,)) # INTEGER tag
+ buf = dehexify(hexString)
+
+ # If the sign bit is set, prepend a zero byte.
+ # Otherwise, the number will be treated as signed,
+ # which we don't want.
+ if (buf[0] & 0x80) != 0:
+ buf = bytearray((0,)) + buf
+ out += derLength(len(buf))
+ out += buf
+ return out
def pem(der, kind='DH PARAMETERS'):
- '''
- Convert the ASN.1 DER data to PEM form.
-
- Returns the resulting string (type 'unicode' for Python 2).
-
- The PEM format consists of a header, the content itself (base64,
- using the standard alphabet) and a trailer.
-
- The header is of the form:
- -----BEGIN $KIND-----
-
- and the trailer is of the form:
- -----END $KIND-----
-
- where $KIND defines the type of data
- contained in the PEM data.
-
- Between the header and the trailer is
- the content itself. The content is the
- DER form encoded using base64.
-
- Our implementation splits the base64
- data such that each line of base64 data
- can be no longer than 64 characters long.
- '''
- out = u'-----BEGIN {0}-----\n'.format(kind)
- enc = base64.b64encode(der)
- n = 0
- for ch in enc:
- if type(ch) == int: # Python 3
- out += chr(ch)
- else:
- out += ch
- n += 1
- if n == 64:
- out += '\n'
- n = 0
- if out[-1] != '\n':
- out += '\n'
- out += u'-----END {0}-----\n'.format(kind)
- return out
+ '''
+ Convert the ASN.1 DER data to PEM form.
+
+ Returns the resulting string (type 'unicode' for Python 2).
+
+ The PEM format consists of a header, the content itself (base64,
+ using the standard alphabet) and a trailer.
+
+ The header is of the form:
+ -----BEGIN $KIND-----
+
+ and the trailer is of the form:
+ -----END $KIND-----
+
+ where $KIND defines the type of data
+ contained in the PEM data.
+
+ Between the header and the trailer is
+ the content itself. The content is the
+ DER form encoded using base64.
+
+ Our implementation splits the base64
+ data such that each line of base64 data
+ can be no longer than 64 characters long.
+ '''
+ out = u'-----BEGIN {0}-----\n'.format(kind)
+ enc = base64.b64encode(der)
+ n = 0
+ for ch in enc:
+ if type(ch) == int: # Python 3
+ out += chr(ch)
+ else:
+ out += ch
+ n += 1
+ if n == 64:
+ out += '\n'
+ n = 0
+ if out[-1] != '\n':
+ out += '\n'
+ out += u'-----END {0}-----\n'.format(kind)
+ return out
def writeHeader(f):
- '''
- Output the LICENSE.header file plus a warning
- about the output file being auto-generated.
+ '''
+ Output a warning about the output file being auto-generated.
- '''
- hf = codecs.open('LICENSE.header', 'r', 'utf-8')
- hdr = hf.read()
- hf.close()
-
- f.write(hdr)
- f.write('\n')
- f.write('// Automatically generated by "{0}". DO NOT EDIT BY HAND.\n'.format(os.path.basename(__file__)))
- f.write('\n')
+ '''
+ f.write('\n')
+ f.write('// Automatically generated by "{0}". DO NOT EDIT BY HAND.\n'.format(os.path.basename(__file__)))
+ f.write('\n')
def writeCStr(f, identifier, str):
- '''
- Output the string 'str' as a static
- C-style string (in array form, so sizeof works).
- '''
- f.write('static const char {0}[] = \\\n'.format(identifier))
- splat = str.split('\n')
- splat = splat[:-1]
- lastLine = splat[-1]
- for line in splat:
- terminator = ''
- if line == lastLine:
- terminator = ';'
- if len(line) > 0:
- f.write('"{0}\\n"{1}\n'.format(line, terminator))
+ '''
+ Output the string 'str' as a static
+ C-style string (in array form, so sizeof works).
+ '''
+ f.write('static const char {0}[] = \\\n'.format(identifier))
+ splat = str.split('\n')
+ splat = splat[:-1]
+ lastLine = splat[-1]
+ for line in splat:
+ terminator = ''
+ if line == lastLine:
+ terminator = ';'
+ if len(line) > 0:
+ f.write('"{0}\\n"{1}\n'.format(line, terminator))
def main():
- doctest.testmod()
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--output", help="Path to the file to which the generated output shall be written", required=True)
+
+ args = parser.parse_args()
+
+ doctest.testmod()
- f = codecs.open(os.path.join('src', 'FFDHETable.h'), 'w', 'utf-8')
+ f = codecs.open(args.output, 'w', 'utf-8')
- writeHeader(f)
+ writeHeader(f)
- writeCStr(f, 'ffdhe2048_pem', pem(
- derSequence((
- derUnsignedInteger(ffdhe2048_p),
- derUnsignedInteger(g),
- ))
- ))
+ writeCStr(f, 'ffdhe2048_pem', pem(
+ derSequence((
+ derUnsignedInteger(ffdhe2048_p),
+ derUnsignedInteger(g),
+ ))
+ ))
- f.write('\n')
+ f.write('\n')
- writeCStr(f, 'ffdhe3072_pem', pem(
- derSequence((
- derUnsignedInteger(ffdhe3072_p),
- derUnsignedInteger(g)
- ))
- ))
+ writeCStr(f, 'ffdhe3072_pem', pem(
+ derSequence((
+ derUnsignedInteger(ffdhe3072_p),
+ derUnsignedInteger(g)
+ ))
+ ))
- f.write('\n')
+ f.write('\n')
- writeCStr(f, 'ffdhe4096_pem', pem(
- derSequence((
- derUnsignedInteger(ffdhe4096_p),
- derUnsignedInteger(g),
- ))
- ))
+ writeCStr(f, 'ffdhe4096_pem', pem(
+ derSequence((
+ derUnsignedInteger(ffdhe4096_p),
+ derUnsignedInteger(g),
+ ))
+ ))
- f.write('\n')
+ f.write('\n')
- writeCStr(f, 'ffdhe6144_pem', pem(
- derSequence((
- derUnsignedInteger(ffdhe6144_p),
- derUnsignedInteger(g),
- ))
- ))
+ writeCStr(f, 'ffdhe6144_pem', pem(
+ derSequence((
+ derUnsignedInteger(ffdhe6144_p),
+ derUnsignedInteger(g),
+ ))
+ ))
- f.write('\n')
+ f.write('\n')
- writeCStr(f, 'ffdhe8192_pem', pem(
- derSequence((
- derUnsignedInteger(ffdhe8192_p),
- derUnsignedInteger(g),
- ))
- ))
+ writeCStr(f, 'ffdhe8192_pem', pem(
+ derSequence((
+ derUnsignedInteger(ffdhe8192_p),
+ derUnsignedInteger(g),
+ ))
+ ))
- f.close()
+ f.close()
if __name__ == '__main__':
- main()
+ main()
diff --git a/scripts/generate-mumble_qt-qrc.py b/scripts/generate-mumble_qt-qrc.py
index c62b1095e..837ed498d 100755
--- a/scripts/generate-mumble_qt-qrc.py
+++ b/scripts/generate-mumble_qt-qrc.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
#
# Copyright 2015-2022 The Mumble Developers. All rights reserved.
# Use of this source code is governed by a BSD-style license
@@ -7,6 +7,7 @@
from __future__ import (unicode_literals, print_function, division)
+import argparse
import os
import platform
import sys
@@ -41,7 +42,7 @@ def parseTranslationsConfig(configFile):
# Replace the trailing .ts with .qm as this is what lrelease will turn it into
translationFileName = translationFileName[:-3] + ".qm"
-
+
local_qt_translations.append(translationFileName)
if operator == "fallback":
@@ -67,7 +68,7 @@ def getComponentName(fileName):
lastUnderscoreIdx = component.rfind('_')
component = fileName[:lastUnderscoreIdx]
lang = fileName[lastUnderscoreIdx+1:]
-
+
return component
@@ -95,7 +96,7 @@ def filesToQrc(outFile, processedComponents, fileNames, directoryPath, localTran
if not component in allowed_components:
continue
-
+
if name in processedComponents and not isOverride:
continue
@@ -115,26 +116,27 @@ def filesToQrc(outFile, processedComponents, fileNames, directoryPath, localTran
def main():
# python generate-mumble_qt-qrc.py <output-fn> [inputs...] localDir
- output = sys.argv[1]
- inputs = sys.argv[2:-1]
- localDir = sys.argv[-1]
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--output", help="The path to which to write the generated QRC file", metavar="PATH", required=True)
+ parser.add_argument("--translation-dir", help="The path to the directory containing the official Qt translations",
+ action="append", metavar="PATH", required=True)
+ parser.add_argument("--local-translation-dir", help="The path to the local translation directory", metavar="PATH", required=True)
- # parse config file
- if localDir.endswith("/") or localDir.endswith("\\"):
- localDir = localDir[:-1]
+ args = parser.parse_args()
- configFile = os.path.join(localDir, "translations.conf")
+ # parse config file
+ configFile = os.path.join(args.local_translation_dir, "translations.conf")
if os.path.isfile(configFile):
parseTranslationsConfig(configFile)
- of = open(output, 'w')
+ of = open(args.output, 'w')
of.write('<!DOCTYPE RCC><RCC version="1.0">\n')
of.write('<qresource>\n')
processedComponents = []
- for dirName in inputs:
+ for dirName in args.translation_dir:
processedComponents.extend(dirToQrc(of, dirName, processedComponents))
# Process translations provided by Mumble itself (aka local translations)
- filesToQrc(of, processedComponents, local_qt_translations, localDir, True)
+ filesToQrc(of, processedComponents, local_qt_translations, args.local_translation_dir, True)
of.write('</qresource>\n')
of.write('</RCC>\n')
of.close()
diff --git a/scripts/generate-qrc.py b/scripts/generate-qrc.py
deleted file mode 100755
index 456e46d63..000000000
--- a/scripts/generate-qrc.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-#
-# Improved version of rcc --project
-#
-import sys
-import os
-import re
-import argparse
-
-parser = argparse.ArgumentParser(description='Improved version of rcc --project')
-parser.add_argument('theme')
-parser.add_argument('--cwd', default='.')
-parser.add_argument('--prefix', default='')
-parser.add_argument('--output', '-o')
-parser.add_argument('--include', '-i', default='.*', help='Default inclusion regex')
-parser.add_argument('--exclude', '-e', default='a^', help='Default exclusion regex')
-
-args = parser.parse_args()
-
-out = sys.stdout
-if args.output:
- out = open(args.output, 'w')
-
-print>>out, '<!DOCTYPE RCC>'
-print>>out, '<RCC version=\"1.0\">'
-print>>out, '<qresource prefix="%s">' % args.prefix
-
-include = re.compile(args.include)
-exclude = re.compile(args.exclude)
-
-os.chdir(args.cwd)
-for (dirpath, dirnames, filenames) in os.walk(args.theme):
- for f in filenames:
- path = os.path.join(dirpath, f)
- relpath = os.path.relpath(path, args.theme)
-
- if not include.search(relpath):
- continue
-
- if exclude.search(relpath):
- continue
-
- print>>out, ' <file alias="%s">%s</file>' % (relpath, path)
-print>>out, '</qresource>'
-print>>out, '</RCC>'
diff --git a/scripts/generateIceWrapper.py b/scripts/generateIceWrapper.py
index 4e839d2d1..e6cb78672 100755
--- a/scripts/generateIceWrapper.py
+++ b/scripts/generateIceWrapper.py
@@ -36,7 +36,7 @@ def create_disclaimerComment():
return "// This file was auto-generated by scripts/generateIceWrapper.py on " + datetime.now().strftime("%Y-%m-%d") + " -- DO NOT EDIT MANUALLY!\n"
def generateFunction(className, functionName, wrapArgs, callArgs):
- function = "void ::Murmur::" + className + "I::" + functionName + "_async(" + (", ".join(wrapArgs)) + ") {\n"
+ function = "void ::MumbleServer::" + className + "I::" + functionName + "_async(" + (", ".join(wrapArgs)) + ") {\n"
function += "\t// qWarning() << \"" + functionName + "\" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();\n"
function += "#ifndef ACCESS_" + className + "_" + functionName + "_ALL\n"
function += "#\tifdef ACCESS_" + className + "_" + functionName + "_READ\n"
@@ -84,11 +84,11 @@ def main():
rootDir = os.path.dirname(os.path.dirname(scriptPath))
if args.ice_file is None:
- # Try to figure out the path to the ice-file (Murmur.ice)
- args.ice_file = os.path.join(rootDir, "src", "murmur", "Murmur.ice")
+ # Try to figure out the path to the ice-file (MumbleServer.ice)
+ args.ice_file = os.path.join(rootDir, "src", "murmur", "MumbleServer.ice")
if args.generated_ice_header is None:
# Try to figure out path to the generated header file (in the build dir)
- args.generated_ice_header = os.path.join(rootDir, "build", "src", "murmur", "Murmur.h")
+ args.generated_ice_header = os.path.join(rootDir, "build", "src", "murmur", "MumbleServer.h")
if not args.quiet:
print("Using ICE-file at \"%s\"" % args.ice_file)
@@ -185,7 +185,7 @@ def main():
wrapperContent += generateFunction(targetClass, functionName, wrapArgs, callArgs) + "\n"
- wrapperContent += "void ::Murmur::MetaI::getSlice_async(const ::Murmur::AMD_Meta_getSlicePtr &cb, const Ice::Current&) {\n"
+ wrapperContent += "void ::MumbleServer::MetaI::getSlice_async(const ::MumbleServer::AMD_Meta_getSlicePtr &cb, const Ice::Current&) {\n"
wrapperContent += "\tcb->ice_response(std::string(\"" + iceSpec + "\"));\n"
wrapperContent += "}\n"
diff --git a/scripts/generate_configure_cmake_script.py b/scripts/generate_configure_cmake_script.py
new file mode 100755
index 000000000..93f6382bb
--- /dev/null
+++ b/scripts/generate_configure_cmake_script.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python3
+#
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+from typing import Tuple
+from typing import List
+from typing import Dict
+
+import argparse
+import sys
+
+
+def parse_key_value_pair(pair: str) -> Tuple[str, str]:
+ assert "=" in pair
+
+ idx = pair.find("=")
+
+ key = pair[: idx].strip()
+ value = pair[idx + 1:].strip()
+
+ if value[0] == value[-1] and value[0] in ["\"", "'"]:
+ # Value is enclosed in quotes -> Remove those
+ value = value[1: -1]
+
+ return (key, value)
+
+
+def parse_key_value_pairs(pairs: List[str]) -> Dict[str, str]:
+ key_value_pairs = {}
+
+ for currentPair in pairs:
+ key, value = parse_key_value_pair(currentPair)
+
+ key_value_pairs[key] = value
+
+ return key_value_pairs
+
+
+def main():
+ parser = argparse.ArgumentParser(description="This script generates a cmake script whose sole purpose is to invoke configure_file" +
+ " on a given set of files.")
+ parser.add_argument(
+ "--variables", help="Specify a number of variables and their content as key-value-pairs", metavar="NAME=VALUE", nargs="+")
+ parser.add_argument("--files", help="Specify the to-be-configured files and their output path as key-value-pairs", metavar="IN-FILE=OUT-FILE",
+ nargs="+", required=True)
+ parser.add_argument("--output", help="The path to the file to which to write the generated content. If not given, the content is" +
+ " written to stdout")
+ parser.add_argument("--at-only", help="Passes the @ONLY option to configure_file", action="store_true", default=False)
+
+ args = parser.parse_args()
+
+ variables = parse_key_value_pairs(args.variables) if args.variables else {}
+ files = parse_key_value_pairs(args.files) if args.files else {}
+
+ cmake_content = "# Defining variables\n"
+ for currentVar in variables.keys():
+ if " " in currentVar:
+ print("[ERROR]: Variable name with whitespace \"%s\"" % currentVar)
+ sys.exit(1)
+
+ cmake_content += "set(%s \"%s\")\n" % (currentVar, variables[currentVar])
+
+ cmake_content += "\n"
+ cmake_content += "# Configuring files\n"
+ for currentInFile in files.keys():
+ cmake_content += "configure_file(\"%s\" \"%s\" %s)\n" % (currentInFile, files[currentInFile], "@ONLY" if args.at_only else "")
+
+ if args.output:
+ with open(args.output, "w") as outFile:
+ outFile.write(cmake_content)
+ else:
+ print(cmake_content)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/generate_flag_qrc.py b/scripts/generate_flag_qrc.py
new file mode 100755
index 000000000..b0071c9ef
--- /dev/null
+++ b/scripts/generate_flag_qrc.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# Copyright 2016-2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+# mkflags.py generates .pri and .qrc files from Mumble's
+# flag SVGs, such that the flags can be included as Qt
+# resources.
+#
+# The script splits the flags into multiple .qrc files once
+# a single .qrc file exceeds a given threshold.
+#
+# This is because older compilers (and old hardware, too!)
+# can have problems with large source files. When Qt embeds
+# a .qrc file, it generates a .cpp file and compiles it. Some
+# of our flag SVGs can be quite large, and if we only use a
+# single .qrc file, it is (as of this writing) 32MB+ large.
+
+from __future__ import (unicode_literals, print_function, division)
+
+import os
+import codecs
+import argparse
+
+# Once a .qrc file's content exceeds this size, the
+# file will be considered full.
+MAX_SIZE = 1024*1024
+
+def main():
+ parser = argparse.ArgumentParser("This script generates a QRC file for embedding the flag SVG icons")
+ parser.add_argument("--flag-dir", help="Path to the directory in which the flag SVGs reside in", metavar="PATH", required=True)
+ parser.add_argument("--output", help="Path to which the generated QRC file shall be written", metavar="PATH", required=True)
+
+ args = parser.parse_args()
+
+ # Get a list of all flag SVGs
+ flags = []
+
+ for fn in os.listdir(args.flag_dir):
+ if not fn.lower().endswith('svg'):
+ continue
+
+ flags.append(fn)
+
+ output_directory = os.path.dirname(args.output)
+
+ # Generate output file.
+ with codecs.open(args.output, "w", "utf-8") as f:
+ f.write('<!DOCTYPE RCC>\n')
+ f.write('<RCC version="1.0">\n')
+ f.write('<qresource>\n')
+
+ for fn in flags:
+ f.write('<file alias="{0}">{1}</file>\n'.format('flags/' + fn, os.path.relpath(os.path.join(args.flag_dir, fn), output_directory)))
+
+ f.write('</qresource>\n')
+ f.write('</RCC>\n')
+
+if __name__ == '__main__':
+ main()
diff --git a/scripts/generate_license_header.py b/scripts/generate_license_header.py
new file mode 100755
index 000000000..f137124a4
--- /dev/null
+++ b/scripts/generate_license_header.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python3
+#
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+from typing import Optional
+
+import argparse
+import re
+import os
+
+varNameIdx = 0
+filePathIdx = 1
+displayNameIdx = 2
+urlIdx = 3
+defineGuardIdx = 4
+
+repoRoot = os.path.normpath(os.path.join(os.path.dirname(__file__), ".."))
+
+# List of (3rdparty) licenses [<variableName>, <pathToLicenseFile>, <DisplayName>, <URL>, (<define-guard>)?]
+licenses = [
+ ["licenseMumble", "LICENSE", "Mumble", "https://www.mumble.info/"],
+ ["licenseOpus", "3rdparty/opus/COPYING", "Opus", "http://www.opus-codec.org/"],
+ ["licenseSPEEXDSP", "3rdparty/speexdsp/COPYING", "SpeexDSP", "http://www.speex.org/"],
+ ["licenseOpenSSL", "3rdPartyLicenses/openssl_license.txt", "OpenSSL", "http://www.openssl.org/"],
+ ["licenseLibsndfile", "3rdPartyLicenses/libsndfile_license.txt", "libsndfile", "http://www.mega-nerd.com/libsndfile/"],
+ ["licenseOgg", "3rdPartyLicenses/libogg_license.txt", "libogg", "http://www.xiph.org/"],
+ ["licenseVorbis", "3rdPartyLicenses/libvorbis_license.txt", "libvorbis", "http://www.xiph.org/"],
+ ["licenseFLAC", "3rdPartyLicenses/libflac_license.txt", "libFLAC", "http://flac.sourceforge.net/"],
+ ["licenseMachOverride", "3rdPartyLicenses/mach_override_license.txt", "mach_override", "https://github.com/rentzsch/mach_star", "Q_OS_MAC"],
+ ["licenseMinHook", "3rdparty/minhook/LICENSE.txt", "MinHook", "https://github.com/TsudaKageyu/minhook", "Q_OS_WIN64"],
+ ["licenseQtTranslations", "src/mumble/qttranslations/LICENSE",
+ "Additional Qt translations", "https://www.virtualbox.org/ticket/2018", "USING_BUNDLED_QT_TRANSLATIONS"],
+ ["licenseEmojiOne", "3rdPartyLicenses/cc_by_sa_40_legalcode.txt", "Emoji One artwork", "http://emojione.com/"],
+ ["licenseXInputCheck", "3rdparty/xinputcheck-src/COPYING.txt", "XInputCheck (SDL_IsXInput function)", "https://www.libsdl.org/"],
+ ["licenseQQBonjour", "3rdparty/qqbonjour/LICENSE", "QQBonjour", "https://doc.qt.io/archives/qq/qq23-bonjour.html"],
+ ["licenseSmallFT", "3rdparty/smallft/LICENSE", "smallft", "https://www.xiph.org"],
+ ["licenseOldStyleLicenseHeaders", "3rdPartyLicenses/mumble-old-license-headers/LICENSE.txt", "Old-style Mumble license headers", "https://www.mumble.info"],
+ ["licenseArc4RandomUniform", "3rdparty/arc4random/LICENSE", "arc4random_uniform", "https://www.openbsd.org"],
+ ["licenseMariaDBCConnector", "3rdPartyLicenses/mariadb_c_connector_license.txt", "MariaDB Connector/C", "https://www.mariadb.org", "USE_BUILDENV"],
+ ["licenseZlib", "3rdPartyLicenses/zlib_license.txt", "ZLIB", "https://www.zlib.net", "USE_BUILDENV"],
+ ["licenseProtobuf", "3rdPartyLicenses/protobuf_license.txt", "Protobuf", "https://developers.google.com/protocol-buffers", "USE_BUILDENV"],
+ ["licenseExpat", "3rdPartyLicenses/expat_license.txt", "Expat", "http://libexpat.org", "USE_BUILDENV"],
+ ["licenseBoost", "3rdPartyLicenses/boost_license.txt", "Boost C++ Libraries", "https://www.boost.org/", "USE_BUILDENV"],
+ ["licenseBzip2", "3rdPartyLicenses/bzip2_license.txt", "bzip2", "http://www.bzip.org", "USE_BUILDENV"],
+ ["licenseBerkeleyDB", "3rdPartyLicenses/berkeleydb_license.txt", "BerkeleyDB", "https://www.oracle.com/database/berkeley-db", "USE_BUILDENV"],
+ ["licenseFreetype", "3rdPartyLicenses/freetype_license.txt", "Freetype", "https://www.freetype.org/", "USE_BUILDENV"],
+ ["licenseHarfBuzzNG", "3rdPartyLicenses/harfbuzzng_license.txt", "HarfBuzz", "https://www.freedesktop.org/wiki/Software/HarfBuzz", "USE_BUILDENV"],
+ ["licenseLibPNG", "3rdPartyLicenses/libpng_license.txt", "LibPNG", "http://www.libpng.org/pub/png/libpng.html", "USE_BUILDENV"],
+ ["licenseLibjpegTurbo", "3rdPartyLicenses/libjpeg_turbo_license.txt", "libjpeg-turbo", "http://www.libjpeg-turbo.org", "USE_BUILDENV"],
+ ["licenseZeroCIce", "3rdPartyLicenses/zeroc_ice_license.txt", "ZeroC Ice", "https://zeroc.com/", "USE_BUILDENV"],
+ ["licenseMcpp", "3rdPartyLicenses/mcpp_license.txt", "mcpp", "http://mcpp.sourceforge.net/", "USE_BUILDENV"],
+ ["licenseMDNSResponder", "3rdPartyLicenses/mdnsresponder_license.txt", "mDNSResponder", "https://opensource.apple.com/tarballs/mDNSResponder/", "USE_BUILDENV"],
+ ["licensePCRE", "3rdPartyLicenses/pcre_license.txt", "PCRE", "http://www.pcre.org/", "USE_BUILDENV"],
+ ["licenseQt", "3rdPartyLicenses/qt_license.txt", "Qt", "https://www.qt.io/", "USE_BUILDENV"],
+ ["licenseSQLite3", "3rdPartyLicenses/sqlite3_license.txt", "SQLite3", "http://sqlite.org", "USE_BUILDENV"],
+ ["licenseXar", "3rdPartyLicenses/xar_license.txt", "XAR", "https://opensource.apple.com/source/xar/", "USE_BUILDENV"], # macOS only
+ ["licenseAvahi", "3rdPartyLicenses/avahi_license.txt", "Avahi", "https://www.avahi.org/", "USE_BUILDENV"], # Linux only
+ ["licenseDBus", "3rdPartyLicenses/dbus_license.txt", "D-Bus", "https://www.freedesktop.org/wiki/Software/dbus", "USE_BUILDENV"], # Linux only
+ ["licenseAppImageRuntime", "3rdPartyLicenses/appimage_runtime_license.txt", "AppImage Runtime", "http://www.appimage.org", "USE_BUILDENV"], # Linux only
+ ["licenseSquashfuse", "3rdPartyLicenses/squashfuse_license.txt", "squashfuse", "https://github.com/vasi/squashfuse", "USE_BUILDENV"], # Linux only
+ ["licenseLibfuse", "3rdPartyLicenses/libfuse_license.txt", "libfuse", "https://github.com/libfuse/libfuse/", "USE_BUILDENV"], # Linux only
+ ["licenseGlib", "3rdPartyLicenses/glib_license.txt", "glib", "https://developer.gnome.org/glib/", "USE_BUILDENV"], # Linux only
+ ["licenseLibcap2", "3rdPartyLicenses/libcap2_license.txt", "libcap2", "https://sites.google.com/site/fullycapable/", "USE_BUILDENV"], # Linux only
+ ["licenseLibdaemon", "3rdPartyLicenses/libdaemon_license.txt", "libdaemon", "http://0pointer.de/lennart/projects/libdaemon/", "USE_BUILDENV"], # Linux only
+ ["licenseLibffi", "3rdPartyLicenses/libffi_license.txt", "libffi", "https://sourceware.org/libffi/", "USE_BUILDENV"] # Linux only
+]
+
+
+def formatLicenseVar(var_name: str, license_path: str, define_guard: Optional[str]) -> str:
+ with open(os.path.join(repoRoot, license_path), "r") as file:
+ content = file.read().strip().replace("\"", "\\\"")
+
+ content = "\"" + re.sub("\\n\\s*", "\\\\n\"\n\t\"", content) + "\""
+
+ content = "static const char *" + var_name + " = " + content + ";"
+
+ if define_guard:
+ content = "#ifdef " + define_guard + "\n" + content + "\n" + "#endif // " + define_guard + "\n"
+
+ return content
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--output", help="Path to the file to which the generated code shall be written." +
+ " If none is given, the content is written to stdout", metavar="PATH")
+
+ args = parser.parse_args()
+
+ content = """/*
+ * This file was auto-generated by scripts/mklic.pl\n
+ * DO NOT EDIT IT MANUALLY
+ */
+#ifndef MUMBLE_LICENSES_H_
+#define MUMBLE_LICENSES_H_
+
+struct ThirdPartyLicense {
+ const char* name;
+ const char* url;
+ const char* license;
+
+ ThirdPartyLicense() : name(nullptr), url(nullptr), license(nullptr) {}
+ ThirdPartyLicense(const char* name_, const char* url_, const char* license_)
+ : name(name_), url(url_), license(license_) {}
+
+ bool isEmpty() const { return !name && !url && !license; }
+};
+"""
+
+ for currentLicense in licenses:
+ content += "\n" + formatLicenseVar(var_name=currentLicense[varNameIdx], license_path=currentLicense[filePathIdx],
+ define_guard=currentLicense[defineGuardIdx] if len(currentLicense) > defineGuardIdx else None)
+
+
+ content += "\n\n"
+ content += "static const ThirdPartyLicense licenses3rdParties[] = {\n"
+
+ for currentLicense in licenses[ 1 : ]:
+ if len(currentLicense) > defineGuardIdx:
+ content += "#ifdef " + currentLicense[defineGuardIdx] + "\n"
+
+ content += "\t" + ("ThirdPartyLicense(\"%s\", \"%s\", %s)" % (currentLicense[displayNameIdx], currentLicense[urlIdx],
+ currentLicense[varNameIdx])) + ",\n"
+
+ if len(currentLicense) > defineGuardIdx:
+ content += "#endif //" + currentLicense[defineGuardIdx] + "\n"
+
+ content += "\t// Empty entry that marks the end of the array\n"
+ content += "\tThirdPartyLicense()\n"
+ content += "};\n"
+ content += "#endif // MUMBLE_LICENSES_H_\n"
+
+ if args.output:
+ with open(args.output, "w") as outFile:
+ outFile.write(content)
+ else:
+ print(content)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/generate_mumble_ico.py b/scripts/generate_mumble_ico.py
new file mode 100755
index 000000000..0446680de
--- /dev/null
+++ b/scripts/generate_mumble_ico.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+# Copyright 2022 The Mumble Developers. All rights reserved.
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file at the root of the
+# Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+# Requires to install cairosvg: pip3 install cairosvg
+import cairosvg
+
+import argparse
+import pathlib
+import os
+import sys
+import tempfile
+import subprocess
+from distutils.spawn import find_executable
+
+
+def main():
+ repoRoot = pathlib.Path(__file__).absolute().parent.parent
+
+ parser = argparse.ArgumentParser(description="This program generates the mumble.ico icon")
+ parser.add_argument("--small-svg", help="Path to the SVG that is to be used for the very small icon sizes", metavar="PATH",
+ default=pathlib.Path.joinpath(repoRoot, "icons/mumble_small.svg"))
+ parser.add_argument("--regular-svg", help="Path to the SVG that is to be used for the normal and large icon sizes", metavar="PATH",
+ default=pathlib.Path.joinpath(repoRoot, "icons/mumble.svg"))
+ parser.add_argument("--output", help="Path to where the resulting ico file should be written", metavar="PATH",
+ default=pathlib.Path.joinpath(repoRoot, "icons/mumble.ico"))
+
+ args = parser.parse_args()
+
+ convert_bin = find_executable("convert")
+ if convert_bin is None:
+ print("[ERROR]: The \"convert\" CLI program does not seem to be installed or is not in PATH")
+ print("(convert is part of the ImageMagick tools)")
+ sys.exit(1)
+
+ try:
+ subprocess.run([convert_bin, "--help"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ except Exception as e:
+ print("[ERROR]: %s can't be executed: %s" % (convert_bin, e))
+ sys.exit(1)
+
+ for current in [args.small_svg, args.regular_svg]:
+ if not os.path.isfile(current):
+ print("[ERROR]: \"%s\" does not exist or is not a file" % current)
+ sys.exit(1)
+
+ small_svg = open(args.small_svg, "r").read()
+ regular_svg = open(args.regular_svg, "r").read()
+
+ # First, generate the PNGs in the necessary sizes
+ images = []
+ for currentSize in [16, 24, 32, 48, 64, 96, 128, 256]:
+ outputPath = os.path.join(tempfile.gettempdir(), "mumble_%dx%d.png" % (currentSize, currentSize))
+ cairosvg.svg2png(bytestring = small_svg if currentSize < 32 else regular_svg, output_width = currentSize, output_height = currentSize,
+ write_to = outputPath)
+ images.append(outputPath)
+
+ # Now use the convert CLI utility to combine these PNGs into a .ico file
+ subprocess.run([convert_bin, *images, args.output])
+
+ print("Wrote %s" % args.output)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/git2cl.pl b/scripts/git2cl.pl
deleted file mode 100755
index d9544253c..000000000
--- a/scripts/git2cl.pl
+++ /dev/null
@@ -1,69 +0,0 @@
-#! /usr/bin/perl -w
-#
-# Copyright 2009-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-use warnings;
-use strict;
-use XML::Simple;
-use Data::Dumper;
-use Date::Parse;
-use Text::Wrap qw(wrap fill);
-
-open(LOG, "git log origin/master --date=short --pretty=format:'%h%x00%an%x00%ae%x00%ad%x00%s'|");
-my %dates;
-my %authors;
-my $lsub = '';
-while(<LOG>) {
- chomp();
- my ($hash,$author,$email,$date,$subject) = split(/\0/,$_);
-
- if ($author eq "Thorvald Natvig") {
- # Because someone forgets to set their git username on every platform...
- $email = 'slicer@users.sourceforge.net';
- }
-
- if ($subject =~ s/\s*\[([\w-]+)\]\s*$//) {
- $author = $1;
- $email = lc "$1\@users.sourceforge.net";
- }
-
- if (! exists($authors{$email})) {
- $authors{$email}=$author;
- }
-
- next if ($subject =~ /^Merge branch 'master/);
- next if ($subject =~ /^Indent and submodule update/);
- next if ($subject =~ /^Indent, changelog and submodule update/);
- next if ($subject =~ /^Indent, changelog, submodule and language update/);
- next if ($subject =~ /^Indent run/);
- next if ($subject =~ /^\*\*\* empty log message/);
- next if ($subject =~ /^git-svn-id: http/);
- next if ($subject =~ /^TEST/);
- next if ($subject =~ /^Merge pull request/);
- next if ($subject eq $lsub);
- $lsub = $subject;
- my $entry = wrap(" $hash ", " ", $subject);
- if (! exists($dates{$date})) {
- $dates{$date} = {};
- }
- if (! exists($dates{$date}{$email})) {
- $dates{$date}{$email} = ();
- }
- push @{$dates{$date}{$email}},$entry;
-}
-close(LOG);
-open(C, ">CHANGES");
-foreach my $date (reverse sort keys %dates) {
- print C $date."\n";
- my $h = $dates{$date};
- my $first = 1;
- foreach my $author (sort keys %$h) {
- print C " ".$authors{$author}." <$author>\n";
- print C join("\n", @{$dates{$date}{$author}});
- print C "\n\n";
- }
-}
-close(C);
diff --git a/scripts/mkflags.py b/scripts/mkflags.py
deleted file mode 100644
index 94d6e4ddf..000000000
--- a/scripts/mkflags.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-#
-# Copyright 2016-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# mkflags.py generates .pri and .qrc files from Mumble's
-# flag SVGs, such that the flags can be included as Qt
-# resources.
-#
-# The script splits the flags into multiple .qrc files once
-# a single .qrc file exceeds a given threshold.
-#
-# This is because older compilers (and old hardware, too!)
-# can have problems with large source files. When Qt embeds
-# a .qrc file, it generates a .cpp file and compiles it. Some
-# of our flag SVGs can be quite large, and if we only use a
-# single .qrc file, it is (as of this writing) 32MB+ large.
-
-from __future__ import (unicode_literals, print_function, division)
-
-import os
-import shutil
-import codecs
-import collections
-
-# Container for an on-disk flag SVG. Contains size and filename.
-OnDiskFlag = collections.namedtuple('OnDiskFlag', ['size', 'filename'])
-
-# Once a .qrc file's content exceeds this size, the
-# file will be considered full.
-MAX_SIZE = 1024*1024
-
-def main():
- # Get a list of all flag SVGs, and sort them by size.
- flags = []
-
- flagsDir = os.path.join('icons', 'flags')
- flagFns = os.listdir(flagsDir)
- for fn in flagFns:
- if not fn.lower().endswith('svg'):
- continue
-
- with open(os.path.join(flagsDir, fn), 'r') as f:
- buf = f.read()
- sz = len(buf)
- flags.append(OnDiskFlag(size=sz, filename=fn))
-
- flags = sorted(flags) # Sort by first tuple index (size).
-
- # Figure out the .qrc target of the individual
- # SVG files. Once a .qrc target exceeds MAX_SIZE,
- # we add a new file.
- flagsOut = []
-
- curFileContent = []
- curFileSz = 0
-
- for flag in flags:
- sz = flag.size
- fn = flag.filename
-
- curFileSz += sz
-
- curFileContent.append(fn)
-
- if curFileSz > MAX_SIZE:
- flagsOut.append(curFileContent)
-
- curFileContent = []
- curFileSz = 0
-
- if len(curFileContent) > 0:
- flagsOut.append(curFileContent)
-
- # Remove old flags qrc file.
- oldFlagsQrc = os.path.join('src', 'mumble', 'mumble_flags.qrc')
- if os.path.exists(oldFlagsQrc):
- os.remove(oldFlagsQrc)
-
- # Remove existing flags dir in src/mumble.
- flagsOutDir = os.path.join('src', 'mumble', 'flags')
- if os.path.exists(flagsOutDir):
- shutil.rmtree(flagsOutDir)
- os.mkdir(flagsOutDir)
-
- # Generate output files.
- for idx, content in enumerate(flagsOut):
- fn = 'mumble_flags_{0}.qrc'.format(idx)
-
- with codecs.open(os.path.join(flagsOutDir, fn), "w", "utf-8") as f:
- f.write('<!DOCTYPE RCC>\n')
- f.write('<RCC version="1.0">\n')
- f.write('<qresource>\n')
-
- for fn in content:
- f.write('<file alias="{0}">{1}</file>\n'.format('flags/' + fn, '../../../icons/flags/' + fn))
-
- f.write('</qresource>\n')
- f.write('</RCC>\n')
-
- # Generate .pri file for flags.
- with codecs.open(os.path.join(flagsOutDir, 'mumble_flags.pri'), "w", "utf-8") as f:
- for idx, _ in enumerate(flagsOut):
- fn = 'mumble_flags_{0}.qrc'.format(idx)
- f.write('RESOURCES *= flags/{0}\n'.format(fn))
-
-if __name__ == '__main__':
- main()
diff --git a/scripts/mkini-win32.bat b/scripts/mkini-win32.bat
deleted file mode 100755
index 72393db38..000000000
--- a/scripts/mkini-win32.bat
+++ /dev/null
@@ -1,14 +0,0 @@
-:: Copyright 2012-2022 The Mumble Developers. All rights reserved.
-:: Use of this source code is governed by a BSD-style license
-:: that can be found in the LICENSE file at the root of the
-:: Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-:: Copy murmur.ini to murmur.ini.win32, and convert
-:: LF -> CRLF so Windows users can edit murmur.ini in
-:: Notepad.
-::
-:: Note that the 'more' command also expands tabs
-:: to spaces. This isn't a problem right now, since
-:: we don't use tabs in murmur.ini -- and even if
-:: we did, they wouldn't be significant.
-type murmur.ini | more /p > murmur.ini.win32
diff --git a/scripts/mkini.sh b/scripts/mkini.sh
deleted file mode 100755
index 9d299369b..000000000
--- a/scripts/mkini.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /bin/bash
-#
-# Copyright 2009-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-cp murmur.ini murmur.ini.win32
-cp murmur.ini murmur.ini.osx
-cp murmur.ini murmur.ini.system
-
-perl -pi.bak -e 's/^(#|;|)dbus=.*$/\1dbus=system/' murmur.ini.system
-perl -pi.bak -e 's/^(#|;|)logfile=.*$/logfile=\/var\/log\/mumble-server\/mumble-server.log/' murmur.ini.system
-perl -pi.bak -e 's/^(#|;|)pidfile=.*$/pidfile=\/var\/run\/mumble-server\/mumble-server.pid/' murmur.ini.system
-perl -pi.bak -e 's/^(#|;|)database=.*$/database=\/var\/lib\/mumble-server\/mumble-server.sqlite/' murmur.ini.system
-perl -pi.bak -e 's/^(#|;|)uname=.*$/uname=mumble-server/' murmur.ini.system
-
-perl -pi.bak -e 'BEGIN{undef $/;} s/\n/\r\n/smg' murmur.ini.win32
diff --git a/scripts/mklic.pl b/scripts/mklic.pl
deleted file mode 100755
index 7af6ba92a..000000000
--- a/scripts/mklic.pl
+++ /dev/null
@@ -1,141 +0,0 @@
-#! /usr/bin/perl
-#
-# Copyright 2005-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-use warnings;
-use strict;
-use Carp;
-
-sub licenseFileToVar($$) {
- my ($var,$file)=@_;
-
- my $ret;
-
-
- open(IN, $file) or croak;
- my $l = join("", <IN>);
- $l =~ s/\r//g;
- $l =~ s/\f//g;
- $l =~ s/\"/\\\"/g;
-
- $l = join("\\n\"\n\t\"",split(/\n/, $l));
-
- return qq!static const char *${var} = \n\t\"! . $l . "\";\n";
-}
-
-sub printGuarded($$$) {
- my ($F, $S, $Guard)=@_;
-
- if ($Guard) {
- print $F "#ifdef " . $Guard . "\n";
- }
- print $F $S;
-
- if ($Guard) {
- print $F "#endif\n";
- }
-}
-
-
-open(my $F, "> ../src/licenses.h");
-binmode $F; # Ensure consistent file endings across platforms
-
-print $F "/*\n";
-print $F " * This file was auto-generated by scripts/mklic.pl\n";
-print $F " * DO NOT EDIT IT MANUALLY\n";
-print $F " */\n";
-print $F "#ifndef MUMBLE_LICENSES_H_\n";
-print $F "#define MUMBLE_LICENSES_H_\n";
-print $F "\n";
-print $F "#include <QtGlobal>\n";
-print $F "\n";
-print $F "struct ThirdPartyLicense {\n";
-print $F " const char* name;\n";
-print $F " const char* url;\n";
-print $F " const char* license;\n";
-print $F "\n";
-print $F " ThirdPartyLicense() : name(0), url(0), license(0) {}\n";
-print $F " ThirdPartyLicense(const char* name_, const char* url_, const char* license_)\n";
-print $F " : name(name_), url(url_), license(license_) {}\n";
-print $F " bool isEmpty() const { return (name == 0 && url == 0 && license == 0); }\n";
-print $F "};\n";
-print $F "\n";
-
-
-print $F licenseFileToVar("licenseMumble", "../LICENSE");
-print $F "\n\n";
-
-print $F licenseFileToVar("authorsMumble", "../AUTHORS");
-print $F "\n\n";
-
-# List of 3rd party licenses [<variableName>, <pathToLicenseFile>, <DisplayName>, <URL>]
-my @thirdPartyLicenses = (
- ["licenseCELT", "../3rdparty/celt-0.7.0-src/COPYING", "CELT", "http://www.celt-codec.org/"],
- ["licenseOpus", "../3rdparty/opus-src/COPYING", "Opus", "http://www.opus-codec.org/"],
- ["licenseSPEEX", "../3rdparty/speex-src/COPYING", "Speex", "http://www.speex.org/"],
- ["licenseOpenSSL", "../3rdPartyLicenses/openssl_license.txt", "OpenSSL", "http://www.openssl.org/"],
- ["licenseLibsndfile", "../3rdPartyLicenses/libsndfile_license.txt", "libsndfile", "http://www.mega-nerd.com/libsndfile/"],
- ["licenseOgg", "../3rdPartyLicenses/libogg_license.txt", "libogg", "http://www.xiph.org/"],
- ["licenseVorbis", "../3rdPartyLicenses/libvorbis_license.txt", "libvorbis", "http://www.xiph.org/"],
- ["licenseFLAC", "../3rdPartyLicenses/libflac_license.txt", "libFLAC", "http://flac.sourceforge.net/"],
- ["licenseMachOverride", "../3rdPartyLicenses/mach_override_license.txt", "mach_override", "https://github.com/rentzsch/mach_star", "Q_OS_MAC"],
- ["licenseMinHook", "../3rdparty/minhook-src/LICENSE.txt", "MinHook", "https://github.com/TsudaKageyu/minhook", "Q_OS_WIN64"],
- ["licenseQtTranslations", "../src/mumble/qttranslations/LICENSE",
- "Additional Qt translations", "https://www.virtualbox.org/ticket/2018", "USING_BUNDLED_QT_TRANSLATIONS"],
- ["licenseEmojiOne", "../3rdPartyLicenses/cc_by_sa_40_legalcode.txt", "Emoji One artwork", "http://emojione.com/"],
- ["licenseXInputCheck", "../3rdparty/xinputcheck-src/COPYING.txt", "XInputCheck (SDL_IsXInput function)", "https://www.libsdl.org/"],
- ["licenseQQBonjour", "../3rdparty/qqbonjour-src/LICENSE", "QQBonjour", "https://doc.qt.io/archives/qq/qq23-bonjour.html"],
- ["licenseSmallFT", "../3rdparty/smallft-src/LICENSE", "smallft", "https://www.xiph.org"],
- ["licenseOldStyleLicenseHeaders", "../3rdPartyLicenses/mumble-old-license-headers/LICENSE.txt", "Old-style Mumble license headers", "https://www.mumble.info"],
- ["licenseArc4RandomUniform", "../3rdparty/arc4random-src/LICENSE", "arc4random_uniform", "https://www.openbsd.org"],
- ["licenseMariaDBCConnector", "../3rdPartyLicenses/mariadb_c_connector_license.txt", "MariaDB Connector/C", "https://www.mariadb.org", "USE_BUILDENV"],
- ["licenseZlib", "../3rdPartyLicenses/zlib_license.txt", "ZLIB", "https://www.zlib.net", "USE_BUILDENV"],
- ["licenseProtobuf", "../3rdPartyLicenses/protobuf_license.txt", "Protobuf", "https://developers.google.com/protocol-buffers", "USE_BUILDENV"],
- ["licenseExpat", "../3rdPartyLicenses/expat_license.txt", "Expat", "http://libexpat.org", "USE_BUILDENV"],
- ["licenseBoost", "../3rdPartyLicenses/boost_license.txt", "Boost C++ Libraries", "https://www.boost.org/", "USE_BUILDENV"],
- ["licenseBzip2", "../3rdPartyLicenses/bzip2_license.txt", "bzip2", "http://www.bzip.org", "USE_BUILDENV"],
- ["licenseBerkeleyDB", "../3rdPartyLicenses/berkeleydb_license.txt", "BerkeleyDB", "https://www.oracle.com/database/berkeley-db", "USE_BUILDENV"],
- ["licenseFreetype", "../3rdPartyLicenses/freetype_license.txt", "Freetype", "https://www.freetype.org/", "USE_BUILDENV"],
- ["licenseHarfBuzzNG", "../3rdPartyLicenses/harfbuzzng_license.txt", "HarfBuzz", "https://www.freedesktop.org/wiki/Software/HarfBuzz", "USE_BUILDENV"],
- ["licenseLibPNG", "../3rdPartyLicenses/libpng_license.txt", "LibPNG", "http://www.libpng.org/pub/png/libpng.html", "USE_BUILDENV"],
- ["licenseLibjpegTurbo", "../3rdPartyLicenses/libjpeg_turbo_license.txt", "libjpeg-turbo", "http://www.libjpeg-turbo.org", "USE_BUILDENV"],
- ["licenseZeroCIce", "../3rdPartyLicenses/zeroc_ice_license.txt", "ZeroC Ice", "https://zeroc.com/", "USE_BUILDENV"],
- ["licenseMcpp", "../3rdPartyLicenses/mcpp_license.txt", "mcpp", "http://mcpp.sourceforge.net/", "USE_BUILDENV"],
- ["licenseMDNSResponder", "../3rdPartyLicenses/mdnsresponder_license.txt", "mDNSResponder", "https://opensource.apple.com/tarballs/mDNSResponder/", "USE_BUILDENV"],
- ["licensePCRE", "../3rdPartyLicenses/pcre_license.txt", "PCRE", "http://www.pcre.org/", "USE_BUILDENV"],
- ["licenseQt", "../3rdPartyLicenses/qt_license.txt", "Qt", "https://www.qt.io/", "USE_BUILDENV"],
- ["licenseSQLite3", "../3rdPartyLicenses/sqlite3_license.txt", "SQLite3", "http://sqlite.org", "USE_BUILDENV"],
- ["licenseXar", "../3rdPartyLicenses/xar_license.txt", "XAR", "https://opensource.apple.com/source/xar/", "USE_BUILDENV"], # macOS only
- ["licenseAvahi", "../3rdPartyLicenses/avahi_license.txt", "Avahi", "https://www.avahi.org/", "USE_BUILDENV"], # Linux only
- ["licenseDBus", "../3rdPartyLicenses/dbus_license.txt", "D-Bus", "https://www.freedesktop.org/wiki/Software/dbus", "USE_BUILDENV"], # Linux only
- ["licenseAppImageRuntime", "../3rdPartyLicenses/appimage_runtime_license.txt", "AppImage Runtime", "http://www.appimage.org", "USE_BUILDENV"], # Linux only
- ["licenseSquashfuse", "../3rdPartyLicenses/squashfuse_license.txt", "squashfuse", "https://github.com/vasi/squashfuse", "USE_BUILDENV"], # Linux only
- ["licenseLibfuse", "../3rdPartyLicenses/libfuse_license.txt", "libfuse", "https://github.com/libfuse/libfuse/", "USE_BUILDENV"], # Linux only
- ["licenseGlib", "../3rdPartyLicenses/glib_license.txt", "glib", "https://developer.gnome.org/glib/", "USE_BUILDENV"], # Linux only
- ["licenseLibcap2", "../3rdPartyLicenses/libcap2_license.txt", "libcap2", "https://sites.google.com/site/fullycapable/", "USE_BUILDENV"], # Linux only
- ["licenseLibdaemon", "../3rdPartyLicenses/libdaemon_license.txt", "libdaemon", "http://0pointer.de/lennart/projects/libdaemon/", "USE_BUILDENV"], # Linux only
- ["licenseLibffi", "../3rdPartyLicenses/libffi_license.txt", "libffi", "https://sourceware.org/libffi/", "USE_BUILDENV"] # Linux only
-);
-
-# Print 3rd party licenses
-foreach (@thirdPartyLicenses) {
- printGuarded($F, licenseFileToVar(@$_[0], @$_[1]), @$_[4]);
- print $F "\n\n";
-}
-
-
-# Print list of 3rd party licenses
-print $F "static const ThirdPartyLicense licenses3rdParties[] = {\n";
-foreach (@thirdPartyLicenses) {
- printGuarded($F, "\tThirdPartyLicense(\"" . @$_[2] . "\", \"" . @$_[3] . "\", " . @$_[0] . "),\n", @$_[4]);
-}
-# Empty entry that marks the end of the array
-printGuarded($F, "\tThirdPartyLicense(),\n", @$_[4]);
-print $F "};\n\n\n";
-
-print $F "#endif\n";
-
-close($F);
diff --git a/scripts/mumble.protocol b/scripts/mumble.protocol
deleted file mode 100644
index 05dae49a6..000000000
--- a/scripts/mumble.protocol
+++ /dev/null
@@ -1,8 +0,0 @@
-[Protocol]
-exec=mumble %u
-protocol=mumble
-input=none
-output=none
-Icon=mumble
-helper=true
-Description=A low-latency, high quality voice chat program for gaming
diff --git a/scripts/murmur.init b/scripts/murmur.init
deleted file mode 100755
index e094b5474..000000000
--- a/scripts/murmur.init
+++ /dev/null
@@ -1,149 +0,0 @@
-#! /bin/sh
-
-# Copyright 2007-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-#
-### BEGIN INIT INFO
-# Provides: mumble-server
-# Required-Start: $network $local_fs $remote_fs dbus
-# Required-Stop: $network $local_fs $remote_fs dbus
-# Should-Start: $mysql
-# Should-Stop: $mysql
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Mumble VoIP Server
-# Description: Init script for the Mumble VoIP Server murmurd.
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/sbin:/usr/bin
-NAME=mumble-server
-DESC="Mumble VoIP Server"
-PIDDIR=/var/run/$NAME
-PIDFILE=$PIDDIR/$NAME.pid
-DAEMON=/usr/sbin/murmurd
-USER=mumble-server
-GROUP=mumble-server
-
-test -x $DAEMON || exit 0
-
-INIFILE=/etc/mumble-server.ini
-DAEMON_OPTS="-ini $INIFILE"
-MURMUR_DAEMON_START=0
-MURMUR_USE_CAPABILITIES=0
-MURMUR_LIMIT_NOFILE=0
-
-# Include murmur defaults if available
-if [ -f /etc/default/$NAME ] ; then
- . /etc/default/$NAME
-fi
-
-. /lib/init/vars.sh
-. /lib/lsb/init-functions
-
-if [ "$MURMUR_LIMIT_NOFILE" -gt 0 ] ; then
- ulimit -n $MURMUR_LIMIT_NOFILE
-fi
-
-case "$1" in
- start)
- if [ "$MURMUR_DAEMON_START" != "1" ] ; then
- log_warning_msg "Not starting $DESC $NAME, disabled via /etc/default/$NAME"
- exit 0
- fi
- [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
- [ -d $PIDDIR ] || install -o $USER -d $PIDDIR
- if [ "$MURMUR_USE_CAPABILITIES" != "1" ] ; then
- start-stop-daemon --start --quiet \
- --pidfile $PIDFILE \
- --chuid $USER:$GROUP \
- --exec $DAEMON \
- -- $DAEMON_OPTS
- else
- start-stop-daemon --start --quiet \
- --pidfile $PIDFILE \
- --exec $DAEMON \
- -- $DAEMON_OPTS
- fi
- case "$?" in
- 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
- stop)
- [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
- start-stop-daemon --stop --quiet \
- --retry=TERM/30/KILL/5 \
- --pidfile $PIDFILE \
- --user $USER \
- --exec $DAEMON
- case "$?" in
- 0|1) rm -f $PIDFILE
- [ "$VERBOSE" != no ] && log_end_msg 0
- ;;
- 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
- status)
- if start-stop-daemon --test --stop --quiet \
- --pidfile $PIDFILE \
- --user $USER \
- --exec $DAEMON
- then
- [ "$VERBOSE" != no ] && echo "$DESC is running."
- exit 0
- else
- [ "$VERBOSE" != no ] && echo "$DESC is not running"
- exit 3
- fi
- ;;
- force-reload)
- start-stop-daemon --stop --test --quiet \
- --pidfile $PIDFILE \
- --user $USER \
- --exec $DAEMON \
- && $0 restart || exit 0
- ;;
- restart)
- [ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME"
- start-stop-daemon --stop --quiet \
- --retry=TERM/30/KILL/5 \
- --pidfile $PIDFILE \
- --user $USER \
- --exec $DAEMON
- case "$?" in
- 0|1)
- [ -d $PIDDIR ] || install -o $USER -d $PIDDIR
- rm -f $PIDFILE
- if [ "$MURMUR_USE_CAPABILITIES" != "1" ] ; then
- start-stop-daemon --start --quiet \
- --pidfile $PIDFILE \
- --chuid $USER:$GROUP \
- --exec $DAEMON \
- -- $DAEMON_OPTS
- else
- start-stop-daemon --start --quiet \
- --pidfile $PIDFILE \
- --exec $DAEMON \
- -- $DAEMON_OPTS
- fi
- case "$?" in
- 0) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
- *) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
- esac
- ;;
- *)
- [ "$VERBOSE" != no ] && log_end_msg 0
- ;;
- esac
- ;;
- *)
- N=/etc/init.d/$NAME
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
- exit 3
- ;;
-esac
-
-exit 0
diff --git a/scripts/murmur.logrotate b/scripts/murmur.logrotate
deleted file mode 100644
index a6b7a3859..000000000
--- a/scripts/murmur.logrotate
+++ /dev/null
@@ -1,10 +0,0 @@
-/var/log/mumble-server/mumble-server.log {
- weekly
- rotate 7
- compress
- delaycompress
- missingok
- postrotate
- start-stop-daemon --quiet --oknodo --stop --signal 1 --exec /usr/sbin/murmurd --user mumble-server --pidfile /var/run/mumble-server/mumble-server.pid
- endscript
-}
diff --git a/scripts/murmur.service b/scripts/murmur.service
deleted file mode 100644
index 5b3192b08..000000000
--- a/scripts/murmur.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[Unit]
-Description=Mumble Daemon
-After=network.target
-
-[Service]
-Type=exec
-ExecStart=/usr/bin/murmurd -fg -ini /etc/murmur.ini
-Restart=always
-PrivateDevices=true
-PrivateTmp=true
-ProtectSystem=full
-ProtectHome=true
-
-[Install]
-WantedBy=multi-user.target
diff --git a/scripts/php.ini b/scripts/php.ini
deleted file mode 100644
index 08301622c..000000000
--- a/scripts/php.ini
+++ /dev/null
@@ -1 +0,0 @@
-ice.slice=Murmur.ice
diff --git a/scripts/rcc-depends.py b/scripts/rcc-depends.py
deleted file mode 100755
index 7e9df9d04..000000000
--- a/scripts/rcc-depends.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2015-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# rcc-depends.py is a small tool that can be used as a drop-in
-# replacement for 'rcc -list' as a command to find dependencies
-# for .qrc files.
-
-from __future__ import (unicode_literals, print_function, division)
-
-import os
-import platform
-import sys
-from xml.dom import minidom
-
-def main():
- inputs = sys.argv[1:]
- for fn in inputs:
- with open(fn, 'r') as f:
- absFn = os.path.abspath(fn)
- fnDir = os.path.dirname(absFn)
- s = f.read()
- dom = minidom.parseString(s)
- fileTags = dom.getElementsByTagName('file')
- for fileTag in fileTags:
- textNode = fileTag.childNodes[0].wholeText
- absPath = os.path.normpath(os.path.join(fnDir, textNode))
- if platform.system() == 'Windows':
- try:
- output = os.path.relpath(absPath)
- except ValueError:
- # In some cases, Qt lives on another drive than Mumble.
- # This means that we can't create relative path from
- # our absolute path.
- # In those cases, use the absolute path instead.
- output = absPath
- output = output.replace('\\', '/')
- else:
- output = os.path.relpath(absPath)
- print(output)
-
-if __name__ == '__main__':
- main()
diff --git a/scripts/release.pl b/scripts/release.pl
deleted file mode 100755
index 3447e481a..000000000
--- a/scripts/release.pl
+++ /dev/null
@@ -1,77 +0,0 @@
-#! /usr/bin/perl -w
-#
-# Copyright 2005-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-#
-# Creates a source tar.gz and zip file with adjusted Version.h file
-use strict;
-use warnings;
-use Carp;
-use POSIX;
-
-my $ver;
-
-system("rm mumble-*");
-chdir("scripts");
-system("bash mkini.sh");
-chdir("..");
-
-if ($#ARGV < 0) {
- open(F, "git describe origin/master|") or croak "Failed to get version string";
- while (<F>) {
- chomp();
- s/^(.+)-([0-9]+)-(g.+)$/$1|$2|$3/;
- s/-/~/;
- s/\|/-/g;
- $ver = $_;
- }
- close(F);
- print "REVISION $ver\n";
-} elsif ($#ARGV == 0) {
- $ver = $ARGV[0];
-}
-
-print "Adjusting Version.h\n";
-
-open(F, "<src/Version.h") or croak "Could not open src/Version.h for reading";
-my @lines = <F>;
-close(F);
-my $content = join('', @lines);
-$content =~ s/(\#ifndef MUMBLE_VERSION)/$1\n\#define MUMBLE_VERSION $ver\n\#endif\n$1/;
-
-open(F, ">src/Version.h") or croak "Could not open src/Version.h for writing";
-print F $content;
-close(F);
-
-print "Compressing tree\n";
-my $ballname = "mumble-${ver}";
-my $exclusions = join(" --exclude=", ("",
- "*/.git*",
- # Exclude the archive we are currently writing to
- "${ballname}.*",
- # Exclude files with Debian FSG licensing issues (#1230)
- "${ballname}/3rdparty/speex-src/doc/draft-herlein-avt-rtp-speex-00.txt",
- "${ballname}/3rdparty/speex-src/doc/draft-herlein-speex-rtp-profile-02.txt",
- "${ballname}/3rdparty/speex-src/doc/draft-herlein-speex-rtp-profile-03.txt",
- "${ballname}/3rdparty/speex-src/doc/draft-ietf-avt-rtp-speex-00.txt",
- "${ballname}/3rdparty/speex-src/doc/draft-ietf-avt-rtp-speex-01-tmp.txt",
- "${ballname}/3rdparty/speex-src/doc/draft-ietf-avt-rtp-speex-05-tmp.txt",
- "${ballname}/3rdparty/speex-src/doc/manual.lyx",
- "${ballname}/3rdparty/celt-0.7.0-src/doc/ietf/draft-valin-celt-rtp-profile-01.txt"
- )
-);
-
-
-system("mkdir ${ballname}") == 0 or croak "Could not create target directory ${ballname}";
-system("mv * ${ballname}/");
-eval {
- system("tar ${exclusions} -zchvf ${ballname}.tar.gz ${ballname}") == 0 or croak "Failed to create tar.gz";
- system("zip -9 -r ${exclusions} ${ballname}.zip ${ballname}") == 0 or croak "Failed to create zip";
-};
-system("mv ${ballname}/* .");
-system("rmdir ${ballname}");
-
-print "Done\n";
-
diff --git a/scripts/server/dbus/ListUsers.cs b/scripts/server/dbus/ListUsers.cs
deleted file mode 100644
index 658b40c7e..000000000
--- a/scripts/server/dbus/ListUsers.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2013-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-/*
-This shows how to list connected users in C#. This depends on the NDesk-DBus
-package, which can be found at http://www.ndesk.org/DBusSharp
-
-Note that DBusSharp requires you to define the interface of the object you
-are connecting to at compile time. As such, you loose the advantages of DBus
-Introspection, but it's a bit faster (and type safe).
-This example only includes a very small subset of the interface definition.
-
-To compile this with Mono, type:
-gmcs -pkg:ndesk-dbus-1.0 ListUsers.cs
-
-To compile this with the Microsoft compiler, type:
-csc -r:NDesk.DBus.dll ListUsers.cs
-*/
-
-using System;
-using NDesk.DBus;
-using org.freedesktop.DBus;
-
-public class ListUsers
-{
- public static void Main (string[] args)
- {
- Connection bus;
- if (args.Length == 0) {
- bus = Bus.Session;
- } else {
- if (args[0] == "--session")
- bus = Bus.Session;
- else if (args[0] == "--system")
- bus = Bus.System;
- else
- bus = Connection.Open (args[0]);
- }
-
- Meta m = bus.GetObject<Meta>("net.sourceforge.mumble.murmur", new ObjectPath("/"));
- int [] servers = m.getBootedServers();
-
- foreach(int id in servers) {
- string path="/"+id;
- Console.WriteLine("Users on server #{0}, path {1}",id,path);
- Server s = bus.GetObject<Server>("net.sourceforge.mumble.murmur", new ObjectPath(path));
- PlayerInfoExtended [] players = s.getPlayers();
- foreach(PlayerInfoExtended pi in players) {
- Console.WriteLine(" {0} ({1})",pi.name,pi.session);
- }
- }
- }
-}
-
-[Interface ("net.sourceforge.mumble.Meta")]
-public interface Meta : Introspectable
-{
- int [] getBootedServers();
-}
-
-[Interface ("net.sourceforge.mumble.Murmur")]
-public interface Server : Introspectable
-{
- PlayerInfoExtended [] getPlayers();
-}
-
-public struct PlayerInfoExtended
-{
- public uint session;
- public bool mute;
- public bool deaf;
- public bool suppressed;
- public bool selfMute;
- public bool selfDeaf;
- public int channel;
- public int id;
- public string name;
- public int onlinesecs;
- public int bytespersec;
-}
diff --git a/scripts/server/dbus/dbusauth.pl b/scripts/server/dbus/dbusauth.pl
deleted file mode 100755
index 52f5572e5..000000000
--- a/scripts/server/dbus/dbusauth.pl
+++ /dev/null
@@ -1,300 +0,0 @@
-#! /usr/bin/perl
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-
-# This is a small example script of how to set up murmur to authenticate through
-# phpBB3. To use it, you'll have to have started murmur with DBus, and use the
-# same session for this script.
-#
-
-use warnings;
-use strict;
-
-# Replace these with whatever is correct for you
-our $dbname="phpbb3";
-our $dbuser="phpbb3";
-our $dbpass="uhduqw1237a";
-our $dbprefix="phpbb_";
-our $dbhost="localhost";
-
-# Assign user id as phpbb3 user_id plus this, to avoid clashing
-# with local murmur users. If you're going to use ONLY external
-# authentication, you can set this to 1, but there's no real point.
-# Note that Mumble ignores values above 1000000000 when allocating
-# player IDs on its own, so you probably want to leave this alone.
-our $id_offset = 1000000000;
-
-# Path to phpBB user avatars. If you want to disable avatar support, set
-# this blank. This can be either a directory path or a full URL.
-
-our $avatar_path = "http://xeno.stud.hive.no/phpBB3/download.php?avatar=";
-
-#
-# No user servicable parts below this point.
-#
-
-use DBI;
-use Net::DBus;
-use Data::Dumper;
-use Net::DBus::Reactor;
-use LWP::UserAgent;
-use Carp;
-
-our %texturecache;
-
-our @dbhparams=("dbi:mysql:dbname=${dbname};host=${dbhost}", $dbuser, $dbpass);
-our $agent=new LWP::UserAgent;
-$agent->timeout(5);
-
-our ($bus, $service);
-
-our $r = Net::DBus::Reactor->main;
-eval {
- $bus = Net::DBus->system();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
-};
-
-if (! $service) {
- eval {
- $bus = Net::DBus->session();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
- };
-}
-
-die "Murmur service not found" if (! $service);
-
-my $dbh=DBI->connect_cached(@dbhparams);
-if (! $dbh) {
- die $DBI::errstr;
-}
-
-our $object = $service->get_object("/1");
-
-our $rservice = $bus->export_service("net.sourceforge.mumble.phpbb");
-our $robject = Mumble::Auth->new($rservice);
-
-
-package Mumble::Auth;
-
-use Data::Dumper;
-use Image::Magick;
-use Digest::MD5 qw(md5);
-use Net::DBus::Exporter qw(net.sourceforge.mumble.auther);
-use base qw(Net::DBus::Object);
-dbus_method("authenticate", ["string","string"], ["int32","string",["array","string"]]);
-dbus_method("getUserName", ["int32"], ["string"]);
-dbus_method("getUserId", ["string"], ["int32"]);
-dbus_method("getUserTexture", ["int32"], [["array", "byte"]]);
-
-sub new {
- my $class = shift;
- my $service = shift;
- my $self = $class->SUPER::new($service, "/authority");
- bless $self, $class;
- return $self;
-}
-
-sub hash {
- my $self = shift;
- my $pw = shift;
- my $hash = shift;
- my $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- my @itoa64 = split(//,$itoa64);
- my $count_log2 = index($itoa64, substr($hash,3,1));
- my $count = 1 << $count_log2;
- my $salt = substr($hash, 4, 8);
-
- my $nhash = $salt;
-
- do {
- $nhash = md5($nhash . $pw);
- } while ($count--);
-
- my $output = substr($hash, 0, 12);
-
- my $i = 0;
- my @input = split(//,$nhash);
- while ($i < 16) {
- my $value;
- $value = ord($input[$i++]);
- $output .= $itoa64[$value & 0x3f];
- if ($i < 16) {
- $value |= ord($input[$i]) << 8;
- }
- $output .= $itoa64[($value >> 6) & 0x3f];
- last if ($i++ >= 16);
-
- if ($i < 16) {
- $value |= ord($input[$i]) << 16;
- }
- $output .= $itoa64[($value >> 12) & 0x3f];
-
- last if ($i++ >= 16);
- $output .= $itoa64[($value >> 18) & 0x3f];
- };
-
- return $output;
-}
-
-# Possible responses are:
-# >0 ID of user
-# 0 SuperUser
-# -1 Wrong password
-# -2 Unknown user -- fall back to builtin database
-
-sub authenticate {
- my $self = shift;
- my $uname = shift;
- my $pw = shift;
-
- my $dbh=DBI->connect_cached(@dbhparams);
- if (! $dbh) {
- carp $DBI::errstr;
- return -2,'',undef;
- }
- $dbh->do("SET names utf8");
- my $sth=$dbh->prepare("SELECT user_id, user_password, user_type, username FROM ${dbprefix}users WHERE LOWER(username) = LOWER(?)");
- $sth->execute($uname);
- if ((my $r=$sth->fetchrow_hashref())) {
- if ($$r{'user_password'} ne $self->hash($pw,$$r{'user_password'})) {
- print "Wrong password for $uname\n";
- return -1,'',undef;
- }
- if (($$r{'user_type'} != 0) && ($$r{'user_type'} != 3)) {
- return -1,'',undef;
- }
- my $id = $$r{'user_id'} + $id_offset;
- my $name = $$r{'username'};
- $sth->finish();
-
- my @groups;
- $sth=$dbh->prepare("SELECT group_name FROM ${dbprefix}user_group LEFT JOIN ${dbprefix}groups USING (group_id) WHERE user_id = ?");
- $sth->execute($$r{'user_id'});
- while ((my $g=$sth->fetchrow_hashref())) {
- push @groups, lc $$g{'group_name'};
- }
- #my $response = $object->setTemporaryGroups(0, $id, \@groups);
- #Dumper($response);
- print "Authenticated $uname as ID $id with groups ".join(" ",@groups)."\n";
- return $id,$name,\@groups;
- } else {
- print "Unknown user $uname\n";
- return -2,'',undef;
- }
-}
-
-# Possible responses are:
-# string Name of user
-# empty Unknown user
-# undef Fall back to builting database
-
-sub getUserName {
- my $self = shift;
- my $id = shift;
-
- my $dbh=DBI->connect_cached(@dbhparams);
- if (! $dbh) {
- carp $DBI::errstr;
- return undef;
- }
- $dbh->do("SET names utf8");
- my $sth=$dbh->prepare("SELECT username FROM ${dbprefix}users WHERE user_id = ?");
- $sth->execute($id - $id_offset);
- if ((my $r=$sth->fetchrow_hashref())) {
- print "UID $id :: " .$$r{'username'}."\n";
- return $$r{'username'};
- }
- print "No match for id $id\n";
- return undef;
-}
-
-# Same response as authenticate
-
-sub getUserId {
- my $self = shift;
- my $name = shift;
-
- my $dbh=DBI->connect_cached(@dbhparams);
- if (! $dbh) {
- carp $DBI::errstr;
- return -2;
- }
- $dbh->do("SET names utf8");
- my $sth=$dbh->prepare("SELECT user_id FROM ${dbprefix}users WHERE username = ?");
- $sth->execute($name);
- if ((my $r=$sth->fetchrow_hashref())) {
- return $$r{'user_id'} + $id_offset;
- }
- return -2;
-}
-
-# Grab a user texture.
-
-sub getUserTexture {
- my $self = shift;
- my $uid = shift;
-
- my @a;
-
- my $dbh=DBI->connect_cached(@dbhparams);
- if (! $dbh) {
- carp $DBI::errstr;
- return undef;
- }
- $dbh->do("SET names utf8");
- my $sth=$dbh->prepare("SELECT user_avatar, user_avatar_type FROM ${dbprefix}users WHERE user_id = ?");
- $sth->execute($uid - $id_offset);
- if ((my $r=$sth->fetchrow_hashref())) {
- my $file = $$r{'user_avatar'};
- my $type = $$r{'user_avatar_type'};
- if (($type != 1) && ($type != 2)) {
- print "Request for texture $uid :: not uploaded texture ($type)\n";
- return \@a;
- }
- if (exists $texturecache{$file}) {
- return $texturecache{$file};
- }
-
- my $url = (($type == 1) ? $avatar_path : '') . $file;
- my $response = $agent->get($url);
- if (! $response->is_success) {
- print "Request for texture $uid :: Fetch $url failed: ". $response->status_line . "\n";
- } else {
- my $image = new Image::Magick();
- my $r = $image->BlobToImage($response->content);
- if ($r) {
- print "Request for texture $uid :: Image $url load failed: $r\n";
- } else {
- $image->Extent(x => 0, y => 0, width => 600, height => 60);
- my $out=$image->ImageToBlob(magick => 'rgba', depth => 8);
- if (length($out) != (600*60*4)) {
- print "Request for texture $uid :: Failed resize\n";
- } else {
- @a = unpack("C*", $out);
- for(my $i=0;$i<600*60;$i++) {
- my $red=$a[$i*4];
- my $blue=$a[$i*4+2];
- $a[$i*4]=$blue;
- $a[$i*4+2]=$red;
- }
- print "Request for texture $uid :: $url :: Success\n";
- }
- }
- }
- $texturecache{$file} = \@a;
- return $texturecache{$file};
- }
- return undef;
-}
-
-
-package main;
-
-my $response = $object->setAuthenticator("/authority", 0);
-
-print "Entering main DBus loop...\n";
-$r->run();
diff --git a/scripts/server/dbus/murmur.pl b/scripts/server/dbus/murmur.pl
deleted file mode 100755
index bd9f6b819..000000000
--- a/scripts/server/dbus/murmur.pl
+++ /dev/null
@@ -1,292 +0,0 @@
-#! /usr/bin/perl
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-#
-# For now, this is a CGI using Perl.
-#
-
-use warnings;
-use strict;
-
-## User configurable settings:
-
-# What's the name of this server?
-our $servername = "Mumble & Murmur Test Server";
-
-# Who should outgoing authentication emails be from?
-our $emailfrom = "";
-
-# And what server should be used?
-our $emailserver = "localhost";
-
-# Which server to add to? Unless you have multiple virtual servers,
-# this is always 1
-our $serverid = 1;
-
-## End of user configurable data
-##
-## Really. You shouldn't touch anything below this point.
-
-# If we're being run as a CGI in suexec, $HOME doesn't exist. Fake it.
-my $home = (getpwuid($<))[7];
-
-# This needs to be done before "use Net::DBus"
-if (open(F, "$home/murmur/.dbus.sh")) {
- while(<F>) {
- chomp();
- if ($_ =~ /^(.+?)\='(.+)';$/) {
- $ENV{$1}=$2;
- }
- }
- close(F);
-}
-
-use CGI;
-use CGI::Carp 'fatalsToBrowser';
-use CGI::Session;
-use Net::SMTP;
-use Net::DNS;
-use Net::DBus;
-use Image::Magick;
-use Compress::Zlib;
-use Config::Simple;
-
-sub randomCode($) {
- my ($length) = @_;
- my $ret;
- my $chars="0123456789abcdefghjiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- for(my $i=0;$i<$length;$i++) {
- $ret .= substr($chars, rand(int(length($chars))), 1);
- }
- return $ret;
-}
-
-my $showit = 1;
-
-CGI::Session->find( sub { } );
-
-my $q = new CGI();
-my $s = new CGI::Session();
-
-$s->expire('+1d');
-
-print $s->header();
-print $q->start_html(-title=>"Registration");
-
-my $bus;
-my $service;
-
-# First try the system bus
-eval {
- $bus=Net::DBus->system();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
-
- my $cfg = new Config::Simple(filename => '/etc/mumble-server.ini', syntax => 'simple');
- $servername = $cfg->param("registerName") || $servername;
- $emailfrom = $cfg->param("emailfrom") || $emailfrom;
-};
-
-# If that failed, the session bus
-if (! $service) {
- eval {
- $bus = Net::DBus->session();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
- }
-}
-
-die "Murmur service not found" if (! $service);
-
-if (! defined($emailfrom) || ($emailfrom eq "")) {
- croak(qq{Missing configuration.
- Please edit either /etc/mumble-server.ini for systemwide installations,
- or murmur.pl for a personal one.
- });
-}
-
-
-# Fetch handle to remote object
-my $object = $service->get_object("/$serverid");
-my $res;
-
-my $auth = $q->param('auth');
-my $name = $q->param('name');
-my $pw = $q->param('pw');
-my $email = $q->param('email');
-my $image = $q->upload('image');
-
-if (defined($s->param('auth')) && ($auth eq $s->param('auth'))) {
- $res = $object->getRegisteredPlayers($s->param('name'));
- if ($#{$res} == 0) {
- my $aref = $$res[0];
- if ($email ne $$aref[2]) {
- $$aref[3] = $s->param('pw');
- $object->updateRegistration($aref);
- print "<h1>Updated password</h1><p>Your password has been reset.</p>";
- $showit = 0;
- } else {
- print "<h1>Apologies</h1><p>Someone has already registered that name in the meantime.</p>";
- }
- } else {
- $res = $object->registerPlayer($s->param('name'));
- if (($res != 0) && ($res != "0")) {
- my @array = ($res, $s->param('name'), $s->param('email'), $s->param('pw'));
- $object->updateRegistration(\@array);
- print "<h1>Succeeded</h1><p>Thank you for registering.</p>";
- $showit = 0;
- } else {
- print "<h1>Failed</h1><p>Username rejected by server.</p>";
- }
- }
- $s->clear();
-} elsif (defined($name) && defined($pw) && defined($image)) {
- my $id = $object->getPlayerIds( [ $name ] );
- $res = $object->verifyPassword($$id[0], $pw);
- if (! $res) {
- print "<h1>Tsk tsk</h1><p>Now, that's not a valid user and password, is it?</p>";
- } else {
- my $blob;
- sysread($image,$blob,1000000);
- my $image=Image::Magick->new();
- my $r=$image->BlobToImage($blob);
- if (! $r) {
- $image->Extent(x => 0, y => 0, width => 600, height => 60, background => "transparent");
- my $out=$image->ImageToBlob(magick => 'rgba', depth => 8);
- if (length($out) == (600*60*4)) {
- # We need BGRA, AKA ARGB inverse
- my @a=unpack("C*", $out);
- for(my $i=0;$i<600*60;$i++) {
- my $red=$a[$i*4];
- my $blue=$a[$i*4+2];
- $a[$i*4]=$blue;
- $a[$i*4+2]=$red;
- }
- @a=unpack("C*", pack("N", $#a + 1) . compress(pack("C*",@a)));
- $res = $object->setTexture($$id[0], \@a);
- } else {
- $r=1;
- }
- }
- if ($r) {
- print "<h1>Image failure</h1><p>Failed to convert that to a proper image.</p>";
- } else {
- print "<h1>Succeeded</h1><p>Reconnect to use the new image.</p>";
- $showit = 0;
- }
- }
-} elsif (defined($name) && defined($pw) && defined($email)) {
- my @errors;
-
- if (length($name) < 4) {
- push @errors, "Username is too short.";
- }
- if (length($pw) < 8) {
- push @errors, "Password is too short.";
- }
- if ($name !~ /^[0-9a-zA-Z\(\)\[\]\-\_]+$/) {
- push @errors, "Username contains illegal characters.";
- }
-
- if ($email !~ /^[0-9a-zA-Z\.\-\_]+\@(.+)$/) {
- push @errors, "That doesn't even look like an email adddress.";
- } else {
- my @mx = mx($1);
- if ($#mx == -1) {
- push @errors, "And how am I supposed to send email there?";
- }
- }
-
- $res=$object->getRegisteredPlayers($name);
- if ( $#{$res} == 0 ) {
- my $aref = $$res[0];
- if ($email ne $$aref[2]) {
- push @errors, "Name is already taken";
- }
- }
-
- if ($#errors == -1) {
- my $code = randomCode(10);
-
- $s->param('name', $name);
- $s->param('pw', $pw);
- $s->param('email', $email);
- $s->param('auth', $code);
-
- my $smtp = new Net::SMTP($emailserver);
- if (! $smtp) {
- croak(qq{Failed to connect to SMTP server "$emailserver". This is most likely a configuration problem.\n});
- }
- $smtp->mail($emailfrom);
- $smtp->to($email);
- $smtp->data();
- $smtp->datasend("From: $emailfrom\n");
- $smtp->datasend("To: $email\n");
- $smtp->datasend("Subject: Murmur registration\n");
- $smtp->datasend("\n");
- $smtp->datasend("A user from $ENV{'REMOTE_ADDR'} registered the username $name\n");
- $smtp->datasend("on \"${servername}\".\n\n");
- $smtp->datasend("If this was you, please visit the following url to activate your account:\n");
- $q->delete_all();
- $q->param('auth', $code);
- $smtp->datasend($q->url(-query=>1));
- $smtp->datasend("\n\n");
- $smtp->datasend("If you have no idea what this is about, just disregard this message.");
- $smtp->dataend();
-
- print '<h1>Registration complete</h1><p>Thank you for registering. An email has been sent to you with ';
- print 'an activation code.</p>';
- $showit = 0;
- } else {
- print '<ul>';
- foreach my $error (@errors) {
- print "<li>$error</li>";
- }
- print '</ul>';
- }
-}
-
-if ($showit) {
- print '<h1>Registration form</h1>';
- print '<p>Fill out your desired username, password and your current email address. A mail will be sent to you ';
- print 'with an authentication code.</p>';
- print '<p>If you\'ve forgotten your password, just reregister with the same name and email address. A new ';
- print 'confirmation email will be sent.</p>';
- print '<p>';
- print $q->start_form(-method=>'POST');
- print "Username ";
- print $q->textfield(-name=>'name', -size=>'10');
- print "<br />\n";
- print "Email ";
- print $q->textfield(-name=>'email', -size=>'30');
- print "<br />\n";
- print "Password ";
- print $q->password_field(-name=>'pw', -size=>'10');
- print "<br />\n";
- print $q->submit(-value=>'Register');
- print $q->end_form();
- print '</p>';
-
- print '<h1>Upload custom texture?</h1>';
- print '<p>';
- print 'Remember that the image must be 600 by 60 pixels, and must have an alpha channel.<br />';
- print "\n";
- print $q->start_form(-method=>'POST');
- print "Username ";
- print $q->textfield(-name=>'name', -size=>'10');
- print "<br />\n";
- print "Password ";
- print $q->password_field(-name=>'pw', -size=>'10');
- print "<br />\n";
- print "Image ";
- print $q->filefield(-name=>'image', -size=>'30');
- print "<br />\n";
- print $q->submit(-value=>'Upload Image');
- print $q->end_form();
- print '</p>';
-}
-
-print $q->end_html();
diff --git a/scripts/server/dbus/weblist.pl b/scripts/server/dbus/weblist.pl
deleted file mode 100755
index b3d5ed351..000000000
--- a/scripts/server/dbus/weblist.pl
+++ /dev/null
@@ -1,154 +0,0 @@
-#! /usr/bin/perl
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-
-use warnings;
-use strict;
-
-# If we're being run as a CGI in suexec, $HOME doesn't exist. Fake it.
-my $home = (getpwuid($<))[7];
-
-# This needs to be done before "use Net::DBus"
-if (open(F, "$home/murmur/.dbus.sh")) {
- while(<F>) {
- chomp();
- if ($_ =~ /^(.+?)\='(.+)';$/) {
- $ENV{$1}=$2;
- }
- }
- close(F);
-}
-
-use Net::DBus;
-use CGI::Carp qw(fatalsToBrowser);
-use HTML::Template;
-
-my $tmpl_fname = $1 if ($0 =~ /(.+)\.([a-z]+)$/);
-my $tmpl;
-if (-f "$tmpl_fname.tmpl") {
- $tmpl = HTML::Template->new(filename => "$tmpl_fname.tmpl");
-} else {
- $tmpl = HTML::Template->new(filehandle => *DATA);
-}
-my $bus;
-my $service;
-
-# First try the system bus
-eval {
- $bus=Net::DBus->system();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
-};
-
-# If that failed, the session bus
-if (! $service) {
- eval {
- $bus = Net::DBus->session();
- $service = $bus->get_service("net.sourceforge.mumble.murmur");
- }
-}
-
-die "Murmur service not found" if (! $service);
-
-# Fetch handle to remote object
-my $object = $service->get_object("/");
-# Call a function on the murmur object
-my $servers = $object->getBootedServers();
-
-my $params = [];
-foreach my $server (@{$servers}) {
- my $name = $object->getConf($server, "registername");
- my $servobj = $service->get_object("/$server");
-
- my %users;
- # First, get channel names
- my $channels = $servobj->getChannels();
- my %channels;
- foreach my $c (@{$channels}) {
- my @c = @{$c};
- my $id = $c[0];
- my $name = $c[1];
- $channels{$id}=$name;
- }
- # Then, get and print the players
- my $players = $servobj->getPlayers();
- my $_total = 0;
- foreach my $p (@{$players}) {
- my @p = @{$p};
- my $chanid = $p[6];
- my $name = $p[8];
- my $chan = $channels{$chanid};
- $users{$chan} = [] unless $users{$chan};
- push @{$users{$chan}}, $name;
- $_total++;
- }
- my $_channels = [];
- for my $c (sort keys %users) {
- my $_users = [];
- for my $u (sort @{$users{$c}}) {
- push @{$_users}, {'user' => $u};
- }
- push @{$_channels}, {
- 'channel' => $c,
- 'users' => $_users
- };
- }
- push @{$params}, {'server' => $server, 'name' => $name, 'total' => $_total, 'channels' => $_channels};
-}
-
-$tmpl->param("servers", $params);
-print "Content-type: text/html;charset=utf8\r\n\r\n",
- $tmpl->output;
-
-__END__
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<HTML lang="ja">
- <HEAD>
- <Title>mumble server user list</title>
- <STYLE TYPE="text/css">
- <!--
- body {
- background-color: #ffffff;
- color: #4b4b4b;
- font-family: verdana, arial, sans-serif;
- font-size: 13px;
- margin: 10px 20px;
- }
- dl {
- margin-left: 5px;
- }
- dt {
- clear: both;
- font-weight: bold;
- padding-left: 5px;
- border-left: #4b4b4b 5px solid
- }
- dd {
- float: left;
- margin-left: 5px;
- margin-bottom: 5px;
- margin-top: 2px;
- }
- -->
- </STYLE>
- </HEAD>
- <BODY bgcolor="#ffffff" text="#4b4b4b" link="#3399ff" alink="#0099cc" vlink="#006666">
- <TMPL_LOOP NAME="servers">
- <H1>Server #<TMPL_VAR NAME="server"> <TMPL_VAR NAME="name"></H1>
- total: <TMPL_VAR NAME="total">
- <dl>
- <TMPL_LOOP NAME="channels">
- <dt><TMPL_VAR NAME="channel">
- <dd>
- <TMPL_LOOP NAME="users">
- <TMPL_VAR NAME="user">,
- </TMPL_LOOP>
- </TMPL_LOOP>
- </dl>
- </TMPL_LOOP>
- </BODY>
-</HTML>
-
diff --git a/scripts/server/ice/addban.php b/scripts/server/ice/addban.php
deleted file mode 100644
index bc601bfa4..000000000
--- a/scripts/server/ice/addban.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-# This shows how to use structs from PHP.
-
-if (Ice_intversion() >= 30400) {
- require 'Ice.php';
- require 'Murmur.php';
-} else {
- Ice_loadProfile();
-}
-
-try {
- if (Ice_intversion() >= 30400) {
- $ICE = Ice_initialize();
- }
-
- $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502");
- $meta = $base->ice_checkedCast("::Murmur::Meta");
-
- $default = $meta->getDefaultConf();
-
- $server = $meta->getServer(1);
-
-
- $bans = $server->getBans();
-
- print_r($bans);
- foreach($bans as $ban) {
- for($i=0;$i<16;$i+=2) {
- echo sprintf("%02x%02x", $ban->address[$i], $ban->address[$i+1]);
- if ($i != 14) {
- echo ":";
- }
- }
- $mask = $ban->bits;
- echo "/$mask\n";
- }
-
- $ban = new Murmur_Ban();
- $ban->address = array(0,0,0,0,0,0,0,0,0,0,255,255,127,0,0,1);
- $ban->bits = 128;
-
- array_push($bans, $ban);
-
- $server->setBans($bans);
-
-} catch (Ice_Exception $ex) {
- print_r($ex);
-}
-?>
diff --git a/scripts/server/ice/glacier/config b/scripts/server/ice/glacier/config
deleted file mode 100644
index 399378e6a..000000000
--- a/scripts/server/ice/glacier/config
+++ /dev/null
@@ -1,3 +0,0 @@
-Glacier2.Client.Endpoints=tcp -h 0.0.0.0 -p 4063
-Glacier2.SessionTimeout=60
-Glacier2.CryptPasswords=passwords
diff --git a/scripts/server/ice/glacier/glacier.php b/scripts/server/ice/glacier/glacier.php
deleted file mode 100644
index 129fc47ab..000000000
--- a/scripts/server/ice/glacier/glacier.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>
-<head>
-<title>Userlist</title>
-</head>
-<body>
-<?php
-
-Ice_loadProfile();
-
-try {
- # Replace IP address with the one your glacier2 is running on
- $router = $ICE->stringToProxy("Glacier2/router:tcp -p 4063 -h 128.39.114.1");
- $router = $router->ice_uncheckedCast("::Glacier2::Router")->ice_router(null);
- $session = $router->createSession("testuser", "testpass");
-
- $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502")->ice_router($router);
- $meta = $base->ice_checkedCast("::Murmur::Meta");
-
- $servers = $meta->getBootedServers();
- $default = $meta->getDefaultConf();
- foreach($servers as $s) {
- $s = $s->ice_router($router);
- $name = $s->getConf("registername");
- if (! $name) {
- $name = $default["registername"];
- }
- echo "<h1>SERVER #" . $s->id() . " " .$name ."</h1>\n";
- echo "<table><tr><th>Name</th><th>Channel</th></tr>\n";
-
- $channels = $s->getChannels();
- $players = $s->getUsers();
-
- foreach($players as $id => $state) {
- $chan = $channels[$state->channel];
- echo "<tr><td>".$state->name."</td><td>".$chan->name."</td></tr>\n";
- }
- echo "</table>\n";
- }
-} catch (Ice_LocalException $ex) {
- print_r($ex);
-}
-
-?>
-</body>
-</html>
diff --git a/scripts/server/ice/glacier/passwords b/scripts/server/ice/glacier/passwords
deleted file mode 100644
index 04d2dc5b4..000000000
--- a/scripts/server/ice/glacier/passwords
+++ /dev/null
@@ -1,3 +0,0 @@
-# Username/password pairs.
-# passwords are generated with 'openssl passwd'
-testuser Ok0Z9JAEBWiAY
diff --git a/scripts/server/ice/icedemo.php b/scripts/server/ice/icedemo.php
deleted file mode 100644
index a19c3f3fc..000000000
--- a/scripts/server/ice/icedemo.php
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-<title>Userlist</title>
-</head>
-<body>
-<?php
-
-if (!extension_loaded('ice')) {
- exit('Error: This example script needs the PHP extension for Ice to be loaded.');
-}
-if ((!function_exists('Ice_intVersion') || Ice_intVersion() < 30400) || !function_exists('Ice_loadProfile')) {
- exit('Error: This example script is compatible only for php-ice versions prior to 3.4.');
-}
-
-Ice_loadProfile();
-
-if ($argc > 0) {
- for($i=1;$i<$argc;$i++) {
- parse_str($argv[$i], $tmp);
- $_REQUEST=array_merge($_REQUEST, $tmp);
- }
-}
-
-function ucmp($a, $b) {
- if (($a->playerid == 0) || ($b->playerid == 0)) {
- return ($a->playerid - $b->playerid);
- }
- return strcasecmp($a->name, $b->name);
-}
-
-$confitems = array();
-$confbig = array();
-$confitems['host']="IP Address to bind to";
-$confitems['port']="Port to use";
-$confitems['password']="Password for unregistered users";
-$confitems['timeout']="Timeout before kicking dead connections";
-$confitems['bandwidth']="Maximum bandwidth in bytes/sec";
-$confitems['users']="Maximum number of users on server";
-$confitems['welcometext']="Welcome message";
-$confbig['welcometext']=1;
-$confitems['registername']="Server Name";
-$confitems['registerpassword']="Password for Global Server List";
-$confitems['registerhostname']="Hostname for Global Server List";
-$confitems['registerurl']="HTTP URL for Global Server List";
-$confitems['certificate']="PEM Encoded SSL Certificate";
-$confbig['certificate']=1;
-$confitems['key']="PEM Encoded SSL Key";
-$confbig['key']=1;
-
-try {
- $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502");
- $meta = $base->ice_checkedCast("::Murmur::Meta");
-
- $default = $meta->getDefaultConf();
-
- if (! is_null($_REQUEST['newserver'])) {
- $meta->newServer();
- } else if (! is_null($_REQUEST['delserver'])) {
- $meta->getServer((int)$_REQUEST['delserver'])->delete();
- } else if (! is_null($_REQUEST['stop'])) {
- $meta->getServer((int) $_REQUEST['stop'])->stop();
- } else if (! is_null($_REQUEST['start'])) {
- $meta->getServer((int) $_REQUEST['start'])->start();
- } else if (! is_null($_REQUEST['action'])) {
- $server = $meta->getServer((int) $_REQUEST['action']);
- if (!is_null($_REQUEST['kick'])) {
- $server->kickPlayer((int) $_REQUEST['kick'], "Mushroom");
- }
- } else if (! is_null($_REQUEST['uedit'])) {
- $server = $meta->getServer((int) $_REQUEST['uedit']);
- if (isset($_REQUEST['newplayer'])) {
- $reg = array();
- $reg[Murmur_UserInfo::UserName] = $_REQUEST['newplayer'];
- if ($_REQUEST['password']) $reg[Murmur_UserInfo::UserPassword] = $_REQUEST['password']; // This line is added for password at user creation
- $_REQUEST['uid'] = $server->registerUser($reg);
- }
- if (! is_null($_REQUEST['deleteplayer'])) {
- $server->unregisterUser((int) $_REQUEST['deleteplayer']);
- }
- if (! is_null($_REQUEST['uid'])) {
- $uid = (int) $_REQUEST['uid'];
- $user = $server->getRegistration($uid);
- if (! is_null($_REQUEST['set'])) {
- $user[Murmur_UserInfo::UserEmail] = $_REQUEST['email'];
- $user[Murmur_UserInfo::UserPassword] = $_REQUEST['pw'];
- $server->updateRegistration($uid,$user);
- } else {
- echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
- echo "<p>\n";
- echo "<b>Name:</b> ".$user[Murmur_UserInfo::UserName]."<br />\n";
- echo "<input type=\"hidden\" name=\"set\" value=\"1\" />\n";
- echo "<input type=\"hidden\" name=\"uedit\" value=\"".$server->id()."\" />\n";
- echo "<input type=\"hidden\" name=\"uid\" value=\"$uid\" />\n";
- echo "<b>Email:</b> <input type=\"text\" name=\"email\" size=\"30\" maxlength=\"128\" value=\"".htmlspecialchars($user[Murmur_UserInfo::UserEmail])."\" /><br />\n";
- echo "<b>New password:</b> <input type=\"password\" name=\"pw\" size=\"30\" maxlength=\"128\" /><br />\n";
- echo "<input type=\"submit\" />\n";
- echo "</p>\n";
- echo "</form>\n";
- }
- }
- echo "<h1>Registered User List</h1>\n";
- echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
- echo "<p>\n";
- echo "<input type=\"hidden\" name=\"uedit\" value=\"".$server->id()."\" />\n";
- echo "<b>New User:</b>";
- echo "<input type=\"text\" name=\"newplayer\" size=\"30\" maxlength=\"60\" />";
- echo "<b>User Password:</b>";
- echo "<input type=\"text\" name=\"password\" size=\"30\" maxlength=\"60\" />";
- echo "<input type=\"submit\" />\n";
- echo "</p>\n";
- echo "</form>\n";
- echo "<table>\n";
- echo "<tr><th>UserName</th><th>Email</th><th></th></tr>\n";
- $users = $server->getRegisteredUsers("");
- foreach($users as $id=>$name) {
- $u = $server->getRegistration($id);
- echo "<tr><td>$name $id</td><td>".$u[Murmur_UserInfo::UserEmail]."</td><td>";
- echo "<a href=\"?uedit=".$server->id()."&amp;uid=".$id."\">[Edit]</a> ";
- echo "<a href=\"?uedit=".$server->id()."&amp;deleteplayer=".$id."\">[Unregister]</a> ";
- echo "</td></tr>\n";
- }
- echo "</table>\n";
- } else if (! is_null($_REQUEST['server'])) {
- $server = $meta->getServer($_REQUEST['server'] + 0);
- if (! is_null($_REQUEST['set'])) {
- foreach($confitems as $key=>$desc) {
- $server->setConf($key, $_REQUEST[$key]);
- }
- } else {
- $conf = $server->getAllConf();
- $default['port'] += $server->id() - 1;
- echo "<h1>Server Configuration</h1>\n";
- echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
- echo "<div>\n";
- echo "<input type=\"hidden\" name=\"server\" value=\"".$server->id()."\" />\n";
- echo "<input type=\"hidden\" name=\"set\" value=\"1\" />\n";
- echo "</div>\n";
- echo "<table><tr><th>Description</th><th>Default</th><th>Value</th></tr>\n";
- foreach($confitems as $key=>$desc) {
- if (! isset($confbig[$key])) {
- echo "<tr><td>$desc</td><td>".htmlspecialchars($default[$key])."</td><td>";
- echo "<input type=\"text\" name=\"$key\" size=\"30\" maxlength=\"64000\" value=\"".htmlspecialchars($conf[$key])."\" />";
- echo "</td></tr>\n";
- } else {
- echo "<tr><td>$desc</td><td colspan=\"2\">".htmlspecialchars($default[$key])."</td></tr>";
- echo "<tr><td>&nbsp;</td><td colspan=\"2\"><textarea rows=\"5\" cols=\"80\" name=\"$key\">".htmlspecialchars($conf[$key])."</textarea>";
- echo "</td></tr>\n";
- }
- }
- echo "</table>\n";
- echo "<div><input type=\"submit\" /></div>\n";
- echo "</form>\n";
- }
- }
-
- $servers = $meta->getAllServers();
- $booted = $meta->getBootedServers();
-
- echo "<h1>Murmur ICE Interface demo</h1>\n";
- echo "<p><b>Warning:</b> This is not intended as a full management suite. It's an example. It has bugs. It has security holes. ";
- echo "It might make precious body parts fall off. <b>Do not run it on a production server</b>.\n";
- echo "</p>\n";
- echo "<p>\n";
- echo "<a href=\"?newserver\">[New Server]</a>\n";
- echo "</p>\n";
- foreach($servers as $s) {
- $name = $s->getConf("registername");
- if (! $name) {
- $name = $default["registername"];
- }
- $id = $s->id();
- echo "<h1>SERVER #" . $id . " " .$name ."</h1>\n";
- echo "<p>\n";
- echo "<a href=\"?server=".$id."\">[Config]</a> ";
- if (in_array($s, $booted)) {
- echo "<a href=\"?uedit=".$id."\">[Manage Users]</a> ";
- echo "<a href=\"?stop=".$id."\">[Stop]</a> ";
- } else {
- echo "<a href=\"?delserver=".$id."\">[Delete Server]</a> ";
- echo "<a href=\"?start=".$id."\">[Start]</a> ";
- }
- echo "</p>\n";
- if (in_array($s, $booted)) {
- echo "<table><tr><th>Name</th><th>Channel</th><th>Actions</th></tr>\n";
-
- $channels = $s->getChannels();
- $players = $s->getUsers();
-
- foreach($players as $pid => $state) {
- $chan = $channels[$state->channel];
- echo "<tr><td>".$state->name."</td><td>".$chan->name."</td><td>";
- echo "<a href=\"?action=".$id."&amp;kick=$state->session\">[Kick]</a>";
- echo "</td></tr>\n";
- }
- echo "</table>\n";
- }
- }
-} catch (Ice_Exception $ex) {
- echo "<p>\n<pre>\n";
- print_r($ex);
- echo "</pre>\n</p>\n";
-}
-
-?>
-</body>
-</html>
diff --git a/scripts/server/ice/idle.php b/scripts/server/ice/idle.php
deleted file mode 100644
index 64ec27372..000000000
--- a/scripts/server/ice/idle.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?
-# idle.php - Sample "auto-idle mover" script. Run in a cron job.
-# Copyright (c) 2010, Jamie Fraser / MumbleDog/Sabrienix
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following
-# disclaimer in the documentation and/or other materials provided
-# with the distribution.
-# * Neither the name of MumbleDog/Sabrienix nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-######################################################################
-#
-# NOTE WELL: This is just an example. It has no error checking, left
-# out both because of my own laziness and to keep the example simple.
-# Steal the implementation and put it in your own script, or just use
-# as-is under the full understanding it might end the world as you
-# know it.
-
-# "AFK" channel ID
-$afk = 4;
-
-# Time in seconds user must be AFK to be moved
-$idle = 5000;
-
-# Ice Server
-$ice = 'Meta:tcp -h 127.0.0.1 -p 6502';
-
-# Murmur ID #
-$mid = 0;
-
-######################################################################
-
-if (!extension_loaded('ice')) {
- exit('Error: This example script needs the PHP extension for Ice to be loaded.');
-}
-if ((!function_exists('Ice_intVersion') || Ice_intVersion() < 30400) || !function_exists('Ice_loadProfile')) {
- exit('Error: This example script is compatible only for php-ice versions prior to 3.4.');
-}
-
-Ice_loadProfile();
-$base = $ICE->stringToProxy($ice);
-$murmur = $base->ice_checkedCast('::Murmur::Meta');
-
-$m = $murmur->getServer($mid);
-
-$users = $m->getUsers();
-
-foreach ($users as $u) {
- printf("%s: %s\n", $u->name, $u->idlesecs);
- if ($u->idlesecs > $idle && $u->channel != $afk) {
- $state = $m->getState($u->session);
- if ($state) {
- $state->channel = $afk;
- $m->setState($state);
- }
- }
-}
-?> \ No newline at end of file
diff --git a/scripts/server/ice/mumble-auth.py b/scripts/server/ice/mumble-auth.py
deleted file mode 100755
index a7d2b48f6..000000000
--- a/scripts/server/ice/mumble-auth.py
+++ /dev/null
@@ -1,280 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# -*- coding: utf-8
-#
-# mumble-auth.py - Sample script to show the basics of using server controlled
-# context menu entries for in-client registration tickets.
-#
-# Requirements:
-# * python 2.5 or higher
-# * cherrypy 3 or higher
-# * python ice bindings
-# * murmur + mumble rev 1530 or higher
-
-import cherrypy
-import Ice
-from threading import Semaphore
-import random, time
-
-#
-#--- Config stuff
-#
-baseurl = "http://localhost:8080/register?id=" # Baseurl for registrations
-storage_time = 10*24*60*60 # Time in seconds a reg entry is guaranteed to be valid
-proxy = "Meta:tcp -h 127.0.0.1 -p 6502"
-group = "admin" # ACL group which has the right to send regurls
-host = "0.0.0.0" # Interface to listen on
-port = 8080 # Cherrypy port
-slice = "Murmur.ice"
-production = False # Set this to true to surpress tracebacks
-
-# Runtime generate bindings
-Ice.loadSlice(slice)
-import Murmur
-
-# Global vars
-sema_ids = Semaphore()
-ids = {} #Contains list(sid, user, time)
-
-
-class MetaCallbackI(Murmur.MetaCallback):
- def started(self, s, current=None):
- serverR = Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, current.adapter)))
- s.addCallback(serverR)
- def stopped(self, s, current=None): pass # Unused callback
-
-class ServerCallbackI(Murmur.ServerCallback):
- def __init__(self, server, adapter):
- self.server = server
- self.contextR=Murmur.ServerContextCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerContextCallbackI(server)))
-
- def userConnected(self, p, current=None):
- if p.userid != 0: # SuperUser is always allowed
- # Check if the user is in the right acl class and add the context menu
- allowed = False
- for acl in self.server.getACL(0)[1]:
- if acl.name == group and p.userid in acl.members:
- allowed = True
- break
- if not allowed:
- return
-
- self.server.addContextCallback(p.session,
- "sendregurl",
- "Send registration URL",
- self.contextR, Murmur.ContextUser)
-
- def userDisconnected(self, p, current=None): pass # Unused callbacks
- def userStateChanged(self, p, current=None): pass
- def channelCreated(self, c, current=None): pass
- def channelRemoved(self, c, current=None): pass
- def channelStateChanged(self, c, current=None): pass
-
-class ServerContextCallbackI(Murmur.ServerContextCallback):
- #--- Server message template strings
- err_notallowed = "You are not allowed to send registration urls"
- msg_regurl = "You've been allowed to register with this mumble server, " \
- "please <a href='%(url)s'>click here to register</a>."
-
-
- def __init__(self, server):
- self.server = server
-
- def contextAction(self, action, p, session, chanid, current=None):
- if action == "sendregurl" and p:
- if p.userid != 0:
- # If it isn't SuperUser check if he is in the right acl group
- allowed = False
- for acl in self.server.getACL(0)[1]:
- if acl.name == group and p.userid in acl.members:
- allowed = True
- break
- if not allowed:
- self.server.sendMessage(p, self.err_notallowed)
- return
-
- sema_ids.acquire()
- try:
- # Take the chance to cleanup old entries
- todel = []
- for key, reg in ids.iteritems():
- if int(time.time()) - reg[2] > storage_time:
- todel.append(key)
- for key in todel:
- del ids[key]
-
- # Ok, now generate his registration id (64bit)
- rid = None
- while not rid or rid in ids:
- rid = random.randrange(0, pow(2,64))
- sid = self.server.id()
-
- # Remember his username
- try:
- username = self.server.getState(session).name
- except Murmur.InvalidSessionException:
- username = ""
-
- # Save everything
- ids[str(rid)] = (sid, username, int(time.time()))
- # Send reg url to the user
- url = baseurl + str(rid)
- self.server.sendMessage(session,
- self.msg_regurl % {'url':url})
- finally:
- sema_ids.release()
-
-
-
-class mumble_auth(object):
- #--- Web template strings
- template = """<?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
- <head>
- <title>%(title)s</title>
- <style type="text/css">
- label { display:block; font-size:smaller; }
- fieldset { border:1px solid; width:250px; }
- h1 { border-bottom:2px solid; }
- h2 { border-bottom:2px solid red; color:red; }
- </style>
- </head>
- <body>
- <h1>%(title)s</h1>
- %(body)s
- </body>
- </html>"""
-
- err_id = """<h2>Invalid ID</h2><p>
- The ID for your registration has already been used or is invalid.<br />
- Please request a new registration link from a Mumble administrator.<br /></p>"""
-
- err_username = """<h2>Invalid username</h2><p>
- The username you chose contains characters which are not allowed.<br/>
- Please only use normal characters without whitespaces.<br /></p>"""
-
- err_username_existing = """<h2>Username already registered</h2><p>
- The username you chose is already registered on this server.<br />
- Please choose another one.<br /></p>"""
-
- err_password = """<h2>Invalid password</h2><p>
- The password you chose didn't match the criteria enforced by this server.<br/>
- Your password should be at least 6 characters long.<br /></p>"""
-
- err_password_mismatch = """<h2>Passwords do not match</h2><p>
- The password you entered did not match the one in the confirmation box.<br/>
- Make sure both boxes contain the same password.<br /></p>"""
-
- snippet_retry = '<br/><a href="%(url)s">Click here to try again</a>'
-
- body_index = """<p>This is the mumble-auth script, to be able to register yourself
- an account please ask a admin on the mumble server.</p>"""
-
- body_complete = """<h2>Success</h2><p>
- You have been registered with the server successfully,<br />
- please try to login to the server with your new login credentials!</p>"""
-
- body_regform = """
- <form action="doregister" method="post">
- <fieldset>
- <legend>Enter user information</legend>
- <label for="username">Username</label>
- <input id="username" type="text" name="username" value="%(username)s"
- size="20" maxlength="40" /><br />
- <label for="password">Password</label>
- <input id="password" type="password" name="password" value=""
- size="20" maxlength="40" /><br />
- <label for="cpassword">Confirm password</label>
- <input id="cpassword" type="password" name="cpassword" value=""
- size="20" maxlength="40" /><br />
- <input type="hidden" name="id" value="%(id)s" />
- <input id="register" type="submit" value="Register" />
- </fieldset>
- </form>"""
-
- def __init__(self, murmur):
- self.murmur = murmur
-
- def index(self):
- title = "Mumble Auth - Index"
- return self.template % {'title':title,
- 'body':self.body_index}
- index.exposed = True
-
- def register(self, id = None):
- title = "Mumble Auth - Register";
- if not id in ids:
- body = self.err_id # Invalid ID
- else:
- # In case of a valid ID
- body = self.body_regform % {'username':ids[id][1],
- 'id':id}
-
- return self.template % {'title':title,
- 'body':body}
- register.exposed = True
-
- def doregister(self, id = None, username = None, password = None, cpassword = None):
- title = "Mumble Auth - Register";
- sema_ids.acquire()
- try:
- # Check if all parameters are ok
- if not id in ids:
- body = self.err_id # Invalid id
- elif not username or " " in username: # Invalid username
- body = self.err_username + \
- self.snippet_retry % {'url':baseurl+id}
- elif len(password) < 6: # Password criteria didn't match
- body = self.err_password + \
- self.snippet_retry % {'url':baseurl+id}
- elif password != cpassword: # Password mismatch
- body = self.err_password_mismatch + \
- self.snippet_retry % {'url':baseurl+id}
- else:
- # Ok, try to register him
- server = self.murmur.getServer(ids[id][0])
- if (len(server.getRegisteredUsers(username))!=0):
- body = self.err_username_existing + \
- self.snippet_retry % {'url':baseurl+id}
- else:
- # Register user
- info = {Murmur.UserInfo.UserName:username,
- Murmur.UserInfo.UserPassword:password}
- server.registerUser(info)
- # Void registration id
- del ids[id]
- # Success
- body = self.body_complete
- finally:
- sema_ids.release()
- return self.template % {'title':title,
- 'body':body}
- doregister.exposed = True
-
-if __name__ == "__main__":
- random.seed()
- ice = Ice.initialize()
- try:
- meta = Murmur.MetaPrx.checkedCast(ice.stringToProxy(proxy))
- adapter = ice.createObjectAdapterWithEndpoints("Callback.Client", "tcp -h 127.0.0.1")
- metaR=Murmur.MetaCallbackPrx.uncheckedCast(adapter.addWithUUID(MetaCallbackI()))
- adapter.activate()
-
- meta.addCallback(metaR)
- for server in meta.getBootedServers():
- serverR=Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, adapter)))
- server.addCallback(serverR)
-
- if production: cherrypy.config.update({'environment': 'production'})
- cherrypy.server.socket_host = host
- cherrypy.server.socket_port = port
- cherrypy.quickstart(mumble_auth(meta))
- finally:
- ice.shutdown()
- ice.waitForShutdown()
diff --git a/scripts/server/ice/rubytest.rb b/scripts/server/ice/rubytest.rb
deleted file mode 100755
index 3aca8a97d..000000000
--- a/scripts/server/ice/rubytest.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env ruby
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-
-# Download Murmur.ice from
-# http://mumble.git.sourceforge.net/git/gitweb.cgi?p=mumble;a=blob_plain;f=src/murmur/Murmur.ice;hb=HEAD
-# and run 'slice2rb Murmur.ice'. slice2rb is part of ICE.
-# This will generate the necessary 'Murmur.rb' file which needs to be included:
-
-require 'Murmur.rb'
-
-status = 0
-ic = nil
-begin
- ic = Ice::initialize(ARGV)
- base = ic.stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502")
- meta = Murmur::MetaPrx::checkedCast(base)
-
- unless meta
- rais "invalid proxy"
- end
-
- # All commands are documented here:
- # http://mumble.sourceforge.net/slice/?title=slice
-
- servers = meta.getBootedServers
- puts "Server version:", meta.getVersion[3]
-
- servers.each do |server|
- puts ""
- puts "Server name:"+server.getConf('registername')
-
- channels = server.getChannels
- players = server.getPlayers
-
- players.each do |id,player|
- channel = channels[player.channel]
- puts player.name+" in "+channel.name
- end
-
- end
-
-rescue
- puts $!
- puts $!.backtrace.join("\n")
- status = 1
-end
-
-if ic
- # Clean up
- begin
- ic.destroy()
- rescue
- puts $!
- puts $!.backtrace.join("\n")
- status = 1
- end
-end
-
-exit(status)
diff --git a/scripts/server/ice/simpleregister.php b/scripts/server/ice/simpleregister.php
deleted file mode 100644
index 701478cfb..000000000
--- a/scripts/server/ice/simpleregister.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-// Really simple script to add users to your mumble server.
-// Make sure to select the server this script should be used for first:
-$serverId = 1;
-
-// Requires a correctly set up PHP-ICE Module and mumble server running with ICE.
-// For instructions see http://wiki.mumble.info/wiki/Ice
-
-// Credits
-// This script was created by Kissaki
-
-// This is as simple as it can get. You really SHOULD NOT make the URL to this script all-public as it may be abused/spammed.
-
-
-if (!extension_loaded('ice')) {
- exit('Error: This example script needs the PHP extension for Ice to be loaded.');
-}
-if ((!function_exists('Ice_intVersion') || Ice_intVersion() < 30400) || !function_exists('Ice_loadProfile')) {
- exit('Error: This example script is compatible only for php-ice versions prior to 3.4.');
-}
-
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-</head>
-<body>
-<?php
-
-Ice_loadProfile();
-
-if( isset($_GET['uname']) && $_GET['password'] && $_GET['email'] && $_GET['uname']!='' && $_GET['password']!='' )
-{
-
- try {
- $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502");
- $meta = $base->ice_checkedCast("::Murmur::Meta");
-
- $server = $meta->getServer($serverId);
-
- if(empty($server)){
- echo 'Server could not be found.';
- }else{
- $registrationId = $server->registerPlayer($_GET['uname']);
-
- $registration = $server->getRegistration(intval($registrationId));
- $registration->pw = $_GET['password'];
- $registration->email = $_GET['email'];
- $server->updateregistration($registration);
- }
-
- }catch(InvalidPlayerException $ex){
- echo 'InvalidPlayerException';
- }catch(ServerBootedException $ex){
- echo 'Server is not running';
- }catch(Ice_UnknownLocalException $exc){
- echo 'Ice could probably not be found';
- }catch (Ice_Exception $ex){
- echo "<p>\n<pre>\n";
- print_r($ex);
- echo "</pre>\n</p>\n";
- }
-}
-
-?>
- <form action="" method="get">
- <table>
- <tr><td>Username</td><td><input name="uname" type="text" value=""/></td></tr>
- <tr><td>Password</td><td><input name="password" type="password" value=""/></td>
- <tr><td>eMail</td><td><input name="email" type="text" value=""/></td></tr>
- </table>
- <input type="submit"/>
- </form>
-</body>
-</html>
diff --git a/scripts/server/ice/testauth.py b/scripts/server/ice/testauth.py
deleted file mode 100755
index abf44fb41..000000000
--- a/scripts/server/ice/testauth.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# -*- coding: utf-8
-import Ice, sys, time
-from M2Crypto import X509;
-Ice.loadSlice('', ['-I' + Ice.getSliceDir(), 'Murmur.ice'])
-import Murmur
-
-class ServerAuthenticatorI(Murmur.ServerUpdatingAuthenticator):
- def __init__(self, server, adapter):
- self.server = server
-
- def authenticate(self, name, pw, certlist, certhash, strong, current=None):
- print certhash, strong
- for cert in certlist:
- cert = X509.load_cert_der_string(cert)
- print cert.get_subject(), "issued by", cert.get_issuer()
- groups = ("GroupA", "GroupB");
- if (name == "One"):
- if (pw == "Magic"):
- return (1, "One", groups)
- else:
- return (-1, None, None)
- elif (name == "Two"):
- if (pw == "Mushroom"):
- return (2, "twO", groups)
- else:
- return (-1, None, None)
- elif (name == "White Space"):
- if (pw == "Space White"):
- return (3, "White Space", groups)
- else:
- return (-1, None, None)
- elif (name == "Fail"):
- time.sleep(6)
- return (-2, None, None)
-
- def getInfo(self, id, current=None):
- print "getInfo ", id
- name = self.idToName(id);
- if (name == None):
- return (False, {})
- map = {}
- map[Murmur.UserInfo.UserName]=name
- return (True, map)
-
- def nameToId(self, name, current=None):
- if (name == "One"):
- return 1
- elif (name == "Twoer"):
- return 2
- else:
- return -2;
-
- def idToName(self, id, current=None):
- if (id == 1):
- return "One"
- elif (id == 2):
- return "Two"
- else:
- return None
-
- def idToTexture(self, id, current=None):
- print "idToTexture", id
- return open("../icons/mumble.osx.png").read();
-
- # The expanded methods from UpdatingAuthenticator. We only implement a subset for this example, but
- # a valid implementation has to define all of them
- def registerUser(self, name, current=None):
- print "Someone tried to register " + name[Murmur.UserInfo.UserName]
- return -2
-
- def unregisterUser(self, id, current=None):
- print "Unregister ", id
- return -2
-
- def getRegistration(self, id, current=None):
- return (-2, None, None)
-
- def setInfo(self, id, info, current=None):
- print "Set", id, info
- return -1
-
-if __name__ == "__main__":
- global contextR
-
- print "Creating callbacks...",
- ice = Ice.initialize(sys.argv)
-
- meta = Murmur.MetaPrx.checkedCast(ice.stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502'))
-
- adapter = ice.createObjectAdapterWithEndpoints("Callback.Client", "tcp -h 127.0.0.1")
- adapter.activate()
-
- for server in meta.getBootedServers():
- serverR=Murmur.ServerUpdatingAuthenticatorPrx.uncheckedCast(adapter.addWithUUID(ServerAuthenticatorI(server, adapter)))
- server.setAuthenticator(serverR)
-
- print "Done"
-
- map = {};
- map[Murmur.UserInfo.UserName] = 'TestUser';
-
- for server in meta.getBootedServers():
- ids= server.getUserIds(["TestUser"])
- for name,id in ids.iteritems():
- if (id > 0):
- print "Will unregister ", id
- server.unregisterUser(id)
- server.registerUser(map)
-
- print 'Script running (press CTRL-C to abort)';
- try:
- ice.waitForShutdown()
- except KeyboardInterrupt:
- print 'CTRL-C caught, aborting'
-
- meta.removeCallback(metaR)
- ice.shutdown()
- print "Goodbye"
diff --git a/scripts/server/ice/testcallback.py b/scripts/server/ice/testcallback.py
deleted file mode 100755
index 4af0f1420..000000000
--- a/scripts/server/ice/testcallback.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# -*- coding: utf-8
-import Ice, sys, sha
-from M2Crypto import X509;
-
-Ice.loadSlice('', ['-I' + Ice.getSliceDir(), 'Murmur.ice'])
-import Murmur
-
-class MetaCallbackI(Murmur.MetaCallback):
- def started(self, s, current=None):
- print "started"
- serverR=Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, current.adapter)))
- s.addCallback(serverR)
-
- def stopped(self, s, current=None):
- print "stopped"
-
-class ServerCallbackI(Murmur.ServerCallback):
- def __init__(self, server, adapter):
- self.server = server
- self.contextR=Murmur.ServerContextCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerContextCallbackI(server)))
-
- def userConnected(self, p, current=None):
- print "connected"
- print p
- self.server.addContextCallback(p.session, "flubber", "Power up the T", self.contextR, Murmur.ContextChannel | Murmur.ContextUser)
- if (self.server.hasPermission(p.session, 0, Murmur.PermissionWrite)):
- print "Is a global admin"
- certlist=self.server.getCertificateList(p.session)
- for cert in certlist:
- hash = sha.new()
- hash.update(cert)
- cert = X509.load_cert_der_string(cert)
- print cert.get_subject(), "issued by", cert.get_issuer(), "hash", hash.hexdigest()
- if current:
- print current.ctx
-
- def userDisconnected(self, p, current=None):
- print "disconnected"
- print p
-
- def userStateChanged(self, p, current=None):
- print "stateChanged"
- print self.server
- print p
-
- def userTextMessage(self, p, msg, current=None):
- print "userTextMessage"
- print self.server
- print p
- print msg
-
- def channelCreated(self, c, current=None):
- print "created"
- print c
-
- def channelRemoved(self, c, current=None):
- print "removed"
- print c
-
- def channelStateChanged(self, c, current=None):
- print "stateChanged"
- print c
-
-class ServerContextCallbackI(Murmur.ServerContextCallback):
- def __init__(self, server):
- self.server = server
-
- def contextAction(self, action, p, session, chanid, current=None):
- print "aaand ACTION"
- print action
- print p
- print session
- print chanid
- if (session != 0):
- server.sendMessage(session, "Bouncy")
- elif (chanid >= 0):
- server.sendMessageChannel(chanid, 0, "Channel Bouncy")
-
-if __name__ == "__main__":
- global contextR
-
- prop = Ice.createProperties(sys.argv)
- prop.setProperty("Ice.ImplicitContext", "Shared")
-
- idd = Ice.InitializationData()
- idd.properties = prop
-
- ice = Ice.initialize(idd)
-
- print "Creating callbacks...",
-
- # If icesecret is set, we need to set it here as well.
- ice.getImplicitContext().put("secret", "fourtytwo")
-
- meta = Murmur.MetaPrx.checkedCast(ice.stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502'))
- adapter = ice.createObjectAdapterWithEndpoints("Callback.Client", "tcp -h 127.0.0.1")
-
- metaR=Murmur.MetaCallbackPrx.uncheckedCast(adapter.addWithUUID(MetaCallbackI()))
- adapter.activate()
-
- meta.addCallback(metaR)
-
- for server in meta.getBootedServers():
- serverR=Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, adapter)))
- server.addCallback(serverR)
-
- print "Done"
- print 'Script running (press CTRL-C to abort)';
- try:
- ice.waitForShutdown()
- except KeyboardInterrupt:
- print 'CTRL-C caught, aborting'
-
- meta.removeCallback(metaR)
- ice.shutdown()
- print "Goodbye"
diff --git a/scripts/server/ice/testdynamic.py b/scripts/server/ice/testdynamic.py
deleted file mode 100755
index 09b77d9b9..000000000
--- a/scripts/server/ice/testdynamic.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# -*- coding: utf-8
-import Ice, IcePy, sys, tempfile, os
-
-ice = Ice.initialize(sys.argv)
-
-proxy = ice.stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502')
-
-try:
- slice = IcePy.Operation('getSlice', Ice.OperationMode.Idempotent, Ice.OperationMode.Idempotent, True, (), (), (), IcePy._t_string, ()).invoke(proxy, ((), None))
-
- (slicefiledesc, slicefilepath) = tempfile.mkstemp(suffix = '.ice')
- slicefile = os.fdopen(slicefiledesc, 'w')
- slicefile.write(slice)
- slicefile.flush()
- Ice.loadSlice('', ['-I' + Ice.getSliceDir(), slicefilepath])
- slicefile.close()
- os.remove(slicefilepath)
-
- print 'Using dynamic slice'
-except Exception:
- Ice.loadSlice('', ['-I' + Ice.getSliceDir(), 'Murmur.ice'])
- print 'Using bundled slice'
-
-import Murmur
-
-meta = Murmur.MetaPrx.checkedCast(proxy)
-
-print meta.getVersion()
diff --git a/scripts/server/ice/weblist.php b/scripts/server/ice/weblist.php
deleted file mode 100644
index 3f7f5cbdd..000000000
--- a/scripts/server/ice/weblist.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<html>
-<head>
-<title>Userlist</title>
-</head>
-<body>
-<?php
-
-#
-# Murmur.php is generated by calling
-# slice2php /path/to/Murmur.ice
-# in this directory
-#
-
-if (Ice_intversion() >= 30400) {
- if (!stream_resolve_include_path('Ice.php')) {
- exit('The required file Ice.php could not be found in the PHP include path(s).');
- }
- if (!stream_resolve_include_path('Murmur.php')) {
- exit('The required file Murmur.php could not be found in the PHP include path(s).');
- }
- require 'Ice.php';
- require 'Murmur.php';
-} else {
- Ice_loadProfile();
-}
-
-try {
- if (Ice_intversion() >= 30400) {
- $ICE = Ice_initialize();
- }
-
- $base = $ICE->stringToProxy("Meta:tcp -h 127.0.0.1 -p 6502");
- $meta = $base->ice_checkedCast("::Murmur::Meta");
-
- $servers = $meta->getBootedServers();
- $default = $meta->getDefaultConf();
- foreach($servers as $s) {
- $name = $s->getConf("registername");
- if (! $name) {
- $name = $default["registername"];
- }
- echo "<h1>SERVER #" . $s->id() . " " .$name ."</h1>\n";
- echo "<table><tr><th>Name</th><th>Channel</th></tr>\n";
-
- $channels = $s->getChannels();
- $players = $s->getUsers();
-
- foreach($players as $id => $state) {
- $chan = $channels[$state->channel];
- echo "<tr><td>".$state->name."</td><td>".$chan->name."</td></tr>\n";
- }
- echo "</table>\n";
- }
-} catch (Ice_LocalException $ex) {
- print_r($ex);
-}
-
-?>
-</body>
-</html>
diff --git a/scripts/sign_macOS.py b/scripts/sign_macOS.py
index 406092ebe..406092ebe 100644..100755
--- a/scripts/sign_macOS.py
+++ b/scripts/sign_macOS.py
diff --git a/scripts/transtate.py b/scripts/transtate.py
deleted file mode 100755
index 3ae849e1c..000000000
--- a/scripts/transtate.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2012-2022 The Mumble Developers. All rights reserved.
-# Use of this source code is governed by a BSD-style license
-# that can be found in the LICENSE file at the root of the
-# Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-# Extracts the progress of translations from the compilation
-# log in easily readable form. Make sure to delete all .qm
-# files beforehand.
-#
-# Usage: cat log | .\transtate.py
-
-import sys
-import re
-
-def n(val):
- return (int(val) if val else 0)
-
-if __name__ == "__main__":
-
- #--Regex matches strings like
- #
- #Updating 'mumble_zh_CN.qm'...
- # Generated 1421 translation(s) (1145 finished and 276 unfinished)
- # Ignored 89 untranslated source text(s)
- # s:\dev\QtMumble\bin\lrelease.exe mumble_zh_TW.ts
- #Updating 'mumble_zh_TW.qm'...
- # Generated 664 translation(s) (594 finished and 70 unfinished)
- # Ignored 846 untranslated source text(s)
-
- update = re.compile(r"Updating '([\w\.]+)'\.\.\.\s+Generated (\d+) translation\(s\) \((\d+) finished and (\d+) unfinished\)(?:\s+ Ignored (\d+) untranslated source text\(s\))?")
-
- langs = 0
- s = 's'
-
- sortedbyuntranslated = sorted(update.findall(sys.stdin.read()), key=lambda s: (float(s[2]) / (n(s[1]) + n(s[4]))) if n(s[1]) else 10, reverse=True)
-
- for lang, total, finished, unfinished, ignored in sortedbyuntranslated:
- print "%s:" % lang
-
- if int(total) == 0:
- print " Source language"
- else:
- realtotal = n(total) + n(ignored)
- percent = float(finished) / realtotal * 100
-
- print " %d marked unfinished" % (n(unfinished))
-
- if n(ignored):
- print " %d untranslated." % (n(ignored))
-
- print " => %d%% done (total %d + %d)." % (percent, n(total), n(ignored))
- print
- langs += 1
-
- print "Number of languages: %d" % langs
-
-
-
- \ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 36a042a25..e73133483 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -21,6 +21,7 @@ option(tracy "Enable the tracy profiler." OFF)
option(bundled-gsl "Use the bundled GSL version instead of looking for one on the system" ON)
+
find_pkg(Qt5
COMPONENTS
Core
@@ -98,11 +99,9 @@ set(SHARED_HEADERS
"ByteSwap.h"
"EnvUtils.h"
"FFDHE.h"
- "FFDHETable.h"
"HostAddress.h"
"HTMLFilter.h"
"License.h"
- "licenses.h"
"LogEmitter.h"
"MumbleProtocol.h"
"Net.h"
@@ -130,6 +129,26 @@ set(SHARED_HEADERS
"${3RDPARTY_DIR}/arc4random/arc4random_uniform.h"
)
+add_custom_command(
+ OUTPUT "FFDHETable.h"
+ COMMAND ${PYTHON_INTERPRETER}
+ ARGS ${CMAKE_SOURCE_DIR}/scripts/generate-ffdhe.py --output FFDHETable.h
+ COMMENT "Generating FFDHETable.h"
+)
+list(APPEND SHARED_HEADERS "FFDHETable.h")
+
+add_custom_command(
+ OUTPUT "licenses.h"
+ COMMAND ${PYTHON_INTERPRETER}
+ ARGS "${CMAKE_SOURCE_DIR}/scripts/generate_license_header.py" --output "licenses.h"
+ COMMENT "Generating licenses.h"
+)
+add_custom_target(generate_license_header
+ DEPENDS "licenses.h"
+)
+add_dependencies(shared generate_license_header)
+target_include_directories(shared PRIVATE "${CMAKE_BINARY_DIR}")
+
target_sources(shared
PRIVATE
${SHARED_HEADERS}
@@ -186,7 +205,7 @@ set(TRACY_ON_DEMAND ON CACHE BOOL "" FORCE)
# (can cause issues for packagers as that dependency is retained even though Tracy is disabled)
set(PREV_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
-add_subdirectory("${3RDPARTY_DIR}/tracy" "tracy")
+add_subdirectory("${3RDPARTY_DIR}/tracy" "tracy" EXCLUDE_FROM_ALL)
disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/tracy")
message(STATUS "Tracy: ${TRACY_ENABLE}")
@@ -197,7 +216,7 @@ target_link_libraries(shared PUBLIC Tracy::TracyClient)
# Add the GSL
if(bundled-gsl)
- add_subdirectory("${3RDPARTY_DIR}/gsl" "${CMAKE_CURRENT_BINARY_DIR}/gsl")
+ add_subdirectory("${3RDPARTY_DIR}/gsl" "${CMAKE_CURRENT_BINARY_DIR}/gsl" EXCLUDE_FROM_ALL)
target_link_libraries(shared PUBLIC GSL)
else()
@@ -225,11 +244,7 @@ endif()
if(client)
add_subdirectory(mumble)
- configure_file("${CMAKE_SOURCE_DIR}/scripts/info.mumble.Mumble.appdata.xml.in" "${CMAKE_BINARY_DIR}/info.mumble.Mumble.appdata.xml")
-
if(UNIX AND NOT APPLE)
- install(FILES "${CMAKE_BINARY_DIR}/info.mumble.Mumble.appdata.xml" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/metainfo")
- install(FILES "${CMAKE_SOURCE_DIR}/scripts/info.mumble.Mumble.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications")
install(FILES "${CMAKE_SOURCE_DIR}/icons/mumble.svg" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps")
install(FILES "${CMAKE_SOURCE_DIR}/icons/mumble_256x256.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps" RENAME "mumble.png")
endif()
diff --git a/src/FFDHETable.h b/src/FFDHETable.h
deleted file mode 100644
index b9b4a7c2d..000000000
--- a/src/FFDHETable.h
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright 2017-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-// Automatically generated by "generate-ffdhe.py". DO NOT EDIT BY HAND.
-
-static const char ffdhe2048_pem[] = "-----BEGIN DH PARAMETERS-----\n"
- "MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz\n"
- "+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a\n"
- "87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7\n"
- "YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi\n"
- "7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD\n"
- "ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg==\n"
- "-----END DH PARAMETERS-----\n";
-
-static const char ffdhe3072_pem[] = "-----BEGIN DH PARAMETERS-----\n"
- "MIIBiAKCAYEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz\n"
- "+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a\n"
- "87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7\n"
- "YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi\n"
- "7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD\n"
- "ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3\n"
- "7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32\n"
- "nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZsYu\n"
- "N///////////AgEC\n"
- "-----END DH PARAMETERS-----\n";
-
-static const char ffdhe4096_pem[] = "-----BEGIN DH PARAMETERS-----\n"
- "MIICCAKCAgEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz\n"
- "+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a\n"
- "87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7\n"
- "YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi\n"
- "7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD\n"
- "ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3\n"
- "7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32\n"
- "nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZp4e\n"
- "8W5vUsMWTfT7eTDp5OWIV7asfV9C1p9tGHdjzx1VA0AEh/VbpX4xzHpxNciG77Qx\n"
- "iu1qHgEtnmgyqQdgCpGBMMRtx3j5ca0AOAkpmaMzy4t6Gh25PXFAADwqTs6p+Y0K\n"
- "zAqCkc3OyX3Pjsm1Wn+IpGtNtahR9EGC4caKAH5eZV9q//////////8CAQI=\n"
- "-----END DH PARAMETERS-----\n";
-
-static const char ffdhe6144_pem[] = "-----BEGIN DH PARAMETERS-----\n"
- "MIIDCAKCAwEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz\n"
- "+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a\n"
- "87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7\n"
- "YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi\n"
- "7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD\n"
- "ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3\n"
- "7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32\n"
- "nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZp4e\n"
- "8W5vUsMWTfT7eTDp5OWIV7asfV9C1p9tGHdjzx1VA0AEh/VbpX4xzHpxNciG77Qx\n"
- "iu1qHgEtnmgyqQdgCpGBMMRtx3j5ca0AOAkpmaMzy4t6Gh25PXFAADwqTs6p+Y0K\n"
- "zAqCkc3OyX3Pjsm1Wn+IpGtNtahR9EGC4caKAH5eDdkCC/1ktkUDbHpOZ30sOFMq\n"
- "OiO6RELK9T6mO7RUMpt2JMiRe91kscD9TLOOjDNMcBw6za0GV/zP7HGbH1w+TkYE\n"
- "HziBR/tM/bR3pSRx96mpaRC4VTIu22NA2KAO8JI1BRHjCr7B//njom5/sp+MGDAj\n"
- "w1h+ONoAd9m0dj5OS5Syu8GUxmUed8r5ku6qwCMqKBv2s6c5wSJhFoIK6NtYR6Z8\n"
- "vvnJCRtGLVOM1ysDdGrnf15iKSwxFWKoRlBdyC24VDOK5J9SNclbkReMzy3Vys70\n"
- "A+ydGBDGJysEWztx+dxrgNY/3UqOmtseaWKmlSbUMWHBpB1XDXk42tSkDjKc0OQO\n"
- "Zf//////////AgEC\n"
- "-----END DH PARAMETERS-----\n";
-
-static const char ffdhe8192_pem[] = "-----BEGIN DH PARAMETERS-----\n"
- "MIIECAKCBAEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz\n"
- "+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a\n"
- "87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7\n"
- "YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi\n"
- "7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD\n"
- "ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3\n"
- "7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32\n"
- "nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZp4e\n"
- "8W5vUsMWTfT7eTDp5OWIV7asfV9C1p9tGHdjzx1VA0AEh/VbpX4xzHpxNciG77Qx\n"
- "iu1qHgEtnmgyqQdgCpGBMMRtx3j5ca0AOAkpmaMzy4t6Gh25PXFAADwqTs6p+Y0K\n"
- "zAqCkc3OyX3Pjsm1Wn+IpGtNtahR9EGC4caKAH5eDdkCC/1ktkUDbHpOZ30sOFMq\n"
- "OiO6RELK9T6mO7RUMpt2JMiRe91kscD9TLOOjDNMcBw6za0GV/zP7HGbH1w+TkYE\n"
- "HziBR/tM/bR3pSRx96mpaRC4VTIu22NA2KAO8JI1BRHjCr7B//njom5/sp+MGDAj\n"
- "w1h+ONoAd9m0dj5OS5Syu8GUxmUed8r5ku6qwCMqKBv2s6c5wSJhFoIK6NtYR6Z8\n"
- "vvnJCRtGLVOM1ysDdGrnf15iKSwxFWKoRlBdyC24VDOK5J9SNclbkReMzy3Vys70\n"
- "A+ydGBDGJysEWztx+dxrgNY/3UqOmtseaWKmlSbUMWHBpB1XDXk42tSkDjKcz/Rq\n"
- "qjatAEz2AMg4HkJaMdlRrmT9sj/OyVCdQ2h/62nt0cxeC4zDvfZLEO+GtjFCo6uI\n"
- "KVVbL3R8kyZlyywPHMAb1wIpOIg50q8F5FRQSseLdYKCKEbAujXDX1xZFgzARv2C\n"
- "UVQfxoychrAiu3CZh2pGDnRRqKkxCXA/7hwhfmw4JuUsUappHg5CPPyZ6eMWUMEh\n"
- "e2JIFs2tmpX51bgBlIjZwKCh/jB1pXfiMYP4HUo/L6RXHvyM4LqKT+i2hV3+crCm\n"
- "bt7S+6v75Yow+vq+HF1xqH4vdB74wf6G/qa7/eUwZ38Nl9EdSfeoRD0IIuUGqfRh\n"
- "TgEeKpSDj/iM1oyLt8XGQkz//////////wIBAg==\n"
- "-----END DH PARAMETERS-----\n";
diff --git a/src/License.cpp b/src/License.cpp
index dee2c7635..39f32b69f 100644
--- a/src/License.cpp
+++ b/src/License.cpp
@@ -11,10 +11,6 @@ QString License::license() {
return QString::fromUtf8(licenseMumble);
}
-QString License::authors() {
- return QString::fromUtf8(authorsMumble);
-}
-
QList< LicenseInfo > License::thirdPartyLicenses() {
QList< LicenseInfo > licenses;
for (int i = 0; !licenses3rdParties[i].isEmpty(); i++) {
diff --git a/src/License.h b/src/License.h
index d20ea64b8..56aa6be03 100644
--- a/src/License.h
+++ b/src/License.h
@@ -26,8 +26,6 @@ class License {
public:
/// Get the Mumble license text (the LICENSE file)
static QString license();
- /// Get the Mumble authors list (the AUTHORS file)
- static QString authors();
/// Get a list of license information for Mumble's
/// third-party libraries.
static QList< LicenseInfo > thirdPartyLicenses();
diff --git a/src/licenses.h b/src/licenses.h
deleted file mode 100644
index 27f95f846..000000000
--- a/src/licenses.h
+++ /dev/null
@@ -1,5883 +0,0 @@
-// Copyright 2016-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-/*
- * This file was auto-generated by scripts/mklic.pl
- * DO NOT EDIT IT MANUALLY
- */
-#ifndef MUMBLE_LICENSES_H_
-#define MUMBLE_LICENSES_H_
-
-#include <QtGlobal>
-
-struct ThirdPartyLicense {
- const char *name;
- const char *url;
- const char *license;
-
- ThirdPartyLicense() : name(0), url(0), license(0) {}
- ThirdPartyLicense(const char *name_, const char *url_, const char *license_)
- : name(name_), url(url_), license(license_) {}
- bool isEmpty() const { return (name == 0 && url == 0 && license == 0); }
-};
-
-#define DOQUOTE(arg) #arg
-#define QUOTE(arg) DOQUOTE(arg)
-
-#ifdef MUMBLE_BUILD_YEAR
-# define COPYRIGHT_END QUOTE(MUMBLE_BUILD_YEAR)
-#else
-# define COPYRIGHT_END "now"
-#endif
-
-static const char *licenseMumble = "Copyright (C) 2005-" COPYRIGHT_END " The Mumble Developers\n"
- "\n"
- "A list of The Mumble Developers can be found in the\n"
- "AUTHORS file at the root of the Mumble source tree\n"
- "or at <https://www.mumble.info/AUTHORS>.\n"
- "\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright notice,\n"
- " this list of conditions and the following disclaimer.\n"
- "- Redistributions in binary form must reproduce the above copyright notice,\n"
- " this list of conditions and the following disclaimer in the documentation\n"
- " and/or other materials provided with the distribution.\n"
- "- Neither the name of The Mumble Developers nor the names of its\n"
- " contributors may be used to endorse or promote products derived from this\n"
- " software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "`AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "For questions and inquiries about Mumble's license,\n"
- "please contact <license@mumble.info>.";
-
-
-static const char *authorsMumble = "// This is the official list of people who have contributed\n"
- "// to, and/or hold the copyright to Mumble.\n"
- "//\n"
- "// The use of Mumble source code is governed by a BSD-style\n"
- "// license that can be found in the LICENSE file at the root\n"
- "// of the Mumble source tree or at <https://www.mumble.info/LICENSE>.\n"
- "//\n"
- "// Contributions made on behalf of another entity, such as a\n"
- "// company are indicated with the following suffix:\n"
- "//\n"
- "// John Doe <jd@mumble.info> (on behalf of $COMPANY)\n"
- "//\n"
- "// It is possible to mix individual contributions with company\n"
- "// contributions. For example, if a contributor, over time,\n"
- "// has contributed code copyrighted by the contributor, as well\n"
- "// as various companies:\n"
- "//\n"
- "// John Doe <jd@mumble.info> (individually, on behalf of\n"
- "// $COMPANY1, on behalf of\n"
- "// $COMPANY2, [...]).\n"
- "//\n"
- "// Mumble's code is developed in a Git repository. A log of\n"
- "// every contribution ever made to Mumble is available in the\n"
- "// Git repository. The Git repository can be queried to get\n"
- "// detailed authorship information for copyright and attribution\n"
- "// purposes for each file that makes up the software. A detailed\n"
- "// analysis of contributions made to Mumble is available via GitHub's\n"
- "// contribution statistics:\n"
- "//\n"
- "// <https://github.com/mumble-voip/mumble/graphs/contributors>\n"
- "\n"
- "Abex <mii7303@gmail.com>\n"
- "Alex Krishnan <akrishnan@twilio.com>\n"
- "Alex Maclean <monkeh@monkeh.net>\n"
- "Allan Nordhøy <epost@anotheragency.no>\n"
- "Álvaro Manuel Recio Pérez <naproxeno@users.sourceforge.net>\n"
- "Andreas Bibok <biboka@users.sourceforge.net>\n"
- "Andreas Messer <andi@bupfen.de>\n"
- "Andreas Sinz <andreas.sinz@aon.at>\n"
- "Andrew Johnson <ajohnson@draster.com>\n"
- "anonym <anonym@riseup.net>\n"
- "Anthony Alves <cvballa3g0@gmail.com>\n"
- "Antoine Bertin <diaoulael@users.sourceforge.net>\n"
- "Anton Romanov <theli.ua@gmail.com>\n"
- "Antonio Larrosa <larrosa@kde.org>\n"
- "Arie <allochtoon@zonnet.nl>\n"
- "Arne Fenske <arne_fenske@Yahoo.de>\n"
- "arrai <array.of.intellect@gmail.com>\n"
- "Arseniy Lartsev <ars3niy@users.sourceforge.net>\n"
- "Artem Vorotnikov <skybon@gmail.com>\n"
- "Arthur Moore <Arthur.Moore.git@cd-net.net>\n"
- "asmolero <alsamolero@gmail.com>\n"
- "Asura Lee <ashurta@gmail.com>\n"
- "B0nuse <mumble@mumble.ru>\n"
- "Balazs Nagy <julian7@users.sourceforge.net>\n"
- "Bartek \"stranded\" Sumowski <sumowski@gmail.com>\n"
- "Bas Wijnen <wijnen@debian.org>\n"
- "BAYSSE Laurent <lolo_32@users.sourceforge.net>\n"
- "bendem <online@bendem.be>\n"
- "Benjamin Jemlich <pcgod@users.sourceforge.net>\n"
- "Benjamin Neff <benjamin@coding4coffee.ch>\n"
- "Bernhard M. Wiedemann <bernhardout@lsmod.de>\n"
- "bogie <priivet@gmail.com>\n"
- "Bojan <bogie@b02.a01.ca>\n"
- "brooss <brooss.teambb@gmail.com>\n"
- "BuddyButterfly <buddy.butterfly@web.de>\n"
- "Cesare Tirabassi <cesare.tirabassi@gmail.com>\n"
- "Charles Ricketts <githlar@gmail.com>\n"
- "Chosi <chosi@choseh.de>\n"
- "Christian Krause <chkr@plauener.de>\n"
- "Christoph Hofmann <christoph.hofmann@vfc2.eu>\n"
- "Christopher Knadle <Chris.Knadle@coredump.us>\n"
- "concatime <https://github.com/concatime>\n"
- "Cristian Gattamelati <cristian.gattamelati@gmail.com>\n"
- "d-rez <dark.skeleton@gmail.com>\n"
- "Davide Beatrici <davidebeatrici@gmail.com>\n"
- "Davide Beatrici <https://github.com/davidebeatrici>\n"
- "davidebeatrici <davidebeatrici@gmail.com>\n"
- "dc6jgk <github.filter@gkware.com>\n"
- "dennisschagt <dennisschagt@gmail.com>\n"
- "derandi <derandi@users.sourceforge.net>\n"
- "Derrick Dymock <actown@gmail.com>\n"
- "DK <davidk@mail.org>\n"
- "DNW <dnw.ftw@gmail.com>\n"
- "doggone <rolf@metadata.be>\n"
- "DWM|G <gallaghermumble@gmail.com>\n"
- "EarlOfWenc <lorenz.schwittmann@gmail.com>\n"
- "Eli Tallman <eli.github@gmail.com>\n"
- "Entitaet <entitaet@users.sourceforge.net>\n"
- "Erik Bouvin Pedersen <erikbp@users.sourceforge.net>\n"
- "Evan Purkhiser <evanpurkhiser@gmail.com>\n"
- "Ferdinand Thiessen <rpm@fthiessen.de>\n"
- "Filip Hedman <hedman.filip@gmail.com>\n"
- "Finessi Manuel <fino.manu@gmail.com>\n"
- "Flumble <flumble@home.nl>\n"
- "Frank Engler <https://github.com/9x6>\n"
- "Frank Mueller <frmimue@gmail.com>\n"
- "Fredrik Nordin <freedick@ludd.ltu.se>\n"
- "Friedrich Uz-Valentin <uz_@users.sourceforge.net>\n"
- "Generator <american.jesus.pt@gmail.com>\n"
- "GoD-Tony <noreply@gmail.com>\n"
- "Harry Gabriel <h.gabriel@nodefab.de>\n"
- "haru_arc <arcenciel@users.sf.net>\n"
- "He Tal <hetao29@users.sourceforge.net>\n"
- "Hengqing Hu <esrms@users.sourceforge.net>\n"
- "Henry Fallon <hjf288@gmail.com>\n"
- "Iain Georgeson <debbugs@iain.georgeson.me.uk>\n"
- "Ilmar Kruis <seaeagle1@users.sourceforge.net>\n"
- "Imre Botos <zokny@users.sourceforge.net>\n"
- "Jacob Peddicord <jacob@peddicord.net>\n"
- "Jakob Dettner <jakobdettner@users.sourceforge.net>\n"
- "James Fraser <fwaggle@fwaggle.org>\n"
- "Jan Braun <janbraun@gmx.net>\n"
- "Jan Klass <kissaki@posteo.de>\n"
- "javitonino <javitonino@users.sourceforge.net>\n"
- "Jeff Rogers <jeff@flyzipline.com>\n"
- "Jérôme \"buggerone\" <buggerone@users.sourceforge.net>\n"
- "Jerome Vidal <jerhum@users.sourceforge.net>\n"
- "jgeboski <jgeboski@gmail.com>\n"
- "Joel Kees <joelkees@gmail.com>\n"
- "Joël Troch <joel.troch62@gmail.com>\n"
- "John Marion <john@lmsn.net>\n"
- "John P <johnhatestrash@gmail.com>\n"
- "Jonathan E. Hansen <zentriple@users.sourceforge.net>\n"
- "Jordan Cristiano <https://github.com/SizzlingCalamari>\n"
- "Jordan Klassen <jordan@klassen.me.uk>\n"
- "Joshua Kocinski <git@cl0secall.net>\n"
- "Julien Pardons <j.pardons@redline-hosting.eu>\n"
- "Justin M <justin.m.mcgrath@gmail.com>\n"
- "Justin McGrath <justin.m.mcgrath@gmail.com>\n"
- "Karl Dietz <dekarl@spaetfruehstuecken.org>\n"
- "karokatona <karokatona@users.sourceforge.net>\n"
- "Kevin Rohland <kevin@nascher.org>\n"
- "Kevin Strasser <kevstras@gmail.com>\n"
- "Kjetil Jørgensen <kjetijor@users.sourceforge.net>\n"
- "Kyle Smith <askreet@gmail.com>\n"
- "Kyle Wickens <kylewickens@gmail.com>\n"
- "Lari Tikkanen <lartza@outlook.com>\n"
- "Lartza <https://github.com/Lartza>\n"
- "Lekensteyn <lekensteyn@users.sourceforge.net>\n"
- "Leszek Godlewski <inequation@users.sourceforge.net>\n"
- "lewisca04 <chris.lewis0094@gmail.com>\n"
- "Ludwig Nussel <ludwig.nussel@suse.de>\n"
- "Lukas Orsvärn <lucas.orsv@gmail.com>\n"
- "Luke A Pitt <LukeAPitt@googlemail.com>\n"
- "main() <main@ehvag.eu.org>\n"
- "Marc Deslauriers <marc.deslauriers@canonical.com>\n"
- "Marius Grannæs <grannas@users.sourceforge.net>\n"
- "Mark Felder <feld@feld.me>\n"
- "Mark Schreiber <mark7@users.sourceforge.net>\n"
- "Mark-Willem Jansen <rawnar@users.sourceforge.net>\n"
- "Markus S <Reaper@gmx.at>\n"
- "Martijn Stolk <github@netripper.nl>\n"
- "Martin Skilnand <cybknight@users.sourceforge.net>\n"
- "Martin von Gagern <Martin.vGagern@gmx.net>\n"
- "Matt Hamilton <m@tthamilton.com>\n"
- "Matt Lewandowsky <matt@greenviolet.net>\n"
- "Matt M. <mokomull@users.sourceforge.net>\n"
- "Matthias Mailänder <matthias@mailaender.name>\n"
- "Matthias Salzeder <mail@MatthiasSalzeder.de>\n"
- "Matthias Vogelgesang <matthias.vogelgesang@gmail.com>\n"
- "Max Weber <mii7303@gmail.com>\n"
- "Maxwell Cody <roge@riseup.net>\n"
- "meanracoon <racoon@meanclan.org>\n"
- "Mew <Giratina493@mew151.net>\n"
- "Micah Caldwell <micah@zoltu.net>\n"
- "Michael Pavlyshko <me@mixaill.tk>\n"
- "Michael Ziegler <diese-addy@funzt-halt.net>\n"
- "Michał \"Zuko\" Żukowski <zuczeq@gmail.com>\n"
- "Mike <mike@flomp.net>\n"
- "Mikkel Krautz <mikkel@krautz.dk>\n"
- "Mikko Rantanen <jubjub@jubjubnest.net>\n"
- "mray <mail@mray.de>\n"
- "mystic_sam <mystic_sam@users.sourceforge.net>\n"
- "Natenom <natenom@natenom.com>\n"
- "Nick Heindl <nheindl@wisc.edu>\n"
- "Nicos Gollan <gtdev@spearhead.de>\n"
- "Nik Johnson <nik@jnstw.us>\n"
- "Nikita Puzyryov <https://github.com/NikitaPuzyryov>\n"
- "Nikolaj Dombrow <nikolaj.dombrow@dombrow.de>\n"
- "nomad <gmc_holle@users.sourceforge.net>\n"
- "Opalium <opalium@users.sourceforge.net>\n"
- "Otto Allmendinger <oallmendinger@users.sourceforge.net>\n"
- "ozon <mumble-tower@users.sourceforge.net>\n"
- "Patrick Matthäi <pmatthaei@debian.org>\n"
- "Peter Vágner <pvdeejay@gmail.com>\n"
- "Phil <synapse84@gmail.com>\n"
- "Philip Cass <frymaster@127001.org>\n"
- "Phrag <info@clanwars.cz>\n"
- "Piratonym <piratonym@piratonym.cc>\n"
- "Prosper_Spurius <prosper_spurius@users.sourceforge.net>\n"
- "QuirB <quirb@gmx.net>\n"
- "qwestduck <gsreceiver2@yahoo.com>\n"
- "Rafael Correia <rafaeljpc@gmail.com>\n"
- "Rafael Lopez <rafael@case.edu>\n"
- "rdb <git@rdb.name>\n"
- "Roman Priesol <roman@priesol.net>\n"
- "ronoc <conor@forwind.net>\n"
- "Ryan Austin <ryan.e.austin@gmail.com>\n"
- "Sami Laine <sami.v.laine@gmail.com>\n"
- "Samuel D. Leslie <sdl@nexiom.net>\n"
- "scapula <rasmus.ry@gmail.com>\n"
- "Sebastian Schlingmann <mit_service@users.sourceforge.net>\n"
- "Semion Tsinman <Necromancer3333@gmail.com>\n"
- "Sergey Ivanov <randomei@users.sourceforge.net>\n"
- "Shen-Ta Hsieh <ibmibmibm.tw@gmail.com>\n"
- "Spaccaossi <spaccaossi@gmail.com>\n"
- "spede <spede@dota2.fi>\n"
- "Stefan Gehn <mETz@gehn.net>\n"
- "Stefan Hacker <dd0t@users.sourceforge.net>\n"
- "Steve Hill <github@cheesy.sackheads.org>\n"
- "Steven Noonan <steven@uplinklabs.net>\n"
- "Sven-Hendrik Haase <sh@lutzhaase.com>\n"
- "Svenne33 <svenne33@users.sourceforge.net>\n"
- "Svyatoslav <razmyslov@viva64.com>\n"
- "synapse84 <synapse84@gmail.com>\n"
- "Thibault Capdevielled <theblackstorm@userse.sourceforge.net>\n"
- "Thibaut Girka\n"
- "Thorvald Natvig <slicer@users.sourceforge.net>\n"
- "Tim Burke <tim.burke@gmail.com>\n"
- "Tim Cooper <tim.cooper@layeh.com>\n"
- "Tim Visée <timvisee@gmail.com>\n"
- "Timo Gurr <timo.gurr@gmail.com>\n"
- "Timo K <timer@dbclan.de>\n"
- "tkmorris <mauricioarozi@gmail.com>\n"
- "Tristan Matthews <tristan.matthews@savoirfairelinux.com>\n"
- "Tsbook <tsbook@users.sourceforge.net>\n"
- "Wesley W. Terpstra <terpstra@users.sourceforge.net>\n"
- "Will Tange <bh34rt@gmail.com>\n"
- "withgod <withgod@users.sourceforge.net>\n"
- "x89 <napalm10@gmail.com>\n"
- "zapman\n"
- "zeroX-tj <tim.janssens@gmail.com>\n"
- "Zorg <zorgiepoo@gmail.com>\n"
- "\n"
- "// Special thanks to:\n"
- "//\n"
- "// Thorvald Natvig, for founding the Mumble project\n"
- "// and maintaining it during its formative years.";
-
-
-static const char *licenseCELT = "Copyright 2001-2009 Jean-Marc Valin, Timothy B. Terriberry,\n"
- " CSIRO, and other contributors\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseOpus = "Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,\n"
- " Jean-Marc Valin, Timothy B. Terriberry,\n"
- " CSIRO, Gregory Maxwell, Mark Borgerding,\n"
- " Erik de Castro Lopo\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of Internet Society, IETF or IETF Trust, nor the\n"
- "names of specific contributors, may be used to endorse or promote\n"
- "products derived from this software without specific prior written\n"
- "permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER\n"
- "OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "Opus is subject to the royalty-free patent licenses which are\n"
- "specified at:\n"
- "\n"
- "Xiph.Org Foundation:\n"
- "https://datatracker.ietf.org/ipr/1524/\n"
- "\n"
- "Microsoft Corporation:\n"
- "https://datatracker.ietf.org/ipr/1914/\n"
- "\n"
- "Broadcom Corporation:\n"
- "https://datatracker.ietf.org/ipr/1526/";
-
-
-static const char *licenseSPEEX = "Copyright 2002-2008 Xiph.org Foundation\n"
- "Copyright 2002-2008 Jean-Marc Valin\n"
- "Copyright 2005-2007 Analog Devices Inc.\n"
- "Copyright 2005-2008 Commonwealth Scientific and Industrial Research \n"
- " Organisation (CSIRO)\n"
- "Copyright 1993, 2002, 2006 David Rowe\n"
- "Copyright 2003 EpicGames\n"
- "Copyright 1992-1994 Jutta Degener, Carsten Bormann\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseOpenSSL = "====================================================================\n"
- "Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer. \n"
- "\n"
- "2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in\n"
- " the documentation and/or other materials provided with the\n"
- " distribution.\n"
- "\n"
- "3. All advertising materials mentioning features or use of this\n"
- " software must display the following acknowledgment:\n"
- " \"This product includes software developed by the OpenSSL Project\n"
- " for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n"
- "\n"
- "4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n"
- " endorse or promote products derived from this software without\n"
- " prior written permission. For written permission, please contact\n"
- " openssl-core@openssl.org.\n"
- "\n"
- "5. Products derived from this software may not be called \"OpenSSL\"\n"
- " nor may \"OpenSSL\" appear in their names without prior written\n"
- " permission of the OpenSSL Project.\n"
- "\n"
- "6. Redistributions of any form whatsoever must retain the following\n"
- " acknowledgment:\n"
- " \"This product includes software developed by the OpenSSL Project\n"
- " for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n"
- "EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- "PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR\n"
- "ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n"
- "NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n"
- "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
- "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n"
- "STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n"
- "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n"
- "OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "====================================================================\n"
- "\n"
- "This product includes cryptographic software written by Eric Young\n"
- "(eay@cryptsoft.com). This product includes software written by Tim\n"
- "Hudson (tjh@cryptsoft.com).\n"
- "\n"
- "Original SSLeay License\n"
- "-----------------------\n"
- "\n"
- "Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n"
- "All rights reserved.\n"
- "\n"
- "This package is an SSL implementation written\n"
- "by Eric Young (eay@cryptsoft.com).\n"
- "The implementation was written so as to conform with Netscapes SSL.\n"
- "\n"
- "This library is free for commercial and non-commercial use as long as\n"
- "the following conditions are adhered to. The following conditions\n"
- "apply to all code found in this distribution, be it the RC4, RSA,\n"
- "lhash, DES, etc., code; not just the SSL code. The SSL documentation\n"
- "included with this distribution is covered by the same copyright terms\n"
- "except that the holder is Tim Hudson (tjh@cryptsoft.com).\n"
- "\n"
- "Copyright remains Eric Young's, and as such any Copyright notices in\n"
- "the code are not to be removed.\n"
- "If this package is used in a product, Eric Young should be given attribution\n"
- "as the author of the parts of the library used.\n"
- "This can be in the form of a textual message at program startup or\n"
- "in documentation (online or textual) provided with the package.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "1. Redistributions of source code must retain the copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- "2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "3. All advertising materials mentioning features or use of this software\n"
- " must display the following acknowledgement:\n"
- " \"This product includes cryptographic software written by\n"
- " Eric Young (eay@cryptsoft.com)\"\n"
- " The word 'cryptographic' can be left out if the routines from the library\n"
- " being used are not cryptographic related :-).\n"
- "4. If you include any Windows specific code (or a derivative thereof) from \n"
- " the apps directory (application code) you must include an acknowledgement:\n"
- " \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\n"
- "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- "ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\n"
- "FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
- "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
- "OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
- "HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
- "LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
- "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
- "SUCH DAMAGE.\n"
- "\n"
- "The licence and distribution terms for any publicly available version or\n"
- "derivative of this code cannot be changed. i.e. this code cannot simply be\n"
- "copied and put under another distribution licence\n"
- "[including the GNU Public Licence.]";
-
-
-static const char *licenseLibsndfile = "Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>\n"
- "\n"
- "This program is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU Lesser General Public License as published by\n"
- "the Free Software Foundation; either version 2.1 of the License, or\n"
- "(at your option) any later version.\n"
- "\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- "GNU Lesser General Public License for more details.\n"
- "\n"
- "You should have received a copy of the GNU Lesser General Public License\n"
- "along with this program; if not, write to the Free Software\n"
- "Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.";
-
-
-static const char *licenseOgg = "Copyright (c) 2002, Xiph.org Foundation\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION\n"
- "OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
- "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
- "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
- "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
- "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseVorbis = "Copyright (c) 2002-2008 Xiph.org Foundation\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION\n"
- "OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
- "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
- "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
- "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
- "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseFLAC = "Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-#ifdef Q_OS_MAC
-static const char *licenseMachOverride =
- "Copyright (c) 2003-2009 Jonathan 'Wolf' Rentzsch <http://rentzsch.com>\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person obtaining\n"
- "a copy of this software and associated documentation files (the \"Software\"),\n"
- "to deal in the Software without restriction, including without limitation\n"
- "the rights to use, copy, modify, merge, publish, distribute, sublicense,\n"
- "and/or sell copies of the Software, and to permit persons to whom the\n"
- "Software is furnished to do so, subject to the following conditions:\n"
- "\n"
- "The above copyright notice and this permission notice shall be\n"
- "included in all copies or substantial portions of the Software.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n"
- "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n"
- "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n"
- "THE SOFTWARE.";
-#endif
-
-
-#ifdef Q_OS_WIN64
-static const char *licenseMinHook = "MinHook - The Minimalistic API Hooking Library for x64/x86\n"
- "Copyright (C) 2009-2017 Tsuda Kageyu.\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- " 1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- " 2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n"
- "TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n"
- "PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER\n"
- "OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "================================================================================\n"
- "Portions of this software are Copyright (c) 2008-2009, Vyacheslav Patkov.\n"
- "================================================================================\n"
- "Hacker Disassembler Engine 32 C\n"
- "Copyright (c) 2008-2009, Vyacheslav Patkov.\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- " 1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- " 2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n"
- "TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n"
- "PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "-------------------------------------------------------------------------------\n"
- "Hacker Disassembler Engine 64 C\n"
- "Copyright (c) 2008-2009, Vyacheslav Patkov.\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- " 1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- " 2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n"
- "TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n"
- "PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-#endif
-
-
-#ifdef USING_BUNDLED_QT_TRANSLATIONS
-static const char *licenseQtTranslations =
- "Mumble uses Qt translations created by the VirtualBox community\n"
- "under the MIT license. Files and copyright were obtained from:\n"
- "https://www.virtualbox.org/ticket/2018\n"
- "\n"
- "Turkish Qt translation (serdar, BouRock):\n"
- " Copyright (c) 2007-2009 Serdar Soytetir\n"
- " Copyright (c) 2012 Burak Yavuz\n"
- "Italian Qt translation (smart2128):\n"
- " Copyright (c) 2009-2012 Vincenzo Reale\n"
- "Dutch Qt translation (geertseb, lxndr, nippur):\n"
- " Copyright (c) 2009-2011 Ebel Geertsema\n"
- " Copyright (c) 2007 Alexander L. de Goeij\n"
- " Copyright (c) 2012 Richard E van der Luit\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person obtaining a copy\n"
- "of this software and associated documentation files (the \"Software\"), to deal\n"
- "in the Software without restriction, including without limitation the rights\n"
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
- "copies of the Software, and to permit persons to whom the Software is furnished\n"
- "to do so, subject to the following conditions:\n"
- "\n"
- "The above copyright notice and this permission notice shall be included in all\n"
- "copies or substantial portions of the Software.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n"
- "SOFTWARE.";
-#endif
-
-
-static const char *licenseEmojiOne = "Creative Commons Attribution-ShareAlike 4.0 International Public\n"
- "License\n"
- "\n"
- "By exercising the Licensed Rights (defined below), You accept and agree\n"
- "to be bound by the terms and conditions of this Creative Commons\n"
- "Attribution-ShareAlike 4.0 International Public License (\"Public\n"
- "License\"). To the extent this Public License may be interpreted as a\n"
- "contract, You are granted the Licensed Rights in consideration of Your\n"
- "acceptance of these terms and conditions, and the Licensor grants You\n"
- "such rights in consideration of benefits the Licensor receives from\n"
- "making the Licensed Material available under these terms and\n"
- "conditions.\n"
- "\n"
- "\n"
- "Section 1 -- Definitions.\n"
- "\n"
- " a. Adapted Material means material subject to Copyright and Similar\n"
- " Rights that is derived from or based upon the Licensed Material\n"
- " and in which the Licensed Material is translated, altered,\n"
- " arranged, transformed, or otherwise modified in a manner requiring\n"
- " permission under the Copyright and Similar Rights held by the\n"
- " Licensor. For purposes of this Public License, where the Licensed\n"
- " Material is a musical work, performance, or sound recording,\n"
- " Adapted Material is always produced where the Licensed Material is\n"
- " synched in timed relation with a moving image.\n"
- "\n"
- " b. Adapter's License means the license You apply to Your Copyright\n"
- " and Similar Rights in Your contributions to Adapted Material in\n"
- " accordance with the terms and conditions of this Public License.\n"
- "\n"
- " c. BY-SA Compatible License means a license listed at\n"
- " creativecommons.org/compatiblelicenses, approved by Creative\n"
- " Commons as essentially the equivalent of this Public License.\n"
- "\n"
- " d. Copyright and Similar Rights means copyright and/or similar rights\n"
- " closely related to copyright including, without limitation,\n"
- " performance, broadcast, sound recording, and Sui Generis Database\n"
- " Rights, without regard to how the rights are labeled or\n"
- " categorized. For purposes of this Public License, the rights\n"
- " specified in Section 2(b)(1)-(2) are not Copyright and Similar\n"
- " Rights.\n"
- "\n"
- " e. Effective Technological Measures means those measures that, in the\n"
- " absence of proper authority, may not be circumvented under laws\n"
- " fulfilling obligations under Article 11 of the WIPO Copyright\n"
- " Treaty adopted on December 20, 1996, and/or similar international\n"
- " agreements.\n"
- "\n"
- " f. Exceptions and Limitations means fair use, fair dealing, and/or\n"
- " any other exception or limitation to Copyright and Similar Rights\n"
- " that applies to Your use of the Licensed Material.\n"
- "\n"
- " g. License Elements means the license attributes listed in the name\n"
- " of a Creative Commons Public License. The License Elements of this\n"
- " Public License are Attribution and ShareAlike.\n"
- "\n"
- " h. Licensed Material means the artistic or literary work, database,\n"
- " or other material to which the Licensor applied this Public\n"
- " License.\n"
- "\n"
- " i. Licensed Rights means the rights granted to You subject to the\n"
- " terms and conditions of this Public License, which are limited to\n"
- " all Copyright and Similar Rights that apply to Your use of the\n"
- " Licensed Material and that the Licensor has authority to license.\n"
- "\n"
- " j. Licensor means the individual(s) or entity(ies) granting rights\n"
- " under this Public License.\n"
- "\n"
- " k. Share means to provide material to the public by any means or\n"
- " process that requires permission under the Licensed Rights, such\n"
- " as reproduction, public display, public performance, distribution,\n"
- " dissemination, communication, or importation, and to make material\n"
- " available to the public including in ways that members of the\n"
- " public may access the material from a place and at a time\n"
- " individually chosen by them.\n"
- "\n"
- " l. Sui Generis Database Rights means rights other than copyright\n"
- " resulting from Directive 96/9/EC of the European Parliament and of\n"
- " the Council of 11 March 1996 on the legal protection of databases,\n"
- " as amended and/or succeeded, as well as other essentially\n"
- " equivalent rights anywhere in the world.\n"
- "\n"
- " m. You means the individual or entity exercising the Licensed Rights\n"
- " under this Public License. Your has a corresponding meaning.\n"
- "\n"
- "\n"
- "Section 2 -- Scope.\n"
- "\n"
- " a. License grant.\n"
- "\n"
- " 1. Subject to the terms and conditions of this Public License,\n"
- " the Licensor hereby grants You a worldwide, royalty-free,\n"
- " non-sublicensable, non-exclusive, irrevocable license to\n"
- " exercise the Licensed Rights in the Licensed Material to:\n"
- "\n"
- " a. reproduce and Share the Licensed Material, in whole or\n"
- " in part; and\n"
- "\n"
- " b. produce, reproduce, and Share Adapted Material.\n"
- "\n"
- " 2. Exceptions and Limitations. For the avoidance of doubt, where\n"
- " Exceptions and Limitations apply to Your use, this Public\n"
- " License does not apply, and You do not need to comply with\n"
- " its terms and conditions.\n"
- "\n"
- " 3. Term. The term of this Public License is specified in Section\n"
- " 6(a).\n"
- "\n"
- " 4. Media and formats; technical modifications allowed. The\n"
- " Licensor authorizes You to exercise the Licensed Rights in\n"
- " all media and formats whether now known or hereafter created,\n"
- " and to make technical modifications necessary to do so. The\n"
- " Licensor waives and/or agrees not to assert any right or\n"
- " authority to forbid You from making technical modifications\n"
- " necessary to exercise the Licensed Rights, including\n"
- " technical modifications necessary to circumvent Effective\n"
- " Technological Measures. For purposes of this Public License,\n"
- " simply making modifications authorized by this Section 2(a)\n"
- " (4) never produces Adapted Material.\n"
- "\n"
- " 5. Downstream recipients.\n"
- "\n"
- " a. Offer from the Licensor -- Licensed Material. Every\n"
- " recipient of the Licensed Material automatically\n"
- " receives an offer from the Licensor to exercise the\n"
- " Licensed Rights under the terms and conditions of this\n"
- " Public License.\n"
- "\n"
- " b. Additional offer from the Licensor -- Adapted Material.\n"
- " Every recipient of Adapted Material from You\n"
- " automatically receives an offer from the Licensor to\n"
- " exercise the Licensed Rights in the Adapted Material\n"
- " under the conditions of the Adapter's License You apply.\n"
- "\n"
- " c. No downstream restrictions. You may not offer or impose\n"
- " any additional or different terms or conditions on, or\n"
- " apply any Effective Technological Measures to, the\n"
- " Licensed Material if doing so restricts exercise of the\n"
- " Licensed Rights by any recipient of the Licensed\n"
- " Material.\n"
- "\n"
- " 6. No endorsement. Nothing in this Public License constitutes or\n"
- " may be construed as permission to assert or imply that You\n"
- " are, or that Your use of the Licensed Material is, connected\n"
- " with, or sponsored, endorsed, or granted official status by,\n"
- " the Licensor or others designated to receive attribution as\n"
- " provided in Section 3(a)(1)(A)(i).\n"
- "\n"
- " b. Other rights.\n"
- "\n"
- " 1. Moral rights, such as the right of integrity, are not\n"
- " licensed under this Public License, nor are publicity,\n"
- " privacy, and/or other similar personality rights; however, to\n"
- " the extent possible, the Licensor waives and/or agrees not to\n"
- " assert any such rights held by the Licensor to the limited\n"
- " extent necessary to allow You to exercise the Licensed\n"
- " Rights, but not otherwise.\n"
- "\n"
- " 2. Patent and trademark rights are not licensed under this\n"
- " Public License.\n"
- "\n"
- " 3. To the extent possible, the Licensor waives any right to\n"
- " collect royalties from You for the exercise of the Licensed\n"
- " Rights, whether directly or through a collecting society\n"
- " under any voluntary or waivable statutory or compulsory\n"
- " licensing scheme. In all other cases the Licensor expressly\n"
- " reserves any right to collect such royalties.\n"
- "\n"
- "\n"
- "Section 3 -- License Conditions.\n"
- "\n"
- "Your exercise of the Licensed Rights is expressly made subject to the\n"
- "following conditions.\n"
- "\n"
- " a. Attribution.\n"
- "\n"
- " 1. If You Share the Licensed Material (including in modified\n"
- " form), You must:\n"
- "\n"
- " a. retain the following if it is supplied by the Licensor\n"
- " with the Licensed Material:\n"
- "\n"
- " i. identification of the creator(s) of the Licensed\n"
- " Material and any others designated to receive\n"
- " attribution, in any reasonable manner requested by\n"
- " the Licensor (including by pseudonym if\n"
- " designated);\n"
- "\n"
- " ii. a copyright notice;\n"
- "\n"
- " iii. a notice that refers to this Public License;\n"
- "\n"
- " iv. a notice that refers to the disclaimer of\n"
- " warranties;\n"
- "\n"
- " v. a URI or hyperlink to the Licensed Material to the\n"
- " extent reasonably practicable;\n"
- "\n"
- " b. indicate if You modified the Licensed Material and\n"
- " retain an indication of any previous modifications; and\n"
- "\n"
- " c. indicate the Licensed Material is licensed under this\n"
- " Public License, and include the text of, or the URI or\n"
- " hyperlink to, this Public License.\n"
- "\n"
- " 2. You may satisfy the conditions in Section 3(a)(1) in any\n"
- " reasonable manner based on the medium, means, and context in\n"
- " which You Share the Licensed Material. For example, it may be\n"
- " reasonable to satisfy the conditions by providing a URI or\n"
- " hyperlink to a resource that includes the required\n"
- " information.\n"
- "\n"
- " 3. If requested by the Licensor, You must remove any of the\n"
- " information required by Section 3(a)(1)(A) to the extent\n"
- " reasonably practicable.\n"
- "\n"
- " b. ShareAlike.\n"
- "\n"
- " In addition to the conditions in Section 3(a), if You Share\n"
- " Adapted Material You produce, the following conditions also apply.\n"
- "\n"
- " 1. The Adapter's License You apply must be a Creative Commons\n"
- " license with the same License Elements, this version or\n"
- " later, or a BY-SA Compatible License.\n"
- "\n"
- " 2. You must include the text of, or the URI or hyperlink to, the\n"
- " Adapter's License You apply. You may satisfy this condition\n"
- " in any reasonable manner based on the medium, means, and\n"
- " context in which You Share Adapted Material.\n"
- "\n"
- " 3. You may not offer or impose any additional or different terms\n"
- " or conditions on, or apply any Effective Technological\n"
- " Measures to, Adapted Material that restrict exercise of the\n"
- " rights granted under the Adapter's License You apply.\n"
- "\n"
- "\n"
- "Section 4 -- Sui Generis Database Rights.\n"
- "\n"
- "Where the Licensed Rights include Sui Generis Database Rights that\n"
- "apply to Your use of the Licensed Material:\n"
- "\n"
- " a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n"
- " to extract, reuse, reproduce, and Share all or a substantial\n"
- " portion of the contents of the database;\n"
- "\n"
- " b. if You include all or a substantial portion of the database\n"
- " contents in a database in which You have Sui Generis Database\n"
- " Rights, then the database in which You have Sui Generis Database\n"
- " Rights (but not its individual contents) is Adapted Material,\n"
- "\n"
- " including for purposes of Section 3(b); and\n"
- " c. You must comply with the conditions in Section 3(a) if You Share\n"
- " all or a substantial portion of the contents of the database.\n"
- "\n"
- "For the avoidance of doubt, this Section 4 supplements and does not\n"
- "replace Your obligations under this Public License where the Licensed\n"
- "Rights include other Copyright and Similar Rights.\n"
- "\n"
- "\n"
- "Section 5 -- Disclaimer of Warranties and Limitation of Liability.\n"
- "\n"
- " a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n"
- " EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n"
- " AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n"
- " ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n"
- " IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n"
- " WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n"
- " PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n"
- " ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n"
- " KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n"
- " ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
- "\n"
- " b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n"
- " TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n"
- " NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n"
- " INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n"
- " COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n"
- " USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n"
- " ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n"
- " DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n"
- " IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n"
- "\n"
- " c. The disclaimer of warranties and limitation of liability provided\n"
- " above shall be interpreted in a manner that, to the extent\n"
- " possible, most closely approximates an absolute disclaimer and\n"
- " waiver of all liability.\n"
- "\n"
- "\n"
- "Section 6 -- Term and Termination.\n"
- "\n"
- " a. This Public License applies for the term of the Copyright and\n"
- " Similar Rights licensed here. However, if You fail to comply with\n"
- " this Public License, then Your rights under this Public License\n"
- " terminate automatically.\n"
- "\n"
- " b. Where Your right to use the Licensed Material has terminated under\n"
- " Section 6(a), it reinstates:\n"
- "\n"
- " 1. automatically as of the date the violation is cured, provided\n"
- " it is cured within 30 days of Your discovery of the\n"
- " violation; or\n"
- "\n"
- " 2. upon express reinstatement by the Licensor.\n"
- "\n"
- " For the avoidance of doubt, this Section 6(b) does not affect any\n"
- " right the Licensor may have to seek remedies for Your violations\n"
- " of this Public License.\n"
- "\n"
- " c. For the avoidance of doubt, the Licensor may also offer the\n"
- " Licensed Material under separate terms or conditions or stop\n"
- " distributing the Licensed Material at any time; however, doing so\n"
- " will not terminate this Public License.\n"
- "\n"
- " d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n"
- " License.\n"
- "\n"
- "\n"
- "Section 7 -- Other Terms and Conditions.\n"
- "\n"
- " a. The Licensor shall not be bound by any additional or different\n"
- " terms or conditions communicated by You unless expressly agreed.\n"
- "\n"
- " b. Any arrangements, understandings, or agreements regarding the\n"
- " Licensed Material not stated herein are separate from and\n"
- " independent of the terms and conditions of this Public License.\n"
- "\n"
- "\n"
- "Section 8 -- Interpretation.\n"
- "\n"
- " a. For the avoidance of doubt, this Public License does not, and\n"
- " shall not be interpreted to, reduce, limit, restrict, or impose\n"
- " conditions on any use of the Licensed Material that could lawfully\n"
- " be made without permission under this Public License.\n"
- "\n"
- " b. To the extent possible, if any provision of this Public License is\n"
- " deemed unenforceable, it shall be automatically reformed to the\n"
- " minimum extent necessary to make it enforceable. If the provision\n"
- " cannot be reformed, it shall be severed from this Public License\n"
- " without affecting the enforceability of the remaining terms and\n"
- " conditions.\n"
- "\n"
- " c. No term or condition of this Public License will be waived and no\n"
- " failure to comply consented to unless expressly agreed to by the\n"
- " Licensor.\n"
- "\n"
- " d. Nothing in this Public License constitutes or may be interpreted\n"
- " as a limitation upon, or waiver of, any privileges and immunities\n"
- " that apply to the Licensor or You, including from the legal\n"
- " processes of any jurisdiction or authority.";
-
-
-static const char *licenseXInputCheck = "Simple DirectMedia Layer\n"
- "Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>\n"
- " \n"
- "This software is provided 'as-is', without any express or implied\n"
- "warranty. In no event will the authors be held liable for any damages\n"
- "arising from the use of this software.\n"
- "\n"
- "Permission is granted to anyone to use this software for any purpose,\n"
- "including commercial applications, and to alter it and redistribute it\n"
- "freely, subject to the following restrictions:\n"
- " \n"
- "1. The origin of this software must not be misrepresented; you must not\n"
- " claim that you wrote the original software. If you use this software\n"
- " in a product, an acknowledgment in the product documentation would be\n"
- " appreciated but is not required. \n"
- "2. Altered source versions must be plainly marked as such, and must not be\n"
- " misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.";
-
-
-static const char *licenseQQBonjour = "Copyright (c) 2007, Trenton Schulz\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions are met:\n"
- "\n"
- " 1. Redistributions of source code must retain the above copyright notice,\n"
- " this list of conditions and the following disclaimer.\n"
- "\n"
- " 2. Redistributions in binary form must reproduce the above copyright notice,\n"
- " this list of conditions and the following disclaimer in the documentation\n"
- " and/or other materials provided with the distribution.\n"
- "\n"
- " 3. The name of the author may not be used to endorse or promote products\n"
- " derived from this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n"
- "WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n"
- "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\n"
- "EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n"
- "OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n"
- "WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n"
- "OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n"
- "ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseSmallFT = "Copyright (c) 2002-2007 Xiph.org Foundation\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "- Redistributions in binary form must reproduce the above copyright\n"
- "notice, this list of conditions and the following disclaimer in the\n"
- "documentation and/or other materials provided with the distribution.\n"
- "\n"
- "- Neither the name of the Xiph.org Foundation nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "`AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION\n"
- "OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
- "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
- "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
- "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
- "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseOldStyleLicenseHeaders =
- "Mumble's AudioConfigDialog\n"
- "\n"
- " src/mumble/AudioConfigDialog.cpp\n"
- "\n"
- " Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2008, Andreas Messer <andi@bupfen.de>\n"
- "\n"
- "Mumble's PortAudio support\n"
- "\n"
- " src/mumble/PAAudio.cpp, src/mumble/PAAudio.h\n"
- "\n"
- " Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2007, Stefan Gehn <mETz AT gehn DOT net>\n"
- "\n"
- "Mumble's Text-to-Speech support on OS X\n"
- "\n"
- " src/mumble/TextToSpeech_macx.mm\n"
- "\n"
- " Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2007, Sebastian Schlingmann <mit_service@users.sourceforge.net>\n"
- " Copyright (C) 2008-2011, Mikkel Krautz <mikkel@krautz.dk>\n"
- " Copyright (C) 2014, Mayur Pawashe <zorgiepoo@gmail.com>\n"
- "\n"
- "Mumble's UserLocalVolumeDialog\n"
- "\n"
- " src/mumble/UserLocalVolumeDialog.cpp\n"
- " src/mumble/UserLocalVolumeDialog.h\n"
- "\n"
- " Copyright (C) 2015, Fredrik Nordin <freedick@ludd.ltu.se>\n"
- "\n"
- "Murmur's PBKDF2 support\n"
- "\n"
- " src/murmur/PBKDF2.cpp\n"
- " src/murmur/PBKDF2.h\n"
- "\n"
- " Copyright (C) 2013, Morris Moraes <mauricioarozi@gmail.com>\n"
- " Copyright (C) 2014, Stefan Hacker <dd0t@users.sourceforge.net>\n"
- "\n"
- "D11StateBlock in Mumble's Windows Overlay\n"
- "\n"
- " overlay/D11StateBlock.cpp\n"
- " overlay/D11StateBlock.h\n"
- "\n"
- " Copyright (C) 2011-2013, Nye Liu <nyet@nyet.org>\n"
- " Copyright (C) 2011-2013, Kissaki <kissaki@gmx.de>\n"
- "\n"
- "D3D11 HLSL shaders for Mumble's Windows Overlay\n"
- "\n"
- " overlay/overlay11-common.hlsl\n"
- " overlay/overlay11.ps\n"
- " overlay/overlay11.vs\n"
- "\n"
- " Copyright (C) 2011-2013, Nye Liu <nyet@nyet.org>\n"
- "\n"
- "D3D11 support for Mumble's Windows Overlay\n"
- "\n"
- " overlay/d3d11.cpp\n"
- "\n"
- " Copyright (C) 2010-2013, Benjamin Jemlich <pcgod@users.sourceforge.net>\n"
- " Copyright (C) 2011-2013, Nye Liu <nyet@nyet.org>\n"
- " Copyright (C) 2011-2013, Kissaki <kissaki@gmx.de>\n"
- "\n"
- "DXGI support for Mumble's Windows Overlay\n"
- "\n"
- " overlay/dxgi.cpp\n"
- "\n"
- " Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2011, Kissaki <kissaki@gmx.de>\n"
- " Copyright (C) 2011, Nye Liu <nyet@nyet.org>\n"
- "\n"
- "Mumble's \"Battlefield 3\" Plugin\n"
- "\n"
- " plugins/bf3/bf3.cpp\n"
- "\n"
- " Copyright (C) 2010-2011, Snares <snares@users.sourceforge.net>\n"
- " Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2011, Ryan Austin <ryan@gameforcecenters.com>\n"
- " Copyright (C) 2012, Bojan Hartmann <bogie@bawki.de>\n"
- "\n"
- "Mumble's \"Blacklight\" Plugin\n"
- "\n"
- " plugins/blacklight/blacklight.cpp\n"
- "\n"
- " Copyright (C) 2012, dark_skeleton (d-rez) <dark.skeleton@gmail.com>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Borderlands\" Plugin\n"
- "\n"
- " plugins/borderlands/borderlands.cpp\n"
- "\n"
- " Copyright (C) 2010, Mark-Willem Jansen <rawnar@users.sourceforge.net>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Borderlands 2\" Plugin\n"
- "\n"
- " plugins/borderlands2/borderlands2.cpp\n"
- "\n"
- " Copyright (C) 2013, Steve Hill <github@cheesy.sackheads.org>\n"
- " Copyright (C) 2013, Gabriel Risterucci <cleyfaye@gmail.com>\n"
- " Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Breach\" Plugin\n"
- "\n"
- " plugins/breach/breach.cpp\n"
- "\n"
- " Copyright (C) 2011, Mark-Willem Jansen <rawnar@users.sourceforge.net>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Counter-Strike\" Plugin\n"
- "\n"
- " plugins/cs/cs.cpp\n"
- "\n"
- " Copyright (C) 2009-2010, Imre Botos <zokny@users.sourceforge.net>\n"
- " Copyright (C) 2009-2012, Snares <snares@users.sourceforge.net>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Grand Theft Auto IV\" Plugin\n"
- "\n"
- " plugins/gtaiv/gtaiv.cpp\n"
- "\n"
- " Copyright (C) 2011, Mike <mike@flomp.net>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Just Cause 2\" Plugin\n"
- "\n"
- " plugins/jc2/jc2.cpp\n"
- "\n"
- " Copyright (C) 2012, Mike <mike@flomp.net>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Left 4 Dead 2\" Plugin\n"
- "\n"
- " plugins/l4d2/l4d2.cpp\n"
- "\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2012, dark_skeleton (d-rez) <dark.skeleton@gmail.com>\n"
- "\n"
- "Mumble's \"League of Legends\" Plugin\n"
- "\n"
- " plugins/lol/lol.cpp\n"
- "\n"
- " Copyright (C) 2012, dark_skeleton (d-rez) <dark.skeleton@gmail.com>\n"
- " Copyright (C) 2005-2012, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"The Lord of The Rings Online\" Plugin\n"
- "\n"
- " plugins/lotro/lotro.cpp\n"
- "\n"
- " Copyright (c) 2009-2011 Ilmar 'Ingaras' Kruis (seaeagle1@users.sourceforge.net)\n"
- "\n"
- "Mumble's \"Sub Rosa\" Plugin\n"
- "\n"
- " plugins/sr/sr.cpp\n"
- "\n"
- " Copyright (C) 2012, Lukas Orsvärn <lucas.orsv@gmail.com>\n"
- " Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>\n"
- "\n"
- "Mumble's \"Unreal Tournament\" Plugin\n"
- "\n"
- " plugins/ut99/ut99.cpp\n"
- "\n"
- " Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>\n"
- " Copyright (C) 2012, Moritz Schneeweiss\n"
- "\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "- Redistributions of source code must retain the above copyright notice,\n"
- " this list of conditions and the following disclaimer.\n"
- "- Redistributions in binary form must reproduce the above copyright notice,\n"
- " this list of conditions and the following disclaimer in the documentation\n"
- " and/or other materials provided with the distribution.\n"
- "- Neither the name of the Mumble Developers nor the names of its\n"
- " contributors may be used to endorse or promote products derived from this\n"
- " software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n"
- "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n"
- "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n"
- "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n"
- "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n"
- "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-
-
-static const char *licenseArc4RandomUniform =
- "Copyright (c) 2008, Damien Miller <djm@openbsd.org>\n"
- "\n"
- "Permission to use, copy, modify, and distribute this software for any\n"
- "purpose with or without fee is hereby granted, provided that the above\n"
- "copyright notice and this permission notice appear in all copies.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n"
- "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n"
- "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n"
- "ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n"
- "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n"
- "ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n"
- "OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.";
-
-
-#ifdef USE_BUILDENV
-static const char *licenseMariaDBCConnector = "This library is free software; you can redistribute it and/or\n"
- "modify it under the terms of the GNU Lesser General Public\n"
- "License as published by the Free Software Foundation; either\n"
- "version 2.1 of the License, or (at your option) any later version.\n"
- "\n"
- "This library is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- "Lesser General Public License for more details.\n"
- "\n"
- "You should have received a copy of the GNU Lesser General Public\n"
- "License along with this library; if not, write to the Free Software\n"
- "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA\n"
- "02110-1301 USA";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseZlib = "(C) 1995-2017 Jean-loup Gailly and Mark Adler\n"
- "\n"
- "This software is provided 'as-is', without any express or implied\n"
- "warranty. In no event will the authors be held liable for any damages\n"
- "arising from the use of this software.\n"
- "\n"
- "Permission is granted to anyone to use this software for any purpose,\n"
- "including commercial applications, and to alter it and redistribute it\n"
- "freely, subject to the following restrictions:\n"
- "\n"
- "1. The origin of this software must not be misrepresented; you must not\n"
- " claim that you wrote the original software. If you use this software\n"
- " in a product, an acknowledgment in the product documentation would be\n"
- " appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be\n"
- " misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "\n"
- "Jean-loup Gailly Mark Adler\n"
- "jloup@gzip.org madler@alumni.caltech.edu";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseProtobuf = "This license applies to all parts of Protocol Buffers except the following:\n"
- "\n"
- " - Atomicops support for generic gcc, located in\n"
- " src/google/protobuf/stubs/atomicops_internals_generic_gcc.h.\n"
- " This file is copyrighted by Red Hat Inc.\n"
- "\n"
- " - Atomicops support for AIX/POWER, located in\n"
- " src/google/protobuf/stubs/atomicops_internals_power.h.\n"
- " This file is copyrighted by Bloomberg Finance LP.\n"
- "\n"
- "Copyright 2014, Google Inc. All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions are\n"
- "met:\n"
- "\n"
- " * Redistributions of source code must retain the above copyright\n"
- "notice, this list of conditions and the following disclaimer.\n"
- " * Redistributions in binary form must reproduce the above\n"
- "copyright notice, this list of conditions and the following disclaimer\n"
- "in the documentation and/or other materials provided with the\n"
- "distribution.\n"
- " * Neither the name of Google Inc. nor the names of its\n"
- "contributors may be used to endorse or promote products derived from\n"
- "this software without specific prior written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
- "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
- "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
- "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
- "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
- "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
- "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
- "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
- "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
- "OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "Code generated by the Protocol Buffer compiler is owned by the owner\n"
- "of the input file used when generating it. This code is not\n"
- "standalone and requires a support library to be linked with it. This\n"
- "support library is itself covered by the above license.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseExpat = "Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper\n"
- "Copyright (c) 2001-2016 Expat maintainers\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person obtaining\n"
- "a copy of this software and associated documentation files (the\n"
- "\"Software\"), to deal in the Software without restriction, including\n"
- "without limitation the rights to use, copy, modify, merge, publish,\n"
- "distribute, sublicense, and/or sell copies of the Software, and to\n"
- "permit persons to whom the Software is furnished to do so, subject to\n"
- "the following conditions:\n"
- "\n"
- "The above copyright notice and this permission notice shall be included\n"
- "in all copies or substantial portions of the Software.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n"
- "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n"
- "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n"
- "IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n"
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n"
- "TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n"
- "SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseBoost = "Boost Software License - Version 1.0 - August 17th, 2003\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person or organization\n"
- "obtaining a copy of the software and accompanying documentation covered by\n"
- "this license (the \"Software\") to use, reproduce, display, distribute,\n"
- "execute, and transmit the Software, and to prepare derivative works of the\n"
- "Software, and to permit third-parties to whom the Software is furnished to\n"
- "do so, all subject to the following:\n"
- "\n"
- "The copyright notices in the Software and this entire statement, including\n"
- "the above license grant, this restriction and the following disclaimer,\n"
- "must be included in all copies of the Software, in whole or in part, and\n"
- "all derivative works of the Software, unless such copies or derivative\n"
- "works are solely in the form of machine-executable object code generated by\n"
- "a source language processor.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
- "FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT\n"
- "SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE\n"
- "FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,\n"
- "ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n"
- "DEALINGS IN THE SOFTWARE.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseBzip2 = "This program, \"bzip2\", the associated library \"libbzip2\", and all\n"
- "documentation, are copyright (C) 1996-2010 Julian R Seward. All\n"
- "rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "\n"
- "1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- "\n"
- "2. The origin of this software must not be misrepresented; you must \n"
- " not claim that you wrote the original software. If you use this \n"
- " software in a product, an acknowledgment in the product \n"
- " documentation would be appreciated but is not required.\n"
- "\n"
- "3. Altered source versions must be plainly marked as such, and must\n"
- " not be misrepresented as being the original software.\n"
- "\n"
- "4. The name of the author may not be used to endorse or promote \n"
- " products derived from this software without specific prior written \n"
- " permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n"
- "OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n"
- "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- "ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n"
- "DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
- "DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n"
- "GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n"
- "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n"
- "WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n"
- "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n"
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "Julian Seward, jseward@bzip.org\n"
- "bzip2/libbzip2 version 1.0.6 of 6 September 2010";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseBerkeleyDB =
- "/*\n"
- " * Copyright (c) 1990, 2013 Oracle and/or its affiliates. All rights reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " * 3. Redistributions in any form must be accompanied by information on\n"
- " * how to obtain complete source code for the DB software and any\n"
- " * accompanying software that uses the DB software. The source code\n"
- " * must either be included in the distribution or be available for no\n"
- " * more than the cost of distribution plus a nominal fee, and must be\n"
- " * freely redistributable under reasonable conditions. For an\n"
- " * executable file, complete source code means the source code for all\n"
- " * modules it contains. It does not include source code for modules or\n"
- " * files that typically accompany the major components of the operating\n"
- " * system on which the executable file runs.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY ORACLE ``AS IS'' AND ANY EXPRESS OR\n"
- " * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n"
- " * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR\n"
- " * NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL ORACLE BE LIABLE\n"
- " * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
- " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n"
- " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n"
- " * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n"
- " * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n"
- " * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n"
- " * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
- " */\n"
- "/*\n"
- " * Copyright (c) 1990, 1993, 1994, 1995\n"
- " * The Regents of the University of California. All rights reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " * 3. Neither the name of the University nor the names of its contributors\n"
- " * may be used to endorse or promote products derived from this software\n"
- " * without specific prior written permission.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n"
- " * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n"
- " * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
- " * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
- " * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
- " * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
- " * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
- " * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
- " * SUCH DAMAGE.\n"
- " */\n"
- "/*\n"
- " * Copyright (c) 1995, 1996\n"
- " * The President and Fellows of Harvard University. All rights reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " * 3. Neither the name of the University nor the names of its contributors\n"
- " * may be used to endorse or promote products derived from this software\n"
- " * without specific prior written permission.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY HARVARD AND ITS CONTRIBUTORS ``AS IS'' AND\n"
- " * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL HARVARD OR ITS CONTRIBUTORS BE LIABLE\n"
- " * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
- " * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
- " * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
- " * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
- " * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
- " * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
- " * SUCH DAMAGE.\n"
- " */\n"
- "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"
- "/***\n"
- " * ASM: a very small and fast Java bytecode manipulation framework\n"
- " * Copyright (c) 2000-2005 INRIA, France Telecom\n"
- " * All rights reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " * 3. Neither the name of the copyright holders nor the names of its\n"
- " * contributors may be used to endorse or promote products derived from\n"
- " * this software without specific prior written permission.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n"
- " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n"
- " * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
- " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n"
- " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n"
- " * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n"
- " * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n"
- " * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n"
- " * THE POSSIBILITY OF SUCH DAMAGE.\n"
- " */";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseFreetype = " The FreeType Project LICENSE\n"
- " ----------------------------\n"
- "\n"
- " 2006-Jan-27\n"
- "\n"
- " Copyright 1996-2002, 2006 by\n"
- " David Turner, Robert Wilhelm, and Werner Lemberg\n"
- "\n"
- "\n"
- "\n"
- "Introduction\n"
- "============\n"
- "\n"
- " The FreeType Project is distributed in several archive packages;\n"
- " some of them may contain, in addition to the FreeType font engine,\n"
- " various tools and contributions which rely on, or relate to, the\n"
- " FreeType Project.\n"
- "\n"
- " This license applies to all files found in such packages, and\n"
- " which do not fall under their own explicit license. The license\n"
- " affects thus the FreeType font engine, the test programs,\n"
- " documentation and makefiles, at the very least.\n"
- "\n"
- " This license was inspired by the BSD, Artistic, and IJG\n"
- " (Independent JPEG Group) licenses, which all encourage inclusion\n"
- " and use of free software in commercial and freeware products\n"
- " alike. As a consequence, its main points are that:\n"
- "\n"
- " o We don't promise that this software works. However, we will be\n"
- " interested in any kind of bug reports. (`as is' distribution)\n"
- "\n"
- " o You can use this software for whatever you want, in parts or\n"
- " full form, without having to pay us. (`royalty-free' usage)\n"
- "\n"
- " o You may not pretend that you wrote this software. If you use\n"
- " it, or only parts of it, in a program, you must acknowledge\n"
- " somewhere in your documentation that you have used the\n"
- " FreeType code. (`credits')\n"
- "\n"
- " We specifically permit and encourage the inclusion of this\n"
- " software, with or without modifications, in commercial products.\n"
- " We disclaim all warranties covering The FreeType Project and\n"
- " assume no liability related to The FreeType Project.\n"
- "\n"
- "\n"
- " Finally, many people asked us for a preferred form for a\n"
- " credit/disclaimer to use in compliance with this license. We thus\n"
- " encourage you to use the following text:\n"
- "\n"
- " \"\"\"\n"
- " Portions of this software are copyright © <year> The FreeType\n"
- " Project (www.freetype.org). All rights reserved.\n"
- " \"\"\"\n"
- "\n"
- " Please replace <year> with the value from the FreeType version you\n"
- " actually use.\n"
- "\n"
- "\n"
- "Legal Terms\n"
- "===========\n"
- "\n"
- "0. Definitions\n"
- "--------------\n"
- "\n"
- " Throughout this license, the terms `package', `FreeType Project',\n"
- " and `FreeType archive' refer to the set of files originally\n"
- " distributed by the authors (David Turner, Robert Wilhelm, and\n"
- " Werner Lemberg) as the `FreeType Project', be they named as alpha,\n"
- " beta or final release.\n"
- "\n"
- " `You' refers to the licensee, or person using the project, where\n"
- " `using' is a generic term including compiling the project's source\n"
- " code as well as linking it to form a `program' or `executable'.\n"
- " This program is referred to as `a program using the FreeType\n"
- " engine'.\n"
- "\n"
- " This license applies to all files distributed in the original\n"
- " FreeType Project, including all source code, binaries and\n"
- " documentation, unless otherwise stated in the file in its\n"
- " original, unmodified form as distributed in the original archive.\n"
- " If you are unsure whether or not a particular file is covered by\n"
- " this license, you must contact us to verify this.\n"
- "\n"
- " The FreeType Project is copyright (C) 1996-2000 by David Turner,\n"
- " Robert Wilhelm, and Werner Lemberg. All rights reserved except as\n"
- " specified below.\n"
- "\n"
- "1. No Warranty\n"
- "--------------\n"
- "\n"
- " THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY\n"
- " KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n"
- " WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- " PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS\n"
- " BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO\n"
- " USE, OF THE FREETYPE PROJECT.\n"
- "\n"
- "2. Redistribution\n"
- "-----------------\n"
- "\n"
- " This license grants a worldwide, royalty-free, perpetual and\n"
- " irrevocable right and license to use, execute, perform, compile,\n"
- " display, copy, create derivative works of, distribute and\n"
- " sublicense the FreeType Project (in both source and object code\n"
- " forms) and derivative works thereof for any purpose; and to\n"
- " authorize others to exercise some or all of the rights granted\n"
- " herein, subject to the following conditions:\n"
- "\n"
- " o Redistribution of source code must retain this license file\n"
- " (`FTL.TXT') unaltered; any additions, deletions or changes to\n"
- " the original files must be clearly indicated in accompanying\n"
- " documentation. The copyright notices of the unaltered,\n"
- " original files must be preserved in all copies of source\n"
- " files.\n"
- "\n"
- " o Redistribution in binary form must provide a disclaimer that\n"
- " states that the software is based in part of the work of the\n"
- " FreeType Team, in the distribution documentation. We also\n"
- " encourage you to put an URL to the FreeType web page in your\n"
- " documentation, though this isn't mandatory.\n"
- "\n"
- " These conditions apply to any software derived from or based on\n"
- " the FreeType Project, not just the unmodified files. If you use\n"
- " our work, you must acknowledge us. However, no fee need be paid\n"
- " to us.\n"
- "\n"
- "3. Advertising\n"
- "--------------\n"
- "\n"
- " Neither the FreeType authors and contributors nor you shall use\n"
- " the name of the other for commercial, advertising, or promotional\n"
- " purposes without specific prior written permission.\n"
- "\n"
- " We suggest, but do not require, that you use one or more of the\n"
- " following phrases to refer to this software in your documentation\n"
- " or advertising materials: `FreeType Project', `FreeType Engine',\n"
- " `FreeType library', or `FreeType Distribution'.\n"
- "\n"
- " As you have not signed this license, you are not required to\n"
- " accept it. However, as the FreeType Project is copyrighted\n"
- " material, only this license, or another one contracted with the\n"
- " authors, grants you the right to use, distribute, and modify it.\n"
- " Therefore, by using, distributing, or modifying the FreeType\n"
- " Project, you indicate that you understand and accept all the terms\n"
- " of this license.\n"
- "\n"
- "4. Contacts\n"
- "-----------\n"
- "\n"
- " There are two mailing lists related to FreeType:\n"
- "\n"
- " o freetype@nongnu.org\n"
- "\n"
- " Discusses general use and applications of FreeType, as well as\n"
- " future and wanted additions to the library and distribution.\n"
- " If you are looking for support, start in this list if you\n"
- " haven't found anything to help you in the documentation.\n"
- "\n"
- " o freetype-devel@nongnu.org\n"
- "\n"
- " Discusses bugs, as well as engine internals, design issues,\n"
- " specific licenses, porting, etc.\n"
- "\n"
- " Our home page can be found at\n"
- "\n"
- " http://www.freetype.org\n"
- "\n"
- "\n"
- "--- end of FTL.TXT ---";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseHarfBuzzNG =
- "HarfBuzz is licensed under the so-called \"Old MIT\" license. Details follow.\n"
- "For parts of HarfBuzz that are licensed under different licenses see individual\n"
- "files names COPYING in subdirectories where applicable.\n"
- "\n"
- "Copyright © 2010,2011,2012 Google, Inc.\n"
- "Copyright © 2012 Mozilla Foundation\n"
- "Copyright © 2011 Codethink Limited\n"
- "Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies)\n"
- "Copyright © 2009 Keith Stribley\n"
- "Copyright © 2009 Martin Hosken and SIL International\n"
- "Copyright © 2007 Chris Wilson\n"
- "Copyright © 2006 Behdad Esfahbod\n"
- "Copyright © 2005 David Turner\n"
- "Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc.\n"
- "Copyright © 1998-2004 David Turner and Werner Lemberg\n"
- "\n"
- "For full copyright notices consult the individual files in the package.\n"
- "\n"
- "\n"
- "Permission is hereby granted, without written agreement and without\n"
- "license or royalty fees, to use, copy, modify, and distribute this\n"
- "software and its documentation for any purpose, provided that the\n"
- "above copyright notice and the following two paragraphs appear in\n"
- "all copies of this software.\n"
- "\n"
- "IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR\n"
- "DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES\n"
- "ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN\n"
- "IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGE.\n"
- "\n"
- "THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,\n"
- "BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n"
- "FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS\n"
- "ON AN \"AS IS\" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO\n"
- "PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibPNG = "\n"
- "This copy of the libpng notices is provided for your convenience. In case of\n"
- "any discrepancy between this copy and the notices in the file png.h that is\n"
- "included in the libpng distribution, the latter shall prevail.\n"
- "\n"
- "COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:\n"
- "\n"
- "If you modify libpng you may insert additional notices immediately following\n"
- "this sentence.\n"
- "\n"
- "This code is released under the libpng license.\n"
- "\n"
- "libpng versions 1.0.7, July 1, 2000 through 1.6.28, January 5, 2017 are\n"
- "Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are\n"
- "derived from libpng-1.0.6, and are distributed according to the same\n"
- "disclaimer and license as libpng-1.0.6 with the following individuals\n"
- "added to the list of Contributing Authors:\n"
- "\n"
- " Simon-Pierre Cadieux\n"
- " Eric S. Raymond\n"
- " Mans Rullgard\n"
- " Cosmin Truta\n"
- " Gilles Vollant\n"
- " James Yu\n"
- " Mandar Sahastrabuddhe\n"
- "\n"
- "and with the following additions to the disclaimer:\n"
- "\n"
- " There is no warranty against interference with your enjoyment of the\n"
- " library or against infringement. There is no warranty that our\n"
- " efforts or the library will fulfill any of your particular purposes\n"
- " or needs. This library is provided with all faults, and the entire\n"
- " risk of satisfactory quality, performance, accuracy, and effort is with\n"
- " the user.\n"
- "\n"
- "Some files in the \"contrib\" directory and some configure-generated\n"
- "files that are distributed with libpng have other copyright owners and\n"
- "are released under other open source licenses.\n"
- "\n"
- "libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are\n"
- "Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from\n"
- "libpng-0.96, and are distributed according to the same disclaimer and\n"
- "license as libpng-0.96, with the following individuals added to the list\n"
- "of Contributing Authors:\n"
- "\n"
- " Tom Lane\n"
- " Glenn Randers-Pehrson\n"
- " Willem van Schaik\n"
- "\n"
- "libpng versions 0.89, June 1996, through 0.96, May 1997, are\n"
- "Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,\n"
- "and are distributed according to the same disclaimer and license as\n"
- "libpng-0.88, with the following individuals added to the list of\n"
- "Contributing Authors:\n"
- "\n"
- " John Bowler\n"
- " Kevin Bracey\n"
- " Sam Bushell\n"
- " Magnus Holmgren\n"
- " Greg Roelofs\n"
- " Tom Tanner\n"
- "\n"
- "Some files in the \"scripts\" directory have other copyright owners\n"
- "but are released under this license.\n"
- "\n"
- "libpng versions 0.5, May 1995, through 0.88, January 1996, are\n"
- "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n"
- "\n"
- "For the purposes of this copyright and license, \"Contributing Authors\"\n"
- "is defined as the following set of individuals:\n"
- "\n"
- " Andreas Dilger\n"
- " Dave Martindale\n"
- " Guy Eric Schalnat\n"
- " Paul Schmidt\n"
- " Tim Wegner\n"
- "\n"
- "The PNG Reference Library is supplied \"AS IS\". The Contributing Authors\n"
- "and Group 42, Inc. disclaim all warranties, expressed or implied,\n"
- "including, without limitation, the warranties of merchantability and of\n"
- "fitness for any purpose. The Contributing Authors and Group 42, Inc.\n"
- "assume no liability for direct, indirect, incidental, special, exemplary,\n"
- "or consequential damages, which may result from the use of the PNG\n"
- "Reference Library, even if advised of the possibility of such damage.\n"
- "\n"
- "Permission is hereby granted to use, copy, modify, and distribute this\n"
- "source code, or portions hereof, for any purpose, without fee, subject\n"
- "to the following restrictions:\n"
- "\n"
- " 1. The origin of this source code must not be misrepresented.\n"
- "\n"
- " 2. Altered versions must be plainly marked as such and must not\n"
- " be misrepresented as being the original source.\n"
- "\n"
- " 3. This Copyright notice may not be removed or altered from any\n"
- " source or altered source distribution.\n"
- "\n"
- "The Contributing Authors and Group 42, Inc. specifically permit, without\n"
- "fee, and encourage the use of this source code as a component to\n"
- "supporting the PNG file format in commercial products. If you use this\n"
- "source code in a product, acknowledgment is not required but would be\n"
- "appreciated.\n"
- "\n"
- "END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.\n"
- "\n"
- "TRADEMARK:\n"
- "\n"
- "The name \"libpng\" has not been registered by the Copyright owner\n"
- "as a trademark in any jurisdiction. However, because libpng has\n"
- "been distributed and maintained world-wide, continually since 1995,\n"
- "the Copyright owner claims \"common-law trademark protection\" in any\n"
- "jurisdiction where common-law trademark is recognized.\n"
- "\n"
- "OSI CERTIFICATION:\n"
- "\n"
- "Libpng is OSI Certified Open Source Software. OSI Certified Open Source is\n"
- "a certification mark of the Open Source Initiative. OSI has not addressed\n"
- "the additional disclaimers inserted at version 1.0.7.\n"
- "\n"
- "EXPORT CONTROL:\n"
- "\n"
- "The Copyright owner believes that the Export Control Classification\n"
- "Number (ECCN) for libpng is EAR99, which means not subject to export\n"
- "controls or International Traffic in Arms Regulations (ITAR) because\n"
- "it is open source, publicly available software, that does not contain\n"
- "any encryption software. See the EAR, paragraphs 734.3(b)(3) and\n"
- "734.7(b).\n"
- "\n"
- "Glenn Randers-Pehrson\n"
- "glennrp at users.sourceforge.net\n"
- "January 5, 2017";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibjpegTurbo =
- "libjpeg-turbo is covered by three compatible BSD-style open source licenses:\n"
- "\n"
- "1. The IJG (Independent JPEG Group) License.\n"
- " This license applies to the libjpeg API library and associated programs\n"
- " (any code inherited from libjpeg, and any modifications to that code.)\n"
- "\n"
- "2. The Modified (3-clause) BSD License\n"
- " This license covers the TurboJPEG API library and associated programs.\n"
- "\n"
- "3. The zlib License\n"
- " This license is a subset of the other two, and it covers the libjpeg-turbo\n"
- " SIMD extensions.\n"
- "\n"
- "-----BEGIN IJG LICENSE-----\n"
- "libjpeg-turbo note: This file has been modified by The libjpeg-turbo Project\n"
- "to include only information relevant to libjpeg-turbo, to wordsmith certain\n"
- "sections, and to remove impolitic language that existed in the libjpeg v8\n"
- "README. It is included only for reference. Please see README.md for\n"
- "information specific to libjpeg-turbo.\n"
- "\n"
- "\n"
- "The Independent JPEG Group's JPEG software\n"
- "==========================================\n"
- "\n"
- "This distribution contains a release of the Independent JPEG Group's free JPEG\n"
- "software. You are welcome to redistribute this software and to use it for any\n"
- "purpose, subject to the conditions under LEGAL ISSUES, below.\n"
- "\n"
- "This software is the work of Tom Lane, Guido Vollbeding, Philip Gladstone,\n"
- "Bill Allombert, Jim Boucher, Lee Crocker, Bob Friesenhahn, Ben Jackson,\n"
- "Julian Minguillon, Luis Ortiz, George Phillips, Davide Rossi, Ge' Weijers,\n"
- "and other members of the Independent JPEG Group.\n"
- "\n"
- "IJG is not affiliated with the ISO/IEC JTC1/SC29/WG1 standards committee\n"
- "(also known as JPEG, together with ITU-T SG16).\n"
- "\n"
- "\n"
- "DOCUMENTATION ROADMAP\n"
- "=====================\n"
- "\n"
- "This file contains the following sections:\n"
- "\n"
- "OVERVIEW General description of JPEG and the IJG software.\n"
- "LEGAL ISSUES Copyright, lack of warranty, terms of distribution.\n"
- "REFERENCES Where to learn more about JPEG.\n"
- "ARCHIVE LOCATIONS Where to find newer versions of this software.\n"
- "FILE FORMAT WARS Software *not* to get.\n"
- "TO DO Plans for future IJG releases.\n"
- "\n"
- "Other documentation files in the distribution are:\n"
- "\n"
- "User documentation:\n"
- " usage.txt Usage instructions for cjpeg, djpeg, jpegtran,\n"
- " rdjpgcom, and wrjpgcom.\n"
- " *.1 Unix-style man pages for programs (same info as usage.txt).\n"
- " wizard.txt Advanced usage instructions for JPEG wizards only.\n"
- " change.log Version-to-version change highlights.\n"
- "Programmer and internal documentation:\n"
- " libjpeg.txt How to use the JPEG library in your own programs.\n"
- " example.c Sample code for calling the JPEG library.\n"
- " structure.txt Overview of the JPEG library's internal structure.\n"
- " coderules.txt Coding style rules --- please read if you contribute code.\n"
- "\n"
- "Please read at least usage.txt. Some information can also be found in the JPEG\n"
- "FAQ (Frequently Asked Questions) article. See ARCHIVE LOCATIONS below to find\n"
- "out where to obtain the FAQ article.\n"
- "\n"
- "If you want to understand how the JPEG code works, we suggest reading one or\n"
- "more of the REFERENCES, then looking at the documentation files (in roughly\n"
- "the order listed) before diving into the code.\n"
- "\n"
- "\n"
- "OVERVIEW\n"
- "========\n"
- "\n"
- "This package contains C software to implement JPEG image encoding, decoding,\n"
- "and transcoding. JPEG (pronounced \"jay-peg\") is a standardized compression\n"
- "method for full-color and grayscale images. JPEG's strong suit is compressing\n"
- "photographic images or other types of images that have smooth color and\n"
- "brightness transitions between neighboring pixels. Images with sharp lines or\n"
- "other abrupt features may not compress well with JPEG, and a higher JPEG\n"
- "quality may have to be used to avoid visible compression artifacts with such\n"
- "images.\n"
- "\n"
- "JPEG is lossy, meaning that the output pixels are not necessarily identical to\n"
- "the input pixels. However, on photographic content and other \"smooth\" images,\n"
- "very good compression ratios can be obtained with no visible compression\n"
- "artifacts, and extremely high compression ratios are possible if you are\n"
- "willing to sacrifice image quality (by reducing the \"quality\" setting in the\n"
- "compressor.)\n"
- "\n"
- "This software implements JPEG baseline, extended-sequential, and progressive\n"
- "compression processes. Provision is made for supporting all variants of these\n"
- "processes, although some uncommon parameter settings aren't implemented yet.\n"
- "We have made no provision for supporting the hierarchical or lossless\n"
- "processes defined in the standard.\n"
- "\n"
- "We provide a set of library routines for reading and writing JPEG image files,\n"
- "plus two sample applications \"cjpeg\" and \"djpeg\", which use the library to\n"
- "perform conversion between JPEG and some other popular image file formats.\n"
- "The library is intended to be reused in other applications.\n"
- "\n"
- "In order to support file conversion and viewing software, we have included\n"
- "considerable functionality beyond the bare JPEG coding/decoding capability;\n"
- "for example, the color quantization modules are not strictly part of JPEG\n"
- "decoding, but they are essential for output to colormapped file formats or\n"
- "colormapped displays. These extra functions can be compiled out of the\n"
- "library if not required for a particular application.\n"
- "\n"
- "We have also included \"jpegtran\", a utility for lossless transcoding between\n"
- "different JPEG processes, and \"rdjpgcom\" and \"wrjpgcom\", two simple\n"
- "applications for inserting and extracting textual comments in JFIF files.\n"
- "\n"
- "The emphasis in designing this software has been on achieving portability and\n"
- "flexibility, while also making it fast enough to be useful. In particular,\n"
- "the software is not intended to be read as a tutorial on JPEG. (See the\n"
- "REFERENCES section for introductory material.) Rather, it is intended to\n"
- "be reliable, portable, industrial-strength code. We do not claim to have\n"
- "achieved that goal in every aspect of the software, but we strive for it.\n"
- "\n"
- "We welcome the use of this software as a component of commercial products.\n"
- "No royalty is required, but we do ask for an acknowledgement in product\n"
- "documentation, as described under LEGAL ISSUES.\n"
- "\n"
- "\n"
- "LEGAL ISSUES\n"
- "============\n"
- "\n"
- "In plain English:\n"
- "\n"
- "1. We don't promise that this software works. (But if you find any bugs,\n"
- " please let us know!)\n"
- "2. You can use this software for whatever you want. You don't have to pay us.\n"
- "3. You may not pretend that you wrote this software. If you use it in a\n"
- " program, you must acknowledge somewhere in your documentation that\n"
- " you've used the IJG code.\n"
- "\n"
- "In legalese:\n"
- "\n"
- "The authors make NO WARRANTY or representation, either express or implied,\n"
- "with respect to this software, its quality, accuracy, merchantability, or\n"
- "fitness for a particular purpose. This software is provided \"AS IS\", and you,\n"
- "its user, assume the entire risk as to its quality and accuracy.\n"
- "\n"
- "This software is copyright (C) 1991-2016, Thomas G. Lane, Guido Vollbeding.\n"
- "All Rights Reserved except as specified below.\n"
- "\n"
- "Permission is hereby granted to use, copy, modify, and distribute this\n"
- "software (or portions thereof) for any purpose, without fee, subject to these\n"
- "conditions:\n"
- "(1) If any part of the source code for this software is distributed, then this\n"
- "README file must be included, with this copyright and no-warranty notice\n"
- "unaltered; and any additions, deletions, or changes to the original files\n"
- "must be clearly indicated in accompanying documentation.\n"
- "(2) If only executable code is distributed, then the accompanying\n"
- "documentation must state that \"this software is based in part on the work of\n"
- "the Independent JPEG Group\".\n"
- "(3) Permission for use of this software is granted only if the user accepts\n"
- "full responsibility for any undesirable consequences; the authors accept\n"
- "NO LIABILITY for damages of any kind.\n"
- "\n"
- "These conditions apply to any software derived from or based on the IJG code,\n"
- "not just to the unmodified library. If you use our work, you ought to\n"
- "acknowledge us.\n"
- "\n"
- "Permission is NOT granted for the use of any IJG author's name or company name\n"
- "in advertising or publicity relating to this software or products derived from\n"
- "it. This software may be referred to only as \"the Independent JPEG Group's\n"
- "software\".\n"
- "\n"
- "We specifically permit and encourage the use of this software as the basis of\n"
- "commercial products, provided that all warranty or liability claims are\n"
- "assumed by the product vendor.\n"
- "\n"
- "\n"
- "The Unix configuration script \"configure\" was produced with GNU Autoconf.\n"
- "It is copyright by the Free Software Foundation but is freely distributable.\n"
- "The same holds for its supporting scripts (config.guess, config.sub,\n"
- "ltmain.sh). Another support script, install-sh, is copyright by X Consortium\n"
- "but is also freely distributable.\n"
- "\n"
- "The IJG distribution formerly included code to read and write GIF files.\n"
- "To avoid entanglement with the Unisys LZW patent (now expired), GIF reading\n"
- "support has been removed altogether, and the GIF writer has been simplified\n"
- "to produce \"uncompressed GIFs\". This technique does not use the LZW\n"
- "algorithm; the resulting GIF files are larger than usual, but are readable\n"
- "by all standard GIF decoders.\n"
- "\n"
- "We are required to state that\n"
- " \"The Graphics Interchange Format(c) is the Copyright property of\n"
- " CompuServe Incorporated. GIF(sm) is a Service Mark property of\n"
- " CompuServe Incorporated.\"\n"
- "\n"
- "\n"
- "REFERENCES\n"
- "==========\n"
- "\n"
- "We recommend reading one or more of these references before trying to\n"
- "understand the innards of the JPEG software.\n"
- "\n"
- "The best short technical introduction to the JPEG compression algorithm is\n"
- " Wallace, Gregory K. \"The JPEG Still Picture Compression Standard\",\n"
- " Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.\n"
- "(Adjacent articles in that issue discuss MPEG motion picture compression,\n"
- "applications of JPEG, and related topics.) If you don't have the CACM issue\n"
- "handy, a PDF file containing a revised version of Wallace's article is\n"
- "available at http://www.ijg.org/files/Wallace.JPEG.pdf. The file (actually\n"
- "a preprint for an article that appeared in IEEE Trans. Consumer Electronics)\n"
- "omits the sample images that appeared in CACM, but it includes corrections\n"
- "and some added material. Note: the Wallace article is copyright ACM and IEEE,\n"
- "and it may not be used for commercial purposes.\n"
- "\n"
- "A somewhat less technical, more leisurely introduction to JPEG can be found in\n"
- "\"The Data Compression Book\" by Mark Nelson and Jean-loup Gailly, published by\n"
- "M&T Books (New York), 2nd ed. 1996, ISBN 1-55851-434-1. This book provides\n"
- "good explanations and example C code for a multitude of compression methods\n"
- "including JPEG. It is an excellent source if you are comfortable reading C\n"
- "code but don't know much about data compression in general. The book's JPEG\n"
- "sample code is far from industrial-strength, but when you are ready to look\n"
- "at a full implementation, you've got one here...\n"
- "\n"
- "The best currently available description of JPEG is the textbook \"JPEG Still\n"
- "Image Data Compression Standard\" by William B. Pennebaker and Joan L.\n"
- "Mitchell, published by Van Nostrand Reinhold, 1993, ISBN 0-442-01272-1.\n"
- "Price US$59.95, 638 pp. The book includes the complete text of the ISO JPEG\n"
- "standards (DIS 10918-1 and draft DIS 10918-2).\n"
- "\n"
- "The original JPEG standard is divided into two parts, Part 1 being the actual\n"
- "specification, while Part 2 covers compliance testing methods. Part 1 is\n"
- "titled \"Digital Compression and Coding of Continuous-tone Still Images,\n"
- "Part 1: Requirements and guidelines\" and has document numbers ISO/IEC IS\n"
- "10918-1, ITU-T T.81. Part 2 is titled \"Digital Compression and Coding of\n"
- "Continuous-tone Still Images, Part 2: Compliance testing\" and has document\n"
- "numbers ISO/IEC IS 10918-2, ITU-T T.83.\n"
- "\n"
- "The JPEG standard does not specify all details of an interchangeable file\n"
- "format. For the omitted details we follow the \"JFIF\" conventions, revision\n"
- "1.02. JFIF 1.02 has been adopted as an Ecma International Technical Report\n"
- "and thus received a formal publication status. It is available as a free\n"
- "download in PDF format from\n"
- "http://www.ecma-international.org/publications/techreports/E-TR-098.htm.\n"
- "A PostScript version of the JFIF document is available at\n"
- "http://www.ijg.org/files/jfif.ps.gz. There is also a plain text version at\n"
- "http://www.ijg.org/files/jfif.txt.gz, but it is missing the figures.\n"
- "\n"
- "The TIFF 6.0 file format specification can be obtained by FTP from\n"
- "ftp://ftp.sgi.com/graphics/tiff/TIFF6.ps.gz. The JPEG incorporation scheme\n"
- "found in the TIFF 6.0 spec of 3-June-92 has a number of serious problems.\n"
- "IJG does not recommend use of the TIFF 6.0 design (TIFF Compression tag 6).\n"
- "Instead, we recommend the JPEG design proposed by TIFF Technical Note #2\n"
- "(Compression tag 7). Copies of this Note can be obtained from\n"
- "http://www.ijg.org/files/. It is expected that the next revision\n"
- "of the TIFF spec will replace the 6.0 JPEG design with the Note's design.\n"
- "Although IJG's own code does not support TIFF/JPEG, the free libtiff library\n"
- "uses our library to implement TIFF/JPEG per the Note.\n"
- "\n"
- "\n"
- "ARCHIVE LOCATIONS\n"
- "=================\n"
- "\n"
- "The \"official\" archive site for this software is www.ijg.org.\n"
- "The most recent released version can always be found there in\n"
- "directory \"files\".\n"
- "\n"
- "The JPEG FAQ (Frequently Asked Questions) article is a source of some\n"
- "general information about JPEG.\n"
- "It is available on the World Wide Web at http://www.faqs.org/faqs/jpeg-faq/\n"
- "and other news.answers archive sites, including the official news.answers\n"
- "archive at rtfm.mit.edu: ftp://rtfm.mit.edu/pub/usenet/news.answers/jpeg-faq/.\n"
- "If you don't have Web or FTP access, send e-mail to mail-server@rtfm.mit.edu\n"
- "with body\n"
- " send usenet/news.answers/jpeg-faq/part1\n"
- " send usenet/news.answers/jpeg-faq/part2\n"
- "\n"
- "\n"
- "FILE FORMAT WARS\n"
- "================\n"
- "\n"
- "The ISO/IEC JTC1/SC29/WG1 standards committee (also known as JPEG, together\n"
- "with ITU-T SG16) currently promotes different formats containing the name\n"
- "\"JPEG\" which are incompatible with original DCT-based JPEG. IJG therefore does\n"
- "not support these formats (see REFERENCES). Indeed, one of the original\n"
- "reasons for developing this free software was to help force convergence on\n"
- "common, interoperable format standards for JPEG files.\n"
- "Don't use an incompatible file format!\n"
- "(In any case, our decoder will remain capable of reading existing JPEG\n"
- "image files indefinitely.)\n"
- "\n"
- "\n"
- "TO DO\n"
- "=====\n"
- "\n"
- "Please send bug reports, offers of help, etc. to jpeg-info@jpegclub.org.\n"
- "-----END IJG LICENSE-----\n"
- "\n"
- "-----BEGIN TURBOJPEG LICENSE-----\n"
- "/*\n"
- " * Copyright (C)2009-2016 D. R. Commander. All Rights Reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions are met:\n"
- " *\n"
- " * - Redistributions of source code must retain the above copyright notice,\n"
- " * this list of conditions and the following disclaimer.\n"
- " * - Redistributions in binary form must reproduce the above copyright notice,\n"
- " * this list of conditions and the following disclaimer in the documentation\n"
- " * and/or other materials provided with the distribution.\n"
- " * - Neither the name of the libjpeg-turbo Project nor the names of its\n"
- " * contributors may be used to endorse or promote products derived from this\n"
- " * software without specific prior written permission.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\",\n"
- " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE\n"
- " * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
- " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n"
- " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n"
- " * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n"
- " * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n"
- " * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n"
- " * POSSIBILITY OF SUCH DAMAGE.\n"
- " */\n"
- "-----END TURBOJPEG LICENSE-----\n"
- "\n"
- "\n"
- "-----BEGIN ZLIB LICENSE-----\n"
- "; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB\n"
- "; Copyright (C) 2010, D. R. Commander.\n"
- ";\n"
- "; Based on the x86 SIMD extension for IJG JPEG library - version 1.02\n"
- ";\n"
- "; Copyright (C) 1999-2006, MIYASAKA Masaru.\n"
- ";\n"
- "; This software is provided 'as-is', without any express or implied\n"
- "; warranty. In no event will the authors be held liable for any damages\n"
- "; arising from the use of this software.\n"
- ";\n"
- "; Permission is granted to anyone to use this software for any purpose,\n"
- "; including commercial applications, and to alter it and redistribute it\n"
- "; freely, subject to the following restrictions:\n"
- ";\n"
- "; 1. The origin of this software must not be misrepresented; you must not\n"
- "; claim that you wrote the original software. If you use this software\n"
- "; in a product, an acknowledgment in the product documentation would be\n"
- "; appreciated but is not required.\n"
- "; 2. Altered source versions must be plainly marked as such, and must not be\n"
- "; misrepresented as being the original software.\n"
- "; 3. This notice may not be removed or altered from any source distribution.\n"
- "-----END ZLIB LICENSE-----";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseZeroCIce = "Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.\n"
- "\n"
- "This copy of Ice is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License version 2 as\n"
- "published by the Free Software Foundation.\n"
- "\n"
- "Ice is distributed in the hope that it will be useful, but WITHOUT ANY\n"
- "WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n"
- "FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n"
- "details.\n"
- "\n"
- "You should have received a copy of the GNU General Public License version\n"
- "2 along with this program; if not, see http://www.gnu.org/licenses.\n"
- "\n"
- "Linking Ice statically or dynamically with other software (such as a \n"
- "library, module or application) is making a combined work based on Ice. \n"
- "Thus, the terms and conditions of the GNU General Public License version\n"
- "2 cover this combined work.\n"
- "\n"
- "If such software can only be used together with Ice, then not only the \n"
- "combined work but the software itself is a work derived from Ice and as\n"
- "such shall be licensed under the terms of the GNU General Public License \n"
- "version 2. This includes the situation where Ice is only being used \n"
- "through an abstraction layer.\n"
- "\n"
- "As a special exception to the above, ZeroC grants to the copyright \n"
- "holders and contributors of the Mumble project (http://www.mumble.info) \n"
- "the permission to license the Ice-based software they contribute to \n"
- "Mumble under the terms of the BSD license. This exception does not extend\n"
- "to the parts of Ice used by Mumble, or to any other derived work: as a \n"
- "whole, any work based on Ice shall be licensed under the terms and \n"
- "conditions of the GNU General Public License version 2.\n"
- "\n"
- "You may also combine Ice with any software not derived from Ice, provided\n"
- "the license of such software is compatible with the GNU General Public \n"
- "License version 2. In addition, as a special exception, ZeroC grants you\n"
- "permission to combine Ice with:\n"
- " \n"
- " - the OpenSSL library, or with a modified version of the OpenSSL library\n"
- " that uses the same license as OpenSSL\n"
- "\n"
- " - any library not derived from Ice and licensed under the terms of\n"
- " the Apache License, version 2.0 \n"
- " (http://www.apache.org/licenses/LICENSE-2.0.html) \n"
- "\n"
- "If you modify this copy of Ice, you may extend any of the exceptions \n"
- "provided above to your version of Ice, but you are not obligated to \n"
- "do so.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseMcpp = "/*-\n"
- " * Copyright (c) 1998, 2002-2008 Kiyoshi Matsui <kmatsui@t3.rim.or.jp>\n"
- " * All rights reserved.\n"
- " *\n"
- " * This software including the files in this directory is provided under\n"
- " * the following license.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND\n"
- " * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE\n"
- " * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n"
- " * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n"
- " * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n"
- " * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n"
- " * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
- " * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
- " * SUCH DAMAGE.\n"
- " */";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseMDNSResponder = "The majority of the source code in the mDNSResponder project is licensed\n"
- "under the terms of the Apache License, Version 2.0, available from:\n"
- " <http://www.apache.org/licenses/LICENSE-2.0>\n"
- "\n"
- "To accommodate license compatibility with the widest possible range\n"
- "of client code licenses, the shared library code, which is linked\n"
- "at runtime into the same address space as the client using it, is\n"
- "licensed under the terms of the \"Three-Clause BSD License\".\n"
- "\n"
- "The Linux Name Service Switch code, contributed by National ICT\n"
- "Australia Ltd (NICTA) is licensed under the terms of the NICTA Public\n"
- "Software Licence (which is substantially similar to the \"Three-Clause\n"
- "BSD License\", with some additional language pertaining to Australian law).";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licensePCRE = "PCRE LICENCE\n"
- "------------\n"
- "\n"
- "PCRE is a library of functions to support regular expressions whose syntax\n"
- "and semantics are as close as possible to those of the Perl 5 language.\n"
- "\n"
- "Release 8 of PCRE is distributed under the terms of the \"BSD\" licence, as\n"
- "specified below. The documentation for PCRE, supplied in the \"doc\"\n"
- "directory, is distributed under the same terms as the software itself. The data\n"
- "in the testdata directory is not copyrighted and is in the public domain.\n"
- "\n"
- "The basic library functions are written in C and are freestanding. Also\n"
- "included in the distribution is a set of C++ wrapper functions, and a\n"
- "just-in-time compiler that can be used to optimize pattern matching. These\n"
- "are both optional features that can be omitted when the library is built.\n"
- "\n"
- "\n"
- "THE BASIC LIBRARY FUNCTIONS\n"
- "---------------------------\n"
- "\n"
- "Written by: Philip Hazel\n"
- "Email local part: ph10\n"
- "Email domain: cam.ac.uk\n"
- "\n"
- "University of Cambridge Computing Service,\n"
- "Cambridge, England.\n"
- "\n"
- "Copyright (c) 1997-2017 University of Cambridge\n"
- "All rights reserved.\n"
- "\n"
- "\n"
- "PCRE JUST-IN-TIME COMPILATION SUPPORT\n"
- "-------------------------------------\n"
- "\n"
- "Written by: Zoltan Herczeg\n"
- "Email local part: hzmester\n"
- "Emain domain: freemail.hu\n"
- "\n"
- "Copyright(c) 2010-2017 Zoltan Herczeg\n"
- "All rights reserved.\n"
- "\n"
- "\n"
- "STACK-LESS JUST-IN-TIME COMPILER\n"
- "--------------------------------\n"
- "\n"
- "Written by: Zoltan Herczeg\n"
- "Email local part: hzmester\n"
- "Emain domain: freemail.hu\n"
- "\n"
- "Copyright(c) 2009-2017 Zoltan Herczeg\n"
- "All rights reserved.\n"
- "\n"
- "\n"
- "THE C++ WRAPPER FUNCTIONS\n"
- "-------------------------\n"
- "\n"
- "Contributed by: Google Inc.\n"
- "\n"
- "Copyright (c) 2007-2012, Google Inc.\n"
- "All rights reserved.\n"
- "\n"
- "\n"
- "THE \"BSD\" LICENCE\n"
- "-----------------\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions are met:\n"
- "\n"
- " * Redistributions of source code must retain the above copyright notice,\n"
- " this list of conditions and the following disclaimer.\n"
- "\n"
- " * Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "\n"
- " * Neither the name of the University of Cambridge nor the name of Google\n"
- " Inc. nor the names of their contributors may be used to endorse or\n"
- " promote products derived from this software without specific prior\n"
- " written permission.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n"
- "AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- "ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n"
- "LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
- "CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n"
- "SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n"
- "INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n"
- "CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n"
- "ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n"
- "POSSIBILITY OF SUCH DAMAGE.\n"
- "\n"
- "End";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseQt = " GNU LESSER GENERAL PUBLIC LICENSE\n"
- "\n"
- " The Qt Toolkit is Copyright (C) 2015 The Qt Company Ltd.\n"
- " Contact: http://www.qt.io/licensing/\n"
- "\n"
- " You may use, distribute and copy the Qt Toolkit under the terms of\n"
- " GNU Lesser General Public License version 2.1, which is displayed below.\n"
- "\n"
- "-------------------------------------------------------------------------\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " Version 2.1, February 1999\n"
- "\n"
- " Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n"
- " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- "[This is the first released version of the Lesser GPL. It also counts\n"
- " as the successor of the GNU Library Public License, version 2, hence\n"
- " the version number 2.1.]\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "Licenses are intended to guarantee your freedom to share and change\n"
- "free software--to make sure the software is free for all its users.\n"
- "\n"
- " This license, the Lesser General Public License, applies to some\n"
- "specially designated software packages--typically libraries--of the\n"
- "Free Software Foundation and other authors who decide to use it. You\n"
- "can use it too, but we suggest you first think carefully about whether\n"
- "this license or the ordinary General Public License is the better\n"
- "strategy to use in any particular case, based on the explanations below.\n"
- "\n"
- " When we speak of free software, we are referring to freedom of use,\n"
- "not price. Our General Public Licenses are designed to make sure that\n"
- "you have the freedom to distribute copies of free software (and charge\n"
- "for this service if you wish); that you receive source code or can get\n"
- "it if you want it; that you can change the software and use pieces of\n"
- "it in new free programs; and that you are informed that you can do\n"
- "these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "distributors to deny you these rights or to ask you to surrender these\n"
- "rights. These restrictions translate to certain responsibilities for\n"
- "you if you distribute copies of the library or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of the library, whether gratis\n"
- "or for a fee, you must give the recipients all the rights that we gave\n"
- "you. You must make sure that they, too, receive or can get the source\n"
- "code. If you link other code with the library, you must provide\n"
- "complete object files to the recipients, so that they can relink them\n"
- "with the library after making changes to the library and recompiling\n"
- "it. And you must show them these terms so they know their rights.\n"
- "\n"
- " We protect your rights with a two-step method: (1) we copyright the\n"
- "library, and (2) we offer you this license, which gives you legal\n"
- "permission to copy, distribute and/or modify the library.\n"
- "\n"
- " To protect each distributor, we want to make it very clear that\n"
- "there is no warranty for the free library. Also, if the library is\n"
- "modified by someone else and passed on, the recipients should know\n"
- "that what they have is not the original version, so that the original\n"
- "author's reputation will not be affected by problems that might be\n"
- "introduced by others.\n"
- "\n"
- " Finally, software patents pose a constant threat to the existence of\n"
- "any free program. We wish to make sure that a company cannot\n"
- "effectively restrict the users of a free program by obtaining a\n"
- "restrictive license from a patent holder. Therefore, we insist that\n"
- "any patent license obtained for a version of the library must be\n"
- "consistent with the full freedom of use specified in this license.\n"
- "\n"
- " Most GNU software, including some libraries, is covered by the\n"
- "ordinary GNU General Public License. This license, the GNU Lesser\n"
- "General Public License, applies to certain designated libraries, and\n"
- "is quite different from the ordinary General Public License. We use\n"
- "this license for certain libraries in order to permit linking those\n"
- "libraries into non-free programs.\n"
- "\n"
- " When a program is linked with a library, whether statically or using\n"
- "a shared library, the combination of the two is legally speaking a\n"
- "combined work, a derivative of the original library. The ordinary\n"
- "General Public License therefore permits such linking only if the\n"
- "entire combination fits its criteria of freedom. The Lesser General\n"
- "Public License permits more lax criteria for linking other code with\n"
- "the library.\n"
- "\n"
- " We call this license the \"Lesser\" General Public License because it\n"
- "does Less to protect the user's freedom than the ordinary General\n"
- "Public License. It also provides other free software developers Less\n"
- "of an advantage over competing non-free programs. These disadvantages\n"
- "are the reason we use the ordinary General Public License for many\n"
- "libraries. However, the Lesser license provides advantages in certain\n"
- "special circumstances.\n"
- "\n"
- " For example, on rare occasions, there may be a special need to\n"
- "encourage the widest possible use of a certain library, so that it becomes\n"
- "a de-facto standard. To achieve this, non-free programs must be\n"
- "allowed to use the library. A more frequent case is that a free\n"
- "library does the same job as widely used non-free libraries. In this\n"
- "case, there is little to gain by limiting the free library to free\n"
- "software only, so we use the Lesser General Public License.\n"
- "\n"
- " In other cases, permission to use a particular library in non-free\n"
- "programs enables a greater number of people to use a large body of\n"
- "free software. For example, permission to use the GNU C Library in\n"
- "non-free programs enables many more people to use the whole GNU\n"
- "operating system, as well as its variant, the GNU/Linux operating\n"
- "system.\n"
- "\n"
- " Although the Lesser General Public License is Less protective of the\n"
- "users' freedom, it does ensure that the user of a program that is\n"
- "linked with the Library has the freedom and the wherewithal to run\n"
- "that program using a modified version of the Library.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow. Pay close attention to the difference between a\n"
- "\"work based on the library\" and a \"work that uses the library\". The\n"
- "former contains code derived from the library, whereas the latter must\n"
- "be combined with the library in order to run.\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License Agreement applies to any software library or other\n"
- "program which contains a notice placed by the copyright holder or\n"
- "other authorized party saying it may be distributed under the terms of\n"
- "this Lesser General Public License (also called \"this License\").\n"
- "Each licensee is addressed as \"you\".\n"
- "\n"
- " A \"library\" means a collection of software functions and/or data\n"
- "prepared so as to be conveniently linked with application programs\n"
- "(which use some of those functions and data) to form executables.\n"
- "\n"
- " The \"Library\", below, refers to any such software library or work\n"
- "which has been distributed under these terms. A \"work based on the\n"
- "Library\" means either the Library or any derivative work under\n"
- "copyright law: that is to say, a work containing the Library or a\n"
- "portion of it, either verbatim or with modifications and/or translated\n"
- "straightforwardly into another language. (Hereinafter, translation is\n"
- "included without limitation in the term \"modification\".)\n"
- "\n"
- " \"Source code\" for a work means the preferred form of the work for\n"
- "making modifications to it. For a library, complete source code means\n"
- "all the source code for all modules it contains, plus any associated\n"
- "interface definition files, plus the scripts used to control compilation\n"
- "and installation of the library.\n"
- "\n"
- " Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running a program using the Library is not restricted, and output from\n"
- "such a program is covered only if its contents constitute a work based\n"
- "on the Library (independent of the use of the Library in a tool for\n"
- "writing it). Whether that is true depends on what the Library does\n"
- "and what the program that uses the Library does.\n"
- "\n"
- " 1. You may copy and distribute verbatim copies of the Library's\n"
- "complete source code as you receive it, in any medium, provided that\n"
- "you conspicuously and appropriately publish on each copy an\n"
- "appropriate copyright notice and disclaimer of warranty; keep intact\n"
- "all the notices that refer to this License and to the absence of any\n"
- "warranty; and distribute a copy of this License along with the\n"
- "Library.\n"
- "\n"
- " You may charge a fee for the physical act of transferring a copy,\n"
- "and you may at your option offer warranty protection in exchange for a\n"
- "fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Library or any portion\n"
- "of it, thus forming a work based on the Library, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) The modified work must itself be a software library.\n"
- "\n"
- " b) You must cause the files modified to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " c) You must cause the whole of the work to be licensed at no\n"
- " charge to all third parties under the terms of this License.\n"
- "\n"
- " d) If a facility in the modified Library refers to a function or a\n"
- " table of data to be supplied by an application program that uses\n"
- " the facility, other than as an argument passed when the facility\n"
- " is invoked, then you must make a good faith effort to ensure that,\n"
- " in the event an application does not supply such function or\n"
- " table, the facility still operates, and performs whatever part of\n"
- " its purpose remains meaningful.\n"
- "\n"
- " (For example, a function in a library to compute square roots has\n"
- " a purpose that is entirely well-defined independent of the\n"
- " application. Therefore, Subsection 2d requires that any\n"
- " application-supplied function or table used by this function must\n"
- " be optional: if the application does not supply it, the square\n"
- " root function must still compute square roots.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Library,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Library, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote\n"
- "it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Library.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Library\n"
- "with the Library (or with a work based on the Library) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may opt to apply the terms of the ordinary GNU General Public\n"
- "License instead of this License to a given copy of the Library. To do\n"
- "this, you must alter all the notices that refer to this License, so\n"
- "that they refer to the ordinary GNU General Public License, version 2,\n"
- "instead of to this License. (If a newer version than version 2 of the\n"
- "ordinary GNU General Public License has appeared, then you can specify\n"
- "that version instead if you wish.) Do not make any other change in\n"
- "these notices.\n"
- "\n"
- " Once this change is made in a given copy, it is irreversible for\n"
- "that copy, so the ordinary GNU General Public License applies to all\n"
- "subsequent copies and derivative works made from that copy.\n"
- "\n"
- " This option is useful when you wish to copy part of the code of\n"
- "the Library into a program that is not a library.\n"
- "\n"
- " 4. You may copy and distribute the Library (or a portion or\n"
- "derivative of it, under Section 2) in object code or executable form\n"
- "under the terms of Sections 1 and 2 above provided that you accompany\n"
- "it with the complete corresponding machine-readable source code, which\n"
- "must be distributed under the terms of Sections 1 and 2 above on a\n"
- "medium customarily used for software interchange.\n"
- "\n"
- " If distribution of object code is made by offering access to copy\n"
- "from a designated place, then offering equivalent access to copy the\n"
- "source code from the same place satisfies the requirement to\n"
- "distribute the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 5. A program that contains no derivative of any portion of the\n"
- "Library, but is designed to work with the Library by being compiled or\n"
- "linked with it, is called a \"work that uses the Library\". Such a\n"
- "work, in isolation, is not a derivative work of the Library, and\n"
- "therefore falls outside the scope of this License.\n"
- "\n"
- " However, linking a \"work that uses the Library\" with the Library\n"
- "creates an executable that is a derivative of the Library (because it\n"
- "contains portions of the Library), rather than a \"work that uses the\n"
- "library\". The executable is therefore covered by this License.\n"
- "Section 6 states terms for distribution of such executables.\n"
- "\n"
- " When a \"work that uses the Library\" uses material from a header file\n"
- "that is part of the Library, the object code for the work may be a\n"
- "derivative work of the Library even though the source code is not.\n"
- "Whether this is true is especially significant if the work can be\n"
- "linked without the Library, or if the work is itself a library. The\n"
- "threshold for this to be true is not precisely defined by law.\n"
- "\n"
- " If such an object file uses only numerical parameters, data\n"
- "structure layouts and accessors, and small macros and small inline\n"
- "functions (ten lines or less in length), then the use of the object\n"
- "file is unrestricted, regardless of whether it is legally a derivative\n"
- "work. (Executables containing this object code plus portions of the\n"
- "Library will still fall under Section 6.)\n"
- "\n"
- " Otherwise, if the work is a derivative of the Library, you may\n"
- "distribute the object code for the work under the terms of Section 6.\n"
- "Any executables containing that work also fall under Section 6,\n"
- "whether or not they are linked directly with the Library itself.\n"
- "\n"
- " 6. As an exception to the Sections above, you may also combine or\n"
- "link a \"work that uses the Library\" with the Library to produce a\n"
- "work containing portions of the Library, and distribute that work\n"
- "under terms of your choice, provided that the terms permit\n"
- "modification of the work for the customer's own use and reverse\n"
- "engineering for debugging such modifications.\n"
- "\n"
- " You must give prominent notice with each copy of the work that the\n"
- "Library is used in it and that the Library and its use are covered by\n"
- "this License. You must supply a copy of this License. If the work\n"
- "during execution displays copyright notices, you must include the\n"
- "copyright notice for the Library among them, as well as a reference\n"
- "directing the user to the copy of this License. Also, you must do one\n"
- "of these things:\n"
- "\n"
- " a) Accompany the work with the complete corresponding\n"
- " machine-readable source code for the Library including whatever\n"
- " changes were used in the work (which must be distributed under\n"
- " Sections 1 and 2 above); and, if the work is an executable linked\n"
- " with the Library, with the complete machine-readable \"work that\n"
- " uses the Library\", as object code and/or source code, so that the\n"
- " user can modify the Library and then relink to produce a modified\n"
- " executable containing the modified Library. (It is understood\n"
- " that the user who changes the contents of definitions files in the\n"
- " Library will not necessarily be able to recompile the application\n"
- " to use the modified definitions.)\n"
- "\n"
- " b) Use a suitable shared library mechanism for linking with the\n"
- " Library. A suitable mechanism is one that (1) uses at run time a\n"
- " copy of the library already present on the user's computer system,\n"
- " rather than copying library functions into the executable, and (2)\n"
- " will operate properly with a modified version of the library, if\n"
- " the user installs one, as long as the modified version is\n"
- " interface-compatible with the version that the work was made with.\n"
- "\n"
- " c) Accompany the work with a written offer, valid for at\n"
- " least three years, to give the same user the materials\n"
- " specified in Subsection 6a, above, for a charge no more\n"
- " than the cost of performing this distribution.\n"
- "\n"
- " d) If distribution of the work is made by offering access to copy\n"
- " from a designated place, offer equivalent access to copy the above\n"
- " specified materials from the same place.\n"
- "\n"
- " e) Verify that the user has already received a copy of these\n"
- " materials or that you have already sent this user a copy.\n"
- "\n"
- " For an executable, the required form of the \"work that uses the\n"
- "Library\" must include any data and utility programs needed for\n"
- "reproducing the executable from it. However, as a special exception,\n"
- "the materials to be distributed need not include anything that is\n"
- "normally distributed (in either source or binary form) with the major\n"
- "components (compiler, kernel, and so on) of the operating system on\n"
- "which the executable runs, unless that component itself accompanies\n"
- "the executable.\n"
- "\n"
- " It may happen that this requirement contradicts the license\n"
- "restrictions of other proprietary libraries that do not normally\n"
- "accompany the operating system. Such a contradiction means you cannot\n"
- "use both them and the Library together in an executable that you\n"
- "distribute.\n"
- "\n"
- " 7. You may place library facilities that are a work based on the\n"
- "Library side-by-side in a single library together with other library\n"
- "facilities not covered by this License, and distribute such a combined\n"
- "library, provided that the separate distribution of the work based on\n"
- "the Library and of the other library facilities is otherwise\n"
- "permitted, and provided that you do these two things:\n"
- "\n"
- " a) Accompany the combined library with a copy of the same work\n"
- " based on the Library, uncombined with any other library\n"
- " facilities. This must be distributed under the terms of the\n"
- " Sections above.\n"
- "\n"
- " b) Give prominent notice with the combined library of the fact\n"
- " that part of it is a work based on the Library, and explaining\n"
- " where to find the accompanying uncombined form of the same work.\n"
- "\n"
- " 8. You may not copy, modify, sublicense, link with, or distribute\n"
- "the Library except as expressly provided under this License. Any\n"
- "attempt otherwise to copy, modify, sublicense, link with, or\n"
- "distribute the Library is void, and will automatically terminate your\n"
- "rights under this License. However, parties who have received copies,\n"
- "or rights, from you under this License will not have their licenses\n"
- "terminated so long as such parties remain in full compliance.\n"
- "\n"
- " 9. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Library or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Library (or any work based on the\n"
- "Library), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Library or works based on it.\n"
- "\n"
- " 10. Each time you redistribute the Library (or any work based on the\n"
- "Library), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute, link with or modify the Library\n"
- "subject to these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties with\n"
- "this License.\n"
- "\n"
- " 11. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Library at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Library by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Library.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under any\n"
- "particular circumstance, the balance of the section is intended to apply,\n"
- "and the section as a whole is intended to apply in other circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 12. If the distribution and/or use of the Library is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Library under this License may add\n"
- "an explicit geographical distribution limitation excluding those countries,\n"
- "so that distribution is permitted only in or among countries not thus\n"
- "excluded. In such case, this License incorporates the limitation as if\n"
- "written in the body of this License.\n"
- "\n"
- " 13. The Free Software Foundation may publish revised and/or new\n"
- "versions of the Lesser General Public License from time to time.\n"
- "Such new versions will be similar in spirit to the present version,\n"
- "but may differ in detail to address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Library\n"
- "specifies a version number of this License which applies to it and\n"
- "\"any later version\", you have the option of following the terms and\n"
- "conditions either of that version or of any later version published by\n"
- "the Free Software Foundation. If the Library does not specify a\n"
- "license version number, you may choose any version ever published by\n"
- "the Free Software Foundation.\n"
- "\n"
- " 14. If you wish to incorporate parts of the Library into other free\n"
- "programs whose distribution conditions are incompatible with these,\n"
- "write to the author to ask for permission. For software which is\n"
- "copyrighted by the Free Software Foundation, write to the Free\n"
- "Software Foundation; we sometimes make exceptions for this. Our\n"
- "decision will be guided by the two goals of preserving the free status\n"
- "of all derivatives of our free software and of promoting the sharing\n"
- "and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\n"
- "WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\n"
- "EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\n"
- "OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\n"
- "KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\n"
- "LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\n"
- "THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n"
- "\n"
- " 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\n"
- "WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\n"
- "AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\n"
- "FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\n"
- "CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\n"
- "LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\n"
- "RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\n"
- "FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\n"
- "SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Libraries\n"
- "\n"
- " If you develop a new library, and you want it to be of the greatest\n"
- "possible use to the public, we recommend making it free software that\n"
- "everyone can redistribute and change. You can do so by permitting\n"
- "redistribution under these terms (or, alternatively, under the terms of the\n"
- "ordinary General Public License).\n"
- "\n"
- " To apply these terms, attach the following notices to the library. It is\n"
- "safest to attach them to the start of each source file to most effectively\n"
- "convey the exclusion of warranty; and each file should have at least the\n"
- "\"copyright\" line and a pointer to where the full notice is found.\n"
- "\n"
- " <one line to give the library's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This library is free software; you can redistribute it and/or\n"
- " modify it under the terms of the GNU Lesser General Public\n"
- " License as published by the Free Software Foundation; either\n"
- " version 2.1 of the License, or (at your option) any later version.\n"
- "\n"
- " This library is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- " Lesser General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU Lesser General Public\n"
- " License along with this library; if not, write to the Free Software\n"
- " Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or your\n"
- "school, if any, to sign a \"copyright disclaimer\" for the library, if\n"
- "necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the\n"
- " library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1990\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "That's all there is to it!";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseSQLite3 = "The author disclaims copyright to this source code. In place of\n"
- "a legal notice, here is a blessing:\n"
- "\n"
- " May you do good and not evil.\n"
- " May you find forgiveness for yourself and forgive others.\n"
- " May you share freely, never taking more than you give.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseXar = "/*\n"
- " * Copyright (c) 2005-2007 Rob Braun\n"
- " * All rights reserved.\n"
- " *\n"
- " * Redistribution and use in source and binary forms, with or without\n"
- " * modification, are permitted provided that the following conditions\n"
- " * are met:\n"
- " * 1. Redistributions of source code must retain the above copyright\n"
- " * notice, this list of conditions and the following disclaimer.\n"
- " * 2. Redistributions in binary form must reproduce the above copyright\n"
- " * notice, this list of conditions and the following disclaimer in the\n"
- " * documentation and/or other materials provided with the distribution.\n"
- " * 3. Neither the name of Rob Braun nor the names of his contributors\n"
- " * may be used to endorse or promote products derived from this software\n"
- " * without specific prior written permission.\n"
- " *\n"
- " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n"
- " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n"
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n"
- " * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n"
- " * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n"
- " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n"
- " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n"
- " * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n"
- " * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n"
- " * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n"
- " * POSSIBILITY OF SUCH DAMAGE.\n"
- " */\n"
- "/*\n"
- " * 03-Apr-2005\n"
- " * DRI: Rob Braun <bbraun@synack.net>\n"
- " */";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseAvahi = "Copyright 2004-2015 by the Avahi developers.\n"
- "\n"
- "avahi is free software; you can redistribute it and/or modify it\n"
- "under the terms of the GNU Lesser General Public License as\n"
- "published by the Free Software Foundation; either version 2.1 of the\n"
- "License, or (at your option) any later version.\n"
- "\n"
- "avahi is distributed in the hope that it will be useful, but WITHOUT\n"
- "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n"
- "or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General\n"
- "Public License for more details.\n"
- "\n"
- "You should have received a copy of the GNU Lesser General Public\n"
- "License along with avahi; if not, write to the Free Software\n"
- "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307\n"
- "USA.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseDBus = "D-Bus is licensed to you under your choice of the Academic Free\n"
- "License version 2.1, or the GNU General Public License version 2\n"
- "(or, at your option any later version).\n"
- "\n"
- "Both licenses are included here. Some of the standalone binaries are\n"
- "under the GPL only; in particular, but not limited to,\n"
- "tools/dbus-cleanup-sockets.c and test/decode-gcov.c. Each source code\n"
- "file is marked with the proper copyright information - if you find a\n"
- "file that isn't marked please bring it to our attention.\n"
- "\n"
- "The Academic Free License\n"
- "v. 2.1\n"
- "\n"
- "This Academic Free License (the \"License\") applies to any original work of "
- "authorship (the \"Original Work\") whose owner (the \"Licensor\") has placed the "
- "following notice immediately following the copyright notice for the Original Work:\n"
- "\n"
- "Licensed under the Academic Free License version 2.1\n"
- "\n"
- "1) Grant of Copyright License. Licensor hereby grants You a\n"
- "world-wide, royalty-free, non-exclusive, perpetual, sublicenseable\n"
- "license to do the following:\n"
- "\n"
- "a) to reproduce the Original Work in copies;\n"
- "\n"
- "b) to prepare derivative works (\"Derivative Works\") based upon the Original Work;\n"
- "\n"
- "c) to distribute copies of the Original Work and Derivative Works to the public;\n"
- "\n"
- "d) to perform the Original Work publicly; and\n"
- "\n"
- "e) to display the Original Work publicly.\n"
- "\n"
- "2) Grant of Patent License. Licensor hereby grants You a world-wide,\n"
- "royalty-free, non-exclusive, perpetual, sublicenseable license, under\n"
- "patent claims owned or controlled by the Licensor that are embodied in\n"
- "the Original Work as furnished by the Licensor, to make, use, sell and\n"
- "offer for sale the Original Work and Derivative Works.\n"
- "\n"
- "3) Grant of Source Code License. The term \"Source Code\" means the\n"
- "preferred form of the Original Work for making modifications to it and\n"
- "all available documentation describing how to modify the Original\n"
- "Work. Licensor hereby agrees to provide a machine-readable copy of the\n"
- "Source Code of the Original Work along with each copy of the Original\n"
- "Work that Licensor distributes. Licensor reserves the right to satisfy\n"
- "this obligation by placing a machine-readable copy of the Source Code\n"
- "in an information repository reasonably calculated to permit\n"
- "inexpensive and convenient access by You for as long as Licensor\n"
- "continues to distribute the Original Work, and by publishing the\n"
- "address of that information repository in a notice immediately\n"
- "following the copyright notice that applies to the Original Work.\n"
- "\n"
- "4) Exclusions From License Grant. Neither the names of Licensor, nor\n"
- "the names of any contributors to the Original Work, nor any of their\n"
- "trademarks or service marks, may be used to endorse or promote\n"
- "products derived from this Original Work without express prior written\n"
- "permission of the Licensor. Nothing in this License shall be deemed to\n"
- "grant any rights to trademarks, copyrights, patents, trade secrets or\n"
- "any other intellectual property of Licensor except as expressly stated\n"
- "herein. No patent license is granted to make, use, sell or offer to\n"
- "sell embodiments of any patent claims other than the licensed claims\n"
- "defined in Section 2. No right is granted to the trademarks of\n"
- "Licensor even if such marks are included in the Original Work. Nothing\n"
- "in this License shall be interpreted to prohibit Licensor from\n"
- "licensing under different terms from this License any Original Work\n"
- "that Licensor otherwise would have a right to license.\n"
- "\n"
- "5) This section intentionally omitted.\n"
- "\n"
- "6) Attribution Rights. You must retain, in the Source Code of any\n"
- "Derivative Works that You create, all copyright, patent or trademark\n"
- "notices from the Source Code of the Original Work, as well as any\n"
- "notices of licensing and any descriptive text identified therein as an\n"
- "\"Attribution Notice.\" You must cause the Source Code for any\n"
- "Derivative Works that You create to carry a prominent Attribution\n"
- "Notice reasonably calculated to inform recipients that You have\n"
- "modified the Original Work.\n"
- "\n"
- "7) Warranty of Provenance and Disclaimer of Warranty. Licensor\n"
- "warrants that the copyright in and to the Original Work and the patent\n"
- "rights granted herein by Licensor are owned by the Licensor or are\n"
- "sublicensed to You under the terms of this License with the permission\n"
- "of the contributor(s) of those copyrights and patent rights. Except as\n"
- "expressly stated in the immediately proceeding sentence, the Original\n"
- "Work is provided under this License on an \"AS IS\" BASIS and WITHOUT\n"
- "WARRANTY, either express or implied, including, without limitation,\n"
- "the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A\n"
- "PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL\n"
- "WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential\n"
- "part of this License. No license to Original Work is granted hereunder\n"
- "except under this disclaimer.\n"
- "\n"
- "8) Limitation of Liability. Under no circumstances and under no legal\n"
- "theory, whether in tort (including negligence), contract, or\n"
- "otherwise, shall the Licensor be liable to any person for any direct,\n"
- "indirect, special, incidental, or consequential damages of any\n"
- "character arising as a result of this License or the use of the\n"
- "Original Work including, without limitation, damages for loss of\n"
- "goodwill, work stoppage, computer failure or malfunction, or any and\n"
- "all other commercial damages or losses. This limitation of liability\n"
- "shall not apply to liability for death or personal injury resulting\n"
- "from Licensor's negligence to the extent applicable law prohibits such\n"
- "limitation. Some jurisdictions do not allow the exclusion or\n"
- "limitation of incidental or consequential damages, so this exclusion\n"
- "and limitation may not apply to You.\n"
- "\n"
- "9) Acceptance and Termination. If You distribute copies of the\n"
- "Original Work or a Derivative Work, You must make a reasonable effort\n"
- "under the circumstances to obtain the express assent of recipients to\n"
- "the terms of this License. Nothing else but this License (or another\n"
- "written agreement between Licensor and You) grants You permission to\n"
- "create Derivative Works based upon the Original Work or to exercise\n"
- "any of the rights granted in Section 1 herein, and any attempt to do\n"
- "so except under the terms of this License (or another written\n"
- "agreement between Licensor and You) is expressly prohibited by\n"
- "U.S. copyright law, the equivalent laws of other countries, and by\n"
- "international treaty. Therefore, by exercising any of the rights\n"
- "granted to You in Section 1 herein, You indicate Your acceptance of\n"
- "this License and all of its terms and conditions.\n"
- "\n"
- "10) Termination for Patent Action. This License shall terminate\n"
- "automatically and You may no longer exercise any of the rights granted\n"
- "to You by this License as of the date You commence an action,\n"
- "including a cross-claim or counterclaim, against Licensor or any\n"
- "licensee alleging that the Original Work infringes a patent. This\n"
- "termination provision shall not apply for an action alleging patent\n"
- "infringement by combinations of the Original Work with other software\n"
- "or hardware.\n"
- "\n"
- "11) Jurisdiction, Venue and Governing Law. Any action or suit relating\n"
- "to this License may be brought only in the courts of a jurisdiction\n"
- "wherein the Licensor resides or in which Licensor conducts its primary\n"
- "business, and under the laws of that jurisdiction excluding its\n"
- "conflict-of-law provisions. The application of the United Nations\n"
- "Convention on Contracts for the International Sale of Goods is\n"
- "expressly excluded. Any use of the Original Work outside the scope of\n"
- "this License or after its termination shall be subject to the\n"
- "requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101\n"
- "et seq., the equivalent laws of other countries, and international\n"
- "treaty. This section shall survive the termination of this License.\n"
- "\n"
- "12) Attorneys Fees. In any action to enforce the terms of this License\n"
- "or seeking damages relating thereto, the prevailing party shall be\n"
- "entitled to recover its costs and expenses, including, without\n"
- "limitation, reasonable attorneys' fees and costs incurred in\n"
- "connection with such action, including any appeal of such action. This\n"
- "section shall survive the termination of this License.\n"
- "\n"
- "13) Miscellaneous. This License represents the complete agreement\n"
- "concerning the subject matter hereof. If any provision of this License\n"
- "is held to be unenforceable, such provision shall be reformed only to\n"
- "the extent necessary to make it enforceable.\n"
- "\n"
- "14) Definition of \"You\" in This License. \"You\" throughout this\n"
- "License, whether in upper or lower case, means an individual or a\n"
- "legal entity exercising rights under, and complying with all of the\n"
- "terms of, this License. For legal entities, \"You\" includes any entity\n"
- "that controls, is controlled by, or is under common control with\n"
- "you. For purposes of this definition, \"control\" means (i) the power,\n"
- "direct or indirect, to cause the direction or management of such\n"
- "entity, whether by contract or otherwise, or (ii) ownership of fifty\n"
- "percent (50%) or more of the outstanding shares, or (iii) beneficial\n"
- "ownership of such entity.\n"
- "\n"
- "15) Right to Use. You may use the Original Work in all ways not\n"
- "otherwise restricted or conditioned by this License or by law, and\n"
- "Licensor promises not to interfere with or be responsible for such\n"
- "uses by You.\n"
- "\n"
- "This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights\n"
- "reserved. Permission is hereby granted to copy and distribute this\n"
- "license without modification. This license may not be modified without\n"
- "the express written permission of its copyright owner.\n"
- "\n"
- "\n"
- "-- \n"
- "END OF ACADEMIC FREE LICENSE. The following is intended to describe the essential \n"
- "differences between the Academic Free License (AFL) version 1.0 and other \n"
- "open source licenses:\n"
- "\n"
- "The Academic Free License is similar to the BSD, MIT, UoI/NCSA and Apache \n"
- "licenses in many respects but it is intended to solve a few problems with \n"
- "those licenses.\n"
- " \n"
- "* The AFL is written so as to make it clear what software is being \n"
- "licensed (by the inclusion of a statement following the copyright notice \n"
- "in the software). This way, the license functions better than a template \n"
- "license. The BSD, MIT and UoI/NCSA licenses apply to unidentified software.\n"
- " \n"
- "* The AFL contains a complete copyright grant to the software. The BSD \n"
- "and Apache licenses are vague and incomplete in that respect.\n"
- " \n"
- "* The AFL contains a complete patent grant to the software. The BSD, MIT, \n"
- "UoI/NCSA and Apache licenses rely on an implied patent license and contain \n"
- "no explicit patent grant.\n"
- " \n"
- "* The AFL makes it clear that no trademark rights are granted to the \n"
- "licensor's trademarks. The Apache license contains such a provision, but the \n"
- "BSD, MIT and UoI/NCSA licenses do not.\n"
- " \n"
- "* The AFL includes the warranty by the licensor that it either owns the \n"
- "copyright or that it is distributing the software under a license. None of \n"
- "the other licenses contain that warranty. All other warranties are disclaimed, \n"
- "as is the case for the other licenses.\n"
- "\n"
- "* The AFL is itself copyrighted (with the right granted to copy and distribute \n"
- "without modification). This ensures that the owner of the copyright to the \n"
- "license will control changes. The Apache license contains a copyright notice, \n"
- "but the BSD, MIT and UoI/NCSA licenses do not. \n"
- "--\n"
- "START OF GNU GENERAL PUBLIC LICENSE\n"
- "--\n"
- "\n"
- " GNU GENERAL PUBLIC LICENSE\n"
- " Version 2, June 1991\n"
- "\n"
- " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n"
- " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- "\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "License is intended to guarantee your freedom to share and change free\n"
- "software--to make sure the software is free for all its users. This\n"
- "General Public License applies to most of the Free Software\n"
- "Foundation's software and to any other program whose authors commit to\n"
- "using it. (Some other Free Software Foundation software is covered by\n"
- "the GNU Library General Public License instead.) You can apply it to\n"
- "your programs, too.\n"
- "\n"
- " When we speak of free software, we are referring to freedom, not\n"
- "price. Our General Public Licenses are designed to make sure that you\n"
- "have the freedom to distribute copies of free software (and charge for\n"
- "this service if you wish), that you receive source code or can get it\n"
- "if you want it, that you can change the software or use pieces of it\n"
- "in new free programs; and that you know you can do these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "anyone to deny you these rights or to ask you to surrender the rights.\n"
- "These restrictions translate to certain responsibilities for you if you\n"
- "distribute copies of the software, or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of such a program, whether\n"
- "gratis or for a fee, you must give the recipients all the rights that\n"
- "you have. You must make sure that they, too, receive or can get the\n"
- "source code. And you must show them these terms so they know their\n"
- "rights.\n"
- "\n"
- " We protect your rights with two steps: (1) copyright the software, and\n"
- "(2) offer you this license which gives you legal permission to copy,\n"
- "distribute and/or modify the software.\n"
- "\n"
- " Also, for each author's protection and ours, we want to make certain\n"
- "that everyone understands that there is no warranty for this free\n"
- "software. If the software is modified by someone else and passed on, we\n"
- "want its recipients to know that what they have is not the original, so\n"
- "that any problems introduced by others will not reflect on the original\n"
- "authors' reputations.\n"
- "\n"
- " Finally, any free program is threatened constantly by software\n"
- "patents. We wish to avoid the danger that redistributors of a free\n"
- "program will individually obtain patent licenses, in effect making the\n"
- "program proprietary. To prevent this, we have made it clear that any\n"
- "patent must be licensed for everyone's free use or not licensed at all.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow.\n"
- "\n"
- " GNU GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License applies to any program or other work which contains\n"
- "a notice placed by the copyright holder saying it may be distributed\n"
- "under the terms of this General Public License. The \"Program\", below,\n"
- "refers to any such program or work, and a \"work based on the Program\"\n"
- "means either the Program or any derivative work under copyright law:\n"
- "that is to say, a work containing the Program or a portion of it,\n"
- "either verbatim or with modifications and/or translated into another\n"
- "language. (Hereinafter, translation is included without limitation in\n"
- "the term \"modification\".) Each licensee is addressed as \"you\".\n"
- "\n"
- "Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running the Program is not restricted, and the output from the Program\n"
- "is covered only if its contents constitute a work based on the\n"
- "Program (independent of having been made by running the Program).\n"
- "Whether that is true depends on what the Program does.\n"
- "\n"
- " 1. You may copy and distribute verbatim copies of the Program's\n"
- "source code as you receive it, in any medium, provided that you\n"
- "conspicuously and appropriately publish on each copy an appropriate\n"
- "copyright notice and disclaimer of warranty; keep intact all the\n"
- "notices that refer to this License and to the absence of any warranty;\n"
- "and give any other recipients of the Program a copy of this License\n"
- "along with the Program.\n"
- "\n"
- "You may charge a fee for the physical act of transferring a copy, and\n"
- "you may at your option offer warranty protection in exchange for a fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Program or any portion\n"
- "of it, thus forming a work based on the Program, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) You must cause the modified files to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " b) You must cause any work that you distribute or publish, that in\n"
- " whole or in part contains or is derived from the Program or any\n"
- " part thereof, to be licensed as a whole at no charge to all third\n"
- " parties under the terms of this License.\n"
- "\n"
- " c) If the modified program normally reads commands interactively\n"
- " when run, you must cause it, when started running for such\n"
- " interactive use in the most ordinary way, to print or display an\n"
- " announcement including an appropriate copyright notice and a\n"
- " notice that there is no warranty (or else, saying that you provide\n"
- " a warranty) and that users may redistribute the program under\n"
- " these conditions, and telling the user how to view a copy of this\n"
- " License. (Exception: if the Program itself is interactive but\n"
- " does not normally print such an announcement, your work based on\n"
- " the Program is not required to print an announcement.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Program,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Program, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Program.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Program\n"
- "with the Program (or with a work based on the Program) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may copy and distribute the Program (or a work based on it,\n"
- "under Section 2) in object code or executable form under the terms of\n"
- "Sections 1 and 2 above provided that you also do one of the following:\n"
- "\n"
- " a) Accompany it with the complete corresponding machine-readable\n"
- " source code, which must be distributed under the terms of Sections\n"
- " 1 and 2 above on a medium customarily used for software interchange; or,\n"
- "\n"
- " b) Accompany it with a written offer, valid for at least three\n"
- " years, to give any third party, for a charge no more than your\n"
- " cost of physically performing source distribution, a complete\n"
- " machine-readable copy of the corresponding source code, to be\n"
- " distributed under the terms of Sections 1 and 2 above on a medium\n"
- " customarily used for software interchange; or,\n"
- "\n"
- " c) Accompany it with the information you received as to the offer\n"
- " to distribute corresponding source code. (This alternative is\n"
- " allowed only for noncommercial distribution and only if you\n"
- " received the program in object code or executable form with such\n"
- " an offer, in accord with Subsection b above.)\n"
- "\n"
- "The source code for a work means the preferred form of the work for\n"
- "making modifications to it. For an executable work, complete source\n"
- "code means all the source code for all modules it contains, plus any\n"
- "associated interface definition files, plus the scripts used to\n"
- "control compilation and installation of the executable. However, as a\n"
- "special exception, the source code distributed need not include\n"
- "anything that is normally distributed (in either source or binary\n"
- "form) with the major components (compiler, kernel, and so on) of the\n"
- "operating system on which the executable runs, unless that component\n"
- "itself accompanies the executable.\n"
- "\n"
- "If distribution of executable or object code is made by offering\n"
- "access to copy from a designated place, then offering equivalent\n"
- "access to copy the source code from the same place counts as\n"
- "distribution of the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 4. You may not copy, modify, sublicense, or distribute the Program\n"
- "except as expressly provided under this License. Any attempt\n"
- "otherwise to copy, modify, sublicense or distribute the Program is\n"
- "void, and will automatically terminate your rights under this License.\n"
- "However, parties who have received copies, or rights, from you under\n"
- "this License will not have their licenses terminated so long as such\n"
- "parties remain in full compliance.\n"
- "\n"
- " 5. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Program or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Program (or any work based on the\n"
- "Program), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Program or works based on it.\n"
- "\n"
- " 6. Each time you redistribute the Program (or any work based on the\n"
- "Program), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute or modify the Program subject to\n"
- "these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties to\n"
- "this License.\n"
- "\n"
- " 7. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Program at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Program by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Program.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under\n"
- "any particular circumstance, the balance of the section is intended to\n"
- "apply and the section as a whole is intended to apply in other\n"
- "circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system, which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 8. If the distribution and/or use of the Program is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Program under this License\n"
- "may add an explicit geographical distribution limitation excluding\n"
- "those countries, so that distribution is permitted only in or among\n"
- "countries not thus excluded. In such case, this License incorporates\n"
- "the limitation as if written in the body of this License.\n"
- "\n"
- " 9. The Free Software Foundation may publish revised and/or new versions\n"
- "of the General Public License from time to time. Such new versions will\n"
- "be similar in spirit to the present version, but may differ in detail to\n"
- "address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Program\n"
- "specifies a version number of this License which applies to it and \"any\n"
- "later version\", you have the option of following the terms and conditions\n"
- "either of that version or of any later version published by the Free\n"
- "Software Foundation. If the Program does not specify a version number of\n"
- "this License, you may choose any version ever published by the Free Software\n"
- "Foundation.\n"
- "\n"
- " 10. If you wish to incorporate parts of the Program into other free\n"
- "programs whose distribution conditions are different, write to the author\n"
- "to ask for permission. For software which is copyrighted by the Free\n"
- "Software Foundation, write to the Free Software Foundation; we sometimes\n"
- "make exceptions for this. Our decision will be guided by the two goals\n"
- "of preserving the free status of all derivatives of our free software and\n"
- "of promoting the sharing and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n"
- "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n"
- "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n"
- "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n"
- "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n"
- "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n"
- "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n"
- "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n"
- "REPAIR OR CORRECTION.\n"
- "\n"
- " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n"
- "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n"
- "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n"
- "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n"
- "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n"
- "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n"
- "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n"
- "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n"
- "POSSIBILITY OF SUCH DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Programs\n"
- "\n"
- " If you develop a new program, and you want it to be of the greatest\n"
- "possible use to the public, the best way to achieve this is to make it\n"
- "free software which everyone can redistribute and change under these terms.\n"
- "\n"
- " To do so, attach the following notices to the program. It is safest\n"
- "to attach them to the start of each source file to most effectively\n"
- "convey the exclusion of warranty; and each file should have at least\n"
- "the \"copyright\" line and a pointer to where the full notice is found.\n"
- "\n"
- " <one line to give the program's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This program is free software; you can redistribute it and/or modify\n"
- " it under the terms of the GNU General Public License as published by\n"
- " the Free Software Foundation; either version 2 of the License, or\n"
- " (at your option) any later version.\n"
- "\n"
- " This program is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU General Public License\n"
- " along with this program; if not, write to the Free Software\n"
- " Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- "\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "If the program is interactive, make it output a short notice like this\n"
- "when it starts in an interactive mode:\n"
- "\n"
- " Gnomovision version 69, Copyright (C) year name of author\n"
- " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n"
- " This is free software, and you are welcome to redistribute it\n"
- " under certain conditions; type `show c' for details.\n"
- "\n"
- "The hypothetical commands `show w' and `show c' should show the appropriate\n"
- "parts of the General Public License. Of course, the commands you use may\n"
- "be called something other than `show w' and `show c'; they could even be\n"
- "mouse-clicks or menu items--whatever suits your program.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or your\n"
- "school, if any, to sign a \"copyright disclaimer\" for the program, if\n"
- "necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n"
- " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1989\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "This General Public License does not permit incorporating your program into\n"
- "proprietary programs. If your program is a subroutine library, you may\n"
- "consider it more useful to permit linking proprietary applications with the\n"
- "library. If this is what you want to do, use the GNU Library General\n"
- "Public License instead of this License.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseAppImageRuntime =
- "Copyright (c) 2004-17 Simon Peter\n"
- "Portions Copyright (c) 2007 Alexander Larsson\n"
- "\n"
- "All Rights Reserved.\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person obtaining a copy\n"
- "of this software and associated documentation files (the \"Software\"), to deal\n"
- "in the Software without restriction, including without limitation the rights\n"
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
- "copies of the Software, and to permit persons to whom the Software is\n"
- "furnished to do so, subject to the following conditions:\n"
- "\n"
- "The above copyright notice and this permission notice shall be included in\n"
- "all copies or substantial portions of the Software.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n"
- "THE SOFTWARE.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseSquashfuse = "The squashfuse distribution as a whole is copyright Dave\n"
- "Vasilevsky and is subject to the copyright notice reproduced at\n"
- "the bottom of this file.\n"
- "\n"
- "The file squashfs_fs.h is copyright Phillip Lougher and, with his permission,\n"
- "subject to the same license.\n"
- "\n"
- "\n"
- "Copyright (c) 2012 Dave Vasilevsky <dave@vasilevsky.ca>\n"
- " Phillip Lougher <phillip@squashfs.org.uk>\n"
- "All rights reserved.\n"
- "\n"
- "Redistribution and use in source and binary forms, with or without\n"
- "modification, are permitted provided that the following conditions\n"
- "are met:\n"
- "1. Redistributions of source code must retain the above copyright\n"
- " notice, this list of conditions and the following disclaimer.\n"
- "2. Redistributions in binary form must reproduce the above copyright\n"
- " notice, this list of conditions and the following disclaimer in the\n"
- " documentation and/or other materials provided with the distribution.\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR\n"
- "IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n"
- "OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n"
- "IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,\n"
- "INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n"
- "NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
- "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
- "THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n"
- "THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibfuse =
- "FUSE: Filesystem in Userspace\n"
- "Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>\n"
- "\n"
- "This program can be distributed under the terms of the GNU LGPLv2.\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " Version 2.1, February 1999\n"
- "\n"
- " Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n"
- " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- "[This is the first released version of the Lesser GPL. It also counts\n"
- " as the successor of the GNU Library Public License, version 2, hence\n"
- " the version number 2.1.]\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "Licenses are intended to guarantee your freedom to share and change\n"
- "free software--to make sure the software is free for all its users.\n"
- "\n"
- " This license, the Lesser General Public License, applies to some\n"
- "specially designated software packages--typically libraries--of the\n"
- "Free Software Foundation and other authors who decide to use it. You\n"
- "can use it too, but we suggest you first think carefully about whether\n"
- "this license or the ordinary General Public License is the better\n"
- "strategy to use in any particular case, based on the explanations below.\n"
- "\n"
- " When we speak of free software, we are referring to freedom of use,\n"
- "not price. Our General Public Licenses are designed to make sure that\n"
- "you have the freedom to distribute copies of free software (and charge\n"
- "for this service if you wish); that you receive source code or can get\n"
- "it if you want it; that you can change the software and use pieces of\n"
- "it in new free programs; and that you are informed that you can do\n"
- "these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "distributors to deny you these rights or to ask you to surrender these\n"
- "rights. These restrictions translate to certain responsibilities for\n"
- "you if you distribute copies of the library or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of the library, whether gratis\n"
- "or for a fee, you must give the recipients all the rights that we gave\n"
- "you. You must make sure that they, too, receive or can get the source\n"
- "code. If you link other code with the library, you must provide\n"
- "complete object files to the recipients, so that they can relink them\n"
- "with the library after making changes to the library and recompiling\n"
- "it. And you must show them these terms so they know their rights.\n"
- "\n"
- " We protect your rights with a two-step method: (1) we copyright the\n"
- "library, and (2) we offer you this license, which gives you legal\n"
- "permission to copy, distribute and/or modify the library.\n"
- "\n"
- " To protect each distributor, we want to make it very clear that\n"
- "there is no warranty for the free library. Also, if the library is\n"
- "modified by someone else and passed on, the recipients should know\n"
- "that what they have is not the original version, so that the original\n"
- "author's reputation will not be affected by problems that might be\n"
- "introduced by others.\n"
- "\n"
- " Finally, software patents pose a constant threat to the existence of\n"
- "any free program. We wish to make sure that a company cannot\n"
- "effectively restrict the users of a free program by obtaining a\n"
- "restrictive license from a patent holder. Therefore, we insist that\n"
- "any patent license obtained for a version of the library must be\n"
- "consistent with the full freedom of use specified in this license.\n"
- "\n"
- " Most GNU software, including some libraries, is covered by the\n"
- "ordinary GNU General Public License. This license, the GNU Lesser\n"
- "General Public License, applies to certain designated libraries, and\n"
- "is quite different from the ordinary General Public License. We use\n"
- "this license for certain libraries in order to permit linking those\n"
- "libraries into non-free programs.\n"
- "\n"
- " When a program is linked with a library, whether statically or using\n"
- "a shared library, the combination of the two is legally speaking a\n"
- "combined work, a derivative of the original library. The ordinary\n"
- "General Public License therefore permits such linking only if the\n"
- "entire combination fits its criteria of freedom. The Lesser General\n"
- "Public License permits more lax criteria for linking other code with\n"
- "the library.\n"
- "\n"
- " We call this license the \"Lesser\" General Public License because it\n"
- "does Less to protect the user's freedom than the ordinary General\n"
- "Public License. It also provides other free software developers Less\n"
- "of an advantage over competing non-free programs. These disadvantages\n"
- "are the reason we use the ordinary General Public License for many\n"
- "libraries. However, the Lesser license provides advantages in certain\n"
- "special circumstances.\n"
- "\n"
- " For example, on rare occasions, there may be a special need to\n"
- "encourage the widest possible use of a certain library, so that it becomes\n"
- "a de-facto standard. To achieve this, non-free programs must be\n"
- "allowed to use the library. A more frequent case is that a free\n"
- "library does the same job as widely used non-free libraries. In this\n"
- "case, there is little to gain by limiting the free library to free\n"
- "software only, so we use the Lesser General Public License.\n"
- "\n"
- " In other cases, permission to use a particular library in non-free\n"
- "programs enables a greater number of people to use a large body of\n"
- "free software. For example, permission to use the GNU C Library in\n"
- "non-free programs enables many more people to use the whole GNU\n"
- "operating system, as well as its variant, the GNU/Linux operating\n"
- "system.\n"
- "\n"
- " Although the Lesser General Public License is Less protective of the\n"
- "users' freedom, it does ensure that the user of a program that is\n"
- "linked with the Library has the freedom and the wherewithal to run\n"
- "that program using a modified version of the Library.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow. Pay close attention to the difference between a\n"
- "\"work based on the library\" and a \"work that uses the library\". The\n"
- "former contains code derived from the library, whereas the latter must\n"
- "be combined with the library in order to run.\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License Agreement applies to any software library or other\n"
- "program which contains a notice placed by the copyright holder or\n"
- "other authorized party saying it may be distributed under the terms of\n"
- "this Lesser General Public License (also called \"this License\").\n"
- "Each licensee is addressed as \"you\".\n"
- "\n"
- " A \"library\" means a collection of software functions and/or data\n"
- "prepared so as to be conveniently linked with application programs\n"
- "(which use some of those functions and data) to form executables.\n"
- "\n"
- " The \"Library\", below, refers to any such software library or work\n"
- "which has been distributed under these terms. A \"work based on the\n"
- "Library\" means either the Library or any derivative work under\n"
- "copyright law: that is to say, a work containing the Library or a\n"
- "portion of it, either verbatim or with modifications and/or translated\n"
- "straightforwardly into another language. (Hereinafter, translation is\n"
- "included without limitation in the term \"modification\".)\n"
- "\n"
- " \"Source code\" for a work means the preferred form of the work for\n"
- "making modifications to it. For a library, complete source code means\n"
- "all the source code for all modules it contains, plus any associated\n"
- "interface definition files, plus the scripts used to control compilation\n"
- "and installation of the library.\n"
- "\n"
- " Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running a program using the Library is not restricted, and output from\n"
- "such a program is covered only if its contents constitute a work based\n"
- "on the Library (independent of the use of the Library in a tool for\n"
- "writing it). Whether that is true depends on what the Library does\n"
- "and what the program that uses the Library does.\n"
- "\n"
- " 1. You may copy and distribute verbatim copies of the Library's\n"
- "complete source code as you receive it, in any medium, provided that\n"
- "you conspicuously and appropriately publish on each copy an\n"
- "appropriate copyright notice and disclaimer of warranty; keep intact\n"
- "all the notices that refer to this License and to the absence of any\n"
- "warranty; and distribute a copy of this License along with the\n"
- "Library.\n"
- "\n"
- " You may charge a fee for the physical act of transferring a copy,\n"
- "and you may at your option offer warranty protection in exchange for a\n"
- "fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Library or any portion\n"
- "of it, thus forming a work based on the Library, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) The modified work must itself be a software library.\n"
- "\n"
- " b) You must cause the files modified to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " c) You must cause the whole of the work to be licensed at no\n"
- " charge to all third parties under the terms of this License.\n"
- "\n"
- " d) If a facility in the modified Library refers to a function or a\n"
- " table of data to be supplied by an application program that uses\n"
- " the facility, other than as an argument passed when the facility\n"
- " is invoked, then you must make a good faith effort to ensure that,\n"
- " in the event an application does not supply such function or\n"
- " table, the facility still operates, and performs whatever part of\n"
- " its purpose remains meaningful.\n"
- "\n"
- " (For example, a function in a library to compute square roots has\n"
- " a purpose that is entirely well-defined independent of the\n"
- " application. Therefore, Subsection 2d requires that any\n"
- " application-supplied function or table used by this function must\n"
- " be optional: if the application does not supply it, the square\n"
- " root function must still compute square roots.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Library,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Library, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote\n"
- "it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Library.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Library\n"
- "with the Library (or with a work based on the Library) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may opt to apply the terms of the ordinary GNU General Public\n"
- "License instead of this License to a given copy of the Library. To do\n"
- "this, you must alter all the notices that refer to this License, so\n"
- "that they refer to the ordinary GNU General Public License, version 2,\n"
- "instead of to this License. (If a newer version than version 2 of the\n"
- "ordinary GNU General Public License has appeared, then you can specify\n"
- "that version instead if you wish.) Do not make any other change in\n"
- "these notices.\n"
- "\n"
- " Once this change is made in a given copy, it is irreversible for\n"
- "that copy, so the ordinary GNU General Public License applies to all\n"
- "subsequent copies and derivative works made from that copy.\n"
- "\n"
- " This option is useful when you wish to copy part of the code of\n"
- "the Library into a program that is not a library.\n"
- "\n"
- " 4. You may copy and distribute the Library (or a portion or\n"
- "derivative of it, under Section 2) in object code or executable form\n"
- "under the terms of Sections 1 and 2 above provided that you accompany\n"
- "it with the complete corresponding machine-readable source code, which\n"
- "must be distributed under the terms of Sections 1 and 2 above on a\n"
- "medium customarily used for software interchange.\n"
- "\n"
- " If distribution of object code is made by offering access to copy\n"
- "from a designated place, then offering equivalent access to copy the\n"
- "source code from the same place satisfies the requirement to\n"
- "distribute the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 5. A program that contains no derivative of any portion of the\n"
- "Library, but is designed to work with the Library by being compiled or\n"
- "linked with it, is called a \"work that uses the Library\". Such a\n"
- "work, in isolation, is not a derivative work of the Library, and\n"
- "therefore falls outside the scope of this License.\n"
- "\n"
- " However, linking a \"work that uses the Library\" with the Library\n"
- "creates an executable that is a derivative of the Library (because it\n"
- "contains portions of the Library), rather than a \"work that uses the\n"
- "library\". The executable is therefore covered by this License.\n"
- "Section 6 states terms for distribution of such executables.\n"
- "\n"
- " When a \"work that uses the Library\" uses material from a header file\n"
- "that is part of the Library, the object code for the work may be a\n"
- "derivative work of the Library even though the source code is not.\n"
- "Whether this is true is especially significant if the work can be\n"
- "linked without the Library, or if the work is itself a library. The\n"
- "threshold for this to be true is not precisely defined by law.\n"
- "\n"
- " If such an object file uses only numerical parameters, data\n"
- "structure layouts and accessors, and small macros and small inline\n"
- "functions (ten lines or less in length), then the use of the object\n"
- "file is unrestricted, regardless of whether it is legally a derivative\n"
- "work. (Executables containing this object code plus portions of the\n"
- "Library will still fall under Section 6.)\n"
- "\n"
- " Otherwise, if the work is a derivative of the Library, you may\n"
- "distribute the object code for the work under the terms of Section 6.\n"
- "Any executables containing that work also fall under Section 6,\n"
- "whether or not they are linked directly with the Library itself.\n"
- "\n"
- " 6. As an exception to the Sections above, you may also combine or\n"
- "link a \"work that uses the Library\" with the Library to produce a\n"
- "work containing portions of the Library, and distribute that work\n"
- "under terms of your choice, provided that the terms permit\n"
- "modification of the work for the customer's own use and reverse\n"
- "engineering for debugging such modifications.\n"
- "\n"
- " You must give prominent notice with each copy of the work that the\n"
- "Library is used in it and that the Library and its use are covered by\n"
- "this License. You must supply a copy of this License. If the work\n"
- "during execution displays copyright notices, you must include the\n"
- "copyright notice for the Library among them, as well as a reference\n"
- "directing the user to the copy of this License. Also, you must do one\n"
- "of these things:\n"
- "\n"
- " a) Accompany the work with the complete corresponding\n"
- " machine-readable source code for the Library including whatever\n"
- " changes were used in the work (which must be distributed under\n"
- " Sections 1 and 2 above); and, if the work is an executable linked\n"
- " with the Library, with the complete machine-readable \"work that\n"
- " uses the Library\", as object code and/or source code, so that the\n"
- " user can modify the Library and then relink to produce a modified\n"
- " executable containing the modified Library. (It is understood\n"
- " that the user who changes the contents of definitions files in the\n"
- " Library will not necessarily be able to recompile the application\n"
- " to use the modified definitions.)\n"
- "\n"
- " b) Use a suitable shared library mechanism for linking with the\n"
- " Library. A suitable mechanism is one that (1) uses at run time a\n"
- " copy of the library already present on the user's computer system,\n"
- " rather than copying library functions into the executable, and (2)\n"
- " will operate properly with a modified version of the library, if\n"
- " the user installs one, as long as the modified version is\n"
- " interface-compatible with the version that the work was made with.\n"
- "\n"
- " c) Accompany the work with a written offer, valid for at\n"
- " least three years, to give the same user the materials\n"
- " specified in Subsection 6a, above, for a charge no more\n"
- " than the cost of performing this distribution.\n"
- "\n"
- " d) If distribution of the work is made by offering access to copy\n"
- " from a designated place, offer equivalent access to copy the above\n"
- " specified materials from the same place.\n"
- "\n"
- " e) Verify that the user has already received a copy of these\n"
- " materials or that you have already sent this user a copy.\n"
- "\n"
- " For an executable, the required form of the \"work that uses the\n"
- "Library\" must include any data and utility programs needed for\n"
- "reproducing the executable from it. However, as a special exception,\n"
- "the materials to be distributed need not include anything that is\n"
- "normally distributed (in either source or binary form) with the major\n"
- "components (compiler, kernel, and so on) of the operating system on\n"
- "which the executable runs, unless that component itself accompanies\n"
- "the executable.\n"
- "\n"
- " It may happen that this requirement contradicts the license\n"
- "restrictions of other proprietary libraries that do not normally\n"
- "accompany the operating system. Such a contradiction means you cannot\n"
- "use both them and the Library together in an executable that you\n"
- "distribute.\n"
- "\n"
- " 7. You may place library facilities that are a work based on the\n"
- "Library side-by-side in a single library together with other library\n"
- "facilities not covered by this License, and distribute such a combined\n"
- "library, provided that the separate distribution of the work based on\n"
- "the Library and of the other library facilities is otherwise\n"
- "permitted, and provided that you do these two things:\n"
- "\n"
- " a) Accompany the combined library with a copy of the same work\n"
- " based on the Library, uncombined with any other library\n"
- " facilities. This must be distributed under the terms of the\n"
- " Sections above.\n"
- "\n"
- " b) Give prominent notice with the combined library of the fact\n"
- " that part of it is a work based on the Library, and explaining\n"
- " where to find the accompanying uncombined form of the same work.\n"
- "\n"
- " 8. You may not copy, modify, sublicense, link with, or distribute\n"
- "the Library except as expressly provided under this License. Any\n"
- "attempt otherwise to copy, modify, sublicense, link with, or\n"
- "distribute the Library is void, and will automatically terminate your\n"
- "rights under this License. However, parties who have received copies,\n"
- "or rights, from you under this License will not have their licenses\n"
- "terminated so long as such parties remain in full compliance.\n"
- "\n"
- " 9. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Library or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Library (or any work based on the\n"
- "Library), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Library or works based on it.\n"
- "\n"
- " 10. Each time you redistribute the Library (or any work based on the\n"
- "Library), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute, link with or modify the Library\n"
- "subject to these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties with\n"
- "this License.\n"
- "\n"
- " 11. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Library at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Library by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Library.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under any\n"
- "particular circumstance, the balance of the section is intended to apply,\n"
- "and the section as a whole is intended to apply in other circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 12. If the distribution and/or use of the Library is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Library under this License may add\n"
- "an explicit geographical distribution limitation excluding those countries,\n"
- "so that distribution is permitted only in or among countries not thus\n"
- "excluded. In such case, this License incorporates the limitation as if\n"
- "written in the body of this License.\n"
- "\n"
- " 13. The Free Software Foundation may publish revised and/or new\n"
- "versions of the Lesser General Public License from time to time.\n"
- "Such new versions will be similar in spirit to the present version,\n"
- "but may differ in detail to address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Library\n"
- "specifies a version number of this License which applies to it and\n"
- "\"any later version\", you have the option of following the terms and\n"
- "conditions either of that version or of any later version published by\n"
- "the Free Software Foundation. If the Library does not specify a\n"
- "license version number, you may choose any version ever published by\n"
- "the Free Software Foundation.\n"
- "\n"
- " 14. If you wish to incorporate parts of the Library into other free\n"
- "programs whose distribution conditions are incompatible with these,\n"
- "write to the author to ask for permission. For software which is\n"
- "copyrighted by the Free Software Foundation, write to the Free\n"
- "Software Foundation; we sometimes make exceptions for this. Our\n"
- "decision will be guided by the two goals of preserving the free status\n"
- "of all derivatives of our free software and of promoting the sharing\n"
- "and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\n"
- "WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\n"
- "EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\n"
- "OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\n"
- "KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\n"
- "LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\n"
- "THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n"
- "\n"
- " 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\n"
- "WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\n"
- "AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\n"
- "FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\n"
- "CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\n"
- "LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\n"
- "RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\n"
- "FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\n"
- "SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Libraries\n"
- "\n"
- " If you develop a new library, and you want it to be of the greatest\n"
- "possible use to the public, we recommend making it free software that\n"
- "everyone can redistribute and change. You can do so by permitting\n"
- "redistribution under these terms (or, alternatively, under the terms of the\n"
- "ordinary General Public License).\n"
- "\n"
- " To apply these terms, attach the following notices to the library. It is\n"
- "safest to attach them to the start of each source file to most effectively\n"
- "convey the exclusion of warranty; and each file should have at least the\n"
- "\"copyright\" line and a pointer to where the full notice is found.\n"
- "\n"
- " <one line to give the library's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This library is free software; you can redistribute it and/or\n"
- " modify it under the terms of the GNU Lesser General Public\n"
- " License as published by the Free Software Foundation; either\n"
- " version 2.1 of the License, or (at your option) any later version.\n"
- "\n"
- " This library is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- " Lesser General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU Lesser General Public\n"
- " License along with this library; if not, write to the Free Software\n"
- " Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or your\n"
- "school, if any, to sign a \"copyright disclaimer\" for the library, if\n"
- "necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the\n"
- " library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1990\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "That's all there is to it!";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseGlib = " GNU LIBRARY GENERAL PUBLIC LICENSE\n"
- " Version 2, June 1991\n"
- "\n"
- " Copyright (C) 1991 Free Software Foundation, Inc.\n"
- " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- "[This is the first released version of the library GPL. It is\n"
- " numbered 2 because it goes with version 2 of the ordinary GPL.]\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "Licenses are intended to guarantee your freedom to share and change\n"
- "free software--to make sure the software is free for all its users.\n"
- "\n"
- " This license, the Library General Public License, applies to some\n"
- "specially designated Free Software Foundation software, and to any\n"
- "other libraries whose authors decide to use it. You can use it for\n"
- "your libraries, too.\n"
- "\n"
- " When we speak of free software, we are referring to freedom, not\n"
- "price. Our General Public Licenses are designed to make sure that you\n"
- "have the freedom to distribute copies of free software (and charge for\n"
- "this service if you wish), that you receive source code or can get it\n"
- "if you want it, that you can change the software or use pieces of it\n"
- "in new free programs; and that you know you can do these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "anyone to deny you these rights or to ask you to surrender the rights.\n"
- "These restrictions translate to certain responsibilities for you if\n"
- "you distribute copies of the library, or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of the library, whether gratis\n"
- "or for a fee, you must give the recipients all the rights that we gave\n"
- "you. You must make sure that they, too, receive or can get the source\n"
- "code. If you link a program with the library, you must provide\n"
- "complete object files to the recipients so that they can relink them\n"
- "with the library, after making changes to the library and recompiling\n"
- "it. And you must show them these terms so they know their rights.\n"
- "\n"
- " Our method of protecting your rights has two steps: (1) copyright\n"
- "the library, and (2) offer you this license which gives you legal\n"
- "permission to copy, distribute and/or modify the library.\n"
- "\n"
- " Also, for each distributor's protection, we want to make certain\n"
- "that everyone understands that there is no warranty for this free\n"
- "library. If the library is modified by someone else and passed on, we\n"
- "want its recipients to know that what they have is not the original\n"
- "version, so that any problems introduced by others will not reflect on\n"
- "the original authors' reputations.\n"
- "\n"
- " Finally, any free program is threatened constantly by software\n"
- "patents. We wish to avoid the danger that companies distributing free\n"
- "software will individually obtain patent licenses, thus in effect\n"
- "transforming the program into proprietary software. To prevent this,\n"
- "we have made it clear that any patent must be licensed for everyone's\n"
- "free use or not licensed at all.\n"
- "\n"
- " Most GNU software, including some libraries, is covered by the ordinary\n"
- "GNU General Public License, which was designed for utility programs. This\n"
- "license, the GNU Library General Public License, applies to certain\n"
- "designated libraries. This license is quite different from the ordinary\n"
- "one; be sure to read it in full, and don't assume that anything in it is\n"
- "the same as in the ordinary license.\n"
- "\n"
- " The reason we have a separate public license for some libraries is that\n"
- "they blur the distinction we usually make between modifying or adding to a\n"
- "program and simply using it. Linking a program with a library, without\n"
- "changing the library, is in some sense simply using the library, and is\n"
- "analogous to running a utility program or application program. However, in\n"
- "a textual and legal sense, the linked executable is a combined work, a\n"
- "derivative of the original library, and the ordinary General Public License\n"
- "treats it as such.\n"
- "\n"
- " Because of this blurred distinction, using the ordinary General\n"
- "Public License for libraries did not effectively promote software\n"
- "sharing, because most developers did not use the libraries. We\n"
- "concluded that weaker conditions might promote sharing better.\n"
- "\n"
- " However, unrestricted linking of non-free programs would deprive the\n"
- "users of those programs of all benefit from the free status of the\n"
- "libraries themselves. This Library General Public License is intended to\n"
- "permit developers of non-free programs to use free libraries, while\n"
- "preserving your freedom as a user of such programs to change the free\n"
- "libraries that are incorporated in them. (We have not seen how to achieve\n"
- "this as regards changes in header files, but we have achieved it as regards\n"
- "changes in the actual functions of the Library.) The hope is that this\n"
- "will lead to faster development of free libraries.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow. Pay close attention to the difference between a\n"
- "\"work based on the library\" and a \"work that uses the library\". The\n"
- "former contains code derived from the library, while the latter only\n"
- "works together with the library.\n"
- "\n"
- " Note that it is possible for a library to be covered by the ordinary\n"
- "General Public License rather than by this special one.\n"
- "\n"
- " GNU LIBRARY GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License Agreement applies to any software library which\n"
- "contains a notice placed by the copyright holder or other authorized\n"
- "party saying it may be distributed under the terms of this Library\n"
- "General Public License (also called \"this License\"). Each licensee is\n"
- "addressed as \"you\".\n"
- "\n"
- " A \"library\" means a collection of software functions and/or data\n"
- "prepared so as to be conveniently linked with application programs\n"
- "(which use some of those functions and data) to form executables.\n"
- "\n"
- " The \"Library\", below, refers to any such software library or work\n"
- "which has been distributed under these terms. A \"work based on the\n"
- "Library\" means either the Library or any derivative work under\n"
- "copyright law: that is to say, a work containing the Library or a\n"
- "portion of it, either verbatim or with modifications and/or translated\n"
- "straightforwardly into another language. (Hereinafter, translation is\n"
- "included without limitation in the term \"modification\".)\n"
- "\n"
- " \"Source code\" for a work means the preferred form of the work for\n"
- "making modifications to it. For a library, complete source code means\n"
- "all the source code for all modules it contains, plus any associated\n"
- "interface definition files, plus the scripts used to control compilation\n"
- "and installation of the library.\n"
- "\n"
- " Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running a program using the Library is not restricted, and output from\n"
- "such a program is covered only if its contents constitute a work based\n"
- "on the Library (independent of the use of the Library in a tool for\n"
- "writing it). Whether that is true depends on what the Library does\n"
- "and what the program that uses the Library does.\n"
- " \n"
- " 1. You may copy and distribute verbatim copies of the Library's\n"
- "complete source code as you receive it, in any medium, provided that\n"
- "you conspicuously and appropriately publish on each copy an\n"
- "appropriate copyright notice and disclaimer of warranty; keep intact\n"
- "all the notices that refer to this License and to the absence of any\n"
- "warranty; and distribute a copy of this License along with the\n"
- "Library.\n"
- "\n"
- " You may charge a fee for the physical act of transferring a copy,\n"
- "and you may at your option offer warranty protection in exchange for a\n"
- "fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Library or any portion\n"
- "of it, thus forming a work based on the Library, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) The modified work must itself be a software library.\n"
- "\n"
- " b) You must cause the files modified to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " c) You must cause the whole of the work to be licensed at no\n"
- " charge to all third parties under the terms of this License.\n"
- "\n"
- " d) If a facility in the modified Library refers to a function or a\n"
- " table of data to be supplied by an application program that uses\n"
- " the facility, other than as an argument passed when the facility\n"
- " is invoked, then you must make a good faith effort to ensure that,\n"
- " in the event an application does not supply such function or\n"
- " table, the facility still operates, and performs whatever part of\n"
- " its purpose remains meaningful.\n"
- "\n"
- " (For example, a function in a library to compute square roots has\n"
- " a purpose that is entirely well-defined independent of the\n"
- " application. Therefore, Subsection 2d requires that any\n"
- " application-supplied function or table used by this function must\n"
- " be optional: if the application does not supply it, the square\n"
- " root function must still compute square roots.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Library,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Library, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote\n"
- "it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Library.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Library\n"
- "with the Library (or with a work based on the Library) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may opt to apply the terms of the ordinary GNU General Public\n"
- "License instead of this License to a given copy of the Library. To do\n"
- "this, you must alter all the notices that refer to this License, so\n"
- "that they refer to the ordinary GNU General Public License, version 2,\n"
- "instead of to this License. (If a newer version than version 2 of the\n"
- "ordinary GNU General Public License has appeared, then you can specify\n"
- "that version instead if you wish.) Do not make any other change in\n"
- "these notices.\n"
- "\n"
- " Once this change is made in a given copy, it is irreversible for\n"
- "that copy, so the ordinary GNU General Public License applies to all\n"
- "subsequent copies and derivative works made from that copy.\n"
- "\n"
- " This option is useful when you wish to copy part of the code of\n"
- "the Library into a program that is not a library.\n"
- "\n"
- " 4. You may copy and distribute the Library (or a portion or\n"
- "derivative of it, under Section 2) in object code or executable form\n"
- "under the terms of Sections 1 and 2 above provided that you accompany\n"
- "it with the complete corresponding machine-readable source code, which\n"
- "must be distributed under the terms of Sections 1 and 2 above on a\n"
- "medium customarily used for software interchange.\n"
- "\n"
- " If distribution of object code is made by offering access to copy\n"
- "from a designated place, then offering equivalent access to copy the\n"
- "source code from the same place satisfies the requirement to\n"
- "distribute the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 5. A program that contains no derivative of any portion of the\n"
- "Library, but is designed to work with the Library by being compiled or\n"
- "linked with it, is called a \"work that uses the Library\". Such a\n"
- "work, in isolation, is not a derivative work of the Library, and\n"
- "therefore falls outside the scope of this License.\n"
- "\n"
- " However, linking a \"work that uses the Library\" with the Library\n"
- "creates an executable that is a derivative of the Library (because it\n"
- "contains portions of the Library), rather than a \"work that uses the\n"
- "library\". The executable is therefore covered by this License.\n"
- "Section 6 states terms for distribution of such executables.\n"
- "\n"
- " When a \"work that uses the Library\" uses material from a header file\n"
- "that is part of the Library, the object code for the work may be a\n"
- "derivative work of the Library even though the source code is not.\n"
- "Whether this is true is especially significant if the work can be\n"
- "linked without the Library, or if the work is itself a library. The\n"
- "threshold for this to be true is not precisely defined by law.\n"
- "\n"
- " If such an object file uses only numerical parameters, data\n"
- "structure layouts and accessors, and small macros and small inline\n"
- "functions (ten lines or less in length), then the use of the object\n"
- "file is unrestricted, regardless of whether it is legally a derivative\n"
- "work. (Executables containing this object code plus portions of the\n"
- "Library will still fall under Section 6.)\n"
- "\n"
- " Otherwise, if the work is a derivative of the Library, you may\n"
- "distribute the object code for the work under the terms of Section 6.\n"
- "Any executables containing that work also fall under Section 6,\n"
- "whether or not they are linked directly with the Library itself.\n"
- "\n"
- " 6. As an exception to the Sections above, you may also compile or\n"
- "link a \"work that uses the Library\" with the Library to produce a\n"
- "work containing portions of the Library, and distribute that work\n"
- "under terms of your choice, provided that the terms permit\n"
- "modification of the work for the customer's own use and reverse\n"
- "engineering for debugging such modifications.\n"
- "\n"
- " You must give prominent notice with each copy of the work that the\n"
- "Library is used in it and that the Library and its use are covered by\n"
- "this License. You must supply a copy of this License. If the work\n"
- "during execution displays copyright notices, you must include the\n"
- "copyright notice for the Library among them, as well as a reference\n"
- "directing the user to the copy of this License. Also, you must do one\n"
- "of these things:\n"
- "\n"
- " a) Accompany the work with the complete corresponding\n"
- " machine-readable source code for the Library including whatever\n"
- " changes were used in the work (which must be distributed under\n"
- " Sections 1 and 2 above); and, if the work is an executable linked\n"
- " with the Library, with the complete machine-readable \"work that\n"
- " uses the Library\", as object code and/or source code, so that the\n"
- " user can modify the Library and then relink to produce a modified\n"
- " executable containing the modified Library. (It is understood\n"
- " that the user who changes the contents of definitions files in the\n"
- " Library will not necessarily be able to recompile the application\n"
- " to use the modified definitions.)\n"
- "\n"
- " b) Accompany the work with a written offer, valid for at\n"
- " least three years, to give the same user the materials\n"
- " specified in Subsection 6a, above, for a charge no more\n"
- " than the cost of performing this distribution.\n"
- "\n"
- " c) If distribution of the work is made by offering access to copy\n"
- " from a designated place, offer equivalent access to copy the above\n"
- " specified materials from the same place.\n"
- "\n"
- " d) Verify that the user has already received a copy of these\n"
- " materials or that you have already sent this user a copy.\n"
- "\n"
- " For an executable, the required form of the \"work that uses the\n"
- "Library\" must include any data and utility programs needed for\n"
- "reproducing the executable from it. However, as a special exception,\n"
- "the source code distributed need not include anything that is normally\n"
- "distributed (in either source or binary form) with the major\n"
- "components (compiler, kernel, and so on) of the operating system on\n"
- "which the executable runs, unless that component itself accompanies\n"
- "the executable.\n"
- "\n"
- " It may happen that this requirement contradicts the license\n"
- "restrictions of other proprietary libraries that do not normally\n"
- "accompany the operating system. Such a contradiction means you cannot\n"
- "use both them and the Library together in an executable that you\n"
- "distribute.\n"
- "\n"
- " 7. You may place library facilities that are a work based on the\n"
- "Library side-by-side in a single library together with other library\n"
- "facilities not covered by this License, and distribute such a combined\n"
- "library, provided that the separate distribution of the work based on\n"
- "the Library and of the other library facilities is otherwise\n"
- "permitted, and provided that you do these two things:\n"
- "\n"
- " a) Accompany the combined library with a copy of the same work\n"
- " based on the Library, uncombined with any other library\n"
- " facilities. This must be distributed under the terms of the\n"
- " Sections above.\n"
- "\n"
- " b) Give prominent notice with the combined library of the fact\n"
- " that part of it is a work based on the Library, and explaining\n"
- " where to find the accompanying uncombined form of the same work.\n"
- "\n"
- " 8. You may not copy, modify, sublicense, link with, or distribute\n"
- "the Library except as expressly provided under this License. Any\n"
- "attempt otherwise to copy, modify, sublicense, link with, or\n"
- "distribute the Library is void, and will automatically terminate your\n"
- "rights under this License. However, parties who have received copies,\n"
- "or rights, from you under this License will not have their licenses\n"
- "terminated so long as such parties remain in full compliance.\n"
- "\n"
- " 9. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Library or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Library (or any work based on the\n"
- "Library), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Library or works based on it.\n"
- "\n"
- " 10. Each time you redistribute the Library (or any work based on the\n"
- "Library), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute, link with or modify the Library\n"
- "subject to these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties to\n"
- "this License.\n"
- "\n"
- " 11. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Library at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Library by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Library.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under any\n"
- "particular circumstance, the balance of the section is intended to apply,\n"
- "and the section as a whole is intended to apply in other circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 12. If the distribution and/or use of the Library is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Library under this License may add\n"
- "an explicit geographical distribution limitation excluding those countries,\n"
- "so that distribution is permitted only in or among countries not thus\n"
- "excluded. In such case, this License incorporates the limitation as if\n"
- "written in the body of this License.\n"
- "\n"
- " 13. The Free Software Foundation may publish revised and/or new\n"
- "versions of the Library General Public License from time to time.\n"
- "Such new versions will be similar in spirit to the present version,\n"
- "but may differ in detail to address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Library\n"
- "specifies a version number of this License which applies to it and\n"
- "\"any later version\", you have the option of following the terms and\n"
- "conditions either of that version or of any later version published by\n"
- "the Free Software Foundation. If the Library does not specify a\n"
- "license version number, you may choose any version ever published by\n"
- "the Free Software Foundation.\n"
- "\n"
- " 14. If you wish to incorporate parts of the Library into other free\n"
- "programs whose distribution conditions are incompatible with these,\n"
- "write to the author to ask for permission. For software which is\n"
- "copyrighted by the Free Software Foundation, write to the Free\n"
- "Software Foundation; we sometimes make exceptions for this. Our\n"
- "decision will be guided by the two goals of preserving the free status\n"
- "of all derivatives of our free software and of promoting the sharing\n"
- "and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\n"
- "WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\n"
- "EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\n"
- "OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\n"
- "KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\n"
- "LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\n"
- "THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n"
- "\n"
- " 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\n"
- "WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\n"
- "AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\n"
- "FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\n"
- "CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\n"
- "LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\n"
- "RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\n"
- "FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\n"
- "SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Libraries\n"
- "\n"
- " If you develop a new library, and you want it to be of the greatest\n"
- "possible use to the public, we recommend making it free software that\n"
- "everyone can redistribute and change. You can do so by permitting\n"
- "redistribution under these terms (or, alternatively, under the terms of the\n"
- "ordinary General Public License).\n"
- "\n"
- " To apply these terms, attach the following notices to the library. It is\n"
- "safest to attach them to the start of each source file to most effectively\n"
- "convey the exclusion of warranty; and each file should have at least the\n"
- "\"copyright\" line and a pointer to where the full notice is found.\n"
- "\n"
- " <one line to give the library's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This library is free software; you can redistribute it and/or\n"
- " modify it under the terms of the GNU Library General Public\n"
- " License as published by the Free Software Foundation; either\n"
- " version 2 of the License, or (at your option) any later version.\n"
- "\n"
- " This library is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- " Library General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU Library General Public\n"
- " License along with this library; if not, write to the \n"
- " Free Software Foundation, Inc., 59 Temple Place - Suite 330, \n"
- " Boston, MA 02111-1307 USA.\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or your\n"
- "school, if any, to sign a \"copyright disclaimer\" for the library, if\n"
- "necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the\n"
- " library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1990\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "That's all there is to it!";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibcap2 = "Unless otherwise *explicitly* stated, the following text describes the\n"
- "licensed conditions under which the contents of this libcap release\n"
- "may be used and distributed:\n"
- "\n"
- "-------------------------------------------------------------------------\n"
- "Redistribution and use in source and binary forms of libcap, with\n"
- "or without modification, are permitted provided that the following\n"
- "conditions are met:\n"
- "\n"
- "1. Redistributions of source code must retain any existing copyright\n"
- " notice, and this entire permission notice in its entirety,\n"
- " including the disclaimer of warranties.\n"
- "\n"
- "2. Redistributions in binary form must reproduce all prior and current\n"
- " copyright notices, this list of conditions, and the following\n"
- " disclaimer in the documentation and/or other materials provided\n"
- " with the distribution.\n"
- "\n"
- "3. The name of any author may not be used to endorse or promote\n"
- " products derived from this software without their specific prior\n"
- " written permission.\n"
- "\n"
- "ALTERNATIVELY, this product may be distributed under the terms of the\n"
- "GNU General Public License (v2.0 - see below), in which case the\n"
- "provisions of the GNU GPL are required INSTEAD OF the above\n"
- "restrictions. (This clause is necessary due to a potential conflict\n"
- "between the GNU GPL and the restrictions contained in a BSD-style\n"
- "copyright.)\n"
- "\n"
- "THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED\n"
- "WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n"
- "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n"
- "IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,\n"
- "INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n"
- "BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\n"
- "OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n"
- "ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n"
- "TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE\n"
- "USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGE.\n"
- "-------------------------------------------------------------------------\n"
- "\n"
- "-------------------------\n"
- "Full text of gpl-2.0.txt:\n"
- "-------------------------\n"
- "\n"
- " GNU GENERAL PUBLIC LICENSE\n"
- " Version 2, June 1991\n"
- "\n"
- " Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n"
- " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "License is intended to guarantee your freedom to share and change free\n"
- "software--to make sure the software is free for all its users. This\n"
- "General Public License applies to most of the Free Software\n"
- "Foundation's software and to any other program whose authors commit to\n"
- "using it. (Some other Free Software Foundation software is covered by\n"
- "the GNU Lesser General Public License instead.) You can apply it to\n"
- "your programs, too.\n"
- "\n"
- " When we speak of free software, we are referring to freedom, not\n"
- "price. Our General Public Licenses are designed to make sure that you\n"
- "have the freedom to distribute copies of free software (and charge for\n"
- "this service if you wish), that you receive source code or can get it\n"
- "if you want it, that you can change the software or use pieces of it\n"
- "in new free programs; and that you know you can do these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "anyone to deny you these rights or to ask you to surrender the rights.\n"
- "These restrictions translate to certain responsibilities for you if you\n"
- "distribute copies of the software, or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of such a program, whether\n"
- "gratis or for a fee, you must give the recipients all the rights that\n"
- "you have. You must make sure that they, too, receive or can get the\n"
- "source code. And you must show them these terms so they know their\n"
- "rights.\n"
- "\n"
- " We protect your rights with two steps: (1) copyright the software, and\n"
- "(2) offer you this license which gives you legal permission to copy,\n"
- "distribute and/or modify the software.\n"
- "\n"
- " Also, for each author's protection and ours, we want to make certain\n"
- "that everyone understands that there is no warranty for this free\n"
- "software. If the software is modified by someone else and passed on, we\n"
- "want its recipients to know that what they have is not the original, so\n"
- "that any problems introduced by others will not reflect on the original\n"
- "authors' reputations.\n"
- "\n"
- " Finally, any free program is threatened constantly by software\n"
- "patents. We wish to avoid the danger that redistributors of a free\n"
- "program will individually obtain patent licenses, in effect making the\n"
- "program proprietary. To prevent this, we have made it clear that any\n"
- "patent must be licensed for everyone's free use or not licensed at all.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow.\n"
- "\n"
- " GNU GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License applies to any program or other work which contains\n"
- "a notice placed by the copyright holder saying it may be distributed\n"
- "under the terms of this General Public License. The \"Program\", below,\n"
- "refers to any such program or work, and a \"work based on the Program\"\n"
- "means either the Program or any derivative work under copyright law:\n"
- "that is to say, a work containing the Program or a portion of it,\n"
- "either verbatim or with modifications and/or translated into another\n"
- "language. (Hereinafter, translation is included without limitation in\n"
- "the term \"modification\".) Each licensee is addressed as \"you\".\n"
- "\n"
- "Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running the Program is not restricted, and the output from the Program\n"
- "is covered only if its contents constitute a work based on the\n"
- "Program (independent of having been made by running the Program).\n"
- "Whether that is true depends on what the Program does.\n"
- "\n"
- " 1. You may copy and distribute verbatim copies of the Program's\n"
- "source code as you receive it, in any medium, provided that you\n"
- "conspicuously and appropriately publish on each copy an appropriate\n"
- "copyright notice and disclaimer of warranty; keep intact all the\n"
- "notices that refer to this License and to the absence of any warranty;\n"
- "and give any other recipients of the Program a copy of this License\n"
- "along with the Program.\n"
- "\n"
- "You may charge a fee for the physical act of transferring a copy, and\n"
- "you may at your option offer warranty protection in exchange for a fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Program or any portion\n"
- "of it, thus forming a work based on the Program, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) You must cause the modified files to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " b) You must cause any work that you distribute or publish, that in\n"
- " whole or in part contains or is derived from the Program or any\n"
- " part thereof, to be licensed as a whole at no charge to all third\n"
- " parties under the terms of this License.\n"
- "\n"
- " c) If the modified program normally reads commands interactively\n"
- " when run, you must cause it, when started running for such\n"
- " interactive use in the most ordinary way, to print or display an\n"
- " announcement including an appropriate copyright notice and a\n"
- " notice that there is no warranty (or else, saying that you provide\n"
- " a warranty) and that users may redistribute the program under\n"
- " these conditions, and telling the user how to view a copy of this\n"
- " License. (Exception: if the Program itself is interactive but\n"
- " does not normally print such an announcement, your work based on\n"
- " the Program is not required to print an announcement.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Program,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Program, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Program.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Program\n"
- "with the Program (or with a work based on the Program) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may copy and distribute the Program (or a work based on it,\n"
- "under Section 2) in object code or executable form under the terms of\n"
- "Sections 1 and 2 above provided that you also do one of the following:\n"
- "\n"
- " a) Accompany it with the complete corresponding machine-readable\n"
- " source code, which must be distributed under the terms of Sections\n"
- " 1 and 2 above on a medium customarily used for software interchange; or,\n"
- "\n"
- " b) Accompany it with a written offer, valid for at least three\n"
- " years, to give any third party, for a charge no more than your\n"
- " cost of physically performing source distribution, a complete\n"
- " machine-readable copy of the corresponding source code, to be\n"
- " distributed under the terms of Sections 1 and 2 above on a medium\n"
- " customarily used for software interchange; or,\n"
- "\n"
- " c) Accompany it with the information you received as to the offer\n"
- " to distribute corresponding source code. (This alternative is\n"
- " allowed only for noncommercial distribution and only if you\n"
- " received the program in object code or executable form with such\n"
- " an offer, in accord with Subsection b above.)\n"
- "\n"
- "The source code for a work means the preferred form of the work for\n"
- "making modifications to it. For an executable work, complete source\n"
- "code means all the source code for all modules it contains, plus any\n"
- "associated interface definition files, plus the scripts used to\n"
- "control compilation and installation of the executable. However, as a\n"
- "special exception, the source code distributed need not include\n"
- "anything that is normally distributed (in either source or binary\n"
- "form) with the major components (compiler, kernel, and so on) of the\n"
- "operating system on which the executable runs, unless that component\n"
- "itself accompanies the executable.\n"
- "\n"
- "If distribution of executable or object code is made by offering\n"
- "access to copy from a designated place, then offering equivalent\n"
- "access to copy the source code from the same place counts as\n"
- "distribution of the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 4. You may not copy, modify, sublicense, or distribute the Program\n"
- "except as expressly provided under this License. Any attempt\n"
- "otherwise to copy, modify, sublicense or distribute the Program is\n"
- "void, and will automatically terminate your rights under this License.\n"
- "However, parties who have received copies, or rights, from you under\n"
- "this License will not have their licenses terminated so long as such\n"
- "parties remain in full compliance.\n"
- "\n"
- " 5. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Program or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Program (or any work based on the\n"
- "Program), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Program or works based on it.\n"
- "\n"
- " 6. Each time you redistribute the Program (or any work based on the\n"
- "Program), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute or modify the Program subject to\n"
- "these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties to\n"
- "this License.\n"
- "\n"
- " 7. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Program at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Program by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Program.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under\n"
- "any particular circumstance, the balance of the section is intended to\n"
- "apply and the section as a whole is intended to apply in other\n"
- "circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system, which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 8. If the distribution and/or use of the Program is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Program under this License\n"
- "may add an explicit geographical distribution limitation excluding\n"
- "those countries, so that distribution is permitted only in or among\n"
- "countries not thus excluded. In such case, this License incorporates\n"
- "the limitation as if written in the body of this License.\n"
- "\n"
- " 9. The Free Software Foundation may publish revised and/or new versions\n"
- "of the General Public License from time to time. Such new versions will\n"
- "be similar in spirit to the present version, but may differ in detail to\n"
- "address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Program\n"
- "specifies a version number of this License which applies to it and \"any\n"
- "later version\", you have the option of following the terms and conditions\n"
- "either of that version or of any later version published by the Free\n"
- "Software Foundation. If the Program does not specify a version number of\n"
- "this License, you may choose any version ever published by the Free Software\n"
- "Foundation.\n"
- "\n"
- " 10. If you wish to incorporate parts of the Program into other free\n"
- "programs whose distribution conditions are different, write to the author\n"
- "to ask for permission. For software which is copyrighted by the Free\n"
- "Software Foundation, write to the Free Software Foundation; we sometimes\n"
- "make exceptions for this. Our decision will be guided by the two goals\n"
- "of preserving the free status of all derivatives of our free software and\n"
- "of promoting the sharing and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n"
- "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n"
- "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n"
- "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n"
- "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n"
- "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n"
- "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n"
- "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n"
- "REPAIR OR CORRECTION.\n"
- "\n"
- " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n"
- "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n"
- "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n"
- "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n"
- "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n"
- "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n"
- "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n"
- "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n"
- "POSSIBILITY OF SUCH DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Programs\n"
- "\n"
- " If you develop a new program, and you want it to be of the greatest\n"
- "possible use to the public, the best way to achieve this is to make it\n"
- "free software which everyone can redistribute and change under these terms.\n"
- "\n"
- " To do so, attach the following notices to the program. It is safest\n"
- "to attach them to the start of each source file to most effectively\n"
- "convey the exclusion of warranty; and each file should have at least\n"
- "the \"copyright\" line and a pointer to where the full notice is found.\n"
- "\n"
- " <one line to give the program's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This program is free software; you can redistribute it and/or modify\n"
- " it under the terms of the GNU General Public License as published by\n"
- " the Free Software Foundation; either version 2 of the License, or\n"
- " (at your option) any later version.\n"
- "\n"
- " This program is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- " GNU General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU General Public License along\n"
- " with this program; if not, write to the Free Software Foundation, Inc.,\n"
- " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "If the program is interactive, make it output a short notice like this\n"
- "when it starts in an interactive mode:\n"
- "\n"
- " Gnomovision version 69, Copyright (C) year name of author\n"
- " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n"
- " This is free software, and you are welcome to redistribute it\n"
- " under certain conditions; type `show c' for details.\n"
- "\n"
- "The hypothetical commands `show w' and `show c' should show the appropriate\n"
- "parts of the General Public License. Of course, the commands you use may\n"
- "be called something other than `show w' and `show c'; they could even be\n"
- "mouse-clicks or menu items--whatever suits your program.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or your\n"
- "school, if any, to sign a \"copyright disclaimer\" for the program, if\n"
- "necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n"
- " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1989\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "This General Public License does not permit incorporating your program into\n"
- "proprietary programs. If your program is a subroutine library, you may\n"
- "consider it more useful to permit linking proprietary applications with the\n"
- "library. If this is what you want to do, use the GNU Lesser General\n"
- "Public License instead of this License.";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibdaemon = "Copyright 2003-2009 Lennart Poettering <mzqnrzba (at) 0pointer (dot) de>\n"
- "\n"
- "This program is free software; you can redistribute it and/or modify it\n"
- "under the terms of the GNU Lesser General Public License as published\n"
- "by the Free Software Foundation, either version 2.1 of the License, or\n"
- "(at your option) any later version.\n"
- "\n"
- "This program is distributed in the hope that it will be useful, but\n"
- "WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\n"
- "General Public License for more details.\n"
- "\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " Version 2.1, February 1999\n"
- "\n"
- " Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n"
- " 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\n"
- " Everyone is permitted to copy and distribute verbatim copies\n"
- " of this license document, but changing it is not allowed.\n"
- "\n"
- "[This is the first released version of the Lesser GPL. It also counts\n"
- " as the successor of the GNU Library Public License, version 2, hence\n"
- " the version number 2.1.]\n"
- "\n"
- " Preamble\n"
- "\n"
- " The licenses for most software are designed to take away your\n"
- "freedom to share and change it. By contrast, the GNU General Public\n"
- "Licenses are intended to guarantee your freedom to share and change\n"
- "free software--to make sure the software is free for all its users.\n"
- "\n"
- " This license, the Lesser General Public License, applies to some\n"
- "specially designated software packages--typically libraries--of the\n"
- "Free Software Foundation and other authors who decide to use it. You\n"
- "can use it too, but we suggest you first think carefully about whether\n"
- "this license or the ordinary General Public License is the better\n"
- "strategy to use in any particular case, based on the explanations\n"
- "below.\n"
- "\n"
- " When we speak of free software, we are referring to freedom of use,\n"
- "not price. Our General Public Licenses are designed to make sure that\n"
- "you have the freedom to distribute copies of free software (and charge\n"
- "for this service if you wish); that you receive source code or can get\n"
- "it if you want it; that you can change the software and use pieces of\n"
- "it in new free programs; and that you are informed that you can do\n"
- "these things.\n"
- "\n"
- " To protect your rights, we need to make restrictions that forbid\n"
- "distributors to deny you these rights or to ask you to surrender these\n"
- "rights. These restrictions translate to certain responsibilities for\n"
- "you if you distribute copies of the library or if you modify it.\n"
- "\n"
- " For example, if you distribute copies of the library, whether gratis\n"
- "or for a fee, you must give the recipients all the rights that we gave\n"
- "you. You must make sure that they, too, receive or can get the source\n"
- "code. If you link other code with the library, you must provide\n"
- "complete object files to the recipients, so that they can relink them\n"
- "with the library after making changes to the library and recompiling\n"
- "it. And you must show them these terms so they know their rights.\n"
- "\n"
- " We protect your rights with a two-step method: (1) we copyright the\n"
- "library, and (2) we offer you this license, which gives you legal\n"
- "permission to copy, distribute and/or modify the library.\n"
- "\n"
- " To protect each distributor, we want to make it very clear that\n"
- "there is no warranty for the free library. Also, if the library is\n"
- "modified by someone else and passed on, the recipients should know\n"
- "that what they have is not the original version, so that the original\n"
- "author's reputation will not be affected by problems that might be\n"
- "introduced by others.\n"
- "\n"
- " Finally, software patents pose a constant threat to the existence of\n"
- "any free program. We wish to make sure that a company cannot\n"
- "effectively restrict the users of a free program by obtaining a\n"
- "restrictive license from a patent holder. Therefore, we insist that\n"
- "any patent license obtained for a version of the library must be\n"
- "consistent with the full freedom of use specified in this license.\n"
- "\n"
- " Most GNU software, including some libraries, is covered by the\n"
- "ordinary GNU General Public License. This license, the GNU Lesser\n"
- "General Public License, applies to certain designated libraries, and\n"
- "is quite different from the ordinary General Public License. We use\n"
- "this license for certain libraries in order to permit linking those\n"
- "libraries into non-free programs.\n"
- "\n"
- " When a program is linked with a library, whether statically or using\n"
- "a shared library, the combination of the two is legally speaking a\n"
- "combined work, a derivative of the original library. The ordinary\n"
- "General Public License therefore permits such linking only if the\n"
- "entire combination fits its criteria of freedom. The Lesser General\n"
- "Public License permits more lax criteria for linking other code with\n"
- "the library.\n"
- "\n"
- " We call this license the \"Lesser\" General Public License because it\n"
- "does Less to protect the user's freedom than the ordinary General\n"
- "Public License. It also provides other free software developers Less\n"
- "of an advantage over competing non-free programs. These disadvantages\n"
- "are the reason we use the ordinary General Public License for many\n"
- "libraries. However, the Lesser license provides advantages in certain\n"
- "special circumstances.\n"
- "\n"
- " For example, on rare occasions, there may be a special need to\n"
- "encourage the widest possible use of a certain library, so that it\n"
- "becomes a de-facto standard. To achieve this, non-free programs must\n"
- "be allowed to use the library. A more frequent case is that a free\n"
- "library does the same job as widely used non-free libraries. In this\n"
- "case, there is little to gain by limiting the free library to free\n"
- "software only, so we use the Lesser General Public License.\n"
- "\n"
- " In other cases, permission to use a particular library in non-free\n"
- "programs enables a greater number of people to use a large body of\n"
- "free software. For example, permission to use the GNU C Library in\n"
- "non-free programs enables many more people to use the whole GNU\n"
- "operating system, as well as its variant, the GNU/Linux operating\n"
- "system.\n"
- "\n"
- " Although the Lesser General Public License is Less protective of the\n"
- "users' freedom, it does ensure that the user of a program that is\n"
- "linked with the Library has the freedom and the wherewithal to run\n"
- "that program using a modified version of the Library.\n"
- "\n"
- " The precise terms and conditions for copying, distribution and\n"
- "modification follow. Pay close attention to the difference between a\n"
- "\"work based on the library\" and a \"work that uses the library\". The\n"
- "former contains code derived from the library, whereas the latter must\n"
- "be combined with the library in order to run.\n"
- "\n"
- " GNU LESSER GENERAL PUBLIC LICENSE\n"
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
- "\n"
- " 0. This License Agreement applies to any software library or other\n"
- "program which contains a notice placed by the copyright holder or\n"
- "other authorized party saying it may be distributed under the terms of\n"
- "this Lesser General Public License (also called \"this License\").\n"
- "Each licensee is addressed as \"you\".\n"
- "\n"
- " A \"library\" means a collection of software functions and/or data\n"
- "prepared so as to be conveniently linked with application programs\n"
- "(which use some of those functions and data) to form executables.\n"
- "\n"
- " The \"Library\", below, refers to any such software library or work\n"
- "which has been distributed under these terms. A \"work based on the\n"
- "Library\" means either the Library or any derivative work under\n"
- "copyright law: that is to say, a work containing the Library or a\n"
- "portion of it, either verbatim or with modifications and/or translated\n"
- "straightforwardly into another language. (Hereinafter, translation is\n"
- "included without limitation in the term \"modification\".)\n"
- "\n"
- " \"Source code\" for a work means the preferred form of the work for\n"
- "making modifications to it. For a library, complete source code means\n"
- "all the source code for all modules it contains, plus any associated\n"
- "interface definition files, plus the scripts used to control\n"
- "compilation and installation of the library.\n"
- "\n"
- " Activities other than copying, distribution and modification are not\n"
- "covered by this License; they are outside its scope. The act of\n"
- "running a program using the Library is not restricted, and output from\n"
- "such a program is covered only if its contents constitute a work based\n"
- "on the Library (independent of the use of the Library in a tool for\n"
- "writing it). Whether that is true depends on what the Library does\n"
- "and what the program that uses the Library does.\n"
- "\n"
- " 1. You may copy and distribute verbatim copies of the Library's\n"
- "complete source code as you receive it, in any medium, provided that\n"
- "you conspicuously and appropriately publish on each copy an\n"
- "appropriate copyright notice and disclaimer of warranty; keep intact\n"
- "all the notices that refer to this License and to the absence of any\n"
- "warranty; and distribute a copy of this License along with the\n"
- "Library.\n"
- "\n"
- " You may charge a fee for the physical act of transferring a copy,\n"
- "and you may at your option offer warranty protection in exchange for a\n"
- "fee.\n"
- "\n"
- " 2. You may modify your copy or copies of the Library or any portion\n"
- "of it, thus forming a work based on the Library, and copy and\n"
- "distribute such modifications or work under the terms of Section 1\n"
- "above, provided that you also meet all of these conditions:\n"
- "\n"
- " a) The modified work must itself be a software library.\n"
- "\n"
- " b) You must cause the files modified to carry prominent notices\n"
- " stating that you changed the files and the date of any change.\n"
- "\n"
- " c) You must cause the whole of the work to be licensed at no\n"
- " charge to all third parties under the terms of this License.\n"
- "\n"
- " d) If a facility in the modified Library refers to a function or a\n"
- " table of data to be supplied by an application program that uses\n"
- " the facility, other than as an argument passed when the facility\n"
- " is invoked, then you must make a good faith effort to ensure that,\n"
- " in the event an application does not supply such function or\n"
- " table, the facility still operates, and performs whatever part of\n"
- " its purpose remains meaningful.\n"
- "\n"
- " (For example, a function in a library to compute square roots has\n"
- " a purpose that is entirely well-defined independent of the\n"
- " application. Therefore, Subsection 2d requires that any\n"
- " application-supplied function or table used by this function must\n"
- " be optional: if the application does not supply it, the square\n"
- " root function must still compute square roots.)\n"
- "\n"
- "These requirements apply to the modified work as a whole. If\n"
- "identifiable sections of that work are not derived from the Library,\n"
- "and can be reasonably considered independent and separate works in\n"
- "themselves, then this License, and its terms, do not apply to those\n"
- "sections when you distribute them as separate works. But when you\n"
- "distribute the same sections as part of a whole which is a work based\n"
- "on the Library, the distribution of the whole must be on the terms of\n"
- "this License, whose permissions for other licensees extend to the\n"
- "entire whole, and thus to each and every part regardless of who wrote\n"
- "it.\n"
- "\n"
- "Thus, it is not the intent of this section to claim rights or contest\n"
- "your rights to work written entirely by you; rather, the intent is to\n"
- "exercise the right to control the distribution of derivative or\n"
- "collective works based on the Library.\n"
- "\n"
- "In addition, mere aggregation of another work not based on the Library\n"
- "with the Library (or with a work based on the Library) on a volume of\n"
- "a storage or distribution medium does not bring the other work under\n"
- "the scope of this License.\n"
- "\n"
- " 3. You may opt to apply the terms of the ordinary GNU General Public\n"
- "License instead of this License to a given copy of the Library. To do\n"
- "this, you must alter all the notices that refer to this License, so\n"
- "that they refer to the ordinary GNU General Public License, version 2,\n"
- "instead of to this License. (If a newer version than version 2 of the\n"
- "ordinary GNU General Public License has appeared, then you can specify\n"
- "that version instead if you wish.) Do not make any other change in\n"
- "these notices.\n"
- "\n"
- " Once this change is made in a given copy, it is irreversible for\n"
- "that copy, so the ordinary GNU General Public License applies to all\n"
- "subsequent copies and derivative works made from that copy.\n"
- "\n"
- " This option is useful when you wish to copy part of the code of\n"
- "the Library into a program that is not a library.\n"
- "\n"
- " 4. You may copy and distribute the Library (or a portion or\n"
- "derivative of it, under Section 2) in object code or executable form\n"
- "under the terms of Sections 1 and 2 above provided that you accompany\n"
- "it with the complete corresponding machine-readable source code, which\n"
- "must be distributed under the terms of Sections 1 and 2 above on a\n"
- "medium customarily used for software interchange.\n"
- "\n"
- " If distribution of object code is made by offering access to copy\n"
- "from a designated place, then offering equivalent access to copy the\n"
- "source code from the same place satisfies the requirement to\n"
- "distribute the source code, even though third parties are not\n"
- "compelled to copy the source along with the object code.\n"
- "\n"
- " 5. A program that contains no derivative of any portion of the\n"
- "Library, but is designed to work with the Library by being compiled or\n"
- "linked with it, is called a \"work that uses the Library\". Such a\n"
- "work, in isolation, is not a derivative work of the Library, and\n"
- "therefore falls outside the scope of this License.\n"
- "\n"
- " However, linking a \"work that uses the Library\" with the Library\n"
- "creates an executable that is a derivative of the Library (because it\n"
- "contains portions of the Library), rather than a \"work that uses the\n"
- "library\". The executable is therefore covered by this License.\n"
- "Section 6 states terms for distribution of such executables.\n"
- "\n"
- " When a \"work that uses the Library\" uses material from a header file\n"
- "that is part of the Library, the object code for the work may be a\n"
- "derivative work of the Library even though the source code is not.\n"
- "Whether this is true is especially significant if the work can be\n"
- "linked without the Library, or if the work is itself a library. The\n"
- "threshold for this to be true is not precisely defined by law.\n"
- "\n"
- " If such an object file uses only numerical parameters, data\n"
- "structure layouts and accessors, and small macros and small inline\n"
- "functions (ten lines or less in length), then the use of the object\n"
- "file is unrestricted, regardless of whether it is legally a derivative\n"
- "work. (Executables containing this object code plus portions of the\n"
- "Library will still fall under Section 6.)\n"
- "\n"
- " Otherwise, if the work is a derivative of the Library, you may\n"
- "distribute the object code for the work under the terms of Section 6.\n"
- "Any executables containing that work also fall under Section 6,\n"
- "whether or not they are linked directly with the Library itself.\n"
- "\n"
- " 6. As an exception to the Sections above, you may also combine or\n"
- "link a \"work that uses the Library\" with the Library to produce a\n"
- "work containing portions of the Library, and distribute that work\n"
- "under terms of your choice, provided that the terms permit\n"
- "modification of the work for the customer's own use and reverse\n"
- "engineering for debugging such modifications.\n"
- "\n"
- " You must give prominent notice with each copy of the work that the\n"
- "Library is used in it and that the Library and its use are covered by\n"
- "this License. You must supply a copy of this License. If the work\n"
- "during execution displays copyright notices, you must include the\n"
- "copyright notice for the Library among them, as well as a reference\n"
- "directing the user to the copy of this License. Also, you must do one\n"
- "of these things:\n"
- "\n"
- " a) Accompany the work with the complete corresponding\n"
- " machine-readable source code for the Library including whatever\n"
- " changes were used in the work (which must be distributed under\n"
- " Sections 1 and 2 above); and, if the work is an executable linked\n"
- " with the Library, with the complete machine-readable \"work that\n"
- " uses the Library\", as object code and/or source code, so that the\n"
- " user can modify the Library and then relink to produce a modified\n"
- " executable containing the modified Library. (It is understood\n"
- " that the user who changes the contents of definitions files in the\n"
- " Library will not necessarily be able to recompile the application\n"
- " to use the modified definitions.)\n"
- "\n"
- " b) Use a suitable shared library mechanism for linking with the\n"
- " Library. A suitable mechanism is one that (1) uses at run time a\n"
- " copy of the library already present on the user's computer system,\n"
- " rather than copying library functions into the executable, and (2)\n"
- " will operate properly with a modified version of the library, if\n"
- " the user installs one, as long as the modified version is\n"
- " interface-compatible with the version that the work was made with.\n"
- "\n"
- " c) Accompany the work with a written offer, valid for at least\n"
- " three years, to give the same user the materials specified in\n"
- " Subsection 6a, above, for a charge no more than the cost of\n"
- " performing this distribution.\n"
- "\n"
- " d) If distribution of the work is made by offering access to copy\n"
- " from a designated place, offer equivalent access to copy the above\n"
- " specified materials from the same place.\n"
- "\n"
- " e) Verify that the user has already received a copy of these\n"
- " materials or that you have already sent this user a copy.\n"
- "\n"
- " For an executable, the required form of the \"work that uses the\n"
- "Library\" must include any data and utility programs needed for\n"
- "reproducing the executable from it. However, as a special exception,\n"
- "the materials to be distributed need not include anything that is\n"
- "normally distributed (in either source or binary form) with the major\n"
- "components (compiler, kernel, and so on) of the operating system on\n"
- "which the executable runs, unless that component itself accompanies\n"
- "the executable.\n"
- "\n"
- " It may happen that this requirement contradicts the license\n"
- "restrictions of other proprietary libraries that do not normally\n"
- "accompany the operating system. Such a contradiction means you cannot\n"
- "use both them and the Library together in an executable that you\n"
- "distribute.\n"
- "\n"
- " 7. You may place library facilities that are a work based on the\n"
- "Library side-by-side in a single library together with other library\n"
- "facilities not covered by this License, and distribute such a combined\n"
- "library, provided that the separate distribution of the work based on\n"
- "the Library and of the other library facilities is otherwise\n"
- "permitted, and provided that you do these two things:\n"
- "\n"
- " a) Accompany the combined library with a copy of the same work\n"
- " based on the Library, uncombined with any other library\n"
- " facilities. This must be distributed under the terms of the\n"
- " Sections above.\n"
- "\n"
- " b) Give prominent notice with the combined library of the fact\n"
- " that part of it is a work based on the Library, and explaining\n"
- " where to find the accompanying uncombined form of the same work.\n"
- "\n"
- " 8. You may not copy, modify, sublicense, link with, or distribute\n"
- "the Library except as expressly provided under this License. Any\n"
- "attempt otherwise to copy, modify, sublicense, link with, or\n"
- "distribute the Library is void, and will automatically terminate your\n"
- "rights under this License. However, parties who have received copies,\n"
- "or rights, from you under this License will not have their licenses\n"
- "terminated so long as such parties remain in full compliance.\n"
- "\n"
- " 9. You are not required to accept this License, since you have not\n"
- "signed it. However, nothing else grants you permission to modify or\n"
- "distribute the Library or its derivative works. These actions are\n"
- "prohibited by law if you do not accept this License. Therefore, by\n"
- "modifying or distributing the Library (or any work based on the\n"
- "Library), you indicate your acceptance of this License to do so, and\n"
- "all its terms and conditions for copying, distributing or modifying\n"
- "the Library or works based on it.\n"
- "\n"
- " 10. Each time you redistribute the Library (or any work based on the\n"
- "Library), the recipient automatically receives a license from the\n"
- "original licensor to copy, distribute, link with or modify the Library\n"
- "subject to these terms and conditions. You may not impose any further\n"
- "restrictions on the recipients' exercise of the rights granted herein.\n"
- "You are not responsible for enforcing compliance by third parties with\n"
- "this License.\n"
- "\n"
- " 11. If, as a consequence of a court judgment or allegation of patent\n"
- "infringement or for any other reason (not limited to patent issues),\n"
- "conditions are imposed on you (whether by court order, agreement or\n"
- "otherwise) that contradict the conditions of this License, they do not\n"
- "excuse you from the conditions of this License. If you cannot\n"
- "distribute so as to satisfy simultaneously your obligations under this\n"
- "License and any other pertinent obligations, then as a consequence you\n"
- "may not distribute the Library at all. For example, if a patent\n"
- "license would not permit royalty-free redistribution of the Library by\n"
- "all those who receive copies directly or indirectly through you, then\n"
- "the only way you could satisfy both it and this License would be to\n"
- "refrain entirely from distribution of the Library.\n"
- "\n"
- "If any portion of this section is held invalid or unenforceable under\n"
- "any particular circumstance, the balance of the section is intended to\n"
- "apply, and the section as a whole is intended to apply in other\n"
- "circumstances.\n"
- "\n"
- "It is not the purpose of this section to induce you to infringe any\n"
- "patents or other property right claims or to contest validity of any\n"
- "such claims; this section has the sole purpose of protecting the\n"
- "integrity of the free software distribution system which is\n"
- "implemented by public license practices. Many people have made\n"
- "generous contributions to the wide range of software distributed\n"
- "through that system in reliance on consistent application of that\n"
- "system; it is up to the author/donor to decide if he or she is willing\n"
- "to distribute software through any other system and a licensee cannot\n"
- "impose that choice.\n"
- "\n"
- "This section is intended to make thoroughly clear what is believed to\n"
- "be a consequence of the rest of this License.\n"
- "\n"
- " 12. If the distribution and/or use of the Library is restricted in\n"
- "certain countries either by patents or by copyrighted interfaces, the\n"
- "original copyright holder who places the Library under this License\n"
- "may add an explicit geographical distribution limitation excluding those\n"
- "countries, so that distribution is permitted only in or among\n"
- "countries not thus excluded. In such case, this License incorporates\n"
- "the limitation as if written in the body of this License.\n"
- "\n"
- " 13. The Free Software Foundation may publish revised and/or new\n"
- "versions of the Lesser General Public License from time to time.\n"
- "Such new versions will be similar in spirit to the present version,\n"
- "but may differ in detail to address new problems or concerns.\n"
- "\n"
- "Each version is given a distinguishing version number. If the Library\n"
- "specifies a version number of this License which applies to it and\n"
- "\"any later version\", you have the option of following the terms and\n"
- "conditions either of that version or of any later version published by\n"
- "the Free Software Foundation. If the Library does not specify a\n"
- "license version number, you may choose any version ever published by\n"
- "the Free Software Foundation.\n"
- "\n"
- " 14. If you wish to incorporate parts of the Library into other free\n"
- "programs whose distribution conditions are incompatible with these,\n"
- "write to the author to ask for permission. For software which is\n"
- "copyrighted by the Free Software Foundation, write to the Free\n"
- "Software Foundation; we sometimes make exceptions for this. Our\n"
- "decision will be guided by the two goals of preserving the free status\n"
- "of all derivatives of our free software and of promoting the sharing\n"
- "and reuse of software generally.\n"
- "\n"
- " NO WARRANTY\n"
- "\n"
- " 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\n"
- "WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\n"
- "EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\n"
- "OTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\n"
- "KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\n"
- "IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n"
- "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\n"
- "LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\n"
- "THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n"
- "\n"
- " 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\n"
- "WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\n"
- "AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\n"
- "FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\n"
- "CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\n"
- "LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\n"
- "RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\n"
- "FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\n"
- "SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n"
- "DAMAGES.\n"
- "\n"
- " END OF TERMS AND CONDITIONS\n"
- "\n"
- " How to Apply These Terms to Your New Libraries\n"
- "\n"
- " If you develop a new library, and you want it to be of the greatest\n"
- "possible use to the public, we recommend making it free software that\n"
- "everyone can redistribute and change. You can do so by permitting\n"
- "redistribution under these terms (or, alternatively, under the terms\n"
- "of the ordinary General Public License).\n"
- "\n"
- " To apply these terms, attach the following notices to the library.\n"
- "It is safest to attach them to the start of each source file to most\n"
- "effectively convey the exclusion of warranty; and each file should\n"
- "have at least the \"copyright\" line and a pointer to where the full\n"
- "notice is found.\n"
- "\n"
- "\n"
- " <one line to give the library's name and a brief idea of what it does.>\n"
- " Copyright (C) <year> <name of author>\n"
- "\n"
- " This library is free software; you can redistribute it and/or\n"
- " modify it under the terms of the GNU Lesser General Public\n"
- " License as published by the Free Software Foundation; either\n"
- " version 2.1 of the License, or (at your option) any later version.\n"
- "\n"
- " This library is distributed in the hope that it will be useful,\n"
- " but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
- " Lesser General Public License for more details.\n"
- "\n"
- " You should have received a copy of the GNU Lesser General Public\n"
- " License along with this library; if not, write to the Free Software\n"
- " Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\n"
- "\n"
- "Also add information on how to contact you by electronic and paper mail.\n"
- "\n"
- "You should also get your employer (if you work as a programmer) or\n"
- "your school, if any, to sign a \"copyright disclaimer\" for the library,\n"
- "if necessary. Here is a sample; alter the names:\n"
- "\n"
- " Yoyodyne, Inc., hereby disclaims all copyright interest in the\n"
- " library `Frob' (a library for tweaking knobs) written by James\n"
- " Random Hacker.\n"
- "\n"
- " <signature of Ty Coon>, 1 April 1990\n"
- " Ty Coon, President of Vice\n"
- "\n"
- "That's all there is to it!";
-#endif
-
-
-#ifdef USE_BUILDENV
-static const char *licenseLibffi = "libffi - Copyright (c) 1996-2014 Anthony Green, Red Hat, Inc and others.\n"
- "See source files for details.\n"
- "\n"
- "Permission is hereby granted, free of charge, to any person obtaining\n"
- "a copy of this software and associated documentation files (the\n"
- "``Software''), to deal in the Software without restriction, including\n"
- "without limitation the rights to use, copy, modify, merge, publish,\n"
- "distribute, sublicense, and/or sell copies of the Software, and to\n"
- "permit persons to whom the Software is furnished to do so, subject to\n"
- "the following conditions:\n"
- "\n"
- "The above copyright notice and this permission notice shall be\n"
- "included in all copies or substantial portions of the Software.\n"
- "\n"
- "THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND,\n"
- "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n"
- "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n"
- "IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n"
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n"
- "TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n"
- "SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.";
-#endif
-
-
-static const ThirdPartyLicense licenses3rdParties[] = {
- ThirdPartyLicense("CELT", "http://www.celt-codec.org/", licenseCELT),
- ThirdPartyLicense("Opus", "https://www.opus-codec.org/", licenseOpus),
- ThirdPartyLicense("Speex", "https://www.speex.org/", licenseSPEEX),
- ThirdPartyLicense("OpenSSL", "https://www.openssl.org/", licenseOpenSSL),
- ThirdPartyLicense("libsndfile", "http://www.mega-nerd.com/libsndfile/", licenseLibsndfile),
- ThirdPartyLicense("libogg", "https://www.xiph.org/", licenseOgg),
- ThirdPartyLicense("libvorbis", "https://www.xiph.org/", licenseVorbis),
- ThirdPartyLicense("libFLAC", "http://flac.sourceforge.net/", licenseFLAC),
-#ifdef Q_OS_MAC
- ThirdPartyLicense("mach_override", "https://github.com/rentzsch/mach_star", licenseMachOverride),
-#endif
-#ifdef Q_OS_WIN64
- ThirdPartyLicense("MinHook", "https://github.com/TsudaKageyu/minhook", licenseMinHook),
-#endif
-#ifdef USING_BUNDLED_QT_TRANSLATIONS
- ThirdPartyLicense("Additional Qt translations", "https://www.virtualbox.org/ticket/2018", licenseQtTranslations),
-#endif
- ThirdPartyLicense("Emoji One artwork", "http://emojione.com/", licenseEmojiOne),
- ThirdPartyLicense("XInputCheck (SDL_IsXInput function)", "https://www.libsdl.org/", licenseXInputCheck),
- ThirdPartyLicense("QQBonjour", "https://doc.qt.io/archives/qq/qq23-bonjour.html", licenseQQBonjour),
- ThirdPartyLicense("smallft", "https://www.xiph.org", licenseSmallFT),
- ThirdPartyLicense("Old-style Mumble license headers", "https://www.mumble.info", licenseOldStyleLicenseHeaders),
- ThirdPartyLicense("arc4random_uniform", "https://www.openbsd.org", licenseArc4RandomUniform),
-#ifdef USE_BUILDENV
- ThirdPartyLicense("MariaDB Connector/C", "https://www.mariadb.org", licenseMariaDBCConnector),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("ZLIB", "https://www.zlib.net", licenseZlib),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Protobuf", "https://developers.google.com/protocol-buffers", licenseProtobuf),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Expat", "http://libexpat.org", licenseExpat),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Boost C++ Libraries", "https://www.boost.org/", licenseBoost),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("bzip2", "http://www.bzip.org", licenseBzip2),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("BerkeleyDB", "https://www.oracle.com/database/berkeley-db", licenseBerkeleyDB),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Freetype", "https://www.freetype.org/", licenseFreetype),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("HarfBuzz", "https://www.freedesktop.org/wiki/Software/HarfBuzz", licenseHarfBuzzNG),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("LibPNG", "http://www.libpng.org/pub/png/libpng.html", licenseLibPNG),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("libjpeg-turbo", "http://www.libjpeg-turbo.org", licenseLibjpegTurbo),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("ZeroC Ice", "https://zeroc.com/", licenseZeroCIce),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("mcpp", "http://mcpp.sourceforge.net/", licenseMcpp),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("mDNSResponder", "https://opensource.apple.com/tarballs/mDNSResponder/", licenseMDNSResponder),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("PCRE", "http://www.pcre.org/", licensePCRE),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Qt", "https://www.qt.io/", licenseQt),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("SQLite3", "http://sqlite.org", licenseSQLite3),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("XAR", "https://opensource.apple.com/source/xar/", licenseXar),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("Avahi", "https://www.avahi.org/", licenseAvahi),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("D-Bus", "https://www.freedesktop.org/wiki/Software/dbus", licenseDBus),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("AppImage Runtime", "http://www.appimage.org", licenseAppImageRuntime),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("squashfuse", "https://github.com/vasi/squashfuse", licenseSquashfuse),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("libfuse", "https://github.com/libfuse/libfuse/", licenseLibfuse),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("glib", "https://developer.gnome.org/glib/", licenseGlib),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("libcap2", "https://sites.google.com/site/fullycapable/", licenseLibcap2),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("libdaemon", "http://0pointer.de/lennart/projects/libdaemon/", licenseLibdaemon),
-#endif
-#ifdef USE_BUILDENV
- ThirdPartyLicense("libffi", "https://sourceware.org/libffi/", licenseLibffi),
-#endif
- ThirdPartyLicense(),
-};
-
-
-#endif
diff --git a/src/mumble/About.cpp b/src/mumble/About.cpp
index e5dc07143..49fc8294c 100644
--- a/src/mumble/About.cpp
+++ b/src/mumble/About.cpp
@@ -28,10 +28,13 @@ AboutDialog::AboutDialog(QWidget *p) : QDialog(p) {
qteLicense->setPlainText(License::license());
qteLicense->setAccessibleName(tr("License agreement"));
- QTextEdit *qteAuthors = new QTextEdit(qtwTab);
- qteAuthors->setReadOnly(true);
- qteAuthors->setPlainText(License::authors());
- qteAuthors->setAccessibleName(tr("Authors"));
+ QTextBrowser *authors = new QTextBrowser(qtwTab);
+ authors->setReadOnly(true);
+ authors->setOpenExternalLinks(true);
+ authors->setText(tr("For a list of authors, please see <a "
+ "href=\"https://github.com/mumble-voip/mumble/graphs/contributors\">https://github.com/"
+ "mumble-voip/mumble/graphs/contributors</a>"));
+ authors->setAccessibleName(tr("Authors"));
QTextBrowser *qtb3rdPartyLicense = new QTextBrowser(qtwTab);
qtb3rdPartyLicense->setReadOnly(true);
@@ -77,7 +80,7 @@ AboutDialog::AboutDialog(QWidget *p) : QDialog(p) {
qtwTab->addTab(about, tr("&About Mumble"));
qtwTab->addTab(qteLicense, tr("&License"));
- qtwTab->addTab(qteAuthors, tr("A&uthors"));
+ qtwTab->addTab(authors, tr("A&uthors"));
qtwTab->addTab(qtb3rdPartyLicense, tr("&Third-Party Licenses"));
QPushButton *okButton = new QPushButton(tr("OK"), this);
diff --git a/src/mumble/ApplicationPalette.h b/src/mumble/ApplicationPalette.h
deleted file mode 100644
index 70483d220..000000000
--- a/src/mumble/ApplicationPalette.h
+++ /dev/null
@@ -1,1293 +0,0 @@
-// Copyright 2014-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-// See scripts/generate-ApplicationPalette-class.py
-
-// Auto-generated from ApplicationPaletteTemplate.h . Do not edit manually.
-
-#ifndef APPLICATIONPALETTE_H
-#define APPLICATIONPALETTE_H
-
-#include <QTimer>
-#include <QWidget>
-#ifndef Q_MOC_RUN
-# include <boost/optional.hpp>
-#endif
-#include <QApplication>
-#include <QDebug>
-
-///
-/// Class enabling theming of QApplication::palette from stylesheets.
-///
-/// QPalette cannot be styled which creates issues as not all
-/// GUI elements in Qt can be styled. This class works around
-/// that by offering a QPROPERTY for each color role and group
-/// combination in QPalette. As you can set custom QPROPERTYs
-/// from stylesheet this allows the user to set all relevant
-/// palette brushes from the stylesheet.
-///
-/// Due to restrictions on allowed property names as well as a
-/// mandatory prefix the attributes are exposed as lower cased:
-/// "qproperty-<role>_<group>".
-///
-/// So a group of QPalette::Active and QPalette::Text role
-/// would be styled by:
-///
-/// ApplicationPalette {
-/// qproperty-text_active: #ff0000; /* Set color for active group */
-/// }
-///
-/// See http://qt-project.org/doc/qt-4.8/qpalette.html#ColorGroup-enum
-/// for the available groups and roles.
-///
-/// You can also use the shorthand "qproperty-<role>" to set all groups
-/// to the same brush.
-///
-/// The class will automatically pick up style changes on itself
-/// and update the application palette accordingly. To use the class
-/// simply instantiate it before setting the theme and keep it around
-/// till the application terminates.
-///
-class ApplicationPalette : public QWidget {
- Q_OBJECT
- Q_PROPERTY(QBrush windowtext READ get_windowtext WRITE set_windowtext)
- Q_PROPERTY(QBrush windowtext_active READ get_windowtext_active WRITE set_windowtext_active)
- Q_PROPERTY(QBrush windowtext_disabled READ get_windowtext_disabled WRITE set_windowtext_disabled)
- Q_PROPERTY(QBrush windowtext_inactive READ get_windowtext_inactive WRITE set_windowtext_inactive)
- Q_PROPERTY(QBrush button READ get_button WRITE set_button)
- Q_PROPERTY(QBrush button_active READ get_button_active WRITE set_button_active)
- Q_PROPERTY(QBrush button_disabled READ get_button_disabled WRITE set_button_disabled)
- Q_PROPERTY(QBrush button_inactive READ get_button_inactive WRITE set_button_inactive)
- Q_PROPERTY(QBrush light READ get_light WRITE set_light)
- Q_PROPERTY(QBrush light_active READ get_light_active WRITE set_light_active)
- Q_PROPERTY(QBrush light_disabled READ get_light_disabled WRITE set_light_disabled)
- Q_PROPERTY(QBrush light_inactive READ get_light_inactive WRITE set_light_inactive)
- Q_PROPERTY(QBrush midlight READ get_midlight WRITE set_midlight)
- Q_PROPERTY(QBrush midlight_active READ get_midlight_active WRITE set_midlight_active)
- Q_PROPERTY(QBrush midlight_disabled READ get_midlight_disabled WRITE set_midlight_disabled)
- Q_PROPERTY(QBrush midlight_inactive READ get_midlight_inactive WRITE set_midlight_inactive)
- Q_PROPERTY(QBrush dark READ get_dark WRITE set_dark)
- Q_PROPERTY(QBrush dark_active READ get_dark_active WRITE set_dark_active)
- Q_PROPERTY(QBrush dark_disabled READ get_dark_disabled WRITE set_dark_disabled)
- Q_PROPERTY(QBrush dark_inactive READ get_dark_inactive WRITE set_dark_inactive)
- Q_PROPERTY(QBrush mid READ get_mid WRITE set_mid)
- Q_PROPERTY(QBrush mid_active READ get_mid_active WRITE set_mid_active)
- Q_PROPERTY(QBrush mid_disabled READ get_mid_disabled WRITE set_mid_disabled)
- Q_PROPERTY(QBrush mid_inactive READ get_mid_inactive WRITE set_mid_inactive)
- Q_PROPERTY(QBrush text READ get_text WRITE set_text)
- Q_PROPERTY(QBrush text_active READ get_text_active WRITE set_text_active)
- Q_PROPERTY(QBrush text_disabled READ get_text_disabled WRITE set_text_disabled)
- Q_PROPERTY(QBrush text_inactive READ get_text_inactive WRITE set_text_inactive)
- Q_PROPERTY(QBrush brighttext READ get_brighttext WRITE set_brighttext)
- Q_PROPERTY(QBrush brighttext_active READ get_brighttext_active WRITE set_brighttext_active)
- Q_PROPERTY(QBrush brighttext_disabled READ get_brighttext_disabled WRITE set_brighttext_disabled)
- Q_PROPERTY(QBrush brighttext_inactive READ get_brighttext_inactive WRITE set_brighttext_inactive)
- Q_PROPERTY(QBrush buttontext READ get_buttontext WRITE set_buttontext)
- Q_PROPERTY(QBrush buttontext_active READ get_buttontext_active WRITE set_buttontext_active)
- Q_PROPERTY(QBrush buttontext_disabled READ get_buttontext_disabled WRITE set_buttontext_disabled)
- Q_PROPERTY(QBrush buttontext_inactive READ get_buttontext_inactive WRITE set_buttontext_inactive)
- Q_PROPERTY(QBrush base READ get_base WRITE set_base)
- Q_PROPERTY(QBrush base_active READ get_base_active WRITE set_base_active)
- Q_PROPERTY(QBrush base_disabled READ get_base_disabled WRITE set_base_disabled)
- Q_PROPERTY(QBrush base_inactive READ get_base_inactive WRITE set_base_inactive)
- Q_PROPERTY(QBrush window READ get_window WRITE set_window)
- Q_PROPERTY(QBrush window_active READ get_window_active WRITE set_window_active)
- Q_PROPERTY(QBrush window_disabled READ get_window_disabled WRITE set_window_disabled)
- Q_PROPERTY(QBrush window_inactive READ get_window_inactive WRITE set_window_inactive)
- Q_PROPERTY(QBrush shadow READ get_shadow WRITE set_shadow)
- Q_PROPERTY(QBrush shadow_active READ get_shadow_active WRITE set_shadow_active)
- Q_PROPERTY(QBrush shadow_disabled READ get_shadow_disabled WRITE set_shadow_disabled)
- Q_PROPERTY(QBrush shadow_inactive READ get_shadow_inactive WRITE set_shadow_inactive)
- Q_PROPERTY(QBrush highlight READ get_highlight WRITE set_highlight)
- Q_PROPERTY(QBrush highlight_active READ get_highlight_active WRITE set_highlight_active)
- Q_PROPERTY(QBrush highlight_disabled READ get_highlight_disabled WRITE set_highlight_disabled)
- Q_PROPERTY(QBrush highlight_inactive READ get_highlight_inactive WRITE set_highlight_inactive)
- Q_PROPERTY(QBrush highlightedtext READ get_highlightedtext WRITE set_highlightedtext)
- Q_PROPERTY(QBrush highlightedtext_active READ get_highlightedtext_active WRITE set_highlightedtext_active)
- Q_PROPERTY(QBrush highlightedtext_disabled READ get_highlightedtext_disabled WRITE set_highlightedtext_disabled)
- Q_PROPERTY(QBrush highlightedtext_inactive READ get_highlightedtext_inactive WRITE set_highlightedtext_inactive)
- Q_PROPERTY(QBrush link READ get_link WRITE set_link)
- Q_PROPERTY(QBrush link_active READ get_link_active WRITE set_link_active)
- Q_PROPERTY(QBrush link_disabled READ get_link_disabled WRITE set_link_disabled)
- Q_PROPERTY(QBrush link_inactive READ get_link_inactive WRITE set_link_inactive)
- Q_PROPERTY(QBrush linkvisited READ get_linkvisited WRITE set_linkvisited)
- Q_PROPERTY(QBrush linkvisited_active READ get_linkvisited_active WRITE set_linkvisited_active)
- Q_PROPERTY(QBrush linkvisited_disabled READ get_linkvisited_disabled WRITE set_linkvisited_disabled)
- Q_PROPERTY(QBrush linkvisited_inactive READ get_linkvisited_inactive WRITE set_linkvisited_inactive)
- Q_PROPERTY(QBrush alternatebase READ get_alternatebase WRITE set_alternatebase)
- Q_PROPERTY(QBrush alternatebase_active READ get_alternatebase_active WRITE set_alternatebase_active)
- Q_PROPERTY(QBrush alternatebase_disabled READ get_alternatebase_disabled WRITE set_alternatebase_disabled)
- Q_PROPERTY(QBrush alternatebase_inactive READ get_alternatebase_inactive WRITE set_alternatebase_inactive)
- Q_PROPERTY(QBrush tooltipbase READ get_tooltipbase WRITE set_tooltipbase)
- Q_PROPERTY(QBrush tooltipbase_active READ get_tooltipbase_active WRITE set_tooltipbase_active)
- Q_PROPERTY(QBrush tooltipbase_disabled READ get_tooltipbase_disabled WRITE set_tooltipbase_disabled)
- Q_PROPERTY(QBrush tooltipbase_inactive READ get_tooltipbase_inactive WRITE set_tooltipbase_inactive)
- Q_PROPERTY(QBrush tooltiptext READ get_tooltiptext WRITE set_tooltiptext)
- Q_PROPERTY(QBrush tooltiptext_active READ get_tooltiptext_active WRITE set_tooltiptext_active)
- Q_PROPERTY(QBrush tooltiptext_disabled READ get_tooltiptext_disabled WRITE set_tooltiptext_disabled)
- Q_PROPERTY(QBrush tooltiptext_inactive READ get_tooltiptext_inactive WRITE set_tooltiptext_inactive)
-
-public:
- explicit ApplicationPalette(QWidget *p = 0) : QWidget(p), m_originalPalette(QApplication::palette()) {
- // Empty
- }
-
-
- QBrush get_windowtext() {
- if (property("windowtext_active") == property("windowtext_disabled")
- && property("windowtext_active") == property("windowtext_inactive")) {
- return qvariant_cast< QBrush >(property("windowtext_active"));
- }
- return QBrush();
- }
-
- void set_windowtext(const QBrush &brush) {
- m_windowtext_active = brush;
- m_windowtext_disabled = brush;
- m_windowtext_inactive = brush;
- }
-
- QBrush get_windowtext_active() {
- if (!m_windowtext_active)
- return QBrush();
-
- return *m_windowtext_active;
- }
-
- void set_windowtext_active(const QBrush &brush) { m_windowtext_active = brush; }
-
- QBrush get_windowtext_disabled() {
- if (!m_windowtext_disabled)
- return QBrush();
-
- return *m_windowtext_disabled;
- }
-
- void set_windowtext_disabled(const QBrush &brush) { m_windowtext_disabled = brush; }
-
- QBrush get_windowtext_inactive() {
- if (!m_windowtext_inactive)
- return QBrush();
-
- return *m_windowtext_inactive;
- }
-
- void set_windowtext_inactive(const QBrush &brush) { m_windowtext_inactive = brush; }
-
- QBrush get_button() {
- if (property("button_active") == property("button_disabled")
- && property("button_active") == property("button_inactive")) {
- return qvariant_cast< QBrush >(property("button_active"));
- }
- return QBrush();
- }
-
- void set_button(const QBrush &brush) {
- m_button_active = brush;
- m_button_disabled = brush;
- m_button_inactive = brush;
- }
-
- QBrush get_button_active() {
- if (!m_button_active)
- return QBrush();
-
- return *m_button_active;
- }
-
- void set_button_active(const QBrush &brush) { m_button_active = brush; }
-
- QBrush get_button_disabled() {
- if (!m_button_disabled)
- return QBrush();
-
- return *m_button_disabled;
- }
-
- void set_button_disabled(const QBrush &brush) { m_button_disabled = brush; }
-
- QBrush get_button_inactive() {
- if (!m_button_inactive)
- return QBrush();
-
- return *m_button_inactive;
- }
-
- void set_button_inactive(const QBrush &brush) { m_button_inactive = brush; }
-
- QBrush get_light() {
- if (property("light_active") == property("light_disabled")
- && property("light_active") == property("light_inactive")) {
- return qvariant_cast< QBrush >(property("light_active"));
- }
- return QBrush();
- }
-
- void set_light(const QBrush &brush) {
- m_light_active = brush;
- m_light_disabled = brush;
- m_light_inactive = brush;
- }
-
- QBrush get_light_active() {
- if (!m_light_active)
- return QBrush();
-
- return *m_light_active;
- }
-
- void set_light_active(const QBrush &brush) { m_light_active = brush; }
-
- QBrush get_light_disabled() {
- if (!m_light_disabled)
- return QBrush();
-
- return *m_light_disabled;
- }
-
- void set_light_disabled(const QBrush &brush) { m_light_disabled = brush; }
-
- QBrush get_light_inactive() {
- if (!m_light_inactive)
- return QBrush();
-
- return *m_light_inactive;
- }
-
- void set_light_inactive(const QBrush &brush) { m_light_inactive = brush; }
-
- QBrush get_midlight() {
- if (property("midlight_active") == property("midlight_disabled")
- && property("midlight_active") == property("midlight_inactive")) {
- return qvariant_cast< QBrush >(property("midlight_active"));
- }
- return QBrush();
- }
-
- void set_midlight(const QBrush &brush) {
- m_midlight_active = brush;
- m_midlight_disabled = brush;
- m_midlight_inactive = brush;
- }
-
- QBrush get_midlight_active() {
- if (!m_midlight_active)
- return QBrush();
-
- return *m_midlight_active;
- }
-
- void set_midlight_active(const QBrush &brush) { m_midlight_active = brush; }
-
- QBrush get_midlight_disabled() {
- if (!m_midlight_disabled)
- return QBrush();
-
- return *m_midlight_disabled;
- }
-
- void set_midlight_disabled(const QBrush &brush) { m_midlight_disabled = brush; }
-
- QBrush get_midlight_inactive() {
- if (!m_midlight_inactive)
- return QBrush();
-
- return *m_midlight_inactive;
- }
-
- void set_midlight_inactive(const QBrush &brush) { m_midlight_inactive = brush; }
-
- QBrush get_dark() {
- if (property("dark_active") == property("dark_disabled")
- && property("dark_active") == property("dark_inactive")) {
- return qvariant_cast< QBrush >(property("dark_active"));
- }
- return QBrush();
- }
-
- void set_dark(const QBrush &brush) {
- m_dark_active = brush;
- m_dark_disabled = brush;
- m_dark_inactive = brush;
- }
-
- QBrush get_dark_active() {
- if (!m_dark_active)
- return QBrush();
-
- return *m_dark_active;
- }
-
- void set_dark_active(const QBrush &brush) { m_dark_active = brush; }
-
- QBrush get_dark_disabled() {
- if (!m_dark_disabled)
- return QBrush();
-
- return *m_dark_disabled;
- }
-
- void set_dark_disabled(const QBrush &brush) { m_dark_disabled = brush; }
-
- QBrush get_dark_inactive() {
- if (!m_dark_inactive)
- return QBrush();
-
- return *m_dark_inactive;
- }
-
- void set_dark_inactive(const QBrush &brush) { m_dark_inactive = brush; }
-
- QBrush get_mid() {
- if (property("mid_active") == property("mid_disabled") && property("mid_active") == property("mid_inactive")) {
- return qvariant_cast< QBrush >(property("mid_active"));
- }
- return QBrush();
- }
-
- void set_mid(const QBrush &brush) {
- m_mid_active = brush;
- m_mid_disabled = brush;
- m_mid_inactive = brush;
- }
-
- QBrush get_mid_active() {
- if (!m_mid_active)
- return QBrush();
-
- return *m_mid_active;
- }
-
- void set_mid_active(const QBrush &brush) { m_mid_active = brush; }
-
- QBrush get_mid_disabled() {
- if (!m_mid_disabled)
- return QBrush();
-
- return *m_mid_disabled;
- }
-
- void set_mid_disabled(const QBrush &brush) { m_mid_disabled = brush; }
-
- QBrush get_mid_inactive() {
- if (!m_mid_inactive)
- return QBrush();
-
- return *m_mid_inactive;
- }
-
- void set_mid_inactive(const QBrush &brush) { m_mid_inactive = brush; }
-
- QBrush get_text() {
- if (property("text_active") == property("text_disabled")
- && property("text_active") == property("text_inactive")) {
- return qvariant_cast< QBrush >(property("text_active"));
- }
- return QBrush();
- }
-
- void set_text(const QBrush &brush) {
- m_text_active = brush;
- m_text_disabled = brush;
- m_text_inactive = brush;
- }
-
- QBrush get_text_active() {
- if (!m_text_active)
- return QBrush();
-
- return *m_text_active;
- }
-
- void set_text_active(const QBrush &brush) { m_text_active = brush; }
-
- QBrush get_text_disabled() {
- if (!m_text_disabled)
- return QBrush();
-
- return *m_text_disabled;
- }
-
- void set_text_disabled(const QBrush &brush) { m_text_disabled = brush; }
-
- QBrush get_text_inactive() {
- if (!m_text_inactive)
- return QBrush();
-
- return *m_text_inactive;
- }
-
- void set_text_inactive(const QBrush &brush) { m_text_inactive = brush; }
-
- QBrush get_brighttext() {
- if (property("brighttext_active") == property("brighttext_disabled")
- && property("brighttext_active") == property("brighttext_inactive")) {
- return qvariant_cast< QBrush >(property("brighttext_active"));
- }
- return QBrush();
- }
-
- void set_brighttext(const QBrush &brush) {
- m_brighttext_active = brush;
- m_brighttext_disabled = brush;
- m_brighttext_inactive = brush;
- }
-
- QBrush get_brighttext_active() {
- if (!m_brighttext_active)
- return QBrush();
-
- return *m_brighttext_active;
- }
-
- void set_brighttext_active(const QBrush &brush) { m_brighttext_active = brush; }
-
- QBrush get_brighttext_disabled() {
- if (!m_brighttext_disabled)
- return QBrush();
-
- return *m_brighttext_disabled;
- }
-
- void set_brighttext_disabled(const QBrush &brush) { m_brighttext_disabled = brush; }
-
- QBrush get_brighttext_inactive() {
- if (!m_brighttext_inactive)
- return QBrush();
-
- return *m_brighttext_inactive;
- }
-
- void set_brighttext_inactive(const QBrush &brush) { m_brighttext_inactive = brush; }
-
- QBrush get_buttontext() {
- if (property("buttontext_active") == property("buttontext_disabled")
- && property("buttontext_active") == property("buttontext_inactive")) {
- return qvariant_cast< QBrush >(property("buttontext_active"));
- }
- return QBrush();
- }
-
- void set_buttontext(const QBrush &brush) {
- m_buttontext_active = brush;
- m_buttontext_disabled = brush;
- m_buttontext_inactive = brush;
- }
-
- QBrush get_buttontext_active() {
- if (!m_buttontext_active)
- return QBrush();
-
- return *m_buttontext_active;
- }
-
- void set_buttontext_active(const QBrush &brush) { m_buttontext_active = brush; }
-
- QBrush get_buttontext_disabled() {
- if (!m_buttontext_disabled)
- return QBrush();
-
- return *m_buttontext_disabled;
- }
-
- void set_buttontext_disabled(const QBrush &brush) { m_buttontext_disabled = brush; }
-
- QBrush get_buttontext_inactive() {
- if (!m_buttontext_inactive)
- return QBrush();
-
- return *m_buttontext_inactive;
- }
-
- void set_buttontext_inactive(const QBrush &brush) { m_buttontext_inactive = brush; }
-
- QBrush get_base() {
- if (property("base_active") == property("base_disabled")
- && property("base_active") == property("base_inactive")) {
- return qvariant_cast< QBrush >(property("base_active"));
- }
- return QBrush();
- }
-
- void set_base(const QBrush &brush) {
- m_base_active = brush;
- m_base_disabled = brush;
- m_base_inactive = brush;
- }
-
- QBrush get_base_active() {
- if (!m_base_active)
- return QBrush();
-
- return *m_base_active;
- }
-
- void set_base_active(const QBrush &brush) { m_base_active = brush; }
-
- QBrush get_base_disabled() {
- if (!m_base_disabled)
- return QBrush();
-
- return *m_base_disabled;
- }
-
- void set_base_disabled(const QBrush &brush) { m_base_disabled = brush; }
-
- QBrush get_base_inactive() {
- if (!m_base_inactive)
- return QBrush();
-
- return *m_base_inactive;
- }
-
- void set_base_inactive(const QBrush &brush) { m_base_inactive = brush; }
-
- QBrush get_window() {
- if (property("window_active") == property("window_disabled")
- && property("window_active") == property("window_inactive")) {
- return qvariant_cast< QBrush >(property("window_active"));
- }
- return QBrush();
- }
-
- void set_window(const QBrush &brush) {
- m_window_active = brush;
- m_window_disabled = brush;
- m_window_inactive = brush;
- }
-
- QBrush get_window_active() {
- if (!m_window_active)
- return QBrush();
-
- return *m_window_active;
- }
-
- void set_window_active(const QBrush &brush) { m_window_active = brush; }
-
- QBrush get_window_disabled() {
- if (!m_window_disabled)
- return QBrush();
-
- return *m_window_disabled;
- }
-
- void set_window_disabled(const QBrush &brush) { m_window_disabled = brush; }
-
- QBrush get_window_inactive() {
- if (!m_window_inactive)
- return QBrush();
-
- return *m_window_inactive;
- }
-
- void set_window_inactive(const QBrush &brush) { m_window_inactive = brush; }
-
- QBrush get_shadow() {
- if (property("shadow_active") == property("shadow_disabled")
- && property("shadow_active") == property("shadow_inactive")) {
- return qvariant_cast< QBrush >(property("shadow_active"));
- }
- return QBrush();
- }
-
- void set_shadow(const QBrush &brush) {
- m_shadow_active = brush;
- m_shadow_disabled = brush;
- m_shadow_inactive = brush;
- }
-
- QBrush get_shadow_active() {
- if (!m_shadow_active)
- return QBrush();
-
- return *m_shadow_active;
- }
-
- void set_shadow_active(const QBrush &brush) { m_shadow_active = brush; }
-
- QBrush get_shadow_disabled() {
- if (!m_shadow_disabled)
- return QBrush();
-
- return *m_shadow_disabled;
- }
-
- void set_shadow_disabled(const QBrush &brush) { m_shadow_disabled = brush; }
-
- QBrush get_shadow_inactive() {
- if (!m_shadow_inactive)
- return QBrush();
-
- return *m_shadow_inactive;
- }
-
- void set_shadow_inactive(const QBrush &brush) { m_shadow_inactive = brush; }
-
- QBrush get_highlight() {
- if (property("highlight_active") == property("highlight_disabled")
- && property("highlight_active") == property("highlight_inactive")) {
- return qvariant_cast< QBrush >(property("highlight_active"));
- }
- return QBrush();
- }
-
- void set_highlight(const QBrush &brush) {
- m_highlight_active = brush;
- m_highlight_disabled = brush;
- m_highlight_inactive = brush;
- }
-
- QBrush get_highlight_active() {
- if (!m_highlight_active)
- return QBrush();
-
- return *m_highlight_active;
- }
-
- void set_highlight_active(const QBrush &brush) { m_highlight_active = brush; }
-
- QBrush get_highlight_disabled() {
- if (!m_highlight_disabled)
- return QBrush();
-
- return *m_highlight_disabled;
- }
-
- void set_highlight_disabled(const QBrush &brush) { m_highlight_disabled = brush; }
-
- QBrush get_highlight_inactive() {
- if (!m_highlight_inactive)
- return QBrush();
-
- return *m_highlight_inactive;
- }
-
- void set_highlight_inactive(const QBrush &brush) { m_highlight_inactive = brush; }
-
- QBrush get_highlightedtext() {
- if (property("highlightedtext_active") == property("highlightedtext_disabled")
- && property("highlightedtext_active") == property("highlightedtext_inactive")) {
- return qvariant_cast< QBrush >(property("highlightedtext_active"));
- }
- return QBrush();
- }
-
- void set_highlightedtext(const QBrush &brush) {
- m_highlightedtext_active = brush;
- m_highlightedtext_disabled = brush;
- m_highlightedtext_inactive = brush;
- }
-
- QBrush get_highlightedtext_active() {
- if (!m_highlightedtext_active)
- return QBrush();
-
- return *m_highlightedtext_active;
- }
-
- void set_highlightedtext_active(const QBrush &brush) { m_highlightedtext_active = brush; }
-
- QBrush get_highlightedtext_disabled() {
- if (!m_highlightedtext_disabled)
- return QBrush();
-
- return *m_highlightedtext_disabled;
- }
-
- void set_highlightedtext_disabled(const QBrush &brush) { m_highlightedtext_disabled = brush; }
-
- QBrush get_highlightedtext_inactive() {
- if (!m_highlightedtext_inactive)
- return QBrush();
-
- return *m_highlightedtext_inactive;
- }
-
- void set_highlightedtext_inactive(const QBrush &brush) { m_highlightedtext_inactive = brush; }
-
- QBrush get_link() {
- if (property("link_active") == property("link_disabled")
- && property("link_active") == property("link_inactive")) {
- return qvariant_cast< QBrush >(property("link_active"));
- }
- return QBrush();
- }
-
- void set_link(const QBrush &brush) {
- m_link_active = brush;
- m_link_disabled = brush;
- m_link_inactive = brush;
- }
-
- QBrush get_link_active() {
- if (!m_link_active)
- return QBrush();
-
- return *m_link_active;
- }
-
- void set_link_active(const QBrush &brush) { m_link_active = brush; }
-
- QBrush get_link_disabled() {
- if (!m_link_disabled)
- return QBrush();
-
- return *m_link_disabled;
- }
-
- void set_link_disabled(const QBrush &brush) { m_link_disabled = brush; }
-
- QBrush get_link_inactive() {
- if (!m_link_inactive)
- return QBrush();
-
- return *m_link_inactive;
- }
-
- void set_link_inactive(const QBrush &brush) { m_link_inactive = brush; }
-
- QBrush get_linkvisited() {
- if (property("linkvisited_active") == property("linkvisited_disabled")
- && property("linkvisited_active") == property("linkvisited_inactive")) {
- return qvariant_cast< QBrush >(property("linkvisited_active"));
- }
- return QBrush();
- }
-
- void set_linkvisited(const QBrush &brush) {
- m_linkvisited_active = brush;
- m_linkvisited_disabled = brush;
- m_linkvisited_inactive = brush;
- }
-
- QBrush get_linkvisited_active() {
- if (!m_linkvisited_active)
- return QBrush();
-
- return *m_linkvisited_active;
- }
-
- void set_linkvisited_active(const QBrush &brush) { m_linkvisited_active = brush; }
-
- QBrush get_linkvisited_disabled() {
- if (!m_linkvisited_disabled)
- return QBrush();
-
- return *m_linkvisited_disabled;
- }
-
- void set_linkvisited_disabled(const QBrush &brush) { m_linkvisited_disabled = brush; }
-
- QBrush get_linkvisited_inactive() {
- if (!m_linkvisited_inactive)
- return QBrush();
-
- return *m_linkvisited_inactive;
- }
-
- void set_linkvisited_inactive(const QBrush &brush) { m_linkvisited_inactive = brush; }
-
- QBrush get_alternatebase() {
- if (property("alternatebase_active") == property("alternatebase_disabled")
- && property("alternatebase_active") == property("alternatebase_inactive")) {
- return qvariant_cast< QBrush >(property("alternatebase_active"));
- }
- return QBrush();
- }
-
- void set_alternatebase(const QBrush &brush) {
- m_alternatebase_active = brush;
- m_alternatebase_disabled = brush;
- m_alternatebase_inactive = brush;
- }
-
- QBrush get_alternatebase_active() {
- if (!m_alternatebase_active)
- return QBrush();
-
- return *m_alternatebase_active;
- }
-
- void set_alternatebase_active(const QBrush &brush) { m_alternatebase_active = brush; }
-
- QBrush get_alternatebase_disabled() {
- if (!m_alternatebase_disabled)
- return QBrush();
-
- return *m_alternatebase_disabled;
- }
-
- void set_alternatebase_disabled(const QBrush &brush) { m_alternatebase_disabled = brush; }
-
- QBrush get_alternatebase_inactive() {
- if (!m_alternatebase_inactive)
- return QBrush();
-
- return *m_alternatebase_inactive;
- }
-
- void set_alternatebase_inactive(const QBrush &brush) { m_alternatebase_inactive = brush; }
-
- QBrush get_tooltipbase() {
- if (property("tooltipbase_active") == property("tooltipbase_disabled")
- && property("tooltipbase_active") == property("tooltipbase_inactive")) {
- return qvariant_cast< QBrush >(property("tooltipbase_active"));
- }
- return QBrush();
- }
-
- void set_tooltipbase(const QBrush &brush) {
- m_tooltipbase_active = brush;
- m_tooltipbase_disabled = brush;
- m_tooltipbase_inactive = brush;
- }
-
- QBrush get_tooltipbase_active() {
- if (!m_tooltipbase_active)
- return QBrush();
-
- return *m_tooltipbase_active;
- }
-
- void set_tooltipbase_active(const QBrush &brush) { m_tooltipbase_active = brush; }
-
- QBrush get_tooltipbase_disabled() {
- if (!m_tooltipbase_disabled)
- return QBrush();
-
- return *m_tooltipbase_disabled;
- }
-
- void set_tooltipbase_disabled(const QBrush &brush) { m_tooltipbase_disabled = brush; }
-
- QBrush get_tooltipbase_inactive() {
- if (!m_tooltipbase_inactive)
- return QBrush();
-
- return *m_tooltipbase_inactive;
- }
-
- void set_tooltipbase_inactive(const QBrush &brush) { m_tooltipbase_inactive = brush; }
-
- QBrush get_tooltiptext() {
- if (property("tooltiptext_active") == property("tooltiptext_disabled")
- && property("tooltiptext_active") == property("tooltiptext_inactive")) {
- return qvariant_cast< QBrush >(property("tooltiptext_active"));
- }
- return QBrush();
- }
-
- void set_tooltiptext(const QBrush &brush) {
- m_tooltiptext_active = brush;
- m_tooltiptext_disabled = brush;
- m_tooltiptext_inactive = brush;
- }
-
- QBrush get_tooltiptext_active() {
- if (!m_tooltiptext_active)
- return QBrush();
-
- return *m_tooltiptext_active;
- }
-
- void set_tooltiptext_active(const QBrush &brush) { m_tooltiptext_active = brush; }
-
- QBrush get_tooltiptext_disabled() {
- if (!m_tooltiptext_disabled)
- return QBrush();
-
- return *m_tooltiptext_disabled;
- }
-
- void set_tooltiptext_disabled(const QBrush &brush) { m_tooltiptext_disabled = brush; }
-
- QBrush get_tooltiptext_inactive() {
- if (!m_tooltiptext_inactive)
- return QBrush();
-
- return *m_tooltiptext_inactive;
- }
-
- void set_tooltiptext_inactive(const QBrush &brush) { m_tooltiptext_inactive = brush; }
-
-
-private slots:
- void updateApplicationPalette() {
- qWarning() << "Updating application palette";
-
- QPalette newPalette = m_originalPalette; // Do not re-use potentially already styled palette. Might not pick up
- // system style changes though.
-
-
- if (m_windowtext_active) {
- newPalette.setBrush(QPalette::Active, QPalette::WindowText, *m_windowtext_active);
- }
-
- if (m_windowtext_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::WindowText, *m_windowtext_disabled);
- }
-
- if (m_windowtext_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::WindowText, *m_windowtext_inactive);
- }
-
- if (m_button_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Button, *m_button_active);
- }
-
- if (m_button_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Button, *m_button_disabled);
- }
-
- if (m_button_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Button, *m_button_inactive);
- }
-
- if (m_light_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Light, *m_light_active);
- }
-
- if (m_light_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Light, *m_light_disabled);
- }
-
- if (m_light_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Light, *m_light_inactive);
- }
-
- if (m_midlight_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Midlight, *m_midlight_active);
- }
-
- if (m_midlight_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Midlight, *m_midlight_disabled);
- }
-
- if (m_midlight_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Midlight, *m_midlight_inactive);
- }
-
- if (m_dark_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Dark, *m_dark_active);
- }
-
- if (m_dark_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Dark, *m_dark_disabled);
- }
-
- if (m_dark_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Dark, *m_dark_inactive);
- }
-
- if (m_mid_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Mid, *m_mid_active);
- }
-
- if (m_mid_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Mid, *m_mid_disabled);
- }
-
- if (m_mid_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Mid, *m_mid_inactive);
- }
-
- if (m_text_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Text, *m_text_active);
- }
-
- if (m_text_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Text, *m_text_disabled);
- }
-
- if (m_text_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Text, *m_text_inactive);
- }
-
- if (m_brighttext_active) {
- newPalette.setBrush(QPalette::Active, QPalette::BrightText, *m_brighttext_active);
- }
-
- if (m_brighttext_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::BrightText, *m_brighttext_disabled);
- }
-
- if (m_brighttext_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::BrightText, *m_brighttext_inactive);
- }
-
- if (m_buttontext_active) {
- newPalette.setBrush(QPalette::Active, QPalette::ButtonText, *m_buttontext_active);
- }
-
- if (m_buttontext_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::ButtonText, *m_buttontext_disabled);
- }
-
- if (m_buttontext_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::ButtonText, *m_buttontext_inactive);
- }
-
- if (m_base_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Base, *m_base_active);
- }
-
- if (m_base_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Base, *m_base_disabled);
- }
-
- if (m_base_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Base, *m_base_inactive);
- }
-
- if (m_window_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Window, *m_window_active);
- }
-
- if (m_window_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Window, *m_window_disabled);
- }
-
- if (m_window_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Window, *m_window_inactive);
- }
-
- if (m_shadow_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Shadow, *m_shadow_active);
- }
-
- if (m_shadow_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Shadow, *m_shadow_disabled);
- }
-
- if (m_shadow_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Shadow, *m_shadow_inactive);
- }
-
- if (m_highlight_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Highlight, *m_highlight_active);
- }
-
- if (m_highlight_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Highlight, *m_highlight_disabled);
- }
-
- if (m_highlight_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Highlight, *m_highlight_inactive);
- }
-
- if (m_highlightedtext_active) {
- newPalette.setBrush(QPalette::Active, QPalette::HighlightedText, *m_highlightedtext_active);
- }
-
- if (m_highlightedtext_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::HighlightedText, *m_highlightedtext_disabled);
- }
-
- if (m_highlightedtext_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::HighlightedText, *m_highlightedtext_inactive);
- }
-
- if (m_link_active) {
- newPalette.setBrush(QPalette::Active, QPalette::Link, *m_link_active);
- }
-
- if (m_link_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::Link, *m_link_disabled);
- }
-
- if (m_link_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::Link, *m_link_inactive);
- }
-
- if (m_linkvisited_active) {
- newPalette.setBrush(QPalette::Active, QPalette::LinkVisited, *m_linkvisited_active);
- }
-
- if (m_linkvisited_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::LinkVisited, *m_linkvisited_disabled);
- }
-
- if (m_linkvisited_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::LinkVisited, *m_linkvisited_inactive);
- }
-
- if (m_alternatebase_active) {
- newPalette.setBrush(QPalette::Active, QPalette::AlternateBase, *m_alternatebase_active);
- }
-
- if (m_alternatebase_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::AlternateBase, *m_alternatebase_disabled);
- }
-
- if (m_alternatebase_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::AlternateBase, *m_alternatebase_inactive);
- }
-
- if (m_tooltipbase_active) {
- newPalette.setBrush(QPalette::Active, QPalette::ToolTipBase, *m_tooltipbase_active);
- }
-
- if (m_tooltipbase_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::ToolTipBase, *m_tooltipbase_disabled);
- }
-
- if (m_tooltipbase_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::ToolTipBase, *m_tooltipbase_inactive);
- }
-
- if (m_tooltiptext_active) {
- newPalette.setBrush(QPalette::Active, QPalette::ToolTipText, *m_tooltiptext_active);
- }
-
- if (m_tooltiptext_disabled) {
- newPalette.setBrush(QPalette::Disabled, QPalette::ToolTipText, *m_tooltiptext_disabled);
- }
-
- if (m_tooltiptext_inactive) {
- newPalette.setBrush(QPalette::Inactive, QPalette::ToolTipText, *m_tooltiptext_inactive);
- }
-
-
- QApplication::setPalette(newPalette);
- resetAllProperties();
- }
-
- void resetAllProperties() {
- m_windowtext_active = boost::none;
- m_windowtext_disabled = boost::none;
- m_windowtext_inactive = boost::none;
- m_button_active = boost::none;
- m_button_disabled = boost::none;
- m_button_inactive = boost::none;
- m_light_active = boost::none;
- m_light_disabled = boost::none;
- m_light_inactive = boost::none;
- m_midlight_active = boost::none;
- m_midlight_disabled = boost::none;
- m_midlight_inactive = boost::none;
- m_dark_active = boost::none;
- m_dark_disabled = boost::none;
- m_dark_inactive = boost::none;
- m_mid_active = boost::none;
- m_mid_disabled = boost::none;
- m_mid_inactive = boost::none;
- m_text_active = boost::none;
- m_text_disabled = boost::none;
- m_text_inactive = boost::none;
- m_brighttext_active = boost::none;
- m_brighttext_disabled = boost::none;
- m_brighttext_inactive = boost::none;
- m_buttontext_active = boost::none;
- m_buttontext_disabled = boost::none;
- m_buttontext_inactive = boost::none;
- m_base_active = boost::none;
- m_base_disabled = boost::none;
- m_base_inactive = boost::none;
- m_window_active = boost::none;
- m_window_disabled = boost::none;
- m_window_inactive = boost::none;
- m_shadow_active = boost::none;
- m_shadow_disabled = boost::none;
- m_shadow_inactive = boost::none;
- m_highlight_active = boost::none;
- m_highlight_disabled = boost::none;
- m_highlight_inactive = boost::none;
- m_highlightedtext_active = boost::none;
- m_highlightedtext_disabled = boost::none;
- m_highlightedtext_inactive = boost::none;
- m_link_active = boost::none;
- m_link_disabled = boost::none;
- m_link_inactive = boost::none;
- m_linkvisited_active = boost::none;
- m_linkvisited_disabled = boost::none;
- m_linkvisited_inactive = boost::none;
- m_alternatebase_active = boost::none;
- m_alternatebase_disabled = boost::none;
- m_alternatebase_inactive = boost::none;
- m_tooltipbase_active = boost::none;
- m_tooltipbase_disabled = boost::none;
- m_tooltipbase_inactive = boost::none;
- m_tooltiptext_active = boost::none;
- m_tooltiptext_disabled = boost::none;
- m_tooltiptext_inactive = boost::none;
- }
-
-protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE {
- bool result = QWidget::event(e);
-
- if (e->type() == QEvent::StyleChange) {
- // Update global palette. Have to defer it
- // as property updates are also signals.
- QTimer::singleShot(0, this, SLOT(updateApplicationPalette()));
- }
-
- return result;
- }
-
-private:
- const QPalette m_originalPalette;
-
- boost::optional< QBrush > m_windowtext_active;
- boost::optional< QBrush > m_windowtext_disabled;
- boost::optional< QBrush > m_windowtext_inactive;
- boost::optional< QBrush > m_button_active;
- boost::optional< QBrush > m_button_disabled;
- boost::optional< QBrush > m_button_inactive;
- boost::optional< QBrush > m_light_active;
- boost::optional< QBrush > m_light_disabled;
- boost::optional< QBrush > m_light_inactive;
- boost::optional< QBrush > m_midlight_active;
- boost::optional< QBrush > m_midlight_disabled;
- boost::optional< QBrush > m_midlight_inactive;
- boost::optional< QBrush > m_dark_active;
- boost::optional< QBrush > m_dark_disabled;
- boost::optional< QBrush > m_dark_inactive;
- boost::optional< QBrush > m_mid_active;
- boost::optional< QBrush > m_mid_disabled;
- boost::optional< QBrush > m_mid_inactive;
- boost::optional< QBrush > m_text_active;
- boost::optional< QBrush > m_text_disabled;
- boost::optional< QBrush > m_text_inactive;
- boost::optional< QBrush > m_brighttext_active;
- boost::optional< QBrush > m_brighttext_disabled;
- boost::optional< QBrush > m_brighttext_inactive;
- boost::optional< QBrush > m_buttontext_active;
- boost::optional< QBrush > m_buttontext_disabled;
- boost::optional< QBrush > m_buttontext_inactive;
- boost::optional< QBrush > m_base_active;
- boost::optional< QBrush > m_base_disabled;
- boost::optional< QBrush > m_base_inactive;
- boost::optional< QBrush > m_window_active;
- boost::optional< QBrush > m_window_disabled;
- boost::optional< QBrush > m_window_inactive;
- boost::optional< QBrush > m_shadow_active;
- boost::optional< QBrush > m_shadow_disabled;
- boost::optional< QBrush > m_shadow_inactive;
- boost::optional< QBrush > m_highlight_active;
- boost::optional< QBrush > m_highlight_disabled;
- boost::optional< QBrush > m_highlight_inactive;
- boost::optional< QBrush > m_highlightedtext_active;
- boost::optional< QBrush > m_highlightedtext_disabled;
- boost::optional< QBrush > m_highlightedtext_inactive;
- boost::optional< QBrush > m_link_active;
- boost::optional< QBrush > m_link_disabled;
- boost::optional< QBrush > m_link_inactive;
- boost::optional< QBrush > m_linkvisited_active;
- boost::optional< QBrush > m_linkvisited_disabled;
- boost::optional< QBrush > m_linkvisited_inactive;
- boost::optional< QBrush > m_alternatebase_active;
- boost::optional< QBrush > m_alternatebase_disabled;
- boost::optional< QBrush > m_alternatebase_inactive;
- boost::optional< QBrush > m_tooltipbase_active;
- boost::optional< QBrush > m_tooltipbase_disabled;
- boost::optional< QBrush > m_tooltipbase_inactive;
- boost::optional< QBrush > m_tooltiptext_active;
- boost::optional< QBrush > m_tooltiptext_disabled;
- boost::optional< QBrush > m_tooltiptext_inactive;
-};
-
-#endif // APPLICATIONPALETTE_H
diff --git a/src/mumble/ApplicationPaletteTemplate.h b/src/mumble/ApplicationPaletteTemplate.h
index c2d28f1d6..0d00775e6 100644
--- a/src/mumble/ApplicationPaletteTemplate.h
+++ b/src/mumble/ApplicationPaletteTemplate.h
@@ -5,7 +5,9 @@
// See scripts/generate-ApplicationPalette-class.py
-% (warning) s
+// clang-format off
+
+%(warning)s
#ifndef APPLICATIONPALETTE_H
#define APPLICATIONPALETTE_H
@@ -50,28 +52,31 @@
/// till the application terminates.
///
class ApplicationPalette : public QWidget {
- Q_OBJECT
- % (properties) s public : explicit ApplicationPalette(QWidget *p = 0)
- : QWidget(p),
- m_originalPalette(QApplication::palette()){
- // Empty
- }
+ Q_OBJECT
+ %(properties)s
+ public:
+ explicit ApplicationPalette(QWidget *p = 0) : QWidget(p), m_originalPalette(QApplication::palette()) {
+ // Empty
+ }
- % (getterssetters) s
+ %(getterssetters)s
- private slots : void updateApplicationPalette() {
- qWarning() << "Updating application palette";
+ private slots:
+ void updateApplicationPalette() {
+ qWarning() << "Updating application palette";
- QPalette newPalette = m_originalPalette; // Do not re-use potentially already styled palette. Might not pick up
- // system style changes though.
+ QPalette newPalette = m_originalPalette; // Do not re-use potentially already styled palette. Might not pick up
+ // system style changes though.
- % (paletteupdates) s
+ %(paletteupdates)s
- QApplication::setPalette(newPalette);
- resetAllProperties();
+ QApplication::setPalette(newPalette);
+ resetAllProperties();
}
- void resetAllProperties() { % (propertyresets) s }
+ void resetAllProperties() {
+ %(propertyresets)s
+ }
protected:
bool event(QEvent *e) Q_DECL_OVERRIDE {
@@ -89,7 +94,9 @@ protected:
private:
const QPalette m_originalPalette;
- % (variables) s
+ %(variables)s
};
+// clang-format on
+
#endif // APPLICATIONPALETTE_H
diff --git a/src/mumble/CMakeLists.txt b/src/mumble/CMakeLists.txt
index 0fb585354..585f09f47 100644
--- a/src/mumble/CMakeLists.txt
+++ b/src/mumble/CMakeLists.txt
@@ -93,7 +93,6 @@ set(MUMBLE_SOURCES
"ACLEditor.ui"
"API_v_1_x_x.cpp"
"API.h"
- "ApplicationPalette.h"
"AudioConfigDialog.cpp"
"AudioConfigDialog.h"
"Audio.cpp"
@@ -321,10 +320,17 @@ set(MUMBLE_SOURCES
"${3RDPARTY_DIR}/smallft/smallft.cpp"
"mumble.qrc"
- "flags/mumble_flags_0.qrc"
"${CMAKE_SOURCE_DIR}/themes/DefaultTheme.qrc"
)
+add_custom_command(
+ OUTPUT "${CMAKE_BINARY_DIR}/mumble_flags.qrc"
+ COMMAND ${PYTHON_INTERPRETER}
+ ARGS "${CMAKE_SOURCE_DIR}/scripts/generate_flag_qrc.py" --flag-dir "${CMAKE_SOURCE_DIR}/icons/flags" --output "${CMAKE_BINARY_DIR}/mumble_flags.qrc"
+ COMMENT "Generating mumble_flags.qrc"
+)
+list(APPEND MUMBLE_SOURCES "${CMAKE_BINARY_DIR}/mumble_flags.qrc")
+
add_library(mumble_client_object_lib OBJECT ${MUMBLE_SOURCES})
if(static AND WIN32)
@@ -347,7 +353,7 @@ else()
if(WIN32)
target_sources(mumble_client_object_lib
PRIVATE
- "mumble.appcompat.manifest"
+ "${CMAKE_SOURCE_DIR}/auxiliary_files/mumble.appcompat.manifest"
"${MUMBLE_RC}"
)
@@ -365,6 +371,17 @@ else()
endif()
endif()
+add_custom_command(
+ OUTPUT "ApplicationPalette.h"
+ COMMAND ${PYTHON_INTERPRETER}
+ ARGS ${CMAKE_SOURCE_DIR}/scripts/generate-ApplicationPalette-class.py --template ${CMAKE_CURRENT_SOURCE_DIR}/ApplicationPaletteTemplate.h
+ --output ApplicationPalette.h
+ COMMENT "Generating ApplicationPalette.h"
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/ApplicationPaletteTemplate.h"
+)
+target_sources(mumble PRIVATE "ApplicationPalette.h")
+target_include_directories(mumble PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
+
set_property(TARGET mumble_client_object_lib PROPERTY INTERPROCEDURAL_OPTIMIZATION ${lto})
set_property(TARGET mumble PROPERTY INTERPROCEDURAL_OPTIMIZATION ${lto})
@@ -372,8 +389,8 @@ target_link_libraries(mumble mumble_client_object_lib)
target_compile_definitions(mumble_client_object_lib
PUBLIC
- "MUMBLE_LIBRARY_PATH=${MUMBLE_INSTALL_LIBDIR}"
- "MUMBLE_PLUGIN_PATH=${MUMBLE_INSTALL_PLUGINDIR}"
+ "MUMBLE_LIBRARY_PATH=${MUMBLE_INSTALL_ABS_LIBDIR}"
+ "MUMBLE_PLUGIN_PATH=${MUMBLE_INSTALL_ABS_PLUGINDIR}"
)
set_target_properties(mumble PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
@@ -385,6 +402,13 @@ set_target_properties(mumble_client_object_lib
AUTOUIC ON
)
+set_target_properties(mumble
+ PROPERTIES
+ AUTOMOC ON
+ AUTORCC ON
+ AUTOUIC ON
+)
+
if(WIN32)
install(TARGETS mumble RUNTIME DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_client)
else()
@@ -393,9 +417,6 @@ else()
else()
install(TARGETS mumble BUNDLE DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_client)
endif()
-
- # Install Mumble man files
- install(FILES "${CMAKE_SOURCE_DIR}/man/mumble.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
endif()
target_compile_definitions(mumble_client_object_lib
@@ -485,7 +506,7 @@ endif()
if(bundled-json)
set(JSON_BuildTests OFF CACHE INTERNAL "")
set(JSON_ImplicitConversions OFF CACHE INTERNAL "")
- add_subdirectory("${3RDPARTY_DIR}/nlohmann_json/" "${CMAKE_CURRENT_BINARY_DIR}/nlohmann_json/")
+ add_subdirectory("${3RDPARTY_DIR}/nlohmann_json/" "${CMAKE_CURRENT_BINARY_DIR}/nlohmann_json/" EXCLUDE_FROM_ALL)
else()
find_pkg("nlohmann_json" REQUIRED)
endif()
@@ -575,7 +596,7 @@ if(WIN32)
target_link_libraries(mumble_client_object_lib PUBLIC Qt5::QWindowsIntegrationPlugin)
endif()
- add_subdirectory("${3RDPARTY_DIR}/xinputcheck-build" "${CMAKE_CURRENT_BINARY_DIR}/xinputcheck")
+ add_subdirectory("${3RDPARTY_DIR}/xinputcheck-build" "${CMAKE_CURRENT_BINARY_DIR}/xinputcheck" EXCLUDE_FROM_ALL)
# Disable all warnings that the xinputcheck code may emit
disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/xinputcheck-build")
@@ -677,7 +698,7 @@ if(bundled-opus)
option(OPUS_STACK_PROTECTOR "" OFF)
endif()
- add_subdirectory("${3RDPARTY_DIR}/opus" "${CMAKE_CURRENT_BINARY_DIR}/opus")
+ add_subdirectory("${3RDPARTY_DIR}/opus" "${CMAKE_CURRENT_BINARY_DIR}/opus" EXCLUDE_FROM_ALL)
# Disable all warnings that the Opus code may emit
disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/opus")
@@ -704,7 +725,7 @@ else()
endif()
if(bundled-speex)
- add_subdirectory("${3RDPARTY_DIR}/speexdsp-build" "${CMAKE_CURRENT_BINARY_DIR}/speexdsp")
+ add_subdirectory("${3RDPARTY_DIR}/speexdsp-build" "${CMAKE_CURRENT_BINARY_DIR}/speexdsp" EXCLUDE_FROM_ALL)
# Disable all warnings that the speexdsp code may emit
disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/speexdsp-build")
@@ -733,7 +754,7 @@ if(rnnoise)
target_compile_definitions(mumble_client_object_lib PRIVATE "USE_RNNOISE")
if(bundled-rnnoise)
- add_subdirectory("${3RDPARTY_DIR}/rnnoise-build" "${CMAKE_CURRENT_BINARY_DIR}/rnnoise")
+ add_subdirectory("${3RDPARTY_DIR}/rnnoise-build" "${CMAKE_CURRENT_BINARY_DIR}/rnnoise" EXCLUDE_FROM_ALL)
# Disable all warnings that the RNNoise code may emit
disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/rnnoise-build")
@@ -906,7 +927,8 @@ if(g15)
PRIVATE
"G15LCDEngine_helper.cpp"
"G15LCDEngine_helper.h"
- )
+ )
+ target_include_directories(mumble_client_object_lib PUBLIC "${CMAKE_SOURCE_DIR}/helpers")
else()
find_library(LIB_G15DAEMON_CLIENT "g15daemon_client")
if(LIB_G15DAEMON_CLIENT-NOTFOUND)
diff --git a/src/mumble/G15LCDEngine_helper.h b/src/mumble/G15LCDEngine_helper.h
index 7071a60b9..359d28810 100644
--- a/src/mumble/G15LCDEngine_helper.h
+++ b/src/mumble/G15LCDEngine_helper.h
@@ -6,7 +6,7 @@
#ifndef MUMBLE_MUMBLE_G15LCDENGINE_HELPER_H_
# define MUMBLE_MUMBLE_G15LCDENGINE_HELPER_H_
-# include "../../g15helper/g15helper.h"
+# include "g15helper/g15helper.h"
# include "LCD.h"
# include <QtCore/QProcess>
diff --git a/src/mumble/G15LCDEngine_lglcd.h b/src/mumble/G15LCDEngine_lglcd.h
index 852b7de14..76ddb6591 100644
--- a/src/mumble/G15LCDEngine_lglcd.h
+++ b/src/mumble/G15LCDEngine_lglcd.h
@@ -5,7 +5,7 @@
#ifndef MUMBLE_MUMBLE_G15LCDENGINE_LGLCD_H_
# define MUMBLE_MUMBLE_G15LCDENGINE_LGLCD_H_
-# include "../../g15helper/g15helper.h"
+# include "g15helper/g15helper.h"
# include "LCD.h"
class G15LCDDeviceLGLCD;
diff --git a/src/mumble/flags/mumble_flags_0.qrc b/src/mumble/flags/mumble_flags_0.qrc
deleted file mode 100644
index 63fba07cf..000000000
--- a/src/mumble/flags/mumble_flags_0.qrc
+++ /dev/null
@@ -1,262 +0,0 @@
-<!DOCTYPE RCC>
-<RCC version="1.0">
-<qresource>
-<file alias="flags/jp.svg">../../../icons/flags/jp.svg</file>
-<file alias="flags/pw.svg">../../../icons/flags/pw.svg</file>
-<file alias="flags/ch.svg">../../../icons/flags/ch.svg</file>
-<file alias="flags/bd.svg">../../../icons/flags/bd.svg</file>
-<file alias="flags/vn.svg">../../../icons/flags/vn.svg</file>
-<file alias="flags/mc.svg">../../../icons/flags/mc.svg</file>
-<file alias="flags/so.svg">../../../icons/flags/so.svg</file>
-<file alias="flags/ua.svg">../../../icons/flags/ua.svg</file>
-<file alias="flags/pl.svg">../../../icons/flags/pl.svg</file>
-<file alias="flags/id.svg">../../../icons/flags/id.svg</file>
-<file alias="flags/lc.svg">../../../icons/flags/lc.svg</file>
-<file alias="flags/to.svg">../../../icons/flags/to.svg</file>
-<file alias="flags/co.svg">../../../icons/flags/co.svg</file>
-<file alias="flags/mg.svg">../../../icons/flags/mg.svg</file>
-<file alias="flags/bj.svg">../../../icons/flags/bj.svg</file>
-<file alias="flags/bf.svg">../../../icons/flags/bf.svg</file>
-<file alias="flags/at.svg">../../../icons/flags/at.svg</file>
-<file alias="flags/cz.svg">../../../icons/flags/cz.svg</file>
-<file alias="flags/pe.svg">../../../icons/flags/pe.svg</file>
-<file alias="flags/ng.svg">../../../icons/flags/ng.svg</file>
-<file alias="flags/nl.svg">../../../icons/flags/nl.svg</file>
-<file alias="flags/am.svg">../../../icons/flags/am.svg</file>
-<file alias="flags/bg.svg">../../../icons/flags/bg.svg</file>
-<file alias="flags/hu.svg">../../../icons/flags/hu.svg</file>
-<file alias="flags/lt.svg">../../../icons/flags/lt.svg</file>
-<file alias="flags/sl.svg">../../../icons/flags/sl.svg</file>
-<file alias="flags/ye.svg">../../../icons/flags/ye.svg</file>
-<file alias="flags/be.svg">../../../icons/flags/be.svg</file>
-<file alias="flags/ee.svg">../../../icons/flags/ee.svg</file>
-<file alias="flags/lu.svg">../../../icons/flags/lu.svg</file>
-<file alias="flags/ci.svg">../../../icons/flags/ci.svg</file>
-<file alias="flags/cl.svg">../../../icons/flags/cl.svg</file>
-<file alias="flags/cp.svg">../../../icons/flags/cp.svg</file>
-<file alias="flags/gn.svg">../../../icons/flags/gn.svg</file>
-<file alias="flags/mf.svg">../../../icons/flags/mf.svg</file>
-<file alias="flags/ml.svg">../../../icons/flags/ml.svg</file>
-<file alias="flags/ro.svg">../../../icons/flags/ro.svg</file>
-<file alias="flags/td.svg">../../../icons/flags/td.svg</file>
-<file alias="flags/tn.svg">../../../icons/flags/tn.svg</file>
-<file alias="flags/wf.svg">../../../icons/flags/wf.svg</file>
-<file alias="flags/mr.svg">../../../icons/flags/mr.svg</file>
-<file alias="flags/de.svg">../../../icons/flags/de.svg</file>
-<file alias="flags/fr.svg">../../../icons/flags/fr.svg</file>
-<file alias="flags/ie.svg">../../../icons/flags/ie.svg</file>
-<file alias="flags/it.svg">../../../icons/flags/it.svg</file>
-<file alias="flags/ga.svg">../../../icons/flags/ga.svg</file>
-<file alias="flags/bh.svg">../../../icons/flags/bh.svg</file>
-<file alias="flags/gl.svg">../../../icons/flags/gl.svg</file>
-<file alias="flags/ru.svg">../../../icons/flags/ru.svg</file>
-<file alias="flags/gf.svg">../../../icons/flags/gf.svg</file>
-<file alias="flags/ne.svg">../../../icons/flags/ne.svg</file>
-<file alias="flags/la.svg">../../../icons/flags/la.svg</file>
-<file alias="flags/ma.svg">../../../icons/flags/ma.svg</file>
-<file alias="flags/ae.svg">../../../icons/flags/ae.svg</file>
-<file alias="flags/mu.svg">../../../icons/flags/mu.svg</file>
-<file alias="flags/gw.svg">../../../icons/flags/gw.svg</file>
-<file alias="flags/tr.svg">../../../icons/flags/tr.svg</file>
-<file alias="flags/cg.svg">../../../icons/flags/cg.svg</file>
-<file alias="flags/lv.svg">../../../icons/flags/lv.svg</file>
-<file alias="flags/dj.svg">../../../icons/flags/dj.svg</file>
-<file alias="flags/fm.svg">../../../icons/flags/fm.svg</file>
-<file alias="flags/cm.svg">../../../icons/flags/cm.svg</file>
-<file alias="flags/gh.svg">../../../icons/flags/gh.svg</file>
-<file alias="flags/mm.svg">../../../icons/flags/mm.svg</file>
-<file alias="flags/sn.svg">../../../icons/flags/sn.svg</file>
-<file alias="flags/bw.svg">../../../icons/flags/bw.svg</file>
-<file alias="flags/mv.svg">../../../icons/flags/mv.svg</file>
-<file alias="flags/tl.svg">../../../icons/flags/tl.svg</file>
-<file alias="flags/dk.svg">../../../icons/flags/dk.svg</file>
-<file alias="flags/fi.svg">../../../icons/flags/fi.svg</file>
-<file alias="flags/tw.svg">../../../icons/flags/tw.svg</file>
-<file alias="flags/th.svg">../../../icons/flags/th.svg</file>
-<file alias="flags/bs.svg">../../../icons/flags/bs.svg</file>
-<file alias="flags/pk.svg">../../../icons/flags/pk.svg</file>
-<file alias="flags/se.svg">../../../icons/flags/se.svg</file>
-<file alias="flags/vc.svg">../../../icons/flags/vc.svg</file>
-<file alias="flags/pa.svg">../../../icons/flags/pa.svg</file>
-<file alias="flags/ps.svg">../../../icons/flags/ps.svg</file>
-<file alias="flags/sd.svg">../../../icons/flags/sd.svg</file>
-<file alias="flags/cr.svg">../../../icons/flags/cr.svg</file>
-<file alias="flags/qa.svg">../../../icons/flags/qa.svg</file>
-<file alias="flags/kw.svg">../../../icons/flags/kw.svg</file>
-<file alias="flags/dz.svg">../../../icons/flags/dz.svg</file>
-<file alias="flags/cw.svg">../../../icons/flags/cw.svg</file>
-<file alias="flags/jo.svg">../../../icons/flags/jo.svg</file>
-<file alias="flags/cn.svg">../../../icons/flags/cn.svg</file>
-<file alias="flags/jm.svg">../../../icons/flags/jm.svg</file>
-<file alias="flags/sy.svg">../../../icons/flags/sy.svg</file>
-<file alias="flags/gm.svg">../../../icons/flags/gm.svg</file>
-<file alias="flags/gg.svg">../../../icons/flags/gg.svg</file>
-<file alias="flags/ag.svg">../../../icons/flags/ag.svg</file>
-<file alias="flags/nr.svg">../../../icons/flags/nr.svg</file>
-<file alias="flags/sc.svg">../../../icons/flags/sc.svg</file>
-<file alias="flags/ws.svg">../../../icons/flags/ws.svg</file>
-<file alias="flags/sr.svg">../../../icons/flags/sr.svg</file>
-<file alias="flags/tg.svg">../../../icons/flags/tg.svg</file>
-<file alias="flags/aw.svg">../../../icons/flags/aw.svg</file>
-<file alias="flags/kp.svg">../../../icons/flags/kp.svg</file>
-<file alias="flags/pr.svg">../../../icons/flags/pr.svg</file>
-<file alias="flags/cu.svg">../../../icons/flags/cu.svg</file>
-<file alias="flags/ly.svg">../../../icons/flags/ly.svg</file>
-<file alias="flags/cf.svg">../../../icons/flags/cf.svg</file>
-<file alias="flags/tt.svg">../../../icons/flags/tt.svg</file>
-<file alias="flags/re.svg">../../../icons/flags/re.svg</file>
-<file alias="flags/tz.svg">../../../icons/flags/tz.svg</file>
-<file alias="flags/bb.svg">../../../icons/flags/bb.svg</file>
-<file alias="flags/st.svg">../../../icons/flags/st.svg</file>
-<file alias="flags/ls.svg">../../../icons/flags/ls.svg</file>
-<file alias="flags/aq.svg">../../../icons/flags/aq.svg</file>
-<file alias="flags/az.svg">../../../icons/flags/az.svg</file>
-<file alias="flags/eh.svg">../../../icons/flags/eh.svg</file>
-<file alias="flags/cd.svg">../../../icons/flags/cd.svg</file>
-<file alias="flags/ge.svg">../../../icons/flags/ge.svg</file>
-<file alias="flags/gy.svg">../../../icons/flags/gy.svg</file>
-<file alias="flags/ca.svg">../../../icons/flags/ca.svg</file>
-<file alias="flags/ss.svg">../../../icons/flags/ss.svg</file>
-<file alias="flags/bv.svg">../../../icons/flags/bv.svg</file>
-<file alias="flags/sj.svg">../../../icons/flags/sj.svg</file>
-<file alias="flags/fo.svg">../../../icons/flags/fo.svg</file>
-<file alias="flags/il.svg">../../../icons/flags/il.svg</file>
-<file alias="flags/is.svg">../../../icons/flags/is.svg</file>
-<file alias="flags/no.svg">../../../icons/flags/no.svg</file>
-<file alias="flags/ax.svg">../../../icons/flags/ax.svg</file>
-<file alias="flags/ba.svg">../../../icons/flags/ba.svg</file>
-<file alias="flags/bq.svg">../../../icons/flags/bq.svg</file>
-<file alias="flags/hn.svg">../../../icons/flags/hn.svg</file>
-<file alias="flags/np.svg">../../../icons/flags/np.svg</file>
-<file alias="flags/sg.svg">../../../icons/flags/sg.svg</file>
-<file alias="flags/kn.svg">../../../icons/flags/kn.svg</file>
-<file alias="flags/tk.svg">../../../icons/flags/tk.svg</file>
-<file alias="flags/mh.svg">../../../icons/flags/mh.svg</file>
-<file alias="flags/sk.svg">../../../icons/flags/sk.svg</file>
-<file alias="flags/sb.svg">../../../icons/flags/sb.svg</file>
-<file alias="flags/au.svg">../../../icons/flags/au.svg</file>
-<file alias="flags/lr.svg">../../../icons/flags/lr.svg</file>
-<file alias="flags/rw.svg">../../../icons/flags/rw.svg</file>
-<file alias="flags/km.svg">../../../icons/flags/km.svg</file>
-<file alias="flags/et.svg">../../../icons/flags/et.svg</file>
-<file alias="flags/za.svg">../../../icons/flags/za.svg</file>
-<file alias="flags/gr.svg">../../../icons/flags/gr.svg</file>
-<file alias="flags/om.svg">../../../icons/flags/om.svg</file>
-<file alias="flags/gu.svg">../../../icons/flags/gu.svg</file>
-<file alias="flags/ve.svg">../../../icons/flags/ve.svg</file>
-<file alias="flags/na.svg">../../../icons/flags/na.svg</file>
-<file alias="flags/mk.svg">../../../icons/flags/mk.svg</file>
-<file alias="flags/xk.svg">../../../icons/flags/xk.svg</file>
-<file alias="flags/br.svg">../../../icons/flags/br.svg</file>
-<file alias="flags/ai.svg">../../../icons/flags/ai.svg</file>
-<file alias="flags/mo.svg">../../../icons/flags/mo.svg</file>
-<file alias="flags/eu.svg">../../../icons/flags/eu.svg</file>
-<file alias="flags/hm.svg">../../../icons/flags/hm.svg</file>
-<file alias="flags/lb.svg">../../../icons/flags/lb.svg</file>
-<file alias="flags/tf.svg">../../../icons/flags/tf.svg</file>
-<file alias="flags/bi.svg">../../../icons/flags/bi.svg</file>
-<file alias="flags/bn.svg">../../../icons/flags/bn.svg</file>
-<file alias="flags/tv.svg">../../../icons/flags/tv.svg</file>
-<file alias="flags/my.svg">../../../icons/flags/my.svg</file>
-<file alias="flags/vu.svg">../../../icons/flags/vu.svg</file>
-<file alias="flags/cv.svg">../../../icons/flags/cv.svg</file>
-<file alias="flags/ug.svg">../../../icons/flags/ug.svg</file>
-<file alias="flags/nz.svg">../../../icons/flags/nz.svg</file>
-<file alias="flags/ao.svg">../../../icons/flags/ao.svg</file>
-<file alias="flags/ph.svg">../../../icons/flags/ph.svg</file>
-<file alias="flags/hk.svg">../../../icons/flags/hk.svg</file>
-<file alias="flags/gi.svg">../../../icons/flags/gi.svg</file>
-<file alias="flags/im.svg">../../../icons/flags/im.svg</file>
-<file alias="flags/mn.svg">../../../icons/flags/mn.svg</file>
-<file alias="flags/nc.svg">../../../icons/flags/nc.svg</file>
-<file alias="flags/gd.svg">../../../icons/flags/gd.svg</file>
-<file alias="flags/si.svg">../../../icons/flags/si.svg</file>
-<file alias="flags/ni.svg">../../../icons/flags/ni.svg</file>
-<file alias="flags/kr.svg">../../../icons/flags/kr.svg</file>
-<file alias="flags/ke.svg">../../../icons/flags/ke.svg</file>
-<file alias="flags/uz.svg">../../../icons/flags/uz.svg</file>
-<file alias="flags/iq.svg">../../../icons/flags/iq.svg</file>
-<file alias="flags/ck.svg">../../../icons/flags/ck.svg</file>
-<file alias="flags/tj.svg">../../../icons/flags/tj.svg</file>
-<file alias="flags/tm.svg">../../../icons/flags/tm.svg</file>
-<file alias="flags/ms.svg">../../../icons/flags/ms.svg</file>
-<file alias="flags/gb.svg">../../../icons/flags/gb.svg</file>
-<file alias="flags/mz.svg">../../../icons/flags/mz.svg</file>
-<file alias="flags/cx.svg">../../../icons/flags/cx.svg</file>
-<file alias="flags/pg.svg">../../../icons/flags/pg.svg</file>
-<file alias="flags/gq.svg">../../../icons/flags/gq.svg</file>
-<file alias="flags/dm.svg">../../../icons/flags/dm.svg</file>
-<file alias="flags/al.svg">../../../icons/flags/al.svg</file>
-<file alias="flags/nu.svg">../../../icons/flags/nu.svg</file>
-<file alias="flags/sh.svg">../../../icons/flags/sh.svg</file>
-<file alias="flags/zw.svg">../../../icons/flags/zw.svg</file>
-<file alias="flags/lk.svg">../../../icons/flags/lk.svg</file>
-<file alias="flags/sz.svg">../../../icons/flags/sz.svg</file>
-<file alias="flags/um.svg">../../../icons/flags/um.svg</file>
-<file alias="flags/us.svg">../../../icons/flags/us.svg</file>
-<file alias="flags/cc.svg">../../../icons/flags/cc.svg</file>
-<file alias="flags/er.svg">../../../icons/flags/er.svg</file>
-<file alias="flags/ki.svg">../../../icons/flags/ki.svg</file>
-<file alias="flags/eg.svg">../../../icons/flags/eg.svg</file>
-<file alias="flags/sx.svg">../../../icons/flags/sx.svg</file>
-<file alias="flags/in.svg">../../../icons/flags/in.svg</file>
-<file alias="flags/uy.svg">../../../icons/flags/uy.svg</file>
-<file alias="flags/zm.svg">../../../icons/flags/zm.svg</file>
-<file alias="flags/li.svg">../../../icons/flags/li.svg</file>
-<file alias="flags/bm.svg">../../../icons/flags/bm.svg</file>
-<file alias="flags/fk.svg">../../../icons/flags/fk.svg</file>
-<file alias="flags/mt.svg">../../../icons/flags/mt.svg</file>
-<file alias="flags/py.svg">../../../icons/flags/py.svg</file>
-<file alias="flags/tc.svg">../../../icons/flags/tc.svg</file>
-<file alias="flags/pf.svg">../../../icons/flags/pf.svg</file>
-<file alias="flags/hr.svg">../../../icons/flags/hr.svg</file>
-<file alias="flags/ht.svg">../../../icons/flags/ht.svg</file>
-<file alias="flags/rs.svg">../../../icons/flags/rs.svg</file>
-<file alias="flags/mw.svg">../../../icons/flags/mw.svg</file>
-<file alias="flags/cy.svg">../../../icons/flags/cy.svg</file>
-<file alias="flags/mq.svg">../../../icons/flags/mq.svg</file>
-<file alias="flags/ec.svg">../../../icons/flags/ec.svg</file>
-<file alias="flags/va.svg">../../../icons/flags/va.svg</file>
-<file alias="flags/ky.svg">../../../icons/flags/ky.svg</file>
-<file alias="flags/kg.svg">../../../icons/flags/kg.svg</file>
-<file alias="flags/sv.svg">../../../icons/flags/sv.svg</file>
-<file alias="flags/me.svg">../../../icons/flags/me.svg</file>
-<file alias="flags/fj.svg">../../../icons/flags/fj.svg</file>
-<file alias="flags/mx.svg">../../../icons/flags/mx.svg</file>
-<file alias="flags/sm.svg">../../../icons/flags/sm.svg</file>
-<file alias="flags/md.svg">../../../icons/flags/md.svg</file>
-<file alias="flags/gt.svg">../../../icons/flags/gt.svg</file>
-<file alias="flags/kz.svg">../../../icons/flags/kz.svg</file>
-<file alias="flags/bt.svg">../../../icons/flags/bt.svg</file>
-<file alias="flags/ad.svg">../../../icons/flags/ad.svg</file>
-<file alias="flags/ir.svg">../../../icons/flags/ir.svg</file>
-<file alias="flags/kh.svg">../../../icons/flags/kh.svg</file>
-<file alias="flags/af.svg">../../../icons/flags/af.svg</file>
-<file alias="flags/je.svg">../../../icons/flags/je.svg</file>
-<file alias="flags/as.svg">../../../icons/flags/as.svg</file>
-<file alias="flags/sa.svg">../../../icons/flags/sa.svg</file>
-<file alias="flags/do.svg">../../../icons/flags/do.svg</file>
-<file alias="flags/ea.svg">../../../icons/flags/ea.svg</file>
-<file alias="flags/es.svg">../../../icons/flags/es.svg</file>
-<file alias="flags/pn.svg">../../../icons/flags/pn.svg</file>
-<file alias="flags/dg.svg">../../../icons/flags/dg.svg</file>
-<file alias="flags/io.svg">../../../icons/flags/io.svg</file>
-<file alias="flags/nf.svg">../../../icons/flags/nf.svg</file>
-<file alias="flags/bo.svg">../../../icons/flags/bo.svg</file>
-<file alias="flags/ar.svg">../../../icons/flags/ar.svg</file>
-<file alias="flags/ic.svg">../../../icons/flags/ic.svg</file>
-<file alias="flags/vi.svg">../../../icons/flags/vi.svg</file>
-<file alias="flags/by.svg">../../../icons/flags/by.svg</file>
-<file alias="flags/bz.svg">../../../icons/flags/bz.svg</file>
-<file alias="flags/gp.svg">../../../icons/flags/gp.svg</file>
-<file alias="flags/ac.svg">../../../icons/flags/ac.svg</file>
-<file alias="flags/mp.svg">../../../icons/flags/mp.svg</file>
-<file alias="flags/pt.svg">../../../icons/flags/pt.svg</file>
-<file alias="flags/ta.svg">../../../icons/flags/ta.svg</file>
-<file alias="flags/gs.svg">../../../icons/flags/gs.svg</file>
-<file alias="flags/yt.svg">../../../icons/flags/yt.svg</file>
-<file alias="flags/bl.svg">../../../icons/flags/bl.svg</file>
-<file alias="flags/vg.svg">../../../icons/flags/vg.svg</file>
-<file alias="flags/pm.svg">../../../icons/flags/pm.svg</file>
-</qresource>
-</RCC>
diff --git a/src/mumble/main.cpp b/src/mumble/main.cpp
index 369cc9a72..90b8e5edc 100644
--- a/src/mumble/main.cpp
+++ b/src/mumble/main.cpp
@@ -356,7 +356,8 @@ int main(int argc, char **argv) {
printf("%s\n", qPrintable(License::license()));
return 0;
} else if (args.at(i) == QLatin1String("-authors") || args.at(i) == QLatin1String("--authors")) {
- printf("%s\n", qPrintable(License::authors()));
+ printf("%s\n",
+ "For a list of authors, please see https://github.com/mumble-voip/mumble/graphs/contributors");
return 0;
} else if (args.at(i) == QLatin1String("-third-party-licenses")
|| args.at(i) == QLatin1String("--third-party-licenses")) {
diff --git a/src/mumble/mumble_ar.ts b/src/mumble/mumble_ar.ts
index f78e0c0f0..208c93136 100644
--- a/src/mumble/mumble_ar.ts
+++ b/src/mumble/mumble_ar.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_bg.ts b/src/mumble/mumble_bg.ts
index f7c98675b..792d01842 100644
--- a/src/mumble/mumble_bg.ts
+++ b/src/mumble/mumble_bg.ts
@@ -642,6 +642,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_br.ts b/src/mumble/mumble_br.ts
index d3112d7bd..21bfa9b2e 100644
--- a/src/mumble/mumble_br.ts
+++ b/src/mumble/mumble_br.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_ca.ts b/src/mumble/mumble_ca.ts
index 95302482f..dde484c6d 100644
--- a/src/mumble/mumble_ca.ts
+++ b/src/mumble/mumble_ca.ts
@@ -649,6 +649,10 @@ Aquest valor us permet establir el nombre màxim d&apos;usuaris permesos al cana
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Una utilitat de xat de veu de codi obert, de baixa latència i d&apos;alta qualitat&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_cs.ts b/src/mumble/mumble_cs.ts
index dca1723bd..ed481a2bd 100644
--- a/src/mumble/mumble_cs.ts
+++ b/src/mumble/mumble_cs.ts
@@ -649,6 +649,10 @@ Tato hodnota Vám umožňuje nastavit maximální počet povolených uživatelů
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Nástroj pro hlasový chat s otevřeným zdrojovým kódem, nízkou latencí a vysokou kvalitou&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_cy.ts b/src/mumble/mumble_cy.ts
index c4356a282..27be7390d 100644
--- a/src/mumble/mumble_cy.ts
+++ b/src/mumble/mumble_cy.ts
@@ -642,6 +642,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_da.ts b/src/mumble/mumble_da.ts
index b1c525c19..7241e7146 100644
--- a/src/mumble/mumble_da.ts
+++ b/src/mumble/mumble_da.ts
@@ -648,6 +648,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_de.ts b/src/mumble/mumble_de.ts
index 010f22afa..eedc80525 100644
--- a/src/mumble/mumble_de.ts
+++ b/src/mumble/mumble_de.ts
@@ -649,6 +649,10 @@ Dieser Wert erlaubt das Einstellen der maximal im Kanal erlaubten Benutzeranzahl
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Ein Open-Source-Sprachchatprogramm mit hoher Qualität und niedriger Latenz&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_el.ts b/src/mumble/mumble_el.ts
index c29717eeb..8d173e53a 100644
--- a/src/mumble/mumble_el.ts
+++ b/src/mumble/mumble_el.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Μία υπηρεσία ανοικτού κώδικα, μικρής καθυστέρησης και υψηλής ποιότητας ήχου φωνής&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_en.ts b/src/mumble/mumble_en.ts
index c3effd0c5..b5bec5fb9 100644
--- a/src/mumble/mumble_en.ts
+++ b/src/mumble/mumble_en.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_en_GB.ts b/src/mumble/mumble_en_GB.ts
index 5f8a81514..62c03c8cd 100644
--- a/src/mumble/mumble_en_GB.ts
+++ b/src/mumble/mumble_en_GB.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_eo.ts b/src/mumble/mumble_eo.ts
index 361ade150..ee67a56a7 100644
--- a/src/mumble/mumble_eo.ts
+++ b/src/mumble/mumble_eo.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_es.ts b/src/mumble/mumble_es.ts
index 044334fe4..52bcf4af0 100644
--- a/src/mumble/mumble_es.ts
+++ b/src/mumble/mumble_es.ts
@@ -649,6 +649,10 @@ Este valor permite fijar el número máximo de usuarios permitidos en el canal.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Una aplicación de chat de voz de código abierto, baja latencia y alta calidad&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_et.ts b/src/mumble/mumble_et.ts
index 3a84afcde..33fa66caf 100644
--- a/src/mumble/mumble_et.ts
+++ b/src/mumble/mumble_et.ts
@@ -642,6 +642,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_eu.ts b/src/mumble/mumble_eu.ts
index 02c0138de..7c518929c 100644
--- a/src/mumble/mumble_eu.ts
+++ b/src/mumble/mumble_eu.ts
@@ -651,6 +651,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_fa_IR.ts b/src/mumble/mumble_fa_IR.ts
index 8c51b6be6..2e851bba7 100644
--- a/src/mumble/mumble_fa_IR.ts
+++ b/src/mumble/mumble_fa_IR.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_fi.ts b/src/mumble/mumble_fi.ts
index d2db9e637..a33d0939c 100644
--- a/src/mumble/mumble_fi.ts
+++ b/src/mumble/mumble_fi.ts
@@ -649,6 +649,10 @@ Tämän numeron ollessa suurempi kuin nolla kanava sallii enintään numeron suu
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Korkeatasoinen ja pieniviiveinen puhechat, joka perustuu avoimeen koodiin&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_fr.ts b/src/mumble/mumble_fr.ts
index f71e783c5..fa81c1988 100644
--- a/src/mumble/mumble_fr.ts
+++ b/src/mumble/mumble_fr.ts
@@ -649,6 +649,10 @@ Cette valeur vous permet de définir un nombre maximum d&apos;utilisateurs autor
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Un utilitaire de chat vocal en temps réel, de qualité, open source&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_gl.ts b/src/mumble/mumble_gl.ts
index b7f2399bf..455818476 100644
--- a/src/mumble/mumble_gl.ts
+++ b/src/mumble/mumble_gl.ts
@@ -643,6 +643,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_he.ts b/src/mumble/mumble_he.ts
index b33087df8..809189a8f 100644
--- a/src/mumble/mumble_he.ts
+++ b/src/mumble/mumble_he.ts
@@ -650,6 +650,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;צ׳אט קולי בקוד פתוח, איכות גבוהה וזמן המתנה נמוך&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_hu.ts b/src/mumble/mumble_hu.ts
index 490b1b8b9..460fed94d 100644
--- a/src/mumble/mumble_hu.ts
+++ b/src/mumble/mumble_hu.ts
@@ -645,6 +645,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Hangalapú csevegőalkalmazás játékosok számára&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_it.ts b/src/mumble/mumble_it.ts
index 412eef0a9..1f758e1eb 100644
--- a/src/mumble/mumble_it.ts
+++ b/src/mumble/mumble_it.ts
@@ -649,6 +649,10 @@ Questo valore ti permette di impostare il numero massimo di utenti consentiti ne
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Utility Open Source di chat vocale a bassa latenza e elevata qualità audio&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_ja.ts b/src/mumble/mumble_ja.ts
index 7c5a6a173..d4fc6a83b 100644
--- a/src/mumble/mumble_ja.ts
+++ b/src/mumble/mumble_ja.ts
@@ -650,6 +650,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_ko.ts b/src/mumble/mumble_ko.ts
index cbfe5c9ec..5ee9c4105 100644
--- a/src/mumble/mumble_ko.ts
+++ b/src/mumble/mumble_ko.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;오픈 소스, 짧은 지연 시간, 고품질 음성 채팅 유틸리티&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_lt.ts b/src/mumble/mumble_lt.ts
index afe6f5f49..2b22a078a 100644
--- a/src/mumble/mumble_lt.ts
+++ b/src/mumble/mumble_lt.ts
@@ -644,6 +644,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished">&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Balso pokalbių paslaugų programa, skirta žaidėjams&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_nl.ts b/src/mumble/mumble_nl.ts
index 0f16c88be..426d59169 100644
--- a/src/mumble/mumble_nl.ts
+++ b/src/mumble/mumble_nl.ts
@@ -649,6 +649,10 @@ Deze waarde laat je toe om een maximum aantal gebruikers in te stellen voor het
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Een open source chat- en spraak-applicatie met weinig vertraging en een hoge kwaliteit&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_no.ts b/src/mumble/mumble_no.ts
index d76524ff6..9c37b2bbf 100644
--- a/src/mumble/mumble_no.ts
+++ b/src/mumble/mumble_no.ts
@@ -649,6 +649,10 @@ Denne verdien gjør at du setter maksimalt antall brukere tillatt i kanalen. Hvi
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished">&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Et prateverktøy for spillere&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_oc.ts b/src/mumble/mumble_oc.ts
index 97b8d2c6f..12bb2cdab 100644
--- a/src/mumble/mumble_oc.ts
+++ b/src/mumble/mumble_oc.ts
@@ -642,6 +642,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Un utilitari de discutida vocala a febla laténcia pels jogaires&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_pl.ts b/src/mumble/mumble_pl.ts
index 1504294ad..d47d26c42 100644
--- a/src/mumble/mumble_pl.ts
+++ b/src/mumble/mumble_pl.ts
@@ -649,6 +649,10 @@ Określa maksymalną dozwoloną liczbę użytkowników na tym kanale. Jeżeli wa
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Otwartoźródłowe, o niskim opóźnieniu i wysokiej jakości, narzędzie do czatu głosowego&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_pt_BR.ts b/src/mumble/mumble_pt_BR.ts
index 6d1e6ea19..cd3a23574 100644
--- a/src/mumble/mumble_pt_BR.ts
+++ b/src/mumble/mumble_pt_BR.ts
@@ -649,6 +649,10 @@ Este valor permite que você especifique o número máximo de usuárias permitid
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Um programa de chamadas de voz de alta qualidade e baixa latência de Código Aberto&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_pt_PT.ts b/src/mumble/mumble_pt_PT.ts
index 75225cc13..e4294222a 100644
--- a/src/mumble/mumble_pt_PT.ts
+++ b/src/mumble/mumble_pt_PT.ts
@@ -649,6 +649,10 @@ Este valor permite definir o número máximo de utilizadores permitido no canal.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Um programa de código-fonte aberto, baixa latência e com alta qualidade de chat por voz&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_ro.ts b/src/mumble/mumble_ro.ts
index 8a29e2878..de9ebe00b 100644
--- a/src/mumble/mumble_ro.ts
+++ b/src/mumble/mumble_ro.ts
@@ -645,6 +645,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_ru.ts b/src/mumble/mumble_ru.ts
index 61995ccf5..498e4a80e 100644
--- a/src/mumble/mumble_ru.ts
+++ b/src/mumble/mumble_ru.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Голосового чат с открытым исходным кодом, низкой задержкой и высоким качеством&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_si.ts b/src/mumble/mumble_si.ts
index 373b0572c..dfe504e1a 100644
--- a/src/mumble/mumble_si.ts
+++ b/src/mumble/mumble_si.ts
@@ -637,6 +637,10 @@ Contains the list of members inherited by the current channel. Uncheck &lt;i&gt;
<source>OK</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_sk.ts b/src/mumble/mumble_sk.ts
index 4e605bc8a..ba19c7688 100644
--- a/src/mumble/mumble_sk.ts
+++ b/src/mumble/mumble_sk.ts
@@ -640,6 +640,10 @@ Contains the list of members inherited by the current channel. Uncheck &lt;i&gt;
<source>OK</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_sq.ts b/src/mumble/mumble_sq.ts
index e8b2249c2..546dacca5 100644
--- a/src/mumble/mumble_sq.ts
+++ b/src/mumble/mumble_sq.ts
@@ -639,6 +639,10 @@ Contains the list of members inherited by the current channel. Uncheck &lt;i&gt;
<source>OK</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_sv.ts b/src/mumble/mumble_sv.ts
index 4a782be87..51e9599b5 100644
--- a/src/mumble/mumble_sv.ts
+++ b/src/mumble/mumble_sv.ts
@@ -649,6 +649,10 @@ Det värdet tillåter dig att ställa in ett maximalt antal av användare som ä
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Ett verktyg för röstchatt med öppen källkod, låg latenstid och hög kvalitet&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_te.ts b/src/mumble/mumble_te.ts
index f051f4728..f14754538 100644
--- a/src/mumble/mumble_te.ts
+++ b/src/mumble/mumble_te.ts
@@ -647,6 +647,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_th.ts b/src/mumble/mumble_th.ts
index e34582867..b78b4989e 100644
--- a/src/mumble/mumble_th.ts
+++ b/src/mumble/mumble_th.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_tr.ts b/src/mumble/mumble_tr.ts
index 19321a801..bd5bd1c7d 100644
--- a/src/mumble/mumble_tr.ts
+++ b/src/mumble/mumble_tr.ts
@@ -649,6 +649,10 @@ Bu değer kanalda izin verilen azami kullanıcı sayısını ayarlamanıza izin
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;Açık kaynaklı, düşük gecikmeli, yüksek kaliteli sesli sohbet aracı &lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_uk.ts b/src/mumble/mumble_uk.ts
index 4fa94f3f0..4584253ee 100644
--- a/src/mumble/mumble_uk.ts
+++ b/src/mumble/mumble_uk.ts
@@ -642,6 +642,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_zh_CN.ts b/src/mumble/mumble_zh_CN.ts
index 395b3e498..aa189201b 100644
--- a/src/mumble/mumble_zh_CN.ts
+++ b/src/mumble/mumble_zh_CN.ts
@@ -649,6 +649,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation>&lt;h3&gt;Mumble(%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;一款开放源代码、低延迟、高音质的语音聊天工具&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_zh_HK.ts b/src/mumble/mumble_zh_HK.ts
index 211eb8102..7021ed1ed 100644
--- a/src/mumble/mumble_zh_HK.ts
+++ b/src/mumble/mumble_zh_HK.ts
@@ -641,6 +641,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble/mumble_zh_TW.ts b/src/mumble/mumble_zh_TW.ts
index db87b09e6..a7fb75b4b 100644
--- a/src/mumble/mumble_zh_TW.ts
+++ b/src/mumble/mumble_zh_TW.ts
@@ -644,6 +644,10 @@ This value allows you to set the maximum number of users allowed in the channel.
<source>&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;An Open Source, low-latency, high quality voice-chat utility&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</source>
<translation type="unfinished">&lt;h3&gt;Mumble (%1)&lt;/h3&gt;&lt;p&gt;%3&lt;/p&gt;&lt;p&gt;&lt;b&gt;為玩家而生的語音工具&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;tt&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt;&lt;/tt&gt;&lt;/p&gt;</translation>
</message>
+ <message>
+ <source>For a list of authors, please see &lt;a href=&quot;https://github.com/mumble-voip/mumble/graphs/contributors&quot;&gt;https://github.com/mumble-voip/mumble/graphs/contributors&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>AudioInput</name>
diff --git a/src/mumble_exe/CMakeLists.txt b/src/mumble_exe/CMakeLists.txt
index d1cf294d9..ce0e82bf9 100644
--- a/src/mumble_exe/CMakeLists.txt
+++ b/src/mumble_exe/CMakeLists.txt
@@ -13,7 +13,7 @@ target_sources(mumble_exe PRIVATE
"mumble_exe.cpp"
"Overlay.cpp"
- "${SHARED_SOURCE_DIR}/mumble/mumble.appcompat.manifest"
+ "${CMAKE_SOURCE_DIR}/auxiliary_files/mumble.appcompat.manifest"
"${MUMBLE_RC}"
)
diff --git a/src/murmur/About.cpp b/src/murmur/About.cpp
index f8f23097e..93376b1cf 100644
--- a/src/murmur/About.cpp
+++ b/src/murmur/About.cpp
@@ -27,9 +27,12 @@ AboutDialog::AboutDialog(QWidget *p, AboutDialogOptions options) : QDialog(p) {
qteLicense->setReadOnly(true);
qteLicense->setPlainText(License::license());
- QTextEdit *qteAuthors = new QTextEdit(qtwTab);
- qteAuthors->setReadOnly(true);
- qteAuthors->setPlainText(License::authors());
+ QTextBrowser *authors = new QTextBrowser(qtwTab);
+ authors->setReadOnly(true);
+ authors->setOpenExternalLinks(true);
+ authors->setText(tr("For a list of authors, please see <a "
+ "href=\"https://github.com/mumble-voip/mumble/graphs/contributors\">https://github.com/"
+ "mumble-voip/mumble/graphs/contributors</a>"));
QTextBrowser *qtb3rdPartyLicense = new QTextBrowser(qtwTab);
qtb3rdPartyLicense->setReadOnly(true);
@@ -65,7 +68,7 @@ AboutDialog::AboutDialog(QWidget *p, AboutDialogOptions options) : QDialog(p) {
qtwTab->addTab(about, tr("&About Murmur"));
qtwTab->addTab(qteLicense, tr("&License"));
- qtwTab->addTab(qteAuthors, tr("A&uthors"));
+ qtwTab->addTab(authors, tr("A&uthors"));
qtwTab->addTab(qtb3rdPartyLicense, tr("&Third-Party Licenses"));
if (options == AboutDialogOptionsShowAbout) {
@@ -73,7 +76,7 @@ AboutDialog::AboutDialog(QWidget *p, AboutDialogOptions options) : QDialog(p) {
} else if (options == AboutDialogOptionsShowLicense) {
qtwTab->setCurrentWidget(qteLicense);
} else if (options == AboutDialogOptionsShowAuthors) {
- qtwTab->setCurrentWidget(qteAuthors);
+ qtwTab->setCurrentWidget(authors);
} else if (options == AboutDialogOptionsShowThirdPartyLicenses) {
qtwTab->setCurrentWidget(qtb3rdPartyLicense);
}
diff --git a/src/murmur/CMakeLists.txt b/src/murmur/CMakeLists.txt
index c31890908..eaa0da036 100644
--- a/src/murmur/CMakeLists.txt
+++ b/src/murmur/CMakeLists.txt
@@ -10,7 +10,7 @@ set(MURMUR_PLIST "${CMAKE_CURRENT_BINARY_DIR}/murmur.plist")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/murmur.plist.in" "${MURMUR_PLIST}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/murmur.rc.in" "${MURMUR_RC}")
-set(ICE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/Murmur.ice")
+set(ICE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/MumbleServer.ice")
include(qt-utils)
@@ -118,7 +118,7 @@ if(WIN32)
"Tray.h"
"murmur.qrc"
- "${SHARED_SOURCE_DIR}/mumble/mumble.appcompat.manifest"
+ "${CMAKE_SOURCE_DIR}/auxiliary_files/mumble.appcompat.manifest"
"${MURMUR_RC}"
)
@@ -234,14 +234,29 @@ if(ice)
VERBATIM
)
+ add_custom_target(generate_murmur_ice_wrapper
+ DEPENDS "MumbleServerIceWrapper.cpp"
+ )
+ add_dependencies(mumble-server generate_murmur_ice_wrapper)
+ add_custom_command(
+ OUTPUT "MumbleServerIceWrapper.cpp"
+ COMMAND ${PYTHON_INTERPRETER}
+ ARGS "${CMAKE_SOURCE_DIR}/scripts/generateIceWrapper.py" -i "${ICE_FILE}"
+ -g "${ICE_FILE_NAME}.h" -o "MumbleServerIceWrapper.cpp" -q
+ DEPENDS ${ICE_GENERATED_FILES}
+ COMMENT "Generating MumbleServerIceWrapper"
+ )
+ # Even though the file is a .cpp, it is still being included in MumbleServerIce.cpp
+ target_include_directories(mumble-server PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
+
# We explicitly tell CMake not to call any autogen tools (e.g. MOC) for the generated files.
# @ref https://cmake.org/cmake/help/latest/policy/CMP0071.html
set_property(SOURCE ${ICE_GENERATED_FILES} PROPERTY SKIP_AUTOGEN ON)
target_sources(mumble-server
PRIVATE
- "MurmurIce.cpp"
- "MurmurIce.h"
+ "MumbleServerIce.cpp"
+ "MumbleServerIce.h"
${ICE_GENERATED_FILES}
)
target_compile_definitions(mumble-server
@@ -261,19 +276,11 @@ if(ice)
$<TARGET_NAME_IF_EXISTS:Ice::IceUtil>
)
- file(COPY "Murmur.ice" DESTINATION ${CMAKE_BINARY_DIR})
+ file(COPY "${ICE_FILE}" DESTINATION ${CMAKE_BINARY_DIR})
endif()
install(TARGETS mumble-server RUNTIME DESTINATION "${MUMBLE_INSTALL_EXECUTABLEDIR}" COMPONENT mumble_server)
-file(COPY "${CMAKE_SOURCE_DIR}/scripts/murmur.ini" DESTINATION ${CMAKE_BINARY_DIR})
-
-if(UNIX)
- # Install Murmur man files
- install(FILES "${CMAKE_SOURCE_DIR}/man/mumble-server.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
- install(FILES "${CMAKE_SOURCE_DIR}/man/mumble-server-user-wrapper.1" DESTINATION "${MUMBLE_INSTALL_MANDIR}" COMPONENT doc)
-endif()
-
if(packaging)
if(WIN32)
if(translations)
diff --git a/src/murmur/Meta.cpp b/src/murmur/Meta.cpp
index c8a6455b6..88cb9cb3a 100644
--- a/src/murmur/Meta.cpp
+++ b/src/murmur/Meta.cpp
@@ -72,7 +72,7 @@ MetaParams::MetaParams() {
iDBPort = 0;
qsDBusService = "net.sourceforge.mumble.murmur";
qsDBDriver = "QSQLITE";
- qsLogfile = "murmur.log";
+ qsLogfile = "mumble-server.log";
iLogDays = 31;
@@ -169,6 +169,7 @@ void MetaParams::read(QString fname) {
datapaths << appdir.absolutePath() + QLatin1String("/Mumble");
#else
datapaths << QDir::homePath() + QLatin1String("/.murmurd");
+ datapaths << QDir::homePath() + QLatin1String("/.mumble-server");
datapaths << QDir::homePath() + QLatin1String("/.config/Mumble");
#endif
@@ -181,20 +182,24 @@ void MetaParams::read(QString fname) {
datapaths << QDir::currentPath();
datapaths << QCoreApplication::instance()->applicationDirPath();
- foreach (const QString &p, datapaths) {
+ for (const QString &p : datapaths) {
if (!p.isEmpty()) {
- QFileInfo fi(p, "murmur.ini");
- if (fi.exists() && fi.isReadable()) {
- qdBasePath = QDir(p);
- qsAbsSettingsFilePath = fi.absoluteFilePath();
- break;
+ // Prefer "mumble-server.ini" but for legacy reasons also keep looking for "murmur.ini"
+ for (const QString &currentFileName :
+ { QStringLiteral("mumble-server.ini"), QStringLiteral("murmur.ini") }) {
+ QFileInfo fi(p, currentFileName);
+ if (fi.exists() && fi.isReadable()) {
+ qdBasePath = QDir(p);
+ qsAbsSettingsFilePath = fi.absoluteFilePath();
+ break;
+ }
}
}
}
if (qsAbsSettingsFilePath.isEmpty()) {
QDir::root().mkpath(qdBasePath.absolutePath());
qdBasePath = QDir(datapaths.at(0));
- qsAbsSettingsFilePath = qdBasePath.absolutePath() + QLatin1String("/murmur.ini");
+ qsAbsSettingsFilePath = qdBasePath.absolutePath() + QLatin1String("/mumble-server.ini");
}
} else {
QFile f(fname);
@@ -562,7 +567,7 @@ bool MetaParams::loadSSLSettings() {
QString qsSSLDHParamsIniValue = qsSettings->value(QLatin1String("sslDHParams")).toString();
if (!qsSSLDHParamsIniValue.isEmpty()) {
qFatal("MetaParams: This version of Murmur does not support Diffie-Hellman parameters (sslDHParams). Murmur "
- "will not start unless you remove the option from your murmur.ini file.");
+ "will not start unless you remove the option from your mumble-server.ini (murmur.ini)file.");
return false;
}
#endif
diff --git a/src/murmur/Murmur.ice b/src/murmur/MumbleServer.ice
index 60d388458..3f7d8ccca 100644
--- a/src/murmur/Murmur.ice
+++ b/src/murmur/MumbleServer.ice
@@ -13,7 +13,7 @@
#include <Ice/SliceChecksumDict.ice>
-module Murmur
+module MumbleServer
{
/** A network address in IPv6 format.
diff --git a/src/murmur/MumbleServerI.h b/src/murmur/MumbleServerI.h
new file mode 100644
index 000000000..e1ddb2d3c
--- /dev/null
+++ b/src/murmur/MumbleServerI.h
@@ -0,0 +1,200 @@
+// Copyright 2008-2022 The Mumble Developers. All rights reserved.
+// Use of this source code is governed by a BSD-style license
+// that can be found in the LICENSE file at the root of the
+// Mumble source tree or at <https://www.mumble.info/LICENSE>.
+
+#ifndef MUMBLE_MURMUR_MURMURI_H_
+#define MUMBLE_MURMUR_MURMURI_H_
+
+#include <MumbleServer.h>
+
+namespace MumbleServer {
+
+class ServerI : virtual public Server {
+public:
+ virtual void isRunning_async(const ::MumbleServer::AMD_Server_isRunningPtr &, const Ice::Current &);
+
+ virtual void start_async(const ::MumbleServer::AMD_Server_startPtr &, const Ice::Current &);
+
+ virtual void stop_async(const ::MumbleServer::AMD_Server_stopPtr &, const Ice::Current &);
+
+ virtual void delete_async(const ::MumbleServer::AMD_Server_deletePtr &, const Ice::Current &);
+
+ virtual void addCallback_async(const ::MumbleServer::AMD_Server_addCallbackPtr &,
+ const ::MumbleServer::ServerCallbackPrx &, const ::Ice::Current &);
+ virtual void removeCallback_async(const ::MumbleServer::AMD_Server_removeCallbackPtr &,
+ const ::MumbleServer::ServerCallbackPrx &, const ::Ice::Current &);
+
+ virtual void setAuthenticator_async(const ::MumbleServer::AMD_Server_setAuthenticatorPtr &,
+ const ::MumbleServer::ServerAuthenticatorPrx &, const ::Ice::Current &);
+
+ virtual void id_async(const ::MumbleServer::AMD_Server_idPtr &, const Ice::Current &);
+
+ virtual void getConf_async(const ::MumbleServer::AMD_Server_getConfPtr &, const ::std::string &,
+ const Ice::Current &);
+
+ virtual void getAllConf_async(const ::MumbleServer::AMD_Server_getAllConfPtr &, const Ice::Current &);
+
+ virtual void setConf_async(const ::MumbleServer::AMD_Server_setConfPtr &, const ::std::string &,
+ const ::std::string &, const Ice::Current &);
+
+ virtual void setSuperuserPassword_async(const ::MumbleServer::AMD_Server_setSuperuserPasswordPtr &,
+ const ::std::string &, const Ice::Current &);
+
+ virtual void getLog_async(const ::MumbleServer::AMD_Server_getLogPtr &, ::Ice::Int, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void getLogLen_async(const ::MumbleServer::AMD_Server_getLogLenPtr &, const Ice::Current &);
+
+ virtual void getUsers_async(const ::MumbleServer::AMD_Server_getUsersPtr &, const Ice::Current &);
+
+ virtual void getChannels_async(const ::MumbleServer::AMD_Server_getChannelsPtr &, const Ice::Current &);
+
+ virtual void getTree_async(const ::MumbleServer::AMD_Server_getTreePtr &, const Ice::Current &);
+
+ virtual void getCertificateList_async(const ::MumbleServer::AMD_Server_getCertificateListPtr &, ::Ice::Int,
+ const ::Ice::Current &);
+
+ virtual void getBans_async(const ::MumbleServer::AMD_Server_getBansPtr &, const Ice::Current &);
+
+ virtual void setBans_async(const ::MumbleServer::AMD_Server_setBansPtr &, const ::MumbleServer::BanList &,
+ const Ice::Current &);
+
+ virtual void kickUser_async(const ::MumbleServer::AMD_Server_kickUserPtr &, ::Ice::Int, const ::std::string &,
+ const Ice::Current &);
+
+ virtual void sendMessage_async(const ::MumbleServer::AMD_Server_sendMessagePtr &, ::Ice::Int, const ::std::string &,
+ const Ice::Current &);
+
+ virtual void hasPermission_async(const ::MumbleServer::AMD_Server_hasPermissionPtr &, ::Ice::Int, ::Ice::Int,
+ ::Ice::Int, const ::Ice::Current &);
+ virtual void effectivePermissions_async(const ::MumbleServer::AMD_Server_effectivePermissionsPtr &, ::Ice::Int,
+ ::Ice::Int, const ::Ice::Current &);
+
+ virtual void addContextCallback_async(const ::MumbleServer::AMD_Server_addContextCallbackPtr &, ::Ice::Int,
+ const ::std::string &, const ::std::string &,
+ const ::MumbleServer::ServerContextCallbackPrx &, int,
+ const ::Ice::Current &);
+ virtual void removeContextCallback_async(const ::MumbleServer::AMD_Server_removeContextCallbackPtr &,
+ const ::MumbleServer::ServerContextCallbackPrx &, const ::Ice::Current &);
+
+ virtual void getState_async(const ::MumbleServer::AMD_Server_getStatePtr &, ::Ice::Int, const Ice::Current &);
+
+ virtual void setState_async(const ::MumbleServer::AMD_Server_setStatePtr &, const ::MumbleServer::User &,
+ const Ice::Current &);
+
+ virtual void getChannelState_async(const ::MumbleServer::AMD_Server_getChannelStatePtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void setChannelState_async(const ::MumbleServer::AMD_Server_setChannelStatePtr &,
+ const ::MumbleServer::Channel &, const Ice::Current &);
+
+ virtual void removeChannel_async(const ::MumbleServer::AMD_Server_removeChannelPtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void addChannel_async(const ::MumbleServer::AMD_Server_addChannelPtr &, const ::std::string &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void sendMessageChannel_async(const ::MumbleServer::AMD_Server_sendMessageChannelPtr &, ::Ice::Int, bool,
+ const ::std::string &, const Ice::Current &);
+
+ virtual void getACL_async(const ::MumbleServer::AMD_Server_getACLPtr &, ::Ice::Int, const Ice::Current &);
+
+ virtual void setACL_async(const ::MumbleServer::AMD_Server_setACLPtr &, ::Ice::Int, const ::MumbleServer::ACLList &,
+ const ::MumbleServer::GroupList &, bool, const Ice::Current &);
+
+ virtual void removeUserFromGroup_async(const ::MumbleServer::AMD_Server_removeUserFromGroupPtr &, ::Ice::Int,
+ ::Ice::Int, const ::std::string &, const ::Ice::Current &);
+
+ virtual void addUserToGroup_async(const ::MumbleServer::AMD_Server_addUserToGroupPtr &, ::Ice::Int, ::Ice::Int,
+ const ::std::string &, const ::Ice::Current &);
+
+ virtual void redirectWhisperGroup_async(const ::MumbleServer::AMD_Server_redirectWhisperGroupPtr &, ::Ice::Int,
+ const ::std::string &, const ::std::string &, const ::Ice::Current &);
+
+ virtual void getUserNames_async(const ::MumbleServer::AMD_Server_getUserNamesPtr &, const ::MumbleServer::IdList &,
+ const Ice::Current &);
+
+ virtual void getUserIds_async(const ::MumbleServer::AMD_Server_getUserIdsPtr &, const ::MumbleServer::NameList &,
+ const Ice::Current &);
+
+ virtual void registerUser_async(const ::MumbleServer::AMD_Server_registerUserPtr &,
+ const ::MumbleServer::UserInfoMap &, const Ice::Current &);
+
+ virtual void unregisterUser_async(const ::MumbleServer::AMD_Server_unregisterUserPtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void updateRegistration_async(const ::MumbleServer::AMD_Server_updateRegistrationPtr &, Ice::Int,
+ const ::MumbleServer::UserInfoMap &, const Ice::Current &);
+
+ virtual void getRegistration_async(const ::MumbleServer::AMD_Server_getRegistrationPtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void getRegisteredUsers_async(const ::MumbleServer::AMD_Server_getRegisteredUsersPtr &,
+ const ::std::string &, const Ice::Current &);
+
+ virtual void verifyPassword_async(const ::MumbleServer::AMD_Server_verifyPasswordPtr &, const ::std::string &,
+ const ::std::string &, const Ice::Current &);
+
+ virtual void getTexture_async(const ::MumbleServer::AMD_Server_getTexturePtr &, ::Ice::Int, const Ice::Current &);
+
+ virtual void setTexture_async(const ::MumbleServer::AMD_Server_setTexturePtr &, ::Ice::Int,
+ const ::MumbleServer::Texture &, const Ice::Current &);
+
+ virtual void getUptime_async(const ::MumbleServer::AMD_Server_getUptimePtr &, const Ice::Current &);
+
+ virtual void updateCertificate_async(const ::MumbleServer::AMD_Server_updateCertificatePtr &, const std::string &,
+ const std::string &, const std::string &, const Ice::Current &);
+
+ virtual void startListening_async(const ::MumbleServer::AMD_Server_startListeningPtr &, ::Ice::Int, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void stopListening_async(const ::MumbleServer::AMD_Server_stopListeningPtr &, ::Ice::Int, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void isListening_async(const ::MumbleServer::AMD_Server_isListeningPtr &, ::Ice::Int, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void getListeningChannels_async(const ::MumbleServer::AMD_Server_getListeningChannelsPtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void getListeningUsers_async(const ::MumbleServer::AMD_Server_getListeningUsersPtr &, ::Ice::Int,
+ const Ice::Current &);
+
+ virtual void sendWelcomeMessage_async(const ::MumbleServer::AMD_Server_sendWelcomeMessagePtr &,
+ const ::MumbleServer::IdList &p1, const ::Ice::Current &current);
+
+ virtual void ice_ping(const Ice::Current &) const;
+};
+
+class MetaI : virtual public Meta {
+public:
+ virtual void getSliceChecksums_async(const ::MumbleServer::AMD_Meta_getSliceChecksumsPtr &, const ::Ice::Current &);
+
+ virtual void getServer_async(const ::MumbleServer::AMD_Meta_getServerPtr &, ::Ice::Int, const Ice::Current &);
+
+ virtual void newServer_async(const ::MumbleServer::AMD_Meta_newServerPtr &, const Ice::Current &);
+
+ virtual void getBootedServers_async(const ::MumbleServer::AMD_Meta_getBootedServersPtr &, const Ice::Current &);
+
+ virtual void getAllServers_async(const ::MumbleServer::AMD_Meta_getAllServersPtr &, const Ice::Current &);
+
+ virtual void getDefaultConf_async(const ::MumbleServer::AMD_Meta_getDefaultConfPtr &, const Ice::Current &);
+
+ virtual void getVersion_async(const ::MumbleServer::AMD_Meta_getVersionPtr &, const Ice::Current &);
+
+
+ virtual void addCallback_async(const ::MumbleServer::AMD_Meta_addCallbackPtr &,
+ const ::MumbleServer::MetaCallbackPrx &, const ::Ice::Current & = ::Ice::Current());
+ virtual void removeCallback_async(const ::MumbleServer::AMD_Meta_removeCallbackPtr &,
+ const ::MumbleServer::MetaCallbackPrx &,
+ const ::Ice::Current & = ::Ice::Current());
+
+ virtual void getUptime_async(const ::MumbleServer::AMD_Meta_getUptimePtr &, const Ice::Current &);
+
+ virtual void getSlice_async(const ::MumbleServer::AMD_Meta_getSlicePtr &, const Ice::Current &);
+};
+
+} // namespace MumbleServer
+
+#endif
diff --git a/src/murmur/MurmurIce.cpp b/src/murmur/MumbleServerIce.cpp
index 928033f91..69a098b4c 100644
--- a/src/murmur/MurmurIce.cpp
+++ b/src/murmur/MumbleServerIce.cpp
@@ -3,13 +3,13 @@
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-#include "MurmurIce.h"
+#include "MumbleServerIce.h"
#include "Ban.h"
#include "Channel.h"
#include "Group.h"
#include "Meta.h"
-#include "MurmurI.h"
+#include "MumbleServer.h"
#include "QtUtils.h"
#include "Server.h"
#include "ServerDB.h"
@@ -30,9 +30,9 @@
#include <limits>
using namespace std;
-using namespace Murmur;
+using namespace MumbleServer;
-static MurmurIce *mi = nullptr;
+static MumbleServerIce *mi = nullptr;
static Ice::ObjectPtr iopServer;
static Ice::PropertiesPtr ippProperties;
@@ -41,7 +41,7 @@ void IceParse(int &argc, char *argv[]) {
}
void IceStart() {
- mi = new MurmurIce();
+ mi = new MumbleServerIce();
}
void IceStop() {
@@ -90,12 +90,12 @@ static std::string iceBase64(const std::string &s) {
return std::string(ba64.data(), static_cast< size_t >(ba64.size()));
}
-static void logToLog(const ServerDB::LogRecord &r, Murmur::LogEntry &le) {
+static void logToLog(const ServerDB::LogRecord &r, ::MumbleServer::LogEntry &le) {
le.timestamp = r.first;
le.txt = iceString(r.second);
}
-static void userToUser(const ::User *p, Murmur::User &mp) {
+static void userToUser(const ::User *p, ::MumbleServer::User &mp) {
mp.session = p->uiSession;
mp.userid = p->iId;
mp.name = iceString(p->qsName);
@@ -130,7 +130,7 @@ static void userToUser(const ::User *p, Murmur::User &mp) {
mp.tcponly = u->aiUdpFlag.load() == 0;
#endif
- ::Murmur::NetAddress addr(16, 0);
+ ::MumbleServer::NetAddress addr(16, 0);
const Q_IPV6ADDR &a = u->haAddress.qip6;
for (int i = 0; i < 16; ++i)
addr[i] = a[i];
@@ -138,7 +138,7 @@ static void userToUser(const ::User *p, Murmur::User &mp) {
mp.address = addr;
}
-static void channelToChannel(const ::Channel *c, Murmur::Channel &mc) {
+static void channelToChannel(const ::Channel *c, ::MumbleServer::Channel &mc) {
mc.id = c->iId;
mc.name = iceString(c->qsName);
mc.parent = c->cParent ? c->cParent->iId : -1;
@@ -150,7 +150,7 @@ static void channelToChannel(const ::Channel *c, Murmur::Channel &mc) {
mc.temporary = c->bTemporary;
}
-static void ACLtoACL(const ::ChanACL *acl, Murmur::ACL &ma) {
+static void ACLtoACL(const ::ChanACL *acl, ::MumbleServer::ACL &ma) {
ma.applyHere = acl->bApplyHere;
ma.applySubs = acl->bApplySubs;
ma.inherited = false;
@@ -160,7 +160,7 @@ static void ACLtoACL(const ::ChanACL *acl, Murmur::ACL &ma) {
ma.deny = acl->pDeny;
}
-static void groupToGroup(const ::Group *g, Murmur::Group &mg) {
+static void groupToGroup(const ::Group *g, ::MumbleServer::Group &mg) {
mg.name = iceString(g->qsName);
mg.inherit = g->bInherit;
mg.inheritable = g->bInheritable;
@@ -169,8 +169,8 @@ static void groupToGroup(const ::Group *g, Murmur::Group &mg) {
mg.members.clear();
}
-static void banToBan(const ::Ban &b, Murmur::Ban &mb) {
- ::Murmur::NetAddress addr(16, 0);
+static void banToBan(const ::Ban &b, ::MumbleServer::Ban &mb) {
+ ::MumbleServer::NetAddress addr(16, 0);
const Q_IPV6ADDR &a = b.haAddress.qip6;
for (int i = 0; i < 16; ++i)
addr[i] = a[i];
@@ -184,7 +184,7 @@ static void banToBan(const ::Ban &b, Murmur::Ban &mb) {
mb.duration = b.iDuration;
}
-static void banToBan(const ::Murmur::Ban &mb, ::Ban &b) {
+static void banToBan(const ::MumbleServer::Ban &mb, ::Ban &b) {
if (mb.address.size() != 16)
for (int i = 0; i < 16; ++i)
b.haAddress.qip6[i] = 0;
@@ -199,19 +199,19 @@ static void banToBan(const ::Murmur::Ban &mb, ::Ban &b) {
b.iDuration = mb.duration;
}
-static void infoToInfo(const QMap< int, QString > &info, Murmur::UserInfoMap &im) {
+static void infoToInfo(const QMap< int, QString > &info, ::MumbleServer::UserInfoMap &im) {
QMap< int, QString >::const_iterator i;
for (i = info.constBegin(); i != info.constEnd(); ++i)
- im[static_cast< Murmur::UserInfo >(i.key())] = iceString(i.value());
+ im[static_cast<::MumbleServer::UserInfo >(i.key())] = iceString(i.value());
}
-static void infoToInfo(const Murmur::UserInfoMap &im, QMap< int, QString > &info) {
- Murmur::UserInfoMap::const_iterator i;
+static void infoToInfo(const ::MumbleServer::UserInfoMap &im, QMap< int, QString > &info) {
+ ::MumbleServer::UserInfoMap::const_iterator i;
for (i = im.begin(); i != im.end(); ++i)
info.insert((*i).first, u8((*i).second));
}
-static void textmessageToTextmessage(const ::TextMessage &tm, Murmur::TextMessage &tmdst) {
+static void textmessageToTextmessage(const ::TextMessage &tm, ::MumbleServer::TextMessage &tmdst) {
tmdst.text = iceString(tm.qsText);
foreach (unsigned int i, tm.qlSessions)
@@ -231,7 +231,7 @@ public:
virtual void deactivate(const std::string &){};
};
-MurmurIce::MurmurIce() {
+MumbleServerIce::MumbleServerIce() {
count = 0;
if (meta->mp.qsIceEndpoint.isEmpty())
@@ -262,7 +262,7 @@ MurmurIce::MurmurIce() {
if (impl)
impl->put("secret", iceString(meta->mp.qsIceSecretWrite));
}
- adapter = communicator->createObjectAdapterWithEndpoints("Murmur", qPrintable(meta->mp.qsIceEndpoint));
+ adapter = communicator->createObjectAdapterWithEndpoints("Mumble Server", qPrintable(meta->mp.qsIceEndpoint));
MetaPtr m = new MetaI;
#if ICE_INT_VERSION >= 30700
MetaPrx mprx = MetaPrx::uncheckedCast(adapter->add(m, Ice::stringToIdentity("Meta")));
@@ -275,68 +275,68 @@ MurmurIce::MurmurIce() {
adapter->activate();
foreach (const Ice::EndpointPtr ep, mprx->ice_getEndpoints()) {
- qWarning("MurmurIce: Endpoint \"%s\" running", qPrintable(u8(ep->toString())));
+ qWarning("MumbleServerIce: Endpoint \"%s\" running", qPrintable(u8(ep->toString())));
}
meta->connectListener(this);
} catch (Ice::Exception &e) {
#if ICE_INT_VERSION >= 30700
- qCritical("MurmurIce: Initialization failed: %s", qPrintable(u8(e.ice_id())));
+ qCritical("MumbleServerIce: Initialization failed: %s", qPrintable(u8(e.ice_id())));
#else
- qCritical("MurmurIce: Initialization failed: %s", qPrintable(u8(e.ice_name())));
+ qCritical("MumbleServerIce: Initialization failed: %s", qPrintable(u8(e.ice_name())));
#endif
}
}
-MurmurIce::~MurmurIce() {
+MumbleServerIce::~MumbleServerIce() {
if (communicator) {
communicator->shutdown();
communicator->waitForShutdown();
communicator->destroy();
communicator = nullptr;
- qWarning("MurmurIce: Shutdown complete");
+ qWarning("MumbleServerIce: Shutdown complete");
}
iopServer = nullptr;
}
-void MurmurIce::customEvent(QEvent *evt) {
+void MumbleServerIce::customEvent(QEvent *evt) {
if (evt->type() == EXEC_QEVENT)
static_cast< ExecEvent * >(evt)->execute();
}
-void MurmurIce::badMetaProxy(const ::Murmur::MetaCallbackPrx &prx) {
+void MumbleServerIce::badMetaProxy(const ::MumbleServer::MetaCallbackPrx &prx) {
qCritical("Ice MetaCallback %s failed", qPrintable(QString::fromStdString(communicator->proxyToString(prx))));
removeMetaCallback(prx);
}
-void MurmurIce::badServerProxy(const ::Murmur::ServerCallbackPrx &prx, const ::Server *server) {
+void MumbleServerIce::badServerProxy(const ::MumbleServer::ServerCallbackPrx &prx, const ::Server *server) {
server->log(QString("Ice ServerCallback %1 failed").arg(QString::fromStdString(communicator->proxyToString(prx))));
removeServerCallback(server, prx);
}
-void MurmurIce::badAuthenticator(::Server *server) {
+void MumbleServerIce::badAuthenticator(::Server *server) {
server->disconnectAuthenticator(this);
- const ::Murmur::ServerAuthenticatorPrx &prx = qmServerAuthenticator.value(server->iServerNum);
+ const ::MumbleServer::ServerAuthenticatorPrx &prx = qmServerAuthenticator.value(server->iServerNum);
server->log(QString("Ice Authenticator %1 failed").arg(QString::fromStdString(communicator->proxyToString(prx))));
removeServerAuthenticator(server);
removeServerUpdatingAuthenticator(server);
}
-void MurmurIce::addMetaCallback(const ::Murmur::MetaCallbackPrx &prx) {
+void MumbleServerIce::addMetaCallback(const ::MumbleServer::MetaCallbackPrx &prx) {
if (!qlMetaCallbacks.contains(prx)) {
qWarning("Added Ice MetaCallback %s", qPrintable(QString::fromStdString(communicator->proxyToString(prx))));
qlMetaCallbacks.append(prx);
}
}
-void MurmurIce::removeMetaCallback(const ::Murmur::MetaCallbackPrx &prx) {
+void MumbleServerIce::removeMetaCallback(const ::MumbleServer::MetaCallbackPrx &prx) {
if (qlMetaCallbacks.removeAll(prx)) {
qWarning("Removed Ice MetaCallback %s", qPrintable(QString::fromStdString(communicator->proxyToString(prx))));
}
}
-void MurmurIce::addServerCallback(const ::Server *server, const ::Murmur::ServerCallbackPrx &prx) {
- QList<::Murmur::ServerCallbackPrx > &cbList = qmServerCallbacks[server->iServerNum];
+void MumbleServerIce::addServerCallback(const ::Server *server, const ::MumbleServer::ServerCallbackPrx &prx) {
+ QList<::MumbleServer::ServerCallbackPrx > &cbList = qmServerCallbacks[server->iServerNum];
if (!cbList.contains(prx)) {
server->log(
@@ -345,23 +345,23 @@ void MurmurIce::addServerCallback(const ::Server *server, const ::Murmur::Server
}
}
-void MurmurIce::removeServerCallback(const ::Server *server, const ::Murmur::ServerCallbackPrx &prx) {
+void MumbleServerIce::removeServerCallback(const ::Server *server, const ::MumbleServer::ServerCallbackPrx &prx) {
if (qmServerCallbacks[server->iServerNum].removeAll(prx)) {
server->log(
QString("Removed Ice ServerCallback %1").arg(QString::fromStdString(communicator->proxyToString(prx))));
}
}
-void MurmurIce::removeServerCallbacks(const ::Server *server) {
+void MumbleServerIce::removeServerCallbacks(const ::Server *server) {
if (qmServerCallbacks.contains(server->iServerNum)) {
server->log(QString("Removed all Ice ServerCallbacks"));
qmServerCallbacks.remove(server->iServerNum);
}
}
-void MurmurIce::addServerContextCallback(const ::Server *server, int session_id, const QString &action,
- const ::Murmur::ServerContextCallbackPrx &prx) {
- QMap< QString, ::Murmur::ServerContextCallbackPrx > &callbacks =
+void MumbleServerIce::addServerContextCallback(const ::Server *server, int session_id, const QString &action,
+ const ::MumbleServer::ServerContextCallbackPrx &prx) {
+ QMap< QString, ::MumbleServer::ServerContextCallbackPrx > &callbacks =
qmServerContextCallbacks[server->iServerNum][session_id];
if (!callbacks.contains(action) || callbacks[action] != prx) {
@@ -373,18 +373,19 @@ void MurmurIce::addServerContextCallback(const ::Server *server, int session_id,
}
}
-const QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > >
- MurmurIce::getServerContextCallbacks(const ::Server *server) const {
+const QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > >
+ MumbleServerIce::getServerContextCallbacks(const ::Server *server) const {
return qmServerContextCallbacks[server->iServerNum];
}
-void MurmurIce::removeServerContextCallback(const ::Server *server, int session_id, const QString &action) {
+void MumbleServerIce::removeServerContextCallback(const ::Server *server, int session_id, const QString &action) {
if (qmServerContextCallbacks[server->iServerNum][session_id].remove(action)) {
server->log(QString("Removed Ice ServerContextCallback for session %1, action %2").arg(session_id).arg(action));
}
}
-void MurmurIce::setServerAuthenticator(const ::Server *server, const ::Murmur::ServerAuthenticatorPrx &prx) {
+void MumbleServerIce::setServerAuthenticator(const ::Server *server,
+ const ::MumbleServer::ServerAuthenticatorPrx &prx) {
if (prx != qmServerAuthenticator[server->iServerNum]) {
server->log(
QString("Set Ice Authenticator to %1").arg(QString::fromStdString(communicator->proxyToString(prx))));
@@ -392,19 +393,19 @@ void MurmurIce::setServerAuthenticator(const ::Server *server, const ::Murmur::S
}
}
-const ::Murmur::ServerAuthenticatorPrx MurmurIce::getServerAuthenticator(const ::Server *server) const {
+const ::MumbleServer::ServerAuthenticatorPrx MumbleServerIce::getServerAuthenticator(const ::Server *server) const {
return qmServerAuthenticator[server->iServerNum];
}
-void MurmurIce::removeServerAuthenticator(const ::Server *server) {
+void MumbleServerIce::removeServerAuthenticator(const ::Server *server) {
if (qmServerAuthenticator.remove(server->iServerNum)) {
server->log(QString("Removed Ice Authenticator %1")
.arg(QString::fromStdString(communicator->proxyToString(getServerAuthenticator(server)))));
}
}
-void MurmurIce::setServerUpdatingAuthenticator(const ::Server *server,
- const ::Murmur::ServerUpdatingAuthenticatorPrx &prx) {
+void MumbleServerIce::setServerUpdatingAuthenticator(const ::Server *server,
+ const ::MumbleServer::ServerUpdatingAuthenticatorPrx &prx) {
if (prx != qmServerUpdatingAuthenticator[server->iServerNum]) {
server->log(QString("Set Ice UpdatingAuthenticator to %1")
.arg(QString::fromStdString(communicator->proxyToString(prx))));
@@ -412,11 +413,12 @@ void MurmurIce::setServerUpdatingAuthenticator(const ::Server *server,
}
}
-const ::Murmur::ServerUpdatingAuthenticatorPrx MurmurIce::getServerUpdatingAuthenticator(const ::Server *server) const {
+const ::MumbleServer::ServerUpdatingAuthenticatorPrx
+ MumbleServerIce::getServerUpdatingAuthenticator(const ::Server *server) const {
return qmServerUpdatingAuthenticator[server->iServerNum];
}
-void MurmurIce::removeServerUpdatingAuthenticator(const ::Server *server) {
+void MumbleServerIce::removeServerUpdatingAuthenticator(const ::Server *server) {
if (qmServerUpdatingAuthenticator.contains(server->iServerNum)) {
server->log(
QString("Removed Ice UpdatingAuthenticator %1")
@@ -433,17 +435,17 @@ static ServerPrx idToProxy(int id, const Ice::ObjectAdapterPtr &adapter) {
return ServerPrx::uncheckedCast(adapter->createProxy(ident));
}
-void MurmurIce::started(::Server *s) {
+void MumbleServerIce::started(::Server *s) {
s->connectListener(mi);
connect(s, SIGNAL(contextAction(const User *, const QString &, unsigned int, int)), this,
SLOT(contextAction(const User *, const QString &, unsigned int, int)));
- const QList<::Murmur::MetaCallbackPrx > &qlList = qlMetaCallbacks;
+ const QList<::MumbleServer::MetaCallbackPrx > &qlList = qlMetaCallbacks;
if (qlList.isEmpty())
return;
- foreach (const ::Murmur::MetaCallbackPrx &prx, qlList) {
+ foreach (const ::MumbleServer::MetaCallbackPrx &prx, qlList) {
try {
prx->started(idToProxy(s->iServerNum, adapter));
} catch (...) {
@@ -452,17 +454,17 @@ void MurmurIce::started(::Server *s) {
}
}
-void MurmurIce::stopped(::Server *s) {
+void MumbleServerIce::stopped(::Server *s) {
removeServerCallbacks(s);
removeServerAuthenticator(s);
removeServerUpdatingAuthenticator(s);
- const QList<::Murmur::MetaCallbackPrx > &qmList = qlMetaCallbacks;
+ const QList<::MumbleServer::MetaCallbackPrx > &qmList = qlMetaCallbacks;
if (qmList.isEmpty())
return;
- foreach (const ::Murmur::MetaCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::MetaCallbackPrx &prx, qmList) {
try {
prx->stopped(idToProxy(s->iServerNum, adapter));
} catch (...) {
@@ -471,18 +473,18 @@ void MurmurIce::stopped(::Server *s) {
}
}
-void MurmurIce::userConnected(const ::User *p) {
+void MumbleServerIce::userConnected(const ::User *p) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(p, mp);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->userConnected(mp);
} catch (...) {
@@ -491,20 +493,20 @@ void MurmurIce::userConnected(const ::User *p) {
}
}
-void MurmurIce::userDisconnected(const ::User *p) {
+void MumbleServerIce::userDisconnected(const ::User *p) {
::Server *s = qobject_cast<::Server * >(sender());
qmServerContextCallbacks[s->iServerNum].remove(p->uiSession);
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(p, mp);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->userDisconnected(mp);
} catch (...) {
@@ -513,18 +515,18 @@ void MurmurIce::userDisconnected(const ::User *p) {
}
}
-void MurmurIce::userStateChanged(const ::User *p) {
+void MumbleServerIce::userStateChanged(const ::User *p) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(p, mp);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->userStateChanged(mp);
} catch (...) {
@@ -533,21 +535,21 @@ void MurmurIce::userStateChanged(const ::User *p) {
}
}
-void MurmurIce::userTextMessage(const ::User *p, const ::TextMessage &message) {
+void MumbleServerIce::userTextMessage(const ::User *p, const ::TextMessage &message) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(p, mp);
- ::Murmur::TextMessage textMessage;
+ ::MumbleServer::TextMessage textMessage;
textmessageToTextmessage(message, textMessage);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->userTextMessage(mp, textMessage);
} catch (...) {
@@ -556,18 +558,18 @@ void MurmurIce::userTextMessage(const ::User *p, const ::TextMessage &message) {
}
}
-void MurmurIce::channelCreated(const ::Channel *c) {
+void MumbleServerIce::channelCreated(const ::Channel *c) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::Channel mc;
+ ::MumbleServer::Channel mc;
channelToChannel(c, mc);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->channelCreated(mc);
} catch (...) {
@@ -576,18 +578,18 @@ void MurmurIce::channelCreated(const ::Channel *c) {
}
}
-void MurmurIce::channelRemoved(const ::Channel *c) {
+void MumbleServerIce::channelRemoved(const ::Channel *c) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::Channel mc;
+ ::MumbleServer::Channel mc;
channelToChannel(c, mc);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->channelRemoved(mc);
} catch (...) {
@@ -596,18 +598,18 @@ void MurmurIce::channelRemoved(const ::Channel *c) {
}
}
-void MurmurIce::channelStateChanged(const ::Channel *c) {
+void MumbleServerIce::channelStateChanged(const ::Channel *c) {
::Server *s = qobject_cast<::Server * >(sender());
- const QList<::Murmur::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
+ const QList<::MumbleServer::ServerCallbackPrx > &qmList = qmServerCallbacks[s->iServerNum];
if (qmList.isEmpty())
return;
- ::Murmur::Channel mc;
+ ::MumbleServer::Channel mc;
channelToChannel(c, mc);
- foreach (const ::Murmur::ServerCallbackPrx &prx, qmList) {
+ foreach (const ::MumbleServer::ServerCallbackPrx &prx, qmList) {
try {
prx->channelStateChanged(mc);
} catch (...) {
@@ -616,24 +618,25 @@ void MurmurIce::channelStateChanged(const ::Channel *c) {
}
}
-void MurmurIce::contextAction(const ::User *pSrc, const QString &action, unsigned int session, int iChannel) {
+void MumbleServerIce::contextAction(const ::User *pSrc, const QString &action, unsigned int session, int iChannel) {
::Server *s = qobject_cast<::Server * >(sender());
- QMap< int, QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > > > &qmAll = qmServerContextCallbacks;
+ QMap< int, QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > > > &qmAll =
+ qmServerContextCallbacks;
if (!qmAll.contains(s->iServerNum))
return;
- QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > > &qmServer = qmAll[s->iServerNum];
+ QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > > &qmServer = qmAll[s->iServerNum];
if (!qmServer.contains(pSrc->uiSession))
return;
- QMap< QString, ::Murmur::ServerContextCallbackPrx > &qmUser = qmServer[pSrc->uiSession];
+ QMap< QString, ::MumbleServer::ServerContextCallbackPrx > &qmUser = qmServer[pSrc->uiSession];
if (!qmUser.contains(action))
return;
- const ::Murmur::ServerContextCallbackPrx &prx = qmUser[action];
+ const ::MumbleServer::ServerContextCallbackPrx &prx = qmUser[action];
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(pSrc, mp);
try {
@@ -655,7 +658,7 @@ void MurmurIce::contextAction(const ::User *pSrc, const QString &action, unsigne
}
}
-void MurmurIce::idToNameSlot(QString &name, int id) {
+void MumbleServerIce::idToNameSlot(QString &name, int id) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerAuthenticatorPrx prx = getServerAuthenticator(server);
@@ -665,12 +668,12 @@ void MurmurIce::idToNameSlot(QString &name, int id) {
badAuthenticator(server);
}
}
-void MurmurIce::idToTextureSlot(QByteArray &qba, int id) {
+void MumbleServerIce::idToTextureSlot(QByteArray &qba, int id) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerAuthenticatorPrx prx = getServerAuthenticator(server);
try {
- const ::Murmur::Texture &tex = prx->idToTexture(id);
+ const ::MumbleServer::Texture &tex = prx->idToTexture(id);
qba.resize(static_cast< int >(tex.size()));
char *ptr = qba.data();
@@ -681,7 +684,7 @@ void MurmurIce::idToTextureSlot(QByteArray &qba, int id) {
}
}
-void MurmurIce::nameToIdSlot(int &id, const QString &name) {
+void MumbleServerIce::nameToIdSlot(int &id, const QString &name) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerAuthenticatorPrx prx = getServerAuthenticator(server);
@@ -692,18 +695,19 @@ void MurmurIce::nameToIdSlot(int &id, const QString &name) {
}
}
-void MurmurIce::authenticateSlot(int &res, QString &uname, int sessionId, const QList< QSslCertificate > &certlist,
- const QString &certhash, bool certstrong, const QString &pw) {
+void MumbleServerIce::authenticateSlot(int &res, QString &uname, int sessionId,
+ const QList< QSslCertificate > &certlist, const QString &certhash,
+ bool certstrong, const QString &pw) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerAuthenticatorPrx prx = getServerAuthenticator(server);
::std::string newname;
- ::Murmur::GroupNameList groups;
- ::Murmur::CertificateList certs;
+ ::MumbleServer::GroupNameList groups;
+ ::MumbleServer::CertificateList certs;
certs.resize(certlist.size());
for (int i = 0; i < certlist.size(); ++i) {
- ::Murmur::CertificateDer der;
+ ::MumbleServer::CertificateDer der;
QByteArray qba = certlist.at(i).toDer();
der.resize(qba.size());
const char *ptr = qba.constData();
@@ -728,14 +732,14 @@ void MurmurIce::authenticateSlot(int &res, QString &uname, int sessionId, const
}
}
-void MurmurIce::registerUserSlot(int &res, const QMap< int, QString > &info) {
+void MumbleServerIce::registerUserSlot(int &res, const QMap< int, QString > &info) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
if (!prx)
return;
- ::Murmur::UserInfoMap im;
+ ::MumbleServer::UserInfoMap im;
infoToInfo(info, im);
try {
@@ -745,7 +749,7 @@ void MurmurIce::registerUserSlot(int &res, const QMap< int, QString > &info) {
}
}
-void MurmurIce::unregisterUserSlot(int &res, int id) {
+void MumbleServerIce::unregisterUserSlot(int &res, int id) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
@@ -758,14 +762,14 @@ void MurmurIce::unregisterUserSlot(int &res, int id) {
}
}
-void MurmurIce::getRegistrationSlot(int &res, int id, QMap< int, QString > &info) {
+void MumbleServerIce::getRegistrationSlot(int &res, int id, QMap< int, QString > &info) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
if (!prx)
return;
- Murmur::UserInfoMap im;
+ ::MumbleServer::UserInfoMap im;
try {
if (prx->getInfo(id, im)) {
res = 1;
@@ -777,14 +781,14 @@ void MurmurIce::getRegistrationSlot(int &res, int id, QMap< int, QString > &info
}
}
-void MurmurIce::getRegisteredUsersSlot(const QString &filter, QMap< int, QString > &m) {
+void MumbleServerIce::getRegisteredUsersSlot(const QString &filter, QMap< int, QString > &m) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
if (!prx)
return;
- ::Murmur::NameMap lst;
+ ::MumbleServer::NameMap lst;
try {
lst = prx->getRegisteredUsers(iceString(filter));
@@ -792,19 +796,19 @@ void MurmurIce::getRegisteredUsersSlot(const QString &filter, QMap< int, QString
badAuthenticator(server);
return;
}
- ::Murmur::NameMap::const_iterator i;
+ ::MumbleServer::NameMap::const_iterator i;
for (i = lst.begin(); i != lst.end(); ++i)
m.insert((*i).first, u8((*i).second));
}
-void MurmurIce::setInfoSlot(int &res, int id, const QMap< int, QString > &info) {
+void MumbleServerIce::setInfoSlot(int &res, int id, const QMap< int, QString > &info) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
if (!prx)
return;
- Murmur::UserInfoMap im;
+ MumbleServer::UserInfoMap im;
infoToInfo(info, im);
try {
@@ -814,14 +818,14 @@ void MurmurIce::setInfoSlot(int &res, int id, const QMap< int, QString > &info)
}
}
-void MurmurIce::setTextureSlot(int &res, int id, const QByteArray &texture) {
+void MumbleServerIce::setTextureSlot(int &res, int id, const QByteArray &texture) {
::Server *server = qobject_cast<::Server * >(sender());
const ServerUpdatingAuthenticatorPrx prx = getServerUpdatingAuthenticator(server);
if (!prx)
return;
- ::Murmur::Texture tex;
+ ::MumbleServer::Texture tex;
tex.resize(texture.size());
const char *ptr = texture.constData();
for (int i = 0; i < texture.size(); ++i)
@@ -854,18 +858,18 @@ Ice::ObjectPtr ServerLocator::locate(const Ice::Current &, Ice::LocalObjectPtr &
return; \
}
-#define NEED_PLAYER \
- ServerUser *user = server->qhUsers.value(session); \
- if (!user) { \
- cb->ice_exception(::Murmur::InvalidSessionException()); \
- return; \
+#define NEED_PLAYER \
+ ServerUser *user = server->qhUsers.value(session); \
+ if (!user) { \
+ cb->ice_exception(::MumbleServer::InvalidSessionException()); \
+ return; \
}
-#define NEED_CHANNEL_VAR(x, y) \
- x = server->qhChannels.value(y); \
- if (!x) { \
- cb->ice_exception(::Murmur::InvalidChannelException()); \
- return; \
+#define NEED_CHANNEL_VAR(x, y) \
+ x = server->qhChannels.value(y); \
+ if (!x) { \
+ cb->ice_exception(::MumbleServer::InvalidChannelException()); \
+ return; \
}
#define NEED_CHANNEL \
@@ -880,12 +884,12 @@ void ServerI::ice_ping(const Ice::Current &current) const {
}
#define ACCESS_Server_isRunning_READ
-static void impl_Server_isRunning(const ::Murmur::AMD_Server_isRunningPtr cb, int server_id) {
+static void impl_Server_isRunning(const ::MumbleServer::AMD_Server_isRunningPtr cb, int server_id) {
NEED_SERVER_EXISTS;
cb->ice_response(server != nullptr);
}
-static void impl_Server_start(const ::Murmur::AMD_Server_startPtr cb, int server_id) {
+static void impl_Server_start(const ::MumbleServer::AMD_Server_startPtr cb, int server_id) {
NEED_SERVER_EXISTS;
if (server)
cb->ice_exception(ServerBootedException());
@@ -895,13 +899,13 @@ static void impl_Server_start(const ::Murmur::AMD_Server_startPtr cb, int server
cb->ice_response();
}
-static void impl_Server_stop(const ::Murmur::AMD_Server_stopPtr cb, int server_id) {
+static void impl_Server_stop(const ::MumbleServer::AMD_Server_stopPtr cb, int server_id) {
NEED_SERVER;
meta->kill(server_id);
cb->ice_response();
}
-static void impl_Server_delete(const ::Murmur::AMD_Server_deletePtr cb, int server_id) {
+static void impl_Server_delete(const ::MumbleServer::AMD_Server_deletePtr cb, int server_id) {
NEED_SERVER_EXISTS;
if (server) {
cb->ice_exception(ServerBootedException());
@@ -911,13 +915,13 @@ static void impl_Server_delete(const ::Murmur::AMD_Server_deletePtr cb, int serv
cb->ice_response();
}
-static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr cb, int server_id,
- const Murmur::ServerCallbackPrx &cbptr) {
+static void impl_Server_addCallback(const MumbleServer::AMD_Server_addCallbackPtr cb, int server_id,
+ const MumbleServer::ServerCallbackPrx &cbptr) {
NEED_SERVER;
try {
- const Murmur::ServerCallbackPrx &oneway =
- Murmur::ServerCallbackPrx::checkedCast(cbptr->ice_oneway()->ice_connectionCached(false));
+ const MumbleServer::ServerCallbackPrx &oneway =
+ MumbleServer::ServerCallbackPrx::checkedCast(cbptr->ice_oneway()->ice_connectionCached(false));
mi->addServerCallback(server, oneway);
cb->ice_response();
} catch (...) {
@@ -925,13 +929,13 @@ static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr cb,
}
}
-static void impl_Server_removeCallback(const Murmur::AMD_Server_removeCallbackPtr cb, int server_id,
- const Murmur::ServerCallbackPrx &cbptr) {
+static void impl_Server_removeCallback(const MumbleServer::AMD_Server_removeCallbackPtr cb, int server_id,
+ const MumbleServer::ServerCallbackPrx &cbptr) {
NEED_SERVER;
try {
- const Murmur::ServerCallbackPrx &oneway =
- Murmur::ServerCallbackPrx::uncheckedCast(cbptr->ice_oneway()->ice_connectionCached(false));
+ const MumbleServer::ServerCallbackPrx &oneway =
+ MumbleServer::ServerCallbackPrx::uncheckedCast(cbptr->ice_oneway()->ice_connectionCached(false));
mi->removeServerCallback(server, oneway);
cb->ice_response();
} catch (...) {
@@ -939,19 +943,19 @@ static void impl_Server_removeCallback(const Murmur::AMD_Server_removeCallbackPt
}
}
-static void impl_Server_setAuthenticator(const ::Murmur::AMD_Server_setAuthenticatorPtr &cb, int server_id,
- const ::Murmur::ServerAuthenticatorPrx &aptr) {
+static void impl_Server_setAuthenticator(const ::MumbleServer::AMD_Server_setAuthenticatorPtr &cb, int server_id,
+ const ::MumbleServer::ServerAuthenticatorPrx &aptr) {
NEED_SERVER;
if (mi->getServerAuthenticator(server))
server->disconnectAuthenticator(mi);
- ::Murmur::ServerAuthenticatorPrx prx;
+ ::MumbleServer::ServerAuthenticatorPrx prx;
try {
- prx = ::Murmur::ServerAuthenticatorPrx::checkedCast(aptr->ice_connectionCached(false)->ice_timeout(5000));
- const ::Murmur::ServerUpdatingAuthenticatorPrx uprx =
- ::Murmur::ServerUpdatingAuthenticatorPrx::checkedCast(prx);
+ prx = ::MumbleServer::ServerAuthenticatorPrx::checkedCast(aptr->ice_connectionCached(false)->ice_timeout(5000));
+ const ::MumbleServer::ServerUpdatingAuthenticatorPrx uprx =
+ ::MumbleServer::ServerUpdatingAuthenticatorPrx::checkedCast(prx);
mi->setServerAuthenticator(server, prx);
if (uprx)
@@ -968,13 +972,14 @@ static void impl_Server_setAuthenticator(const ::Murmur::AMD_Server_setAuthentic
}
#define ACCESS_Server_id_READ
-static void impl_Server_id(const ::Murmur::AMD_Server_idPtr cb, int server_id) {
+static void impl_Server_id(const ::MumbleServer::AMD_Server_idPtr cb, int server_id) {
NEED_SERVER_EXISTS;
cb->ice_response(server_id);
}
#define ACCESS_Server_getConf_READ
-static void impl_Server_getConf(const ::Murmur::AMD_Server_getConfPtr cb, int server_id, const ::std::string &key) {
+static void impl_Server_getConf(const ::MumbleServer::AMD_Server_getConfPtr cb, int server_id,
+ const ::std::string &key) {
NEED_SERVER_EXISTS;
if (key == "key" || key == "passphrase")
cb->ice_exception(WriteOnlyException());
@@ -983,10 +988,10 @@ static void impl_Server_getConf(const ::Murmur::AMD_Server_getConfPtr cb, int se
}
#define ACCESS_Server_getAllConf_READ
-static void impl_Server_getAllConf(const ::Murmur::AMD_Server_getAllConfPtr cb, int server_id) {
+static void impl_Server_getAllConf(const ::MumbleServer::AMD_Server_getAllConfPtr cb, int server_id) {
NEED_SERVER_EXISTS;
- ::Murmur::ConfigMap cm;
+ ::MumbleServer::ConfigMap cm;
QMap< QString, QString > values = ServerDB::getAllConf(server_id);
QMap< QString, QString >::const_iterator i;
@@ -998,7 +1003,7 @@ static void impl_Server_getAllConf(const ::Murmur::AMD_Server_getAllConfPtr cb,
cb->ice_response(cm);
}
-static void impl_Server_setConf(const ::Murmur::AMD_Server_setConfPtr cb, int server_id, const ::std::string &key,
+static void impl_Server_setConf(const ::MumbleServer::AMD_Server_setConfPtr cb, int server_id, const ::std::string &key,
const ::std::string &value) {
NEED_SERVER_EXISTS;
QString k = u8(key);
@@ -1011,7 +1016,7 @@ static void impl_Server_setConf(const ::Murmur::AMD_Server_setConfPtr cb, int se
cb->ice_response();
}
-static void impl_Server_setSuperuserPassword(const ::Murmur::AMD_Server_setSuperuserPasswordPtr cb, int server_id,
+static void impl_Server_setSuperuserPassword(const ::MumbleServer::AMD_Server_setSuperuserPasswordPtr cb, int server_id,
const ::std::string &pw) {
NEED_SERVER_EXISTS;
ServerDB::setSUPW(server_id, u8(pw));
@@ -1019,14 +1024,15 @@ static void impl_Server_setSuperuserPassword(const ::Murmur::AMD_Server_setSuper
}
#define ACCESS_Server_getLog_READ
-static void impl_Server_getLog(const ::Murmur::AMD_Server_getLogPtr cb, int server_id, ::Ice::Int min, ::Ice::Int max) {
+static void impl_Server_getLog(const ::MumbleServer::AMD_Server_getLogPtr cb, int server_id, ::Ice::Int min,
+ ::Ice::Int max) {
NEED_SERVER_EXISTS;
- ::Murmur::LogList ll;
+ ::MumbleServer::LogList ll;
QList< ServerDB::LogRecord > dblog = ServerDB::getLog(server_id, min, max);
foreach (const ServerDB::LogRecord &e, dblog) {
- ::Murmur::LogEntry le;
+ ::MumbleServer::LogEntry le;
logToLog(e, le);
ll.push_back(le);
}
@@ -1034,7 +1040,7 @@ static void impl_Server_getLog(const ::Murmur::AMD_Server_getLogPtr cb, int serv
}
#define ACCESS_Server_getLogLen_READ
-static void impl_Server_getLogLen(const ::Murmur::AMD_Server_getLogLenPtr cb, int server_id) {
+static void impl_Server_getLogLen(const ::MumbleServer::AMD_Server_getLogLenPtr cb, int server_id) {
NEED_SERVER_EXISTS;
int len = ServerDB::getLogLen(server_id);
@@ -1042,11 +1048,11 @@ static void impl_Server_getLogLen(const ::Murmur::AMD_Server_getLogLenPtr cb, in
}
#define ACCESS_Server_getUsers_READ
-static void impl_Server_getUsers(const ::Murmur::AMD_Server_getUsersPtr cb, int server_id) {
+static void impl_Server_getUsers(const ::MumbleServer::AMD_Server_getUsersPtr cb, int server_id) {
NEED_SERVER;
- ::Murmur::UserMap pm;
+ ::MumbleServer::UserMap pm;
foreach (const ::User *p, server->qhUsers) {
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
if (static_cast< const ServerUser * >(p)->sState == ::ServerUser::Authenticated) {
userToUser(p, mp);
pm[p->uiSession] = mp;
@@ -1056,11 +1062,11 @@ static void impl_Server_getUsers(const ::Murmur::AMD_Server_getUsersPtr cb, int
}
#define ACCESS_Server_getChannels_READ
-static void impl_Server_getChannels(const ::Murmur::AMD_Server_getChannelsPtr cb, int server_id) {
+static void impl_Server_getChannels(const ::MumbleServer::AMD_Server_getChannelsPtr cb, int server_id) {
NEED_SERVER;
- ::Murmur::ChannelMap cm;
+ ::MumbleServer::ChannelMap cm;
foreach (const ::Channel *c, server->qhChannels) {
- ::Murmur::Channel mc;
+ ::MumbleServer::Channel mc;
channelToChannel(c, mc);
cm[c->iId] = mc;
}
@@ -1082,7 +1088,7 @@ TreePtr recurseTree(const ::Channel *c) {
std::sort(users.begin(), users.end(), userSort);
foreach (const ::User *p, users) {
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(p, mp);
t->users.push_back(mp);
}
@@ -1096,24 +1102,24 @@ TreePtr recurseTree(const ::Channel *c) {
}
#define ACCESS_Server_getTree_READ
-static void impl_Server_getTree(const ::Murmur::AMD_Server_getTreePtr cb, int server_id) {
+static void impl_Server_getTree(const ::MumbleServer::AMD_Server_getTreePtr cb, int server_id) {
NEED_SERVER;
cb->ice_response(recurseTree(server->qhChannels.value(0)));
}
#define ACCESS_Server_getCertificateList_READ
-static void impl_Server_getCertificateList(const ::Murmur::AMD_Server_getCertificateListPtr cb, int server_id,
+static void impl_Server_getCertificateList(const ::MumbleServer::AMD_Server_getCertificateListPtr cb, int server_id,
::Ice::Int session) {
NEED_SERVER;
NEED_PLAYER;
- ::Murmur::CertificateList certs;
+ ::MumbleServer::CertificateList certs;
const QList< QSslCertificate > &certlist = user->peerCertificateChain();
certs.resize(certlist.size());
for (int i = 0; i < certlist.size(); ++i) {
- ::Murmur::CertificateDer der;
+ ::MumbleServer::CertificateDer der;
QByteArray qba = certlist.at(i).toDer();
der.resize(qba.size());
const char *ptr = qba.constData();
@@ -1125,24 +1131,24 @@ static void impl_Server_getCertificateList(const ::Murmur::AMD_Server_getCertifi
}
#define ACCESS_Server_getBans_READ
-static void impl_Server_getBans(const ::Murmur::AMD_Server_getBansPtr cb, int server_id) {
+static void impl_Server_getBans(const ::MumbleServer::AMD_Server_getBansPtr cb, int server_id) {
NEED_SERVER;
- ::Murmur::BanList bl;
+ ::MumbleServer::BanList bl;
foreach (const ::Ban &ban, server->qlBans) {
- ::Murmur::Ban mb;
+ ::MumbleServer::Ban mb;
banToBan(ban, mb);
bl.push_back(mb);
}
cb->ice_response(bl);
}
-static void impl_Server_setBans(const ::Murmur::AMD_Server_setBansPtr cb, int server_id,
- const ::Murmur::BanList &bans) {
+static void impl_Server_setBans(const ::MumbleServer::AMD_Server_setBansPtr cb, int server_id,
+ const ::MumbleServer::BanList &bans) {
NEED_SERVER;
{
QWriteLocker wl(&server->qrwlVoiceThread);
server->qlBans.clear();
- foreach (const ::Murmur::Ban &mb, bans) {
+ foreach (const ::MumbleServer::Ban &mb, bans) {
::Ban ban;
banToBan(mb, ban);
server->qlBans << ban;
@@ -1154,7 +1160,7 @@ static void impl_Server_setBans(const ::Murmur::AMD_Server_setBansPtr cb, int se
cb->ice_response();
}
-static void impl_Server_kickUser(const ::Murmur::AMD_Server_kickUserPtr cb, int server_id, ::Ice::Int session,
+static void impl_Server_kickUser(const ::MumbleServer::AMD_Server_kickUserPtr cb, int server_id, ::Ice::Int session,
const ::std::string &reason) {
NEED_SERVER;
NEED_PLAYER;
@@ -1167,8 +1173,8 @@ static void impl_Server_kickUser(const ::Murmur::AMD_Server_kickUserPtr cb, int
cb->ice_response();
}
-static void impl_Server_sendMessage(const ::Murmur::AMD_Server_sendMessagePtr cb, int server_id, ::Ice::Int session,
- const ::std::string &text) {
+static void impl_Server_sendMessage(const ::MumbleServer::AMD_Server_sendMessagePtr cb, int server_id,
+ ::Ice::Int session, const ::std::string &text) {
NEED_SERVER;
NEED_PLAYER;
@@ -1177,8 +1183,8 @@ static void impl_Server_sendMessage(const ::Murmur::AMD_Server_sendMessagePtr cb
}
#define ACCESS_Server_hasPermission_READ
-static void impl_Server_hasPermission(const ::Murmur::AMD_Server_hasPermissionPtr cb, int server_id, ::Ice::Int session,
- ::Ice::Int channelid, ::Ice::Int perm) {
+static void impl_Server_hasPermission(const ::MumbleServer::AMD_Server_hasPermissionPtr cb, int server_id,
+ ::Ice::Int session, ::Ice::Int channelid, ::Ice::Int perm) {
NEED_SERVER;
NEED_PLAYER;
NEED_CHANNEL;
@@ -1186,7 +1192,7 @@ static void impl_Server_hasPermission(const ::Murmur::AMD_Server_hasPermissionPt
}
#define ACCESS_Server_effectivePermissions_READ
-static void impl_Server_effectivePermissions(const ::Murmur::AMD_Server_effectivePermissionsPtr cb, int server_id,
+static void impl_Server_effectivePermissions(const ::MumbleServer::AMD_Server_effectivePermissionsPtr cb, int server_id,
::Ice::Int session, ::Ice::Int channelid) {
NEED_SERVER;
NEED_PLAYER;
@@ -1194,13 +1200,14 @@ static void impl_Server_effectivePermissions(const ::Murmur::AMD_Server_effectiv
cb->ice_response(server->effectivePermissions(user, channel));
}
-static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCallbackPtr cb, int server_id,
+static void impl_Server_addContextCallback(const MumbleServer::AMD_Server_addContextCallbackPtr cb, int server_id,
::Ice::Int session, const ::std::string &action, const ::std::string &text,
- const ::Murmur::ServerContextCallbackPrx &cbptr, int ctx) {
+ const ::MumbleServer::ServerContextCallbackPrx &cbptr, int ctx) {
NEED_SERVER;
NEED_PLAYER;
- const QMap< QString, ::Murmur::ServerContextCallbackPrx > &qmPrx = mi->getServerContextCallbacks(server)[session];
+ const QMap< QString, ::MumbleServer::ServerContextCallbackPrx > &qmPrx =
+ mi->getServerContextCallbacks(server)[session];
if (!(ctx
& (MumbleProto::ContextActionModify_Context_Server | MumbleProto::ContextActionModify_Context_Channel
@@ -1210,7 +1217,7 @@ static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCa
}
try {
- const Murmur::ServerContextCallbackPrx &oneway = Murmur::ServerContextCallbackPrx::checkedCast(
+ const MumbleServer::ServerContextCallbackPrx &oneway = MumbleServer::ServerContextCallbackPrx::checkedCast(
cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
if (qmPrx.contains(u8(action))) {
// Since the server has no notion of the ctx part of the context action
@@ -1235,20 +1242,20 @@ static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCa
server->sendMessage(user, mpcam);
}
-static void impl_Server_removeContextCallback(const Murmur::AMD_Server_removeContextCallbackPtr cb, int server_id,
- const Murmur::ServerContextCallbackPrx &cbptr) {
+static void impl_Server_removeContextCallback(const MumbleServer::AMD_Server_removeContextCallbackPtr cb, int server_id,
+ const MumbleServer::ServerContextCallbackPrx &cbptr) {
NEED_SERVER;
- const QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > > &qmPrx =
+ const QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > > &qmPrx =
mi->getServerContextCallbacks(server);
try {
- const Murmur::ServerContextCallbackPrx &oneway = Murmur::ServerContextCallbackPrx::uncheckedCast(
+ const MumbleServer::ServerContextCallbackPrx &oneway = MumbleServer::ServerContextCallbackPrx::uncheckedCast(
cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
foreach (int session, qmPrx.keys()) {
- ServerUser *user = server->qhUsers.value(session);
- const QMap< QString, ::Murmur::ServerContextCallbackPrx > &qm = qmPrx[session];
+ ServerUser *user = server->qhUsers.value(session);
+ const QMap< QString, ::MumbleServer::ServerContextCallbackPrx > &qm = qmPrx[session];
foreach (const QString &act, qm.keys(oneway)) {
mi->removeServerContextCallback(server, session, act);
@@ -1269,17 +1276,17 @@ static void impl_Server_removeContextCallback(const Murmur::AMD_Server_removeCon
}
#define ACCESS_Server_getState_READ
-static void impl_Server_getState(const ::Murmur::AMD_Server_getStatePtr cb, int server_id, ::Ice::Int session) {
+static void impl_Server_getState(const ::MumbleServer::AMD_Server_getStatePtr cb, int server_id, ::Ice::Int session) {
NEED_SERVER;
NEED_PLAYER;
- ::Murmur::User mp;
+ ::MumbleServer::User mp;
userToUser(user, mp);
cb->ice_response(mp);
}
-static void impl_Server_setState(const ::Murmur::AMD_Server_setStatePtr cb, int server_id,
- const ::Murmur::User &state) {
+static void impl_Server_setState(const ::MumbleServer::AMD_Server_setStatePtr cb, int server_id,
+ const ::MumbleServer::User &state) {
int session = state.session;
::Channel *channel;
NEED_SERVER;
@@ -1291,7 +1298,7 @@ static void impl_Server_setState(const ::Murmur::AMD_Server_setStatePtr cb, int
cb->ice_response();
}
-static void impl_Server_sendMessageChannel(const ::Murmur::AMD_Server_sendMessageChannelPtr cb, int server_id,
+static void impl_Server_sendMessageChannel(const ::MumbleServer::AMD_Server_sendMessageChannelPtr cb, int server_id,
::Ice::Int channelid, bool tree, const ::std::string &text) {
NEED_SERVER;
NEED_CHANNEL;
@@ -1301,18 +1308,18 @@ static void impl_Server_sendMessageChannel(const ::Murmur::AMD_Server_sendMessag
}
#define ACCESS_Server_getChannelState_READ
-static void impl_Server_getChannelState(const ::Murmur::AMD_Server_getChannelStatePtr cb, int server_id,
+static void impl_Server_getChannelState(const ::MumbleServer::AMD_Server_getChannelStatePtr cb, int server_id,
::Ice::Int channelid) {
NEED_SERVER;
NEED_CHANNEL;
- ::Murmur::Channel mc;
+ ::MumbleServer::Channel mc;
channelToChannel(channel, mc);
cb->ice_response(mc);
}
-static void impl_Server_setChannelState(const ::Murmur::AMD_Server_setChannelStatePtr cb, int server_id,
- const ::Murmur::Channel &state) {
+static void impl_Server_setChannelState(const ::MumbleServer::AMD_Server_setChannelStatePtr cb, int server_id,
+ const ::MumbleServer::Channel &state) {
int channelid = state.id;
NEED_SERVER;
NEED_CHANNEL;
@@ -1331,37 +1338,37 @@ static void impl_Server_setChannelState(const ::Murmur::AMD_Server_setChannelSta
}
if (!server->canNest(np, channel)) {
- cb->ice_exception(::Murmur::NestingLimitException());
+ cb->ice_exception(::MumbleServer::NestingLimitException());
return;
}
if (!server->setChannelState(channel, np, qsName, newset, u8(state.description), state.position))
- cb->ice_exception(::Murmur::InvalidChannelException());
+ cb->ice_exception(::MumbleServer::InvalidChannelException());
else
cb->ice_response();
}
-static void impl_Server_removeChannel(const ::Murmur::AMD_Server_removeChannelPtr cb, int server_id,
+static void impl_Server_removeChannel(const ::MumbleServer::AMD_Server_removeChannelPtr cb, int server_id,
::Ice::Int channelid) {
NEED_SERVER;
NEED_CHANNEL;
if (!channel->cParent) {
- cb->ice_exception(::Murmur::InvalidChannelException());
+ cb->ice_exception(::MumbleServer::InvalidChannelException());
} else {
server->removeChannel(channel);
cb->ice_response();
}
}
-static void impl_Server_addChannel(const ::Murmur::AMD_Server_addChannelPtr cb, int server_id,
+static void impl_Server_addChannel(const ::MumbleServer::AMD_Server_addChannelPtr cb, int server_id,
const ::std::string &name, ::Ice::Int parent) {
NEED_SERVER;
::Channel *p, *nc;
NEED_CHANNEL_VAR(p, parent);
if (!server->canNest(p)) {
- cb->ice_exception(::Murmur::NestingLimitException());
+ cb->ice_exception(::MumbleServer::NestingLimitException());
return;
}
@@ -1382,12 +1389,12 @@ static void impl_Server_addChannel(const ::Murmur::AMD_Server_addChannelPtr cb,
}
#define ACCESS_Server_getACL_READ
-static void impl_Server_getACL(const ::Murmur::AMD_Server_getACLPtr cb, int server_id, ::Ice::Int channelid) {
+static void impl_Server_getACL(const ::MumbleServer::AMD_Server_getACLPtr cb, int server_id, ::Ice::Int channelid) {
NEED_SERVER;
NEED_CHANNEL;
- ::Murmur::ACLList acls;
- ::Murmur::GroupList groups;
+ ::MumbleServer::ACLList acls;
+ ::MumbleServer::GroupList groups;
QStack<::Channel * > chans;
::Channel *p;
@@ -1407,7 +1414,7 @@ static void impl_Server_getACL(const ::Murmur::AMD_Server_getACLPtr cb, int serv
p = chans.pop();
foreach (acl, p->qlACL) {
if ((p == channel) || (acl->bApplySubs)) {
- ::Murmur::ACL ma;
+ ::MumbleServer::ACL ma;
ACLtoACL(acl, ma);
if (p != channel)
ma.inherited = true;
@@ -1423,7 +1430,7 @@ static void impl_Server_getACL(const ::Murmur::AMD_Server_getACLPtr cb, int serv
::Group *pg = p ? ::Group::getGroup(p, name) : nullptr;
if (!g && !pg)
continue;
- ::Murmur::Group mg;
+ ::MumbleServer::Group mg;
groupToGroup(g ? g : pg, mg);
QSet< int > members;
if (pg)
@@ -1448,8 +1455,9 @@ static void impl_Server_getACL(const ::Murmur::AMD_Server_getACLPtr cb, int serv
cb->ice_response(acls, groups, inherit);
}
-static void impl_Server_setACL(const ::Murmur::AMD_Server_setACLPtr cb, int server_id, ::Ice::Int channelid,
- const ::Murmur::ACLList &acls, const ::Murmur::GroupList &groups, bool inherit) {
+static void impl_Server_setACL(const ::MumbleServer::AMD_Server_setACLPtr cb, int server_id, ::Ice::Int channelid,
+ const ::MumbleServer::ACLList &acls, const ::MumbleServer::GroupList &groups,
+ bool inherit) {
NEED_SERVER;
NEED_CHANNEL;
@@ -1471,7 +1479,7 @@ static void impl_Server_setACL(const ::Murmur::AMD_Server_setACLPtr cb, int serv
channel->qlACL.clear();
channel->bInheritACL = inherit;
- foreach (const ::Murmur::Group &gi, groups) {
+ foreach (const ::MumbleServer::Group &gi, groups) {
QString name = u8(gi.name);
g = new ::Group(channel, name);
g->bInherit = gi.inherit;
@@ -1489,7 +1497,7 @@ static void impl_Server_setACL(const ::Murmur::AMD_Server_setACLPtr cb, int serv
#endif
g->qsTemporary = hOldTemp.value(name);
}
- foreach (const ::Murmur::ACL &ai, acls) {
+ foreach (const ::MumbleServer::ACL &ai, acls) {
acl = new ChanACL(channel);
acl->bApplyHere = ai.applyHere;
acl->bApplySubs = ai.applySubs;
@@ -1506,19 +1514,19 @@ static void impl_Server_setACL(const ::Murmur::AMD_Server_setACLPtr cb, int serv
}
#define ACCESS_Server_getUserNames_READ
-static void impl_Server_getUserNames(const ::Murmur::AMD_Server_getUserNamesPtr cb, int server_id,
- const ::Murmur::IdList &ids) {
+static void impl_Server_getUserNames(const ::MumbleServer::AMD_Server_getUserNamesPtr cb, int server_id,
+ const ::MumbleServer::IdList &ids) {
NEED_SERVER;
- ::Murmur::NameMap nm;
+ ::MumbleServer::NameMap nm;
foreach (int userid, ids) { nm[userid] = iceString(server->getUserName(userid)); }
cb->ice_response(nm);
}
#define ACCESS_Server_getUserIds_READ
-static void impl_Server_getUserIds(const ::Murmur::AMD_Server_getUserIdsPtr cb, int server_id,
- const ::Murmur::NameList &names) {
+static void impl_Server_getUserIds(const ::MumbleServer::AMD_Server_getUserIdsPtr cb, int server_id,
+ const ::MumbleServer::NameList &names) {
NEED_SERVER;
- ::Murmur::IdMap im;
+ ::MumbleServer::IdMap im;
foreach (const string &n, names) {
QString name = u8(n);
im[n] = server->getUserID(name);
@@ -1526,8 +1534,8 @@ static void impl_Server_getUserIds(const ::Murmur::AMD_Server_getUserIdsPtr cb,
cb->ice_response(im);
}
-static void impl_Server_registerUser(const ::Murmur::AMD_Server_registerUserPtr cb, int server_id,
- const ::Murmur::UserInfoMap &im) {
+static void impl_Server_registerUser(const ::MumbleServer::AMD_Server_registerUserPtr cb, int server_id,
+ const ::MumbleServer::UserInfoMap &im) {
NEED_SERVER;
QMap< int, QString > info;
@@ -1541,7 +1549,7 @@ static void impl_Server_registerUser(const ::Murmur::AMD_Server_registerUserPtr
cb->ice_response(userid);
}
-static void impl_Server_unregisterUser(const ::Murmur::AMD_Server_unregisterUserPtr cb, int server_id,
+static void impl_Server_unregisterUser(const ::MumbleServer::AMD_Server_unregisterUserPtr cb, int server_id,
::Ice::Int userid) {
NEED_SERVER;
@@ -1554,8 +1562,8 @@ static void impl_Server_unregisterUser(const ::Murmur::AMD_Server_unregisterUser
}
}
-static void impl_Server_updateRegistration(const ::Murmur::AMD_Server_updateRegistrationPtr cb, int server_id, int id,
- const ::Murmur::UserInfoMap &im) {
+static void impl_Server_updateRegistration(const ::MumbleServer::AMD_Server_updateRegistrationPtr cb, int server_id,
+ int id, const ::MumbleServer::UserInfoMap &im) {
NEED_SERVER;
if (!server->isUserId(id)) {
@@ -1583,7 +1591,7 @@ static void impl_Server_updateRegistration(const ::Murmur::AMD_Server_updateRegi
}
#define ACCESS_Server_getRegistration_READ
-static void impl_Server_getRegistration(const ::Murmur::AMD_Server_getRegistrationPtr cb, int server_id,
+static void impl_Server_getRegistration(const ::MumbleServer::AMD_Server_getRegistrationPtr cb, int server_id,
::Ice::Int userid) {
NEED_SERVER;
@@ -1594,16 +1602,16 @@ static void impl_Server_getRegistration(const ::Murmur::AMD_Server_getRegistrati
return;
}
- Murmur::UserInfoMap im;
+ MumbleServer::UserInfoMap im;
infoToInfo(info, im);
cb->ice_response(im);
}
#define ACCESS_Server_getRegisteredUsers_READ
-static void impl_Server_getRegisteredUsers(const ::Murmur::AMD_Server_getRegisteredUsersPtr cb, int server_id,
+static void impl_Server_getRegisteredUsers(const ::MumbleServer::AMD_Server_getRegisteredUsersPtr cb, int server_id,
const ::std::string &filter) {
NEED_SERVER;
- Murmur::NameMap rpl;
+ MumbleServer::NameMap rpl;
const QMap< int, QString > l = server->getRegisteredUsers(u8(filter));
QMap< int, QString >::const_iterator i;
@@ -1615,7 +1623,7 @@ static void impl_Server_getRegisteredUsers(const ::Murmur::AMD_Server_getRegiste
}
#define ACCESS_Server_verifyPassword_READ
-static void impl_Server_verifyPassword(const ::Murmur::AMD_Server_verifyPasswordPtr cb, int server_id,
+static void impl_Server_verifyPassword(const ::MumbleServer::AMD_Server_verifyPasswordPtr cb, int server_id,
const ::std::string &name, const ::std::string &pw) {
NEED_SERVER;
QString uname = u8(name);
@@ -1623,7 +1631,8 @@ static void impl_Server_verifyPassword(const ::Murmur::AMD_Server_verifyPassword
}
#define ACCESS_Server_getTexture_READ
-static void impl_Server_getTexture(const ::Murmur::AMD_Server_getTexturePtr cb, int server_id, ::Ice::Int userid) {
+static void impl_Server_getTexture(const ::MumbleServer::AMD_Server_getTexturePtr cb, int server_id,
+ ::Ice::Int userid) {
NEED_SERVER;
if (!server->isUserId(userid)) {
@@ -1633,7 +1642,7 @@ static void impl_Server_getTexture(const ::Murmur::AMD_Server_getTexturePtr cb,
const QByteArray &qba = server->getUserTexture(userid);
- ::Murmur::Texture tex;
+ ::MumbleServer::Texture tex;
tex.resize(qba.size());
const char *ptr = qba.constData();
for (int i = 0; i < qba.size(); ++i)
@@ -1642,8 +1651,8 @@ static void impl_Server_getTexture(const ::Murmur::AMD_Server_getTexturePtr cb,
cb->ice_response(tex);
}
-static void impl_Server_setTexture(const ::Murmur::AMD_Server_setTexturePtr cb, int server_id, ::Ice::Int userid,
- const ::Murmur::Texture &tex) {
+static void impl_Server_setTexture(const ::MumbleServer::AMD_Server_setTexturePtr cb, int server_id, ::Ice::Int userid,
+ const ::MumbleServer::Texture &tex) {
NEED_SERVER;
if (!server->isUserId(userid)) {
@@ -1678,12 +1687,12 @@ static void impl_Server_setTexture(const ::Murmur::AMD_Server_setTexturePtr cb,
}
#define ACCESS_Server_getUptime_READ
-static void impl_Server_getUptime(const ::Murmur::AMD_Server_getUptimePtr cb, int server_id) {
+static void impl_Server_getUptime(const ::MumbleServer::AMD_Server_getUptimePtr cb, int server_id) {
NEED_SERVER;
cb->ice_response(static_cast< int >(server->tUptime.elapsed() / 1000000LL));
}
-static void impl_Server_updateCertificate(const ::Murmur::AMD_Server_updateCertificatePtr cb, int server_id,
+static void impl_Server_updateCertificate(const ::MumbleServer::AMD_Server_updateCertificatePtr cb, int server_id,
const ::std::string &certificate, const ::std::string &privateKey,
const ::std::string &passphrase) {
NEED_SERVER;
@@ -1730,8 +1739,8 @@ static void impl_Server_updateCertificate(const ::Murmur::AMD_Server_updateCerti
cb->ice_response();
}
-static void impl_Server_startListening(const ::Murmur::AMD_Server_startListeningPtr cb, int server_id, int session,
- int channelid) {
+static void impl_Server_startListening(const ::MumbleServer::AMD_Server_startListeningPtr cb, int server_id,
+ int session, int channelid) {
NEED_SERVER;
NEED_CHANNEL;
NEED_PLAYER;
@@ -1741,7 +1750,7 @@ static void impl_Server_startListening(const ::Murmur::AMD_Server_startListening
cb->ice_response();
}
-static void impl_Server_stopListening(const ::Murmur::AMD_Server_stopListeningPtr cb, int server_id, int session,
+static void impl_Server_stopListening(const ::MumbleServer::AMD_Server_stopListeningPtr cb, int server_id, int session,
int channelid) {
NEED_SERVER;
NEED_CHANNEL;
@@ -1752,7 +1761,7 @@ static void impl_Server_stopListening(const ::Murmur::AMD_Server_stopListeningPt
cb->ice_response();
}
-static void impl_Server_isListening(const ::Murmur::AMD_Server_isListeningPtr cb, int server_id, int session,
+static void impl_Server_isListening(const ::MumbleServer::AMD_Server_isListeningPtr cb, int server_id, int session,
int channelid) {
NEED_SERVER;
NEED_CHANNEL;
@@ -1761,12 +1770,12 @@ static void impl_Server_isListening(const ::Murmur::AMD_Server_isListeningPtr cb
cb->ice_response(server->m_channelListenerManager.isListening(user->uiSession, channel->iId));
}
-static void impl_Server_getListeningChannels(const ::Murmur::AMD_Server_getListeningChannelsPtr cb, int server_id,
+static void impl_Server_getListeningChannels(const ::MumbleServer::AMD_Server_getListeningChannelsPtr cb, int server_id,
int session) {
NEED_SERVER;
NEED_PLAYER;
- ::Murmur::IntList channelIDs;
+ ::MumbleServer::IntList channelIDs;
foreach (int currentChannelID, server->m_channelListenerManager.getListenedChannelsForUser(user->uiSession)) {
channelIDs.push_back(currentChannelID);
}
@@ -1774,12 +1783,12 @@ static void impl_Server_getListeningChannels(const ::Murmur::AMD_Server_getListe
cb->ice_response(channelIDs);
}
-static void impl_Server_getListeningUsers(const ::Murmur::AMD_Server_getListeningUsersPtr cb, int server_id,
+static void impl_Server_getListeningUsers(const ::MumbleServer::AMD_Server_getListeningUsersPtr cb, int server_id,
int channelid) {
NEED_SERVER;
NEED_CHANNEL;
- ::Murmur::IntList userSessions;
+ ::MumbleServer::IntList userSessions;
foreach (unsigned int currentSession, server->m_channelListenerManager.getListenersForChannel(channel->iId)) {
userSessions.push_back(currentSession);
}
@@ -1787,8 +1796,8 @@ static void impl_Server_getListeningUsers(const ::Murmur::AMD_Server_getListenin
cb->ice_response(userSessions);
}
-static void impl_Server_sendWelcomeMessage(const ::Murmur::AMD_Server_sendWelcomeMessagePtr cb, int server_id,
- ::Murmur::IdList receiverUserIDs) {
+static void impl_Server_sendWelcomeMessage(const ::MumbleServer::AMD_Server_sendWelcomeMessagePtr cb, int server_id,
+ ::MumbleServer::IdList receiverUserIDs) {
NEED_SERVER;
for (unsigned int session : receiverUserIDs) {
@@ -1800,7 +1809,7 @@ static void impl_Server_sendWelcomeMessage(const ::Murmur::AMD_Server_sendWelcom
cb->ice_response();
}
-static void impl_Server_addUserToGroup(const ::Murmur::AMD_Server_addUserToGroupPtr cb, int server_id,
+static void impl_Server_addUserToGroup(const ::MumbleServer::AMD_Server_addUserToGroupPtr cb, int server_id,
::Ice::Int channelid, ::Ice::Int session, const ::std::string &group) {
NEED_SERVER;
NEED_PLAYER;
@@ -1827,7 +1836,7 @@ static void impl_Server_addUserToGroup(const ::Murmur::AMD_Server_addUserToGroup
cb->ice_response();
}
-static void impl_Server_removeUserFromGroup(const ::Murmur::AMD_Server_removeUserFromGroupPtr cb, int server_id,
+static void impl_Server_removeUserFromGroup(const ::MumbleServer::AMD_Server_removeUserFromGroupPtr cb, int server_id,
::Ice::Int channelid, ::Ice::Int session, const ::std::string &group) {
NEED_SERVER;
NEED_PLAYER;
@@ -1854,7 +1863,7 @@ static void impl_Server_removeUserFromGroup(const ::Murmur::AMD_Server_removeUse
cb->ice_response();
}
-static void impl_Server_redirectWhisperGroup(const ::Murmur::AMD_Server_redirectWhisperGroupPtr cb, int server_id,
+static void impl_Server_redirectWhisperGroup(const ::MumbleServer::AMD_Server_redirectWhisperGroupPtr cb, int server_id,
::Ice::Int session, const ::std::string &source,
const ::std::string &target) {
NEED_SERVER;
@@ -1878,12 +1887,13 @@ static void impl_Server_redirectWhisperGroup(const ::Murmur::AMD_Server_redirect
}
#define ACCESS_Meta_getSliceChecksums_ALL
-static void impl_Meta_getSliceChecksums(const ::Murmur::AMD_Meta_getSliceChecksumsPtr cb, const Ice::ObjectAdapterPtr) {
+static void impl_Meta_getSliceChecksums(const ::MumbleServer::AMD_Meta_getSliceChecksumsPtr cb,
+ const Ice::ObjectAdapterPtr) {
cb->ice_response(::Ice::sliceChecksums());
}
#define ACCESS_Meta_getServer_READ
-static void impl_Meta_getServer(const ::Murmur::AMD_Meta_getServerPtr cb, const Ice::ObjectAdapterPtr adapter,
+static void impl_Meta_getServer(const ::MumbleServer::AMD_Meta_getServerPtr cb, const Ice::ObjectAdapterPtr adapter,
::Ice::Int id) {
QList< int > server_list = ServerDB::getAllServers();
if (!server_list.contains(id))
@@ -1892,13 +1902,14 @@ static void impl_Meta_getServer(const ::Murmur::AMD_Meta_getServerPtr cb, const
cb->ice_response(idToProxy(id, adapter));
}
-static void impl_Meta_newServer(const ::Murmur::AMD_Meta_newServerPtr cb, const Ice::ObjectAdapterPtr adapter) {
+static void impl_Meta_newServer(const ::MumbleServer::AMD_Meta_newServerPtr cb, const Ice::ObjectAdapterPtr adapter) {
cb->ice_response(idToProxy(ServerDB::addServer(), adapter));
}
#define ACCESS_Meta_getAllServers_READ
-static void impl_Meta_getAllServers(const ::Murmur::AMD_Meta_getAllServersPtr cb, const Ice::ObjectAdapterPtr adapter) {
- ::Murmur::ServerList sl;
+static void impl_Meta_getAllServers(const ::MumbleServer::AMD_Meta_getAllServersPtr cb,
+ const Ice::ObjectAdapterPtr adapter) {
+ ::MumbleServer::ServerList sl;
foreach (int id, ServerDB::getAllServers())
sl.push_back(idToProxy(id, adapter));
@@ -1906,8 +1917,8 @@ static void impl_Meta_getAllServers(const ::Murmur::AMD_Meta_getAllServersPtr cb
}
#define ACCESS_Meta_getDefaultConf_READ
-static void impl_Meta_getDefaultConf(const ::Murmur::AMD_Meta_getDefaultConfPtr cb, const Ice::ObjectAdapterPtr) {
- ::Murmur::ConfigMap cm;
+static void impl_Meta_getDefaultConf(const ::MumbleServer::AMD_Meta_getDefaultConfPtr cb, const Ice::ObjectAdapterPtr) {
+ ::MumbleServer::ConfigMap cm;
QMap< QString, QString >::const_iterator i;
for (i = meta->mp.qmConfig.constBegin(); i != meta->mp.qmConfig.constEnd(); ++i) {
if (i.key() == "key" || i.key() == "passphrase")
@@ -1918,9 +1929,9 @@ static void impl_Meta_getDefaultConf(const ::Murmur::AMD_Meta_getDefaultConfPtr
}
#define ACCESS_Meta_getBootedServers_READ
-static void impl_Meta_getBootedServers(const ::Murmur::AMD_Meta_getBootedServersPtr cb,
+static void impl_Meta_getBootedServers(const ::MumbleServer::AMD_Meta_getBootedServersPtr cb,
const Ice::ObjectAdapterPtr adapter) {
- ::Murmur::ServerList sl;
+ ::MumbleServer::ServerList sl;
foreach (int id, meta->qhServers.keys())
sl.push_back(idToProxy(id, adapter));
@@ -1928,18 +1939,18 @@ static void impl_Meta_getBootedServers(const ::Murmur::AMD_Meta_getBootedServers
}
#define ACCESS_Meta_getVersion_ALL
-static void impl_Meta_getVersion(const ::Murmur::AMD_Meta_getVersionPtr cb, const Ice::ObjectAdapterPtr) {
+static void impl_Meta_getVersion(const ::MumbleServer::AMD_Meta_getVersionPtr cb, const Ice::ObjectAdapterPtr) {
Version::component_t major, minor, patch;
QString txt;
::Meta::getVersion(major, minor, patch, txt);
cb->ice_response(major, minor, patch, iceString(txt));
}
-static void impl_Meta_addCallback(const Murmur::AMD_Meta_addCallbackPtr cb, const Ice::ObjectAdapterPtr,
- const Murmur::MetaCallbackPrx &cbptr) {
+static void impl_Meta_addCallback(const MumbleServer::AMD_Meta_addCallbackPtr cb, const Ice::ObjectAdapterPtr,
+ const MumbleServer::MetaCallbackPrx &cbptr) {
try {
- const Murmur::MetaCallbackPrx &oneway =
- Murmur::MetaCallbackPrx::checkedCast(cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
+ const MumbleServer::MetaCallbackPrx &oneway = MumbleServer::MetaCallbackPrx::checkedCast(
+ cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
mi->addMetaCallback(oneway);
cb->ice_response();
} catch (...) {
@@ -1947,11 +1958,11 @@ static void impl_Meta_addCallback(const Murmur::AMD_Meta_addCallbackPtr cb, cons
}
}
-static void impl_Meta_removeCallback(const Murmur::AMD_Meta_removeCallbackPtr cb, const Ice::ObjectAdapterPtr,
- const Murmur::MetaCallbackPrx &cbptr) {
+static void impl_Meta_removeCallback(const MumbleServer::AMD_Meta_removeCallbackPtr cb, const Ice::ObjectAdapterPtr,
+ const MumbleServer::MetaCallbackPrx &cbptr) {
try {
- const Murmur::MetaCallbackPrx &oneway =
- Murmur::MetaCallbackPrx::uncheckedCast(cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
+ const MumbleServer::MetaCallbackPrx &oneway = MumbleServer::MetaCallbackPrx::uncheckedCast(
+ cbptr->ice_oneway()->ice_connectionCached(false)->ice_timeout(5000));
mi->removeMetaCallback(oneway);
cb->ice_response();
} catch (...) {
@@ -1960,11 +1971,11 @@ static void impl_Meta_removeCallback(const Murmur::AMD_Meta_removeCallbackPtr cb
}
#define ACCESS_Meta_getUptime_ALL
-static void impl_Meta_getUptime(const ::Murmur::AMD_Meta_getUptimePtr cb, const Ice::ObjectAdapterPtr) {
+static void impl_Meta_getUptime(const ::MumbleServer::AMD_Meta_getUptimePtr cb, const Ice::ObjectAdapterPtr) {
cb->ice_response(static_cast< int >(meta->tUptime.elapsed() / 1000000LL));
}
-#include "MurmurIceWrapper.cpp"
+#include "MumbleServerIceWrapper.cpp"
#undef FIND_SERVER
#undef NEED_SERVER_EXISTS
diff --git a/src/murmur/MurmurIce.h b/src/murmur/MumbleServerIce.h
index 80c954cd7..d8e6e520e 100644
--- a/src/murmur/MurmurIce.h
+++ b/src/murmur/MumbleServerIce.h
@@ -3,32 +3,31 @@
// that can be found in the LICENSE file at the root of the
// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-#ifdef USE_ICE
-# ifndef MUMBLE_MURMUR_MURMURICE_H_
-# define MUMBLE_MURMUR_MURMURICE_H_
+#ifndef MUMBLE_MURMUR_MURMURICE_H_
+#define MUMBLE_MURMUR_MURMURICE_H_
-# include <QtCore/QtGlobal>
+#include <QtCore/QtGlobal>
-# if defined(Q_OS_WIN) && !defined(WIN32_LEAN_AND_MEAN)
+#if defined(Q_OS_WIN) && !defined(WIN32_LEAN_AND_MEAN)
// To prevent <windows.h> (included by Ice) from including <winsock.h>.
-# define WIN32_LEAN_AND_MEAN
-# endif
+# define WIN32_LEAN_AND_MEAN
+#endif
-# include <QtCore/QList>
-# include <QtCore/QMap>
-# include <QtCore/QMutex>
-# include <QtCore/QObject>
-# include <QtCore/QWaitCondition>
-# include <QtNetwork/QSslCertificate>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QMutex>
+#include <QtCore/QObject>
+#include <QtCore/QWaitCondition>
+#include <QtNetwork/QSslCertificate>
-# include "MurmurI.h"
+#include "MumbleServerI.h"
class Channel;
class Server;
class User;
struct TextMessage;
-class MurmurIce : public QObject {
+class MumbleServerIce : public QObject {
friend class MurmurLocker;
Q_OBJECT;
@@ -37,36 +36,37 @@ protected:
QMutex qmEvent;
QWaitCondition qwcEvent;
void customEvent(QEvent *evt);
- void badMetaProxy(const ::Murmur::MetaCallbackPrx &prx);
- void badServerProxy(const ::Murmur::ServerCallbackPrx &prx, const ::Server *server);
+ void badMetaProxy(const ::MumbleServer::MetaCallbackPrx &prx);
+ void badServerProxy(const ::MumbleServer::ServerCallbackPrx &prx, const ::Server *server);
void badAuthenticator(::Server *);
- QList<::Murmur::MetaCallbackPrx > qlMetaCallbacks;
- QMap< int, QList<::Murmur::ServerCallbackPrx > > qmServerCallbacks;
- QMap< int, QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > > > qmServerContextCallbacks;
- QMap< int, ::Murmur::ServerAuthenticatorPrx > qmServerAuthenticator;
- QMap< int, ::Murmur::ServerUpdatingAuthenticatorPrx > qmServerUpdatingAuthenticator;
+ QList<::MumbleServer::MetaCallbackPrx > qlMetaCallbacks;
+ QMap< int, QList<::MumbleServer::ServerCallbackPrx > > qmServerCallbacks;
+ QMap< int, QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > > > qmServerContextCallbacks;
+ QMap< int, ::MumbleServer::ServerAuthenticatorPrx > qmServerAuthenticator;
+ QMap< int, ::MumbleServer::ServerUpdatingAuthenticatorPrx > qmServerUpdatingAuthenticator;
public:
Ice::CommunicatorPtr communicator;
Ice::ObjectAdapterPtr adapter;
- MurmurIce();
- ~MurmurIce();
+ MumbleServerIce();
+ ~MumbleServerIce();
- void addMetaCallback(const ::Murmur::MetaCallbackPrx &prx);
- void removeMetaCallback(const ::Murmur::MetaCallbackPrx &prx);
- void addServerCallback(const ::Server *server, const ::Murmur::ServerCallbackPrx &prx);
- void removeServerCallback(const ::Server *server, const ::Murmur::ServerCallbackPrx &prx);
+ void addMetaCallback(const ::MumbleServer::MetaCallbackPrx &prx);
+ void removeMetaCallback(const ::MumbleServer::MetaCallbackPrx &prx);
+ void addServerCallback(const ::Server *server, const ::MumbleServer::ServerCallbackPrx &prx);
+ void removeServerCallback(const ::Server *server, const ::MumbleServer::ServerCallbackPrx &prx);
void removeServerCallbacks(const ::Server *server);
void addServerContextCallback(const ::Server *server, int session_id, const QString &action,
- const ::Murmur::ServerContextCallbackPrx &prx);
- const QMap< int, QMap< QString, ::Murmur::ServerContextCallbackPrx > >
+ const ::MumbleServer::ServerContextCallbackPrx &prx);
+ const QMap< int, QMap< QString, ::MumbleServer::ServerContextCallbackPrx > >
getServerContextCallbacks(const ::Server *server) const;
void removeServerContextCallback(const ::Server *server, int session_id, const QString &action);
- void setServerAuthenticator(const ::Server *server, const ::Murmur::ServerAuthenticatorPrx &prx);
- const ::Murmur::ServerAuthenticatorPrx getServerAuthenticator(const ::Server *server) const;
+ void setServerAuthenticator(const ::Server *server, const ::MumbleServer::ServerAuthenticatorPrx &prx);
+ const ::MumbleServer::ServerAuthenticatorPrx getServerAuthenticator(const ::Server *server) const;
void removeServerAuthenticator(const ::Server *server);
- void setServerUpdatingAuthenticator(const ::Server *server, const ::Murmur::ServerUpdatingAuthenticatorPrx &prx);
- const ::Murmur::ServerUpdatingAuthenticatorPrx getServerUpdatingAuthenticator(const ::Server *server) const;
+ void setServerUpdatingAuthenticator(const ::Server *server,
+ const ::MumbleServer::ServerUpdatingAuthenticatorPrx &prx);
+ const ::MumbleServer::ServerUpdatingAuthenticatorPrx getServerUpdatingAuthenticator(const ::Server *server) const;
void removeServerUpdatingAuthenticator(const ::Server *server);
public slots:
@@ -96,5 +96,4 @@ public slots:
void contextAction(const User *, const QString &, unsigned int, int);
};
-# endif
#endif
diff --git a/src/murmur/MurmurI.h b/src/murmur/MurmurI.h
deleted file mode 100644
index 0990362ec..000000000
--- a/src/murmur/MurmurI.h
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2008-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-#ifndef MUMBLE_MURMUR_MURMURI_H_
-#define MUMBLE_MURMUR_MURMURI_H_
-
-#include <Murmur.h>
-
-namespace Murmur {
-
-class ServerI : virtual public Server {
-public:
- virtual void isRunning_async(const ::Murmur::AMD_Server_isRunningPtr &, const Ice::Current &);
-
- virtual void start_async(const ::Murmur::AMD_Server_startPtr &, const Ice::Current &);
-
- virtual void stop_async(const ::Murmur::AMD_Server_stopPtr &, const Ice::Current &);
-
- virtual void delete_async(const ::Murmur::AMD_Server_deletePtr &, const Ice::Current &);
-
- virtual void addCallback_async(const ::Murmur::AMD_Server_addCallbackPtr &, const ::Murmur::ServerCallbackPrx &,
- const ::Ice::Current &);
- virtual void removeCallback_async(const ::Murmur::AMD_Server_removeCallbackPtr &,
- const ::Murmur::ServerCallbackPrx &, const ::Ice::Current &);
-
- virtual void setAuthenticator_async(const ::Murmur::AMD_Server_setAuthenticatorPtr &,
- const ::Murmur::ServerAuthenticatorPrx &, const ::Ice::Current &);
-
- virtual void id_async(const ::Murmur::AMD_Server_idPtr &, const Ice::Current &);
-
- virtual void getConf_async(const ::Murmur::AMD_Server_getConfPtr &, const ::std::string &, const Ice::Current &);
-
- virtual void getAllConf_async(const ::Murmur::AMD_Server_getAllConfPtr &, const Ice::Current &);
-
- virtual void setConf_async(const ::Murmur::AMD_Server_setConfPtr &, const ::std::string &, const ::std::string &,
- const Ice::Current &);
-
- virtual void setSuperuserPassword_async(const ::Murmur::AMD_Server_setSuperuserPasswordPtr &, const ::std::string &,
- const Ice::Current &);
-
- virtual void getLog_async(const ::Murmur::AMD_Server_getLogPtr &, ::Ice::Int, ::Ice::Int, const Ice::Current &);
-
- virtual void getLogLen_async(const ::Murmur::AMD_Server_getLogLenPtr &, const Ice::Current &);
-
- virtual void getUsers_async(const ::Murmur::AMD_Server_getUsersPtr &, const Ice::Current &);
-
- virtual void getChannels_async(const ::Murmur::AMD_Server_getChannelsPtr &, const Ice::Current &);
-
- virtual void getTree_async(const ::Murmur::AMD_Server_getTreePtr &, const Ice::Current &);
-
- virtual void getCertificateList_async(const ::Murmur::AMD_Server_getCertificateListPtr &, ::Ice::Int,
- const ::Ice::Current &);
-
- virtual void getBans_async(const ::Murmur::AMD_Server_getBansPtr &, const Ice::Current &);
-
- virtual void setBans_async(const ::Murmur::AMD_Server_setBansPtr &, const ::Murmur::BanList &,
- const Ice::Current &);
-
- virtual void kickUser_async(const ::Murmur::AMD_Server_kickUserPtr &, ::Ice::Int, const ::std::string &,
- const Ice::Current &);
-
- virtual void sendMessage_async(const ::Murmur::AMD_Server_sendMessagePtr &, ::Ice::Int, const ::std::string &,
- const Ice::Current &);
-
- virtual void hasPermission_async(const ::Murmur::AMD_Server_hasPermissionPtr &, ::Ice::Int, ::Ice::Int, ::Ice::Int,
- const ::Ice::Current &);
- virtual void effectivePermissions_async(const ::Murmur::AMD_Server_effectivePermissionsPtr &, ::Ice::Int,
- ::Ice::Int, const ::Ice::Current &);
-
- virtual void addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr &, ::Ice::Int,
- const ::std::string &, const ::std::string &,
- const ::Murmur::ServerContextCallbackPrx &, int, const ::Ice::Current &);
- virtual void removeContextCallback_async(const ::Murmur::AMD_Server_removeContextCallbackPtr &,
- const ::Murmur::ServerContextCallbackPrx &, const ::Ice::Current &);
-
- virtual void getState_async(const ::Murmur::AMD_Server_getStatePtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void setState_async(const ::Murmur::AMD_Server_setStatePtr &, const ::Murmur::User &, const Ice::Current &);
-
- virtual void getChannelState_async(const ::Murmur::AMD_Server_getChannelStatePtr &, ::Ice::Int,
- const Ice::Current &);
-
- virtual void setChannelState_async(const ::Murmur::AMD_Server_setChannelStatePtr &, const ::Murmur::Channel &,
- const Ice::Current &);
-
- virtual void removeChannel_async(const ::Murmur::AMD_Server_removeChannelPtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void addChannel_async(const ::Murmur::AMD_Server_addChannelPtr &, const ::std::string &, ::Ice::Int,
- const Ice::Current &);
-
- virtual void sendMessageChannel_async(const ::Murmur::AMD_Server_sendMessageChannelPtr &, ::Ice::Int, bool,
- const ::std::string &, const Ice::Current &);
-
- virtual void getACL_async(const ::Murmur::AMD_Server_getACLPtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void setACL_async(const ::Murmur::AMD_Server_setACLPtr &, ::Ice::Int, const ::Murmur::ACLList &,
- const ::Murmur::GroupList &, bool, const Ice::Current &);
-
- virtual void removeUserFromGroup_async(const ::Murmur::AMD_Server_removeUserFromGroupPtr &, ::Ice::Int, ::Ice::Int,
- const ::std::string &, const ::Ice::Current &);
-
- virtual void addUserToGroup_async(const ::Murmur::AMD_Server_addUserToGroupPtr &, ::Ice::Int, ::Ice::Int,
- const ::std::string &, const ::Ice::Current &);
-
- virtual void redirectWhisperGroup_async(const ::Murmur::AMD_Server_redirectWhisperGroupPtr &, ::Ice::Int,
- const ::std::string &, const ::std::string &, const ::Ice::Current &);
-
- virtual void getUserNames_async(const ::Murmur::AMD_Server_getUserNamesPtr &, const ::Murmur::IdList &,
- const Ice::Current &);
-
- virtual void getUserIds_async(const ::Murmur::AMD_Server_getUserIdsPtr &, const ::Murmur::NameList &,
- const Ice::Current &);
-
- virtual void registerUser_async(const ::Murmur::AMD_Server_registerUserPtr &, const Murmur::UserInfoMap &,
- const Ice::Current &);
-
- virtual void unregisterUser_async(const ::Murmur::AMD_Server_unregisterUserPtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void updateRegistration_async(const ::Murmur::AMD_Server_updateRegistrationPtr &, Ice::Int,
- const Murmur::UserInfoMap &, const Ice::Current &);
-
- virtual void getRegistration_async(const ::Murmur::AMD_Server_getRegistrationPtr &, ::Ice::Int,
- const Ice::Current &);
-
- virtual void getRegisteredUsers_async(const ::Murmur::AMD_Server_getRegisteredUsersPtr &, const ::std::string &,
- const Ice::Current &);
-
- virtual void verifyPassword_async(const ::Murmur::AMD_Server_verifyPasswordPtr &, const ::std::string &,
- const ::std::string &, const Ice::Current &);
-
- virtual void getTexture_async(const ::Murmur::AMD_Server_getTexturePtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void setTexture_async(const ::Murmur::AMD_Server_setTexturePtr &, ::Ice::Int, const ::Murmur::Texture &,
- const Ice::Current &);
-
- virtual void getUptime_async(const ::Murmur::AMD_Server_getUptimePtr &, const Ice::Current &);
-
- virtual void updateCertificate_async(const ::Murmur::AMD_Server_updateCertificatePtr &, const std::string &,
- const std::string &, const std::string &, const Ice::Current &);
-
- virtual void startListening_async(const ::Murmur::AMD_Server_startListeningPtr &, ::Ice::Int, ::Ice::Int,
- const Ice::Current &);
-
- virtual void stopListening_async(const ::Murmur::AMD_Server_stopListeningPtr &, ::Ice::Int, ::Ice::Int,
- const Ice::Current &);
-
- virtual void isListening_async(const ::Murmur::AMD_Server_isListeningPtr &, ::Ice::Int, ::Ice::Int,
- const Ice::Current &);
-
- virtual void getListeningChannels_async(const ::Murmur::AMD_Server_getListeningChannelsPtr &, ::Ice::Int,
- const Ice::Current &);
-
- virtual void getListeningUsers_async(const ::Murmur::AMD_Server_getListeningUsersPtr &, ::Ice::Int,
- const Ice::Current &);
-
- virtual void sendWelcomeMessage_async(const ::Murmur::AMD_Server_sendWelcomeMessagePtr &,
- const ::Murmur::IdList &p1, const ::Ice::Current &current);
-
- virtual void ice_ping(const Ice::Current &) const;
-};
-
-class MetaI : virtual public Meta {
-public:
- virtual void getSliceChecksums_async(const ::Murmur::AMD_Meta_getSliceChecksumsPtr &, const ::Ice::Current &);
-
- virtual void getServer_async(const ::Murmur::AMD_Meta_getServerPtr &, ::Ice::Int, const Ice::Current &);
-
- virtual void newServer_async(const ::Murmur::AMD_Meta_newServerPtr &, const Ice::Current &);
-
- virtual void getBootedServers_async(const ::Murmur::AMD_Meta_getBootedServersPtr &, const Ice::Current &);
-
- virtual void getAllServers_async(const ::Murmur::AMD_Meta_getAllServersPtr &, const Ice::Current &);
-
- virtual void getDefaultConf_async(const ::Murmur::AMD_Meta_getDefaultConfPtr &, const Ice::Current &);
-
- virtual void getVersion_async(const ::Murmur::AMD_Meta_getVersionPtr &, const Ice::Current &);
-
-
- virtual void addCallback_async(const ::Murmur::AMD_Meta_addCallbackPtr &, const ::Murmur::MetaCallbackPrx &,
- const ::Ice::Current & = ::Ice::Current());
- virtual void removeCallback_async(const ::Murmur::AMD_Meta_removeCallbackPtr &, const ::Murmur::MetaCallbackPrx &,
- const ::Ice::Current & = ::Ice::Current());
-
- virtual void getUptime_async(const ::Murmur::AMD_Meta_getUptimePtr &, const Ice::Current &);
-
- virtual void getSlice_async(const ::Murmur::AMD_Meta_getSlicePtr &, const Ice::Current &);
-};
-
-} // namespace Murmur
-
-#endif
diff --git a/src/murmur/MurmurIceWrapper.cpp b/src/murmur/MurmurIceWrapper.cpp
deleted file mode 100644
index d98a489df..000000000
--- a/src/murmur/MurmurIceWrapper.cpp
+++ /dev/null
@@ -1,2356 +0,0 @@
-// Copyright 2008-2022 The Mumble Developers. All rights reserved.
-// Use of this source code is governed by a BSD-style license
-// that can be found in the LICENSE file at the root of the
-// Mumble source tree or at <https://www.mumble.info/LICENSE>.
-
-// This file was auto-generated by scripts/generateIceWrapper.py on 2021-03-01 -- DO NOT EDIT MANUALLY!
-
-#include <boost/bind/bind.hpp>
-
-void ::Murmur::ServerI::isRunning_async(const ::Murmur::AMD_Server_isRunningPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "isRunning" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_isRunning_ALL
-# ifdef ACCESS_Server_isRunning_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_isRunning_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_isRunning_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_isRunning_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_isRunning_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_isRunning, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::start_async(const ::Murmur::AMD_Server_startPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "start" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_start_ALL
-# ifdef ACCESS_Server_start_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_start_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_start_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_start_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_start_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Server_start, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::stop_async(const ::Murmur::AMD_Server_stopPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "stop" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_stop_ALL
-# ifdef ACCESS_Server_stop_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_stop_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_stop_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_stop_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_stop_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Server_stop, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::delete_async(const ::Murmur::AMD_Server_deletePtr &cb, const ::Ice::Current &current) {
- // qWarning() << "delete" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_delete_ALL
-# ifdef ACCESS_Server_delete_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_delete_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_delete_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_delete_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_delete_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_delete, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::id_async(const ::Murmur::AMD_Server_idPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "id" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_id_ALL
-# ifdef ACCESS_Server_id_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_id_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_id_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_id_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_id_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Server_id, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::addCallback_async(const ::Murmur::AMD_Server_addCallbackPtr &cb, const ServerCallbackPrx &p1,
- const ::Ice::Current &current) {
- // qWarning() << "addCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_addCallback_ALL
-# ifdef ACCESS_Server_addCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_addCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_addCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_addCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_addCallback_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_addCallback, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::removeCallback_async(const ::Murmur::AMD_Server_removeCallbackPtr &cb,
- const ServerCallbackPrx &p1, const ::Ice::Current &current) {
- // qWarning() << "removeCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_removeCallback_ALL
-# ifdef ACCESS_Server_removeCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_removeCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_removeCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_removeCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_removeCallback_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_removeCallback, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setAuthenticator_async(const ::Murmur::AMD_Server_setAuthenticatorPtr &cb,
- const ServerAuthenticatorPrx &p1, const ::Ice::Current &current) {
- // qWarning() << "setAuthenticator" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setAuthenticator_ALL
-# ifdef ACCESS_Server_setAuthenticator_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setAuthenticator_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setAuthenticator_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setAuthenticator_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setAuthenticator_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_setAuthenticator, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getConf_async(const ::Murmur::AMD_Server_getConfPtr &cb, const ::std::string &p1,
- const ::Ice::Current &current) {
- // qWarning() << "getConf" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getConf_ALL
-# ifdef ACCESS_Server_getConf_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getConf_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getConf_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getConf_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getConf_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getConf, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getAllConf_async(const ::Murmur::AMD_Server_getAllConfPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getAllConf" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getAllConf_ALL
-# ifdef ACCESS_Server_getAllConf_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getAllConf_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getAllConf_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getAllConf_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getAllConf_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getAllConf, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setConf_async(const ::Murmur::AMD_Server_setConfPtr &cb, const ::std::string &p1,
- const ::std::string &p2, const ::Ice::Current &current) {
- // qWarning() << "setConf" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setConf_ALL
-# ifdef ACCESS_Server_setConf_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setConf_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setConf_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setConf_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setConf_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_setConf, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setSuperuserPassword_async(const ::Murmur::AMD_Server_setSuperuserPasswordPtr &cb,
- const ::std::string &p1, const ::Ice::Current &current) {
- // qWarning() << "setSuperuserPassword" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setSuperuserPassword_ALL
-# ifdef ACCESS_Server_setSuperuserPassword_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setSuperuserPassword_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setSuperuserPassword_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setSuperuserPassword_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setSuperuserPassword_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_setSuperuserPassword, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getLog_async(const ::Murmur::AMD_Server_getLogPtr &cb, ::Ice::Int p1, ::Ice::Int p2,
- const ::Ice::Current &current) {
- // qWarning() << "getLog" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getLog_ALL
-# ifdef ACCESS_Server_getLog_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getLog_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getLog_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getLog_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getLog_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getLog, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getLogLen_async(const ::Murmur::AMD_Server_getLogLenPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getLogLen" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getLogLen_ALL
-# ifdef ACCESS_Server_getLogLen_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getLogLen_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getLogLen_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getLogLen_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getLogLen_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getLogLen, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getUsers_async(const ::Murmur::AMD_Server_getUsersPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getUsers" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getUsers_ALL
-# ifdef ACCESS_Server_getUsers_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getUsers_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getUsers_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getUsers_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getUsers_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getUsers, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getChannels_async(const ::Murmur::AMD_Server_getChannelsPtr &cb,
- const ::Ice::Current &current) {
- // qWarning() << "getChannels" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getChannels_ALL
-# ifdef ACCESS_Server_getChannels_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getChannels_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getChannels_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getChannels_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getChannels_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getChannels, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getCertificateList_async(const ::Murmur::AMD_Server_getCertificateListPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getCertificateList" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getCertificateList_ALL
-# ifdef ACCESS_Server_getCertificateList_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getCertificateList_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getCertificateList_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getCertificateList_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getCertificateList_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getCertificateList, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getTree_async(const ::Murmur::AMD_Server_getTreePtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getTree" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getTree_ALL
-# ifdef ACCESS_Server_getTree_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getTree_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getTree_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getTree_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getTree_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getTree, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getBans_async(const ::Murmur::AMD_Server_getBansPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getBans" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getBans_ALL
-# ifdef ACCESS_Server_getBans_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getBans_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getBans_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getBans_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getBans_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getBans, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setBans_async(const ::Murmur::AMD_Server_setBansPtr &cb, const BanList &p1,
- const ::Ice::Current &current) {
- // qWarning() << "setBans" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setBans_ALL
-# ifdef ACCESS_Server_setBans_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setBans_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setBans_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setBans_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setBans_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_setBans, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::kickUser_async(const ::Murmur::AMD_Server_kickUserPtr &cb, ::Ice::Int p1,
- const ::std::string &p2, const ::Ice::Current &current) {
- // qWarning() << "kickUser" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_kickUser_ALL
-# ifdef ACCESS_Server_kickUser_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_kickUser_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_kickUser_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_kickUser_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_kickUser_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_kickUser, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getState_async(const ::Murmur::AMD_Server_getStatePtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getState" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getState_ALL
-# ifdef ACCESS_Server_getState_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getState_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getState_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getState_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getState_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getState, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setState_async(const ::Murmur::AMD_Server_setStatePtr &cb, const User &p1,
- const ::Ice::Current &current) {
- // qWarning() << "setState" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setState_ALL
-# ifdef ACCESS_Server_setState_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setState_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setState_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setState_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setState_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_setState, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::sendMessage_async(const ::Murmur::AMD_Server_sendMessagePtr &cb, ::Ice::Int p1,
- const ::std::string &p2, const ::Ice::Current &current) {
- // qWarning() << "sendMessage" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_sendMessage_ALL
-# ifdef ACCESS_Server_sendMessage_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_sendMessage_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_sendMessage_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_sendMessage_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_sendMessage_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_sendMessage, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::hasPermission_async(const ::Murmur::AMD_Server_hasPermissionPtr &cb, ::Ice::Int p1,
- ::Ice::Int p2, ::Ice::Int p3, const ::Ice::Current &current) {
- // qWarning() << "hasPermission" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_hasPermission_ALL
-# ifdef ACCESS_Server_hasPermission_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_hasPermission_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_hasPermission_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_hasPermission_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_hasPermission_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_hasPermission, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::effectivePermissions_async(const ::Murmur::AMD_Server_effectivePermissionsPtr &cb,
- ::Ice::Int p1, ::Ice::Int p2, const ::Ice::Current &current) {
- // qWarning() << "effectivePermissions" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_effectivePermissions_ALL
-# ifdef ACCESS_Server_effectivePermissions_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_effectivePermissions_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_effectivePermissions_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_effectivePermissions_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_effectivePermissions_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_effectivePermissions, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr &cb, ::Ice::Int p1,
- const ::std::string &p2, const ::std::string &p3,
- const ServerContextCallbackPrx &p4, ::Ice::Int p5,
- const ::Ice::Current &current) {
- // qWarning() << "addContextCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_addContextCallback_ALL
-# ifdef ACCESS_Server_addContextCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_addContextCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_addContextCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_addContextCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_addContextCallback_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Server_addContextCallback, cb,
- QString::fromStdString(current.id.name).toInt(), p1, p2, p3, p4, p5));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::removeContextCallback_async(const ::Murmur::AMD_Server_removeContextCallbackPtr &cb,
- const ServerContextCallbackPrx &p1, const ::Ice::Current &current) {
- // qWarning() << "removeContextCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_removeContextCallback_ALL
-# ifdef ACCESS_Server_removeContextCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_removeContextCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_removeContextCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_removeContextCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_removeContextCallback_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_removeContextCallback, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getChannelState_async(const ::Murmur::AMD_Server_getChannelStatePtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getChannelState" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getChannelState_ALL
-# ifdef ACCESS_Server_getChannelState_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getChannelState_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getChannelState_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getChannelState_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getChannelState_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getChannelState, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setChannelState_async(const ::Murmur::AMD_Server_setChannelStatePtr &cb, const Channel &p1,
- const ::Ice::Current &current) {
- // qWarning() << "setChannelState" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setChannelState_ALL
-# ifdef ACCESS_Server_setChannelState_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setChannelState_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setChannelState_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setChannelState_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setChannelState_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_setChannelState, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::removeChannel_async(const ::Murmur::AMD_Server_removeChannelPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "removeChannel" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_removeChannel_ALL
-# ifdef ACCESS_Server_removeChannel_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_removeChannel_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_removeChannel_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_removeChannel_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_removeChannel_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_removeChannel, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::addChannel_async(const ::Murmur::AMD_Server_addChannelPtr &cb, const ::std::string &p1,
- ::Ice::Int p2, const ::Ice::Current &current) {
- // qWarning() << "addChannel" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_addChannel_ALL
-# ifdef ACCESS_Server_addChannel_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_addChannel_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_addChannel_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_addChannel_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_addChannel_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_addChannel, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::sendMessageChannel_async(const ::Murmur::AMD_Server_sendMessageChannelPtr &cb, ::Ice::Int p1,
- bool p2, const ::std::string &p3, const ::Ice::Current &current) {
- // qWarning() << "sendMessageChannel" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_sendMessageChannel_ALL
-# ifdef ACCESS_Server_sendMessageChannel_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_sendMessageChannel_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_sendMessageChannel_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_sendMessageChannel_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_sendMessageChannel_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_sendMessageChannel, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getACL_async(const ::Murmur::AMD_Server_getACLPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getACL" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getACL_ALL
-# ifdef ACCESS_Server_getACL_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getACL_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getACL_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getACL_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getACL_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getACL, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setACL_async(const ::Murmur::AMD_Server_setACLPtr &cb, ::Ice::Int p1, const ACLList &p2,
- const GroupList &p3, bool p4, const ::Ice::Current &current) {
- // qWarning() << "setACL" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setACL_ALL
-# ifdef ACCESS_Server_setACL_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setACL_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setACL_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setACL_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setACL_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_setACL, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3, p4));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::addUserToGroup_async(const ::Murmur::AMD_Server_addUserToGroupPtr &cb, ::Ice::Int p1,
- ::Ice::Int p2, const ::std::string &p3, const ::Ice::Current &current) {
- // qWarning() << "addUserToGroup" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_addUserToGroup_ALL
-# ifdef ACCESS_Server_addUserToGroup_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_addUserToGroup_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_addUserToGroup_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_addUserToGroup_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_addUserToGroup_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_addUserToGroup, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::removeUserFromGroup_async(const ::Murmur::AMD_Server_removeUserFromGroupPtr &cb, ::Ice::Int p1,
- ::Ice::Int p2, const ::std::string &p3,
- const ::Ice::Current &current) {
- // qWarning() << "removeUserFromGroup" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_removeUserFromGroup_ALL
-# ifdef ACCESS_Server_removeUserFromGroup_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_removeUserFromGroup_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_removeUserFromGroup_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_removeUserFromGroup_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_removeUserFromGroup_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_removeUserFromGroup, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::redirectWhisperGroup_async(const ::Murmur::AMD_Server_redirectWhisperGroupPtr &cb,
- ::Ice::Int p1, const ::std::string &p2, const ::std::string &p3,
- const ::Ice::Current &current) {
- // qWarning() << "redirectWhisperGroup" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_redirectWhisperGroup_ALL
-# ifdef ACCESS_Server_redirectWhisperGroup_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_redirectWhisperGroup_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_redirectWhisperGroup_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_redirectWhisperGroup_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_redirectWhisperGroup_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Server_redirectWhisperGroup, cb,
- QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getUserNames_async(const ::Murmur::AMD_Server_getUserNamesPtr &cb, const IdList &p1,
- const ::Ice::Current &current) {
- // qWarning() << "getUserNames" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getUserNames_ALL
-# ifdef ACCESS_Server_getUserNames_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getUserNames_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getUserNames_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getUserNames_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getUserNames_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getUserNames, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getUserIds_async(const ::Murmur::AMD_Server_getUserIdsPtr &cb, const NameList &p1,
- const ::Ice::Current &current) {
- // qWarning() << "getUserIds" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getUserIds_ALL
-# ifdef ACCESS_Server_getUserIds_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getUserIds_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getUserIds_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getUserIds_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getUserIds_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getUserIds, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::registerUser_async(const ::Murmur::AMD_Server_registerUserPtr &cb, const UserInfoMap &p1,
- const ::Ice::Current &current) {
- // qWarning() << "registerUser" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_registerUser_ALL
-# ifdef ACCESS_Server_registerUser_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_registerUser_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_registerUser_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_registerUser_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_registerUser_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_registerUser, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::unregisterUser_async(const ::Murmur::AMD_Server_unregisterUserPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "unregisterUser" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_unregisterUser_ALL
-# ifdef ACCESS_Server_unregisterUser_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_unregisterUser_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_unregisterUser_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_unregisterUser_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_unregisterUser_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_unregisterUser, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::updateRegistration_async(const ::Murmur::AMD_Server_updateRegistrationPtr &cb, ::Ice::Int p1,
- const UserInfoMap &p2, const ::Ice::Current &current) {
- // qWarning() << "updateRegistration" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_updateRegistration_ALL
-# ifdef ACCESS_Server_updateRegistration_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_updateRegistration_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_updateRegistration_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_updateRegistration_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_updateRegistration_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_updateRegistration, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getRegistration_async(const ::Murmur::AMD_Server_getRegistrationPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getRegistration" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getRegistration_ALL
-# ifdef ACCESS_Server_getRegistration_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getRegistration_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getRegistration_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getRegistration_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getRegistration_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getRegistration, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getRegisteredUsers_async(const ::Murmur::AMD_Server_getRegisteredUsersPtr &cb,
- const ::std::string &p1, const ::Ice::Current &current) {
- // qWarning() << "getRegisteredUsers" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getRegisteredUsers_ALL
-# ifdef ACCESS_Server_getRegisteredUsers_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getRegisteredUsers_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getRegisteredUsers_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getRegisteredUsers_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getRegisteredUsers_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getRegisteredUsers, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::verifyPassword_async(const ::Murmur::AMD_Server_verifyPasswordPtr &cb, const ::std::string &p1,
- const ::std::string &p2, const ::Ice::Current &current) {
- // qWarning() << "verifyPassword" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_verifyPassword_ALL
-# ifdef ACCESS_Server_verifyPassword_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_verifyPassword_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_verifyPassword_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_verifyPassword_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_verifyPassword_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_verifyPassword, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getTexture_async(const ::Murmur::AMD_Server_getTexturePtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getTexture" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getTexture_ALL
-# ifdef ACCESS_Server_getTexture_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getTexture_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getTexture_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getTexture_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getTexture_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getTexture, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::setTexture_async(const ::Murmur::AMD_Server_setTexturePtr &cb, ::Ice::Int p1, const Texture &p2,
- const ::Ice::Current &current) {
- // qWarning() << "setTexture" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_setTexture_ALL
-# ifdef ACCESS_Server_setTexture_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_setTexture_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_setTexture_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_setTexture_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_setTexture_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_setTexture, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getUptime_async(const ::Murmur::AMD_Server_getUptimePtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getUptime" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getUptime_ALL
-# ifdef ACCESS_Server_getUptime_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getUptime_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getUptime_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getUptime_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getUptime_ALL
-
- ExecEvent *ie =
- new ExecEvent(boost::bind(&impl_Server_getUptime, cb, QString::fromStdString(current.id.name).toInt()));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::updateCertificate_async(const ::Murmur::AMD_Server_updateCertificatePtr &cb,
- const ::std::string &p1, const ::std::string &p2,
- const ::std::string &p3, const ::Ice::Current &current) {
- // qWarning() << "updateCertificate" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_updateCertificate_ALL
-# ifdef ACCESS_Server_updateCertificate_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_updateCertificate_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_updateCertificate_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_updateCertificate_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_updateCertificate_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_updateCertificate, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::startListening_async(const ::Murmur::AMD_Server_startListeningPtr &cb, ::Ice::Int p1,
- ::Ice::Int p2, const ::Ice::Current &current) {
- // qWarning() << "startListening" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_startListening_ALL
-# ifdef ACCESS_Server_startListening_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_startListening_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_startListening_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_startListening_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_startListening_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_startListening, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::stopListening_async(const ::Murmur::AMD_Server_stopListeningPtr &cb, ::Ice::Int p1,
- ::Ice::Int p2, const ::Ice::Current &current) {
- // qWarning() << "stopListening" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_stopListening_ALL
-# ifdef ACCESS_Server_stopListening_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_stopListening_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_stopListening_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_stopListening_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_stopListening_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_stopListening, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::isListening_async(const ::Murmur::AMD_Server_isListeningPtr &cb, ::Ice::Int p1, ::Ice::Int p2,
- const ::Ice::Current &current) {
- // qWarning() << "isListening" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_isListening_ALL
-# ifdef ACCESS_Server_isListening_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_isListening_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_isListening_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_isListening_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_isListening_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_isListening, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getListeningChannels_async(const ::Murmur::AMD_Server_getListeningChannelsPtr &cb,
- ::Ice::Int p1, const ::Ice::Current &current) {
- // qWarning() << "getListeningChannels" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getListeningChannels_ALL
-# ifdef ACCESS_Server_getListeningChannels_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getListeningChannels_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getListeningChannels_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getListeningChannels_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getListeningChannels_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getListeningChannels, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::getListeningUsers_async(const ::Murmur::AMD_Server_getListeningUsersPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getListeningUsers" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_getListeningUsers_ALL
-# ifdef ACCESS_Server_getListeningUsers_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_getListeningUsers_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_getListeningUsers_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_getListeningUsers_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_getListeningUsers_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_getListeningUsers, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::ServerI::sendWelcomeMessage_async(const ::Murmur::AMD_Server_sendWelcomeMessagePtr &cb, const IdList &p1,
- const ::Ice::Current &current) {
- // qWarning() << "sendWelcomeMessage" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Server_sendWelcomeMessage_ALL
-# ifdef ACCESS_Server_sendWelcomeMessage_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Server_sendWelcomeMessage_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Server_sendWelcomeMessage_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Server_sendWelcomeMessage_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Server_sendWelcomeMessage_ALL
-
- ExecEvent *ie = new ExecEvent(
- boost::bind(&impl_Server_sendWelcomeMessage, cb, QString::fromStdString(current.id.name).toInt(), p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getServer_async(const ::Murmur::AMD_Meta_getServerPtr &cb, ::Ice::Int p1,
- const ::Ice::Current &current) {
- // qWarning() << "getServer" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getServer_ALL
-# ifdef ACCESS_Meta_getServer_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getServer_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getServer_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getServer_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getServer_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getServer, cb, current.adapter, p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::newServer_async(const ::Murmur::AMD_Meta_newServerPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "newServer" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_newServer_ALL
-# ifdef ACCESS_Meta_newServer_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_newServer_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_newServer_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_newServer_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_newServer_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_newServer, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getBootedServers_async(const ::Murmur::AMD_Meta_getBootedServersPtr &cb,
- const ::Ice::Current &current) {
- // qWarning() << "getBootedServers" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getBootedServers_ALL
-# ifdef ACCESS_Meta_getBootedServers_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getBootedServers_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getBootedServers_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getBootedServers_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getBootedServers_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getBootedServers, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getAllServers_async(const ::Murmur::AMD_Meta_getAllServersPtr &cb,
- const ::Ice::Current &current) {
- // qWarning() << "getAllServers" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getAllServers_ALL
-# ifdef ACCESS_Meta_getAllServers_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getAllServers_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getAllServers_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getAllServers_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getAllServers_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getAllServers, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getDefaultConf_async(const ::Murmur::AMD_Meta_getDefaultConfPtr &cb,
- const ::Ice::Current &current) {
- // qWarning() << "getDefaultConf" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getDefaultConf_ALL
-# ifdef ACCESS_Meta_getDefaultConf_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getDefaultConf_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getDefaultConf_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getDefaultConf_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getDefaultConf_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getDefaultConf, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getVersion_async(const ::Murmur::AMD_Meta_getVersionPtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getVersion" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getVersion_ALL
-# ifdef ACCESS_Meta_getVersion_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getVersion_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getVersion_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getVersion_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getVersion_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getVersion, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::addCallback_async(const ::Murmur::AMD_Meta_addCallbackPtr &cb, const MetaCallbackPrx &p1,
- const ::Ice::Current &current) {
- // qWarning() << "addCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_addCallback_ALL
-# ifdef ACCESS_Meta_addCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_addCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_addCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_addCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_addCallback_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_addCallback, cb, current.adapter, p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::removeCallback_async(const ::Murmur::AMD_Meta_removeCallbackPtr &cb, const MetaCallbackPrx &p1,
- const ::Ice::Current &current) {
- // qWarning() << "removeCallback" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_removeCallback_ALL
-# ifdef ACCESS_Meta_removeCallback_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_removeCallback_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_removeCallback_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_removeCallback_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_removeCallback_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_removeCallback, cb, current.adapter, p1));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getUptime_async(const ::Murmur::AMD_Meta_getUptimePtr &cb, const ::Ice::Current &current) {
- // qWarning() << "getUptime" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getUptime_ALL
-# ifdef ACCESS_Meta_getUptime_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getUptime_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getUptime_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getUptime_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getUptime_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getUptime, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getSliceChecksums_async(const ::Murmur::AMD_Meta_getSliceChecksumsPtr &cb,
- const ::Ice::Current &current) {
- // qWarning() << "getSliceChecksums" << meta->mp.qsIceSecretRead.isNull() << meta->mp.qsIceSecretRead.isEmpty();
-#ifndef ACCESS_Meta_getSliceChecksums_ALL
-# ifdef ACCESS_Meta_getSliceChecksums_READ
- if (!meta->mp.qsIceSecretRead.isNull()) {
- bool ok = !meta->mp.qsIceSecretRead.isEmpty();
-# else
- if (!meta->mp.qsIceSecretRead.isNull() || !meta->mp.qsIceSecretWrite.isNull()) {
- bool ok = !meta->mp.qsIceSecretWrite.isEmpty();
-# endif // ACCESS_Meta_getSliceChecksums_READ
- ::Ice::Context::const_iterator i = current.ctx.find("secret");
- ok = ok && (i != current.ctx.end());
- if (ok) {
- const QString &secret = u8((*i).second);
-# ifdef ACCESS_Meta_getSliceChecksums_READ
- ok = ((secret == meta->mp.qsIceSecretRead) || (secret == meta->mp.qsIceSecretWrite));
-# else
- ok = (secret == meta->mp.qsIceSecretWrite);
-# endif // ACCESS_Meta_getSliceChecksums_READ
- }
-
- if (!ok) {
- cb->ice_exception(InvalidSecretException());
- return;
- }
- }
-#endif // ACCESS_Meta_getSliceChecksums_ALL
-
- ExecEvent *ie = new ExecEvent(boost::bind(&impl_Meta_getSliceChecksums, cb, current.adapter));
- QCoreApplication::instance()->postEvent(mi, ie);
-}
-
-void ::Murmur::MetaI::getSlice_async(const ::Murmur::AMD_Meta_getSlicePtr &cb, const Ice::Current &) {
- cb->ice_response(std::string(
- "\n\n\n\n#include <Ice/SliceChecksumDict.ice>\nmodule Murmur\n{\n\n[\"python:seq:tuple\"] sequence<byte> "
- "NetAddress;\n\nstruct User {\nint session;\nint userid;\nbool mute;\nbool deaf;\nbool suppress;\nbool "
- "prioritySpeaker;\nbool selfMute;\nbool selfDeaf;\nbool recording;\nint channel;\nstring name;\nint "
- "onlinesecs;\nint bytespersec;\nint version;\nlong version2;\nstring release;\nstring os;\nstring "
- "osversion;\nstring "
- "identity;\nstring context;\nstring comment;\nNetAddress address;\nbool tcponly;\nint idlesecs;\nfloat "
- "udpPing;\nfloat tcpPing;\n};\nsequence<int> IntList;\n\nstruct TextMessage {\nIntList sessions;\nIntList "
- "channels;\nIntList trees;\nstring text;\n};\n\nstruct Channel {\nint id;\nstring name;\nint parent;\nIntList "
- "links;\nstring description;\nbool temporary;\nint position;\n};\n\nstruct Group {\nstring name;\nbool "
- "inherited;\nbool inherit;\nbool inheritable;\nIntList add;\nIntList remove;\nIntList members;\n};\n\nconst "
- "int PermissionWrite = 0x01;\nconst int PermissionTraverse = 0x02;\nconst int PermissionEnter = 0x04;\nconst "
- "int PermissionSpeak = 0x08;\nconst int PermissionWhisper = 0x100;\nconst int PermissionMuteDeafen = "
- "0x10;\nconst int PermissionMove = 0x20;\nconst int PermissionMakeChannel = 0x40;\nconst int "
- "PermissionMakeTempChannel = 0x400;\nconst int PermissionLinkChannel = 0x80;\nconst int PermissionTextMessage "
- "= 0x200;\nconst int PermissionKick = 0x10000;\nconst int PermissionBan = 0x20000;\nconst int "
- "PermissionRegister = 0x40000;\nconst int PermissionRegisterSelf = 0x80000;\nconst int ResetUserContent = "
- "0x100000;\n\nstruct ACL {\nbool applyHere;\nbool applySubs;\nbool inherited;\nint userid;\nstring group;\nint "
- "allow;\nint deny;\n};\n\nstruct Ban {\nNetAddress address;\nint bits;\nstring name;\nstring hash;\nstring "
- "reason;\nint start;\nint duration;\n};\n\nstruct LogEntry {\nint timestamp;\nstring txt;\n};\nclass "
- "Tree;\nsequence<Tree> TreeList;\nenum ChannelInfo { ChannelDescription, ChannelPosition };\nenum UserInfo { "
- "UserName, UserEmail, UserComment, UserHash, UserPassword, UserLastActive, UserKDFIterations "
- "};\ndictionary<int, User> UserMap;\ndictionary<int, Channel> ChannelMap;\nsequence<Channel> "
- "ChannelList;\nsequence<User> UserList;\nsequence<Group> GroupList;\nsequence<ACL> "
- "ACLList;\nsequence<LogEntry> LogList;\nsequence<Ban> BanList;\nsequence<int> IdList;\nsequence<string> "
- "NameList;\ndictionary<int, string> NameMap;\ndictionary<string, int> IdMap;\nsequence<byte> "
- "Texture;\ndictionary<string, string> ConfigMap;\nsequence<string> GroupNameList;\nsequence<byte> "
- "CertificateDer;\nsequence<CertificateDer> CertificateList;\n\ndictionary<UserInfo, string> "
- "UserInfoMap;\n\nclass Tree {\nChannel c;\nTreeList children;\nUserList users;\n};\nexception MurmurException "
- "{};\nexception InvalidSessionException extends MurmurException {};\nexception InvalidChannelException extends "
- "MurmurException {};\nexception InvalidServerException extends MurmurException {};\nexception "
- "ServerBootedException extends MurmurException {};\nexception ServerFailureException extends MurmurException "
- "{};\nexception InvalidUserException extends MurmurException {};\nexception InvalidTextureException extends "
- "MurmurException {};\nexception InvalidCallbackException extends MurmurException {};\nexception "
- "InvalidSecretException extends MurmurException {};\nexception NestingLimitException extends MurmurException "
- "{};\nexception WriteOnlyException extends MurmurException {};\nexception InvalidInputDataException extends "
- "MurmurException {};\n\ninterface ServerCallback {\nidempotent void userConnected(User state);\nidempotent "
- "void userDisconnected(User state);\nidempotent void userStateChanged(User state);\nidempotent void "
- "userTextMessage(User state, TextMessage message);\nidempotent void channelCreated(Channel state);\nidempotent "
- "void channelRemoved(Channel state);\nidempotent void channelStateChanged(Channel state);\n};\n\nconst int "
- "ContextServer = 0x01;\nconst int ContextChannel = 0x02;\nconst int ContextUser = 0x04;\n\ninterface "
- "ServerContextCallback {\nidempotent void contextAction(string action, User usr, int session, int "
- "channelid);\n};\n\ninterface ServerAuthenticator {\nidempotent int authenticate(string name, string pw, "
- "CertificateList certificates, string certhash, bool certstrong, out string newname, out GroupNameList "
- "groups);\n\nidempotent bool getInfo(int id, out UserInfoMap info);\n\nidempotent int nameToId(string "
- "name);\n\nidempotent string idToName(int id);\n\nidempotent Texture idToTexture(int id);\n};\n\ninterface "
- "ServerUpdatingAuthenticator extends ServerAuthenticator {\nint registerUser(UserInfoMap info);\n\nint "
- "unregisterUser(int id);\n\nidempotent NameMap getRegisteredUsers(string filter);\n\nidempotent int "
- "setInfo(int id, UserInfoMap info);\n\nidempotent int setTexture(int id, Texture tex);\n};\n\n[\"amd\"] "
- "interface Server {\nidempotent bool isRunning() throws InvalidSecretException;\n\nvoid start() throws "
- "ServerBootedException, ServerFailureException, InvalidSecretException;\n\nvoid stop() throws "
- "ServerBootedException, InvalidSecretException;\n\nvoid delete() throws ServerBootedException, "
- "InvalidSecretException;\n\nidempotent int id() throws InvalidSecretException;\n\nvoid "
- "addCallback(ServerCallback *cb) throws ServerBootedException, InvalidCallbackException, "
- "InvalidSecretException;\n\nvoid removeCallback(ServerCallback *cb) throws ServerBootedException, "
- "InvalidCallbackException, InvalidSecretException;\n\nvoid setAuthenticator(ServerAuthenticator *auth) throws "
- "ServerBootedException, InvalidCallbackException, InvalidSecretException;\n\nidempotent string getConf(string "
- "key) throws InvalidSecretException, WriteOnlyException;\n\nidempotent ConfigMap getAllConf() throws "
- "InvalidSecretException;\n\nidempotent void setConf(string key, string value) throws "
- "InvalidSecretException;\n\nidempotent void setSuperuserPassword(string pw) throws "
- "InvalidSecretException;\n\nidempotent LogList getLog(int first, int last) throws "
- "InvalidSecretException;\n\nidempotent int getLogLen() throws InvalidSecretException;\n\nidempotent UserMap "
- "getUsers() throws ServerBootedException, InvalidSecretException;\n\nidempotent ChannelMap getChannels() "
- "throws ServerBootedException, InvalidSecretException;\n\nidempotent CertificateList getCertificateList(int "
- "session) throws ServerBootedException, InvalidSessionException, InvalidSecretException;\n\nidempotent Tree "
- "getTree() throws ServerBootedException, InvalidSecretException;\n\nidempotent BanList getBans() throws "
- "ServerBootedException, InvalidSecretException;\n\nidempotent void setBans(BanList bans) throws "
- "ServerBootedException, InvalidSecretException;\n\nvoid kickUser(int session, string reason) throws "
- "ServerBootedException, InvalidSessionException, InvalidSecretException;\n\nidempotent User getState(int "
- "session) throws ServerBootedException, InvalidSessionException, InvalidSecretException;\n\nidempotent void "
- "setState(User state) throws ServerBootedException, InvalidSessionException, InvalidChannelException, "
- "InvalidSecretException;\n\nvoid sendMessage(int session, string text) throws ServerBootedException, "
- "InvalidSessionException, InvalidSecretException;\n\nbool hasPermission(int session, int channelid, int perm) "
- "throws ServerBootedException, InvalidSessionException, InvalidChannelException, "
- "InvalidSecretException;\n\nidempotent int effectivePermissions(int session, int channelid) throws "
- "ServerBootedException, InvalidSessionException, InvalidChannelException, InvalidSecretException;\n\nvoid "
- "addContextCallback(int session, string action, string text, ServerContextCallback *cb, int ctx) throws "
- "ServerBootedException, InvalidCallbackException, InvalidSecretException;\n\nvoid "
- "removeContextCallback(ServerContextCallback *cb) throws ServerBootedException, InvalidCallbackException, "
- "InvalidSecretException;\n\nidempotent Channel getChannelState(int channelid) throws ServerBootedException, "
- "InvalidChannelException, InvalidSecretException;\n\nidempotent void setChannelState(Channel state) throws "
- "ServerBootedException, InvalidChannelException, InvalidSecretException, NestingLimitException;\n\nvoid "
- "removeChannel(int channelid) throws ServerBootedException, InvalidChannelException, "
- "InvalidSecretException;\n\nint addChannel(string name, int parent) throws ServerBootedException, "
- "InvalidChannelException, InvalidSecretException, NestingLimitException;\n\nvoid sendMessageChannel(int "
- "channelid, bool tree, string text) throws ServerBootedException, InvalidChannelException, "
- "InvalidSecretException;\n\nidempotent void getACL(int channelid, out ACLList acls, out GroupList groups, out "
- "bool inherit) throws ServerBootedException, InvalidChannelException, InvalidSecretException;\n\nidempotent "
- "void setACL(int channelid, ACLList acls, GroupList groups, bool inherit) throws ServerBootedException, "
- "InvalidChannelException, InvalidSecretException;\n\nidempotent void addUserToGroup(int channelid, int "
- "session, string group) throws ServerBootedException, InvalidChannelException, InvalidSessionException, "
- "InvalidSecretException;\n\nidempotent void removeUserFromGroup(int channelid, int session, string group) "
- "throws ServerBootedException, InvalidChannelException, InvalidSessionException, "
- "InvalidSecretException;\n\nidempotent void redirectWhisperGroup(int session, string source, string target) "
- "throws ServerBootedException, InvalidSessionException, InvalidSecretException;\n\nidempotent NameMap "
- "getUserNames(IdList ids) throws ServerBootedException, InvalidSecretException;\n\nidempotent IdMap "
- "getUserIds(NameList names) throws ServerBootedException, InvalidSecretException;\n\nint "
- "registerUser(UserInfoMap info) throws ServerBootedException, InvalidUserException, "
- "InvalidSecretException;\n\nvoid unregisterUser(int userid) throws ServerBootedException, "
- "InvalidUserException, InvalidSecretException;\n\nidempotent void updateRegistration(int userid, UserInfoMap "
- "info) throws ServerBootedException, InvalidUserException, InvalidSecretException;\n\nidempotent UserInfoMap "
- "getRegistration(int userid) throws ServerBootedException, InvalidUserException, "
- "InvalidSecretException;\n\nidempotent NameMap getRegisteredUsers(string filter) throws ServerBootedException, "
- "InvalidSecretException;\n\nidempotent int verifyPassword(string name, string pw) throws "
- "ServerBootedException, InvalidSecretException;\n\nidempotent Texture getTexture(int userid) throws "
- "ServerBootedException, InvalidUserException, InvalidSecretException;\n\nidempotent void setTexture(int "
- "userid, Texture tex) throws ServerBootedException, InvalidUserException, InvalidTextureException, "
- "InvalidSecretException;\n\nidempotent int getUptime() throws ServerBootedException, "
- "InvalidSecretException;\n\n idempotent void updateCertificate(string certificate, string privateKey, string "
- "passphrase) throws ServerBootedException, InvalidSecretException, InvalidInputDataException;\n \n idempotent "
- "void startListening(int userid, int channelid);\n \n idempotent void stopListening(int userid, int "
- "channelid);\n \n idempotent bool isListening(int userid, int channelid);\n \n idempotent IntList "
- "getListeningChannels(int userid);\n \n idempotent IntList getListeningUsers(int channelid);\n \n idempotent "
- "void sendWelcomeMessage(IdList receiverUserIDs);\n};\n\ninterface MetaCallback {\nvoid started(Server "
- "*srv);\n\nvoid stopped(Server *srv);\n};\nsequence<Server *> ServerList;\n\n[\"amd\"] interface Meta "
- "{\nidempotent Server *getServer(int id) throws InvalidSecretException;\n\nServer *newServer() throws "
- "InvalidSecretException;\n\nidempotent ServerList getBootedServers() throws "
- "InvalidSecretException;\n\nidempotent ServerList getAllServers() throws InvalidSecretException;\n\nidempotent "
- "ConfigMap getDefaultConf() throws InvalidSecretException;\n\nidempotent void getVersion(out int major, out "
- "int minor, out int patch, out string text);\n\nvoid addCallback(MetaCallback *cb) throws "
- "InvalidCallbackException, InvalidSecretException;\n\nvoid removeCallback(MetaCallback *cb) throws "
- "InvalidCallbackException, InvalidSecretException;\n\nidempotent int getUptime();\n\nidempotent string "
- "getSlice();\n\nidempotent Ice::SliceChecksumDict getSliceChecksums();\n};\n};\n"));
-}
diff --git a/src/murmur/ServerDB.cpp b/src/murmur/ServerDB.cpp
index 95bfbda1e..354dd041e 100644
--- a/src/murmur/ServerDB.cpp
+++ b/src/murmur/ServerDB.cpp
@@ -124,32 +124,33 @@ ServerDB::ServerDB() {
found = db->open();
} else {
QStringList datapaths;
- int i;
datapaths << Meta::mp.qdBasePath.absolutePath();
datapaths << QDir::currentPath();
datapaths << QCoreApplication::instance()->applicationDirPath();
datapaths << QDir::homePath();
- for (i = 0; (i < datapaths.size()) && !found; i++) {
- if (!datapaths[i].isEmpty()) {
- QFile f(datapaths[i] + "/murmur.sqlite");
- if (f.exists()) {
- db->setDatabaseName(f.fileName());
- found = db->open();
- }
- }
- }
-
- if (!found) {
- for (i = 0; (i < datapaths.size()) && !found; i++) {
- if (!datapaths[i].isEmpty()) {
- QFile f(datapaths[i] + "/murmur.sqlite");
- db->setDatabaseName(f.fileName());
- found = db->open();
+ // We use a lambda, so we can easily "break out" of all levels of nested loops using return
+ [&]() {
+ for (bool searchExistingDB : { true, false }) {
+ for (const QString &currentDir : datapaths) {
+ // Prefer "mumble-server.sqlite", but for legacy reasons also keep looking for "murmur.sqlite"
+ for (const QString &currentFilename :
+ { QStringLiteral("mumble-server.sqlite"), QStringLiteral("murmur.sqlite") }) {
+ QFile currentFile(currentDir + "/" + currentFilename);
+
+ if (!searchExistingDB || currentFile.exists()) {
+ db->setDatabaseName(currentFile.fileName());
+
+ if (db->open()) {
+ found = true;
+ return;
+ }
+ }
+ }
}
}
- }
+ }();
}
if (found) {
QFileInfo fi(db->databaseName());
diff --git a/src/murmur/main.cpp b/src/murmur/main.cpp
index c60993555..5b968ba81 100644
--- a/src/murmur/main.cpp
+++ b/src/murmur/main.cpp
@@ -362,7 +362,8 @@ int main(int argc, char **argv) {
ad.exec();
return 0;
#else
- qInfo("%s\n", qPrintable(License::authors()));
+ qInfo("%s\n",
+ "For a list of authors, please see https://github.com/mumble-voip/mumble/graphs/contributors");
return 0;
#endif
} else if (args.at(i) == QLatin1String("-third-party-licenses")
diff --git a/src/tests/TestAudioReceiverBuffer/CMakeLists.txt b/src/tests/TestAudioReceiverBuffer/CMakeLists.txt
index 8509f9e12..a9d9a0558 100644
--- a/src/tests/TestAudioReceiverBuffer/CMakeLists.txt
+++ b/src/tests/TestAudioReceiverBuffer/CMakeLists.txt
@@ -22,10 +22,12 @@ get_filename_component(SOURCE_NAME "${SOURCE_TO_COPY}" NAME)
set(COPIED_HEADER "${CUSTOM_INCLUDE_DIR}/${HEADER_NAME}")
set(COPIED_SOURCE "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_NAME}")
-add_custom_command(OUTPUT "${COPIED_SOURCE}"
+add_custom_command(
+ OUTPUT "${COPIED_SOURCE}"
COMMAND ${CMAKE_COMMAND} -E copy "${HEADER_TO_COPY}" "${COPIED_HEADER}"
COMMAND ${CMAKE_COMMAND} -E copy "${SOURCE_TO_COPY}" "${COPIED_SOURCE}"
DEPENDS "${HEADER_TO_COPY}" "${SOURCE_TO_COPY}"
+ COMMENT "Copying necessary source files"
)
target_sources(TestAudioReceiverBuffer PRIVATE "${COPIED_SOURCE}")