[OpenSIPS-Users] Database and other high-level functionality (was: Re: Sqlops in opensips ?)

Alex Balashov abalashov at evaristesys.com
Sun May 31 07:36:40 CEST 2009


Bogdan,

Bogdan-Andrei Iancu wrote:

> When comes to none-SIP related stuff, there is a logical limit of what 
> should be in or not - after all we do a SIP server and not a DB wrapper, 
> neither a XMLRPC server, not an advanced language interpreter (and so one).

I can certainly appreciate that.  In principle, I agree that at the end
of the day, underneath it all, OpenSIPS is a SIP proxy, along with some
lightweight UAS features (registrar, presence user agent, etc.).

It's still much more a piece of service delivery *infrastructure* - it
is low-level relative to some other network elements that frequently
make their appearance in the open-source VoIP ecosystem.  No argument
there.

But I think this does have to be balanced with the reality that a great 
deal of the OpenSER technology stack's usefulness does come from the 
fact that it can be deployed in application-aware configurations, the 
extensibility of the route script, and so on.  This ability to add 
intelligence and integration paths is precisely where it has an edge 
over the expensive commercial proxies and, in certain situations, SBCs.

> To give you an example of how I see this delimitation of what should be 
> in OpenSIPS and what not. Let's take the DB case (anyhow the discussion 
> started from there): the current DB support in script is a very decent 
> one (via the avpsops functions) - you can do mostly all types of queries 
> and DB interaction. If you need something more complex (from DB), I 
> think you must work on the DB side and do the enhancements there. Make 
> no sense to invest effort in doing super DB stuff in a SIP server, when 
> the DB engine itself may already offer this support.

Sure, but taking advantage of some of the more sophisticated DB 
capabilities on the back side also requires adequate interfaces on the 
front side.  For example, how does one deal efficiently and easily with 
multiple rows returned by a DB query?  At present the only way is to 
iterate through AVP arrays in a rather obfuscated manner that is hard to 
understand and not particularly terse.

All this benefits from improvements to language syntax and semantics as 
well as the DB layer.

> Again, an example - couple of weeks ago I had to interface OpenSIPS with 
> some really complex data structures in a postgres DB - the solution was 
> simple - some postgres procedures were created to hide the DB complexity 
> and also to incorporate some logic. Form OpenSIPS point of view, the 
> problem was reduced to running a select over the procedures.

I completely agree.  In fact, this is exactly how I have been doing my 
work (I almost exclusively use Postgres) for years precisely because of 
the fact that the route script does not have the capabilities of a 
general-purpose programming languages, including native support for 
nontrivial primitives and other semantics that are needed to do that 
kind of logic programmatically.  I rely very heavily on stored 
procedures and triggers.

Nevertheless, the interface could use some enhancements to make this 
coupling easier.  It's just little things.  Like, for example, right 
now, if you issue a DB query that returns no rows, you need to use 
is_avp_set() to check whether the corresponding AVP(s) are set.

> So, the effort is better focused on SIP part rather is peripheral 
> interaction, where we can use the already existing and specific tools 
> and mechanism.

Nevertheless, a lot of the peripheral tools hold the key to a great deal 
of the value.  I invite you to remember why OpenSER grew to such 
popularity after the fork with SER in 2005:  it is the mass of 
community-contributed modules and novel functionality.  SER may have 
focused on a good core, but OpenSER could be said to have won precisely 
because of the additional baked-in capabilities.

Whatever your opinion of bells & whistles modules, I think it is very 
important to preserve the inherent benefit offered by most open-source 
software compared to proprietary alternatives:  the integration paths. 
Asterisk for example has AGI and the Manager interface, which both allow 
outside processes and outboard logic controllers to touch and manipulate 
the engine.  MI[_DATAGRAM], XML-RPC, and a relatively flexible route 
script are all very important for that reason.  The capability to 
integrate is paramount above all else, and is a governing factor in the 
technology choice.

> About the place of the DB related stuff - well, originally they were 
> operating only with AVP and this is why they were put in the avpops. 
> Now, indeed, there is no dependency for this, but the questions is what 
> will be the advantage for a  users of moving  some functionality in a 
> separate module ? I fail to see any...

Expanded database-centric functionality, especially free from the 
constraints of unrelated AVP constructs, such as the need to define an 
avp_table as a modparam even if one is not going to use it.

-- Alex

-- 
Alex Balashov
Evariste Systems
Web    : http://www.evaristesys.com/
Tel    : (+1) (678) 954-0670
Direct : (+1) (678) 954-0671
Mobile : (+1) (678) 237-1775






More information about the Users mailing list