JavaOne 2005 SIP-Communicator.org
SIP Communicator Generics The SIP Communicator is an Audio/Video software phone (and soon instant messenger) completely open sourced on java.net. Currently Supports: NAT & Firewall Traversal (using stun4j) Audio and Video communication sessions IPv4/IPv6 support As of version 1.0 Instant messaging (SIMPLE, Jabber, ICQ/AIM, MSN) OSGI based core Flexible plug-in extensibility IzPack multiplatform installer
Why OSGI? Modularity – different modules come in different bundles Extensibility – the OSGI framework defines the notion of an abstract Service (a set of interfaces) that is defined once and may be implemented and/or used by multiple bundles (plugins) which may even be added at runtime. Better design - makes developers think “early” of a public interface for their work and thus produce clear and easily understandable architecture. Portability – bundles could be reused in any OSGI implementation, no matter what the project is. Ease of deployment – most OSGI implementations offer hot deployment and on-line bundle repositories that make plugin install and update extremely easy for end users.
SIP Communicator 1.0 Architecture Distinct project modules now come as separate service implementations such as: ProtocolProviderService - SIP/SIMPLE, Jabber, AIM/ICQ, MSN, Yahoo! protocol stacks all implement that service which allows other bundles (e.g. the user interface) to access them in the same manner. This makes quite easy the implementation and project integration of new protocol stacks. UserInterfaceService – Don’t like the UI? Alright – implement it yourself and not only will it look the way you want but all existing plug-ins that register in the UI would also work with your implementation. Such a service, though currently only implemented on Swing, would also allow for implementations based on SWT, AWT and even J2ME’s midlets. MultiMediaService – Wraps all media features such as, audio capture, video grab, encoding and decoding, RTP/RTSP, etc. ConfigurationService - stores configuration properties and makes them available across the all services CallLoggingService – Registers all outgoing, incoming, and missed calls MessageHistoryService – Keeps a log for exchanged instant messages LoggingService – Provides logging features. Currently wrapping log4j.
SIP Communicator 1.0 Architecture A Simple Scenario Swing UIServiceImplementation Bundle UserInterfaceService Hi dude, what r u up to? Send Jabber Protocol Implementation Bundle ProtocolProviderService 2 getService( providerRef ) network 3 sendMsgTo( Contact) 4 send INVITE request 1 actionPerformed(evt) Dude (Online) _ o x T H E O S G I B U S
SIP Communicator 1.0 Architecture A Sligthly More Complex Scenario Swing UIServiceImplementation Bundle UserInterfaceService T H E O S G I B U S Transfer network 2 registerComponent(this) CallTransfer Plug-In SIP Communicator _ o x 1 getService( providerRef ) 3 container.addComponent(button) container.addComponent(field)
SIP Implementation Bundle ProtocolProviderService SIP Communicator 1.0 Architecture A Sligthly More Complex Scenario Swing UIServiceImplementation Bundle UserInterfaceService T H E O S G I B U S Transfer 1 getService( providerRef ) network CallTransfer Plug-In SIP Communicator _ o x 2 registerCallListener( this )
SIP Implementation Bundle ProtocolProviderService SIP Communicator 1.0 Architecture A Sligthly More Complex Scenario Swing UIServiceImplementation Bundle UserInterfaceService T H E O S G I B U S Alerting … The Duke is calling you! Transfer network 4 actionPerformed(evt) 1 INVITE req received 5 transferCall(call, dst) CallTransfer Plug-In SIP Communicator _ o x 6 send REFER req 2 incomingCallReceived( evt ) 3 container.addComponent(cmp)
References The SIP Communicator The Java Communications Community JAIN SIP The Open Services Gateway Initiative The OSCAR OSGI implementation.