** ABOUT Apache Vysper and XMPP **

This project aims at delivering a server implementation of both the core and IM parts of the XMPP protocol 
(as specified in RFCs 3920 [1] + 3921 [2]).

"Vysper" is pronounced like in "whisper".

XMPP[3] is an open, secure and extensible instant messaging protocol which has evolved from Jabber.
It provides interoperability features for communication with other XMPP and non-XMPP servers.
It is used and supported by many IM applications, both client and server.

The protocol and its many extensions (called XEPs) are maintained by the XMPP Standards Foundation (XSF) [4].

In addition to the basic protocol and many small extensions, Vysper currently comes with working implementations for 
  Multi-User Chat (XEP-0045) [5]
and
  Publish-Subscribe (XEP-0060) [6] 

[1] http://www.ietf.org/rfc/rfc3920.txt
[2] http://www.ietf.org/rfc/rfc3921.txt
[3] http://en.wikipedia.org/wiki/XMPP
[4] http://www.xmpp.org/
[5] http://xmpp.org/extensions/xep-0045.html
[6] http://xmpp.org/extensions/xep-0060.html

** SOURCE CODE **

The most recent source code can be retrieved using SVN

  svn checkout http://svn.apache.org/repos/asf/mina/sandbox/vysper/trunk

** BUILDING ** 

You need Apache Maven 2, Maven 2.2.1 or later is recommended. Run
  mvn install
and you should find a number of JAR files in different target/ folders.
The different build artifacts are compiled in dist/.

** RUNNING **

There are different ways to run Vysper

A ready-to-run setup is created by the build in 
  dist/targtet/appassembler/
Under  
  dist/targtet/appassembler/bin
you'll find start scripts for Unix/Mac and Windows.

This makes use of the Spring-based server runtime.
Main class is 
  org.apache.vysper.spring.ServerMain
and the bean configuration is located in 
  server/core/src/main/config/spring-config.xml

There is a non-Spring runtime, too:
  org.apache.vysper.spring.ServerMain
The source code shows how the different components are plugged together.

It can serve as a template for integrating Vysper in any other application.
The class
  org.apache.vysper.xmpp.server.XMPPServer
is built to make the server easily configurable and embeddable.
  
** CONFIGURATION **

Vysper uses SSL encryption per default.
For this purpose, an TLS certificate is provided.
It is highly recommended to create and use a self-generated certificate!

There are three users configured by default.
Their account names are user1@vysper.org ... user3@vysper.org
and their password is password1 for all three.
Please change these settings before starting!

Please note that the domain vysper.org is not running an XMPP server.
If you go with the default setup and don't configure your own domain name,
please note that you have to configure your Jabber clients to force the host name
(for example the IP or localhost, depending on how you run it).

** CONTRIBUTING **

You can contribute by creating a new JIRA issue entry (or working on an existing).
JIRA can be found at https://issues.apache.org/jira
You need an account there. 
The project name is "VYSPER".

For an overview of all VYSPER related issues, visit 
http://issues.apache.org/jira/browse/VYSPER

Any contribution is highly welcome. It can easily reviewed if it comes in form of a patch attached to a JIRA entry.  

Currently, all coding is done unit test driven. Well, at least it should be ;-)

Please find us on MINA'S developer mailing list dev@mina.apache.org. 

