Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Murmur doesn't listen on ports after reboot #1904

Closed
rpasing opened this issue Nov 19, 2015 · 5 comments
Closed

Murmur doesn't listen on ports after reboot #1904

rpasing opened this issue Nov 19, 2015 · 5 comments

Comments

@rpasing
Copy link

rpasing commented Nov 19, 2015

Hi,

I am using the murmur package in Arch Linux ( https://www.archlinux.org/packages/community/x86_64/murmur/ ).

I configured everything, set up the server, everything works great, except that murmur seems to not listen on the configured ports after a server reboot (I need to manually restart the murmur service after a reboot for it to listen on the appropriate ports).

In other words: I enabled the murmur systemd service, and the service is starting successfully after a reboot, however, connecting to the server via the mumble client fails, if not I manually restart the murmur service after a reboot (althought the service is already running!).

Here are some relevant infos:

"Directly" (47min) after reboot:

systemctl status murmur

● murmur.service - Mumble Daemon
Loaded: loaded (/usr/lib/systemd/system/murmur.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2015-11-01 02:26:04 CET; 47min ago
Main PID: 406 (murmurd)
CGroup: /system.slice/murmur.service
└─406 /usr/bin/murmurd -ini /etc/murmur.ini -fg

journalctl -b -u murmur

-- Logs begin at Tue 2014-05-27 05:00:06 CEST, end at Sun 2015-11-01 03:13:49 CET. --
Nov 01 02:26:04 XXX systemd[1]: Started Mumble Daemon.
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.371 Initializing settings from /etc/murmur.ini (basepath /etc)
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.391 Meta: TLS cipher preference is "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.391 OpenSSL: OpenSSL 1.0.2d 9 Jul 2015
Nov 01 02:26:07 XXX murmurd[406]: <C>2015-11-01 02:26:07.391 Successfully switched to uid 86
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.451 ServerDB: Opened SQLite database /var/lib/murmur/murmur.sqlite
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.475 Resource limits were 0 0
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.475 Successfully dropped capabilities
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.529 Failed to connect to D-Bus session
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.569 Murmur 1.2.10 (1.2.10) running on X11: Arch Linux: Booting servers
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.127 1 => Announcing server via bonjour
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.309 1 => Not registering server as public
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.309 Object::connect: No such slot MurmurDBus::userTextMessage(const User *, const TextMessage &)

Now I tried to connect to the server via the official murmur client, and it is not possible ("Connection refused") - seems like it is not listening on the ports, so I did this and got the following logs:

systemctl restart murmur

journalctl -b -u murmur

-- Logs begin at Tue 2014-05-27 05:00:06 CEST, end at Sun 2015-11-01 03:21:09 CET. --
Nov 01 02:26:04 XXX systemd[1]: Started Mumble Daemon.
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.371 Initializing settings from /etc/murmur.ini (basepath /etc)
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.391 Meta: TLS cipher preference is "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-
Nov 01 02:26:07 XXX murmurd[406]: <W>2015-11-01 02:26:07.391 OpenSSL: OpenSSL 1.0.2d 9 Jul 2015
Nov 01 02:26:07 XXX murmurd[406]: <C>2015-11-01 02:26:07.391 Successfully switched to uid 86
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.451 ServerDB: Opened SQLite database /var/lib/murmur/murmur.sqlite
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.475 Resource limits were 0 0
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.475 Successfully dropped capabilities
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.529 Failed to connect to D-Bus session
Nov 01 02:26:08 XXX murmurd[406]: <W>2015-11-01 02:26:08.569 Murmur 1.2.10 (1.2.10) running on X11: Arch Linux: Booting servers
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.127 1 => Announcing server via bonjour
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.309 1 => Not registering server as public
Nov 01 02:26:09 XXX murmurd[406]: <W>2015-11-01 02:26:09.309 Object::connect: No such slot MurmurDBus::userTextMessage(const User *, const TextMessage &)
Nov 01 03:21:08 XXX systemd[1]: Stopping Mumble Daemon...
Nov 01 03:21:08 XXX murmurd[406]: <C>2015-11-01 03:21:08.391 Caught SIGTERM, exiting
Nov 01 03:21:08 XXX murmurd[406]: <W>2015-11-01 03:21:08.391 Killing running servers
Nov 01 03:21:08 XXX murmurd[406]: <W>2015-11-01 03:21:08.606 1 => Stopped announcing server via bonjour
Nov 01 03:21:08 XXX murmurd[406]: <W>2015-11-01 03:21:08.697 1 => Stopped
Nov 01 03:21:08 XXX murmurd[406]: <W>2015-11-01 03:21:08.697 Shutting down
Nov 01 03:21:08 XXX systemd[1]: Stopped Mumble Daemon.
Nov 01 03:21:08 XXX systemd[1]: Started Mumble Daemon.
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.727 Initializing settings from /etc/murmur.ini (basepath /etc)
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.727 Meta: TLS cipher preference is "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.727 OpenSSL: OpenSSL 1.0.2d 9 Jul 2015
Nov 01 03:21:08 XXX murmurd[1478]: <C>2015-11-01 03:21:08.728 Successfully switched to uid 86
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.747 ServerDB: Opened SQLite database /var/lib/murmur/murmur.sqlite
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.747 Resource limits were 0 0
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.747 Successfully dropped capabilities
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.747 Failed to connect to D-Bus session
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.752 Murmur 1.2.10 (1.2.10) running on X11: Arch Linux: Booting servers
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.903 1 => Server listening on [::]:64738
Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.980 1 => Announcing server via bonjour
Nov 01 03:21:09 XXX murmurd[1478]: <W>2015-11-01 03:21:09.100 1 => Not registering server as public
Nov 01 03:21:09 XXX murmurd[1478]: <W>2015-11-01 03:21:09.100 Object::connect: No such slot MurmurDBus::userTextMessage(const User *, const TextMessage &)

systemctl status murmur

● murmur.service - Mumble Daemon
Loaded: loaded (/usr/lib/systemd/system/murmur.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2015-11-01 03:21:08 CET; 1min 17s ago
Main PID: 1478 (murmurd)
CGroup: /system.slice/murmur.service
└─1478 /usr/bin/murmurd -ini /etc/murmur.ini -fg

Now the connection is possible, without any problems!

Please notice the difference in the log output for the murmur server startup, this line is missing directly after a reboot, and is only existant when I manually restart murmur:

 Nov 01 03:21:08 XXX murmurd[1478]: <W>2015-11-01 03:21:08.903 1 => Server listening on [::]:64738

I found the following bug report, which describes the same problem, but I do not have the same log output (about the time being incorrect; my time is correct already directly after a reboot): http://archlinuxarm.org/forum/viewtopic.php?t=6926&p=38208

I reported this bug originally directly to the packager for Arch Linux, but he asked me to create a bugreport upstream [ https://bugs.archlinux.org/task/46897 ].

If you need more info, please let me know!

I hope we can find the cause for this.

Thank you
Regards
rpasing

@actown
Copy link

actown commented Nov 20, 2015

Is it possible that networking hasn't started when murmurd starts? What's in /usr/lib/systemd/system/murmur.service?

@rpasing
Copy link
Author

rpasing commented Nov 20, 2015

@fedpop
Copy link
Contributor

fedpop commented Nov 25, 2015

I think I can reproduce this bug too. If murmur starts without network available then it won't try to bind to the port again later and it won't exit so that systemd can restart it.

@rpasing the After=network.target stanza won't insure that network is actually working, only that network target has started.

@fedpop
Copy link
Contributor

fedpop commented Dec 2, 2015

see #1629

@oLaNceLoTo
Copy link

For windows add a key "DelayedAutoStart" to the service register (regedit)....

mkrautz added a commit to mkrautz/mumble that referenced this issue Mar 5, 2017
…rfaces.

On systems using systemd, Murmur is often started early, even before
Murmur can query the network interfaces.

This commit adds a fallback, where Murmur will expect such a system to
support both IPv4 and IPv6.

Fixes mumble-voip#1629
Fixes mumble-voip#1904
mkrautz added a commit to mkrautz/mumble that referenced this issue Mar 5, 2017
…rfaces.

On systems using systemd, Murmur is often started early, even before
Murmur can query the network interfaces.

This commit adds a fallback, where Murmur will expect such a system to
support both IPv4 and IPv6.

Fixes mumble-voip#1629
Fixes mumble-voip#1904
fantoms added a commit to fantoms/mumble that referenced this issue Apr 11, 2017
* rcc.pri: Fix wrong script path

The path has changed with PR mumble-voip#2905.

* Meta: enable both IPv4 and IPv6 if we're unable to query network interfaces.

On systems using systemd, Murmur is often started early, even before
Murmur can query the network interfaces.

This commit adds a fallback, where Murmur will expect such a system to
support both IPv4 and IPv6.

Fixes mumble-voip#1629
Fixes mumble-voip#1904

* MurmurIce: avoid NUL bytes in Ice messages

Ice messages, parameters and return values are not allowed by
the Ice spec to contain NUL bytes. Some Ice implementations
(such as C#) fail if they encounter them.

* ServerDB, Meta: add support for SQLite WAL.

Using SQLite's WAL (write-ahead log) can create less disk I/O while
still providing good consistency and durability.

This change uses SQLite's WAL with synchronous=NORMAL which can
cause loss of transactions on power failure. Only the transactions
which haven't been synced to the disk by the OS are lost. The
database itself will still be in a consistent state, but it might
not have all recent changes.

* mumble_pch.hpp: Include "winsock2.h" before "windows.h"

This fixes the following MinGW warning:
#warning Please include winsock2.h before windows.h [-Wcpp]

* mumble_pch.hpp: Include "qos2.h" before "windows.h", as in Murmur

* add kodi.exe to overlay_blacklist.h

XBMC is now Kodi. Add kodi.exe to the overlay blacklist.

* MurmurIce: base64-encode MurmurUser::context on the wire to avoid NUL bytes w/o losing data.

We now base64-encode the user's plugin context.
It is a binary blob, not generally useful for RPC users.

The most important property is the ability to detect that two
users are in the same game context -- and that property is preserved.

If the exact byte seqeuence is needed, it is possible to base64-decode
the returned string to retrieve it.

Fixes mumble-voip#1874

* mumble_pch.hpp: Delete _WINSOCKAPI_ definition

The _WINSOCKAPI_ definition was needed when "winsock2.h" was being included after "windows.h", which checks if _WINSOCKAPI_ is defined to know if the header is included.
If it isn't, "winsock.h" (the previous version of winsock2.h) is included, which leads to a conflict and potential compilation fail, if the updated version of the header is included later.

* mumble_pch.hpp: Define "WIN32_LEAN_AND_MEAN", as in "murmur_pch.h"

* mumble_pch.hpp: Remove "interface" workaround for Qt 5

* mumble_pch.hpp: Include "mmreg.h" header

Fixes:
dsound.h(242): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
dsound.h(242): error C2143: syntax error: missing ';' before '*'
dsound.h(361): error C3646: 'lpwfxFormat': unknown override specifier
dsound.h(361): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
dsound.h(377): error C3646: 'lpwfxFormat': unknown override specifier
dsound.h(377): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
dsound.h(428): error C3646: 'lpwfxFormat': unknown override specifier
dsound.h(428): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
dsound.h(437): error C3646: 'lpwfxFormat': unknown override specifier
dsound.h(437): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
dsound.h(707): error C2061: syntax error: identifier 'LPWAVEFORMATEX'
dsound.h(718): error C2061: syntax error: identifier 'LPCWAVEFORMATEX'
dsound.h(793): error C2061: syntax error: identifier 'LPWAVEFORMATEX'
dsound.h(804): error C2061: syntax error: identifier 'LPCWAVEFORMATEX'
dsound.h(1066): error C2061: syntax error: identifier 'LPWAVEFORMATEX'
dsound.h(1125): error C2061: syntax error: identifier 'LPWAVEFORMATEX'

* mumble.pro: Use "3rdparty/asio" instead of "ASIO_PATH", if the folder exists

* MumbleApplication.h: Remove additional scope resolution for the "nativeEventFilter()" function

* main.cpp: Change "_declspec" to "__declspec"

* GlobalShortcut_win.cpp: Make the "qHash()" function non-static

* Overlay_win: properly initialize m_helper_enabled, m_helper64_enabled and m_mumble_handle.

We neglected to properly initialize these variables in OverlayPrivateWin,
causing the overlay helpers to sometimes not be launched.

Fixes mumble-voip#2911

* Settings: add setting for winhooks.

The setting is already used in GlobalShortcut_win.
We added it as a hidden setting because in some situations,
the winhooks engine is not preferable.

The code in GlobalShortcut_win already works -- so
this change is all we need to be able to easily access
the setting from the GlobalShortcut config dialog.

* Settings: add missing save call for the 'shortcut/gkey' setting.

Since 'shortcut/gkey' was a hidden setting before, we apparently neglected
to ever save its value.

This commit fixes that, by adding a SAVELOAD in Settings::save().

* GlobalShortcut_win: check for xboxinput != NULL before use.

With the ability to change the enabled state for XboxInput at runtime,
we now need these additional checks to avoid crashes.

* GlobalShortcut_win: check for gkey != NULL in gkey handling.

With the ability to enable/disable GKey support at runtime, we
need these extra checks to avoid crashes.

* GlobalShortcut: allow users to enable/disable our additional shortcut engines on Windows.

This commit adds UI to the GlobalShortcut config dialog to allow
users to configure the use of our additional shortcut sources
(WinHooks, XboxInput, and GKey).

Changing these settings require a restart, due to how GlobalShortcut
is currently architected. (These additional shortcut sources are
initialized when GlobalShortcut is constructed.)

Fixes mumble-voip#2739

* Mumble: use 'Third-Party Licenses' in About dialog.

We already do so in Murmur.

* Murmur: use title-case for 'Third-Party Licenses' text in About dialog.

* Settings: add setting for enabling developer menu.

This setting allows users to enable the "Developer" menu.
The Developer menu currently only contains the Developer Console,
which is an easy way to see Mumble's log output from inside Mumble.

* LookConfig: hook up 'ui/developermenu' setting in the User Interface config dialog.

* MainWindow: implement UI logic for 'ui/developermenu' setting.

qmDeveloper is now dynamically added and removed from MainWindow
depending on the state of the 'ui/developermenu' setting.

* main.pro: use qmake/compiler.pri -- the compiler.pri in the root does not exist.

Apparenty, a lot of our builders didn't catch this, apparently because
they don't clean the Git repo on every build.

* os_win.cpp: Fix unused "mumbleMessageOutput()" function

Fixes:
os_win.cpp:71:13: error: 'void mumbleMessageOutput(QtMsgType, const char*)' defined but not used [-Werror=unused-function]
 static void mumbleMessageOutput(QtMsgType type, const char *msg) {
             ^

* ASIOInput.cpp: Fix print format warning

ASIOInput.cpp:446:85: error: format '%d' expects argument of type 'int', but argument 3 has type 'long int' [-Werror=format=]
     qWarning("ASIOInput: Buffer mismatch mode. Wanted %d, got %d", wantBuf, lBufSize);
                                                                                     ^
ASIOInput.cpp:446:85: error: format '%d' expects argument of type 'int', but argument 4 has type 'long int' [-Werror=format=]

* XboxInput: clean up code by introducing XboxInputGetStateFunc typedef.

This commit introduces a typedef for the "getter" function for XInput.

This makes the code in the header much cleaner, and allows us to avoid some nasty casts in the implementation file.

This also fixes a strict aliasing warning in the MinGW build.

* UserView.cpp: use the QStyleOptionViewItem appropriate for the Qt version we build against.

This commit changes UserView to use QStyleOptionViewItem on Qt 5.

On Qt 4, we continue to use QStyleOptionViewItemV4, as we did before.

This avoids a deprecation warning, since QStyleOptionViewItemV4 is deprecated in Qt 5.

* WASAPI.cpp: Fix wrong print format

The code had wrong print formats for the data types used, which lead to
warnings in MinGW.

* Global.cpp: Fix unused "migrateDataDir()" function on Windows

Also added comments near "#endif" to better understand the function
logic.

Fixes:
Global.cpp:12:13: error: 'void migrateDataDir()' defined but not used [-Werror=unused-function]
 static void migrateDataDir() {
             ^

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* MurmurIce.cpp: Fix signed/unsigned comparison warning

* Overlay_win: Fix "m_active" variable order

This commit re-orders the variables initialization list.

* plugins/ql: Fix spectator state offset

The previous offset was pointing at a value of "32" when in-game, which resulted in the plugin being disabled even when not spectating.

* plugins/sto.cpp: Retract plugin

This commit retracts the plugin for Star Wars Online, due to lack of maintenance.

* WASAPI.cpp: Remove unused "numFramesLeft" variable

We are only assigning a value to the variable multiple times, but never using it.

The variable was added in 6bef650 and it was used as argument in a while loop, which was removed in 3dd8c55.

* Murmur: update registration URL to use mumble.info instead of mumble.hive.no.

The 1.2.x branch already does this.

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* By default do not use other-talk attenuation

The setting is still available in the audio wizard, which should point
users to the possibility of enabling it, should they choose to want it
enabled.

Fixes mumble-voip#2711

* Fixed uname() query on Solaris.

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* OSInfo: Documented Solaris uname() fix.

* Use Qt Speech if specified and available

Qt 5.8 introduced Qt Speech, a module that contains a TTS system which works on every OS.

This commit implements a new OS-independent Text-To-Speech engine using Qt Speech.

It can be enabled with CONFIG+=qtspeech, if the Qt version being used has the module available.

* Mumble: remove expert mode.

This commit removes the concept of expert mode configuration
from the Mumble client.

* Settings: document that expert mode has been removed.

We keep the setting around, to avoid re-using it in the future.

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* TextToSpeech.cpp: Fix build problem

This commit removes the parent of the QTextToSpeech object and deletes it in TextToSpeechPrivate's destructor.

We do this in order to avoid generating and including a Moc file, since we don't actually need QObject functions for QTextToSpeech.

* travis-ci: Use MinGW build envs

* murmur_pch.h: Include missing headers

Fixes:
error: 'socklen_t' does not name a type
error: invalid use of incomplete type 'sockaddr_in6'
error: 'IPV6_V6ONLY' was not declared in this scope
error: 'socklen_t' was not declared in this scope
error: 'optlen' was not declared in this scope
error: 'sockaddr_in6' does not name a type
error: 'QOS_NON_ADAPTIVE_FLOW' was not declared in this scope
error: 'QOSAddSocketToFlow' was not declared in this scope
error: 'QOSRemoveSocketFromFlow' was not declared in this scope
error: 'MSG_TRUNC' was not declared in this scope

* os_win.cpp: Include <share.h> to fix MinGW build

Fixes:
os_win.cpp:251:61: error: '_SH_DENYWR' was not declared in this scope
  fConsole = _wfsopen(console.toStdWString().c_str(), L"a+", _SH_DENYWR);
                                                             ^~~~~~~~~~

* travis-ci: Execute "make check" using Wine

* os_win.cpp: Include <float.h> to fix MinGW build

Fixes:
os_win.cpp:237:32: error: '_DN_FLUSH' was not declared in this scope
  _controlfp_s(&currentControl, _DN_FLUSH, _MCW_DN);
                                ^

os_win.cpp:237:43: error: '_MCW_DN' was not declared in this scope
  _controlfp_s(&currentControl, _DN_FLUSH, _MCW_DN);
                                           ^

os_win.cpp:237:50: error: '_controlfp_s' was not declared in this scope
  _controlfp_s(&currentControl, _DN_FLUSH, _MCW_DN);
                                                  ^

* Connection, Server, ServerHandler: Cast "dwFlow" to DWORD pointer to fix
MinGW build.

Fixes:
Connection.cpp:69:126: error: invalid conversion from 'DWORD* {aka long unsigned int*}' to 'PQOS_FLOWID {aka unsigned int*}' [-fpermissive]
 tDescriptor(), NULL, QOSTrafficTypeAudioVideo, QOS_NON_ADAPTIVE_FLOW, &dwFlow))
                                                                              ^

Server.cpp: In member function 'void Server::sendMessage(ServerUser*, const char*, int, QByteArray&, bool)':
Server.cpp:918:158: error: invalid conversion from 'DWORD* {aka long unsigned int*}' to 'PQOS_FLOWID {aka unsigned int*}' [-fpermissive]
 r *>(& u->saiUdpAddress), QOSTrafficTypeVoice, QOS_NON_ADAPTIVE_FLOW, &dwFlow);
                                                                              ^

ServerHandler.cpp: In member function 'void ServerHandler::serverConnectionConnected()':
ServerHandler.cpp:650:0: error: invalid conversion from 'DWORD* {aka long unsigned int*}' to 'PQOS_FLOWID {aka unsigned int*}' [-fpermissive]
     if (! QOSAddSocketToFlow(hQoS, qusUdp->socketDescriptor(), reinterpret_cast<sockaddr *>(&addr), QOSTrafficTypeVoice, QOS_NON_ADAPTIVE_FLOW, &dwFlowUDP))
 ^

* DirectSound.h: include <mmsystem.h> to fix MinGW build.

Fixes:
dsound.h:586:32: error: 'LPCWAVEFORMATEX' has not been declared
     STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
                                ^
dsound.h:669:32: error: 'LPCWAVEFORMATEX' has not been declared
     STDMETHOD(SetFormat)(THIS_ LPCWAVEFORMATEX lpcfxFormat) PURE;
                                ^

* os_win.cpp: Include <shobjidl.h> and <shlobj.h> to fix MinGW build

Fixes:
os_win.cpp:292:75: error: 'SetCurrentProcessExplicitAppUserModelID' was not declared in this scope
   SetCurrentProcessExplicitAppUserModelID(L"net.sourceforge.mumble.Mumble");
                                                                           ^

TaskList.cpp:75:20: error: 'SHARD_LINK' was not declared in this scope
  SHAddToRecentDocs(SHARD_LINK, link);
                    ^

* mumble.pro: Don't use "mt.exe" with MinGW

* murmur.pro: Don't use "mt.exe" with MinGW

* celt-0.11.0-build.pro: Use Unix-like config.h for the MinGW build, instead of win32/config.h"

* g15helper.pro: Don't use "mt.exe" with MinGW

* mumble_exe.pro: Don't use "mt.exe" with MinGW

* compiler.pri: Use QT_ARCH instead of QMAKE_target.arch with Qt 5

QMAKE_target.arch doesn't return "x86_64" with MinGW x64.

* mumble_exe.pro: Remove MSVC flags for MinGW

* minhook-build.pro: Remove MSVC flags for MinGW

* celt-0.7.0-build.pro: Use Unix-like config.h for the MinGW build, instead of win32/config.h"

* speex-build.pro: Use Unix-like config.h for the MinGW build, instead of win32/config.h"

* openssl.pri: Link against "libssl", "libcrypto" and "gdi32" when targetting MinGWi

* compiler.pri: Enable SSE and SSE2 for MinGW

* mumble.pri: Create configuration for MinGW

* compiler.pri: Add CONFIG(symbols) support to win32-g++ build.

* compiler.pri: Define "MINGW_HAS_SECURE_API" to enable secure functions

MXE's MinGW has the secure functions disabled by default, because their headers check if "MINGW_HAS_SECURE_API" is defined.

* opus-build: Rename "Win32" folder to "win32"

This fixes the following error with MinGW on Linux:
../opus-src/celt/bands.c:31:20: fatal error: config.h: No such file or directory
 #include "config.h"
                    ^

* mumble.pro: split MSVC/MinGW libsndfile linking, due to different ordering and dependency requirements.

* mumble.pro: Link against "ksuser" in the MinGW build

* mumble_exe.pro: Enable UNICODE for MinGW

* src: Fix QoS build with MinGW

For some reason QOS_FLOWID is defined in "qos2.h" after the lines that require it and PQOS_FLOWID is not defined at all.

MinGW's qos2.h header doesn't define QOS_NON_ADAPTIVE_FLOW, so we define it oursevles for MinGW to use.

* ServerHandler.cpp: Delay load "qwave.dll" only with MSVC

* opus-build.pro: Don't use MSVC-specific SSE config options options for MinGW

* mumble_pch.hpp: Set up Windows macros _WIN32_WINNT and NTDDI_VERSION to
target Windows 7 on MinGW.

"qos2.h" checks if the Windows version is equal or greater than 0x0600 (Windows Vista/Windows Server 2008).

The other headers we are using check if NTDDI_VERSION is equal or greater than Windows 7 before defining the features we need.

* mumble_pch.hpp: Include <ws2tcpip.h> to fix MinGW build

Fixes:
error: 'socklen_t' does not name a type

* DirectSound.cpp: Replace "LPDIRECTSOUNDNOTIFY8" with "LPDIRECTSOUNDNOTIFY"

MSDN says that "IDirectSoundNotify8 is a define for IDirectSoundNotify. The two interface names are interchangeable."
https://msdn.microsoft.com/en-us/library/windows/desktop/ee418244(v=vs.85).aspx

* os_win.cpp: Use the "delayHook()" function only with MSVC

* WASAPI.cpp: Manually define GUIDs

* WASAPI.cpp: Fix cross-initialization problem

* Timer.cpp: Fix missing Boost symbol for MinGW

* Move Windows GUID initialization to WinGUIDS.cpp file.

* Move "getenvQString()" function to a dedicated header and rename it

We do this in order to have a single function we can include in both CrashReporter.cpp and MumbleApplication.cpp.
This function is needed in CrashReporter.cpp because MinGW doesn't have "_wdupenv_s", the function we are currently using.

* mumble.pro: Fix "avrt" library linkage

* compiler.pri: Use the Unix block for win32-g++ too

So that we use the G++ features when compiling with MinGW.

* WinGUIDs.cpp: Fix missing symbol linker error

* plugins/gtav: update plugin to work with version 1.38 (Steam)

Game version: 1.38 (Steam)
https://support.rockstargames.com/hc/en-us/articles/115004482908

* travis-ci: Remove unneeded "winpaths_custom" CONFIG option

It's a leftover of old tests.

* MurmurIce: fix signed/unsigned comparison between string size and std::numeric_limits.

std::numeric_limit's max() method return a T, so when comparing it against
a container size, we have to cast it to size_t.

This is currently breaking the win32-static (32-bit) build.

* qmake/compiler.pri: fix value of MUMBLE_ARCH on Qt 5.

The MinGW PR changed MUMBLE_ARCH to use QT_ARCH on Qt 5.
However, QT_ARCH uses 'i386' for 32-bit x86, we're currently
using 'x86' throughout our .pro files.
To fix this problem, we map 'i386' back to 'x86'.

This is currently breaking the win32-static (x86) build.

* scripts/rcc-depends.py: fall back to using the absolute path when os.path.relpath() fails on Windows.

On Windows, it is not always possible to create a relative path from an
absolute path. For example, if Qt lives on C:, and Mumble is being built
on Z:.

Things will fall apart then, because we include some of Qt's
translations in our .qrc files.

This commit works around that issue by falling back to absolute paths
when finding a relative path fails.

* travis-ci: add a no-pch build to the Travis matrix.

It's convenient to have a proof-build that checks whether
our no-pch build works, to keep it working.

* Meta: add QSslCipher header to fix no-pch build.

* overlay: add overlay_launchers.h and overlay_whitelist.h.

These are needed by the new launcher filter mode for the overlay.

* overlay: update overlay_blacklist.h.

This updates overlay_blacklist.h with the entries from
mumble-voip#2422

Fixes mumble-voip#2422

* Settings: add overlay launcher filter settings.

Add the settings that are going to be used by the new
overlay launcher filter feature.

* OverlayConfig: add UI for configuring the launcher filter.

This change adds the user interface and config dialog logic
needed for the overlay launcher filter.

This adds an additional mode to the overlay called the 'launcher filter'.

The idea behind the launcher filter is that we provide a sensible
whitelist of allowed launchers (which are typically digital storefronts,
and other launchers -- Steam, Origin, GOG, Battle.net, MMORPG launchers,
etc.), as well as a default whitelist of normal programs, because some
things don't fit into the 'launcher' check -- such as Guild Wars 2.

The existing 'blacklist' and 'whitelist' modes are still available,
as before.

This commit also changes the way "default" entries are shown.
Instead of being in a disabled state, they are now shown in italic.
Also, default entries now have a checkbox next to them, allowing users
to disable default entries.

Regarding new whitelist functionality:

To support the launcher filter overlay mode, we've added a default set of
programs to Mumble's whitelist.

However, when in 'whitelist' mode, Mumble has traditionally not provided
any defaults.

Also, for the whitelist mode to be useful to people, it should not have
any defaults -- because the whole purpose of the whitelist is for people
to be 100% in control themselves.

This commit also changes the UI in OverlayConfig to not show the defaults
from overlay_whitelist.h when in WhitelistExclusionMode.

* overlay: add util.h with vector/string/path utilities.

These will be used by the new launcher filter code.

* overlay: add ancestor.cpp/.h, utilities for getting process ancestor info.

This new module exposes the GetProcessAncestorChain() function.
This function is going to be used by the new exclusion check module
to implement the launcher filter.

* overlay: add olsettings.cpp/olsettings.h, accessors for launcher overlay settings.

This adds accessors for the new launcher-filter settings.

* overlay: refactor bBlacklisted into bEnableOverlay.

This change is a small refactoring in the overlay DLL.
We rename bBlacklisted to bEnableOverlay, because the
bEnableOverlay naming is clearer in a world where we
have the launcher filter exclusion mode.

* overlay: remove legacy overlay exclusion code.

This removes the old white/blacklist exclusion code
from the overlay DLL.

This is done in a separte commit to aid in reviewability.

* overlay: allow overlay to decline being attached to a process.

Returning FALSE From DllMain when fdwReason is DLL_PROCESS_ATTACH
means you're declining to be loaded.

This allows us to be fully unloaded from program that we've decided
(via exclusion rules) we don't want to be in.

* overlay: move procname parsing to separate function.

This is a small code-cleanup commit that moves the
procname parsing to a separate function. This makes
the code clearer, and we're able to properly document it.

* overlay: re-introduce checks for 'debugoverlay' and 'nooverlay'.

These were removed when we removed all the legacy exclusion logic.
This commit re-adds them in a more sensible way.

* overlay: implement new overlay exclusion logic in excludecheck.cpp/excludecheck.h.

This commit adds an 'excludecheck' module to the Windows overlay DLL that
implements the exclusion logic for the Mumble overlay.

It implements the new launcher filter mode, as well as the traditional
whitelist and blacklist-based approaches.

The rules for the launcher filter mode are:

 - Is the process blacklisted? Don't allow the overlay.
 - Is the process whitelisted? Allow the overlay.
 - Does the process's executable live in a whitelisted path? Allow the
   overlay.
 - Is one of the process's ancestors in the launcher whitelist? Allow the overlay.
 - Otherwise, disallow overlaw.

These simple rules, along with some sane defaults allow much finer-grained
control over the overlay -- and it allows us to ship a default profile
where we practically only inject into games.

* overlay: hook up new excludecheck-based overlay exclusion check.

This commit hooks up the 'excludecheck' module into the Windows overlay.

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* 3rdparty/opus-build: remove unnecessary shared library handling for macOS

This removes a section of opus-build.pro that sets the proper install name on the Opus shared library.
This commit removes it because it is not needed anymore -- we only ever build Opus as a static library on Unix-like systems.

* Log_macx: disable Growl fallback on Qt >= 5.8.

While the Growl path is unlikely to see much use in general, let's
keep it there for Qt versions < 5.8 for Mumble 1.3.0.

We'll drop it after that.

* .mailmap: add dark_skeleton's preferred author line.

dark_skeleton contacted us, asking us to use this
variant of their author line for our mailmap.

* .mailmap: add new hacst mail.

To avoid two hacst's in AUTHORS.

* AUTHORS: update.

* overlay: add gw2-64.exe to the default launcher-filter program whitelist.

The original launcher filter PR only added the 32-bit Guild Wars 2 client.
This adds the 64-bit client.

* qmake/protobuf.pri: new file to include in .pro files for depending on protobuf.

This introduces a protobuf.pri helper that .pro files can include to
depend on protobuf.

Including protobuf.pri will link against the protobuf library, and include
the proper headers.

* mumble.pri: use protobuf.pri.

This removes the ad-hoc protobuf dependency code from mumble.pri, and
replaces it with an include of the newly introduced protobuf.pri helper.

* mumble_proto: use protobuf.pri.

This hooks up the mumble_proto module to use the newly introduced
protobuf.pri helper.

* plugins/gtav: update plugin to work with version 1.38 (Retail)

Game version: 1.38 (Retail)
https://support.rockstargames.com/hc/en-us/articles/115004482908

* TestPacketDataStream: use UTF-8 instead of Latin1.

The string test for PacketDataStream uses the string
Bærtur -- but encoded as Latin1.

Keep the string -- it's as good as any -- but use UTF-8 instead,
to make clang happy.

Fixes mumble-voip#2978

* tests: depend on OpenSSL in test.pri instead of each individual test.

The murmur_pch.h file which most tests use -- either directly,
or indrectly -- depends on being able to include OpenSSL headers.

Some of our tests did not include(qmake/openssl.pri), which meant that
those tests would fail to build in CONFIG(no-pch), such as on macOS.

This commit works around that issue by depending on OpenSSL for all tests.

* overlay_blacklist.h: Add missing comma

* overlay: add GTAVLauncher.exe to the default launcher-filter program blacklist.

* Overlay_macx: fix code to work with removal of OverlaySettings::bUseWhitelist.

This a quick band-aid until we implement proper support for
launcher-detection in Overlay_macx.

* Simplify delta calculation in TestTimer.cpp

For standard libraries that only provide float overloads for abs/std::abs,
this is necessary.

Also, IMHO, doing this instead of playing with fire using float casts and
whatnot seems to be the more sane approach.

* murmur_ice: use MUMBLE_ICE_PREFIX in murmur_ice for macx

This allows Homebrew users (or really, people building from source
without a Mumble buildenv) to specify where Ice lives.

* murmur_ice: accommodate Homebrew slice path in macx block

This adds Homebrew's slice directory to the default include path
in the macx block.

This allows Mumble to build with MUMBLE_ICE_PREFIX set to a ZeroC
Ice installation installed via Homebrew.

* travis-ci: add macOS target.

This commit adds a Homebrew-based macOS build to our Travis CI build
matrix.

It also cleans up the exising build matrix such such that Linux builds
are built only on Linux hosts, and macOS builds are only built on macOS
hosts.

* ACLEditor: fix tooltip for channel sort order.

The tooltip for the channel sort order was previously the very obscure
"Channel positioning facility value".

This commit makes it more understandable: "This is the sort order for the channel."

Fixes mumble-voip#2965

* overlay: treat launchers as implicitly blacklisted programs.

This is useful for cases like GTA V.

Its launcher is available via Steam, or via Rockstar Social Club/Retail.

Before this change (if it wasn't already in the blacklist), the GTA V
Launcher, when launched through Steam, would show the overlay.
Now, since we treat it as a launcher, it'll be implicitly blacklisted.

* scripts/generate-cipherinfo.py: add DH_RSA and DH_DSS key exchanges.

* scripts/generate-cipherinfo.py: use correct script name in comment.

* Convert existing SSLCipherInfoTable.h to Unix-style line endings.

* scripts/generate-cipherinfo.py: ensure output is consistently sorted.

This ensures that the output of the script is consistently sorted.
This commit uses the integer value of the literal cipher suite value.

This will make future diffs from output of the script much easier to read.

* Update SSLCipherInfoTable.h via scripts/generate-cipherinfo.py.

* TestTimer: make resolution test independent of QTime.

Previously, this test depended on the fact that QTime is/was a low
resolution timer, which is/may not always be the case.

This changes the test to only use the Timer class.

The test is re-written to run for 150 ms, to ensure that
we have enough samples to do a proper calculation. This
is also done to avoid fluctuations that could happen due
to context switches/overhead from other processes on the
test runner machine.

Since we don't compare to another timer anymore, we instead
explicitly test that the timer resolution is at least 5
microseconds. Currently, the Timer class doesn't spell out
its actual resolution, because its implementation varies
depending on platform.

* MainWindow: avoid floor/ceil in VolumeUp/VolumeDown global shortcut handlers.

Previously, the code tried to use floorf (in VolumeUp) and ceilf (in
VolumeDown) in order to ensure that VolumeUp and VolumeDown rounded to
the nearest 10%.

However, with /fp:fast on MSVC, that didn't work in all cases. For
example, in VolumeDown, the volume was previously always calculated via
ceilf(). On some occasions, a previous invocation of VolumeDown will have
set g.s.fVolume to a value close to 1.3 (130%). This value, when passed to
ceilf() would become 1.4 (140%) and subtracting 10% from that would still
be 130%. Not as we would expect.

This commit fixes the logic to not expect on exactness of floats via
floorf/ceilf. Instead of rounding to the nearest 10%, we just subtract
or add 10% to the current volume. It doesn't matter that it isn't a
multiple of 10.

* Drop Speex from README

* plugins/bf4: update plugin to work with version 1.8.2.48475

* Discard duplicate path exceptions

The three file lists already discard duplicate entries. Do the same for
paths in the path exceptions list.

* Update description of configuring lib paths

Paths are no longer specified in mumble.pro (directly).

* Initialize variables in constructor

* Drop redundant if condition in else case

The check above guarantees `si` is never null/false.

* plugins/bf1: update plugin to work with version 1.0.49.28890

https://www.battlefield.com/news/update-notes/bf1-they-shall-not-pass-update

* Just use text color

* Add new path for winpaths_custom.pri (in qmake/) to gitignore.

* TestTimer: refator accuracy test and add logging.

* TestTimer: add logging to atomicity test.

* TestTimer: add delta64 function and use it for delta calculations.

* Fix local volume dialog default size

The default geometry was too small on macOS (mumble-voip#2993).

Remove default geometry and instead specify a minimum width. The dialog
will auto-adjust its height for content.

Fixes mumble-voip#2993

* MainWindow: Don't open tooltips when not active

* DirectSound: move includes to implementation file to fix moc in CONFIG(no-pch).

* WinGUIDs: include wtypes.h in WinGUIDs to fix no-pch build.

* scripts/appveyor: fix comment about signing/UIAccess in appveyor-build.ps1.

The comment was not correct: We pass CONFIG(no-elevation) because we need
to disable elevation because we don't sign the builds.

* .travis.yml: add no-pch build for Linux/Qt 4.

* AppVeyor: add no-pch build for x86_64 MSVC.

If we don't track this, we'll just break the build.
It helps with correctness of header includes, etc. -- so I think it is
worth tracking.

* Add option to hide OS information from server

This fixes issue mumble-voip#2899.

* Net: refactor SWAP64 macro into its own header, ByteSwap.h.

* Transifex translation update
Mode: default
Minimum percent translated: 0
Matched 42 languages

* Net: refactor HostAddress class to its own set of files.

* Net: refactor Ban class to its own set of files.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants