phone

    • chevron_right

      ProcessOne: ejabberd turns 20

      news.movim.eu / PlanetJabber • 16 November, 2022 • 4 minutes

    ejabberd is a piece of software that was born 20 years ago. This is a long time, even at the scale of Internet. And yet, what ejabberd represents has not always been obvious. It took us a long time to realize what was so important about ejabberd. Why have we been developing it for 20 years? Why are we pushing it further even today? What makes it so special?


    ejabberd is a scalable messaging server. That sums it all and that does not do justice to this critical piece of the Internet infrastructure. Sure, it is known to be the most scalable XMPP server, so scalable that it was used as a building brick to build Whatsapp messaging service. This is something that we have always been proud of, something you can easily brag about when meeting your friends.

    But is that just it? Of course not. Today, with the troubles at Twitter, something appeared clearly.

    ejabberd is important because it helped build much more than Whatsapp or any other big name high-profile projects we have built. It is important because it makes people communicate, in a federated way. It is important because it implements open protocols, and now several of them: XMPP, MQTT, SIP and now Matrix.

    It’s about federation

    ejabberd is about federation. It is helping people on different servers, domains, companies, communities or even countries chatting together. And today even more than 20 years ago, it really matters. We have built ejabberd for 20 years, because it is a critical building brick of what makes the Internet exists. Openness, interoperability, federation. It is one of the few software that prosper outside of the spotlights and make the Internet what it is, along for example with web and mail servers.

    This is something we are pondering as we are thinking about the next steps, the next 20 years. But deep down, we know for sure, what we are about. ejabberd is about federation. You will read more from us here soon. It is a tradition. No birthday celebration speech is complete without looking back at the past.

    It is hard to track all ejabberd usage, but we know that ejabberd empowers more than a billion users. Not bad for a piece of code we wrote. Trillions of messages went through our lines of code.

    As mentioned in this post ten years ago :

    Closed protocols come and go – ejabberd and XMPP remains

    Happy 20th birthday, ejabberd!

    Brief timeline

    The very first public commit in ejabberd’s source code was done by Alexey Shchepin the 16th November of 2002. That was in the Jabber.ru CVS server. Later when that machine had technical problems, the development code moved to JabberStudio CVS.

    The first official ejabberd release was ejabberd 0.5 in November 2003 . The ejabberd home page at that time was a simple HTML. It’s also worth checking the early stage of the Ejabberd Installation and Operation Guide . Notice this first ejabberd logo represented a frog-like animal sitting on a “Jabber globe bulb,” with bat wings, dangerous-looking cogs, and an Erlang suit.

    After the 0.7.5 release in October 2004, ejabberd home page moved from JabberStudio to ejabberd.jabber.ru , and the bug tracker to Jabber.ru’s Bugzilla. For this Drupal site, the logo changed to a hedgehog, and that would remain ten years until the final website and logo update in 2015 .

    At the beginning of 2005, JabberStudio CVS had technical difficulties and the development code moved to ProcessOne SVN. Notice that ProcessOne contracted Alexey to work in J-EAI, a project based in ejabberd specially designed for some business usages, and later extended that relationship to ejabberd.

    In February 2005 the source code repository moved from SVN to Git, and the bug tracker to JIRA . Around October 2010 the source code repository and the bug tracker were finally moved to GitHub.

    From around that time, there’s an interview to Alexey Shchepin which covers the initial concept and years of ejabberd development. By the way, there was another interview two years ago .

    The ejabberd code base got a relevant massive change with the data binarization (use Erlang binaries instead of Erlang strings for data representation) in March 2013, which jumped ejabberd version from 2.1.12 to 13.03.

    The next years followed another major source code change: the movement of many C/C++ code to independent external libraries.

    Today, ejabberd is not just about XMPP. Even if it is mostly know for its great XMPP support, it also supports several other protocols:
    – SIP support to connect SIP phone was added in 2014 (see ejabberd 14.05 )
    – Support for MQTT protocol, to better support Internet of Things use cases, was added initially in the Business Edition , and some months later added to the Community Server 19.02 .
    – Right now Matrix federation is being introduced to allow interop between ejabberd and Matrix servers, to ejabberd Business Edition internally or on Fluux ejabberd SaaS platform. It will come later to ejabberd Community Server.

    ejabberd keeps on improving at a steady pace and is happy to open to other protocols and communities.

    Some source code statistics

    The oldest unchanged function in ejabberd is probably one of the least used: stop/0 . And the oldest functional line is the SETS macro definition .

    The ejabberd repository got 1,070,325 line insertions and 901,287 line deletions. When counting both ejabberd and the dependency libraries, they got 1.693.180 line insertions and 1.108.873 line deletions. With all this, the ejabberd source code went from 13 files to 868, from 1,448 lines of code to 480,961.

    Looking at the programming languages of ejabberd and its libraries, Erlang is obviously the major one, and C comes as a relevant second:

    Language Files Lines Code Comments Blanks
    ABNF 3 128 110 3 15
    ASN.1 1 14 10 0 4
    Autoconf 14 696 544 33 119
    Batch 4 31 21 0 10
    C 20 187549 139764 39614 8171
    C Header 8 11199 3783 6979 437
    C++ 1 533 442 17 74
    CSS 5 532 507 0 25
    Elixir 32 1888 1469 130 289
    Erlang 604 247901 208912 18368 20621
    JavaScript 2 23 21 1 1
    Lua 1 16 16 0 0
    Makefile 21 848 635 10 203
    Perl 3 1086 897 63 126
    Python 1 53 49 0 4
    RPM Specfile 3 5408 3928 1059 421
    Shell 21 4031 3263 336 432
    SQL 9 3857 2994 303 560
    TCL 3 1179 1002 69 108
    Plain Text 13 1870 0 1561 309
    YAML 20 1448 1357 53 38
    The post ejabberd turns 20 first appeared on ProcessOne .
    • chevron_right

      Dino: Stateless File Sharing: Source Attachment and Wrap-Up

      news.movim.eu / PlanetJabber • 12 November, 2022 • 2 minutes

    Recap

    Stateless file sharing (sfs) is a generic file sharing message which, alongside metadata, sends a list of sources where the file can be retrieved from. It is generic in the sense, that sources can be from different kinds of file transfer methods. HTTP, Jingle and any other file transfers can be encapsulated with it. The big idea is that functionality can be implemented for all file transfer methods at once, thanks to this wrapper.

    Source Attaching

    The idea is simple: Once somebody started sfs, anybody can contribute more sources to the list of sources. A sfs-attachment consists of the message id of the original sfs, as well as a list of sources that should be attached.

    You might ask: “But why? I have used many messengers and never heard of such a feature, why should somebody else in the chat be able to do that?”

    I was surprised as well, but there actually are some reasonable use cases.

    1. Peer-to-Peer file sharing in groups
    2. Reviving dead download links
    3. Announcing file uploads before the upload is finished

    Security Considerations

    We obviously have to prevent the possibility of other members attaching wrong files to other people’s sfs. To prevent this, sources can only be attached to sfs, which have checksums in their metadata.

    Clients need to dismiss source attachments,

    1. if the sfs didn’t provide a checksum
    2. if the checksum algorithm is not trusted or unknown
    3. if the checksum of the downloaded file doesn’t match

    Google Summer of Code Retrospect

    This was the first time with Google Summer of Code and honestly, it’s been a nice ride. I’ve come to enjoy my stay and take pride in finishing the different components.

    When I started earlier this year, I had developed a bit of an Imposter syndrome . For one I wasn’t sure if I understood the full scope of the project, but I was also uncertain if I had the skill to work on it.

    Confidence came over time, when I managed to get an overview of everything that needed to be done. Everything suddenly looks much more manageable, when you understand the purpose and inner workings of each subcomponent that will be required over the way. Of course, it’s not completely straight forward. I often had to realize that I will need another component somewhere, but one thing at a time is manageable. Since I had my mentor to back me up whenever I got stuck, working on the project didn’t get frustrating.

    Blog posts

    Parallel to working on the project, we were expected to publish blog posts. Originally I was going for a weekly interval, but yea…

    I don’t think writing the blog posts helped me in any meaningful way. However, I do think writing blogs is a good habit and hope that

    1. I improved my blog writing skills
    2. The blogs will someday help someone

    Progress

    The GSoC period has already finished. See my pull request .

    • wifi_tethering open_in_new

      This post is public

      dino.im /blog/2022/11/stateless-file-sharing-source-attachment-and-wrap-up/

    • chevron_right

      Ignite Realtime Blog: Openfire 4.7.4 release

      news.movim.eu / PlanetJabber • 9 November, 2022 • 1 minute

    The Ignite Realtime Community is happy to announce the 4.7.4 release of Openfire. This release fixes a number of bugs and represents our effort to provide a stable 4.7.x series while work continues on the next feature release of Openfire.

    Notable fixes include enhancements to cluster-specific implementation of Multi-User Chat functionality, improved websocket handling and improved statistics. Additionally, the dependency on Apache Commons Text has been upgraded, to prevent statistic analyzers raising unneeded alarms with regards to its recently published CVE.

    You can find download artifacts available here with the following sha256sum values

    a6a98540e3ab6da65916f630b7b22d04e7ec125be9d09ae98121f6075ef2ef77  openfire-4.7.4-1.noarch.rpm
    5f4bd4e6390bdfe99a63e4e72b25200461854348a9f6039368cffe1c509782fa  openfire_4.7.4_all.deb
    6bebb52b4828d9564b1e22f3d0aebaeec6eefb1e5c7899549747b48bc8d6e30d  openfire_4_7_4.dmg
    142d923f0b17e4dff65b01f69d9d5885494798011157a64cfef8847063f503ee  openfire_4_7_4.exe
    9ebcb9c15d38d4f8fb528a79f0f53440179d64c214176c2d9e578b11762258dd  openfire_4_7_4.tar.gz
    ef233db999c8a18ac43edb7fd17657c7677c0ce2e29f09c9ccb53185c451ded3  openfire_4_7_4_x64.exe
    ba0fb1d992c5169da466107e7752f5eee588d79987dcf052e5b68abc101f7173  openfire_4_7_4.zip
    

    If you have any questions, please stop by our community forum or our live groupchat . We are always looking for volunteers interested in helping out with Openfire development!

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic

    • chevron_right

      Ignite Realtime Blog: Hazelcast plugin version 2.6.1 released!

      news.movim.eu / PlanetJabber • 9 November, 2022

    The Ignite Realtime community is happy to announce the immediate availability of version 2.6.1 of the Hazelcast plugin for Openfire! The Hazelcast plugin is what allows you to deploy Openfire as a clustered solution.

    This release includes only one improvement , but that one can bring a significant performance improvement as compared to older versions of the plugin.

    The updated plugin should become available for download in your Openfire admin console in the course of the next few hours. Alternatively, you can download the plugin directly, from the plugin’s archive page .

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic

    • chevron_right

      Ignite Realtime Blog: REST API Openfire plugin 1.10.1 released!

      news.movim.eu / PlanetJabber • 9 November, 2022

    We are happy to announce the immediate availability of version 1.10.1 of the REST API plugin for Openfire!

    This is a bugfix release, that will improve the endpoints that make modifications to MUC rooms.

    The updated plugin should become available for download in your Openfire admin console in the course of the next few hours. Alternatively, you can download the plugin directly, from the plugin’s archive page .

    For other release announcements and news follow us on Twitter

    1 post - 1 participant

    Read full topic

    • chevron_right

      The XMPP Standards Foundation: The XMPP Newsletter October 2022

      news.movim.eu / PlanetJabber • 5 November, 2022 • 7 minutes

    Welcome to the XMPP Newsletter, great to have you here again! This issue covers the month of October 2022.

    Like this newsletter, many projects and their efforts in the XMPP community are a result of people’s voluntary work. If you are happy with the services and software you may be using, especially throughout the current situation, please consider saying thanks or help these projects! Interested in supporting the Newsletter team? Read more at the bottom.

    Newsletter Contributors & Translations

    This is a community effort, and we would like to thank translators for their contributions. Volunteers are welcome! Translations of the XMPP Newsletter will be released here (with some delay):

    XSF Announcements

    • The XSF membership application period for the fourth quarter 2022 is currently open. If you are interested in becoming a XSF member then you can apply for membership . Please submit by November 27, 2022.

    Google Summer of Code 2022

    XSF and Google Summer of Code 2022

    XSF and Google Summer of Code 2022

    The Google Summer of Code 2022 has finished! The two new contributors Patiga and PawBud worked on open-source software projects in the XMPP environment. Read the final collection blog posts:

    XSF fiscal hosting projects

    The XSF offers fiscal hosting for XMPP projects. Please apply via Open Collective . For more information, see the announcement blog post . Current projects:

    Events

    Articles

    ejabberd has added Matrix protocol support bringing their experience of scaling XMPP and MQTT to this new messaging avenue. At first a subset of the protocol will be implemented, acting like a bridge between protocols. Bussiness customers will get a taste of it first and later it will come to the Community Edition.

    The JMP Newsletter details a big new release of the Cheogram Android client with features including XHTML-IM, Bits of Binary, a form of message retraction, contact tagging, and more. They also talk about an XMPP channel integration they have built for the Chatwoot support software, and offer to let community projects use their instance to try it out. This month they also wrote an article about SMS Account Verification and how it affects the ecosystem.

    PGPainless: Implementing Packet Sequence Validation using Pushdown Automata

    A new automated testing technique was recently adopted to help the Prosody developers during their daily development work: Mutation Testing in Prosody

    Modernization of the authentication protocol is ongoing around the community, key word “SASL”. Multiple hints of the ongoing work have been seen in the last two newsletters, in libs , XEPs updates and funding news. It spans multiple clients, multiple platforms and at least one server. Thilo Molitor, the Monal developer, blogged about the current broken state, the ideal properties of the system and the solutions being worked on . It’s a 30 minutes long read but will sure come handy as more news of the SASL implementations will start to appear from the other involved projects.

    Software news

    Clients and applications

    Converse has released version 10.0.0 with a lot of polishing and an updated feature set.

    Dino 0.3.1 has been released, which is a maintenance release for libsoup3 support and bug fixes.

    Gajim 1.5.2 and 1.5.3 have been released. These releases bring another performance boost, better emojis, selection of multiple messages, and many bug fixes.

    Gajim emoji shortcodes

    Gajim emoji shortcodes

    Profanity 0.13.1 is out with improved plugins management.

    Psi+ 1.5.1641 (2022-09-24) has been released.

    Monal 5.3.3 has been live in the AppStore for a while now, and even if it does not yet bring the SASL improvements mentioned above or the much awaited audio and video calls capabilities funded last month , it does feature several fixes for registrations, screenshots sharing and read markers.

    aTalk has been released with an almost monthly cadence . Each new version brings more polish, like location/map views, calls, libraries updates and keeping up to date on the newer Android requirements. It’s biggest adoption impediment unfortunately still stays and stems from an outdated UI that precedes Android 5 Material UI.

    Servers

    ejabberd 22.10 release includes six months of work, over 140 commits, including relevant improvements in MIX, MUC, SQL, and installers, and bug fixes as usual.

    Jackal 0.62.3 is out bringing 3 fixes for storage/archive and s2s stanzas.

    Libraries & Tools

    python-nbxmpp 3.2.4 and 3.2.5 have been released, bringing bug fixes and internal improvements.

    Extensions and specifications

    Developers and other standards experts from around the world collaborate on these extensions, developing new specifications for emerging practices, and refining existing ways of doing things. Proposed by anybody, the particularly successful ones end up as Final or Active - depending on their type - while others are carefully archived as Deferred. This life cycle is described in XEP-0001 , which contains the formal and canonical definitions for the types, states, and processes. Read more about the standards process . Communication around Standards and Extensions happens in the Standards Mailing List ( online archive ).

    xmpp.org features a page about XMPP RFCs as well.

    Proposed

    The XEP development process starts by writing up an idea and submitting it to the XMPP Editor. Within two weeks, the Council decides whether to accept this proposal as an Experimental XEP.

    New

    • No new XEP this month.

    Deferred

    If an experimental XEP is not updated for more than twelve months, it will be moved off Experimental to Deferred. If there is another update, it will put the XEP back onto Experimental.

    • No XEPs deferred this month.

    Updated

    • No XEPs updated this month.

    Last Call

    Last calls are issued once everyone seems satisfied with the current XEP status. After the Council decides whether the XEP seems ready, the XMPP Editor issues a Last Call for comments. The feedback gathered during the Last Call help improving the XEP before returning it to the Council for advancement to Stable.

    • No Last Call this month.

    Stable

    • No XEP moved to stable this month.

    Deprecated

    • No XEP deprecated this month.

    Call for Experience

    A Call For Experience - like a Last Call, is an explicit call for comments, but in this case it’s mostly directed at people who’ve implemented, and ideally deployed, the specification. The Council then votes to move it to Final.

    • No Call for Experience this month.

    Spread the news!

    Please share the news on other networks:

    Subscribe to the monthly XMPP newsletter
    Subscribe

    Also check out our RSS Feed !

    Looking for job offers or want to hire a professional consultant for your XMPP project? Visit our XMPP job board .

    Help us to build the newsletter

    This XMPP Newsletter is produced collaboratively by the XMPP community. Therefore, we would like to thank Adrien Bourmault (neox), anubis, Anoxinon e.V., Benoît Sibaud, cpm, daimonduff, emus, Gooya, Holger, IM , Ludovic Bocquet, martin, MattJ, MSavoritias (fae,ve), nicfab, Pierre Jarillon, Sam Whited, TheCoffeMaker, wh0nix, vanitasvitae, wurstsalat, Zash for their support and help in creation, review, translation and deployment. Many thanks to all contributors and their continuous support!

    Each month’s newsletter issue is drafted in this simple pad . At the end of each month, the pad’s content is merged into the XSF Github repository . We are always happy to welcome contributors. Do not hesitate to join the discussion in our Comm-Team group chat (MUC) and thereby help us sustain this as a community effort. You have a project and want to spread the news? Please consider sharing your news or events here, and promote it to a large audience.

    Tasks we do on a regular basis:

    • gathering news in the XMPP universe
    • short summaries of news and events
    • summary of the monthly communication on extensions (XEPs)
    • review of the newsletter draft
    • preparation of media images
    • translations

    License

    This newsletter is published under CC BY-SA license .

    • wifi_tethering open_in_new

      This post is public

      xmpp.org /2022/11/the-xmpp-newsletter-october-2022/

    • chevron_right

      JMP: Newsletter: New Cheogram Android Release, Chatwoot Instance

      news.movim.eu / PlanetJabber • 2 November, 2022 • 4 minutes

    Hi everyone!

    Welcome to the latest edition of your pseudo-monthly JMP update!

    In case it’s been a while since you checked out JMP, here’s a refresher: JMP lets you send and receive text and picture messages (and calls) through a real phone number right from your computer, tablet, phone, or anything else that has a Jabber client.  Among other things, JMP has these features: Your phone number on every device; Multiple phone numbers, one app; Free as in Freedom; Share one number with multiple people.

    October saw the release of Cheogram Android 2.10.10-3 , the largest release in awhile.  The app now stores data de-duplicated, so if you send or receive the same file multiple times only one copy will be stored.  This also lays the groundwork for some new file transfer improvements that will be coming in the future.  The app also now supports displaying rich text messages sent by clients which support that (such as Gajim), including the image protocol needed to display stickers sent by Movim users.  A form of message retraction is also supported, and should work with most Jabber clients out there.  A reminder that message retraction is a social convention and not a security feature – the target still has a full copy of your un-retracted message if they want it.

    We know lots of you have big contact lists, across multiple accounts, and that’s why this release introduces the ability to edit tags on your contacts and a tag navigation widget integrated into contact search: to make finding the right conversation just a little bit easier.  We would love to hear feedback about this UI and how well it works for you.

    For those of you who start a lot of group texts, there is an easy way to do that built into the app now as well.  When you start a “private group chat” and select only @cheogram.com contacts, you will be prompted to ask if you meant to start a group text instead.  This flow seemed necessary, as many have accidentally created private channels with their SMS contacts instead of the intended group text, so checking at this point was likely to be necessary anyway.

    There are also some smaller quality of life improvements in this release, including the ability to copy any link in a message to the clipboard (not just the first one), dumping app logs to a special directory on your device after every call in order to make debugging issues easier, asking if you want to keep app data on uninstall (to make switching back and forth to custom builds possible without always needing export/re-import), a new first-start welcome screen, performance improvements, and more.

    As JMP grows so does our support load.  Up until this month we have been managing all our support requests using normal Jabber clients (mostly Gajim and Dino), which worked well enough but less and less well as we grew.  It would be hard to know if someone else was handling a request, who had previously handled a request, or even what the status of some requests were (if they had been resolved elsewhere in the public channel or otherwise).  We’re a small enough team that we can just talk to each other to solve these things, but that does take time, and more time as there are more things to talk out.  So this month we built an XMPP channel integration for Chatwoot and have migrated our main support infrastructure to a Cheogram-hosted instance.  So far we like this a lot, and so much we’ve decided to share.  If you have a project that handles support using Jabber (or SMS with JMP!) you can use it on the Cheogram Chatwoot instance.  Just come by the chatroom and let us know you’re interested.  Only the XMPP channel works on our instance for now, but we’d be happy to enable other channels as well if that would be useful.

    And finally, we know many of you are excited about the JMP Data Plan .  Roll out to the waiting list has gone a bit slower than we hoped, but many SIMs did go out in October.  There have been some bumps as you might expect with any test phase, but overall things are looking good and we hope to speed up the roll out and even move on to the next phase soon.

    To learn what’s happening with JMP between newsletters, here are some ways you can find out:

    Thanks for reading and have a wonderful rest of your week!

    • wifi_tethering open_in_new

      This post is public

      blog.jmp.chat /b/october-newsletter-2022

    • chevron_right

      Gajim: Gajim 1.5.3

      news.movim.eu / PlanetJabber • 31 October, 2022 • 1 minute

    Gajim 1.5.3 brings back a feature many of you missed: selecting and copying multiple messages. Emoji shortcodes have been improved and cover even more emojis now. Gajim also lets you mark workspaces as read, so you don’t have to go through all conversations. Thank you for all your contributions!

    What’s New

    Since we changed the way Gajim displays messages in Gajim 1.4, selecting multiple messages to copy them was not possible anymore. With Gajim 1.5.3 you can now select multiple messages via message menu, followed by marking each message you would like to copy.

    Thanks to @mjk , Gajim now offers even more emojis when using shortcodes. You will now get suggestions for categories as well, which makes finding the right emoji easier 🎉

    Emoji shortcodes

    Emoji shortcodes

    Gajim now fully supports message drafts. If you type a message and switch to another chat, you will now see your draft in the chat list as well.

    More Changes

    • You can now select a default workspace for new chats (for each account)
    • Workspaces can now be marked as read

    Fixes

    • Improvements for recognizing URLs ( @mjk )
    • Fix message correction behavior when switching chats
    • Many fixes to improve Gajim’s usability

    Over 30 issues have been fixed in this release. Have a look at the changelog for a complete list.

    Gajim

    As always, don’t hesitate to contact us at gajim@conference.gajim.org or open an issue on our Gitlab .

    • wifi_tethering open_in_new

      This post is public

      gajim.org /post/2022-10-31-gajim-1.5.3-released/

    • chevron_right

      ProcessOne: ejabberd 22.10

      news.movim.eu / PlanetJabber • 28 October, 2022 • 7 minutes

    This ejabberd 22.10 release includes five months of work, over 120 commits, including relevant improvements in MIX, MUC, SQL, and installers, and bug fixes as usual.

    jabberd 22.10 released
    This version bring support for latest MIX protocol version, and significantly improves detection and recovery of SQL connection issues.

    There are no breaking changes in SQL schemas, configuration, or commands API. If you develop an ejabberd module, notice two hooks have changed: muc_subscribed and muc_unsubscribed .

    A more detailed explanation of those topics and other features:

    Erlang/OTP 19.3

    You may remember than in the previous ejabberd release, ejabberd 22.05 , support for Erlang/OTP 25 was introduced, even if 24.3 is still recommended for stable deployments.

    It is expected that around April 2023, GitHub Actions will remove Ubuntu 18 and it will not be possible to run automatic tests for ejabberd using Erlang 19.3, the lowest possible will be Erlang 20.0.

    For that reason, the planned schedule is:

    • ejabberd 22.10
      • Usage of Erlang 19.3 is discouraged
      • Anybody still using Erlang 19.3 is encouraged to upgrade to 24.3, or at least 20.0.
    • ejabberd 23.05 (or later)
      • Support for Erlang 19.3 is deprecated
      • Erlang requirement softly increased in `configure.ac`
      • Announce: no warranty ejabberd can compile, start or pass the Common Tests suite using Erlang 19.3,
      • Provide instructions for anybody to manually re-enable it and run the tests.
    • ejabberd 23.xx+1 (or later)
      • Support for Erlang 19.3 is removed completely in the source code

    New log_burst_limit_* options

    Two options were added in #3865 to configure logging limits in case of high traffic:

    • log_burst_limit_window_time defines the time period to rate-limit log messages by.

    • log_burst_limit_count defines the number of messages to accept in that time period before starting to drop them.

    Support ERL_DIST_PORT option to work without epmd

    The option ERL_DIST_PORT is added to ejabberdctl.cfg , disabled by default.

    When this option is set to a port number, the Erlang node will not start epmd and will not listen in a range of ports for erlang connections (typically used for ejabberdctl and for clustering ). Instead, the erlang node will simply listen in that port number.

    Please note:

    • Erlang/OTP 23.1 or higher is required to use ERL_DIST_PORT
    • make relive doesn’t support ERL_DIST_PORT , neither rebar3 nor elixir
    • To start several ejabberd nodes in the same machine, configure a different port in each node

    Support version macros in captcha_cmd option

    Support for the @VERSION@ and @SEMVER@ macros was added to the captcha_cmd option in #3835 .

    Those macros are useful because the example captcha scripts are copied in a path like ejabberd-VERSION/priv/bin that depends on the ejabberd version number and changes for each release. Also, depending on the install method (rebar3 or Elixir’s mix), that VERSION may be in XX.YY or in SEMVER format (respectively).

    Now, it’s possible to configure like this:

    captcha_cmd: /opt/ejabberd-@VERSION@/lib/ejabberd-@SEMVER@/priv/bin/captcha.sh
    

    Hook Changes

    Two hooks have changed: muc_subscribed and muc_unsubscribed . Now they get the packet and room state, and can modify the sent packets. If you write source code that adds functions to those hooks, please notice that previously they were ran like:

    ejabberd_hooks:run(muc_subscribed, ServerHost, [ServerHost, Room, Host, BareJID]);
    

    and now they are ran like this:

    {Packet2a, Packet2b} = ejabberd_hooks:run_fold(muc_subscribed, ServerHost, {Packet1a, Packet1b},
    [ServerHost, Room, Host, BareJID, StateData]),
    

    being Packet1b a copy of Packet1a without the jid attribute in the muc_subscribe element.

    Translations Updates

    Several translations were improved: Ukrainian, Chinese (Simplified), French, German, Russian, Portuguese (Brazil), Spanish and Catalan. Thanks to all this people that contribute in ejabberd at Weblate !

    WebAdmin page for external modules

    A new page is added in ejabberd’s WebAdmin to view available external modules, update their source code, install, upgrade and remove them. All this is equivalent to what was already available using API commands from the modules tag .

    Many modules in the ejabberd-contrib git repository have been improved, and their documentation updated. Additionally, those modules are now automatically tested, at least compilation, installation and static code analysis.

    Documentation Improvements

    In addition to the normal improvements and fixes, two sections in the ejabberd Documentation are greatly improved:

    ChangeLog

    General

    • Add log_burst_limit_* options ( #3865 )
    • Support ERL_DIST_PORT option to work without epmd
    • Auth JWT: Catch all errors from jose_jwt:verify and log debugging details ( #3890 )
    • CAPTCHA: Support @VERSION@ and @SEMVER@ in captcha_cmd option ( #3835 )
    • HTTP: Fix unix socket support ( #3894 )
    • HTTP: Handle invalid values in X-Forwarded-For header more gracefuly
    • Listeners: Let module take over socket
    • Listeners: Don’t register listeners that failed to start in config reload
    • mod_admin_extra : Handle empty roster group names
    • mod_conversejs : Fix crash when mod_register not enabled ( #3824 )
    • mod_host_meta : Complain at start if listener is not encrypted
    • mod_ping : Fix regression on stop_ping in clustering context ( #3817 )
    • mod_pubsub : Don’t crash on command failures
    • mod_shared_roster : Fix cache invalidation
    • mod_shared_roster_ldap : Update roster_get hook to use #roster_item{}
    • prosody2ejabberd : Fix parsing of scram password from prosody

    MIX

    • Fix MIX’s filter_nodes
    • Return user jid on join
    • mod_mix_pam : Add new MIX namespaces to disco features
    • mod_mix_pam : Add handling of IQs with newer MIX namespaces
    • mod_mix_pam : Do roster pushes on join/leave
    • mod_mix_pam : Parse sub elements of the mix join remote result
    • mod_mix_pam : Provide MIX channels as roster entries via hook
    • mod_mix_pam : Display joined channels on webadmin page
    • mod_mix_pam : Adapt to renaming of participant-id from mix_roster_channel record
    • mod_roster : Change hook type from #roster{} to #roster_item{}
    • mod_roster : Respect MIX “ setting
    • mod_roster : Adapt to change of mix_annotate type to boolean in roster_query
    • mod_shared_roster : Fix wrong hook type #roster{} (now #roster_item{} )

    MUC:

    • Store role, and use it when joining a moderated room ( #3330 )
    • Don’t persist none role ( #3330 )
    • Allow MUC service admins to bypass max_user_conferences limitation
    • Show allow_query_users room option in disco info ( #3830 )
    • Don’t set affiliation to none if it’s already none in mod_muc_room:process_item_change/3
    • Fix mucsub unsubscribe notification payload to have muc_unsubcribe in it
    • Allow muc_{un}subscribe hooks to modify sent packets
    • Pass room state to muc_{un}subscribed hook
    • The archive_msg export fun requires MUC Service for room archives
    • Export mod_muc_admin:get_room_pid/2
    • Export function for getting room diagnostics

    SQL

    • Handle errors reported from begin/commit inside transaction
    • Make connection close errors bubble up from inside sql transaction
    • Make first sql reconnect wait shorter time
    • React to sql driver process exit earlier
    • Skip connection exit message when we triggered reconnection
    • Add syntax_tools to applications, required when using ejabberd_sql_pt ( #3869 )
    • Fix mam delete_old_messages_batch for sql backend
    • Use INSERT ... ON DUPLICATE KEY UPDATE for upsert on mysql
    • Update mysql library
    • Catch mysql connection being close earlier

    Compile

    • make all : Generate start scripts here, not in make install ( #3821 )
    • make clean : Improve this and “distclean”
    • make deps : Ensure deps configuration is ran when getting deps ( #3823 )
    • make help : Update with recent changes
    • make install : Don’t leak DESTDIR in files copied by ‘make install’
    • make options : Fix error reporting on OTP24+
    • make update : configure also in this case, similarly to make deps
    • Add definition to detect OTP older than 25, used by ejabberd_auth_http
    • Configure eimp with mix to detect image convert properly ( #3823 )
    • Remove unused macro definitions detected by rebar3_hank
    • Remove unused header files which content is already in xmpp library

    Container

    • Get ejabberd-contrib sources to include them
    • Copy .ejabberd-modules directory if available
    • Do not clone repo inside container build
    • Use make deps , which performs additional steps ( #3823 )
    • Support ERL_DIST_PORT option to work without epmd
    • Copy ejabberd-docker-install.bat from docker-ejabberd git and rename it
    • Set a less frequent healthcheck to reduce CPU usage ( #3826 )
    • Fix build instructions, add more podman examples

    Installers

    • make-binaries: Include CAPTCHA script with release
    • make-binaries: Edit rebar.config more carefully
    • make-binaries: Fix linking of EIMP dependencies
    • make-binaries: Fix GitHub release version checks
    • make-binaries: Adjust Mnesia spool directory path
    • make-binaries: Bump Erlang/OTP version to 24.3.4.5
    • make-binaries: Bump Expat and libpng versions
    • make-packages: Include systemd unit with RPM
    • make-packages: Fix permissions on RPM systems
    • make-installers: Support non-root installation
    • make-installers: Override code on upgrade
    • make-installers: Apply cosmetic changes

    External modules

    • ext_mod: Support managing remote nodes in the cluster
    • ext_mod: Handle correctly when COMMIT.json not found
    • Don’t bother with COMMIT.json user-friendly feature in automated user case
    • Handle not found COMMIT.json, for example in GH Actions
    • Add WebAdmin page for managing external modules

    Workflows Actions

    • Update workflows to Erlang 25
    • Update workflows: Ubuntu 18 is deprecated and 22 is added
    • CI: Remove syntax_tools from applications, as fast_xml fails Dialyzer
    • Runtime: Add Xref options to be as strict as CI

    Full Changelog

    https://github.com/processone/ejabberd/compare/22.05…22.10

    ejabberd 22.10 download & feedback

    As usual, the release is tagged in the Git source code repository on GitHub .

    The source package and installers are available in ejabberd Downloads page. To check the *.asc signature files, see How to verify ProcessOne downloads integrity .

    For convenience, there are alternative download locations like the ejabberd DEB/RPM Packages Repository and the GitHub Release / Tags .

    The Docker image is in Docker Hub , and there’s an alternative Container image in GitHub Packages .

    If you suspect that you’ve found a bug, please search or fill a bug report on GitHub Issues .

    The post ejabberd 22.10 first appeared on ProcessOne .