Since LGTM does not provide a recent enough cmake version, it can no
longer build our repository without falling back to the old qmake system
that'll be removed in the future.
Thus we no longer require LGTM to run as CI.
This PR fixes 2 raceconditions that both occur due to the MainWindow::serverDisconnected being able to trigger while certain client-server communication is still happening (unfinished).
The effects of these are
Loss of server-specific shortcuts due to them being saved from emory before having been loaded into it in the first place (due to msgServerSync not having been called yet)
Loss of ChannelListeners due to them being saved before their synchronisation with the server being done (and therefore again not having been loaded into memory yet but being saved from there).
The processing of ChannelListeners was delayed until the next iteration
of the Qt event loop since it was thought that msgServerSync was running
in another thread. Given that this function already accesses the DB,
this can't be though.
Thus the delay is unnecessary and was therefore removed.
As ChannelListeners are only synchronised with the server once
msgServerSync has been received, there is still a racecondition for them
even though we only save them if the ServerSync has happened yet.
The connection could be terminated before the answer of the server for
the request to add the respective listeners reaches the client. In that
case the listeners would be erased by the call to
ChannelListener::saveToDB().
Thus this commit introduces yet another flag indicating whether the
listeners have synchronised with the server yet.
Server-specific shortcuts are read into memory in
MainWindow::msgServerSync and are saved into the DB again in
MainWindow::serverDisconnected.
If however the disconnect function runs before the server
synchronization has finished, the shortcut list in memory is empty and
by writing that into the DB all existing server-specific shortcuts are
lost (overwritten).
This commit adds checks before saving the shortcuts (and
ChannelListeners) so that saving only occurs if the synchronization has
happened before and thus the shortcuts have been loaded in the first
place.
This fixes the loader not being able to load the DLL due to the missing symbol.
Previously, the function was defined and exported only when "QT_NO_DEBUG" was not defined (i.e. release builds).
This was probably the case due to:
- Our old environment not providing debug libraries.
- The DLL + loader idea only making sense when Mumble is installed. See PR #1684 for further info.
Before this commit the MacOS packaging script failed on copying Codecs
if the respective directory already existed (e.g. because the packaging
script has been run before).
Furthermore the script called a function to delete a directory (tree)
on a file. This error never surfaced before because usually when this
script is run, the respective file doesn't exist yet.
Both issues are fixed by this commit. It is now possible to run the
packaging script multiple times consecutively without it erroring on
already existing files.
This feature of AzurePipelines has only been introduced recently.
However it turned out that on average the caching of the environment
takes significantly more time than simply downloading it on every run.
Thus this commit disables environment caching again.
Whe using CONFIG+=no-manual-plugin with the old qmake buildsystem or
-Dmanual-plugin=OFF with the new cmake one, there were compile errors
due to the ManualPlugin being referenced in other files without include
guards.
This commit makes sure that in case the manual plugin is not included,
other code won't reference it either.
Fixes#4422
Whe using CONFIG+=no-manual-plugin with the old qmake buildsystem or
-Dmanual-plugin=OFF with the new cmake one, there were compile errors
due to the ManualPlugin being referenced in other files without include
guards.
This commit makes sure that in case the manual plugin is not included,
other code won't reference it either.
Fixes#4422
This feature of AzurePipelines has only been introduced recently.
However it turned out that on average the caching of the environment
takes significantly more time than simply downloading it on every run.
Thus this commit disables environment caching again.
Commit bdb12c6 added a regression for servers built with QT older than version
5.15. After this commit these servers do not server intermediate certificates
anymore. This happens because the QSslConfiguration is retrieved before adding
the CA certificates to the socket and is reinserted into the socket again after
adding the CA certificates, thereby overwriting the CA certificates added in
between.
This commit fixes that by retrieving the QSslConfiguration just after setting
the CA certificates in case an older QT version than 5.15 is used.
Commit bdb12c6 added a regression for servers built with QT older than version
5.15. After this commit these servers do not serve intermediate certificates
anymore. This happens because the QSslConfiguration is retrieved before adding
the CA certificates to the socket and is reinserted into the socket again after
adding the CA certificates, thereby overwriting the CA certificates added in
between.
This commit fixes that by retrieving the QSslConfiguration just after setting
the CA certificates in case an older QT version than 5.15 is used.
This commit fixes two issues:
1. The installer ignoring Mumble < 1.4.0 installations. This resulted in two separate entries in the installed programs list and a cluttered installation folder.
2. The installer thinking that the product is already installed even if it's a different build.
The first problem was caused by CMAKE_WIX_UPGRADE_GUID being explicitely set to a wrong value, due to an extra line in the file.
The second problem was caused by CMAKE_WIX_PRODUCT_GUID being explicitely set to a static value due to us misunderstanding the "ProjectGuid" variable in the WiX project we used until 1.4.0.
We thought it referred to the MSI product GUID, but instead it's just the MSBuild project identifier.
Also, CMake's WiX documentation clearly says that the installer will abort if it detects a pre-existing installation that uses the same GUID: https://cmake.org/cmake/help/latest/cpack_gen/wix.html#variable:CPACK_WIX_PRODUCT_GUID
This fixes the version appearing as "0.0.0" in builds produced by CI.
We should probably choose a better name for the two defines. Perhaps "MUMBLE_VERSION_SHORT" and "MUMBLE_VERSION_EXTENDED".
Without this change it could happen that get_targets returned
non-compilable targets (e.g. install or uninstall targets) and this
could lead to errors when e.g. trying to set compile options on those
targets.
The dbus config option has been respected in the server's CMakeLists.txt
but the client ignored the option. This is corrected by this commit.
Fixes#4409
Without this change it could happen that get_targets returned
non-compilable targets (e.g. install or uninstall targets) and this
could lead to errors when e.g. trying to set compile options on those
targets.
In order to not be spammed with warnings from 3rdparty projects that we
make use of in Mumble, this commit modifies the respective cmake files
in a way that disables warnings for the respective projects.
In order to not be spammed with warnings from 3rdparty projects that we
make use of in Mumble, this commit modifies the respective cmake files
in a way that disables warnings for the respective projects.
This adds the switch -c/--config to the mumble client. If -c is followed by a filename, this file will be read instead of the standard config.
A new config option database= has been added to the 'General' section of the ini file. This can be used to specify a different database which is necessary to run multiple completely separate Mumble instances at the same time.
Additionaly the (undocumented) function to merge another ini file by providing it as a parameter has been removed as it was conflicting with the added functionality.
FIXES#3953
This adds the switch -c/--config to the mumble client. If -c is
followed by a filename, this file will be read instead of the
standard config. A new config option database= has been added to
the 'General' section of the ini file. This can be used to specify
a different database which is necessary to run multiple completely
separate Mumble instances at the same time.
Additionaly the (undocumented) function to merge another ini file
by providing it as a parameter has been removed as it was
conflicting with the added functionality.
FIXES#3953
Instead of publishing each and every PDB file separately, we now zip
them together into an archive and publish that. That'll reduce the
amount of published files which should make it easier to find what
you're looking for.
As of now the built x86 files overwrite the x64 ones since the x64
build is usually done first but they both produce files of the same
name.
With this commit the build artifacts for x86 and x64 are separated.
Instead of publishing each and every PDB file separately, we now zip
them together into an archive and publish that. That'll reduce the
amount of published files which should make it easier to find what
you're looking for.
As of now the built x86 files overwrite the x64 ones since the x64
build is usually done first but they both produce files of the same
name.
With this commit the build artifacts for x86 and x64 are separated.
If a received UDP is greater than what our allocated buffers can hold,
they are discarded as of now. Previously they have been trimmed down but
the untrimmed size was used in following code which could lead to stack
corruption.
This PR fixes 2 issues in the server's code that have something to do with packet sizes:
1. Make sure poslen <= len in order for len - poslen to never get negative (which can cause trouble down the line)
2. Enforce the maximum package size for packets received via UDPTunnel as well
If a received UDP is greater than what our allocated buffers can hold,
they are discarded as of now. Previously they have been trimmed down but
the untrimmed size was used in following code which could lead to stack
corruption.
The buffer's size for the received UDP packets were magic numbers in the
code. This was refactored so that this size is now only specified once
by storing it in a constant which is then used where needed.
By default Qt sets a timeout of 5 minutes for each test and fails it if
that time is exceeded. On the new 32bit build however our Diffie-Helman
test needs more time and thus we increase the limit to 10 minutes which
seems to be sufficient.