Monday, April 13, 2009

OpenIMSCore and SUBSCRIBE requests




The Call Session Control Functions implemented in OpenIMSCore are based on IPTEL's SIP Express Router,a wonderful SIP proxy I would recommend to anyone building a VoIP system. 

Surely, you would want your Application Server to track the user status via SIP SUBSCRIBE command, right ? 

According to this draft specification , all you need to do is specify Event header to value  debug, and Accept header to value  "application/debuginfo+xml" , and if all the security settings are in place, your Application Server should be processing incoming NOTIFY messages in no time , right ?  Well , not quite .


Caveat : I have not done any verifications on other platforms , but it will certainly not work for OpenIMSCore, source code revision 608, and here is why. 

I went along the way I envisaged my application (remember,  I was going to use SUBSCRIBE request to receive NOTIFY messages on user status in the IMS network) , however it just did't work . SCSCF kept crashing every time after receiving a perfectly formatted SUBSCRIBE from my AS application through ISC interface ! 

WT..Hell?! 

Some scscf.cfg fiddling and a couple of Wireshark sessions later, I've decided to look into the C code of the actual SCSCF implementation. I am not going to post the code here even though it is released under one of those GPL licences,(and you can get it freely from svn repositories of berlios.de) but it will suffice to say that the only SUBSCRIBE Event headers  that are accepted are "reg" (for registration status), which is of no practical use to me as I can get user registation status via either UDR or PNR through the  Sh interface . To further support my case, and to paraphrase  a dear professor of mine from undergrad studies - if you don't trust me, take a look at the code and see for yourself :)
 
But wait, there's more !  Not only does this implementation not allow "debug" Event headers, it also limits the acceptable senders to the Proxy Call Session Control Function and the registered UE itself.

So there you go , if you are not going to modify the OpenIMSCore code yourself, with the release source code release revision 608 that I am using, you won't get much of ISC functionality, unless of course you are developing something other than an Application Server. 

I would like to close this piece with a remark that I am in no way bashing/critizing the OpenIMSCore development team  -  I highly admire and value the work that people at Fraunhofer FOKUS  have completed thus far, and respect the fact that they were kind to share this platform with the rest of us to play around. Their efforts to help everyone on their mailing lists are commendable as well.  

If anyone else has had similar experiences on this or any other IMS platform, I would love to hear them, particularly the stories of the "dreaded" ISC interface.










Nice,short and sweet one

I'll be posting a comprehensive entry on topic of AS development on OpenIMSCore platform during the next 24 hours. Been quite busy with prototyping a new product so I had very little time left for that.
If anyone's interested in what about the new product is - e-mail me  and I'll enable you with access to peek preview . Make sure you state your position and interests .

Monday, April 6, 2009

A quick poll

I am thinking about a possible new app and need some feedback.
For your convenience I have created a LinkedIn poll (takes 2 secs to complete, you've got just one question to answer) .
I will highly value your responses.
Oh,and if anyone is interested in tracking how my M.Sc. app development is going forward in realtime, you can take a look at it on twitter

Good night America, where ever you are .

Trouble deploying Java apps on different machines?




Ok here is my story .
I am completing my M.Sc. thesis on IP Multimedia Subsystem at University of Tuzla, and have been working on an application that fits inside OpenIMSCore , a core implementation of an IMS network kindly provided by folks at Fraunhofer FOKUS institute. 

So far so good, I have developed my core engine (more on that in my next post) to interact with SCSCF and HSS , and everything worked like a charm  on my Linux testbed . My mentor okayed it , and we agreed that I should press forward with GUI design and writing the actual text of the thesis. 

So last night I fire up my all-time-all-languages favorite IDE, NetBeans (curr.version 6.5) and start designing the GUI . 

Add a checkbox here, add event handler there, wow that was really smooth (I can still remember the pains of developing GUI for Java 1.1 and 1.3 apps). Anyway, I pretty much completed the barebones stuff I wanted in about 30 mins, and have deployed it on a virtual Linux machine where my NGN OpenIMSCore is installed and configured to work with my Core Engine stuff. I start the app, and get one of those missing libraries errors :

Exception in thread "main" java.lang.NoClassDefFoundError: javax/swing/GroupLayout$Group

After attempting to recompile with additional set of libraries which didn't work as expected, I started digging into the GUIs code. It turns out the problem was a simple one .
You see when you design GUI in NetBeans, the layout mode selected by default is the one called "Free Design" . It adds the code to group your GUI components into GroupLayouts which will work perfectly if you are going to run the app from within NetBeans or on the same machine, as the dependencies will already have been properly set for you.

If you however want to make your GUI app portable, and do not have the time to mess with setting up library dependencies into your project, or on the other machine, just  right click on the frame and select a different layout option . 

I found it that AbsoluteLayout works best for me as it requires no extra GUI dependencies and is likely to work on most machines with standard Java 1.5 and above installed.
Caveat : This is a quick solution , and I am not suggesting it as absolutely correct and the only true way, so don't bash me because of that :) 

Let me know how you normally cope with that.

Up next : My core engine in OpenIMSCore, and it what does !