Commit Graph

71 Commits

Author SHA1 Message Date
Robert Adam
8186d1d310 BUILD: Allow to prefer system GSL-installation over bundled one 2022-03-27 09:49:59 +02:00
Robert Adam
1d45d991aa CHANGE: Use Protobuf for UDP messages
Previously Mumble was using a custom binary format for transmitting data
via UDP (mainly audio). This has worked for a long time but besides
being inconvenient for 3rdParty implementors (they had to manually
re-implement encoding and decoding support for this format) this format
was not very flexible and changes to the data format were very hard.

In order to improve on this situation, this commit introduces changes
that allow to use Protobuf for the UDP messages as well (it's already
used for TCP). With that it should be relatively easy to extend/change
the UDP packet formats in the future and 3rdParty implementors can now
simply use Protobuf to handle decoding/encoding packets for them (much
less work and much less prone to errors).

Since the new Protobuf format is incompatible with the old UDP format,
this commit also includes support for dealing with older clients or
servers that don't recognize the new protocol yet. That way the new
protocol format is only used if both the client and the server are
recent enough to have it implemented (assumed to be the case >=1.5.0).

Note also that the server will make sure that clients using the old and
the new format can seamlessly communicate with one another.

Therefore, on the surface it should not be noticeable to the user which
protocol is currently used.

Note also that the new protocol format only supports Opus as an audio
codec. If one of the legacy codecs is to be used, the legacy packet
format has to be used as well. However, all codecs except for Opus will
be removed from Mumble in the future anyway.

Fixes #4350
2022-03-27 09:49:58 +02:00
Robert Adam
b3dd3d3f79 CHANGE(server): Remove gRPC implementation
The gRPC implementation never left the experimental state and never
reached a properly stable state to the point where we would feel good
about enabling it by default. In addition to that, there has been no
further attempts at finding and fixing the encountered issues in the
implementation (except #3947 but that was discontinued).

As such we had an essentially unmaintained piece of code in our server
implementation that was known to be buggy and that nobody wanted to fix.
In addition to that the implementation itself could not be considered
very clean or elegant and therefore only represented a few smelly
corners in our code base.

For this reason, we decided to remove the gRPC support entirely from
Mumble (for now).

What we hope to gain by that is:
- Prevent people from building unstable server versions and then coming
to us complaining that it crashed/misbehaved
- Removing (essentially) dead code
- Reduce the RPC implementation complexity

That last piece is crucial: By removing gRPC support we reduce the
amount of supported RPC frameworks to only one (ignoring DBus for now).
Our future plans include a refactoring of how RPC is being handled and
implemented and only having to worry about maintaining compatibility
with one RPC system is much easier than having to worry about two (with
(slightly) different APIs).
Once the RPC implementation has been rewritten, more RPC backends may be
reintroduced and in that process we might investigate adding a proper
gRPC implementation to the code (that then hopefully is more stable than
the current one).

Fixes #4567
Fixes #4197
Fixes #3496
Fixes #3429
Fixes #3265
2022-03-16 08:23:38 +01:00
Robert Adam
a239ccf623 BUILD(client): Add option to use system JSON lib
This commit introduces an option that toggles between using a bundled
version of nlohmann_json (default) and looking for a version installed
on the system instead.

Fixes #5584
2022-02-25 18:42:53 +01:00
Robert Adam
c06332fcf8
Merge PR #5533: DOCS: Add missing build dependency 2022-02-06 20:43:57 +01:00
Robert Adam
16c814fd57
Merge PR #5490: DOCS: Add FindPythonInterpreter error to common build errors 2022-02-06 18:52:39 +01:00
Begley Brothers (Development)
16abfffbd6 DOCS: Add missing build dependency
Fixes #4631
2022-02-06 18:29:34 +01:00
wabash1
b503b276b4 DOCS: Add FindPythonInterpreter error to common build errors
Found this extremely helpful and had difficulty finding this error.
https://githubmemory.com/repo/mumble-voip/mumble/issues/5120
2022-01-24 08:23:17 +01:00
Robert Adam
1b8f5db332
Merge PR #5500: DOCS: General intro to Mumble's source code 2022-01-23 20:08:53 +01:00
Robert Adam
f07f48fce9 DOCS: General intro to Mumble's source code 2022-01-23 15:14:03 +01:00
Robert Adam
361e1b02f6
Merge PR #5486: BUILD: Build tests in package builds by default
Encourage OS package maintainers to run tests by packaging=ON implying
tests=ON.

Keep online-tests=OFF by default since it is common practise for
packages to be built in unprivileged environments, e.g. without network.
2022-01-23 14:59:55 +01:00
Klemens Nanni
6a621f0a0c BUILD: Build tests in package builds by default
Encourage OS package maintainers to run tests by `packaging=ON` implying
`tests=ON`.

Keep `online-tests=OFF` by default since it is common practise for
packages to be built in unprivileged environments, e.g. without network.
2022-01-21 23:39:00 +03:00
Klemens Nanni
904bae159d BUILD(client): Enable XInput2 support on OpenBSD by default
The library is readily available in OpenBSD's version of X[0].
Follow suit with Linux in enabling.

Noticed by the warning upon startup:

```
-<W>2022-01-21 02:30:40.548 GlobalShortcutX: No XInput support, falling back to polled input. This wastes a lot of CPU resources, so please enable one of the other methods.
+<W>2022-01-21 02:34:00.159 GlobalShortcutX: Using XI2 2.4
```

0: https://xenocara.org/
2022-01-21 22:06:53 +03:00
Brigzzy
223610b21d DOCS: Updated build instructions to remove duplicated step
There's a duplicated step in the build instructions, which is already covered on line 8. This change removes the unneeded duplicate step.
2022-01-18 13:01:14 -08:00
Felix Singer
7e39ae927d DOCS(build): Clean up leftovers from RELEASE_ID concept
The concept of RELEASE_ID was dropped with PR #5401 in commit 6caa808e6.
Thus, drop its leftovers from the documentation.

Signed-off-by: Felix Singer <felixsinger@posteo.net>
2022-01-18 17:28:32 +01:00
Klemens Nanni
d45318d649 BUILD(client): RNNoise: Support linking against the system library
OS packages (at least on Linux and BSDs) prefer prepackaged libraries to
bundled/statically linked versions where possible.

Introduce `rnnoise` (default `ON`) and make `bundled-rnnoise` default to
it's value;  this retains current behaviour.

This way, `rnnoise=OFF` disables use of RNNoise completely and a simple
`bundled-rnnoise=OFF` requires the system's library.

Tested on OpenBSD 7.0-CURRENT.
2022-01-13 09:57:28 +01:00
Robert Adam
afef15dac4 DOCS: Extend build number docs 2022-01-09 19:54:49 +01:00
Robert Adam
ef045be7fe
Merge PR #5400: BUILD: Remove concept of an RELEASE_ID
Having a separate RELEASE_ID just unnecessarily complicates drafting
releases. Plus, now that we are using different build numbers for every
new build anyway, a separate release ID is really not necessary.
2022-01-02 12:12:46 +01:00
Robert Adam
2a31ed0f34 DOCS: Describe how to find build number 2022-01-01 20:38:40 +01:00
Robert Adam
db57b63241
Merge PR #5396: FEAT(server): Add support for the tracy profiler
Tracy (wolfpld/tracy) is a profiler that is aimed at
having a very low impact on the runtime performance and is thus suitable
to be used in production systems to figure out what is going on and how
the code is performing.

For the time being, this commit instruments only the server code.
Furthermore, the instrumentation is performed in a rather minimalistic
way that should suffice to start profiling audio and control message
processing but is definitely far from being complete. Further
instrumentation will be added on-demand.
2021-12-29 18:52:42 +01:00
Robert Adam
dd56e174f2 FEAT(server): Add support for the tracy profiler
Tracy (https://github.com/wolfpld/tracy) is a profiler that is aimed at
having a very low impact on the runtime performance and is thus suitable
to be used in production systems to figure out what is going on and how
the code is performing.

For the time being, this commit instruments only the server code.
Furthermore, the instrumentation is performed in a rather minimalistic
way that should suffice to start profiling audio and control message
processing but is definitely far from being complete. Further
instrumentation will be added on-demand.
2021-12-29 18:01:28 +01:00
Robert Adam
8d83afb07c BUILD: Enable LTO, if supported
In theory LTO could give us a bit more performance than what we are
currently seeing. Client-side this will probably not be very noticeably
but on the server-side a few drops of extra performance can't hurt.

LTO will be enabled by default in all non-Debug builds. It remains
disabled for Debug builds as this is expected to be the kind of build
that a developer will use when they perform their work and there it is
useful to be able to go through multiple iterations of the program,
without waiting long times on the linker each time.
2021-12-26 19:46:54 +01:00
diftucs
6db667a2a3
DOCS(api): Fix typo 2021-11-26 22:45:24 +00:00
Robert Adam
5c4b49210c DOCS: Add common build errors
Co-authored-by: Davide Beatrici <github@davidebeatrici.dev>
2021-09-23 08:14:38 +02:00
Robert Adam
dd37642407 DOCS: Backporting translations 2021-09-06 08:50:32 +02:00
powerjungle
7df44cad39
DOCS(build): Add info about RELEASE_ID 2021-08-28 16:51:13 +02:00
Robert Adam
86e6d2c604 FIX(client): Ambiguity in plugin installer
Previously the plugin installer attempted to select the correct plugin
binary by its file extension but it turns out that this is not a unique
choice (e.g. .so is supported on macOS and on Linux).

Therefore this commit introduces a mandatory manifest file that is to be
present in plugin bundles that contains the mapping for which binary to
use on which OS and for which architecture.

Because a plugin bundle now has to follow such a strict format, it is
now also mandatory for the bundle to have the file extension
.mumble_plugin (previously .zip was allowed as well).
2021-06-15 08:10:06 +02:00
Robert Adam
91ba447e8f DOCS(plugins): Fix missing pointer star in example 2021-06-07 08:22:08 +02:00
Robert Adam
6e8c19a98d
DOCS: Fix markdown table 2021-06-06 20:30:06 +02:00
Robert Adam
54012c5a07 DOCS: Document new plugin system 2021-06-06 17:49:41 +02:00
Robert Adam
bc16d2a058
Merge PR #5063: DOCS(build): Add a missing dependency to static build instructions 2021-05-30 22:02:24 +02:00
Robert Adam
b1da1760b9 DOCS: Mention BUILD_NUMBER for building installer
The requirement to set the BUILD_NUMBER variable was not mentioned in
the docs for how to build an installer.

Fixes #5060
2021-05-30 16:52:25 +02:00
Lucius Q. User
388076a497 DOCS(build): Add a missing dependency to static build instructions. 2021-05-30 15:16:00 +03:00
Jan Klass
922e9321b2 DOCS(installer): Fixup and extend installer build documentation 2021-05-29 12:23:55 +02:00
Robert Adam
8c99fe8119
Merge PR #5032: DOCS: Mention Cpp14 requirement 2021-05-23 11:43:48 +02:00
Robert Adam
ddbf3a8730 DOCS: Mention Cpp14 requirement 2021-05-23 10:40:33 +02:00
Robert Adam
d6e9bff031 DOCS: Break long line 2021-05-23 10:39:43 +02:00
Jan Klass
59be4c0f85 DOCS: Link to releases rather than specific release for WixSharp 2021-05-22 20:54:39 +02:00
Robert Adam
322d231cbb
Merge PR #4997: DOCS: Added info about Poco dependency 2021-05-14 20:01:16 +02:00
Robert Adam
c9ef111505 DOCS: Added info about Poco dependency 2021-05-14 18:24:54 +02:00
Davide Beatrici
0a31cd1c63 FEAT(client): Implement native support for PipeWire
Tested with PipeWire 0.3.26.

The implementation is quite basic and simple, yet it surpasses the JACK one in terms of features.
For example, support for the most common surround mappings is provided.

As opposed to JACK, an option to disable the auto endpoint connection is not provided.
However, it's something that can be easily implemented if needed.

Support for echo cancellation will definitely be added in future.
2021-05-13 21:09:35 +02:00
Robert Adam
19e16a0524 BUILD(cmake): Bundle Qt translations
In the old qmake build system we included the functionality to bundle Qt
translations into our executable (potentially overwriting some of them).

See f5bf5f17f3/src/mumble/mumble.pro (L692-L728)

This functionality was not ported over to cmake which could lead to Qt
standard texts (e.g. "Ok") not being translated.
This commit ports the old functionality to the new cmake build system.

Note however that this new functionality is only enabled by default, if
a static build of Mumble is created. In other instances the option can
be specified manually.

Fixes #4359
2021-05-13 14:10:00 +02:00
Robert Adam
6495b33cf0 FEAT(client): Removed classic theme
Having to maintain the old legacy theme of Mumble was becoming a burden
as new icons would have to be created two times in order to fit both
theme variants. That never happened and thus the new icons looked very
out-of-place in the Classic theme. Besides the classic theme was also
missing several icons altogether already.

Thus it has been concluded to remove the Classic theme.
2021-05-07 10:23:00 +02:00
plan-do-break-fix
91c30439d1 DOCS: Fixed typos 2021-05-02 23:24:02 +02:00
Robert Adam
27dbee8e62 FEAT(client): Plugin framework
This commit introduces a new plugin framework into the codebase of the
Mumble client. Note that "plugin" here really refers to a (more or less)
general purpose plugin and is therefore not to be confused with the
previously available positional data plugins (only responsible for
fetching positional data from a running game and passing that to
Mumble).

The plugin interface is written in C, removing the compiler-dependence
the old "plugins" had. Instead plugins can now be written in an
arbitrary language as long as that language is capable of being compiled
into a shared library and also being capable of being C-compatible.

As already indicated a plugin is essentially a shared library that
provides certain functions that allow Mumble to interface with it.

Inside Mumble the so-called PluginManager is responsible for managing
the plugins and relaying events to the respective callbacks. Plugins
themselves can also interact with Mumble on their own initiative by
using the provided API functions.

Fixes #2455
Fixes #2148
Fixes #1594
Fixes #2051
Fixes #3742
Fixes #4575
Fixes #4751
2021-04-16 20:15:44 +02:00
Robert Adam
55206eff33 DOCS: Mention unity builds 2021-03-06 18:57:22 +01:00
KetchupBomb
0545d71d74 DOCS: Extending Ice interface example
In order to help document & maintain tribal knowledge, include a few snippets regarding testing Ice interface changs.
2021-03-04 08:11:59 +00:00
Robert Adam
0bee65b067
DOCS: Instructions on extending Ice interface
The process of extending the server's Ice interface was never (properly)
documented anywhere. This is fixed as of now as this commit adds a
step-by-step instruction set for extending the Ice interface with new
functions.
2021-03-02 19:53:51 +01:00
Robert Adam
cb78e3e072
DOCS: Added additional deps for static Linux build
When building Qt we also require libx11-xcb-dev and for
Ice we need libbluetooth-dev.
2021-02-13 17:01:44 +01:00
Robert Adam
2d3d8c2d0e
Merge pull request #4692: DOCS: Added notes how to build specific versions/commits. 2021-01-17 11:14:46 +01:00