Planet Jabber

August 12, 2020

Anmol Chaudhary

Support for Multiple Devices and MUCs

Since the last update, I have been able to implement cursor support for real-time text, support for multiple devices, and started with MUC implementation.

Cursor Support

Since with the support of wait action elements, the received real-time texts are processed and displayed more realistically; keeping the typing patterns of the peer, the next step was to implement cursor support to display where the changes are taking place.

Implementing this was pretty straightforward, just insert | character in the latest position in the label and remove the old one if present.

Support for Multiple Devices

With multiple device support, if a user is using multiple instances of Dino in separate devices then whatever is that they are typing in chat input will be synced with the other clients. This means that a user can start composing their text in one device and finish it in other.

This is done by checking if the bare JID of user account and the bare JID of message carbon stanza is the same for single user chat or by checking the resourcepart in case of MUCs. If the condition passes then just update the text input buffer with the rtt instead of creating an rtt element on the conversation view.

I faced two problems while implementing this:

First: I was using different conversations (conversation with peer JID and conversation with the same account JID) to store and retrieve action elements from Hash-Map.

Second: The chat input kept on updating in a loop for both the clients. The reason was that RTT generation is tied with updation of text input. So syncing text input resulted in the transmission of RTT which updated text input in other clients and so on the loop continued. This was resolved by using a bool variable, which does not let RTT generation in this scenario.

_config.yml

MUC support

For MUC only 3 Real-Time Text widgets would be displayed at a time. This is done to ensure that in case of highly active MUCs with multiple people typing at a time it does not cause any problems with user experience and to keep the UI clean and free of clutter.

If there are already more than three RTT widgets present then the priority of the new incoming RTT and the previous ones present is checked on the basis on MUC affiliation with the owner having a greater priority than admins and so on.

Other than that I resolved for removing typing notifications for those whose RTT is being displayed.

August 12, 2020 00:00

August 11, 2020

Dino

Setting out for calls and conferences

Video calls have become a widely used means of communication in personal and in business settings. Especially during the last months, people increasingly used video calls to keep in touch. Unfortunately, many turn to US-based, centralized and closed-source solutions that come with privacy and security issues.

Screen showing dinosaurs in a video conference

We are now starting to implement decentralized calls and conferences in Dino. As with the rest of the UI, we aim for a nice and simple user experience. The call features are planed to be implemented and published step-by-step over the next 12 months. Support for encrypted two-party calls that are compatible with Conversations should be ready by the end of this year or early next year. For conference calls, we are also looking into compatibility with the popular video-conferencing solution Jitsi Meet, that is also based on the XMPP protocol.

This work is made possible through contributions from the NGI0 PET Fund. The fund is managed by NLnet and dedicated to Privacy and Trust Enhancing technologies. It was established with financial support from the European Commission’s Next Generation Internet programme.

Logos of NGI0 PET, NLnet and European Commission

August 11, 2020 13:00

Jabber.org Notices

Back in Business

Quick update: we're back online!

August 11, 2020 00:00

Data Center Outage

Because of a major Internet outage caused by severe weather in the midwestern U.S., the data center that hosts the Jabber.org messaging service is currently offline. We'll post further details as soon as possible.

August 11, 2020 00:00

August 10, 2020

Ignite Realtime Blog

Smack 4.4.0-beta1 released

The Smack developers are happy to announce the first beta release of Smack 4.4. Together with Smack 4.4 entering the beta phase, the ‘4.4’ git branch of Smack was created. This means that the API of Smack 4.4 is becoming more and more stable: we will try avoid breaking API changes during the beta phase whenever possible.

Smack 4.4.0-beta1 is now available on Maven Central.

4 posts - 3 participants

Read full topic

by Flow at August 10, 2020 18:46

August 09, 2020

Monal IM

Xmpp works in China and the west

With news that wechat will leave the us App Stores, one can expect it to leave EU too. I have no idea how wechat is GDPR compliant . If you are looking for something that works in the west and in mainland China, I recommend xmpp, Monal isn’t blocked in China. You can even run your own server that can’t be blocked

by Anu at August 09, 2020 20:58

Aditya Borikar

Chapter 12: Titbits

Hi,
  This week I managed to add some titbits to existing codebase.

  In my last post I mentioned that I was still figuring my way with debuggers. This week, I was able to log down incoming and outgoing texts with the help of SmackDebugger. In future I expect to log down pretty xml.

  We can now specify one endpoint for the websocket implementation to connect to. The endpoint has to be configured inside `XmppWebsocketTransportModuleDescriptor`. When a remote endpoint is configured inside descriptor, we can also enable or disbale websocket remote endpoint discovery. By default endpoint discovery mechanism is enabled.

  Improvements can be observed inside OkHttpWebsocketImpl.send(). There now exists much less logic than what existed previously. This improvement no longer realised the need of WebsocketConnectionPhase.ReadyToSendOpen phase. And hence, the phase has been safely removed.

  Recently I started writing unit tests using mockito. I have no experience with the mocking framework but I have managed to write simple tests. It has been fun :)

This was my week. See you next week.

by Aditya Borikar at August 09, 2020 00:00

August 06, 2020

Peter Saint-Andre

Philosophy and Money

Some great thinkers - Plato, Aristotle, Gautama Siddhartha, Epicurus, Thoreau, Rand, and many more - have reflected deeply on the place of money and wealth in human life. The reasons are not hard to find:...

August 06, 2020 00:00

August 05, 2020

The XMPP Standards Foundation

XMPP Newsletter - Monal update, eturnal and GSoC progress - 6 August 2020

Welcome to the XMPP newsletter covering the month of July 2020.

Newsletter translations

Translations of the XMPP Newsletter will be released here:

XSF Announcements

JC Brand created an XMPP job board! This enables people to review job offers as well as advertise XMPP services. Please take a look, post your own offers and recommend it. XMPP works!

XMPP job board

Articles

Just how scalable is the XMPP server MongooseIM? See how Bartek Górny, one of the MongooseIM team members, achieved almost 2.5 million connections, passing 45 thousand messages per second. And, why he thinks 10 million connections is easily achievable. Find out more in Scaling a Mongoose.

Pep., contributor to the Poezio XMPP client and member of the XSF board, wrote an article detailing his thoughts on XMPP and on the importance of design.

Yarmo Mackenbach wrote an article on XMPP and OMEMO integration in Keyoxide, a modern, secure and privacy-friendly platform to establish your decentralized online identity and perform basic cryptographic operations.

Software news

Clients and applications

The multi-platform desktop client Gajim 1.2.1 has been released. Just two weeks after the release of Gajim 1.2, the next update is already there. Gajim 1.2.1 features spam reporting as specified by XEP-0377, automatic activation of shipped plugins which implies OMEMO available by default, and some bug fixes. Audio/Video calls gain some improvements, but remain highly experimental. More development news from July: an automatic update check for Gajim on Windows/MacOS, account password storage enhancements, an OMEMO fix, and many small improvements.

Profanity, the text based user interface client, released version 0.9.5 to fix a potential segmentation fault when using the /theme properties command. It is used to display colour settings for the current theme.

Anurodh Pokharel released Monal 4.7 for iOS and macOS. Despite the small version number update, this is a large upgrade. Besides the usual UI fixes and stability improvements you'll find: a new in chat title bar (as seen below), support for XEP-0319 (Last User Interaction in Presence) so you know when your contact was last seen online, support for XEP-0085 (Chat State Notifications) for those useful typing notifications and support for XEP-0191 (Blocking Command) for when a spammer comes along.

Monal navigation bar

The git repository of Pix-Art Messenger has been moved from Github to Codeberg. This migration process is not finished yet. Until then, both repositories will run in parallel. Concerning the software itself, Pix-Art Messenger versions 2.5.1 and 2.5.2 have been released, highlighting pinned chats in color, improving the video quality, and dynamically optimizing file compression.

Kontalk for Android has released a new version (4.4.0)! Apart from bugfixes and improvements it has now a dark theme, supports sharing to groups, exporting media to storage and deleting media with messages. The settings have been revamped and Android 10 is now supported.

The Android client aTalk released several patches for their 2.3.0 release with bugfixes and improvements.

Servers

MongooseIM 3.7.1 has been released! This one is built on top of the 3.7.0 May release, which introduced support for channel binding to prevent replay attacks for all methods of SCRAM, a family of modern, password-based challenge–response authentication mechanisms providing authentication of a user to a server. This previous version also provided a range of new SCRAM authentication methods based on different flavors of the SHA cryptographic hash functions, the ability to retract messages as specified by XEP-0424, and support for Proxy Protocol which safely transports connection information such as a client's address across multiple layers of NAT or TCP proxies. Version 3.7.1 improves on that by speeding up all the SCRAM methods significantly!

Tigase XMPP Server 8.1.0 General Availability has been released and it is packed with improvements! SASL-EXTERNAL mechanism defined in XEP-0178 (Best Practices for Use of SASL EXTERNAL with Certificates) to allow certificate based authenticated connections was added for server-to-server connections, greatly improving compliance with the XMPP federated network. Depending on support in other servers, it’s possible to use both SASL-EXTERNAL and Dialback, another authentication mechanism defined by XEP-0220. Set of XMPP extensions were added: - XEP-0398 (User Avatar to vCard-Based Avatars Conversion) - XEP-0156 (Discovering Alternative XMPP Connection Methods) - XEP-0410 (MUC Self-Ping (Schrödinger’s Chat)) - XEP-0153 (vCard-Based Avatars) - XEP-0411 (Bookmarks Conversion) - XEP-0157 (Contact Addresses for XMPP Services)

This version also improves management of multiple domains in virtual hosts and enables by default a new anti-spam plugin.

A new TURN server called eturnal has been published. This is a standalone version of the TURN server part of ejabberd (with some improvements) and a straightforward alternative to servers such as Coturn which can be used for offering STUN/TURN services to A/V clients using external service discovery as defined by XEP-0215.

Libraries

Tigase JaXMPP 3.3.0 has been released! Main features included in this release are support for OMEMO encryption, making it easier to carry out encrypted conversations, and support for XEP-0305 (XMPP Quickstart) allowing connections to be established faster. Apart from that, SCRAM support was extended with SCRAM-SHA512 flavour. Service items discovery can now be controlled with XEP-0059 (Result Set Management). DataForms with multiple items got implemented and MUC message delivery was improved. Last but not least, connectivity with Google's Firebase Cloud Messaging (FCM) was fixed.

Version 1.0.1 of python-nbxmpp, the library developed for and used by Gajim development team, has been released. This version includes a fix for a bug where messages from ChatSecure could not be decrypted after a longer period of time has passed. It also includes some fixes for Websocket connections.

The Ignite Realtime community is pleased to announce the release of jXMPP version 1.0.0! jXMPP is a library that provides common functionality required by all sorts of XMPP implementations (servers, clients, components, ...). Among other things, it provides a sane implementation of JID types. Check out its javadoc documentation!

Others

whatsxmpp, the WhatsApp (Web) to XMPP bridge, has seen a variety of bugfixes and improvements this month, mainly as a result of various users using the bridge and reporting errors. The development team switched to using the Nix package manager to build Docker images, resulting in more reproducible and faster builds! A stable 0.1 release is getting closer, and the basic functionalities are already working and battle-tested. A few more stability improvements are still required and some features, such as proper MUC history support and file uploading via native WhatsApp servers, are missing! Please do pop by their MUC whatsxmpp@conf.theta.eu.org if you're interested in using or running the bridge.

Google Summer of Code

Since the beginning of May students all over the world are working on many open-source projects within the Google Summer of Code Season 2020. We would like to introduce the students who work on GSoC XMPP projects and share their blog posts:

Aditya Borikar is working on WebSocket support for Smack. Blog history:

Anmol (wolfie_anmol) is working on implementing Real Time Texting in Dino (XEP-0301). Blog history:

Enable/Disable RTT in Dino

Thank you for joining GSoC XMPP projects and keep up the good work! To be continued.

Extensions and specifications

Updated

  • Version 0.7.0 of XEP-0313 (Message Archive Management)

TL;DR: add new filtering fields, allow for reversing results order and migrate some information to external documents. - Add 'before-id' and 'after-id' fields, flipped pages, single-item retrieval and a new mandatory disco feature - Split preferences protocol into a separate document - Split the details of pubsub archives into a separate document

  • Version 1.0.0 of XEP-0338 (Jingle Grouping Framework)
  • Advance to Draft as per Council vote from 2020-07-01

  • Version 0.3.0 of XEP-0420 (Stanza Content Encryption)

TL;DR: some changes concerning elements allowed/denied to be encrypted, and security improvement by increasing the entropy of random padding elements.
- Allow origin-id elements, disallow stanza-id and extended stanza addressing elements inside the payload element - Clarify wording on stanza processed elements and improve XEP formatting - Remove limitation of random padding content to base64 characters alone - Chat messages MUST contain message processing store hint - Credit where credit is due

Thanks all!

This XMPP Newsletter is produced collaboratively by the community.

Thanks to eta, emus, erszcz, Ge0rG, Holger, kriztan, jerome-poisson, jonas', Licaon_Kter, pmaziere, vanitasvitae, wurstsalat, woj-tek, zash for their help in creating it!

Spread the news!

Please share the news on "social networks":

Subscribe to the newsletter

We suggest you subscribe to receive the next editions in your inbox as soon as it is published! Promote this newsletter to whoever may be interested.

Help us to build the newsletter

We are always happy to welcome contributors. Find our monthly drafts here in the XSF Github repository. Do not hesitate to join the discussion in our Comm-Team group chat(https://join.jabber.network/#commteam@muc.xmpp.org?join) and thereby help us sustain this as a community effort.

You have a project and write about it? Please consider sharing your news or events here, and promote it to a large audience! Even if you can only spend a few minutes, these would already be helpful!

Tasks which need to be done on a regular basis are for example:

  • Aggregation of news in the XMPP universe
  • Short formulation of news and events
  • Summary of the monthly communication on extensions (XEP)
  • Review of the newsletter draft
  • Translations: especially German and Spanish

License

This newsletter is published under CC BY-SA license.

by emus at August 05, 2020 22:00

August 03, 2020

Jérôme Poisson

SàT progress note 2020-W31

Hello, it's time for a summer progress note.

Libervia has seen a major UI revamp with a new theme based on Bulma CSS framework.

I've been hesitating for long to use a CSS framework, and the default theme has been home made with CSS classes following BEM naming convention. On the paper it's nice because you can easily extend it without breaking accidentally other components/pages, but in practice that was more work for a not so great result regarding the UI. It could become nice with time and efforts, but I'm desperately lacking time, and I rather put my efforts on other things.

So I've decided to work on theming and try the Bulma framework, on which I was keeping an eye for a little while. I was so far quite reluctant to use super popular CSS frameworks, because we tend to end with all websites looking the same, but I have to admit that using one save a LOT of time, and the result is clean and good looking with little effort.

Here is a screenshot of the forum page with the new theme:

new "bulma" theme in Libervia

Last time I've explained how I have implemented dynamic part of Libervia with Brython. This is now completed by the use of Nunjucks for dynamic templating. The goal is to have the same templates in the backend and in the browser, and Nunjucks is more or less compatible with Jinja2. I say "more or less" because some features, filters or extensions are missing. To work around that, I've implemented myself missing filters (xmlattr for instance), or a way to parse keyword arguments with Nunjucks convention. Nunjucks doesn't handle kwargs in macros so I've add to rewrite macros where it was used. The most tricky part was the use of i18n extension: Nunjucks doesn't have it, and thus it was failing when reaching a {% trans %} tag. I've had to implement an extension myself, but for now it doesn't translate and just returns the string unmodified.

Finally, it's working quite well, and the same templates can be used for static (backend) and dynamic (in browser) parts. This is particularly useful when you're doing a website which can be used without JavaScript, and which is enhanced when JavaScript is activated.

I've implemented server part of HTTP File Upload in the file sharing component included with SàT. This way you can see all files uploaded (with SàT or any other XMPP client) in your uploads directory, and you can delete them, which is something I was badly missing from current ecosystem.

Deletion is currently done using Ad-Hoc Commands, but I'm planning to move at some point to a PubSub based file sharing which would give all we need to manage correctly deletion or notifications. There is some work to do on the standards first, that's why I haven't done it from the beginning.

In addition to the ability to delete files, there is no upload limit with SàT file sharing component. Instead there will be a quota system (not implemented yet).

Some import mechanism should come soon, at least to import files uploaded on Prosody HTTP Upload, so the switch to SàT file sharing component will be easy.

I've put some efforts on the photo album, the goal is to have something simple and straightforward to use, working well on desktop or mobiles platforms, with or without touchscreen. There is a permission system to indicate who can view the pictures. From Libervia, pictures are currently uploaded with HTTP Upload (with some specific headers to indicate the path of the albums), until I have time to implement Jingle with WebRTC (maybe in next version?).

Here is a screenshot of the photo album with the new theme:

photo album in Libervia with "bulma" theme

I'm currently putting my effort to make SàT/Libervia a good fit for sharing with family or close friends, little communities or small team. In other words a familial social network.

If everything goes well, I have good hopes to go beta in August and release 0.8 somewhere in September.

That's all for this note! As usual, feedbacks are welcome.

by goffi at August 03, 2020 06:05

SàT progress note 2020-W31

<div><p>Hello, it's time for a summer progress note.</p> <p>Libervia has seen a major UI revamp with a new theme based on Bulma CSS framework. </p> <p>I've been hesitating for long to use a CSS framework, and the default theme has been home made with CSS classes following BEM naming convention. On the paper it's nice because you can easily extend it without breaking accidentally other components/pages, but in practice that was more work for a not so great result regarding the UI. It could become nice with time and efforts, but I'm desperately lacking time, and I rather put my efforts on other things.</p> <p>So I've decided to work on theming and try the Bulma framework, on which I was keeping an eye for a little while. I was so far quite reluctant to use super popular CSS frameworks, because we tend to end with all websites looking the same, but I have to admit that using one save a LOT of time, and the result is clean and good looking with little effort.</p> <p>Here is a screenshot of the forum page with the new theme:</p> <p><img alt="new &quot;bulma&quot; theme in Libervia" src="https://upload.goffi.org/upload/aCcRWJ_u8urLbpHy/libervia_theme_bulma_forum.jpg"/></p> <p>Last time I've explained how I have implemented dynamic part of Libervia with Brython. This is now completed by the use of Nunjucks for dynamic templating. The goal is to have the same templates in the backend and in the browser, and Nunjucks is more or less compatible with Jinja2. I say "more or less" because some features, filters or extensions are missing. To work around that, I've implemented myself missing filters (<a href="https://jinja.palletsprojects.com/en/2.10.x/templates/#xmlattr">xmlattr</a> for instance), or a way to parse keyword arguments with Nunjucks convention. Nunjucks doesn't handle <a href="https://jinja.palletsprojects.com/en/2.10.x/templates/#macros">kwargs in macros</a> so I've add to rewrite macros where it was used. The most tricky part was the use of <a href="https://jinja.palletsprojects.com/en/2.10.x/templates/#i18n">i18n extension</a>: Nunjucks doesn't have it, and thus it was failing when reaching a <code>{% trans %}</code> tag. I've had to implement an extension myself, but for now it doesn't translate and just returns the string unmodified. </p> <p>Finally, it's working quite well, and the same templates can be used for static (backend) and dynamic (in browser) parts. This is particularly useful when you're doing a website which can be used without JavaScript, and which is enhanced when JavaScript is activated.</p> <p>I've implemented server part of <a href="https://xmpp.org/extensions/xep-0363.html">HTTP File Upload</a> in the file sharing component included with SàT. This way you can see all files uploaded (with SàT or any other XMPP client) in your <code>uploads</code> directory, and you can delete them, which is something I was badly missing from current ecosystem.</p> <p>Deletion is currently done using <a href="https://xmpp.org/extensions/xep-0050.html">Ad-Hoc Commands</a>, but I'm planning to move at some point to a PubSub based file sharing which would give all we need to manage correctly deletion or notifications. There is some work to do on the standards first, that's why I haven't done it from the beginning.</p> <p>In addition to the ability to delete files, there is no upload limit with SàT file sharing component. Instead there will be a quota system (not implemented yet).</p> <p>Some import mechanism should come soon, at least to import files uploaded on Prosody HTTP Upload, so the switch to SàT file sharing component will be easy.</p> <p>I've put some efforts on the photo album, the goal is to have something simple and straightforward to use, working well on desktop or mobiles platforms, with or without touchscreen. There is a permission system to indicate who can view the pictures. From Libervia, pictures are currently uploaded with HTTP Upload (with some specific headers to indicate the path of the albums), until I have time to implement Jingle with WebRTC (maybe in next version?).</p> <p>Here is a screenshot of the photo album with the new theme:</p> <p><img alt="photo album in Libervia with &quot;bulma&quot; theme" src="https://upload.goffi.org/upload/b7A8uVHU7Q35nNxG/libervia_theme_bulma_photos.jpg"/></p> <p>I'm currently putting my effort to make SàT/Libervia a good fit for sharing with family or close friends, little communities or small team. In other words a familial social network.</p> <p>If everything goes well, I have good hopes to go beta in August and release 0.8 somewhere in September.</p> <p>That's all for this note! As usual, feedbacks are welcome.</p></div>

by goffi at August 03, 2020 06:05

Peter Saint-Andre

How Useful Is Philosophy, Really?

It's a commonplace of research into human behavior that most of what you do is caused by your inborn personality traits, your underlying biology, the society and location and class and family into which you're born and in which you're raised, and so on - plus a smattering of luck and chance events. It can seem that all these causes conspire to leave little room for your ideals and aspirations and worldview and conscious choices to have much of an impact....

August 03, 2020 00:00

August 02, 2020

Aditya Borikar

Chapter 11: TLS - The Last Stage

Hi,
  The primary task I am focussed on currently is to fix any flaw I come across in the code base. This week I stumbled upon multiple instances where workflow could have been better.

  A tiny but significant change made at the start of this week is the removal of smack-tcp from the websocket module. Remains from previous approach (eg: failureMap inside okHttpWebsocketImpl, not so useful - boolean usingHttp inside transport descriptor) have been removed. Exception descriptions now show meaningful messages instead of `ClassName@someHexNum`. WebsocketRemoteConnectionEndpoints no longer hassle by extracting host, port and scheme from the endpoint obtained through http lookup. Instead WebsocketRemoteConnectionEndpoint conveniently wraps the endpoint inside a URI.

 Logging descriptor has been changed significantly and is now moved inside okHttp's dedicated package. It no longer extends okHttp's Interceptor and now depends on SmackDebugger. Even so I am still trying to figure my way around debuggers. Improvements have been made to the core class - OkHttpWebsocketImpl, for the closingWebsocket phase.

The most important learning this week explained to me by my mentors,



  The websocket subprotocol states that TLS cannot be used at XMPP subprotocol layer instead it should be enabled at at the websocket layer. So whenever, we use an endpoint using `wss` scheme, it refers to an endpoint secured by TLS. This concept has now been realised inside websocket module. When SecurityMode is set to `disabled` it connects only to endpoints with `ws` uri scheme. When SecurityMode is set to `required` connection is established only with endpoints with `wss` uri scheme. Incase we preferrably want to connect to a secure endpoint but are open to establish connection with insecure endpoints if something goes wrong, we can use SecurityMode `if-possible`.

This was my first week of the last phase. See you later.

by Aditya Borikar at August 02, 2020 00:00

August 01, 2020

Ignite Realtime Blog

JSXC web client now available as a plugin for Openfire!

The Ignite Realtime community is happy to announce the immediate availability of a new plugin for Openfire that makes available the JSXC web client to your users!

JSXC is a feature rich web client, which, among others, supports video calls and screen sharing. For more information on its features and usage, please visit its project web page at https://www.jsxc.org

Much like the inVerse and Candy plugins for Openfire, the new JSXC plugin installs a pre-configured version of JSXC in an embedded web server that is ready for use out-of-the-box. Install the plugin, and point your users at the URL where the webclient is available (by default: https://<your-server-name>:7443/jsxc/) and they’re ready to go!

Your instance of Openfire should automatically display the availability of the new plugin in the next few hours. Alternatively, you can download the the plugin directly from the JSXC plugin archive page.

As always, we’d love your feedback on our work! Stop by our support groupchat to get in touch, or leave a message on our community site.

For other release announcements and news follow us on Twitter

1 post - 1 participant

Read full topic

by guus at August 01, 2020 21:34

July 29, 2020

Monal IM

Final betas for 4.7 out

The final betas for Monal 4.7 for iOS and mac are out. I hope to release to the app store this week.

Notable changes:

  1. New title bar in chat
  2. Show when user was last seen online (XEP0319: Last User Interaction in Presence)
  3. Show typing notification (XEP-0085: Chat State Notifications)
  4. XMPP blocking (XEP-0191: Blocking Command)
  5. Fixed ui glitch that shows incorrect unread mesages
  6. Added button to mark all messages as read
  7. Many other Ui and stability improvements

by Anu at July 29, 2020 18:06

July 27, 2020

Anmol Chaudhary

Realistic RTT with wait

Since the last update, I have been able to make stale RTT disappear from UI and make Real-Time Text more realistic by matching the typing speed/pattern by accounting for the wait action element. Receiving wait and pausing RTT, in particular, took a lot of debugging and some refactoring of code.

Removing Stale Messages

My initial approach in handling this was to simply create a Timeout when the RTT UI element is created. The Timeout would check if the current text on UI is the same as in RTT Builder every 5 seconds and delete it from UI if it was the case. But I quickly learned that this wouldn’t work everytime and would end up deleting the UI element sometimes even when it wasn’t stale.

So instead I created a timer that starts with the initialization of the UI element which is reset back to 0 whenever the RTT updated. Now instead of the Timeout checking for RTT builder, it checked if the time elapsed is more than 5 seconds and erases it from UI. This approach works great and stale messages are removed when the peer stops typing or there is a sync issue.

Wait Action Element

The wait action element records the time between key presses and transmits that interval to the receiver. This results in an accurate rendering of the Real-Time Text with time delays in between. This helps the receiver see the typing mood of their peer. This also made it possible to transmit RTT every 700 ms instead of 300 ms used before without resulting in bursty rendering on the receiver side.

Sending ‘wait’ was pretty straight forward:

Create a Timer -> Send elapsed time between two key presses -> Reset timer -> Repeat

But receiving and pausing was very much mind-boggling. I started (knowing that it would fail) with Thread.usleep to pause the RTT generation, as expected it paused the whole UI.

So I went with making schedule_receiving method to async and yield nap when there was a need to pause. Well, it still did not work at all. So after hours of debugging, I realized that the reason could be that the rtt_received signal is invoked with every RTT message stanza which results in the creation of a new Idle loop every time. I tried to not start a new Idle if there was already one running using the returned uint. Again, didn’t work, instead, it resulted in the wrong rendering of RTT.

“Hmmm, maybe only invoke the signal when RTT with new event is received and continue Idle till the queue is emptied? Surely that would work”. Nope, now it resulted in just displaying the latest typed character. “HUH WHAT!!”.

Finally, I asked Marvin and came to know that Idle doesn’t support async methods. async_method.begin() finishes instantly even though the code is finished sometimes later, this results in Idle to keep on running if the bool returned is true. He suggested to return false every time in idle and create a new one after schedule_receiving is finished if needed be.

Even after that, I needed to figure out how to not start different Idle at the same time as using the returned uint was not working correctly when used in a method. Finally, I decided that Idle should only start when initially the queue is empty. If there is already an active element present in the queue then there’s no need to start another Idle, as the previous one runs till the queue is emptied.

With that wait is working well and the received RTT looks more realistic and smoother. Now for this week I think of accounting for cursor support on RTT and encrypting RTT.

July 27, 2020 00:00

July 26, 2020

Gajim

Development News July 2020

This month brought an automatic update check for Gajim on Wndows/MacOS, account password storage enhancements, an OMEMO fix for ChatSecure, as well as many small improvements.

Changes in Gajim

We introduced an automatic update check for Gajim on Windows/MacOS. The feature request for this dates back to 2009, seems it was about time. On first start, Gajim will ask you if it should search for updates once per week. If a new release is detected, you’ll get a notification enabling you to download the new version.

The password of your account is stored in your systems’s keyring by default. You can now turn that off in Preferences, if you don’t want to store your password in the system’s keyring. There have been some password storage improvements, and it’s now also possible to use kwallet for your password when running Gajim via Flatpak.

An often requested feature for group chats is loading recent messages automatically when scrolling up. To implement that feature however, the message displaying methods Gajim uses at the moment would need bigger changes. For a start, we will now display the 50 most recent messages in group chats. This is meant as a step between having no backlog at all and having dynamic message loading.

What else happened

  • The status selector on the bottom of the contact list has been rewritten, fixing a bug where status items would not render correctly
  • Bug fixes for the Account Assistant
  • It’s now possible to send messages to more than one group (e.g. Team 1 and Team 2 in your contact list)
  • Better error handling for group chat invites
  • You can now move someone from ‘Not in Contact List’ to any group in your contact list to add this contact permanently
  • It’s now possible to drag content from notifications in KDE and drop them on Gajim to start a file transfer
  • Audio/Video: fix ending a call properly
  • Preferences: Video preview can now be toggled

Plugin updates

OMEMO received a fix for a bug preventing encryption on a newly created account.

Changes in python-nbxmpp

Version 1.0.1 of python-nbxmpp has been released. This version includes a fix for a bug where messages from ChatSecure could not be decrypted after a longer period of time has passed. It also includes some fixes for Websocket connections.

As always, feel free to join gajim@conference.gajim.org to discuss with us.

Gajim

July 26, 2020 00:00

Aditya Borikar

Chapter 10: End of the second phase

Hi reader,
  This is the last post of my second month. To quickly summarise, this month I have worked on my websocket implementation incorporating previous changes improving existing codebase and making few PRs once in a while.

  In this week, I was able to propose a PR for SimpleXmppConnectionIntegrationTest and get it merged. I have added a connection descriptor going by the nickname `modular-websocket` inside Smack's integration test framework. SimpleXmppConnectionIntegrationTest along with modular-descriptor can be used to test the current implementation against a local XMPP server.

  Along with integration tests, some JUnit tests have been added wherever I could. I have tried to include those parts inside JUnit tests which do not undergo I/O operations. And for those parts where I/O operations are performed, my guess is that the SimpleXmppConnectionIntegrationTest should suffice for now.

  Along with these changes, the code has undergone refactoring as per reviews by my mentors. At the moment, the implementation works as expected. The code now has tools for testing but still lacks documentation. I feel like it is wise to add documentation once the code is close to the mergable state. This was all until now.

  Currently I can imagine 3 prime tasks for my last month,
  1) Polishing the current implementation.
  2) Add precise documentation.
  3) Implement modular architecture in Spark \0/.

Looking forward to see you in the final phase of GSoC.

by Aditya Borikar at July 26, 2020 00:00

July 25, 2020

Peter Saint-Andre

The High Freedom of Great Conversation

Aside from Montaigne and perhaps Plato, few philosophers have reflected deeply on conversation, especially the one-to-one, heart-to-heart exchange of thoughts between friend and friend. A shining exception is Ralph Waldo Emerson, who wrote as follows in his essay on friendship:...

July 25, 2020 00:00

July 24, 2020

Ignite Realtime Blog

jXMPP and MiniDNS 1.0.0 released

We are happy to announce the availability of the 1.0.0 releases of jXMPP and MiniDNS. Release artifacts are now available on Maven Central.

jXMPP

jXMPP is a XMPP base library that provides common functionality required by all kinds of XMPP implementations (servers, clients, components, …). One if its gems in jxmpp-jid, which contains types for JIDs and comprehensive API for them. Remember the second commandment of XMPP development:

Ⅱ) Never shall thou use a String type to represents JIDs.

Check out the javadoc at http://jxmpp.org/releases/1.0.0/javadoc/

MiniDNS

MiniDNS is a DNS library for Android and Java SE. Initially developed to bring native DNSSEC and DANE support to the Java ecosystem, including Android, it is now on the way to becoming a comprehensive DNS library, besides just a resolver library. Of course, it still can be used to perform DNS SRV resource records lookups, as it is common in XMPP. And for DANE verification (which we hope to become commonplace on day).

Check out the javadoc at http://minidns.org/releases/1.0.0/javadoc/

1 post - 1 participant

Read full topic

by Flow at July 24, 2020 17:45

Tigase Blog

Tigase XMPP Server 8.1.0 General Availability released

Next General Availability version of Tigase XMPP Server 8.1.0 has been released - and it’s packed with features and improvements! Read on for the details or scroll all the day down for download links.

If this is your first time with the Server be sure to check out Quick Start guide

Major Changes

More XMPP extensions

Following XMPP guidelines specified in Compliance Suites a number of extensions was included in this release:

  • XEP-0398: User Avatar to vCard-Based Avatars Conversion (server-1017)
  • XEP-0156: Discovering Alternative XMPP Connection Methods - Tigase already supported handling DNS queries and standardised our webservice to XEP-0156 (http-76)
  • XEP-0410: MUC Self-Ping (Schrödinger’s Chat) (muc-122)
  • XEP-0153: vCard-Based Avatars - added support for setting vCard avatar for MUC rooms (muc-112)
  • XEP-0411: Bookmarks Conversion (pubsub-79)
  • XEP-0157: Contact Addresses for XMPP Services (server-995) that can be configured on per VHost basis (server-1015)

Improved connectivity with other servers

SASL-EXTERNAL mechanism defined in XEP-0178: Best Practices for Use of SASL EXTERNAL with Certificates was added for server-to-server (federated, s2s) connections greatly improving compliance with XMPP network. It’s possible to use both SASL-EXTERNAL and Diallback depending on support in other servers.

sasl-external

Better security & privacy

When it comes to connectivity, Tigase XMPP Server sported Hardened Mode that adjusted networking security settings (supported protocols, cipher suites and keys’ length where applicable). We decided include 3-level configuration option for Hardened Mode (roughly following Mozilla’s SSL Configuration Generator): relaxed, secure (default) and strict and to further eliminate cipher suites that are currently considered insecure.

We strive to provide best possible defaults, so right after installation you will get A score on xmpp.net (with proper certificate): xmpp.net score xmpp.net score xmpp-net-score

What’s more - it’s very easy to configure desired level on per-domain (per-VHost) basis: tigase-hardened-mode-configuration

We also enabled by default our anti-spam plugin and because we like all-things-extensible we created a guide how to create your own pluggable filters for anti-spam-plugin.

Multiple domains (VHosts) support is even better

It was always quite easy to configure and serve multiple domains in Tigase XMPP Server. In this release we made it even better! First of all - we included Default VHost item, which allows configuring global defaults for the installation on the fly without having to change configuration files and restart the instance.

tigase-vhost-configuration-1 tigase-vhost-configuration-2

Internally, we introduced VHost Extensions - a mechanism that allows easy addition of configurable options that can be set on per-domain basis.

On top of that we reworked how SSL certificates are handled (especially wildcard ones) and now they are loaded and assigned to correct domain automatically - no need to configure star-certificates manually anymore.

wildcard-certificates

Mobile First

Notifications send to mobile applications via Apple’s and Google’s push servers using Tigase’s PUSH component are now encrypted (#push-25), requires compatible clients)

MUC component now allows users to register permanent nickname, which makes it possible to receive PUSH notifications even if our client disconnects and is offline (#muc-115)

muc-permanent-member-registration

Installation & management

The (web) installer was simplified making setting up and configuring Tigase even easier (#http-78) - now it’s only needed to select desired database, provide it’s details and eventually adjust which components and plugins should be enabled or disabled, but we believe that provided defaults should work well in most of the cases.

tigase-vhost-configuration-1 tigase-vhost-configuration-2 tigase-vhost-configuration-3

After the installation and startup, it’s possible to see basic instance state via web browser either opening /server/ endpoint (#server-1164), or local file from logs/server-info.html)

tigase-status-page

Management the installation using Admin WebUI also received slight visual face-lift (#http-90)

tigase-adminui-1 tigase-adminui-2

Noteworthy

  • Startup time was significantly reduced due to improvements of creating repository pools (#server-1149)
  • Multi-thread, highly concurrent script execution was improved (#server-1154)
  • StreamManagement was available, but in this version we decided to enabled it by default.
  • More places offer support for XEP-0059: Result Set Management - namely PubSub nodes discovery and jabber:iq:serach
  • Publishing Options were added to PubSub (#pubsub-75)

New Minor Features & Behavior Changes

  • server-918: AWS obtain public IP and/or DNS address of the EC2 instance
  • server-985: Add support for SCRAM-SHA-512(-PLUS)
  • spam-8: Enable spam processor by default
  • server-1012: UserDomainFilter.groovy fails to load
  • server-1014: Can’t upgrade from 8.0.0GA to 8.1.0-SNAPSHOT
  • server-798: Limit number of messages that are stored in DB per user within a period of time
  • server-827: Seperate Component-based statistics
  • server-1026: NPE: in JabberIqRegister/EmailConfirmationSender
  • pubsub-82: NPE in RetrieveItemsModule
  • tigaseim-78: IPv6 connectivity issue
  • server-239: OSGi mode - exceptions in logs
  • server-1020: Enable stream management by default
  • pubsub-83: NPE in PublishItemModule
  • pubsub-81: Exception during execution of event: tigase.pubsub.modules.PresenceCollectorModule.PresenceChangeEvent
  • server-1021: NPE: Cannot update BruteForceLocker
  • server-826: UserRepository caches force synchronization even if caching is disabled
  • server-958: Add timeout for opened TCP connections
  • server-1029: Read receipients are not copied via carbons
  • server-1015: Allow configuring XEP-0157: Contact Addresses on per VHost basis
  • pubsub-65: RSM and jabber:search for pubsub discovery
  • server-1030: NPE in VCardTemp when processing initial presence
  • http-72: Change Content-Disposition from attachment to inline
  • server-1045: NPE in DiscoExtensionsForm
  • server-1048: Update parent pom and information about suggested JDK
  • push-23: [JDK12] Can’t establish encrypted connection with Push/FCM
  • server-978: Improve VHost configuration / extending
  • server-1068: Improve LogFormat readability (and maybe performance)
  • server-1070: Improve privacy list loggging
  • server-1071: NPE in IOService.accept
  • server-710: Registration improvements
  • pubsub-79: XEP-0411: Bookmarks Conversion
  • pubsub-75: Add support for Publishing Options
  • server-1017: XEP-0398: User Avatar to vCard-Based Avatars Conversion
  • server-994: Add server support for Entity Capabilities: Stream Feature
  • server-995: XEP-0157: Contact Addresses for XMPP Services
  • http-76: Standardise DNS webservice to XEP-0156
  • server-1109: Add recommended JDK version to documentation
  • push-28: Non-tigase notifications should use high priority (APNS)
  • server-1114: Can’t register on sure.im with StorkIM
  • server-1005: Flatten schema to match versioning document
  • server-1116: account_status is not checked
  • server-1074: Hardened Mode improvements
  • server-1125: StatsDumper.groovy doesn’t work in documentation in 8.x
  • http-85: Pasword resset doesn’t work
  • server-1128: Possible vulnerability in XML parser
  • server-1130: NPE i JabberIqAuth
  • http-84: Configurable resetPassword endpoint hostname
  • server-1129: BOSH timeouts on GET requests
  • prv-436: Conversations compliance - contact developers
  • server-1100: CAAS and WS testers fail to connect to wss://tigase.im:5291
  • server-1047: Add SASL-EXTERNAL on s2s conections
  • server-1103: High priority PUSH notifications are sent for all messages
  • pubsub-93: NPE in CapsChangeEvent
  • server-1137: Don’t require setting JAVA_HOME to start server
  • server-1136: upgrade-schema —help not available
  • utils-19: tigase-utils doesn’t compile with JDK12
  • server-1138: Schema files are not sorted correctly during loading
  • pubsub-98: Resources with emoji chars are causing issues with MySQL backend
  • server-1110: Disabling TLS in VHost configuration doesn’t work
  • server-1078: Don’t send root CA certificate in chain
  • server-1113: Don’t advertise SASL-EXTERNAL if own certificate is not valid
  • http-78: Simplify installer
  • server-1133: Not able to connect via S2S to server with incorrect SSL certificate
  • serverdistribution-2: MUC upgrade not linked correctly in global tigase guide
  • server-1149: Reduce startup time with a lot of database connections
  • server-1148: “ERROR! Component <x> schema version is not loaded in the database or it is old!” during shutdown
  • server-1153: Refactor Credentials related username to credentialId to avoid confussion
  • servers-312: No cluster connection to send a packet
  • server-1154: Multi-thread script execution yields wrong results
  • servers-294: Can’t connect from tigase.im to rsocks.net
  • server-1111: Can’t establish s2s to upload.pouet.ovh
  • server-1143: S2S connectivity issue with OpenFire when SASL external is used
  • servers-309: Issue when connecting to xabber.org: not-authorized: self signed certificate
  • tigaseim-80: Siskin IM push server is not accessible
  • server-1080: After updating certificate via ad-hoc/rest only main certificate is updated
  • http-88: Improve REST documentation
  • http-87: “request accept time exceeded” for every request when using JavaStandaloneHttpServer
  • server-1151: BruteForceLockerExtension (and possibly others) settings are not correctly retrieved
  • http-89: Drop result/error packages received by HTTP-API if no connection present to write response to
  • pubsub-99: Notifications are not sent for +notify from nodes with whitelist access mode
  • pubsub-79: XEP-0411: Bookmarks Conversion
  • server-1157: SCRAM-SHA512 not working
  • server-1159: Improve handling establishing and terminating of the session
  • server-1152: Cleanup warnings from JDBCMsgRepository
  • server-1112: Fallback to diallback if SASL-EXTERNAL fails
  • servers-292: S2S connectivity issues
  • acspubsub-19: REST execution fails on other nodes
  • server-1145: Race condition during storing/loading of offline messages
  • http-90: Add direct links to most useful task in AdminUI main page
  • spam-10: Add documentation for creation of a custom filter
  • server-1163: Review and update SASL Custom Mechanisms and Configuration documentation
  • server-1164: After-installation report - installation status
  • systems-76: Fix issue with StackOverflow due to recursive call in TLSIO; improve debug log
  • server-1082: Sec-WebSocket-Accept not calculated correctly
  • server-1083: Messages sent to full jid are returned with error
  • push-25: Add support for sending encrypted PUSHes
  • server-1085: Improve retrieval of values for all keys in a node in UserRepository
  • muc-115: Add support for MUC and offline message delivery
  • muc-122: XEP-0410: MUC Self-Ping (Schrödinger’s Chat)
  • muc-112: Support for setting vCard avatar for room
  • http-83: Issue with multithreading access to HttpExchange instance
  • httpapijetty-3: Support for HTTP/2
  • httpapijetty-6: Update Jetty version

Downloads

Test results

July 24, 2020 00:00

July 20, 2020

Monal IM

iOS and mac betas up

marching towards release fro 4.7

by Anu at July 20, 2020 15:47

July 19, 2020

Monal IM

Update chat ui and new betas

I’m going to say 4.7 is feature complete. There are new betas for iOS and mac. In addition to stability fixes, notable is typing notifications as well as the new top nav bar.

Many thanks for Thilo and Friedrich who did most of the coding for this release.

by Anu at July 19, 2020 18:50

Aditya Borikar

Chapter 9: Bug Fixation

Hi,
  This week wasn't as productive as I was expecting. I ran into a some bugs and attempted to solve them.

  It got weird when my `okHttpWebsocketImpl` started receving `< failure >` stanzas during SASL authentication. I tried diagnosing my past commits in hope that I would be able to track down, where things are going wrong. In the end, I tried setting up the server all over again and found that my previous server was broken.

  When writing integration tests, I was running into failures when parsing `< iq >` stanzas of type `result`. The form field entities of type `text-multi` were perceived of type type `text-single` since it is the default type incase form field type isn't mentioned. As a result of discussion at xsf muc, we realised that there is indeed a need to mention form field types.

  Along with this I have put up a minimalistic websocket integration test which only tests connection establishment. Taking a step further, we would want two connections to be able to share data through websocket connections.

This was all for this week. Thank you for reading. See you next week.

by Aditya Borikar at July 19, 2020 00:00

July 17, 2020

Maxime Buquet