Contents
Table of 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
Status | Description |
Complete | Compile and Install ser on Debian |
Complete | Connect and configure 2 phones |
Complete | Register both directly with FoneIP |
Complete | Register Alice with ser |
Working | Proxy 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
Research
Current Approach
Reference
- OpenSER
- OpenSER at VoIP-Info
- OpenSER CVS
- OpenSER Documentation Wiki <--- EXCELLENT
- OpenSER Tutorials
- serusers - SER users mail list archives
- serdev - SER development mail list archives
- openser-users - OpenSER users mail list archives
- openser-devel - OpenSER development mail list archives
Other Implementations
OpenSER Development
- CVS Access
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
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 specificConfig files
- Startup Files
/etc/init.d/openser
- Config Files
Starting and Stopping
- Normally in daemon mode (fork=yes)
- For Debugging
- Check the config file
Polycom Configuration
Directly registered to FoneIP (bob and alice)
- sip.cfg
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
<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
<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
<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
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
- Complex Example
- Fix to ignore qpop
case QOP_STATE: /* TODO - add qop support */ break;
Last wiki comments