Skip to content
miconda edited this page Jun 24, 2011 · 11 revisions

Welcome to the wiki of Elsipo - the SIP Browser!

About

Elsipo is a SIP (RFC3261) capable application that displays HTML content received via SIP. The initial User Interface can be loaded from a local HTML file or downloaded from a web server.

Being a developer of a server-side SIP application (Kamailio SIP Server - http://www.kamailio.org), I found annoying that SIP client-side applications look the same no matter what provider you use. From here popped up the idea of having a SIP client-side application that has the user interface easy to customize and update by provider itself.

Practically Elsipo is an HTML viewer, based on QTWebKit, capable of loading plugins. The first plugin implemented is named E_PJSIP, which add SIP communication support based on libpjsip.

E_PJSIP plugin exports to Elsipo HTML viewer a new Javascript class named 'sip' that can be used to initiate SIP events, such as voice calls or instant messages. The plugin executes also Javascript callback functions when SIP events are coming from the network.

To some extent, you can call Elsipo a SIP softphone with User Interface (UI) implemented in HTML, CSS and Javascript.

See more details about Elsipo and its status in the README:

Why named SIP browser

The SIP client applications (aka softphones) have static and generic user interface, which is not easy to customize at all. More than that, the focus was on classic telephony services using SIP: audio/video calls and eventually instant messaging and presence. No matter what services your provider offers, the UI was the same, switching to another provider made no difference.

In the web world, going to another domain changes the presentation completely. There the term is browser (e.g., Firefox). In the same idea that Elsipo should display what the SIP service provider offers to you at that moment, with design (color scheme, arrangement, a.s.o.) that reflect the provider, the naming is SIP browser.

While Elsipo can handle HTTP communication, the content flowing to/from SIP server is intended to be carried by SIP messages. Using HTML/CSS/Javascript should be not questionable, thinking of the capabilities to build good looking UI in a easy and flexible way, by providers or by users themselves.

How it works

Here is a screenshot of default UI taken on Jun 22, 2011. It is all HTML, CSS and Javascript - you can browse the respective files at:

Elsipo UI

See more screenshots here.

You have to be registered with the SIP server before initiation any call or instant messaging.

To make a call, enter a full SIP URI in the input field from Call section and click Dial button.

For text messages, enter the full SIP URI of your buddy in the input field from Instant Messaging section and the text in the input field just above to SIP URI. Then click on Send.

Registration, voice call and instant messaging are classic in SIP. Elsipo target is beyond that, for this purpose, the UI at this time has following features when it is used together with Kamailio SIP server:

  • periodically receive the time and a counter value from server and display them in Info section
  • when clicking on text Click to get server stats!, Elsipo will request from server the size of used shared memory and the number of contacts in location table. The result is displayed in Info section

Configuration file for Kamailio to get the above things is in GIT at:

You have to adjust Kamailio configuration file with your user ID -- look for ELSIPO and ELSPO_TIMER route blocks.

The communication to get such data from SIP server is carried with SIP MESSAGE requests. It is up to you to define the rules of how to detect it is a MESSAGE to be displayed in a special zone of UI.

In the sample added in GIT, any MESSAGE request that has the sender (From header username) starting with id- will be handled differently, in the way that the body will be used to set the inner HTML of the element having the id the string value that follows after id- in sender username.

Next is such MESSAGE request for telling the server time and counter value:

MESSAGE sip:88001@192.168.178.21 SIP/2.0.
Via: SIP/2.0/UDP 192.168.178.21;branch=z9hG4bK63bf.fb5cc576.0.
To: <sip:88001@192.168.178.21>.
From: <sip:id-i_infotext@192.168.178.21>;tag=533cb9e91f4b999cf76861cbb9ed54ed-4986.
CSeq: 10 MESSAGE.
Call-ID: 5ac9840d63fca052-2648@127.0.0.1.
Content-Length: 50.
User-Agent: kamailio (3.2.0-dev5 (x86_64/darwin)).
Content-Type: text/plain.
.
Hi! Server time: Thu Jun 23 00:12:31 2011. Cnt: 71

Default UI has a div element with id i_infotext at this moment.

Clicking to request servers statistics works differently. When you click, a MESSAGE request is set to SIP server, with R-URI username elsipo-stats and the body the value of From header username to be used in the MESSAGE to be sent with server statistics.

Here is a sample MESSAGE request for this case:

MESSAGE sip:elsipo-stats@192.168.178.21 SIP/2.0.
Via: SIP/2.0/UDP 192.168.178.21:5084;rport;branch=z9hG4bKPj0ZFVjyVU-.WH3lM7fUsT5eCT0Zg5e2UF.
Max-Forwards: 70.
From: <sip:88001@192.168.178.21>;tag=91iY48sjNQF6ghfQo3XJZBLpl7a3MNv1.
To: <sip:elsipo-stats@192.168.178.21>.
Call-ID: 8edAHTX60lAVGxEqx1xDJbFNt08H7Sxo.
CSeq: 26273 MESSAGE.
Accept: text/plain, application/im-iscomposing+xml.
Contact: .
Content-Type: text/plain.
Content-Length:    13.
.
id-i_infotext

The above request is replied with 200ok and then the SIP server will send a MESSAGE request with the statistics, like:

MESSAGE sip:88001@192.168.178.21 SIP/2.0.
Via: SIP/2.0/UDP 192.168.178.21;branch=z9hG4bK303c.e780b682.0.
To: sip:88001@192.168.178.21.
From: <sip:id-i_infotext@192.168.178.21>;tag=533cb9e91f4b999cf76861cbb9ed54ed-6086.
CSeq: 10 MESSAGE.
Call-ID: 5ac9840d63fca00c-2641@127.0.0.1.
Content-Length: 51.
User-Agent: kamailio (3.2.0-dev5 (x86_64/darwin)).
Content-Type: text/plain.
.
Shm: 2514216 ULoc: 2 Time: Thu Jun 23 00:18:07 2011

Elsipo was registered with user ID 88001 in these samples. Again, the way to define the interaction between Elsipo and SIP server is up to you. I showed some examples above, but you can change the configuration of SIP server and the HTML/Javascript of Elsipo very easily to adapt to your ideas and needs.

Remarks

  • my goal was to analyze if it is feasible to get more that a SIP softphone - an application that uses SIP to carry the content, which presents an user interface easy to customize, very accessible to providers and users
  • I achieved my goal, presented the idea to the world. It is very unlikely I will continue to develop it alone - contributors are welcome

From my wish list with current IP telephony providers, I would like to:

  • start the application and the UI is branded based on used SIP provider. Signing in with another SIP address to show an UI specific for the services of the new provider - like the succesfull registration with username and password will send back an HTTP URL from where to get the UI
  • the UI to be as simple as the provided services - not full of options that one does not know if they have to be set or not. Also, with the presence of a new service from provider, the UI should show that
  • click and see the list of registered contact addresses associated with my user id (check if anyone else is registered in my behalf? is my phone from home still registered?)
  • click and see the numbers to dial for voicebox/voicemail or other special services
  • click and see my current balance
  • click and see the list of last N missed/answered/dialed calls (useful when having many phones registered, like home, office, mobile app, a.s.o.)
  • click and see ... the list can continue, such a service will make a real difference for me

I hope you enjoy the idea of Elsipo SIP browser! Come on board to build it for the world and change the SIP communications!