savoirfairelinux issueshttps://git.jami.net/groups/savoirfairelinux/-/issues2021-07-28T16:05:38Zhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/595Swarm 1:1 detect contact left2021-07-28T16:05:38ZSébastien BlinSwarm 1:1 detect contact left+ Change repo to include /invited
+ "Contact left" should be visible in getConversationMembers()
+ Add test
+ DO client changes+ Change repo to include /invited
+ "Contact left" should be visible in getConversationMembers()
+ Add test
+ DO client changesSwarm-chatSébastien BlinAndreas TraczykSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/591Swarm: Add syncing conversations2021-07-28T17:15:46ZSébastien BlinSwarm: Add syncing conversations+ convInfos_ works? => Test case replace convInfos_
+ Add to convInfo when accepting, not when cloned
+ getConversations() must return syncing conversations
+ conversationInfos() must return syncing:true
+ add tests
+ update doc
+ Add p...+ convInfos_ works? => Test case replace convInfos_
+ Add to convInfo when accepting, not when cloned
+ getConversations() must return syncing conversations
+ conversationInfos() must return syncing:true
+ add tests
+ update doc
+ Add patch for LRCSwarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/592Swarm: move last read per participant daemon' side2021-07-28T17:15:46ZSébastien BlinSwarm: move last read per participant daemon' side+ getMembers() should return last read
+ react to messageDisplayed/setMessageDisplayed
+ Add test
+ Add method to compute how many messages between two interactions
+ Update LRC
+ Update doc+ getMembers() should return last read
+ react to messageDisplayed/setMessageDisplayed
+ Add test
+ Add method to compute how many messages between two interactions
+ Update LRC
+ Update docSwarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/596Swarm: removeContact should remove syncing conversations2021-07-28T21:14:57ZSébastien BlinSwarm: removeContact should remove syncing conversations+ Fix bug
+ Add test+ Fix bug
+ Add testSwarm-chatSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-libclient/-/issues/485Links surrounded by <> (e.g. "<https://git.jami.net>") are not linkified prop...2021-07-29T13:03:08ZMaxime DevosLinks surrounded by <> (e.g. "<https://git.jami.net>") are not linkified properly.I type "text <https://git.jami.net> text" in the chat.
The following appears in the area above the input field:
text <https://git.jami.net>; text
where "<https://git.jami.net>;" is a hyperlink pointing to "<https://git.jami.net>;" (w...I type "text <https://git.jami.net> text" in the chat.
The following appears in the area above the input field:
text <https://git.jami.net>; text
where "<https://git.jami.net>;" is a hyperlink pointing to "<https://git.jami.net>;" (without the " quotes).
There are two problems here:
- the ";" should not be present
- the ">" should not be part of the link
I noticed "linkify" is used, and typing the same input in https://soapbox.github.io/linkifyjs/ results in properly linkified text. So maybe the bundled copy of linkify needs to be updated? Looking at this git repo, the copy of 'linkify' appears to be from 2016 and there has been a release of linkify in 2020 (v2.1.9).
I'm using "jami-gnome" (version 20210606.1.e2f9490 as packaged in Guix).https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/580Agent: Replace YAML configuration with scripting language2021-07-30T13:19:57ZOlivier DionAgent: Replace YAML configuration with scripting languageOlivier DionOlivier Dionhttps://git.jami.net/savoirfairelinux/jami-client-gnome/-/issues/1271Links surrounded by <> (e.g. "<https://git.jami.net>") are not linkified prop...2021-07-30T14:46:21ZMaxime DevosLinks surrounded by <> (e.g. "<https://git.jami.net>") are not linkified properly.I type "text \<https://git.jami.net> text" in the chat.
The following appears in the area above the input field:
text \<https://git.jami.net>; text
where "\<https://git.jami.net>;" is a hyperlink pointing to "\<https://git.jami.net>;...I type "text \<https://git.jami.net> text" in the chat.
The following appears in the area above the input field:
text \<https://git.jami.net>; text
where "\<https://git.jami.net>;" is a hyperlink pointing to "\<https://git.jami.net>;" (without the " quotes).
There are two problems here:
- the ";" should not be present
- the ">" should not be part of the link
I noticed "linkify" is used, and typing the same input in https://soapbox.github.io/linkifyjs/ results in properly linkified text. So maybe the bundled copy of linkify needs to be updated? Looking at this git repo, the copy of 'linkify' appears to be from 2016 and there has been a release of linkify in 2020 (v2.1.9).
I'm using "jami-gnome" (version 20210606.1.e2f9490 as packaged in Guix).
(Edit: apparently \<http://...> is Markdown mark-up, so I added a few \\, and now this text is formatted properly (including the <>).)https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/579Uses long key instead sha1 for devices2021-07-30T15:06:28ZSébastien BlinUses long key instead sha1 for devicesSébastien BlinAdrien BéraudSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/597Regression 2.11 - should stop in less than 30 secs if turn fails2021-07-30T20:03:34ZSébastien BlinRegression 2.11 - should stop in less than 30 secs if turn fails```cpp
void
IceTest::testFail()
{
const auto& addr4 = dht_->getPublicAddress(AF_INET);
CPPUNIT_ASSERT(addr4.size() != 0);
CPPUNIT_ASSERT(turnV4_);
IceTransportOptions ice_config;
ice_config.upnpEnable = true;
ice_...```cpp
void
IceTest::testFail()
{
const auto& addr4 = dht_->getPublicAddress(AF_INET);
CPPUNIT_ASSERT(addr4.size() != 0);
CPPUNIT_ASSERT(turnV4_);
IceTransportOptions ice_config;
ice_config.upnpEnable = true;
ice_config.tcpEnable = true;
std::shared_ptr<IceTransport> ice_master, ice_slave;
std::mutex mtx, mtx_create, mtx_resp, mtx_init;
std::unique_lock<std::mutex> lk {mtx}, lk_create {mtx_create}, lk_resp {mtx_resp},
lk_init {mtx_init};
std::condition_variable cv, cv_create, cv_resp, cv_init;
std::string init = {};
std::string response = {};
bool iceMasterNotReady = false, iceSlaveNotReady = false;
ice_config.onInitDone = [&](bool ok) {
CPPUNIT_ASSERT(ok);
dht::ThreadPool::io().run([&] {
CPPUNIT_ASSERT(cv_create.wait_for(lk_create, std::chrono::seconds(10), [&] {
return ice_master != nullptr;
}));
auto iceAttributes = ice_master->getLocalAttributes();
std::stringstream icemsg;
icemsg << iceAttributes.ufrag << "\n";
icemsg << iceAttributes.pwd << "\n";
for (const auto& addr : ice_master->getLocalCandidates(1)) {
if (addr.find("relay") != std::string::npos) {
// We only want to add relayed + public ip
icemsg << addr << "\n";
JAMI_DBG() << "Added local ICE candidate " << addr;
} else {
// Replace host by non existing IP (we still need host to not fail the start)
std::regex e("((?:[0-9]{1,3}\\.){3}[0-9]{1,3})");
auto newaddr = std::regex_replace(addr, e, "100.100.100.100");
if (newaddr != addr)
icemsg << newaddr << "\n";
}
}
init = icemsg.str();
cv_init.notify_one();
CPPUNIT_ASSERT(cv_resp.wait_for(lk_resp, std::chrono::seconds(10), [&] {
return !response.empty();
}));
auto sdp = ice_master->parseIceCandidates(response);
CPPUNIT_ASSERT(
ice_master->startIce({sdp.rem_ufrag, sdp.rem_pwd}, std::move(sdp.rem_candidates)));
});
};
ice_config.onNegoDone = [&](bool ok) {
iceMasterNotReady = !ok;
cv.notify_one();
};
ice_config.accountPublicAddr = IpAddr(*addr4[0].get());
ice_config.accountLocalAddr = ip_utils::getLocalAddr(AF_INET);
ice_config.master = true;
ice_config.streamsCount = 1;
ice_config.compCountPerStream = 1;
ice_master = Manager::instance().getIceTransportFactory().createTransport("master ICE",
ice_config);
cv_create.notify_all();
ice_config.onInitDone = [&](bool ok) {
CPPUNIT_ASSERT(ok);
dht::ThreadPool::io().run([&] {
CPPUNIT_ASSERT(cv_create.wait_for(lk_create, std::chrono::seconds(10), [&] {
return ice_slave != nullptr;
}));
auto iceAttributes = ice_slave->getLocalAttributes();
std::stringstream icemsg;
icemsg << iceAttributes.ufrag << "\n";
icemsg << iceAttributes.pwd << "\n";
for (const auto& addr : ice_slave->getLocalCandidates(1)) {
if (addr.find("relay") != std::string::npos) {
// We only want to add relayed + public ip
icemsg << addr << "\n";
JAMI_DBG() << "Added local ICE candidate " << addr;
} else {
// Replace host by non existing IP (we still need host to not fail the start)
std::regex e("((?:[0-9]{1,3}\\.){3}[0-9]{1,3})");
auto newaddr = std::regex_replace(addr, e, "100.100.100.100");
if (newaddr != addr)
icemsg << newaddr << "\n";
}
}
response = icemsg.str();
cv_resp.notify_one();
CPPUNIT_ASSERT(
cv_init.wait_for(lk_resp, std::chrono::seconds(10), [&] { return !init.empty(); }));
auto sdp = ice_slave->parseIceCandidates(init);
CPPUNIT_ASSERT(
ice_slave->startIce({sdp.rem_ufrag, sdp.rem_pwd}, std::move(sdp.rem_candidates)));
});
};
ice_config.onNegoDone = [&](bool ok) {
iceSlaveNotReady = !ok;
cv.notify_one();
};
ice_config.turnServers.emplace_back(TurnServerInfo()
.setUri(turnV4_->toString(true))
.setUsername("ring")
.setPassword("ring")
.setRealm("ring"));
ice_config.master = false;
ice_config.streamsCount = 1;
ice_config.compCountPerStream = 1;
ice_slave = Manager::instance().getIceTransportFactory().createTransport("slave ICE",
ice_config);
cv_create.notify_all();
CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(120), [&] {
return iceMasterNotReady && iceSlaveNotReady;
}));
}
```
This should succeed. However seems not the case seems 2.11
Also we can change a bit the busy loop to test every 100 ms for TURN if refused instead of each 20msSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/590pjnath: Leak of UDP socket used by TURN relay2021-07-30T20:03:41ZOlivier Dionpjnath: Leak of UDP socket used by TURN relay# Problem
When `TURN.enable` is set to `true`, then upon creation of a ICE transport using `pj_ice_strans_create()`, multiple UDP sockets will be opened by PJSIP. However, 4 of these sockets are never closed by `pj_ice_strans_destroy()...# Problem
When `TURN.enable` is set to `true`, then upon creation of a ICE transport using `pj_ice_strans_create()`, multiple UDP sockets will be opened by PJSIP. However, 4 of these sockets are never closed by `pj_ice_strans_destroy()`. These sockets are all allocated from the same place.
Here:
```
/ring-project/daemon/test/agent/agent(pj_sock_socket+0x76)[0x55555b78e260]
/ring-project/daemon/test/agent/agent(turn_on_state)[0x55555b7740f9]
/ring-project/daemon/test/agent/agent(set_state)[0x55555b76d6cb]
/ring-project/daemon/test/agent/agent(pj_turn_session_set_server+0x51d)[0x55555b76e14b]
/ring-project/daemon/test/agent/agent(pj_turn_sock_alloc+0x1a3)[0x55555b772b95]
/ring-project/daemon/test/agent/agent(add_update_turn)[0x55555b757d00]
/ring-project/daemon/test/agent/agent(create_comp)[0x55555b7597f5]
/ring-project/daemon/test/agent/agent(pj_ice_strans_create+0x405)[0x55555b759e24]
```
**NOTE!** When `TURN.enable` is set to `false` there's **no leak**.
# How to reproduce
1. Run one passive agent.
2. Run one active agent with `scenario/call:periodic` to the passive agent.
3. Check leak with `watch -n 0.1 'lsof -p PID | grep UDP | wc -l'` where PID is the PID of the active agent.
# How to trace UDP leak
1. Compile [trace-udp.c](/uploads/5ae2314de122c61090f0d37c14b32060/trace-udp.c) with `gcc -O0 -ggdb3 -Wall -shared -fPIC trace-udp.c -o libtrace-udp.so -ldl`
2. Compile the agents by adding `-rdynamic` to `AM_CXXFLAGS` in `Makefile.am`.
3. Run the active agent with `LD_PRELOAD=./libtrace-udp.so`.
4. Check UDP allocations under `udp-trace.txt` and match with leaks found.Olivier DionOlivier Dionhttps://git.jami.net/savoirfairelinux/jami-client-android/-/issues/859Swarm: Issues follow-up2021-07-30T20:08:27ZSébastien BlinSwarm: Issues follow-up# Done
# In review
+ Clear history not available
+ After sync, when loading a conversation auto download files if it's a little file
+ Copy number doesn't work
+ filetransfer: Now we can download files we sent (for example if we hav...# Done
# In review
+ Clear history not available
+ After sync, when loading a conversation auto download files if it's a little file
+ Copy number doesn't work
+ filetransfer: Now we can download files we sent (for example if we have two device, we should be able to download it from another device)
+ last interaction not there after import + sync
# In progress
# TODO
+ set message read on file transferts
+ notification d'invitation non enlevé pour l'acceptation de la request
+ Block contact doesn't work
+ A sends request to B, B accepts, B remove contact A, B adds A, restart B
+ discard conversation request. Relaunch app twice, the request come back
+ While conversation is syncing, we must show a syncing window and can'T send message/calls (because it will fallback as the swarm is not cloned)
+ can't scroll sometimes
+ How do we treat possible duplicates? (open question)
+ How do we treat infinite syncing? (open question)Swarm-chatAdrien BéraudSébastien BlinPierre DucheminAdrien Béraudhttps://git.jami.net/savoirfairelinux/jami-daemon/-/issues/96Improve UPnP implementation2021-08-02T19:40:30ZAdrien BéraudImprove UPnP implementation* Better handling of connectivity change
* Better handling of various router events
* Attempt to improve latency/binding time/explore avoiding blocking operations
**TODO**
1. Add minipnp into the daemon code base
2. Verify that the conn...* Better handling of connectivity change
* Better handling of various router events
* Attempt to improve latency/binding time/explore avoiding blocking operations
**TODO**
1. Add minipnp into the daemon code base
2. Verify that the connection is working well in a call
3. Verify that ipv6 is working
4. Do eventloop (preferred) or pollinghttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/482Swarm: newly added conversation displays 2x "Contact Added" and unread badge2021-08-03T12:56:02ZAndreas TraczykSwarm: newly added conversation displays 2x "Contact Added" and unread badge![image](/uploads/2a9f451800b47165fc144c00efcf24e5/image.png)![image](/uploads/2a9f451800b47165fc144c00efcf24e5/image.png)https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/114Remove MTU phase from tls_session (unused code)2021-08-03T13:32:54ZSébastien BlinRemove MTU phase from tls_session (unused code)This code is deactivated since a long time. Could be removed.
However, the MTU can be retrieven via pjsip (or should be)This code is deactivated since a long time. Could be removed.
However, the MTU can be retrieven via pjsip (or should be)Sébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-project/-/issues/1283Do not add [nightly] repos to sources.list.d2021-08-03T15:22:22ZIaroslav GridinDo not add [nightly] repos to sources.list.dCurrently, jami-all package from https://dl.jami.net/ adds jami's key and repo to sources.list.d. Moreover, if package is installed from "internal" repo, it adds "nightly" still and overwrites the internal sources list. This seems likely...Currently, jami-all package from https://dl.jami.net/ adds jami's key and repo to sources.list.d. Moreover, if package is installed from "internal" repo, it adds "nightly" still and overwrites the internal sources list. This seems likely to cause issues to me and adding repo and key is not necessarily wanted by repository uses.https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/487Video conf: bad mute status2021-08-04T19:07:20ZSébastien BlinVideo conf: bad mute status+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as muted+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as mutedhttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/466Swarm: refactor avatar generation2021-08-05T13:27:40ZAndreas TraczykSwarm: refactor avatar generation- [x] support conversation Ids and account Ids
- [x] preliminary support new group avatar design
- [x] replace update functions with observation
- [x] divide out avatar component responsibilities
- [x] avoid excess loads- [x] support conversation Ids and account Ids
- [x] preliminary support new group avatar design
- [x] replace update functions with observation
- [x] divide out avatar component responsibilities
- [x] avoid excess loadsAndreas TraczykAndreas Traczykhttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/479Swarm conversation requests are missing registered names and avatars2021-08-05T13:51:06ZAndreas TraczykSwarm conversation requests are missing registered names and avatars1. the smart list and the conversation view show the info hash instead of the registered name
2. avatars are no longer available if the client is restarted1. the smart list and the conversation view show the info hash instead of the registered name
2. avatars are no longer available if the client is restartedAndreas TraczykAndreas Traczykhttps://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/488jami-qt does not start on Arch/GNOME2021-08-05T17:15:28ZIvan Shapovalovjami-qt does not start on Arch/GNOME### Versions
* jami-daemon 4.0.0.r2333.g3212ddf46-1
* libjamiclient (libringclient) 1.0.0.r1038.g110c8d8b-1
* jami-client-qt r582.a3aea50-1
* qt5 5.15.2
### Environment
Arch Linux, GNOME 40.3, Wayland session.
### Problem
`jami-qt` ...### Versions
* jami-daemon 4.0.0.r2333.g3212ddf46-1
* libjamiclient (libringclient) 1.0.0.r1038.g110c8d8b-1
* jami-client-qt r582.a3aea50-1
* qt5 5.15.2
### Environment
Arch Linux, GNOME 40.3, Wayland session.
### Problem
`jami-qt` immediately exits with exit code 0 and no error logging:
```
$ jami-qt; echo "rc=$?"
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
QSocketNotifier: Can only be used with threads started with QThread
"notify server name: gnome-shell, vendor: GNOME, version: 40.3, spec: 1.2"
Destroying connectivity monitor
rc=0
```https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/604Video conf: bad mute status2021-08-05T19:41:06ZSébastien BlinVideo conf: bad mute status+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as muted+ Alice is a rendez-vous
+ Bob joins
+ Carla joins
+ Bob is muted by a moderator
+ Bob leaves
+ Bob joins
# Expected result
+ Bob should not be shown as muted because it's not anymore
# Current
Bob is shown as mutedAline Gondim SantosAline Gondim Santos