Saturday, December 02, 2006

OpenSER all the features, upto version OpenSER version 1.1.0.

Due to conversations and controversies due to my thoughts on SER vs OpenSER comparison, I decided to bring forth the information on both the systems as told by the creators or organizations them selves. The first of two posts will focus on OpenSER and all the information comes from OpenSER site only. I have not even included mailing lists or external support sites like voip-info.org. I have given links at the end so you can do your own research. From here on, no my words until links!

What OpenSer is;
OpenSER can be:

* SIP proxy server
* SIP registrar server
* SIP location server
* SIP application server
* SIP dispatcher server

OpenSER cannot be:

* SIP phone
* media server
* back-to-back user agent

The OpenSER features;
Some of the features that OpenSER brings:

* robust and performant SIP (RFC3261) Registrar server, Location server, Proxy server and Redirect server
* small footprint - the binary file is small size, functionality can be stripped/added via modules
* plug&play module interface - ability to add new extensions, without touching the core, therefore assuring a great stability of core components
* stateless and transactional statefull SIP Proxy processing
* support for UDP/TCP/TLS transport layers
* IPv4 and IPv6
* support for SRV and NAPTR DNS
* multi-homed (mhomed) and multi-domain support
* scripting language for configurations file. With a syntax similar to sripting languages, the configuration offers a powerful and flexible way to deploy custom SIP services.
* management interface via FIFO file and unix sockets
* pseudo-variables to access and manage parts of the SIP messages and attributes specific to users and server
* authentication, authorization and accounting (AAA) via database (MySQL, Postgress, text files), RADIUS and DIAMETER
* digest and IP authentication
* CPL - Call Processing Language (RFC3880)
* NAT traversal support for SIP and RTP traffic
* ENUM support
* load balancing with failover
* least cost routing
* support for replication - REGISTER offer new functions for replicating client information (real source and received socket).
* logging capabilities - can log custom messages including any header or pseudo-variable and parts of SIP message structure.
* modular architecture - plug-and-play module interface to extend the server's functionality
* gateway to sms or xmpp
* multiple database backends - MySQL, PostgreSQL, flat files and other database types which have unixodbc drivers
* straightforward interconnection with PSTN gateways
* impressive extension repository - over 50 modules are included in OpenSER repository

Scalability:

* OpenSER can run on embedded systems, with limited resources - the performances can be up to hundreds of call setups per second
* used a load balancer in stateless mode, OpenSER can handle over 5000 call setups per second
* on systems with 4GB memory, OpenSER can serve a population over 300 000 online subscribers
* system can easily scale by adding more OpenSER servers
* OpenSER can be used in geographic distributed VoIP platforms
* straightforward failover and redundancy

New in OpenSER modules OpenSER v1.1.0

* acc module
1. direction detection implemented it generate consistent logs disregarding if the BYE is generated by caller or callee.
2. enhancent accounting for missed calls by controlling thelogging at branch and call level.
3. more accurate per branch logging - winning branch (instead of last one) is accounted at call level.
4. radius acc requests include an event time stamp (Event-Timestamp Radius AVP - see RFC2869). The Radius server timpstamp is not reliable since itcontains also the delays due possible RADIUS retransmissions.

* avpops

1. avp_db_query() - new function that allows to do raw sql queries and store the result in AVPs - performance can be increased by reducing the number of accesses to database.
2. parameters format is same as for pseudo-variables - an AVP parameter is referred now via "$avp(type:name)" instead of old format "type:name" (e.g., old "i:11" must be now written "$avp(i:11)") - this brings coherence with pseudo-variables and avoids confusion between int/string values and AVP names

* cpl-c
1. NAT traversal support (via received) for the lookup CPL node.
2. added per branch nat flags support for lookup CPL node.
3. multi domain support added.

* dispatcher

1. dispatcher has failover support - when failover is enabled, selected destination is added as dst_uri or domain part of r-uri and the rest of addresses in destination setare added in AVP list.

* enum
1. new functions (or new vresions of them): enum_fquery(), is_from_user_e164(), is_from_user_enum()
* group
1. regular expression based group matching added

* lcr
1. optional group id parameter is accepted by load_gws(), from_gw(), and to_gw() functions.
2. DB caching support adde.
3. new FROM regexp matching.
4. dynamic strip URI before forward.

* nathelper
1. IPv6 compliant.
2. prope handling of multiple stream handling in sequential requests.
3. support for changing session-level SDP connection (c=) IP when media-description also includes connection information.
4. fix_nated_sdp() may take one more param to force a specific IP instead of the signalling IP.
5. force_rtp_proxy() accepts a new flag 's' to swap creation/confirmation between requests/replies (this is needed to be able to cope with SDPs advertised via 200OK / ACK)
6. add_rcv_param() may take as parameter a flag telling if the parameter should go to the contact URI or contact header; make sense if you forward REGISTER requests and need the registrar to save the parameter as part of URI.


* pdt
1. multi-domain support added

* permissions
1. added "none" protocol option that never matches and thus disables the peer

* registrar
1. module may set for TCP connection a custom lifetime for keeping it open as long as the registered contact is valid
2. Path support according to RFC 3327 - support in registrar for loadbalancing using Path-HF with NAT-Support applied
3. request with failed checks are negativly replied with err headers for hints
4. method filtering performed by lookup()

* rr
1. obsolete function strict_route() removed
2. add_rr_param may be called from BRANCH and FAILURE route
3. record_route() may take a parameter containing RR params
4. "lr" param is added as first param to speed up the loose_routing processing
5. record_route / add_rr_param / record_route_preset accept pseudo-variables in params
6. extra checking to void double record routing via record_route and record_route_preset
7. callbacks are executed after all routing changes were done - this allows the usage of callback that may change the routing info without overlappingwith the RR processing.
8. add_username alters also the behaviour of record_route_preset()

* sl
1. callbacks added - the only event is sending a stateless reply
2. statistics support added

* textops
1. new function has_body([mime])
2. new set of function to work on the body of the message: search_body(), search_append_body(), replace_body(), replace_body_all(), subst_body()
3. function is_method() can be called from BRANCH_ROUTE.

* tm
1. fixed branch picking algorithm - if cancelled, but not 487 replied received, fallback and use classical algorithm.
2. fixed in building ACKs for negative replies to local INVITEs. RURI must be the same as in INVITE and Route hdr have no send to be added

3. branch selection algorithm centralized in a single place - more coherent and easier to maintain.
o the selected branch in stored in a static variable to avoid multiple computation for same transaction (so far, each t_check_status() call was triggering computation of the selected branch)
o TM API exports a new function for making public the selected branch (how the winning branch is selected must be transparent for the other modules)
o fixed the branch selection algorithm - if the transaction was cancelled, the "487 Request cancelled" reply will have priority and it will be sent to UAC

4. t_replicate() takes as parameter a SIP URI instead of a destination (in order to align the format as for append_branch()). Also t_replicate() uses the set branches to perform parallel replication to multiple destinations.
5. new TM callbacks added:
o TMCB_TRANS_DELETED - called when the transaction is deleted ;
o TMCB_REQUEST_BUILT - called just before sending out a request.
6. "pass_provisional_replies" TM options (pass back through unixsock the provisional replies and not only the final one).
This was required in order to maintain compatbility with latest SEMS version.
7. module exports $T_branch_idx pseudo-variable refering to the index of the branch for which the branch_route[] is executed
8. advanced TM monitoring
9. t_relay*() returns 1 instead of 0 when forwarding ACK
10. relay functions merging:
o t_relay_to_udp(), t_relay_to_tcp(), t_relay_to_tls() merged into t_relay(proto:host:port)
o t_forward_nonack_uri(), t_forward_nonack_udp(), t_forward_nonack_tcp(),
o t_forward_nonack_tls() merged into t_forward_nonack(proto:host:port) and t_forward_nonack()
o t_replicate_udp(), t_replicate_tcp(), t_replicate_tls() merged into t_replicate(sip_uri)


* uac
1. default value for "from_restore_mode" switch to auto
2. new module parameter "from_passwd" - used to encrypt the RR parameter which contains the original FROM URI
3. uac_replace_from() adds the display name if not present (so far it only replaced it); uri is enclosed between brackets if not. Actually, now you can set a display name if none was present.
4. when performing UAC authentication, look in predefined AVPs for credentials before using the static set credentials (via modparam)


* uri_db
1. "db_url" module parameter may be set to empty string in orer to disable DB support in the module - this is needed if you want to use check_to() or check_from() to check the user against credentials in a non DBenvironment.

* usrloc
1. module is able to detect retransmissions based on Callid and Cseq. The retransmission detecton is controled via the new "cseq_delay" module parameter. REGISTER retransmissions (inside the cseq_delay interval) will not generate error, but they will be accepted and properly replied without any update on the location status. This solves the problem of retransmissions without having a statefullprocessing on requests.
2. advanced monitoring via statistics; module export dynamic statistic for each register domain (as location or aliases). Available statistics: number of registered users (AORs);number of registered contacts (>= AORs); number of expired contacts
3. get_contacts fifo and unixsock functions retunrn more additional info related to the contact: expires;flags;socket;methods;received?;user_agent?;path?. Values marked with ? may be missing if empty.
4. usrloc: new DB mode - DB-Only - no memory cache is kept, all operation being directly done into DB. Allows DB sharing between multiple proxies without the need of additional replication mechanism. Drawbacks:
o some performance penalties due intensive DB usage
o location watcher disabled (cannot be bind to a record into mem) => PA cannot be used
o statistics do not work since events cannot be properly been traced without a mem cache
5. contact maching algorithm aligned to the RFC 3261 specs (added extra checking based on callid and cseq)
6. configurable multi-algorithm for contact matching:
o contact only based (as in RFC)
o contac and callid based
7. supported methods are saved into usrloc
8. saved socket info contains now also the protocol. The socket is saved as: proto:ip:port

Links;
OpenSER.ORG
OpenSER.org public user forum
VOIP-INFO.ORG OpenSER page.


0 comments:

Blog Widget by LinkWithin