Friday, October 8, 2010

Mobicents Face-2-Face meet Antalya Sept 2010

I have to start with big thanks to Eduardo for such a wonderful arrangement and choosing best location Antalya, Turkey! But still nothing beats Mobicents meet at Varna in 2007 :P

This was first ever Mobicents meeting where not only all team members were present but also accompanied by customers, community users and partners. What works better than having direct feedback from customers?

The meeting started with fun day where entire team went for white water rafting

The Chikens Team! As name given by Rafting Lead Suleman :)

Ok I will leave the fun part for end, lets talk about agenda

We have shared all the presentation here

Meetinig room with Ghost man Oleg presenting

Mobicents Media Server

The media server made a very good progress with its 2.x.y releases. Media is a very different beast where predictability matters more than the speed.

To achieve predictability we had to give away multi threading model too! The context switching consumed enough time to distort the quality of media. Even the MGCP Stack was modified to reduce number of threads used, switch to NIO and achieve highest performance ever such that controlling media server via MGCP doesn't hinder the media processing. We give away completely on Java Timers and wrote our own Scheduler from scratch to achieve precision of upto 1ms! The result was best performing media server ever with approx 300 concurrent bidirectional calls, almost zero jitter on simple hardware with 2GB RAM and Dual Core!!

The team made a very good progress from releasing first version 2.0.0.CR1 in March 2010 to 2.0.0.Final release in Aug 2010. However not everything we did in last 5 months went to stable quality. The RTSP support added in 2.0.0.Beta3 was revoked in 2.0.0.CR1 release as it was not correctly designed. Also we added the support for MBROAL TTS Speeches, however the TTS in general is still not very good quality.

Going ahead we will continue newer releases on 2.x.y version with more and more stability and better performance for everything related to Audio.

However for video the work has already begun on trunk which will be 3.x.y releases.

Download Mobicents Media Server presentation here

Mobicents Media Server - SS7

There is very good progress made on SS7 stack in last few months. The MTP layers are almost stable now and capable of handling multiple links. However we have reworked SCCP layer (should be available in next release) and instead of SCCP available as stack, will be deployed as service on JBoss AS. The higher layers can access SCCP via JNDI look-up.

Also the M3UA is re-designed and now uses the UDP behaving as SCTP instead of TCP as designed initially. But we sucked majorly on the several release dates and various release were behind the original deadlines. Nothing is perfect ;)

The roadmap is to stabilize existing layers MTP, SCCP, TACP, ISUP and MAP. Complete the ISUP RA and test with DS0 endpoint in Mobicents Media Server.
Also try to implement SMPP and HTTP layer's for USSD Gateway Application and make it stable quality.

Download Mobicents Media Server SS7 presentation here

The every day in Mobicents face-to-face meet ends with party at night.

Fun part

Team playing pool's

//TODO : Will add more once Bartek shares the snaps :P

Friday, September 17, 2010

Log4j observation and best practice

Just today I realized that setting the Threshold value for logging level at appender has no effect on checking if lower levels are enabled for particular category.

For example consider the log4j.xml config file as shown below

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j=""
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<param name="Threshold" value="INFO" />

<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n" />

<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="../log/server.log" />
<param name="Append" value="false" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
The default pattern: Date Priority [Category] (Thread) Message\n
<param name="ConversionPattern" value="%d %-5p [%c{1}] (%t) %m%n" />

The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)

<category name="">
<priority value="INFO"/>
<category name="">
<priority value="TRACE"/>

<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />


And in class I have a check

if (logger.isTraceEnabled()) {
logger.trace("Receive " + packet);

What would you expect the 'isTraceEnabled()' to return? false? I too assumed same. But I was wrong. It returns true. So log4j will still create StringBuffer and appends objects to it to create the log statement and call .toString() on StringBuffer only to realize the appender has Threshold logging level higher than TRACE and it will drop this log message :(

So setting Threshold value only doesn't help in production environment. Make sure that you change logging level of individual Category too.

Sunday, September 12, 2010

Mobicents Face-2-Face 2010 at Antalya, Turkey from 24th Sept to 30th Sept

Its time of the year when Mobicents developer from across the world meet at one common place and brain storm on road-map for next year, achievement of past year, experiences, prospects etc. The annual Mobicents Face-2-Face was only for team members till now, but like true Open Source Spirit we have opened this meeting to all users, partners, or even non-users who wants to participate and get the understanding of Mobicents Project and how core team functions. We already have three partners visiting this meeting for this year.

However its not as boring as it sounds. Every evening after hectic day the team visits the best and lively attraction of the city and freaks out, sometimes till next day morning! Don't believe me? Look at blogs and picture from last year meeting

The meet is happening at Antalya, Turkey from 24th Sept 2010 to 30th Sept 2010. If interested in participating follow the public post

Hope to see you guys @ Antalya :)

A week at Meraka, CSIR

Last week Bartek and I had privilege to conduct Mobicents Platform training at Meraka, Council for Scientific and Industrial Research (CSIR) Institute located in city of Pretoria, South Africa. The CSIR is South Africa's central and premier scientific research and development organisation in Africa. Constituted by an Act of Parliament in 1945 as a science council, the CSIR undertakes directed and multidisciplinary research, technological innovation as well as industrial and scientific development to improve the quality of life of the country’s people.

Institute is built across beautiful campus and rich with facilities; I was amazed to see the CSIR Institute and made me remind IIT-K Campus that I visited this February.

Usually training's are too boring to conduct with flow of knowledge happening just in one direction. But this was a rare training where audience were very interactive and made Bartek/me think twice before we could really answer their queries.

Meraka has already developed couple of JSLEE Resource Adaptor's (on Mobicents 1.x.y Platform) for proprietary protocol communicating with SMSC and USSD aggregator. These RA's are used in platform called MOBI4D. The presentation explaining the MOBI4D is here

Meraka already have several exciting projects ongoing specifically on TTS, ASR, IVR, IP Tv. It will be very exciting to see these projects go live by end of next year.

Looking forward to visit SA again soon and spend more time with this team!

Thursday, January 7, 2010 Too many open files

There is limitation on how any open file handles (this includes sockets too) OS can support. If this limit is reached, you get above exception. If you are on ∗ nix OS, this can be easily increased.

Open /etc/security/limits.conf

I am on Ubuntu so for me I just execute following command from command line

sudo gedit /etc/security/limits.conf

and add following two lines

∗ soft nofile 3072
∗ hard nofile 3072

Save and Close the file. I don't know how to load these settings from command prompt but rebooting did the trick. To make sure these changes are done execute

ulimit -n

If you know how to do it on windows please add comment.


Saturday, January 2, 2010

Mobicents JAIN SLEE Server 2.x unites in league of JOPR Console!

JBoss Operations Network (JOPR) is becoming the de-facto for managing suite of JBoss products and rightly so as it provides administration, monitoring, alerting, operational control and configuration in an enterprise setting with fine-grained security and an advanced extension model.

Since Mobicents Sip Servlets Server is already having JOPR agent and we have experienced how easy it becomes when it comes to management using JOPR JAIN SLEE server team also decided to venture on JOPR so all the products of Mobicents have same look and feel and can be managed from same Console.

Big thanks goes to JOPR team for answering all the queries that really saved lot of time had we tried to solve them by ourselves.

The features of Mobicents JSLEE (version 2.x.y) JOPR is in-line with Mobicents Management Console that is available with Mobicents JSLEE Server 1.x.y.

The JOPR Agent (binary) for Mobicents JSLEE will soon be available with release Mobicents JAIN SLEE Server version 2.0.0CR1. However if you are getting little impatient and want to give it a try right away, download the source code from mobicents svn and call 'mvn clean install'. You should see the agent jar at jopr-plugin/target/mobicents-slee-jopr-as-5-plugin-2.0.0-SNAPSHOT.jar
The Agent is built using the source RHQ 1.4.x trunk.

The first binary release of RHQ 1.4.0.b01 server can be downloaded from here. Follow the blog from Heiko to know more about this release.

Unzip and start the server from 'rhq-server-1.4.0.B01/bin' using ' start'. Once server is started visit http://localhost:7080/. First time it will ask for configuring the Database and for test you can simply select the HSQLDB. To know more about installation of JOPR have a look at

You also need to have JOPR Agent, I found one in rhq-server-1.4.0.B01/jbossas/server/default/deploy/rhq.ear/rhq-downloads/rhq-agent/rhq-enterprise-agent-1.4.0.B01.jar. Unjar it and start the Agent from 'rhq-enterprise-agent-1.4.0.B01/rhq-agent/bin' by executing ' -l' (-l argument is only for first time to configure the agent, the subsequent starts can be done by executing command ''). It will ask few questions for configuring agent and has default answers for each, just press 'enter' for each.

To install the Mobicents JAIN SLEE JOPR Plugin using Jopr UI, go to AdministrationSystem ConfigurationPlugins. On the Agent Plugins tab (selected by default), on the bottom of the page, click on Add..., browse to the Jopr plugin JAR file and select it. Finally, click on the Upload button and the plugin will be deployed. Click on Scan for Updates and it should be shown in the list as "Mobicents JSLEE Server 2.x". On the Agent Console call 'Plugins Update'.

This will deploy the Plugin on Agent side and it will automatically discover your Mobicents JAIN SLEE Server 2.x.y. To add mobicents server to RHQ Server go to OverviewAuto Discovery Queue on server page and Import Mobicents JAIN SLEE Server. If you don't see an entry like 'Mobicents JAIN SLEE Server 2.x.y (:port) something went wrong and check necessary logs of server and agent.

VoilĂ ! You have JOPR monitoring your Mobicents JAIN SLEE Server and it should look something like this

If you want to know more about how to manage JAIN SLEE Server, build the docs by calling 'mvn clean install' from /jopr-plugin/docs and browse the docs.

Enjoy the new shiny management console!

Please post queries to