savoirfairelinux issueshttps://git.jami.net/groups/savoirfairelinux/-/issues2023-04-26T19:47:44Zhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1255Content of "member" bottomsheetdialog is poorly displayed2023-04-26T19:47:44ZPierre NicolasContent of "member" bottomsheetdialog is poorly displayed## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: your own -> 1d959f837a3ec3d1741083f711dac5f1f4fd3f86
## Steps to reproduce
- Can you reproduce the b...## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: your own -> 1d959f837a3ec3d1741083f711dac5f1f4fd3f86
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Go in a swarm conversation (three people at least)
2. From conversation settings, go in members tab
3. Click on a contact
- Actual result: A bottomsheetdialog opens but content is poorly displayed
## Additional information
![members_bottomsheetdialog_is_not_fully_implemented](/uploads/bfc38c91e402293f6a06830abacf77b2/members_bottomsheetdialog_is_not_fully_implemented.mp4)https://git.jami.net/savoirfairelinux/jami-project/-/issues/1242Screen Capture Protection for Jami: Prevent the OTHER Peer from taking screen...2023-04-25T07:22:40ZElysScreen Capture Protection for Jami: Prevent the OTHER Peer from taking screenshots and/or Screen recordingall operating systems:
Is it possible to prevent screen recording with another screen recording app (Windows 10, Android etc.) or hdmi capture card?
(https://medium.com/pallycon/how-netflix-protects-contents-part-2-33c1b60002a3 )
This ...all operating systems:
Is it possible to prevent screen recording with another screen recording app (Windows 10, Android etc.) or hdmi capture card?
(https://medium.com/pallycon/how-netflix-protects-contents-part-2-33c1b60002a3 )
This feature **should allow me** to enable an option that prevents **OTHER Jami user(s)** from taking screenshots and/or recording the screen - and they should not be able to disable that option.
For example like this messenger: https://9to5mac.com/2018/01/10/confide-messenger-screenshield-screenshot-prevention/
So nobody can record a video call (if you (sender/moderator/admin) enable this setting within Jami)?
Similar (this case just your own screen): https://www.opswat.com/products/oesis-framework/anti-screen-capture
Ideally I can also have an audio protection that does not allow OTHER peers to record the audio of a video/ audio-only call.https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/598Add privacy settings2023-04-24T17:11:39ZfinnAdd privacy settingsIt would be nice of Jami have these privacy settings:
* Screen lock
Lock Jami access with Android screen lock or fingerprint
* Screen lock inactivity timeout
Lock screen after inactivity a time limit (user can adjust this)
*...It would be nice of Jami have these privacy settings:
* Screen lock
Lock Jami access with Android screen lock or fingerprint
* Screen lock inactivity timeout
Lock screen after inactivity a time limit (user can adjust this)
* Block screenshots inside the app
* Incognito keyboard
User can request a incognito keyboard to disable personalized learning
Edit:
* Remove metadata from file
Remove metadata from file before sending it to the recipient.https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1253Impossible to establish ip2ip SIP call (at least android->desktop and desktop...2023-04-24T15:22:18ZPierre NicolasImpossible to establish ip2ip SIP call (at least android->desktop and desktop->android)## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Create and connect SIP account on Android (ip2ip UDP)
1...## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Create and connect SIP account on Android (ip2ip UDP)
1. Create and connect SIP account on Desktop (ip2ip UDP)
1. Connect your devices on same network
2. Try to make a ip2ip voice call from android, accept from desktop
- Actual result: Call connecting activity disappear without establishing call. Missed outgoing call appears on conversation. It continues ringing. Have to restart the app.
## Additional information
Looking through logs above make think it come from failing media negotiation.
Call logs from desktop to android :
```
[1682347249.158|40881|channeled_transport.cpp :186 ] [SIPS] process disconnect event
[1682347249.158|40880|ice_transport.cpp :1694] [ice:0x7fb0b8cd5570] ice send failed: Not found (PJ_ENOTFOUND)
[1682347249.158|40881|siptransport.cpp :209 ] pjsip transport@0x7fb184219c90 TLS to 142.170.109.216 -> DISCONNECTED
[1682347249.158|56389|siptransport.cpp :100 ] ~SipTransport@0x7faf08032e90 tr=0x7faf0809bfb0 rc=1
[1682347249.158|40880|tls_session.cpp :893 ] [TLS] transport failure on tx: errno = 5
[1682347249.159|56389|gitserver.cpp :477 ] GitServer destroyed
[1682347249.159|56389|siptransport.cpp :100 ] ~SipTransport@0x7fb184216bc0 tr=0x7fb184219c90 rc=1
[1682347249.159|56815|ice_transport.cpp :336 ] [ice:0x7fb0b8cd5570] destroying 0x7fb0b8dee168
[1682347249.659|56815|ice_transport.cpp :350 ] [ice:0x7fb0b8cd5570] Destroying ice_strans 0x7fb0b8dee168
[1682347250.159|56815|ice_transport.cpp :669 ] [ice:0x7fb0b8cd5570] Timer heap flushed after 500ms
[1682347250.159|56815|ice_transport.cpp :382 ] [ice:0x7fb0b8cd5570] done destroying
[1682347250.985|56392|sipvoiplink.cpp :892 ] [call:6027552833534573] INVITE@0x7fb0b9fe44c8 state changed to 4 (CONNECTING): cause=0, tsx@0x7fb14482de48 status 200 (OK)
[1682347250.985|56392|sipvoiplink.cpp :1121] [call:6027552833534573] INVITE@0x7fb0b9fe44c8 media update: status 220048
[1682347250.985|56392|sipvoiplink.cpp :1129] [call:6027552833534573] SDP offer failed, reason 415
[1682347250.985|56392|sipcall.cpp :756 ] [call:6027552833534573] Terminate SIP session
```
Call logs from desktop to android :
```
[1682347307.380|56356|manager.cpp :1047] Answer call 2214803505268786
[1682347307.380|56356|audiostream.cpp :162 ] Destroying stream with device alsa_output.pci-0000_0a_00.3.iec958-stereo
[1682347307.380|56356|sipcall.cpp :889 ] [call:2214803505268786] Answering incoming call with following media:
[1682347307.380|56356|sipcall.cpp :892 ] [call:2214803505268786] Media @0 - type [AUDIO] enabled [YES] muted [NO] label [audio_0] source [camera://046d_0821_0C411BC0] secure [NO]
[1682347307.380|56356|sipcall.cpp :2333] [call:2214803505268786] [audio_0] already un-muted
[1682347307.380|56356|sdp.cpp :604 ] Processing received offer for [Call ID 2214803505268786] with 1 media
[1682347307.380|56356|sdp.cpp :503 ] [SDP OFFER] Remote session:
v=0
o=localhost 3891336105 0 IN IP4 192.168.0.217
s=Call ID 7629516086156536
c=IN IP4 192.168.0.217
t=0 0
a=ice-ufrag:4825cdac
a=ice-pwd:3c5a176c6406842d7f98f7c5
m=audio 18770 RTP/SAVP 104 9 2 112 111 110 8 0 101
a=rtpmap:104 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:112 speex/32000
a=rtpmap:111 speex/16000
a=rtpmap:110 speex/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtcp:18771 IN IP4 192.168.0.217
a=sendrecv
a=candidate:Hc0a800d9 1 UDP 2130706431 192.168.0.217 48819 typ host
a=candidate:Ha556a7c0 1 UDP 2130706431 fe80::2c47:5fff:fe35:d569 51892 typ host
a=candidate:Hc0a800d9 2 UDP 2130706430 192.168.0.217 41158 typ host
a=candidate:Ha556a7c0 2 UDP 2130706430 fe80::2c47:5fff:fe35:d569 36779 typ host
[1682347307.380|56356|sdp.cpp :263 ] Add media description [type [AUDIO] enabled [YES] muted [NO] label [audio_0] source [camera://046d_0821_0C411BC0] secure [NO]]
[1682347307.381|56356|sdp.cpp :503 ] [SDP ANSWER] Local session:
v=0
o=atlas 3891336107 0 IN IP4 192.168.49.92
s=Call ID 2214803505268786
c=IN IP4 192.168.49.92
t=0 0
m=audio 26904 RTP/AVP 104 9 2 112 111 110 8 0 101
a=rtpmap:104 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:112 speex/32000
a=rtpmap:111 speex/16000
a=rtpmap:110 speex/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtcp:26905 IN IP4 192.168.49.92
a=sendrecv
[1682347307.381|56356|sipcall.cpp :3498] [call:2214803505268786] Setup ICE response
[1682347307.382|56356|ice_transport.cpp :331 ] [ice:0x25216e0] Creating IceTransport session for "2214803505268786"
[1682347307.382|56356|sipcall.cpp :3312] [call:2214803505268786] Successfully created media ICE transport [ice:0x5fe8c10]
[1682347307.382|56356|sipcall.cpp :3474] [call:2214803505268786] Setting ICE session [0x5fe8c10]
[1682347307.382|56356|sipcall.cpp :3334] [call:2214803505268786] Init media ICE transport
[1682347307.382|56356|ice_transport.cpp :406 ] [ice:0x25216e0] Initializing the session - comp count 2 - as a slave
[1682347307.382|56356|ice_transport.cpp :447 ] [ice:0x25216e0] Add host candidates
[1682347307.382|56356|ice_transport.cpp :906 ] [ice:0x25216e0] added host stun config for UDP transport
[1682347307.382|56356|ice_transport.cpp :906 ] [ice:0x25216e0] added host stun config for UDP transport
[1682347307.382|56356|ice_transport.cpp :906 ] [ice:0x25216e0] added host stun config for UDP transport
[1682347307.382|56356|ice_transport.cpp :989 ] [ice:0x25216e0] Add srflx reflexive candidates [192.168.49.92:21799 : 192.168.49.92:21799] for comp 1
[1682347307.382|56356|ice_transport.cpp :989 ] [ice:0x25216e0] Add srflx reflexive candidates [192.168.49.92:22898 : 192.168.49.92:22898] for comp 2
[1682347307.382|56356|ice_transport.cpp :469 ] [ice:0x25216e0] Added generic srflx candidates:
[1682347307.387|56356|ice_transport.cpp :707 ] [ice:0x25216e0] UDP initialization success
[1682347307.387|56356|ice_transport.cpp :787 ] [ice:0x25216e0] as slave
[1682347307.388|56356|ice_transport.cpp :881 ] [ice:0x25216e0] (local) ufrag=5d1495c7, pwd=29e8d5446da38dae04605688
[1682347307.388|56356|sipcall.cpp :1872] [call:2214803505268786] Add local attributes for ICE instance [0x5fe8c10]
[1682347307.388|56356|sipcall.cpp :1912] [call:2214803505268786] add ICE local candidates for media [type [AUDIO] enabled [YES] muted [NO] label [audio_0]] @ 0
[1682347307.388|56356|sipvoiplink.cpp :1121] [call:2214803505268786] INVITE@0x7fb0b8b329e8 media update: status 0
[1682347307.388|56356|sdp.cpp :139 ] Set active local session to [0x52c4148]. Was [(nil)]
[1682347307.388|56356|sdp.cpp :503 ] [SDP ANSWER] Local active session:
v=0
o=atlas 3891336107 1 IN IP4 192.168.49.92
s=Call ID 2214803505268786
c=IN IP4 192.168.49.92
t=0 0
a=ice-ufrag:5d1495c7
a=ice-pwd:29e8d5446da38dae04605688
m=audio 0 RTP/SAVP 104 9 2 112 111 110 8 0 101
[1682347307.388|56356|sdp.cpp :147 ] Set active remote session to [0x245f5a8]. Was [(nil)]
[1682347307.388|56356|sdp.cpp :503 ] [SDP ANSWER] Remote active session:
v=0
o=localhost 3891336105 0 IN IP4 192.168.0.217
s=Call ID 7629516086156536
c=IN IP4 192.168.0.217
t=0 0
a=ice-ufrag:4825cdac
a=ice-pwd:3c5a176c6406842d7f98f7c5
m=audio 18770 RTP/SAVP 104 9 2 112 111 110 8 0 101
a=rtpmap:104 opus/48000/2
a=rtpmap:9 G722/8000
a=rtpmap:2 G726-32/8000
a=rtpmap:112 speex/32000
a=rtpmap:111 speex/16000
a=rtpmap:110 speex/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=rtcp:18771 IN IP4 192.168.0.217
a=sendrecv
a=candidate:Hc0a800d9 1 UDP 2130706431 192.168.0.217 48819 typ host
a=candidate:Ha556a7c0 1 UDP 2130706431 fe80::2c47:5fff:fe35:d569 51892 typ host
a=candidate:Hc0a800d9 2 UDP 2130706430 192.168.0.217 41158 typ host
a=candidate:Ha556a7c0 2 UDP 2130706430 fe80::2c47:5fff:fe35:d569 36779 typ host
[1682347307.388|56356|sipcall.cpp :968 ] [call:2214803505268786] Answering with contact header: <sip:192.168.49.92:5062>
[1682347307.388|56356|sipvoiplink.cpp :892 ] [call:2214803505268786] INVITE@0x7fb0b8b329e8 state changed to 4 (CONNECTING): cause=0, tsx@0x7fb0b404aa98 status 200 (OK)
[1682347307.388|56356|call.cpp :241 ] [call:2214803505268786] state change 0/1, cnx 3/4, code 0
[1682347307.388|56356|call.cpp :275 ] [call:2214803505268786] emit client call state change CURRENT, code 0
[1682347307.389|56356|manager.cpp :603 ] ----- Switch current call id to '2214803505268786' -----
[1682347307.389|56389|sipcall.cpp :2605] [call:2214803505268786] Media negotiation complete
[1682347307.389|56356|manager.cpp :1614] Add audio to call 2214803505268786
[1682347307.389|56389|sipcall.cpp :2671] [call:2214803505268786] Starting ICE
[1682347307.389|56356|manager.cpp :1625] [call:2214803505268786] Attach audio
[1682347307.389|56356|ringbufferpool.cpp :174 ] Bind call 2214803505268786 to call audiolayer_id
[1682347307.389|56389|sdp.cpp :941 ] Media#0 is disabled. Media ports: local 0, remote 18770
[1682347307.389|56356|ringbufferpool.cpp :155 ] Bind rbuf '2214803505268786' to callid 'audiolayer_id'
[1682347307.389|56389|ice_transport.cpp :1231] [ice:0x25216e0] start failed: no remote candidates[1682347307.389|56356|ringbufferpool.cpp :155 ] Bind rbuf 'audiolayer_id' to callid '2214803505268786'
[1682347307.389|56389|sipcall.cpp :2702] [call:2214803505268786] ICE media failed to start
[1682347307.389|56356|audiostream.cpp :50 ] Playback: Creating stream with device (48000Hz, 2 chan
```https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/551Support multiple accounts and add feature to remove account2023-04-24T13:36:53ZMohamed FenjiroSupport multiple accounts and add feature to remove accounthttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/532Downloading directory settings2023-04-24T13:33:25ZAcetoneDownloading directory settingsI think it will be more comfortable for user to set path where client will put transferred files.I think it will be more comfortable for user to set path where client will put transferred files.Adrien BéraudAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/517user's "home" devices as (distributed) dht-proxies2023-04-24T13:31:21ZRing Thinguser's "home" devices as (distributed) dht-proxiesIt looks like every dht node is capable to be a dht proxy server.
Could the proxy capabilities be enabled somehow in non-mobile, not-battery-powered devices, to decentralize the proxy usage?
There could be a switch in the advanced acc...It looks like every dht node is capable to be a dht proxy server.
Could the proxy capabilities be enabled somehow in non-mobile, not-battery-powered devices, to decentralize the proxy usage?
There could be a switch in the advanced account settings to let the local node provide proxy server service to all known, or specific contacts.
-> Ideally, automatically allow dhtproxy access for all other devices linked to the own account, by default.
Also, next to the proxy server url setting, there could be a field "use a specific contact as proxy" (besides automatically trying all other devices linked to the own account as proxy, by default). The device may then look up the contact in the dht, and report success, if the peer has a good enough NAT status to provide proxy services.https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/506allow other apps to make Ring calls (intents of/for other apps to set up calls?)2023-04-24T13:29:34ZRing Thingallow other apps to make Ring calls (intents of/for other apps to set up calls?)For external (non-voip) apps, supporting Ring would require:
1) On the externally "calling", sending side, the possibility to fetch the own local ring id (from ring or address book), to include it in a call request sent through external...For external (non-voip) apps, supporting Ring would require:
1) On the externally "calling", sending side, the possibility to fetch the own local ring id (from ring or address book), to include it in a call request sent through external means.
2) On the receiving side, the possibility to pass an intent to Ring that lets Ring immediately start a call to the passed id.
---
Original text:
As calls go p2p, what would another app have to do to open ring and initiate a call?
https://github.com/nextcloud/talk-android/issues/96
Possibly you've already thought of making some sort of intent (sequence?) available to allow other apps to open calls.
If the other app can pass IPs or TURN server to meet, maybe this could even work in an ad-hoc signalling manner, without requiring a dht ring account id.https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/495[TV] Add a HD switch2023-04-21T20:03:39ZPierre Duchemin[TV] Add a HD switchLike Gnome client, AndroidTV version have to support HD video and to be able to switch between HD and SDLike Gnome client, AndroidTV version have to support HD video and to be able to switch between HD and SDhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1244Glitch when opening a media while using the keyboard2023-04-20T15:07:33ZPierre NicolasGlitch when opening a media while using the keyboard## Describe your environment
- Device model: Samsung Galaxy S20 5G SM-G981B/DS
- Android version: 13
- What build you are using: PlayStore Világfa 20230406-01
## Steps to reproduce
- Can you reproduce the bug: occasionally
- ...## Describe your environment
- Device model: Samsung Galaxy S20 5G SM-G981B/DS
- Android version: 13
- What build you are using: PlayStore Világfa 20230406-01
## Steps to reproduce
- Can you reproduce the bug: occasionally
- Steps:
1. Go in conversation
2. Open the keyboard
3. Open a media (tested with a picture)
4. Come back in the app
- Actual result: There is a glitch (few milliseconds without keyboard and then it shows up)
## Additional information
![openmediawhileusingkeyboardmakeglitch](/uploads/9a7c85de88220f52131534c45567a536/openmediawhileusingkeyboardmakeglitch.mp4)https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1248Glitch when long press a message while using the keyboard2023-04-20T15:03:17ZPierre NicolasGlitch when long press a message while using the keyboard## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: c0e7111b88570646765d3874306f894c39309a66
## Steps to reproduce
- Can you reproduce the bug: at will
...## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: c0e7111b88570646765d3874306f894c39309a66
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Go in conversation
2. Open the keyboard
2. Long press on message
3. Release focus
- Actual result: There is a glitch (few milliseconds without keyboard and then it shows up)
## Additional information
![glitch_when_selecting_message](/uploads/08de15a8098e9071caac83dc7aac1839/glitch_when_selecting_message.mp4)https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1249Impossible to dismiss edit dialog by pressing outside2023-04-20T14:55:54ZPierre NicolasImpossible to dismiss edit dialog by pressing outside## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: c0e7111b88570646765d3874306f894c39309a66
## Steps to reproduce
- Can you reproduce the bug: at will
...## Describe your environment
- Device model: Samsung Galaxy Tab S5e SM-T720
- Android version: 11
- What build you are using: c0e7111b88570646765d3874306f894c39309a66
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Go in conversation
2. Long press a message and click edit
2. Press outside
- Actual result: Impossible to cancel the edition dialog.
## Additional information
![unabletoexiteditbyclickingoutside](/uploads/ea4d0e089bc4d02efaad6b851c7a5bde/unabletoexiteditbyclickingoutside.mp4)https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/1046Closing device network crashes Jami with error: *** buffer overflow detected ...2023-04-17T17:40:34ZFrancewhoaClosing device network crashes Jami with error: *** buffer overflow detected ***: jami terminated## Describe your environment
- OS: Linux Debian 10 Buster
- GNOME: 3.30.2, spec: 1.2
- Qt runtime version: 6.2.3
- Jami package "libqt-jami": 6.2.3-2
- Jami repository: `https://dl.jami.net/stable/debian_10 jami/main amd64 jami amd64 <J...## Describe your environment
- OS: Linux Debian 10 Buster
- GNOME: 3.30.2, spec: 1.2
- Qt runtime version: 6.2.3
- Jami package "libqt-jami": 6.2.3-2
- Jami repository: `https://dl.jami.net/stable/debian_10 jami/main amd64 jami amd64 <JAME.VERSION>`
- Jami version: 20230323\.0\~dfsg1-1
- What build you are using: dl.jami.net stable
## Steps to reproduce
- Can you reproduce the bug: at will
- Steps:
1. Using Debian 10 Buster, using GNOME 3.30.2, using Network, open the internet
1. Open Jami 20230323\.0\~dfsg1-1 It successfully opens and works.
1. Using Debian 10 Buster, using GNOME 3.30.2, Using **Network**, **Close** (**Éteindre**) the internet connection.
This first screenshot below shows this.
![screenshot---1---closing_network---francewhoa---ksnip---2023-03-24---123330](/uploads/85b8c0f0a7582530c3e94bfce48ff1bb/screenshot---1---closing_network---francewhoa---ksnip---2023-03-24---123330.png)
This second screenshot below shows that the internet is now closed.
![screenshot---2---closed_network---francewhoa---ksnip---2023-03-24---123844](/uploads/b2d9f868d2de40e661e9434b2e5f8ebc/screenshot---2---closed_network---francewhoa---ksnip---2023-03-24---123844.png)
1. Leave Jami open. But leave the **Network** closed. Wait up to 24 hours. The duration you need to wait for depends on various factors. Such as, but not limited to, the resource of your device, CPU, memory, version, etc.
1. Somehow, Jami automatically crashes and exit. This is the first challenge. The needed end result is that Jami does not automatically crash and exit when the device network is closed or not available.
1. The second challenge is that, after Jami exited above, Jami did not notify the user that it exited. Let's called this first user John. His Jami account is a busy supplier reception with heavy traffic. So John presently believes that his Jami is still open. Because he did not close Jami. In other words, John waits for clients to contact him via Jami instant message (IM). Using another device, and another Jami, let's call this second user Jenn, a client, sends IM to John. John won't receive Jenn's IMs. Because his Jami crashed hours ago. But he still does not know this. John wonder why it is so quiet today at the usually busy reception. After a few days, complaints from clients are piling up. As John is not replied to their IM. Using another communication platform than Jami, someone notified John that somehow he is not replying to clients' IM. John investigate. Now realized that for days Jami was not open. Somehow it crashed. John re-open Jami, waves of pooled IMs are coming in. The needed end result is that if somehow Jami exits because of a `*** buffer overflow detected ***: jami terminated`. Before automatically closing itself, Jami somehow notify the user that it is doing so. For example, but not limited to, a popup window. Which communicate to the user the challenge about this `*** buffer overflow detected ***: jami terminated`. And asked the user to either click on `Try again to detect network` button or `Exit Jami` button.
## Additional information
This log shows Jami between its successfully opening to its clashes and exits.
```
Warning: Ignoring WAYLAND_DISPLAY on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
Using Qt runtime version: 6.2.3
"notify server name: gnome-shell, vendor: GNOME, version: 3.30.2, spec: 1.2"
qt.webenginecontext:
GLImplementation: desktop
Surface Type: OpenGL
Surface Profile: NoProfile
Surface Version: 3.1
Using Default SG Backend: yes
Using Software Dynamic GL: no
Using Angle: no
Init Parameters:
* application-name Jami
* browser-subprocess-path /usr/lib/libqt-jami/libexec/QtWebEngineProcess
* disable-features DnsOverHttpsUpgrade,ConsolidatedMovementXY,InstalledApp,BackgroundFetch,WebOTP,WebPayments,WebUSB,PictureInPicture
* disable-setuid-sandbox
* disable-speech-api
* disable-web-security
* enable-features NetworkServiceInProcess,TracingServiceInProcess
* enable-main-frame-before-activation
* enable-threaded-compositing
* gpu-preferences <MASKED.FOR.PRIVACY>=
* in-process-gpu
* lang fr-CA
* num-raster-threads 4
* single-process
* use-gl desktop
"Using locale: fr_CA"
09:53:30.620 os_core_unix.c !pjlib 2.12.1 for POSIX initialized
Daemon is running
No migration required
Syncing lrc accounts list with the daemon
Screen saver dbus interface: "org.freedesktop.ScreenSaver"
nmea: No serial ports found
Main window loaded using OpenGLRhi
Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
NetworkManager client initialized, version: 1.14.6 , daemon running: yes , networking enabled: yes
primary network connection: <MASKED.FOR.PRIVACY> default: yes
lookup name is INVALID: "e" "18a397bfea388197"
lookup name is INVALID: "em" "18a397bfea388197"
no primary network connection detected, check network settings
no primary network connection detected, check network settings
*** buffer overflow detected ***: jami terminated
Abandon
```
In the above log, <MASKED.FOR.PRIVACY> means that this data was manually removed for privacyhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/620MediaDemuxer: can lock on disconnect2023-04-17T14:09:50ZSébastien BlinMediaDemuxer: can lock on disconnect# Scenario
+ Plug a camera
+ Show it in media settings
+ Unplug
# Expected scenario
+ The UI should not freeze
# Current result
sometimes, the UI is freezing, blocking on destroying the video input.
# Backtrace
```
Thread 1 (Threa...# Scenario
+ Plug a camera
+ Show it in media settings
+ Unplug
# Expected scenario
+ The UI should not freeze
# Current result
sometimes, the UI is freezing, blocking on destroying the video input.
# Backtrace
```
Thread 1 (Thread 0x7fffe2a99d40 (LWP 2929030) "jami-qt"):
#0 0x00007fffeda179d7 in __pthread_clockjoin_ex () at /lib64/libpthread.so.0
#1 0x00007fffedffd687 in std::thread::join() () at /lib64/libstdc++.so.6
#2 0x00007fffec773cbb in jami::video::VideoInput::~VideoInput() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#3 0x00007fffec4cae2a in DRing::stopCamera() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#4 0x00007ffff7d17752 in VideoManagerInterface::stopCamera() (this=<optimized out>) at /home/amarok/Projects/jami/lrc/src/qtwrapper/videomanager_wrap.h:184
#5 0x00007ffff7d1cad0 in lrc::api::AVModel::setDeviceSettings(lrc::api::video::Settings&) (this=0x1496890, settings=...) at /home/amarok/Projects/jami/lrc/src/avmodel.cpp:293
#6 0x000000000049d42d in SettingsAdapter::set_Video_Settings_Rate_And_Resolution(QString const&, double, QString const&) (this=0xffb380, deviceId=..., rate=30, resolution=...) at /home/amarok/Projects/jami/client-qt/src/settingsadapter.cpp:193
#7 0x0000000000434c41 in SettingsAdapter::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=_o@entry=0xffb380, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=17, _a=_a@entry=0x7fffffff2710) at /home/amarok/Projects/jami/client-qt/build-local/jami-qt_autogen/UVLADIE3JM/moc_settingsadapter.cpp:708
#8 0x00000000004385ee in SettingsAdapter::qt_metacall(QMetaObject::Call, int, void**) (this=0xffb380, _c=QMetaObject::InvokeMetaMethod, _id=17, _a=0x7fffffff2710) at /home/amarok/Projects/jami/client-qt/build-local/jami-qt_autogen/UVLADIE3JM/moc_settingsadapter.cpp:969
#9 0x00007fffeeb08cf5 in QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const () at /lib64/libQt5Qml.so.5
#10 0x00007fffeea11149 in CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) () at /lib64/libQt5Qml.so.5
#11 0x00007fffeea123f7 in QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const () at /lib64/libQt5Qml.so.5
#12 0x00007fffeea38cce in QV4::Runtime::CallPropertyLookup::call(QV4::ExecutionEngine*, QV4::Value const&, unsigned int, QV4::Value*, int) () at /lib64/libQt5Qml.so.5
#13 0x00007fff4014bb4e in ()
#14 0x00007fffffff2d40 in ()
#15 0x0000000000000010 in ()
#16 0x00007fff4014b000 in ()
#17 0x00007fff4014bb8b in ()
#18 0x000000000088d800 in ()
#19 0x00007fffeea2ceba in QV4::Moth::VME::exec(QV4::CppStackFrame*, QV4::ExecutionEngine*) [clone .part.0] () at /lib64/libQt5Qml.so.5
#20 0x00007fffee9d7d48 in QV4::ArrowFunction::virtualCall(QV4::FunctionObject const*, QV4::Value const*, QV4::Value const*, int) () at /lib64/libQt5Qml.so.5
#21 0x00007fffeea3cc46 in QV4::Runtime::CallQmlContextPropertyLookup::call(QV4::ExecutionEngine*, unsigned int, QV4::Value*, int) () at /lib64/libQt5Qml.so.5
#22 0x00007fff40148084 in ()
#23 0x00007fffffff3010 in ()
#24 0x0000000000000000 in ()
Thread 224 (Thread 0x7ffcceffd640 (LWP 2929321) "jami-qt"):
#0 0x00007fffedcf35db in ioctl () at /lib64/libc.so.6
#1 0x00007fffec9c4759 in mmap_read_frame (pkt=0x7ffc6401f2c0, ctx=0x7ffc64002200) at libavdevice/v4l2.c:505
#2 v4l2_read_packet (ctx=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavdevice/v4l2.c:992
#3 0x00007fffeca222c2 in ff_read_packet (s=s@entry=0x7ffc64002200, pkt=pkt@entry=0x7ffc6401f2c0) at libavformat/utils.c:843
#4 0x00007fffeca22c3b in read_frame_internal (s=s@entry=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavformat/utils.c:1546
#5 0x00007fffeca23938 in av_read_frame (s=0x7ffc64002200, pkt=0x7ffc6401f2c0) at libavformat/utils.c:1750
#6 0x00007fffec413fa7 in jami::MediaDemuxer::decode() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#7 0x00007fffec76f6a9 in jami::video::VideoInput::captureFrame() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#8 0x00007fffec774bcb in jami::video::VideoInput::process() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#9 0x00007fffec32602d in jami::ThreadLoop::mainloop(std::thread::id&, std::function<bool ()>, std::function<void ()>, std::function<void ()>) () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#10 0x00007fffec326758 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (jami::ThreadLoop::*)(std::thread::id&, std::function<bool ()>, std::function<void ()>, std::function<void ()>), jami::ThreadLoop*, std::reference_wrapper<std::thread::id>, std::function<bool ()>, std::function<void ()>, std::function<void ()> > > >::_M_run() () at /home/amarok/Projects/jami/daemon/src/.libs/libring.so.0
#11 0x00007fffedffd444 in execute_native_thread_routine () at /lib64/libstdc++.so.6
#12 0x00007fffeda163f9 in start_thread () at /lib64/libpthread.so.0
#13 0x00007fffedcfcb53 in clone () at /lib64/libc.so.6
```
av_read_frame can block forever, causing the VideoInput to wait.Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1243Open media from conversation also show up the keyboard2023-04-17T13:51:47ZPierre NicolasOpen media from conversation also show up the keyboard## Describe your environment
- Device model: Samsung Galaxy S20 5G SM-G981B/DS
- Android version: 13
- What build you are using: PlayStore Világfa 20230406-01
## Steps to reproduce
- Can you reproduce the bug: occasionally
- ...## Describe your environment
- Device model: Samsung Galaxy S20 5G SM-G981B/DS
- Android version: 13
- What build you are using: PlayStore Világfa 20230406-01
## Steps to reproduce
- Can you reproduce the bug: occasionally
- Steps:
1. Go in conversation
2. Open a media (tested with a picture)
3. Come back in the app
- Actual result: The keyboard show up
## Additional information
![openmediaalsoopenkeyboard](/uploads/8217f35596912ca8734977486ea86930/openmediaalsoopenkeyboard.mp4)https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1242Perceptual bug: timestamp should be absolute instead of relative in contacts ...2023-04-15T07:22:31ZPierre MétrasPerceptual bug: timestamp should be absolute instead of relative in contacts listI don't understand when the contacts list display is refreshed. For a week, my contacts showed the bug I'm reporting, while it's no more the case presently because the contacts lists has been refreshed...
In the contacts list, besides e...I don't understand when the contacts list display is refreshed. For a week, my contacts showed the bug I'm reporting, while it's no more the case presently because the contacts lists has been refreshed...
In the contacts list, besides each contact icon, there are 2 lines:
1. The display name of the contact
2. A **relative timestamp** with he last message in the discussion with that contact.
The timestamp is relative (example: "2 hours ago" or "last week"), instead of absolute (example: 2023-04-14 12:36).
I've been using my phone with Jami Android client and the contacts list displayed "**36s ago**, last message..." or "**4 hours ago**, last message..." still for a week. Because this list is not regularly updated, one can feel that the Jami application has frozen, asking himself why the display does not refresh?
If it's normal not to regularly update the contacts list, it would be more natural and less worrying for the user to use absolute timestamps because they are always correct.
## Describe your environment
Please specify the following:
- Jami version: Vilagfa 20230406-01
- Device model: Samsung Galaxy A53
- Android version: 13
- What build you are using: Play Store
## Steps to reproduce
- Can you reproduce the bug: occasionally
- Steps:
1. Send a message to a contact
2. Go back to the contacts list
3. Besides the contact it should display "**A few seconds ago**, the message..."
4. Wait a few minutes, it should still display "**A few seconds ago**, ..." instead of "A few minutes ago, ..."
- Actual result: Incorrect timestamp
- Expected result: Correct relative timestamp regularly updated, or absolute timestamp.
## Additional information
The reason my Android phone updated the contact list and does not exhibit the bug presently is perhaps because I started my PC with Jamy to report the bug and the two devices synchronized...https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/827Segv when stopping screen-sharing in a video conference2023-04-14T15:06:21ZSébastien BlinSegv when stopping screen-sharing in a video conference# Scenario
+ Call a rdv
+ Start screen sharing
+ Stop screen sharing
# Bug 1
+ Crash from sender
```
(gdb) bt
#0 0x00007fffe84c63f4 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () at /lib64/libstdc++.so.6
#1 0x00007fff...# Scenario
+ Call a rdv
+ Start screen sharing
+ Stop screen sharing
# Bug 1
+ Crash from sender
```
(gdb) bt
#0 0x00007fffe84c63f4 in std::_Rb_tree_increment(std::_Rb_tree_node_base const*) () at /lib64/libstdc++.so.6
#1 0x00007fffe90f4ce3 in std::_Rb_tree_const_iterator<jami::Observable<std::shared_ptr<libjami::MediaFrame> >*>::operator++() (this=0x7fffffff6c98) at /usr/include/c++/12/bits/stl_tree.h:368
#2 0x00007fffe90f3f7c in jami::MediaRecorder::StreamObserver::~StreamObserver() (this=0x7ffec8cb8660, __in_chrg=<optimized out>) at media/media_recorder.cpp:74
#3 0x00007fffe90f3ffc in jami::MediaRecorder::StreamObserver::~StreamObserver() (this=0x7ffec8cb8660, __in_chrg=<optimized out>) at media/media_recorder.cpp:77
#4 0x00007fffe90f67f0 in std::default_delete<jami::MediaRecorder::StreamObserver>::operator()(jami::MediaRecorder::StreamObserver*) const (this=0x7ffec8cbbf30, __ptr=0x7ffec8cb8660) at /usr/include/c++/12/bits/unique_ptr.h:95
#5 0x00007fffe90f5584 in std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> >::~unique_ptr() (this=0x7ffec8cbbf30, __in_chrg=<optimized out>)
at /usr/include/c++/12/bits/unique_ptr.h:396
#6 0x00007fffe90f98f2 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >::~pair() (this=0x7ffec8cbbf10, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/stl_pair.h:185
#7 0x00007fffe90f991e in std::__new_allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >*) (this=0x5410250, __p=0x7ffec8cbbf10) at /usr/include/c++/12/bits/new_allocator.h:181
#8 0x00007fffe90f938f in std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > > >::destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >(std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >&, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >*) (__a=..., __p=0x7ffec8cbbf10) at /usr/include/c++/12/bits/alloc_traits.h:535
#9 0x00007fffe90f8b7d in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::_M_destroy_node(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >*) (this=0x5410250, __p=0x7ffec8cbbef0)
at /usr/include/c++/12/bits/stl_tree.h:623
#10 0x00007fffe90f771d in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::_M_drop_node(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >*) (this=0x5410250, __p=0x7ffec8cbbef0)
at /usr/include/c++/12/bits/stl_tree.h:631
#11 0x00007fffe90f805c in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::_M_erase_aux(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >)
(this=0x5410250, __position={first = "v:remote", second = std::unique_ptr<jami::MediaRecorder::StreamObserver> = {get() = 0x7ffec8cb8660}}) at /usr/include/c++/12/bits/stl_tree.h:2495
#12 0x00007fffe90f6aab in std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > >, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::erase[abi:cxx11](std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >)
(this=0x5410250, __position={first = "v:remote", second = std::unique_ptr<jami::MediaRecorder::StreamObserver> = {get() = 0x7ffec8cb8660}}) at /usr/include/c++/12/bits/stl_tree.h:1209
#13 0x00007fffe90f57a7 in std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > > >::erase[abi:cxx11](std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::unique_ptr<jami::MediaRecorder::StreamObserver, std::default_delete<jami::MediaRecorder::StreamObserver> > > >) (this=0x5410250, __position={first = "v:remote", second = std::unique_ptr<jami::MediaRecorder::StreamObserver> = {get() = 0x7ffec8cb8660}})
at /usr/include/c++/12/bits/stl_map.h:1086
#14 0x00007fffe90ee5e1 in jami::MediaRecorder::removeStream(jami::MediaStream const&) (this=0x54101a0, ms=...) at media/media_recorder.cpp:294
#15 0x00007fffe917c30b in jami::video::VideoRtpSession::deinitRecorder() (this=0xa2b12e0) at ./media/video/video_rtp_session.cpp:779
#16 0x00007fffe917844e in jami::video::VideoRtpSession::~VideoRtpSession() (this=0xa2b12e0, __in_chrg=<optimized out>) at ./media/video/video_rtp_session.cpp:80
#17 0x00007fffe9219a18 in std::_Destroy<jami::video::VideoRtpSession>(jami::video::VideoRtpSession*) (__pointer=0xa2b12e0) at /usr/include/c++/12/bits/stl_construct.h:151
#18 0x00007fffe92199bc in std::allocator_traits<std::allocator<void> >::destroy<jami::video::VideoRtpSession>(std::allocator<void>&, jami::video::VideoRtpSession*) (__p=0xa2b12e0) at /usr/include/c++/12/bits/alloc_traits.h:648
#19 0x00007fffe9219715 in std::_Sp_counted_ptr_inplace<jami::video::VideoRtpSession, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() (this=0xa2b12d0) at /usr/include/c++/12/bits/shared_ptr_base.h:613
#20 0x00007fffe8ca8f87 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() (this=0xa2b12d0) at /usr/include/c++/12/bits/shared_ptr_base.h:346
#21 0x00007fffe8cac3e5 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() (this=0x88f1b38, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/shared_ptr_base.h:1071
--Type <RET> for more, q to quit, c to continue without paging--
#22 0x00007fffe91be4b2 in std::__shared_ptr<jami::RtpSession, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() (this=0x88f1b30, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/shared_ptr_base.h:1524
#23 0x00007fffe91c3f4c in std::shared_ptr<jami::RtpSession>::~shared_ptr() (this=0x88f1b30, __in_chrg=<optimized out>) at /usr/include/c++/12/bits/shared_ptr.h:175
#24 0x00007fffe920e3d6 in jami::SIPCall::RtpStream::~RtpStream() (this=0x88f1b30, __in_chrg=<optimized out>) at ./sip/sipcall.h:88
#25 0x00007fffe9216931 in std::_Destroy<jami::SIPCall::RtpStream>(jami::SIPCall::RtpStream*) (__pointer=0x88f1b30) at /usr/include/c++/12/bits/stl_construct.h:151
#26 0x00007fffe921597c in std::_Destroy_aux<false>::__destroy<jami::SIPCall::RtpStream*>(jami::SIPCall::RtpStream*, jami::SIPCall::RtpStream*) (__first=0x88f1b30, __last=0x88f1b70) at /usr/include/c++/12/bits/stl_construct.h:163
#27 0x00007fffe9213d02 in std::_Destroy<jami::SIPCall::RtpStream*>(jami::SIPCall::RtpStream*, jami::SIPCall::RtpStream*) (__first=0x88f1b30, __last=0x88f1b70) at /usr/include/c++/12/bits/stl_construct.h:196
#28 0x00007fffe9211533 in std::_Destroy<jami::SIPCall::RtpStream*, jami::SIPCall::RtpStream>(jami::SIPCall::RtpStream*, jami::SIPCall::RtpStream*, std::allocator<jami::SIPCall::RtpStream>&) (__first=0x88f1b30, __last=0x88f1b70)
at /usr/include/c++/12/bits/alloc_traits.h:850
#29 0x00007fffe92122d1 in std::vector<jami::SIPCall::RtpStream, std::allocator<jami::SIPCall::RtpStream> >::_M_erase_at_end(jami::SIPCall::RtpStream*) (this=0x5612378, __pos=0x88f1b30) at /usr/include/c++/12/bits/stl_vector.h:1932
#30 0x00007fffe920fc31 in std::vector<jami::SIPCall::RtpStream, std::allocator<jami::SIPCall::RtpStream> >::resize(unsigned long) (this=0x5612378, __new_size=2) at /usr/include/c++/12/bits/stl_vector.h:1013
#31 0x00007fffe91fca76 in jami::SIPCall::updateAllMediaStreams(std::vector<jami::MediaAttribute, std::allocator<jami::MediaAttribute> > const&, bool)
(this=0x5611fa0, mediaAttrList=std::vector of length 2, capacity 2 = {...}, isRemote=false) at ./sip/sipcall.cpp:2446
#32 0x00007fffe91fd4fc in jami::SIPCall::requestMediaChange(std::vector<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > > const&) (this=0x5611fa0, mediaList=std::vector of length 2, capacity 2 = {...}) at ./sip/sipcall.cpp:2591
#33 0x00007fffe8dad0e8 in libjami::requestMediaChange(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > > const&) (accountId="8205d13d4d847ca4", callId="5271111606844474", mediaList=std::vector of length 2, capacity 2 = {...}) at client/callmanager.cpp:77
#34 0x000000000055f78f in CallManagerInterface::requestMediaChange(QString const&, QString const&, QList<QMap<QString, QString> > const&) (accountId=..., callId=..., mediaList=<optimized out>, this=<optimized out>)
at /home/amarok/Projects/jami/client-qt/src/libclient/dbus/../qtwrapper/callmanager_wrap.h:426
#35 0x0000000000569a12 in lrc::api::CallModel::removeMedia(QString const&, QString const&, QString const&, bool) (this=this@entry=0x247e070, callId=..., mediaType=..., type=..., muteCamera=muteCamera@entry=false)
at /home/amarok/Projects/jami/client-qt/src/libclient/callmodel.cpp:658
#36 0x00000000004bda4a in AvAdapter::stopSharing(QString const&) (this=<optimized out>, source=<optimized out>) at /home/amarok/Projects/jami/client-qt/src/app/avadapter.cpp:299
#37 0x0000000000469bc0 in AvAdapter::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=_o@entry=0x24fc8e0, _c=_c@entry=QMetaObject::InvokeMetaMethod, _id=_id@entry=25, _a=_a@entry=0x7fffffff7d48)
at /home/amarok/Projects/jami/client-qt/build/jami_autogen/ISMKEKEPX5/moc_avadapter.cpp:268
#38 0x0000000000472c60 in AvAdapter::qt_metacall(QMetaObject::Call, int, void**) (this=0x24fc8e0, _c=QMetaObject::InvokeMetaMethod, _id=25, _a=0x7fffffff7d48)
at /home/amarok/Projects/jami/client-qt/build/jami_autogen/ISMKEKEPX5/moc_avadapter.cpp:395
#39 0x00007fffec538fc3 in QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#40 0x00007fffec42404c in CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#41 0x00007fffec42506d in QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#42 0x00007fffec478bbc in QV4::Moth::VME::interpret(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*, char const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#43 0x00007fffec47ebbf in QV4::Moth::VME::exec(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#44 0x00007fffec3d5fda in QV4::Function::call(QV4::Value const*, QV4::Value const*, int, QV4::ExecutionContext const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#45 0x00007fffec3d61b1 in QV4::Function::call(QV4::Value const*, void**, QMetaType const*, int, QV4::ExecutionContext const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#46 0x00007fffec500933 in QQmlJavaScriptExpression::evaluate(void**, QMetaType const*, int) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#47 0x00007fffec4b9587 in QQmlBoundSignalExpression::evaluate(void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#48 0x00007fffec4ba028 in QQmlBoundSignal_callback(QQmlNotifierEndpoint*, void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#49 0x00007fffec52468a in QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#50 0x00007fffea9c1074 in void doActivate<false>(QObject*, int, void**) () at /usr/lib64/qt-jami/lib/libQt6Core.so.6
#51 0x00007fffec5c91f6 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#52 0x00007fffec538fc3 in QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#53 0x00007fffec422b31 in CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#54 0x00007fffec42506d in QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#55 0x00007fffec478bbc in QV4::Moth::VME::interpret(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*, char const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#56 0x00007fffec47ebbf in QV4::Moth::VME::exec(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#57 0x00007fffec3d5fda in QV4::Function::call(QV4::Value const*, QV4::Value const*, int, QV4::ExecutionContext const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#58 0x00007fffec3d61b1 in QV4::Function::call(QV4::Value const*, void**, QMetaType const*, int, QV4::ExecutionContext const*) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#59 0x00007fffec500933 in QQmlJavaScriptExpression::evaluate(void**, QMetaType const*, int) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#60 0x00007fffec4b9587 in QQmlBoundSignalExpression::evaluate(void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
#61 0x00007fffec4ba028 in QQmlBoundSignal_callback(QQmlNotifierEndpoint*, void**) () at /usr/lib64/qt-jami/lib/libQt6Qml.so.6
```
# Bug 2
+ Conference show 2 rdv-***
# Observation
https://review.jami.net/c/jami-daemon/+/23689 seems to be a regression fromKateryna KostiukKateryna Kostiukhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/1239SIP call on android: plain RTP session impossible (intentionally unencrypted ...2023-04-14T12:29:07ZTobias HuberSIP call on android: plain RTP session impossible (intentionally unencrypted LAN-PBX)Hi, since Android 13 doesn't offer native SIP support anymore, I thought this great Jami thing could step in...
Unfortunately, it was quiet inconvenient to get at least some idea why this doesn't work with my LAN/VPN PBX
_(Inconvenience...Hi, since Android 13 doesn't offer native SIP support anymore, I thought this great Jami thing could step in...
Unfortunately, it was quiet inconvenient to get at least some idea why this doesn't work with my LAN/VPN PBX
_(Inconvenience: LAN/VPN PBX is asterisk 1.6, which doesn't use identical string for account identification and user authentication; the user corresponding to the password for authentication is different to the name of the SIP account.
It's possible to set Jami up that way, but it's quiet hidden - besides some more not so minor UI nits on android, but that will be a different issue report.)_
I checked that all Security->Security switches are off (SRTP and TLS transport).
1.) Initiating (outgoing) call fails because:
`"Rejecting secure audio stream without encryption details: audio 19686 RTP/SAVP 104 9 2 112 111 110 8 0 101"`
> <--- SIP read from UDP:172.21.97.226:5060 ---> [115/1865]
> INVITE sip:11@pbx.example.net SIP/2.0
> Via: SIP/2.0/UDP 172.21.97.226:5060;rport;branch=z9hG4bKPjaf1c522c-6e92-4539-b899-15c2bad55ad1
> Max-Forwards: 70
> From: <sip:tobimob_line1@pbx.example.net>;tag=b2110c22-6e14-4381-8a99-cc1e40d3872f
> To: <sip:11@pbx.example.net>
> Contact: <sip:tobimob_line1@172.21.97.226:5060>
> Call-ID: 4b970369-1b13-44da-b798-3a74f51d8c39
> CSeq: 629 INVITE
> Subject: Phone call
> Allow: SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, OPTIONS, MESSAGE, PUBLISH
> Supported: replaces
> User-Agent: Jami Daemon 13.7.0 (android)
> Authorization: Digest username="tobi.huber", realm="pbx.example.net", nonce="3b54e054", uri="sip:11@pbx.example.net", response="4070f25aadda2536ee24058551dfb64
> 1", algorithm=MD5
> Content-Type: application/sdp
> Content-Length: 1047
>
> v=0
> o=localhost 3890394360 0 IN IP4 172.21.97.226
> s=Call ID 8706183892147327
> c=IN IP4 172.21.97.226
> t=0 0
> a=ice-ufrag:42a09c4e
> a=ice-pwd:04afb39763f13c7f32a67b91
> m=aud--- (15 headers 27 lines) ---
> Sending to 172.21.97.226:5060 (no NAT)
> Using INVITE request as basis request - 4b970369-1b13-44da-b798-3a74f51d8c39
> Found peer 'tobimob_line1' for 'tobimob_line1' from 172.21.97.226:5060
> Found RTP audio format 104
> Found RTP audio format 9
> Found RTP audio format 2
> Found RTP audio format 112
> Found RTP audio format 111
> Found RTP audio format 110
> Found RTP audio format 8
> Found RTP audio format 0
> Found RTP audio format 101
> Found unknown media description format opus for ID 104
> Found audio description format G722 for ID 9
> Found audio description format G726-32 for ID 2
> Found audio description format speex for ID 112
> Found audio description format speex for ID 111
> Found audio description format speex for ID 110
> Found audio description format PCMA for ID 8
> Found audio description format PCMU for ID 0
> Found audio description format telephone-event for ID 101
[Apr 13 19:05:59] ERROR[101987][C-000005d5]: chan_sip.c:33575 int setup_srtp(struct sip_srtp **): No SRTP module loaded, can't setup SRTP session.
[Apr 13 19:05:59] WARNING[101987][C-000005d5]: chan_sip.c:10417 int process_sdp(struct sip_pvt *, struct sip_request *, int): Rejecting secure audio stream witho
ut encryption details: audio 19686 RTP/SAVP 104 9 2 112 111 110 8 0 101
Why does it send RTP/SAVP although I disabled SRTP?
2.) Incoming call signalling works, but not possible to establish RTP session:
```
"Ignoring audio media offer because port number is zero" and
"Failing due to no acceptable offer found"
```
Ringing:
> <--- SIP read from UDP:172.21.97.226:5060 --->
> SIP/2.0 180 Ringing
> Via: SIP/2.0/UDP 172.21.98.12:5060;received=172.21.98.12;branch=z9hG4bK0d2bf1b6
> Call-ID: 1e4bf56a62264ba6792450e4506bed52@pbx.example.net
> From: "T. Huber (22)" <sip:thbuero@pbx.example.net>;tag=as48fb14ca
> To: <sip:tobimob_line1@172.21.97.226>;tag=6c456d21-e6ae-4c85-bf04-da0aaf56e758
> CSeq: 102 INVITE
> User-Agent: Jami Daemon 13.7.0 (android)
> Allow: SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, OPTIONS, MESSAGE, PUBLISH
> Contact: <sip:tobimob_line1@172.21.97.226:5060>
... (snipped)
Accepting call on Jami:
> <--- SIP read from UDP:172.21.97.226:5060 --->
> SIP/2.0 200 OK
> Via: SIP/2.0/UDP 172.21.98.12:5060;received=172.21.98.12;branch=z9hG4bK0d2bf1b6
> Call-ID: 1e4bf56a62264ba6792450e4506bed52@pbx.example.net
> From: "T. Huber (22)" <sip:thbuero@pbx.example.net>;tag=as48fb14ca
> To: <sip:tobimob_line1@172.21.97.226>;tag=6c456d21-e6ae-4c85-bf04-da0aaf56e758
> CSeq: 102 INVITE
> User-Agent: Jami Daemon 13.7.0 (android)
> Allow: SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, OPTIONS, MESSAGE, PUBLISH
> Supported: replaces
> Contact: <sip:tobimob_line1@172.21.97.226:5060>
> Content-Type: application/sdp
> Content-Length: 142
>
> v=0
> o=localhost 3890395686 1 IN IP4 172.21.97.226
> s=Call ID 5890041505306313
> c=IN IP4 172.21.97.226
> t=0 0
> m=audio 0 RTP/AVP 9 8 0 3 101
> <------------->
chan_sip.c:10008 int process_sdp(struct sip_pvt *, struct sip_request *, int): Ignoring audio media offer [5/1992]
port number is zero
chan_sip.c:10438 int process_sdp(struct sip_pvt *, struct sip_request *, int): Failing due to no acceptabl[3/1992]
found
**Here's a working internal call, where sipdroid is the user agent on the same phone:**
> <--- SIP read from UDP:172.21.97.226:40739 --->
> SIP/2.0 180 Ringing
> Via: SIP/2.0/UDP 172.21.98.12:5060;branch=z9hG4bK04f5274c
> To: <sip:tobimob_line1@10.26.229.169:40739;transport=udp>;tag=fb8b4ff3c7a73ee8
> From: "T. Huber (22)" <sip:thbuero@pbx.example.net>;tag=as686012bd
> Call-ID: 3547fb4e68213eb90d8295ae221e36ea@pbx.example.net
> CSeq: 102 INVITE
> Server: Sipdroid/6.3 beta/Pixel 7
> Content-Length: 198
> Content-Type: application/sdp
... (snipped)
Accepting call on SIPdroid:
> SIP/2.0 200 OK
> Via: SIP/2.0/UDP 172.21.98.12:5060;branch=z9hG4bK04f5274c
> To: <sip:tobimob_line1@10.26.229.169:40739;transport=udp>;tag=fb8b4ff3c7a73ee8
> From: "T. Huber (22)" <sip:thbuero@pbx.example.net>;tag=as686012bd
> Call-ID: 3547fb4e68213eb90d8295ae221e36ea@pbx.example.net
> CSeq: 102 INVITE
> Contact: <sip:tobimob_line1@10.26.229.169:40739;transport=udp>
> Server: Sipdroid/6.3 beta/Pixel 7
> Content-Length: 198
> Content-Type: application/sdp
>
> v=0
> o=tobimob_line1@pbx.example.net 0 0 IN IP4 10.26.229.169
> s=Session SIP/SDP
> c=IN IP4 10.26.229.169
> t=0 0
> m=audio 21000 RTP/AVP 9 101
> a=rtpmap:9 G722/8000
> a=rtpmap:101 telephone-event/8000
> <------------->
**Significant difference here is "m=audio ...." lines.**
With SIPdroid (the working incomming call), it reads
> m=audio 21000 RTP/AVP 9 101
while with jami (not working)
> m=audio 0 RTP/AVP 9 8 0 3 101
I'd very much appreciate if somebody could take care and bring back originating strenghts of Jami in that it's usable as a working SIP UA - for plain RTP too!
Especially due to dropped native SIP support in recent android versions!
The android settings UI is broken too, like already mentioned, but ther's the workaround to use it in landscape mode, which makes it possible to sroll the account-enabler switch out of overlapping tab selection area... Will tell in a different issue report.
Thanks in advance,
-Tobihttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/798Swarm: add API to promote someone to an administrator2023-04-13T20:11:10ZSébastien BlinSwarm: add API to promote someone to an administrator# Goal
Because an administrator can leave, the swarm will have no administrator at the end. Make it possible for an administrator to promote someone else.
# TODO
+ Implement promotion/demotion (NOTE: no demotion if 1 admin) in the dae...# Goal
Because an administrator can leave, the swarm will have no administrator at the end. Make it possible for an administrator to promote someone else.
# TODO
+ Implement promotion/demotion (NOTE: no demotion if 1 admin) in the daemon
+ Validate an API
+ Add feature in clients
+ Check demotion2023-09-30https://git.jami.net/savoirfairelinux/jami-client-android/-/issues/677name server setting is missing2023-04-07T20:27:55ZGuillaume Hellername server setting is missingthe name server address can not be changed from the Android advanced settingsthe name server address can not be changed from the Android advanced settings