
                              Release Notes
                             ejabberd 2.1.0

  ejabberd 2.1.0 is a major new version for ejabberd adding many
  new features, performance and scalability improvements.

  ejabberd 2.1.0 includes many new features, improvements and bug fixes.
  A complete list of changes can be retrieved from:
   http://redir.process-one.net/ejabberd-2.1.0

  The new code can be downloaded from ejabberd download page:
     http://www.process-one.net/en/ejabberd/


  New features and improvements:

* Anti-abuse
- Captcha support (XEP-0158). The example script uses ImageMagick.
- New option: registration_timeout to limit registrations by time
- Use send timeout to avoid locking on gen_tcp:send
- mod_ip_blacklist: client blacklist support by IP

* API
- ejabberd_http provides Host, Port, Headers and Protocol in HTTP requests
- Export function to create MUC room
- New events: s2s_send_packet and s2s_receive_packet
- New event: webadmin_user_parse_query when POST in web admin user page
- Support distributed hooks over the cluster

* Authentification
- Extauth responses: log strange responses and add timeout

* Binary Installer
- Includes exmpp library to support import/export XML files

* Caps
- Remove useless caps tables entries
- mod_caps must handle correctly external contacts with several resources
- Complain if mod_caps disabled and mod_pubsub has PEP plugin enabled

* Clustering and Architecture

* Configuration
- Added option access_max_user_messages for mod_offline
- Added option define_macro and use_macro
- Added option include_config_file to include additional configuration files
- Added option outgoing_s2s_options to define IP address families and timeout
- Added option registration_timeout to ejabberd.cfg.example
- Added option s2s_dns_options to define DNS timeout and retries
- Added option ERL_OPTIONS to ejabberdctl.cfg
- Added option FIREWALL_WINDOW to ejabberdctl.cfg
- Added option EJABBERD_PID_PATH to ejabberdctl.cfg
- Deleted option user_max_messages of mod_offline
- Check certfiles are readable on server start and listener start
- Config file management mix file reading and sanity check
- Include example PAM configuration file: ejabberd.pam
- New ejabberd listener: ejabberd_stun
- Support to bind the same port to multiple interfaces
- New syntax to specify the IP address and IPv6 in listeners
  configuration. The old options {ip,{1,2,3,4}} and inet6 are
  supported even if they aren't documented.
- New syntax to specify the network protocol: tcp or udp
- Report error at startup if a listener module isn't available
- Only listen in a port when actually ready to serve requests

* Core architecture
- More verbose error reporting for xml:element_to_string
- Deliver messages when first presence is Invisible
- Better log message when config file is not found
- Include original timestamp on delayed presences

* Crypto
- Do not ask certificate for client (c2s)
- SSL code remove from ejabberd in favor of TLS
- Support Zlib compression after STARTTLS encryption
- tls v1 client hello

* Documentation
- Document possible default MUC room options
- Document service_check_from in the Guide
- Document s2s_default_policy and s2s_host in the Guide
- new command and guide instructions to change node name in a Mnesia database

* ejabberd commands
- ejabberd commands: separate command definition and calling interface
- access_commands restricts who can execute what commands and arguments
- ejabberdctl script now displays help and categorization of commands

* HTTP Binding and HTTP Polling
- HTTP-Bind: module optimization and clean-up
- HTTP-Bind: allow configuration of max_inactivity timeout
- HTTP-Poll: turn session timeout into a config file parameter

* Jingle
- STUN server that facilitates the client-to-client negotiation process

* LDAP
- Faster reconnection to LDAP servers
- LDAP filter optimisation: Add ability to filter user in ejabberd and not LDAP
- LDAP differentiates failed auth and unavailable auth service
- Improve LDAP logging
- LDAPS support using TLS.

* Localization
- Use Gettext PO for translators, export to ejabberd MSG
- Support translation files for additional projects

* Multi-User Chat (MUC)
- Allow admins to send messages to rooms
- Allow to store room description
- Captcha support in MUC: the admin of a room can configure it to
  require participants to fill a captcha to join the room.
- Limit number of characters in Room ID, Name and Description
- Prevent unvoiced occupants from changing nick
- Support Result Set Management (XEP-0059) for listing rooms
- Support for decline of invitation to MUC room
- mod_muc_log options: plaintext format; filename with only room name

* Performance
- Run roster_get_jid_info only if privacy list has subscription or group item
- Significant PubSub performance improvements

* Publish-Subscribe
- Add nodetree filtering/authorization
- Add subscription option support for collection nodes
- Allow Multiple Subscriptions
- Check option of the nodetree instead of checking configuration
- Implement whitelist authorize and roster access model
- Implicit item deletion is not notified when deleting node
- Make PubSub x-data configuration form handles list value
- Make default node name convention XEP-compatible, document usage of hierarchy
- Send authorization update event (XEP-0060, 8.6)
- Support of collection node subscription options
- Support ODBC storage. Experimental, needs more testing.

* Relational databases:
- Added MSSQL 2000 and 2005
- Privacy rules storage in MySQL
- Implement reliable ODBC transaction nesting

* Source Package
- Default installation directories changed. Please see the upgrade notes below.
- Allow more environment variable overrides in ejabberdctl
- ChangeLog is not edited manually anymore; it's generated automatically.
- Install the ejabberd Guide
- Install the ejabberd include files
- New option for the 'configure' script: --enable-user which installs
  ejabberd granting permission to manage it to a regular system user;
  no need to use root account to.
- Only try to install epam if pam was enabled in configure script
- Spool, config and log dirs: owner writes, group reads, others do nothing.
- Provides an example ejabberd.init file

* S2S
- Option to define s2s outgoing behaviour: IPv4, IPv6 and timeout
- DNS timeout and retries, configurable with s2s_dns_options.

* Shared rosters
- When a member is added/removed to group, send roster upgrade to group members

* Users management
- When account is deleted, cancel presence subscription for all roster items

* XEP Support
- Added XEP-0059 Result Set Management (for listing rooms)
- Added XEP-0082 Date Time
- Added XEP-0085 Chat State Notifications
- Added XEP-0157 Contact Addresses for XMPP Services
- Added XEP-0158 CAPTCHA Forms (in MUC rooms)
- Added STUN server, for XEP-0176: Jingle ICE-UDP Transport Method
- Added XEP-0199 XMPP Ping
- Added XEP-0202 Entity Time
- Added XEP-0203 Delayed Delivery
- Added XEP-0227 Portable Import/Export Format for XMPP-IM Servers
- Added XEP-0237 Roster Versioning

* Web Admin
- Display the connection method of user sessions
- Cross link of ejabberd users in the list of users and rosters
- Improved the browsing menu: don't disappear when browsing a host or node
- Include Last-Modified HTTP header in responses to allow caching
- Make some Input areas multiline: options of listening ports and modules
- Support PUT and DELETE methods in ejabberd_http
- WebAdmin serves Guide and links to related sections

* Web plugins
- mod_http_fileserver: new option directory_indices, and improve logging


   Important Notes:

- ejabberd 2.1.0 requires Erlang R10B-9 or higher.
  R12B-5 is the recommended version. Support for R13B is experimental.


   Upgrading From ejabberd 1.x.x:

- Check the Release Notes of the intermediate versions for additional
  information about database or configuration changes.


   Upgrading From ejabberd 2.0.x:

- The database schemas didn't change since ejabberd 1.1.4.
  Anyway, it is recommended to backup the Mnesia spool directory and
  your SQL database (if used) before upgrading ejabberd.

- The listener options 'ip' and inet6' are not documented anymore
  but they are supported and you can continue using them.
  There is a new syntax to define IP address and IP version.
  As usual, check the ejabberd Guide for more information.

- The log file sasl.log is now called erlang.log

- ejabberdctl commands now have _ characters instead of -.
  For backwards compatibility, it is still supported -.

- mod_offline has a new option: access_max_user_messages.
  The old option user_max_messages is no longer supported.

- If you upgrade from ejabberd trunk SVN, you must execute this:
  $ ejabberdctl rename_default_nodeplugin

- Default installation directories changed a bit:
  * The Mnesia spool files that were previously stored in
      /var/lib/ejabberd/db/NODENAME/*
    are now stored in
      /var/lib/ejabberd/*
  * The directories
      /var/lib/ejabberd/ebin
      /var/lib/ejabberd/priv
    and their content is now installed as
      /lib/ejabberd/ebin
      /lib/ejabberd/priv
  * There is a new directory with Erlang header files:
      /lib/ejabberd/include
  * There is a new directory for ejabberd documentation,
    which includes the Admin Guide and the release notes::
      /share/doc/ejabberd

- How to upgrade from previous version to ejabberd 2.1.0:
  1. Stop the old instance of ejabberd.
  2. Run 'make install' of new ejabberd 2.1.0 to create the new directories.
  3. Copy the content of your old directory:
       /var/lib/ejabberd/db/NODENAME/
     to the new location:
       /var/lib/ejabberd/
     so you will have the files like this:
       /var/lib/ejabberd/acl.DCD ...
  4. You can backup the content of those directories and delete them:
       /var/lib/ejabberd/ebin
       /var/lib/ejabberd/priv
       /var/lib/ejabberd/db
  5. Now try to start your new ejabberd 2.1.0.


  Bug reports

  You can officially report bugs on ProcessOne support site:
  http://support.process-one.net/
