Planet Jabber

August 30, 2016

Tigase Blog

Connecting a distributed workforce with Tigase

It’s not uncommon to find a company deciding to forego the traditional office environment and instead choose to hire a distributed workforce.

by Daniel at August 30, 2016 23:49

August 29, 2016

Stefan Strigler

Compile MongooseIM on OS X with openssl

Another tricky thing I always struggle with: Get MongooseIM compiled on OS X (since they removed openssl). So if you have openssl installed via homebrew just do

diff --git a/apps/ejabberd/rebar.config b/apps/ejabberd/rebar.config
index c693471..4e5ff1f 100644
--- a/apps/ejabberd/rebar.config
+++ b/apps/ejabberd/rebar.config
@@ -8,8 +8,15 @@
 {require_otp_vsn, "R?1[678]"}.

 {port_specs,
- [{".*", "priv/lib/tls_drv.so", ["c_src/tls_drv.c"], [{env, [{"LDFLAGS", "$LDFLAGS -lssl"}]}]},
-  {".*", "priv/lib/ejabberd_zlib_drv.so", ["c_src/ejabberd_zlib_drv.c"], [{env, [{"LDFLAGS", "$LDFLAGS -lz"}]}]}]}.
+ [{".*", "priv/lib/tls_drv.so", ["c_src/tls_drv.c"], [{env, [{".*apple-darwin.*", "CFLAGS", "$CFLAGS -I/usr/local/opt/openssl/include"},
+                                                             {".*apple-darwin.*", "LDFLAGS", "$LDFLAGS -L/usr/local/opt/openssl/lib"},
+                                                             {"LDFLAGS", "$LDFLAGS -lssl"}]}]},
+  {".*", "priv/lib/ejabberd_zlib_drv.so", ["c_src/ejabberd_zlib_drv.c"], [{env, [{"LDFLAGS", "$LDFLAGS -lz"}]}]},
+  {".*", "priv/lib/sha_drv.so", ["c_src/sha_drv.c"], [{env, [{".*apple-darwin.*", "CFLAGS", "$CFLAGS -I/usr/local/opt/openssl/include"},
+                                                             {".*apple-darwin.*", "LDFLAGS", "$LDFLAGS -L/usr/local/opt/openssl/lib"},
+                                                             {"LDFLAGS", "$LDFLAGS -lcrypto"}]}]},
+  {".*", "priv/lib/xml.so", ["c_src/xml.c"], []},
+  {".*", "priv/lib/expat_erl.so", ["c_src/expat_erl.c"], [{env, [{"LDFLAGS", "$LDFLAGS -lexpat"}]}]}]}.

 {xref_checks, [undefined_function_calls,
                undefined_functions,

Flattr this!

by Steve at August 29, 2016 13:38

Monal IM

Tracking Progress on OMEMO encryption

For those who are interested in the collaborative effort to have a standard modern encryption scheme on the major mobile and desktop clients. You can see where things are for Monal and Chatsecure at the github issue.

 

 

by Anu at August 29, 2016 01:49

August 25, 2016

Monal IM

TV Portal UI Finalized

Now that the app is mostly done I’ve put in some nicer images in TV portal.  IT also supports viewing scheduled recordings now. Going to keep testing (aka watch tv) to see what bugs arise but this is mostly done at this point. Please contact me at info@monal.im if you would like to help test this. 0x0ss 0x0ss-3 0x0ss-2 0x0ss-1

by Anu at August 25, 2016 19:11

Ignite Realtime Blog

Spark 2.8.0 Released

The Ignite Realtime community has just released Spark 2.8.0 and it can be downloaded from Ignite Realtime: Downloads.

 

This is a major release marking the end of support for Java 7 (which has reached the end of life state more than a year ago). Full Spark installers have already been bundled with Java 8 for some time. Online installer won't work with Java 7 starting with 2.8.0 version. We recommend updating to Java 8. Underlying Smack library has been updated to the latest version in this release. Roar plugin has received new popup control options as well.

 

There is a huge list of changes in this version. So this most probably has introduced new issues (though we have tried to catch and fix most of them before the release). Please report in the forums, if you find them. Again, please do not post bug reports in the comments of this blog post.

 

For a complete list of changes please check Spark Changelog

 

As usually we encourage new developers to join Spark project and provide patches. Those familiar with Smack can join the development easier, as we are now on the current version of it (4.1.8 at the moment of this release). Patches can be attached in the forums or submitted as PRs on GitHub.

 

Here are the contributors to this release (besides myself):

Wolf  updated Roar plugin to have separate settings for group chat and keyword matching popups, added system style popups

Alexander198961 · GitHub  added option to save room's password, added URL support to admin's broadcast dialog

Леонід  added Ukrainian translation

nicoben (Nico Ben) · GitHub  updated Italian translation

speedy  fixed failed login process with self-signed certificates, updated Substance skin library, fixed an issue with idle on Windows 10 lock screen

Daryl Herzmann  fixed Debian build

 

We owe Guus der Kinderen  a separate mention. Guus has done a huge job of updating Spark to the current Smack version, which contains a lot of bug fixes, security patches and new features. He has also fixed many other issues along the way. Such as group chat window size issues, room occupants presence management, annoying word wrapping issue with long text lines, SSO/GSSAPI problems, etc.

 

Important information for SSO (Single Sign On) users, if they are using SRV records: SSO (Single Sign On) configuration changes with Spark 2.8.0

 

UPDATE: Important information for those having login issues with 2.8.0: Login issues with Spark 2.8.0

 

[SIP phone] SIP plugin is not working since the Smack 4 update. We hope to have it fixed for 2.8.1.

[Voice Chat] Jingle (PC to PC) calls are not working at this point.

[Linux] Flashing plugin is not working on Linux systems.

 

Here are sha1 checksums for the downloads:

6fa1265e7def8800e0a4356bd1b7d8cf58bb85f8  spark_2_8_0.dmg

741c20d9141c88ecde08d60fbc11145887d32573  spark_2_8_0.exe

b76e36da81469561fdad4a227fa4ad68d792ca7b  spark_2_8_0_online.exe

e2fcdddb4e84f6f1abe9d62a39aa0c7c9e06d814  spark_2_8_0.tar.gz

a772028ba10db2084ea7e2b7b1fb408803c77a5b  spark-2.8.0.rpm

38ca0d9ab5ccd7d61be03b702a0abd5c8939ada5  spark-2.8.0.src.rpm

fba8705d54f49bceb62f19a30348482f9bbeacfb  spark_2_8_0.deb

by Ignite Realtime Blog (igniterealtime@jiveon.com) at August 25, 2016 15:31

August 17, 2016

Ignite Realtime Blog

Openfire 4.0.3 is Released

The Ignite Realtime Community is pleased to announce the 4.0.3 release of Openfire.  Openfire is a cross-platform real-time collaboration server based on the XMPP (Jabber) protocol.  This release signifies our ongoing effort to produce a stable 4.0 series release while continuing to work toward a 4.1 release. A changelog of fixes is available and indicates 14 issues resolved.

 

Note: There was an unfortunate and complicated problem with the distributed 4.0.2 .deb Openfire installer.  If you had troubles with it and reverted to 4.0.1, we hope that you try 4.0.3 now.  See OF-1116 for some more details.  Also, if you are an experienced Debian/Ubuntu packager, we would certainly love your feedback on how the .deb package for Openfire is generated and distributed.

 

Additionally, this update contains an updated truststore. This truststore is used by Openfire to secure remote connections.  If you are using an installer and have manually updated this file in the past, it is likely that the installer will not overwrite your changes with the new truststore.  Please review your resources/security directory after install and rectify differences you may find.

 

As always, please report issues in the Community Forums and you can download this release from our website.  Here are the sha1sum's for the downloads available.

 

Platform
sha1sumFilename
Mac

3dcba5b91d3078618aaff182bb1f0d84be7b9e63

openfire_4_0_3.dmg
Windows690d3b2114b98f45836191f73d242ee9702c6771openfire_4_0_3.exe
Binary (tar.gz)

39b0f04bb6471f9d9aaaeda4fbdf6839a4062a4e

a2222bbef28342553a8ec00500064929dc77029d (updated 19 August 2016)

openfire_4_0_3.tar.gz
Binary (zip)

f65b7ffdf563a6a7deb85594ec1534748a942e6a

170468f366c7cd185b1c987f84e020fb96864f91

openfire_4_0_3.zip
Source (tar.gz)87aa9a17938c3ce9441d61802e669f87fd0e324fopenfire_src_4_0_3.tar.gz
Source (zip)698c598a73dd01cec4037df98190f017dbb19444openfire_src_4_0_3.zip
RPM Installer

70da0a51da40cb955288db977b5d405a49667efc

ad42faaa8da58de463124fa35d0ae0271a20e4bd (updated 19 August 2016)

openfire-4.0.3-1.i386.rpm
DEB Installer5c53afd72cf527edf81915d2aaa0fe68d96b6346openfire_4.0.3_all.deb

 

Update 19 August 2016: A problem was found with the 32bit RPM containing a 64 bit JRE.  This artifact has been refreshed on the website for download. Also Binary (tar.gz) package has been replaced to include the usual binaries.

 

As a reminder, Openfire's source code and development can be found on Github and an active developer discussion occurs within our open_chat@conference.igniterealtime.org groupchat.  Please consider helping out with Openfire's development!  We can use help in about all areas of development, but especially:

  • experienced packaging developers to improve the install/upgrade experience on various platforms
  • developers interested in transitioning Openfire to Maven
  • testing of bamboo generated builds

 

Thank you for your interest in Openfire!

by Ignite Realtime Blog (igniterealtime@jiveon.com) at August 17, 2016 16:16

August 15, 2016

Remko Tronçon

HAProxy Alerts with WebHooks

I want to be notified immediately when one of the backend servers behind my HAProxy instance goes down. HAProxy offers alerting functionality, but only via SMTP: when a backend goes down it sends an email to a list of recipients via an SMTP server you provide. Unfortunately, email isn’t an ideal mechanism for real-time notification, and I don’t have an SMTP server accessible from my HAProxy instance. In this post, I’ll show my setup of HAProxy posting its alerts to a Slack channel and the Pushover push notification service, using smtp-http-proxy and AWS Lambda.

Continue reading post

by Remko Tronçon at August 15, 2016 22:00

August 14, 2016

Peter Saint-Andre

Working for Freedom

Almost four years ago to the day, I posted some hopeful thoughts about working for freedom within the Republican party, specifically within the framework of the Republican Liberty Caucus. I changed my voter registration to Republican, attended a few meetings and caucuses, and started to learn a bit about how electoral politics works at the local level (which, in the county where I live, mostly means Republican party politics).

August 14, 2016 00:00

August 13, 2016

Tigase Blog

Message Archive Component

The Message Archive Component provides for storage of messages and stanzas.

by Daniel at August 13, 2016 00:30

August 11, 2016

Christian Schudt

Babbler 0.7.1 (Bugfix) Released

A bugfix version of the XMPP client library has been released to Maven Central: 0.7.1

Here's the changelog:

  • Discovering services should not fail immediately if one sub-query fails.
  • Make sure abnormal WebSocket disconnections trigger the reconnection.
  • Make sure RECONNECTION_SUCCEEDED event is triggered for external components.
  • Add listeners to listen for successful or failed send operations.
  • Add public constructor for the SASL challenge class.
  • Add public constructors to SASL Failure class.
  • Make sure to not write XMLConstants.XML_NS_URI to XML elements (FasterXML Aalto’s XMLStreamWriter implementation writes it)
  • Add DataForm.Field#getValue() and implement toString() method.
  • Add convenient API to compare two MUC affiliations and roles (i.e. Affiliation.OWNER.isHigherThan(Affiliation.ADMIN))
  • Compare presences of MUC occupants in the Occupant’s Comparable implementation.
  • Minor performance improvement by using a ListIterator in collection based result sets.
  • Discover PubSub services by identity, not by feature name (it’s more reliable)
  • Add nextPage() and previousPage() method and refine the naming of other methods in result set management (e.g. having forCount() and forItemCount() was confusing)

by Christian Schudt (noreply@blogger.com) at August 11, 2016 10:57

August 10, 2016

Tigase Blog

Tigase JaXMPP Client v3.1.3 Release

Announcing a maintenance release of Tigase JaXMPP Client Library v3.1.3!

by Daniel at August 10, 2016 19:31

Alexander Gnauck

Unity development with MatriX

A question which comes up very often is the following:

Can I use MatriX with Unity 3d?
Of course you can. Many of our customers are using it with great success in their Unity projects.

Unity is based on Mono. MatriX is designed for cross platform and works on all major .NET platforms, including Mono.

Many Unity developers have some problems to get started with MatriX on Unity.
This post should be a small tutorial and address some of the issues you may be facing during your Unity development.

1) Download the correct MatriX dll (Mono build). MatriX builds are not universal, which means you need to download and reference the MatriX library for Mono.
You can get the latest Mono build from NuGet here:
https://www.nuget.org/packages/MatriX.Mono/

2) MatriX requires System.Xml.Linq.dll. Make sure that you reference System.Xml.Linq in your project as well and add it to your assets. Otherwise Unity may throw an exception when you run your project.

3) Depending on your Unity version you may get compiler errors on iOS. When you use the latest Unity version this should be no problem. On older Unity versions this problem is related to obfuscation. To resolve this please contact us directly.

4) The iOS stripping feature causes problems. It does not work when reflection gets used. The core Xml serializing engine in MatriX is build on reflection using a factory pattern. You either have to remove stripping from your complete project, or exclude the MatriX classes.
Here is an example of a link.xml file excluding all MatriX classes:

<linker>
  <assembly fullname="Matrix">
    <type fullname="Matrix.*" preserve="all"/>
  </assembly>
  <assembly fullname="mscorlib">
    <namespace fullname="System.Security.Cryptography" preserve="all" />
  </assembly>
</linker>

It looks like disabling all stripping in Unity is not enough and the link.xml file above must exist.

5) Some of our users reported that connecting to an XMPP server does not work inside the Unity editor because of some networking problems of the IDE. When the code gets executed or published on a device it works fine. This is a restriction of Unity and not related to MatriX.

If you run into any other problems please contact us directly. We do our best to solve them.

by gnauck at August 10, 2016 11:27

August 09, 2016

ProcessOne

XMPP Radar Newsletter #13

Welcome to the 13th issue of our newsletter. Here are the links we found interesting in July:

Go’s March to Low-latency GC

Twitch uses Go for many of their busiest systems. Its simplicity, safety, performance, and readability make it a good tool for the problems they encounter with serving live video and chat to millions of users.

XMPP : Swiss Army Knife for Internet of Things (IoT)

IoT communication is complex and varied, and XMPP is a great candidate for an application-layer protocol. Developers can use it in IoT for communication among devices and their corresponding servers and users in the cloud.

MITTO

Mitto is a worldwide IoT SIM card for connected devices. It wants to make your IoT projects more about the actual project and (much) less about figuring out cellular carriers and connectivity.

Fighting XMPP Abuse and Spam with ejabberd

In this video, Mickaël Rémond explains the features, options and API that can be used to protect ejabberd servers from spam and various other types of attacks. The video was recorded at ejabberd Advanced Erlang Workshop in Paris.

XMPP Mobile groupchat: Introducing MUC Subscription

We are announcing MUC Subscription, a new experimental feature in ejabberd that makes group conversations in XMPP work seamlessly with mobile clients.

Open Source Contribution: XMPP Module for React Native

Working with React Native, a relatively new mobile app development framework has overall been a great experience. However, one of the common complaints of developers about react native has been the lack of off-the-shelf libs/modules for certain use-cases e.g. XMPP.

Read and Write to Devices With Converse.js

This tutorial is about using Converse.js to read values and write values to devices, and also retrieve history of fields.

New Jabber/XMPP Client for iOS

Intercambio is a Jabber/XMPP client for iOS. It is open source and you are welcome helping to improve it and shape it to your needs.

by Marek Foss at August 09, 2016 13:49

August 04, 2016

ProcessOne

ejabberd 16.08

Welcome ejabberd summer release !

This new release is the culmination of several months of work to improve your experience using ejabberd. It contains as usual a lot of small bug fixes and some enhancements. However, this version contains some new major features:
– MUC/Sub
– Major clean-up and improvement on OAuth ReST API
– Database backend for OAuth tokens
– Better support of Elixir modules
– Full compatibility with Erlang 19
– Modules loading in a dependent order

ejabberd_1608

The biggest improvement in ejabberd 16.08 is a new experimental feature in ejabberd that make group conversations in XMPP work seamlessly with mobile clients: MUC/Sub.

The main issue with XMPP group chat (based on XEP-0045) is that it is bound to user presence. On mobile, presence is almost irrelevant. You are always somewhat loosely reachable, but ofter seen as offline from XMPP point of view. MUC/Sub rely as much as possible on existing MUC specification, while making the smallest possible change that make mobile group conversation client development easy without having to send presence.
See all details in our dedicated MUC/Sub blogpost.

This release also covers needs of the Elixir community: Erlang 19, Elixir 1.2.6, better mix integration. It’s also possible to write Elixir module handled by the contributed module extension of ejabberd. We also tested ejabberd with Elixir 1.3.2 with success, so you can likely upgrade without issues.

Finally, it is worth noting that development team is growing and three new official contributors joined the project: Gabriel, Anna and Thiago. Welcome !

Changes

This is a selection of the most relevant changes:

MUC

  • New MUC/Sub support
  • Add ‘allow_subscription’ room configuration option for MUC/Sub

OAuth and ReST API

  • Add OAUTH SQL backend
  • New special scope: ejabberd:admin and ejabberd:user, to more easily grant group of privileges
  • Add DB backend support for ejabberd_oauth
  • Added ejabberdctl commands to manage OAuth tokens: oauth_issue_token, oauth_list_tokens, oauth_list_scopes, oauth_revoke_token
  • Simplified OAuth form: username and password merged into JID field
  • User configurable validity duration for tokens on OAuth token generation form
  • Add support for sending back missing scope error to API ReST command calls
  • Oauth: several minor fixes
  • Support oauth password grant type, to generate token programmatically

Elixir support

  • Update supported Elixir version to 1.2 and 1.3.
  • Support installation of Elixir contributions with external module command line tool.

PubSub

  • Fix use of like parameter in sql pubsub’s requests
  • Fix node configuration change with sql backends
  • Fix send_last_items duplication with multi-plugin setup

MAM

  • Always limit result set page size
  • Use hooks instead of direct calls

API

  • Add support for checking access rules conformance for commands
  • Add support for rich error reporting for API
  • Add support for sending back missing scope error to API ReST command calls
  • Fix handling of complex values as arguments in http_api
  • Improve error handling

Other improvements

  • External Component Connection Hooks
  • Fix compilation issues on R19
  • Support for OpenSSL 1.1
  • Make access rules in ejabberd_web_admin configurable
  • Make modules loading in a dependent order (#1191)
  • Make s2s stats commands more robust
  • Preserve PID for offline sessions
  • Several quoting fixes for PostgreSQL
  • Switch supervised workers from temporary to transient

Feedback

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

The source package and binary installers are available at ProcessOne.

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

by Christophe Romain at August 04, 2016 13:53

Stefan Strigler

Otalk IM

A customer of mine asked for a WebRTC based, self hosted solution. So I started investigating and stumbled upon the great Otalk IM Client. Unfortunately it has not been maintained for a while. I decided to go with it nonetheless. I updated dependencies as required to make them work with latest stable NPM (3.x) and Node.js (6.x) as applicable and fixed bugs all along the way. Check out my fork if you are interested! Feedback would be very welcome. I think it makes for a very good starting point if you were about to create your own WebRTC solution. Or maybe even just a regular chat client.

Flattr this!

by Steve at August 04, 2016 09:34

August 03, 2016

ProcessOne

ejabberd 16.06

We are proud to introduce our new ejabberd release, ejabberd 16.06. As usual it includes many bug fixes, but also several improvements.

The big improvement in this release is a new Access Control List (ACL) infrastructure. ACL rules are used in ejabberd config file to define fine-grained access to ejabberd features.

In ejabberd 16.06, the ACL configuration has been much improved to make it both simpler to use and easier to read. Moreover, ACL and access rules are not mandatory anymore when configuring access restrictions for a feature or a module: You can just inline the user, for example, making small configuration much easier to setup properly.

To make you even more comfortable, our new code is still supporting the old syntax and you can mix old and new syntax. It means that you can still use your existing configuration file and that you can migrate incrementally, as needed.

The new ACL syntax

New access rule will look like this:

access_rules:
  my_access:
    - allow: admins
    - deny: blocked
    - allow:
      - user: "peter@server.com"
      - ip: "222.111.222.111/32"
    - allow: moderators

This is an example definition for my_access rule. It is composed of four groups. They are evaluated from top to bottom order. the first with all listed acl rules evaluated as true is used as result. If none of them matches, evaluation fallback to default value deny. Above definition can be parsed as: if user belongs to ACL definition admins, return allow, if not, and user belongs to ACL definition blocked, return deny. otherwise for user “peter@server.com” when connected from ip: “222.111.222.111” return allow, and for users in ACL definition moderators return allow as well, in all other cases return deny.

We can see in this example two new additions that were introduced in this rewrite:

  • you can now directly specify ACL definitions inside access rules (you no longer will be required to define ACL rules for each case)
  • you now have the ability to require a match on several ACL rules types at this same time (in the example: ip and user).

You can use any rule that is allowed inside acl: sections (like user, server, resource, user_glob, etc.) and one additional rule that is allowed only inside access_rules: section, acl: NameOfACL that will look for definition of NameOfAcl inside acl: section and use it for matching. If you have only one ACL rule name to use you can use short form - allow: acl_rule, additionally - allow: all or - deny: all can be shorted still to - allow and ‘- deny`.

Shapers can also be specified using new syntax, but they now go into shaper_rules: section and they look like that:

shaper_rules:
  my_shaper:
    - 100: admin
    - 10: all

Rules defined in access: section will use old syntax, and work as before, so you don’t need to update your old config, to adapt it to that change.

At last, one can define module specific access rules directly in modules configuration section, this is simpler to understand when reading configuration.

Let’s get a simple example of the changes. With previous ACL implementation, one could have this:

acl:
  bad_servers:
    ip:
      - "XXX.XXX.XXX.XXX/32"
  admin:
    user:
      - "aleksey": "localhost"
access:
  muc_admin:
    admin: allow
  muc_create:
    local: allow
  muc:
    all: allow
  s2s:
    bad_servers: deny
    all: allow
  c2s_shaper:
    admin: none
    all: normal
modules:
  mod_muc:
    access: muc
    access_create: muc_create
    access_persistent: muc_create
    access_admin: muc_admin

Which can be translated to this since ejabberd 16.06 with new ACL implementation:

acl:
  admin:
    user: "aleksey@localhost"
access_rules:
  s2s:
    - deny:
      - ip: "XXX.XXX.XXX.XXX/32"
    - allow
  c2s_shaper:
    - none: admin
    - normal
modules:
  mod_muc:
    access:
      - allow
    access_create:
      - allow: local
    access_persistent:
      - allow: local
    access_admin:
      - allow: admin

Shorter and clearer. Please also note that you can use the JID literally as a string. The previous awkward username: domain syntax can go away.

Changes

This is a selection of the most relevant changes:

Config

  • New ACL infrastructure
  • Add shorter version of some common access rules definitions
  • Allow @ inside acl rules user, user_glob or user_regexp to pass both user and server
    in single string
  • Add acl rule access_rules_validator and shaper_rules_validator for use in mod_opt_type and opt_type callback functions.
  • Allow using shapers defined by name like in s2s_shaper: fast
  • Allow mod_opt_type and opt_type to transform values passed to it, and support
    better error reporting
  • Do not call transform_terms multiple times in configuration processing when merging them
  • Don’t halt program when include_config_file is missing/can’t be read
  • Allow again multiple fqdn values in configuration

Commands

  • Allow passing username and ip to ejabberd_commands, and use it in mod_http_api
  • Fix path to epmd in ejabberdctl
  • push_roster: must convert read strings to binaries
  • set_presence: Fix command API
  • Fix for modules_update_specs command
  • Add ejabberdctl commands to manage oauth tokens.

Core

  • Bounce messages sent to server JID
  • Fix C2S session leak in rare cases
  • Fix handling of queued stanzas on session timeout
  • Give more time to stop and kill epmd
  • When stopping ejabberd, stop modules after broadcasting c2s shutdown
  • XEP-0198: Use different error message for bounces
  • XEP-0198: Add ‘h’ attribute to element
  • XEP-0198: Also count stanzas when socket is closed

Databases

  • Fix pgsql compatibility on delete_old_messages command
  • Handle Redis connection in a separate module
  • Report in SQL when scram is enabled but the stored password isn’t
  • Update SQL escaping
  • Use MEDIUMTEXT type for muc_room.opts in MySQL schema

MAM

  • Send unique stanza id and archived tag also in the message carbons
  • Fix “assume_mam_usage: if_enabled”
  • Fix typo in mod_mam:select()
  • Updated support of XEP-0313 from version 0.4 to 0.5.1
  • Mnesia: Avoid cleanup on bag when disc_only, switch in memory
  • Mnesia: Don’t exceed table size limit
  • Mnesia: Use transactions when writing

Client State Indication

  • Fix handling of chat states
  • Simplify check for carbon-copied chat states
  • Simplify handling of PEP stanzas
  • Pass chat states of other resources
  • Unwrap carbon copies when checking for chat states
  • Add queue_pep option
  • Queue chat state notifications
  • Move CSI queue handling code from ejabberd_c2s
  • When stopping, delete only the configured hooks

Other modules

  • ext_mod: Set HTTP/1.0 so Github accepts the request
  • gen_mod: Compile early to remove undefined behaviour warning
  • mod_http_upload: Let client retry HTTP upload on file size mismatch
  • mod_last: Produce mod_last entry on account creation
  • mod_muc_room: Notify on affiliation changes
  • mod_register: Check password with jid:resourceprep when registering account
  • mod_roster: respect roster item changes introduced with roster_process_item hooks upon pushing
  • PubSub: Fix PubSub RSM on get_items
  • PubSub: Add support for PubSub publishing options
  • PEP: Fix sender in case of explicit pep subscriptions
  • ejabberd_xmlrpc: Report error when conversion of argument type fails

Feedback

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

The source package and binary installers are available at ProcessOne.

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

by Christophe Romain at August 03, 2016 15:07

Isode

Swift 4.0 (Beta): What’s new


Those of you keeping an eye on the Swift or Isode Twitter accounts will have noticed that a beta release of the new Swift 4.0 is now available for download from the Swift website .

Swift 4.0 includes a number of important functional changes compared to Swift 3.0 as well as a significant change to the look and feel of the product.

The main changes are listed in the changelog but there are two big changes that you’ll notice immediately on launching this Swift beta.

Better Chat Monitoring

Swift already makes it very easy to monitor events in multiple chat rooms through the use of keyword highlighting rules. In response to requests from a number of users we’ve supplemented this with the addition of a “trellis” layout option, allowing multiple chats and rooms to be tiled instead of being exclusively displayed as tabs within a single window.

Swift in A 2x2 tiled view showing 1 MUC room and 3 1:1 chats with security labels and delivery receipts

Swift in A 2x2 tiled view showing 1 MUC room and 3 1:1 chats with security labels and delivery receipts

This new option (Change Layout from the View menu) allows the user to define the number and arrangement of tiles to be displayed simultaneously and then move chats or rooms into an appropriate position. The trellis layout option and the existing tabbed layout option can be flexibly combined.

New Chat Design

We’ve introduced a new, cleaner chat design which we believe will enable users (especially in MUC rooms) to keep better track of their own contributions to conversations allows for better display of message receipts and better indication of unread messages.

The Swift 4.0 beta is available for Windows, MAC OS X, Ubuntu & Debian Linux. Please email (swift@swift.im) or tweet @swift_im any feedback you have to help us further improve Swift.

by Hannah Gibbs at August 03, 2016 15:01

Tigase Blog

XMPP An Introduction Part VII: Multi-User Chat II

The second part of MUC description, going over roles and affiliations.

by Daniel at August 03, 2016 01:21

Swift Blog

Swift 4.0 (Beta): What’s new

Those of you keeping an eye on the Swift or Isode Twitter accounts will have noticed that a beta release of the new Swift 4.0 is now available for download.

Swift 4.0 includes a number of important functional changes compared to Swift 3.0 as well as a significant change to the look and feel of the product.

The main changes are listed in the changelog but there are two big changes that you’ll notice immediately on launching this Swift beta:

Better Chat Monitoring

Swift already makes it very easy to monitor events in multiple chat rooms through the use of keyword highlighting rules. In response to requests from a number of users we’ve supplemented this with the addition of a “trellis” layout option, allowing multiple chats and rooms to be tiled instead of being exclusively displayed as tabs within a single window.

Trellis Layout

This new option (Change Layout from the View menu) allows the user to define the number and arrangement of tiles to be displayed simultaneously and then move chats or rooms into an appropriate position. The trellis layout option and the existing tabbed layout option can be flexibly combined.

New Chat Design

We’ve introduced a new, cleaner chat design which we believe will enable users (especially in MUC rooms) to keep better track of their own contributions to conversations allows for better display of message receipts and better indication of unread messages.

The Swift 4.0 beta is available for Windows, MAC OS X, Ubuntu & Debian Linux. Please email (swift@swift.im) or tweet (@swift_im) any feedback you have to help us further improve Swift.

August 03, 2016 00:00

August 01, 2016

Peter Saint-Andre

Philosophical Encounters

As I begin the large and deep task of (re-)reading the complete works of Aristotle, I am spurred to ponder why I am drawn to working through various philosophers in this way. I've come to see that there is an almost visceral element here, of directly confronting the insights of a great thinker and gaining intimate knowledge about how that person approached life and the pursuit of wisdom. In order to do this, I find that I need to read the philosopher's original language of expression: Greek for Aristotle and Epicurus, English for Thoreau and Rand, and German for Nietzsche (which makes me consider learning classical Chinese so that I can directly encounter Lao Tzu). I also find that I need to immerse myself directly in the philosopher's own words and not spend too much time reading other people's commentaries. Ironically, the outcome of my doing so is in each case a book that comprises more commentary! Yet for me the book that I write is merely a record of my personal encounter, which I use primarily to remind myself of what I have learned. Secondarily, I hope that by recording my own philosophical encounters I might inspire you to do the same with the great thinkers you find most congenial (and I would love to read about similar encounters with philosophers I likely won't have the time or inclination to work through completely myself, such as Confucius, Krishna, Buddha, Plato, the Stoics, Montaigne, Kierkegaard, Emerson, and Sartre). What's most important is the encounter itself, because it helps me gain more wisdom as I adopt some of the outlook and practices of someone much more sagacious than I am.

August 01, 2016 00:00

July 30, 2016

Ignite Realtime Blog

Smack 4.1.8 and 4.2.0-beta2 released

I've just uploaded Smack 4.1.8 and 4.2.0-beta2 to Maven Central.

 

Smack 4.1.8 fixes a few minor issues and is expected to be the last release of the 4.1 branch. As always, Smack releases with the same major and minor version numbers are drop in replacements. Ideally you just need to change a single variable somewhere in your build system.

 

Smack 4.2.0-beta2 is the latest beta of Smack's current development branch. Notable additions include support for XEP-0313: Message Archive Management (MAM) and the IoT XEP series.

by Ignite Realtime Blog (igniterealtime@jiveon.com) at July 30, 2016 09:22

Peter Saint-Andre

Aristotle Research Report #3: Ethical Beauty

Until my current reading of Aristotle's ethical writings, I had never noticed the connection he draws between ethics and beauty. No, not the surface beauty of physical good looks with which people are so obsessed these days, but the desire for true beauty: to have a beautiful character, to perform beautiful actions, to live a beautiful inner and outer life. Indeed, he frequently argues that an action is not truly ethical if it is not done for the sake of beauty. For example, someone who does something outwardly courageous only for the sake of social conformity does a good thing but not for the right reasons, whereas someone who performs the same act because it is a beautiful thing to do is in a higher ethical realm.

July 30, 2016 00:00

July 29, 2016

Tigase Blog

SCRAM-SHA1 Authentication Added

Tigase XMPP Server now offers the added security of SCRAM.

by Daniel at July 29, 2016 02:42

July 27, 2016

ProcessOne

XMPP Mobile groupchat — Introducing MUC Subscription

We are announcing today MUC Subscription, a new experimental feature in ejabberd that make group conversations in XMPP work seamlessly with mobile clients.

Toward persistent group chat participation

Today, a large proportion of XMPP chat projects are targeting both mobile, focusing on Whatsapp-like group conversations. Developers of such projects had been deeply frustrated because it was not possible to easily implement this feature on top of XMPP group chat features.

The main issue with XMPP group chat is that it is bound to user presence. Group chat in XMPP is based on XEP-0045: Multi-User Chat. It was designed to replicate IRC-like chat room, at a time where mobile internet connections were very rare. As a result, the protocol is based on presence. You join a room when you want to participate. You leave it when you are done.

On mobile, presence is almost irrelevant. You are always somewhat loosely reachable. However, your application may not run all the time because, to save battery life, mobile operating systems will hibernate your application when you are not actively using it. Mobile applications are supposed to be reachable through push notification services as they have generally no open TCP connection to the server in background state.

From XMPP point of view, it means that when the application is asleep, the XMPP client is not online. When it is not online, the user cannot be a participant in any chat room. He does not get messages nor notifications and thus misses events in the chat room.

Moreover, every time the user gets online, he has to rejoin all his ongoing conversations (MUC rooms). This is very consuming in terms of battery life and bandwidth.

Several workarounds had been tried by developers:

However, none of this approach did prove to be an easy straightforward solution to the problem. It did not work very well in the sense that these work-around are not totally transparent and affect several parts of your client development.

MIX to the rescue

There is a work-in-progress at the XMPP Standard Foundation (XSF) that aims to build a full rework of the Multi-User Chat specification, taking the requirement to avoid relying on presence into account.

The specification is called XEP-0369: Mediated Information eXchange (MIX). ejabberd already implements the draft since a few months and we are actively working on it and supported the effort.

However, this is a work-in-progress that will take time before being fully usable as a Multi-User Chat replacement.

As we wanted to solve the problem today, for all XMPP developers, we decided to explore a path in-between. We developed a smaller, less ambitious extension, that solves the issues developers are facing to implement mobile group chat today. We are still committed to MIX implementation and we think our proposed extension will please mobile developers and help us channel feedback to the XSF to build future proof MIX specification.

Introducing MUC Sub

So, what is MUC Sub about and how is it designed ?

ejabberd_MUCSUB

The goal of MUC Sub is to try to rely as much as possible on existing MUC specification, while making the smallest possible change that make mobile group conversation client easy.

We found that we only missed a few components. To play well with mobile, we just need to add the ability to send and receive messages to a room without having to send presence to the room. More generally we have to allow other type of interactions with the room (like configuration changes for example or kick and ban) without having to send presence to it to become a participant.

Basically, you need to be able to have a permanent subscription to a given room to receive the events. That subscription should grant you the right to send message and interact with the room. The name of our extension come from that simple idea: Add subscription feature to Multi-User Chat, hence MUC Sub.

We found we can put all the pieces together by reusing existing XMPP protocol components:

  • Reuse XMPP PubSub protocol to manage the subscription and wrap the events received as a subscriber from the room.
  • Rely on Message Archive Management to let client resync history as they need.
  • Rely on existing Push components (ProcessOne extension or XEP-0357: Push Notifications) to send events to mobile devices when application is asleep.

After writing a draft specification and a working implementation, we are very happy with the result: We have a working MUC Sub implementation that enables mobile group conversations. And we did all this by leveraging existing MUC specification and staying compliant with it.

The draft protocol is published on ejabberd documentation site: MUC Sub Draft

ejabberd main repository contains the code for MUC Sub. You can find it on Github: ejabberd.

The feature is enabled by default. To use it, just make sure you set the new parameter “Allow subscription” in the room on which you want to use it.

Next steps

We suggest, you can read the draft document we wrote, use the implementation and develop a mobile client.

Please, while you do so, send us your feedback about your success and troubles implementing your mobile group conversations.

MUC Sub is already available in ejabberd Community Edition repository and is going to be available as an experimental feature in ejabberd 16.07.

It will also be deployed as an experimental feature for ejabberd SaaS platform during the Summer. We are planning to test it as soon as possible with existing customers that are already willing to use it in production.

We hope you will like the approach and develop great new mobile clients thanks to ejabberd and MUC Sub !

by Mickaël Rémond at July 27, 2016 08:10

Fighting XMPP abuse and spam with ejabberd – ejabberd Workshop #1

In this video, Mickaël Rémond explains the features, options and API that can be used to protect ejabberd servers from spam and various other types of attacks.

The video was recorded at ejabberd Advanced Erlang Workshop in Paris.

You can watch the full talk online:

You can also download the slides: Fighting XMPP abuse and spam with ejabberd.

by Mickaël Rémond at July 27, 2016 08:05