home personal workZone travel about
C# implementation for XMPP (RFC 3920, 3921) - openXMPP

Related Pages


Project Proposal: Creating an Open Extensible Messaging and Presence Protocol (XMPP v1.0) Microsoft .NET (C#) Library

Rahul Agarwal and John Linford

September 26, 2005

Overview

Instant Messaging popularity has risen phenomenally.  Desktop IM systems are now available on most mobile devices, but popular networks and chat-clients like AIM, MSN Messenger and Yahoo Messenger are propriety and have no interoperability.  Furthermore, these protocols are often limited to basic chat functionality and cannot be easily extended to add new features.

The XMPP protocols (created initially by the Jabber[1] community) are now formalized by IETF and provide “open Extensible Markup Language (XML) protocols for near-real-time messaging, presence, and request-response services” (RFC3920[2]).

An XMPP based service uses a typical client-server model over a TCP connection.  The clients can be registered on different servers and, if gateways are used, can communicate with non-XMPP clients (Figure 1).  XMPP servers can route and store client data (i.e. undeliverable messages and rosters (contact lists)).

RFCs

  1. RFC 3920, XMPP Core: Defines core features like XML Streams, XML Stanzas, SASL and TLS.
  2. RFC 3921[3], XMPP IM: Defines XMPP extensions for basic instant messaging and presence.

Goals

The goals of this project are:

  1. Create an open .NET library that implements basic instant messaging services as described in the XMPP (version 1.0) RFC 3920 and 3921. This library will be called openXMPP and implemented using C#.  Similar libraries (agsXMPP[4] and Jabber-Net[5]) exist, however they are not licensed under GPL nor do they offer a clean design.  These two libraries will however serve as a good reference point. This library will enable connecting to XMPP networks, for example connections to Google Talk[6] should be possible
  2. Using openXMPP and the Pocket Office Object Model[7], develop a chat application called PocketXMPP for Windows Mobile devices.  PocketXMPP will provide basic chat functionality as well as “beaming” appointments and tasks to other clients on the XMPP network

Scope

XMPP defines both server-to-server and client-to-server communication.  This project is strictly limited to client-to-server communication.  Within this scope, we will achieve full client compliance as defined in the above RFCs.  We will provide the basic features of message exchange with other users, exchange of presence information (RFC 3921, Section 1.2), and the basic communication features of RFC 3920.  Other features like subscriptions, roster management and user blocking may not be supported by the end of this project.  At the end of the project, the openXMPP library and PocketXMPP will be made available for further development to the open source community.

Milestones

  1. Milestone 1 (October 24, 2005): Gain an understanding of the XMPP protocol, identify libraries and other resources required, and create the UML Class Diagrams for openXMPP and PocketXMPP
  2. Milestone 2 (November 11, 2005): Complete implementing openXMPP library and start on PocketXMPP application for the Windows Mobile platform
  3. Milestone 3 (December 8, 2005): Complete PocketXMPP application and demonstrate project

Components and Technology

Required software:

Available from CS@VT MSDN software distribution site[8]:

  1. Microsoft Visual Studio .NET 2003

Freely available from Microsoft Download[9]:

  1. SDK for Windows Mobile 2003-based Pocket PCs
  2. Mobile Application Development Toolkit
  3. Windows Mobile 2003 Second Edition Emulator Images for Pocket PC


[1]               http://www.jabber.org (Last accessed September 18, 2005)

[2]               RFC 3920 http://www.xmpp.org/specs/rfc3920.html (Last accessed September 18, 2005)

[3]               RFC 3921 http://www.xmpp.org/specs/rfc3921.html (Last accessed September 18, 2005)

[4]               http://www.ag-software.de/index.php?option=content&task=view&id=72&Itemid=103 (Last accessed September 18, 2005)

[5]               http://www.jabberstudio.org/projects/jabber-net/project/view.php (Last accessed September 18, 2005)

[6]               Google Talk http://www.google.com/talk/developer.html (Last accessed September 18, 2005)

[7]               http://msdn.microsoft.com/library/en-us/guide_ppc/html/ppc_conpocketoutlookobjectmodel.asp (Last accessed September 24, 2005)

[8]               http://software.cs.vt.edu/ (Last accessed September 18, 2005)

[9]               http://download.microsoft.com (Last accessed September 24)