Loading...
 

SIP SBLA

Contents



Introduction

Research into the operation of SBLA functionality and how it can be implemented. Many existing SIP feature controllers do not support this operation. SLBA is important for many business applications, but is also important for a home (at least the "shared line" functionality). The goal here is to understand how SIP phones implement SLBA and then implement a "front end controller", if you will, that adds SLBA functionality to existing feature servers. I will be using the Pingtel 501 SIP phones and OpenSER to study the problem.

OpenSER recently added a perl module that allows calling perl scripts from SER. I believe that this may be the best way to accomplish the goal.

I realize that this is a bastardized way to add this functionality to a SIP feature server, but.... Well, I'm going to stay away from the religous arguements; this is just a sicence project anyway.

Development Progress

StatusDescription
CompleteCompile and Install ser on Debian
CompleteConnect and configure 2 phones
CompleteRegister both directly with FoneIP
CompleteRegister Alice with ser
WorkingProxy register Alice with FoneIP
3rd party register Alice@Bob on ser
Fork incoming call to both registrations
Configure and study Poylcom's BLA implementation
Configure and study Polycom's Shared Line implementation
Implement the BLA state engine using presence module example
Document findings
Enhance with operational requirements


  • Message Waiting
Need to subscribe for message waiting directly to FoneIP but I am disabling message waiting subscriptions until I get proxy registrations working

Research

Current Approach


Reference




Other Implementations


OpenSER Development

  • CVS Access
cd ~
mkdir OpenSER OpenSER/head
cd OpenSER/head
export CVSROOT=:pserver:anonymous@openser.cvs.sourceforge.net:/cvsroot/openser
cvs login
cvs -z3 checkout sip-server
or
cvs -z3 checkout -r rel_1_1_0 sip-server

  • Compiling
cd ~/OpenSER/head/sip-server
mv packaging/debian packaging/debian-etch
mv packaging/debian-sarge packaging/debian
chmod a+x packaging/debian/rules
make
make include_modules="perl" modules
make include_modules="perl" deb

Notes:

  • Loaded packages: dpatch patchutils mysql-common-4.1 libmysqlclient14 libmysqlclient14-dev zlib1g-dev libexpat1-dev libxml2 libxml2-dev libssl-dev
  • Modified packaging/debian/control to remove dependencies for postgresql-dev, libradius-ng-dev, unixodbc-dev, libxmlrpc-c3-dev
  • Modified packaging/debian/control to remove references to openser-postgres-module, openser-radius-modules, openser-unixodbc-module, openser-xmlrpc-module
  • Modified packaging/debian/rules commenting out explicit lines for postgres, radius, unixodbc, and xmlrpc

Configuring and Running

These directories are debian specific

Config files

  • Startup Files
/etc/default/openser
/etc/init.d/openser
  • Config Files
/etc/openser/openser.cfg

Starting and Stopping

  • Normally in daemon mode (fork=yes)
/etc/init.d/openser start
  • For Debugging
/etc/init.d/openser debug
  • Check the config file
/usr/sbin/openser -c

Polycom Configuration

Directly registered to FoneIP (bob and alice)

  • sip.cfg
voIpProt.local.port=""
voIpProt.server.1.address="216.110.2.134"
voIpProt.server.1.port="5620"
voIpProt.server.1.expires="1800"
dialplan.digitmap="2-911|011xxx.T|011xxx.#|12-9xxxxxxxxx|2-9xxxxxxxxx|*xx|"
voIpProt.SIP.outboundProxy.address="216.110.2.134"
voIpProt.SIP.outboundProxy.port="5620"

  • bob.cfg
<sip>
<voIpProt>
<local voIpProt.local.port="5061"/>
</voIpProt>
</sip>
reg.1.displayName="Bob BLA"
reg.1.address="2145501293*99887766"
reg.1.label="1293"
reg.1.auth.userId="2145501293*99887766"
reg.1.auth.password="xxxxxxxx"

msg.mwi.1.subscribe="2145501293*99887766"
msg.mwi.1.callBackMode="Contact"
msg.mwi.1.callBack="8999"

  • alice.cfg
<sip>
<voIpProt>
<local voIpProt.local.port="5062"/>
</voIpProt>
</sip>
reg.1.displayName="Alice BLA"
reg.1.address="2145501294*99887766"
reg.1.label="1294"
reg.1.auth.userId="2145501294*99887766"
reg.1.auth.password="xxxxxxxx"

msg.mwi.1.subscribe="2145501294*99887766"
msg.mwi.1.callBackMode="Contact"
msg.mwi.1.callBack="8999"

Proxy registered to FoneIP (alice)

  • alice.cfg
<sip>
<voIpProt>
<local voIpProt.local.port="5062"/>
</voIpProt>
<SIP>
<outboundProxy voIpProt.SIP.outboundProxy.address="" voIpProt.SIP.outboundProxy.port=""/>
</SIP>
</sip>
reg.1.displayName="Alice BLA"
reg.1.address="2145501294*99887766"
reg.1.label="1294"
reg.1.type="private"
reg.1.auth.userId="2145501294*99887766"
reg.1.auth.password="xxxxxxxx"
reg.1.server.1.address="192.168.171.208"
reg.1.server.1.port="5620"
reg.1.server.1.expires="1800"
reg.1.outboundProxy.address="192.168.171.208"
reg.1.outboundProxy.port="5620"

msg.mwi.1.subscribe="2145501294*99887766@216.110.2.134:5620"
msg.mwi.1.callBackMode="Contact"
msg.mwi.1.callBack="8999"

OpenSER Config

Notes / Research

  • Outbound registration
modparam("uac","credential","xxxxxxx:yyyyy:xxxxxx")
and then add uac_auth like following:
if(!uac_auth()) {log(1,"error for uac_auth\n");}



...
#define the credential
modparam("uac","credential","gw_user:gw_realm:gw_passwd")
.....
route
{
	.....
	# set failure route for authentication
	t_on_failure("3")
	# reset flag to mark no authentication yet performed
	resetflag(7);
	# forward to PSTN
	t_relay_to_udp("GW_IP","GW_PORT");
	....
}

failure_route[3]
{
	# authentication reply received?
	if ( t_check_status("401|407") )
	{
		# have we already tried to authenticate?
		if (isflagset(7))
		{
			t_reply("503","Authentication failed");
			break;
		}
		if (uac_auth())
		{
			# mark that auth was performed
			setflag(7);
			# trigger again the failure route
			t_on_failure("3");
			# repeat the request with auth response this time
			append_branch();
			t_relay();
		}
	}
}


  • Forking
SER Forking Example

  • Complex Example
SIP.edu Cookbook

  • Fix to ignore qpop
Comment out the "goto error" section in modules/uac/auth_hdr.c
case QOP_STATE:
                /* TODO - add qop support */
                break;


Contributors to this page: michael .
Page last modified on Saturday 10 of March, 2007 14:46:59 CST by michael.