| Commit message (Collapse) | Author | Age | Lines |
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Starting from Qt 5.13, QT_DEPRECATED_WARNINGS is now enabled by default.
Unfortunately, methods are often deprecated not long after a suitable
alternative is available, meaning that getting rid of these warnings
would require breaking backwards compatibility (or sprinkling QT_VERSION
checks everywhere).
(See QList::fromStdList() as an example, which was marked as deprecated
merely a month after range constructors were made available.)
This reverts things to how they were before. Getting rid of these
warnings will probably be part of the job when porting to Qt 6.
|
| |
| |
| | |
Missing letter inside the word "Uhrzeit"
|
| | |
|
| |\
| | |
| | | |
Set the windowTitle property of callToolbar
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The window title of a toolbar is displayed in the default context menu
of the main window.
Closes #195
|
| |\ \
| | | |
| | | | |
Fix a few translation typos
|
| | | |
| | | |
| | | | |
A few dutch translation where misspelled.
|
| |\ \ \
| | | | |
| | | | | |
Use the first payload type number for each codec in the SDP answer
|
| | | |/
| | |/|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
It is possible for the SDP offer to feature more than one payload type
number (either static or dynamic) that refer to the same codec. For
example, a peer that supports ITU-T V.152 may use two payload types,
with one of them marked for voice-band data use:
m=audio 3456 RTP/AVP 0 98
a=rtpmap:0 PCMU/8000
a=rtpmap:98 PCMU/8000
a=gpmd:98 vbd=yes
Ideally, Twinkle should use the number that was listed first in the
media formats list when building the SDP answer.
Closes #184
|
| |\ \ \
| | | | |
| | | | | |
Various fixes for the GetProfileNameForm dialog
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Even though focus is supposed to initially go to profileLineEdit (due to
its first position in the tabstops list), this doesn't seem to be the
case in reality (at least for me).
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
QRegExpValidator can be somewhat user-unfriendly, as it will prevent
characters from being input, or even deleted, while leaving the user in
the dark as to what is going on.
Retricting the set of characters allowed shouldn't pose a problem if we
make a mention of this on the form. Checking for a leading "." or "@",
however, is better left at submission time, with an explicit error
message in that case.
|
| | | | | |
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
init() is responsible for setting a validator for profileLineEdit; its
invocation was probably lost in the Qt4/5 transition.
Closes #189
|
| |/ /
| | |
| | |
| | |
| | | |
The merging of 1e9f091 (#123) and f3d6f33 (#126) resulted in a
positional conflict in syssettingsform.ui.
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Starting with version 1.0.2, bcg729 has changed its API to add support
for G.729B, thus requiring us to adjust our function calls depending on
which version is installed.
When dealing with the new API, we merely need to add a few parameters to
disable all G.729B features, namely:
* On the decoder side: When `SIDFrameFlag` is not set, the decoder will
behave just like before, decoding the payload as a standard G.729A
voice frame (or concealing an erased frame). The other parameters,
`rfc3389PayloadFlag` and `bitStreamLength`, are only of use when
dealing with a SID frame sent as per RFC 3389, and are ignored if
`SIDFrameFlag` is not set.
* On the encoder side: When `enableVAD` is disabled, the encoder will
behave just like before, producing only standard G.729A voice frames.
The only API difference is the introduction of `*bitStreamLength`, to
return the length of the encoded frame (0, 2 or 10 bytes). In our
case, this will always be 10 bytes just like before; an assert() was
added to guarantee this.
Closes #104
|
| | |
|
| |\
| | |
| | | |
Introduce read-write-update locks and guards to prevent deadlocks
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This occurs when the user declines an incoming call transfer request,
due to the following path:
- recvd_refer_permission() acquires a read lock over lines_mtx
- move_releasing_lines_to_background() is called
- A write lock over lines_mtx is acquired
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This occurs when performing a consult transfer if the target does not
support the Replaces extension, due to the following path:
- refer() acquires a read lock over lines_mtx
- refer_consultation() is called
- A write lock over lines_mtx is acquired
Closes #118
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This can easily be triggered by starting a blind transfer, and hanging
up before the other end has accepted/rejected it, due to the following
path:
- recvd_notify() acquires a read lock on lines_mtx
- cleanup_dead_lines() is called
- A write lock on lines_mtx is acquired
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This occurs on reception of an INVITE with a Replaces header, due to the
following path:
- recvd_invite() acquires a read lock on lines_mtx
- recvd_initial_invite() is called
- A write lock over lines_mtx is acquired
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This converts t_rwmutex and t_rwmutex_guard into a read-write-update[*]
lock and guard, in an attempt to circumvent the various deadlocks that
were introduced with the addition of lines_mtx in 38bb6b7.
[*] For more details, see https://stackoverflow.com/a/18785300 and
http://lkml.iu.edu/hypermail/linux/kernel/0004.3/0117.html.
Note that this is not a real fix; this would require analyzing and
refactoring phone.cpp, which is well beyond my abilities. This is at
best a workaround that appears to conveniently dodge all the deadlocks
I've encountered so far.
(It would have been more proper to introduce a separate class for this
purpose, but this would have required modifying over 80 lines just to
change one type for another. As phone_users_mtx is the only other
instance of this class, the impact of subverting t_rwmutex directly is
minimal.)
|
| | |
| | |
| | |
| | | |
(Doing this ahead of time to simplify the next commit a bit.)
|
| | |
| | |
| | |
| | |
| | | |
These classes are about to get more complex, so let's move them ahead of
time into mutex.cpp.
|
| |\ \
| | | |
| | | | |
Support multiple WWW-Authenticate/Proxy-Authenticate headers
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The server may send multiple WWW-Authenticate/Proxy-Authenticate
headers, with different digest algorithms, in decreasing order of
preference. We must therefore avoid overwriting any supported challenge
once we've got a hold of one.
Closes #162
|
| |\ \ \
| | | | |
| | | | | |
Add an option to prevent an idle session while a call is in progress
|
| | | | | |
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Having the session marked as idle while a call is in progress could
trigger certain actions (such as locking the screen, logging out
automatically, or suspending the system) which could be undesirable in
this situation.
Closes #123
|
| |\ \ \
| | | | |
| | | | | |
Add configuration option to disable incoming call popup window
|
| | |/ /
| | | |
| | | |
| | | | |
Closes #126
|
| |\ \ \
| | | | |
| | | | | |
Use a mutex in all t_sys_settings getters/setters, even bool
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Despite what one might intuitively expect, the C++ standard does not
make any guarantee about fundamental types being atomic, not even bool.
(In fact, it explicitly mentions the existence of std::atomic<bool> for
that purpose.)
See https://stackoverflow.com/a/35226186 for more details about this
subject.
|
| |\ \ \
| | | | |
| | | | | |
Add missing tests lost in the autotools to CMake transition
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This check (AC_CHECK_RES_INIT) was originally defined in acinclude.m4,
and was lost in the transition to CMake.
|
| | |/ /
| | | |
| | | |
| | | |
| | | | |
This check (AC_FUNC_STRERROR_R) was originally present in configure.in,
and was lost in the transition to CMake.
|
| |\ \ \
| | | | |
| | | | | |
Systray icon: Always toggle visibility when clicking & Add "Show/Hide" menu entry
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
It's customary for applications embedding themselves in the system tray
to offer a "Show/Hide window" menu entry on right-click, even for those
applications which offer the same functionality via a single left-click.
(Thanks to qBittorrent for the idea of using QMenu::aboutToShow to
update the label of this menu entry.)
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Left-clicking on the system tray icon should always result in toggling
the visibility of the main window; if the icon is visible and clickble,
then the window can always be hidden via --hide, or on startup via the
"Startup hidden in system tray" option. (In the latter case, this
previously resulted in a hidden and inaccessible window, as reported in
issue #121.)
|
| |\ \ \
| | | | |
| | | | | |
Fix QML binding loop in TextImageButton (used in incoming call popup)
|
| | |/ / |
|
| |\ \ \
| | | | |
| | | | | |
Respond immediately to a "quit" command while in CLI mode
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Now that we are no longer blocking on Readline calls, we can set up a
self-pipe that will let us break out of the Readline loop upon receiving
a "quit" command on our local socket, thus (finally) fixing issue #143.
(Thanks to https://stackoverflow.com/a/27662212 for the tip!)
Fixes #143
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
By only invoking rl_callback_read_char() when there is actual input on
stdin, we can now avoid blocking on Readline calls.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
When using Readline's callback interface, signals are (by default) only
captured within the duration of the rl_callback_read_char() call. It is
therefore expected of the application to capture SIGWINCH on its own,
and notify Readline of the fact.
(While it's possible to change this with rl_persistent_signal_handlers,
some signals, such as SIGHUP, will still only be *processed* during that
call, making it a somewhat unappealing solution. This all could be
alleviated by calling rl_check_signals() periodically, but that function
was only introduced in Readline 8.0, which is far too recent.)
Note that we are using signal(2) and not sigaction(2), depite the
various warnings that come with it, mostly because it's what is already
present in the codebase.
|
| | |/ /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When Twinkle is running in CLI mode and is sent a "quit" command to its
local socket, it will currently not respond immediately, but rather wait
until the next line has been read from its standard input (issue #143).
This is due to the blocking nature of readline(), which only returns
once a complete line has been read. Switching to Readline's "alternate"
callback interface is the first step in addressing this issue.
(As a bonus, this also fixes a bug where the line pointer returned by
readline() was not freed correctly.)
|
| |\ \ \
| | | | |
| | | | | |
Add twinkle-console option --sip-port --rtp-port
|
| | |/ / |
|