Facebook
Twitter
LinkedIn
YouTube
SysAdminMan
  • Blog
  • Contact

A2Billing and OpenSIPS – Part 2

26 January 2013MattA2Billing, OpenSIPS

In this part of the guide I’m going to look at some of the set up required for the example config to work.

We are going to enable IP and USER/SECRET authentication for our A2Billing SIP customer calls. To do that we are going to create a couple of MySQL VIEWS in the ‘opensips’ database that point to tables in the ‘a2billing’ database. This means we can create our A2Billing SIP users as normal, and they will then become valid users in OpenSIPS.

Part 2 and Part 3 of the guide assume the following –

  • OpenSIPS server IP = 1.1.1.1
  • A2Billing server IP = 2.2.2.2
  • MySQL server IP = 2.2.2.2   (same server as A2Billing)
  • domain name for our calls = mya2billingcalls.com

On the A2Billing/Asterisk server

So now we create our VIEWS in the database. We are going to use the ‘address’ table for IP authentications and the ‘subscriber’ table for USER/SECRET authentications.

Here we create the ‘address’ VIEW –

DROP TABLE opensips.address

CREATE VIEW opensips.address AS
SELECT id AS id,
CAST(1 AS DECIMAL) AS grp,
host AS ip,
CAST(32 AS DECIMAL) AS mask,
cast(port as DECIMAL) AS port,
'UDP' AS proto,
'' AS pattern,
accountcode AS context_info
from a2billing.cc_sip_buddies
WHERE host != 'dynamic';

So for any A2Billing SIP customer where the IP address is not set to ‘dynamic’ we are going to create an OpenSIPS user. We are also going to store the A2Billing customers Account Code in a field called context_info. This is not strictly what that field is designed for but it makes it easy for us to access the customers account code from OpenSIPS

Now we create the ‘subscriber’ VIEW –

DROP TABLE opensips.subscriber

CREATE VIEW opensips.subscriber AS
SELECT id AS id,
username AS username,
'openhold.com' AS domain,
secret AS password,
'' AS email_address,
md5(concat(username,':','mya2billingcalls.com',':',secret)) AS ha1,
md5(concat(username,'@','mya2billingcalls.com',':','mya2billingcalls.com',':',secret)) AS ha1b,
accountcode AS rpid
from a2billing.cc_sip_buddies
where username != '';

You will want to change ‘mya2billingcalls.com’ to the domain name you are going to use. We are going to store the customers Account Code in a field called ‘rpid’. Again this is not really what it’s designed for, but it makes it easy to access from OpenSIPS. You can see the ‘where’ clause restricts this to A2Billing customers that do not have a blank username field (they might have this if you were doing IP authentication)

Next we need to modify the Asterisk dial plan a little to tell it to pass all calls coming form the OpenSIPS server to the a2billing.php script.
To do that we are first going to create an entry in sip.conf with the sip details of the OpenSIPS server –

[opensips]
host=1.1.1.1
type=peer
context=a2billing-opensips-sip

So any calls coming from the OpenSIPS server will get passed to the ‘a2billing-opensips-sip’ context.

Now we create that context in extensions.conf –

[a2billing-opensips-sip]
exten => _X.,1,Set(CDR(accountcode)=${SIP_HEADER(P-Accountcode)})
exten => _X.,n,DeadAGI(a2billing.php,1)
exten => _X.,n,Hangup

So we set the A2Billing customer account code (this is going to be passed to us by OpenSIPS) and then we run the a2billing.php script using agi-conf1

On the A2Billing customer PBX

I’m going to assume that our A2Billing SIP customer is using an Asterisk server to connect to us. They could set up their trunk in 2 different ways. One using IP authentication like this –

[mya2billingcalls]
host=1.1.1.1
type=peer

For IP authentication we must have entered the customers PBX IP address in the HOST field in the customers A2Billing SIP account

Or they could use username/password authentication like this –

[mya2billingcalls]
host=1.1.1.1
type=peer
username=XXXXX
secret=XXXXX
fromdomain=mya2billingcalls.com

The ‘fromdomain’ setting must be set to the same one we used when creating our MySQL views.

That’s the Asterisk and MySQL setup done, it part 3 we’ll look at the actual OpenSIPS config file.


Related posts:
  1. A2Billing and OpenSIPS – Part 3
  2. A2Billing and OpenSIPS – Part 1
  3. Integrating OpenSIPS with Asterisk and A2Billing
  4. IP authentication in A2Billing using SIP
Tags: a2billing, opensips
Previous post A2Billing and OpenSIPS – Part 1 Next post A2Billing and OpenSIPS – Part 3

Related Articles

FreePBX vs A2Billing

30 October 2010Matt

Part 5 – Creating a trunk in A2Billing on Elastix

27 June 2010Matt

Stats for SysAdminMan YouTube channel

16 December 2012Matt

11 comments. Leave new

Vincent
26 January 2013 1:04 pm

Nice tutorial here, Matt! I like the database views idea to get the two components to use the same data. I await your third part with anticipation as I plan to test these configurations myself. I am curious as to your reasons for choosing OpenSIPs as opposed to Kamailio, if any?
—
Vin

matt
26 January 2013 1:42 pm

Hi Vin

I’m glad you like it. No real reason to choose OpenSIPS. It actually seems quite tricky for someone without experience of OpenSER to make an informed decision.

Do you have a preference between the two? And if so why?

Vincent
26 January 2013 5:33 pm

I’m no expert and rarely have the opportunity to meddle with these systems let alone develop with them but I do read a lot from the experts – The 2600hz guys concluded why they switched to Kamailio:
Many of our Major Clients already use it
The Naming Conventions are more sensible
The Pace of Innovation on Kamailio is faster

I guess the more flexible the system, the trickier it can become.

Lucky
17 June 2013 4:02 am

Hi Matt,

On the creation of opensips.subscriber table what does the domain “openhold.com” represents? Thanks.

Lucky

matt
18 June 2013 2:36 pm

Hi. It’s the domain name or the IP address that the clients will be connecting to in the SIP details.

soux
12 March 2014 12:36 am

Hi Matt,

This is a very good tutorial. I do have one question on a2billing-and-opensips-part-2, which files should I edit when you mention “A2Billing customer PBX”?

Thank you

soux
12 March 2014 2:06 am

Hi Matt,

Sorry, I miss understand my reading. My bad, I got it….

Michael
15 July 2015 5:58 pm

Does this work the same if instead of making the customer server and opensips seperate I install them in the same server?? Ie Opensips and Main Customer a2billing are installed in the same server?? Are there any disadvantages to this??

Matt
16 July 2015 12:16 pm

Hi Michael

You should be fine putting OpenSIPS on the same server. You just need to run Asterisk on a port other than 5060.

Matt

Michael
18 July 2015 10:17 am

thanks do you think you can do a similar tutorial for astpp i like the fact that it uses freeswitch

asif aleem
4 February 2016 2:36 pm

Feb 4 06:31:55 m3026 /usr/local/sbin/opensips[29059]: REGISTER FAILED
i am getting this error can you guide me plz

Categories

A2Billing is written and maintained by Star2Billing
FreePBX® is a Registered Trademark of Schmooze Com, Inc.

© 2019 SysAdminMan Ltd
Registered in England and Wales, Company No. 7198077
The Apex, 2 Sheriffs Orchard, Coventry, England, CV1 3PP