Thursday, October 7, 2010

Mobicents Face to Face Meeting 2010 in Antalya

Howdy !

Just got back from our Mobicents Team meeting in Antalya - Turkey and it was fantastic !
First of all, big thanks to Eduardo Martins for organizing the event in this fabulous 5 star resort hotel :


Cherry on the cake, first time ever we got all team members present (thanks to Tom Wells for doing the 1,5 day  on a plane trip back and forth from Brisbane);



not only that but it was also the first time, community users and customers were invited and three of them joined us on so short notice, especially as we had a real blast with them, they really have the team spirit :-) mixing loads of fun and hard work !


Having rafting fun with the whole team of chickens, Jianfei and Raziya

Here hard at work on Sip Servlets with Jianfei and Andrew on SIP Servlets

Jianfei and Andrew gaves us a great presentations and we had interesting discussions on how they use Mobicents Sip Servlets and how they intend to use more of the Mobicents platform components in the near future. By example, I learned from one of them that they went to SIPit with their product on top of Mobicents Sip Servlets and that it went pretty well !

Their feedback was so interesting that I completely reworked Mobicents Sip Servlets' roadmap to accomodate their needs, that's the beauty of open source and great relationships, you have a direct influence on our roadmap (which is your roadmap really :-)) !

Following that, we went through most of the projects composing Mobicents platform going over for each one, achievements, roadmap, architecture, training, HA, .... There is so many projects and it is moving so fast that it's really amazing even we agreed to stop diversifying for now and consolidate around what we have.


I really enjoyed the Diameter training and got a better understanding of the real world use cases, SS7 was an interesting topic as well for me and see how I can integrate it with Mobicents Sip Servlets.
JAIN SLEE team pulled off an amazing amount of work over the last year to achieve 2.x releases and rejuvenate the SLEE spec to make it look more attractive with the new extensions and annotations work.


I had 2 talks scheduled on Mobicents Sip Servlets :
  • First, as I said above on the achievements, challenges and goals/roadmap which you can find here. Basically this was the stability and HA year for Mobicents Sip Servlets and JAIN SIP (Thanks to Ranga for its everlasting help), we improved the performance a lot, be it standalone or HA and completely refactored our HA layers (JAIN SIP HA, MSS HA, Converged Load Balancer, ...)
  • Second, on the Sip Servlets review which was about the architecture of SIP Servlets but also JAIN SIP Stack, and our JAIN SIP HA layer

One thing I want to reiterate is that the community around Mobicents is really awesome with customers and community users now joining us to the meeting, I'm pretty sure with more planning we can increase that number for the next meeting, please ping me if you want to be part of it next year.

With a lots of downloads, contributions from various users and companies around the world (you can become one too !), let's all make Mobicents the best Communications Platform in the world !

Feel free to ping me if you want to contribute either with great ideas, bug fixing, new examples, fixing documentation, ...

Jean

Much fun down here :
Shopping for the family with bartek... 
Sea swimming at noon between the meetings
Bowling nights
Drinking and chill out time


Tuesday, September 14, 2010

Mobicents consultants needed in US and Europe

Hi all,

I'm looking for consultants, freelancers in the US or Europe for Mobicents.
Ideally the profile would be to already know or use or contribute to Mobicents, have good knowledge about SIP (JAIN SIP and NIST SIP Stack is a plus) and know SIP Servlets, High Availability/Failover/ Load Balancing (about SIP and ideally HTTP as well).
JAIN SLEE, Media and Telco protocols knowledge is a plus.
Good English level required and be ready to travel.

If you want more information or apply ping me on jean.deruelle@gmail.com

Looking forward to talk to you
Jean

Tuesday, August 10, 2010

Introducing JAIN SIP HA... or how you can replicate and failover your JAIN SIP application with no changes to your code.

History : (you can skip to the next section if you're not very fond of history :-))

In Mobicents, we use the great Open Source NIST SIP Stack (which is incidentally the Reference Implementation of the JAIN SIP specification as well) on both Mobicents Sip Servlets and Mobicents JAIN SLEE Resource Adaptor, when we started to work on High Availability we started replicating the full dialog to be able to fail over SIP Calls when one node in the cluster died. First, this was not very efficient since a lot the data structure could be recreated upon failover instead of replicating most of the data within the dialog. Then, for re-INVITE the dialog was not found since it was injected back into the stack later by the application layer (in this case Mobicents) instead of checking if the dialog id was present into the stack or replicated cache during the message processing done by the stack. We first choose this solution because we didn't want to introduce any external dependencies into the NIST SIP Stack for people not interested in HA and minimize code changed in the NIST SIP Stack. Since we hit the above mentioned issues we decided it was time to create our own extension to the NIST SIP Stack allowing HA and failover in a non intrusive way (i.e. without any code change in your application, everything is done under the cover transparently by configuration) so that it benefits not only the Mobicents Community but the whole NIST SIP community. Ok enough history, let's get our hands dirty and see how it works, shall we ?

How does it work ?

It currently supports only established dialog replication & failover. So the replication occurs only when the dialog goes to CONFIRMED state. There is also a mode where everytime the dialog application data (data set by the application on the dialog used to link the call state of this dialog to other state, SIP or otherwise in the system. For example this method could be used by a B2BUA to link the dialogs of the ingress and egress sides) is updated, it replicates the changes. There is some other modes that can be added like early dialog replication and transaction replication but we didn't see the value in that and will be implemented only on a strong use case (one could be handling 911 calls where one doesn't want emergency call setup to fail at all) because it will have a lot of overhead and will decrease the performance a lot.

  1. UAS modeSo if a node fails after the dialog goes to CONFIRMED, when a subsequent request will hit another node, the Mobicents NIST SIP HA Stack will check first if it has the dialog locally and if not, it will check the cache, get the dialog data from the cache, recreate the dialog and add it to the local stack and handle the subsequent request without any problem
  2. UAC modeIn UAC mode, it needs a bit more work and modifications at the application code level actually. So I lied but it was to get you interested ;-)So if a node fails after the dialog goes to CONFIRMED, and an external event makes the failover node to create a subsequent request on the dialog that was originally present on the node that crashed. You actually need to know the Dialog Id of the node to get it from the local stack through
    ((ClusteredSipStack)sipProvider.getSipStack()).getDialog(dialogId);
    the Mobicents NIST SIP HA Stack will check first if it has the dialog locally and if not, it will check the cache, get the dialog data from the cache, recreate the dialog and add it to the local stack and return it. Then you will be able to create the subsequent request and proceed normally. Please not that you can cache the dialogIds in the same JBoss Cache instance used by the Mobicents NIST SIP HA Stack. To access it just use :((MobicentsSipCache)((ClusteredSipStack)sipProvider.getSipStack()).getSipCache()).getMobicentsCache().getJBossCache()
Please note that our NIST SIP HA layer is based on JBoss technologies (JBoss CacheJGroups and Mobicents Cluster framework) but has an abstract layer so that it can be extended to use other technology such as infinispan, terracota or whatever fits your architecture.

No code change in my application ? You gotta be kiddin' me ?

That's right, as seen above everything is handled automagically by the Mobicents NIST SIP HA layer the only thing needed is a bit more configuration and adding libraries to your application classpath. This presuppose the configuration of the stack is not hard coded in the application but externalized in a properties file or some other way.

But I lied a bit, there is a code change needed, you have to tell your application to use the Mobicents NIST SIP HA Stack (which is just an extension of the regular NIST SIP Stack) :

sipFactory.setPathName("org.mobicents.ha");

But this can be avoided if the path name is looked up from the configuration properties passed to the application as said above.

So if you want to use it, you basically need to set up 2 configuration properties :

#STACK PATH NAME
javax.sip.stack.PATH_NAME=org.mobicents.ha
# whether or not the cache should be standalone or looked up from the JBoss AS if the jain sip stack is running in a JBoss container
org.mobicents.ha.javax.sip.cache.MobicentsSipCache.standalone=true

The rest of the properties are optional :
#org.mobicents.ha.javax.sip.cache.MobicentsSipCache.cacheName=standard-session-cache
# path to the configuration file of jboss cache, defaults to META-INF/cache-configuration.xml
#org.mobicents.ha.javax.sip.JBOSS_CACHE_CONFIG_PATH=META-INF/cache-configuration.xml
# Replication strategy one of ConfirmedDialog or ConfirmedDialogNoApplicationData, defaults to the latter
#org.mobicents.ha.javax.sip.REPLICATION_STRATEGY=ConfirmedDialogNoApplicationData
#the class name of the class responsible for replicating the dialog etc, this allows to plug your own replication implementation (such as one based on Terracota), defaults to JBossCache 3
#org.mobicents.ha.javax.sip.CACHE_CLASS_NAME=org.mobicents.ha.javax.sip.cache.ManagedMobicentsSipCache

The libraries needed to be added to your classpath are the following :


or the following dependencies if you use Maven

<dependency>
<groupId>org.mobicents.ha.javax.sip</groupId>
<artifactId>mobicents-jain-sip-ha-core</artifactId>
<version>0.11</version>
</dependency>

<dependency>
<groupId>org.mobicents.ha.javax.sip</groupId>
<artifactId>mobicents-jain-sip-jboss5</artifactId>
<version>0.11</version>
</dependency>

<dependency>
<groupId>org.mobicents.cluster</groupId>
<artifactId>cache</artifactId>
<version>1.6</version>
</dependency>


There is quite a few jboss libraries that shouldn't be needed in reality, this is because mobicents-jain-sip-jboss5 have an option to integrate directly with the JBoss AS5 Cache Manager.

You will need to include the jboss cache configuration file cache-configuration.xml in a META-INF folder as well. And that's it !

Where can I find an example to play with it that I check it out and start to play with it?

We developped a sample application for you to try and have fun with in a form of a maven project that includes a junit test case showcasing the HA and Dialog failover.
You have 2 choices here : 

It's available directly on github at http://github.com/deruelle/nist-sip-ha-test
or as a packaged download here http://mobicents.googlecode.com/files/nist-sip-ha-test.zip

To run it just do mvn test and this will be it.

This test aims to test Mobicents NIST SIP HA Dialog failover recovery in UAS mode.
 * There is Shootist on port 5060 that acts as a UAC and shoots at a stateless proxy on port 5050 (scaled down version of a balancer)
 * There is Balancer which is a very simple stateless proxy that proxies the requests from the UAC to the first UAS node (Shootme) on port 5070 that will reply with 180 Ringing and 200 OK
 * The dialog state is updated to CONFIRMED and triggers the replication to JBoss Cache
 * on ACK, the first UAS node stops itself.
 * The UAC sends a BYE that the stateless proxy forwards to the second UAS node (shootme_recovery) on port 5080
 * Shootme recovery on BYE gets the dialog from the cache and recreates the dialog locally based
 * Shootme recovery handles the BYE and sends OK to BYE without any issue.

That's very cool, if I want to go further but where can I find a cheap and powerful SIP Load Balancer for my cluster to balance my SIP load and ensure failover ?

That's easy, Mobicents provides such a SIP Load Balancer

You will need to add 2 new properties to your stack so that the load balancers is pinged automatically by the NIST SIP HA Stack when a stack starts up or dies :

# implementation used to ping the Mobicents SIP Load Balancer
org.mobicents.ha.javax.sip.LoadBalancerHeartBeatingServiceClassName=org.mobicents.ha.javax.sip.LoadBalancerHeartBeatingServiceImpl
# the IP Address of the Mobicents SIP Load Balancer to send keepalives to
org.mobicents.ha.javax.sip.BALANCERS=127.0.0.1 

Tuesday, June 29, 2010

Mobicents meets the Community at JUDCon and JBoss World !

Hi all,

I just got back from Boston where I attended JUDCon, the free JBoss Users & Developers Conference and spoke there about Mobicents. Since the attendance was pretty new to Telco and Communications 2.0 features, the talk was not a technical one but rather showcasing multiple demos, notably the Jopr is talking demo and examples on how you can improve your applications with Mobicents by adding Voice, Video, Presence, IM, SMS, data to enrich the user experience, processes within your company, the customer relationship etc... I went over the Mobicents projects - SIP Servlets, JAIN SLEE, Media Server, SIP Presence Service and Diameter and how they were used in the different demos showcased at the beginning of the presentation


The presentation was pretty well received and there was a long Q&A at the end with most of the people from the audience pretty interested asking questions and thinking on how they could apply it to their businesses. It was one of my best audiences ever !

I will try to record the presentation and upload it for those of you who couldn't attend.

I attended a few presentations during JUDCon and all talks and speakers were top notch quality and very interesting, definitely a conference you want to attend if you're a JBoss user or developper.



Later that day happened the JUDCon Hackfest where I got a chance to hack on a Tomcat container for Arquillian


This work will be used as a basis for refactoring our Mobicents SIP Servlets testsuite based on Arquillian and ShrinkWrap and expose it as a way to test SIP Servlets applications in a single Junit test. So JUDCon was definitely a great conference for me and Mobicents as a whole !

Next was JBoss World

There I got to meet multiple JBoss Communications Platform (JBCP - which is the product derived from Mobicents) and Mobicents users.


Notably OKI Japan with whom we had interesting talks and led to the announcement of their Spring Sip Servlets Framework - SSF contribution to Mobicents and their official joining as a Mobicents contributor











I had interesting talks with our friends at Angel.com and got to see them at the great JBoss party



For me and Mobicents, both JUDCon and JBoss World were definitely awesome, when working from home all year long I can't express how priceless it is to meet the community in flesh and blood.

See ya all next year !

Thursday, April 1, 2010

Mobicents to enter Brain to Brain Communications Market

Hi all,

With the natural evolution of mobile networks towards LTE, 4G networks and the likes, soon we will be in this beautiful world of all IP Communications. We figured that even though Cell Phones were kind of cool, what would be the next step to communicate effortlessly.

Based on some research done throughout the world and recently some breakthrough on Brain to Brain Communications, we thought it was time to prepare our next move and prepare people to communicate and act with the digital world in a different way and call each other effortlessly by using brain to brain communications applied to telecommunications.

Since Brain to Brain Communication is cuurently using electrodes, a computer and an Internet connection. Replacing the electrodes and computer by a little Brain-Computer Interfacing (BCI) device (that would look like a bluetooth earplug) that will be used for capturing brain signals and translating them into bits and will send those bits over the wire through a new protocol called Mobicents Brain's Fool Protocol (MBFP) just like a 4G cellphone would do. The Mobicents server will act as a gateway and convert MBFP to SIP so that you can call your buddies.

The possibilities are limitless again and will mostly depend on the device capabilities (that will evolve over time as science gets better knowledge of the brain) that could stream video or what your buddies see directly into your brain, or Text Message you, or send SMS...

If you're scared about the government tapping your brain or hackers unleashing viruses, trojan and the likes, security will be a big concern and taken care of very seriously but we can't promise anything, no software is bug free...

This won't be limited to Brain to Brain actually, one could easily create Business to Consumer (B2C) type of applications where you wouldn't need TV or 3D TV anymore : video streamed directly into your brain with all the sound, smells, pain, joy etc, what an awesome experience...
Where games would be a real brain control world experience, not motion controlled anymore...
Where you could record your life literally and not only share pictures and videos with your friends through facebook but real life memories with emotions through the new LifeRecorded social network

The good thing also would be for disabled people not being able to speak, this way they could communicate much easier and for the blind people to actually see since the device could be tied to a camera that would stream the live feed in their brain...

And again this technology will be open source for your greatest pleasure

As they say the brain is the limit...

Tuesday, March 9, 2010

Installing SIPp 3.1 on Ubuntu 9.04

Open a command line terminal

$ sudo apt-get install ncurses-dev
$ sudo apt-get install build-essential

#Grab sipp 3.1 from sourceforge.net
$ wget -m -nd http://downloads.sourceforge.net/project/sipp/sipp/3.1/sipp.3.1.src.tar.gz

#extract it locally
$ tar -xzf sipp.3.1.src.tar.gz
$ cd sipp.svn


Open ./sipp.svn/scenario.hpp and add this line

#include <limits.h>

after

#include <sys/socket.h>

save the file, and in the terminal do

$make


You're done ;-)

UPDATE : The latest unstable snapshot available from http://sipp.sourceforge.net/snapshots/sipp.2009-07-29.tar.gz does not have this problem and does not throw *segmentation fault* as sipp 3.1 does now on my ubuntu 10.04

Tuesday, January 5, 2010

New JBCP version is out : Happy New Year !!

Happy new year to all!

To celebrate the already started but still new year, the Mobicents team (special kudos to the QA and productization team) brings to our customers a little present, the commercially supported flavor of Mobicents called JBoss Communications Platform is now available in its 1.2.2 version on the JBoss Customer Support Portal, the release notes are here so go check it out !

I'll end this post by thanking my fellows on the Mobicents core team for the hard work to bring you the best Open Source Communications platform and our striving and ever growing community that is helping us out by using it, reporting bugs, contributing fixes and features,... wishing you all the best for the year to come and happy ne