3. About Tigase XMPP Server

Tigase XMPP Server is an Open Source and Free (AGPLv3) Java based server. The goals behind its design and implementation of the server are:

  1. Make the server robust and reliable.

  2. Make the server a secure communication platform.

  3. Make a flexible server which can be applied to different use cases.

  4. Make an extensible server which takes full advantage of XMPP protocol extensibility.

  5. Make the server easy to setup and maintain.

3.1. Robust and reliable

This means that the server can handle many concurrent requests/connections and can run for a long time reliably. The server is designed and implemented to handle millions of simultaneous connections.

It is not enough however to design and implement a high load server and hope it will run well. The main focus of the project is put in into testing. Tests are taken so seriously that a dedicated testing framework has been implemented. All server functions are considered as implemented only when they pass a rigorous testing cycle. The testing cycle consists of 3 fundamental tests:

  1. Functional tests - Checking whether the function works at all.

  2. Performance tests - Checking whether the function performs well enough.

  3. Stability tests - Checking whether the function behaves well in long term run. It must handle hundreds of requests a second in a several hour server run.

3.2. Security

There are a few elements of the security related to XMPP servers: secure data transmissions which is met by the implementation of SSL or TLS protocol, secure user authorization which is met by the implementation of DIGEST or SASL user authorization and secure deployment which is met by component architecture.

Secure deployment Tigase software installation does not impact network security. Companies usually have their networks divided into 2 parts: DMZ which is partially open to the outside world and the Private network which is closed to the outside world.

If the XMPP server is to provide an effective way of communication between company employees regardless if they are in a secure company office or outside (perhaps at a customer site), it needs to accept both internal and external connections. So the natural location for the server deployment is the DMZ. However, this solution has some considerations: each company has normally established network users base and integrated authorization mechanisms. However, that information should be stored outside the DMZ to protect internal security, so how to maintain ease of installation and system security?

Tigase server offers a solution for such a case. With it’s component structure, Tigase can be easily deployed on any number machines and from the user’s point of view it is seen as a one logical XMPP server. In this case we can install a Session Manager module in the private network, and a Client Connection Manager with Server Connection Manager in the DMZ.

Session Manager connects to DMZ and receives all packets from external users. Thus is can securely realize users authorization based on company authorization mechanisms.

3.3. Flexibility

There are many different XMPP server implementations. The most prevalent are:

  • Used as a business communication platform in small and medium companies where the server is not under a heavy load. For such deployments security is a key feature.

  • For huge community websites or internet portal servers is, on the other hand, usually under very heavy load and has to support thousands or millions of simultaneous connections. For such a deployment we need a different level of security as most of the service is open to the public.

  • For very small community deployments or for small home networks the key factor is ease to deploy and maintain.

Architecture based on components provides the ability to run selected modules on separate machines so the server can be easily applied in any scenario.

For simple installation the server generates a config file which can be used straight away with very few modifications or none at all. For complex deployments though, you can tweak configurations to your needs and setup XMPP server on as many physical machines as you need.

3.4. Extensibility

The world changes all the time as does user’s needs. The XMPP protocol has been designed to be extensible to make it easy to add new features and apply it to those different user’s needs. As a result, XMPP is a very effective platform not only for sending messages to other users, it can also be extended for sending instant notifications about events, a useful platform for on-line customer service, voice communication, and other cases where sending information instantly to other people is needed.

Tigase server has been designed to be extensible using a modular architecture. You can easily replace components which do not fulfill your requirements with others better fitting your needs. But that is not all, another factor of extensibility is how easy is to replace or add new extensions. A great deal of focus has been put into the server design API to make it easy for other software developers to create extensions and implement new features.

3.5. Ease of Use

Complex computer networks consisting of many servers with different services are hard to maintain. This requires employing professional staff to operate and maintain the network.

Not all networks are so complex however, most small companies have just a few servers for their needs with services like e-mail and a HTTP server. They might want to add an XMPP server to the collection of their services and don’t want to dedicate resources on setup and maintenance. For such users our default configuration is exactly what they need. If the operating system on the server is well configured, then Tigase should automatically pickup the correct hostname and be ready to operate immediately.

Tigase server is designed and implemented to allow dynamic reconfiguration during runtime so there is no need to restart the server each time you want to change configuration settings.

There are also interfaces and handlers available to make it easy to implement a web user interface for server monitoring and configuring.

3.6. XMPP Supported Extensions

Based on XEP-0387: XMPP Compliance Suites 2018

3.6.1. Core Compliance Suite

Table 1.Core Compliance Suite

Support

Specification

Name

Comment

RFC6120

Extensible Messaging and Presence Protocol (XMPP): Core

RFC7622

Extensible Messaging and Presence Protocol (XMPP): Address Format

We support previous version of the specification: RFC6122

RFC7590

Use of Transport Layer Security (TLS) in the Extensible Messaging and Presence Protocol (XMPP)

XEP-0368

SRV records for XMPP over TLS

Requires adding DNS entries pointing to port 5223

XEP-0030

Service Discovery

XEP-0115

Entity Capabilities

XEP-0114

Jabber Component Protocol

XEP-0163

Personal Eventing Protocol

3.6.2. Web Compliance Suite

Table 2.Web Compliance Suite

Support

Specification

Name

Comment

RFC7395

An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket

XEP-0206

XMPP Over BOSH

XEP-0124

Bidirectional-streams Over Synchronous HTTP (BOSH)

3.6.3. IM Compliance Suite

Table 3.Web Compliance Suite

Support

Specification

Name

Comment

RFC6120

Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence

XEP-0084

User Avatar

XEP-0153

vCard-Based Avatars

XEP-0054

vcard-temp

XEP-0280

Message Carbons

XEP-0191

Blocking Command

XEP-0045

Multi-User Chat

XEP-0249

Direct MUC Invitations

XEP-0048

Bookmarks

XEP-0223

Persistent Storage of Private Data via PubSub

XEP-0049

Private XML Storage

XEP-0198

Stream Management

Both Session Resumption and Stanza Acknowledgements

XEP-0313

Message Archive Management

3.6.4. Mobile Compliance Suite

Table 4.Web Compliance Suite

Support

Specification

Name

Comment

RFC7395

An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket

XEP-0198

Stream Management

Both Session Resumption and Stanza Acknowledgements

XEP-0352

Client State Indication

XEP-0357

Push Notifications

3.6.5. Non-Compliance Suite Extensions

Table 5.Core Compliance Suite

Support

Specification

Name

Comment

XEP-0004

Data Forms

XEP-0008

IQ-Based Avatars

XEP-0012

Last Activity

XEP-0013

Flexible Offline Message Retrieval

XEP-0016

Privacy Lists

XEP-0020

Feature Negotiation

XEP-0022

Message Events

XEP-0047

In-Band Bytestreams

XEP-0050

Ad-Hoc Commands

XEP-0059

Result Set Management

XEP-0060

Publish-Subscribe

XEP-0065

SOCKS5 Bytestreams

XEP-0066

Out of Band Data

XEP-0068

Field Standardization for Data Forms

XEP-0071

XHTML-IM

XEP-0072

SOAP Over XMPP

XEP-0077

In-Band Registration

XEP-0078

Non-SASL Authentication

XEP-0079

Advanced Message Processing

XEP-0080

User Location

XEP-0082

XMPP Date and Time Profiles

XEP-0083

Nested Roster Groups

XEP-0085

Chat State Notifications

XEP-0086

Error Condition Mappings

XEP-0091

Legacy Delayed Delivery

XEP-0092

Software Version

XEP-0096

File Transfer

XEP-0100

Gateway Interaction

XEP-0106

JID Escaping

XEP-0107

User Mood

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0108

User Activity

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0118

User Tune

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0127

Common Alerting Protocol (CAP) Over XMPP

XEP-0128

Service Discovery Extensions

XEP-0131

Stanza Headers and Internet Metadata (SHIM)

XEP-0133

Service Administration

XEP-0136

Message Archiving

XEP-0141

Data Forms Layout

[1]

XEP-0142

Workgroup Queues

XEP-0144

Roster Item Exchange

XEP-0145

Annotations

XEP-0146

Remote Controlling Clients

XEP-0152

Reachability Addresses

XEP-0155

Stanza Session Negotiation

XEP-0156

Discovering Alternative XMPP Connection Methods

Uses DNS records, so will work with Tigase XMPP Server

XEP-0157

Contact Addresses for XMPP Services

XEP-0160

Best Practices for Handling Offline Messages

XEP-0166

Jingle

XEP-0167

Jingle RTP Sessions

XEP-0170

Recommended Order of Stream Feature Negotiation

XEP-0171

Language Translation

XEP-0172

User Nickname

XEP-0174

Serverless Messaging

XEP-0175

Best Practices for Use of SASL ANONYMOUS

XEP-0176

Jingle ICE-UDP Transport Method

XEP-0177

Jingle Raw UDP Transport Method

XEP-0178

Best Practices for Use of SASL EXTERNAL with Certificates

XEP-0179

Jingle IAX Transport Method

XEP-0180

Jingle Video via RTP

XEP-0181

Jingle DTMF

XEP-0184

Message Receipts

XEP-0185

Dialback Key Generation and Validation

XEP-0190

Best Practice for Closing Idle Streams

XEP-0199

XMPP Ping

XEP-0201

Best Practices for Message Threads

XEP-0202

Entity Time

XEP-0203

Delayed Delivery

XEP-0205

Best Practices to Discourage Denial of Service Attacks

XEP-0209

Metacontacts

XEP-0220

Server Dialback

XEP-0224

Attention

XEP-0225

Component Connections

XEP-0226

Message Stanza Profiles

XEP-0231

Bits of Binary

XEP-0234

Jingle File Transfer

XEP-0245

The /me Command

XEP-0246

End-to-End XML Streams

XEP-0247

Jingle XML Streams

XEP-0250

C2C Authentication Using TLS

XEP-0251

Jingle Session Transfer

XEP-0260

Jingle SOCKS5 Bytestreams Transport Method

XEP-0261

Jingle In-Band Bytestreams Transport

XEP-0262

Use of ZRTP in Jingle RTP Sessions

XEP-0277

Microblogging over XMPP

XEP-0292

vCard4 Over XMPP

XEP-0301

In-Band Real Time Text

XEP-0305

XMPP Quickstart

XEP-0323

Internet of Things - Sensor Data

XEP-0324

Internet of Things - Provisioning

XEP-0325

Internet of Things - Control

XEP-0326

Internet of Things - Concentrators

XEP-0333

Chat Markers

XEP-0363

HTTP File Upload

XEP-0387

XMPP Compliance Suites 2018

3.6.6. Full, ordered list of supported RFCs and XEPs:

Support

Specification

Name

Comment

RFC6120

Extensible Messaging and Presence Protocol (XMPP): Core

RFC6120

Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence

RFC7622

Extensible Messaging and Presence Protocol (XMPP): Address Format

We support previous version of the specification: RFC6122

RFC7395

An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket

RFC7395

An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket

RFC7590

Use of Transport Layer Security (TLS) in the Extensible Messaging and Presence Protocol (XMPP)

XEP-0004

Data Forms

XEP-0008

IQ-Based Avatars

XEP-0012

Last Activity

XEP-0013

Flexible Offline Message Retrieval

XEP-0016

Privacy Lists

XEP-0020

Feature Negotiation

XEP-0022

Message Events

XEP-0030

Service Discovery

XEP-0045

Multi-User Chat

XEP-0047

In-Band Bytestreams

XEP-0048

Bookmarks

XEP-0049

Private XML Storage

XEP-0050

Ad-Hoc Commands

XEP-0054

vcard-temp

XEP-0059

Result Set Management

XEP-0060

Publish-Subscribe

XEP-0065

SOCKS5 Bytestreams

XEP-0066

Out of Band Data

XEP-0068

Field Standardization for Data Forms

XEP-0071

XHTML-IM

XEP-0072

SOAP Over XMPP

XEP-0077

In-Band Registration

XEP-0078

Non-SASL Authentication

XEP-0079

Advanced Message Processing

XEP-0080

User Location

XEP-0082

XMPP Date and Time Profiles

XEP-0083

Nested Roster Groups

XEP-0084

User Avatar

XEP-0085

Chat State Notifications

XEP-0086

Error Condition Mappings

XEP-0091

Legacy Delayed Delivery

XEP-0092

Software Version

XEP-0096

File Transfer

XEP-0100

Gateway Interaction

XEP-0106

JID Escaping

XEP-0107

User Mood

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0108

User Activity

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0114

Jabber Component Protocol

XEP-0115

Entity Capabilities

XEP-0118

User Tune

Server support via Personal Eventing Protocol (XEP-0163)

XEP-0124

Bidirectional-streams Over Synchronous HTTP (BOSH)

XEP-0128

Service Discovery Extensions

XEP-0127

Common Alerting Protocol (CAP) Over XMPP

XEP-0131

Stanza Headers and Internet Metadata (SHIM)

XEP-0133

Service Administration

XEP-0136

Message Archiving

XEP-0141

Data Forms Layout

XEP-0142

Workgroup Queues

XEP-0144

Roster Item Exchange

XEP-0145

Annotations

XEP-0146

Remote Controlling Clients

XEP-0152

Reachability Addresses

XEP-0153

vCard-Based Avatars

XEP-0155

Stanza Session Negotiation

XEP-0156

Discovering Alternative XMPP Connection Methods

Uses DNS records, so will work with Tigase XMPP Server

XEP-0157

Contact Addresses for XMPP Services

XEP-0160

Best Practices for Handling Offline Messages

XEP-0163

Personal Eventing Protocol

XEP-0166

Jingle

XEP-0167

Jingle RTP Sessions

XEP-0170

Recommended Order of Stream Feature Negotiation

XEP-0171

Language Translation

XEP-0172

User Nickname

XEP-0174

Serverless Messaging

XEP-0175

Best Practices for Use of SASL ANONYMOUS

XEP-0176

Jingle ICE-UDP Transport Method

XEP-0177

Jingle Raw UDP Transport Method

XEP-0178

Best Practices for Use of SASL EXTERNAL with Certificates

XEP-0179

Jingle IAX Transport Method

XEP-0180

Jingle Video via RTP

XEP-0181

Jingle DTMF

XEP-0184

Message Receipts

XEP-0185

Dialback Key Generation and Validation

XEP-0190

Best Practice for Closing Idle Streams

XEP-0191

Blocking Command

XEP-0198

Stream Management

Both Session Resumption and Stanza Acknowledgements

XEP-0199

XMPP Ping

XEP-0201

Best Practices for Message Threads

XEP-0202

Entity Time

XEP-0203

Delayed Delivery

XEP-0205

Best Practices to Discourage Denial of Service Attacks

XEP-0206

XMPP Over BOSH

XEP-0209

Metacontacts

XEP-0220

Server Dialback

XEP-0223

Persistent Storage of Private Data via PubSub

XEP-0224

Attention

XEP-0225

Component Connections

XEP-0226

Message Stanza Profiles

XEP-0231

Bits of Binary

XEP-0234

Jingle File Transfer

XEP-0245

The /me Command

XEP-0246

End-to-End XML Streams

XEP-0247

Jingle XML Streams

XEP-0249

Direct MUC Invitations

XEP-0250

C2C Authentication Using TLS

XEP-0251

Jingle Session Transfer

XEP-0260

Jingle SOCKS5 Bytestreams Transport Method

XEP-0261

Jingle In-Band Bytestreams Transport

XEP-0262

Use of ZRTP in Jingle RTP Sessions

XEP-0277

Microblogging over XMPP

XEP-0280

Message Carbons

XEP-0292

vCard4 Over XMPP

XEP-0301

In-Band Real Time Text

XEP-0305

XMPP Quickstart

XEP-0313

Message Archive Management

XEP-0323

Internet of Things - Sensor Data

XEP-0324

Internet of Things - Provisioning

XEP-0325

Internet of Things - Control

XEP-0326

Internet of Things - Concentrators

XEP-0333

Chat Markers

XEP-0352

Client State Indication

XEP-0357

Push Notifications

XEP-0363

HTTP File Upload

XEP-0368

SRV records for XMPP over TLS

Requires adding DNS entries pointing to port 5223

XEP-0387

XMPP Compliance Suites 2018

3.7. Tigase Custom Extensions

3.7.1. General features

tabel 6.Monitoring

Support

Name

Comment

[2]

AuditLog

Ability functionality to log important events in a system (loggins, message exchanges, calls)

Anti Abuse

Fight stanza SPAM, DoS, brute-force attacks and other threats

Virtual domains

Ability to create and manage multiple virtual domains from a single instance and restart-less management

MUC subscribe for offline push

Option to register permanently to the room to receive push notifications about new messages.

Scripting API

Supports the Java Scripting API JSR-223

JMX monitoring

Advanced monitoring the server via JMX protocol with an API for connecting custom monitors and TCP/IP end-point for connecting general purpose JMX tools

HTTP monitoring

Basic monitoring via HTTP protocol

XMPP Monitoring

Pluggable, active monitoring via XMPP, retrieving detailed server statistics, receiving automatic notifications about possible problems discovered by the self-monitor mechanisms

SNMP Monitoring

Advanced server monitoring via SNMP.

Bosh Cache

Bosh Session Cache - a feature to quickly reload user data - roster, presences and messages history by the web client (for example after web page reload)

Clustering

Full clustering support for HA and LB with pluggabble clustering strategies for perfect optimising the cluster to the client’s system

Advanced Clustering Strategy

Dedicated, specialised clustering strategy for best possible performance

MUC Clustered

Support for clustering group chatrooms with various, pluggable strategies

PubSub Clustered

Support for clustering PubSub component with various, pluggable strategies

Mobile optimisations

Optimizations designed for Mobile Devices

OSGi

Support for running in OSGi environment, i.e. as embedded XMPP server in advanced application server

Dynamic rosters

Ability to create users’ rosters entries on the fly based on data retrieved from any sources

Command line admin tools

Commandline utility to manage server

Unified Archive

An extension to XEP-0313 Message Archive Management, with greatly improved flexibility in terms of what can be archived.

3.7.2. Repositories/Databases

Table 7.Repositories/Databases

Support

Name

Comment

DB per domain

Ability to have multiple databases for specific domains.

PostgreSQL

Full support for PostgreSQL database with database schemas excluding dedicated DB schema for PubSub component

MySQL

Full support for MySQL database with database schemas, dedicated DB schema for PubSub component

SQL Server

Full support for MS SQL Server database with database schemas excluding dedicated DB schema for PubSub component, only in Tigase server version 3.x

Derby DB

Full support for built-in Derby database with database schemas excluding dedicated DB schema for PubSub component

JDBC

Support for all JDBC enabled databases, although the database schemas are available for some databases

Drupal Auth

Drupal authentication - the Tigase server can share user authentication database with Drupal CMS and authenticate users agains Drupal user database

Drupal Auth

Close integration with Drupal CMS, the Tigase can send notifications to subscribed users about new posts, comments and can also publish short news information via XMPP

LDAP-Auth

LDAP Authentication Connector Supported