savoirfairelinux issueshttps://git.jami.net/groups/savoirfairelinux/-/issues2021-08-05T13:27:40Zhttps://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/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-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-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-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/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-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/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-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/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-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/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-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/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-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/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/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-client-qt/-/issues/480Conference call view: confirm before kicking participant2021-07-27T21:23:48ZAndreas TraczykConference call view: confirm before kicking participantProvide a confirmation dialog after proposing to remove a participant from the call.Provide a confirmation dialog after proposing to remove a participant from the call.https://git.jami.net/savoirfairelinux/jami-project/-/issues/874Export and import profile name when linking a new device2021-07-27T20:57:59ZovariExport and import profile name when linking a new device1. When linking a Jami account, the `Profile Name` does not come across.<br>
We have help people set up Jami on Windows and then their Android device and the `Profile Name` doesn't come across.<br>
![image](/uploads/c9abea3274cc724dc87cd...1. When linking a Jami account, the `Profile Name` does not come across.<br>
We have help people set up Jami on Windows and then their Android device and the `Profile Name` doesn't come across.<br>
![image](/uploads/c9abea3274cc724dc87cdd22934a3367/image.png)
2. It seems to be possible to have a different `Profile Name` on different devices for the same username.<br>
Can this name please be synchronized?<br>
If they call us on one device, their `Profile Name` shows as they have entered it on that device. If they call again using their other device, the name changes. This makes the UX not as good as it could be.
What do you think?
Thank youSébastien BlinSébastien Blinhttps://git.jami.net/savoirfairelinux/jami-project/-/issues/1281Feature / Plugin request: Possibility for automated reply messages2021-07-26T13:00:05ZElysFeature / Plugin request: Possibility for automated reply messagesI know Jami is a decentralized messaging app (p2p) but would it be possible to create automated reply messages?
For example if someone wants to call me up saturday the person will receive an automatic reply message like "I am reachable ...I know Jami is a decentralized messaging app (p2p) but would it be possible to create automated reply messages?
For example if someone wants to call me up saturday the person will receive an automatic reply message like "I am reachable at the following times: monday - friday 08:00AM to 06:00 PM" or "I am on summer holiday until the 7. July".
(similar: https://git.jami.net/savoirfairelinux/ring-project/-/issues/1261 )