[Kamailio-Users] ACC module issue logging Reason: SIP header in missed_calls

sergejf serge at elasticall.com
Wed Nov 19 00:07:55 CET 2008


We are trying to configure the ACC module to log the Reason: header found in
SIP BYE and SIP 4xx messages sent by US carriers when making calls to the
PSTN. 

We have added a cause field (the Reason header contains the Q.850 cause code
associated with telephony events, typically disconnect) to the acc and
missed_calls tables (see tables description further below) and changed
opensips.cfg to read that header and store it:

modparam("acc", "db_flag", 2)
modparam("acc", "db_missed_flag", 3)
modparam("acc", "db_url", "mysql://root:password@localhost/opensips")
modparam("acc", "db_extra",
"from_uri=$fu;to_uri=$tu;request_uri=$ru;cause=$(hdr(Reason))")

This works quite nicely for calls logged in the acc table, such as:

mysql> select * from acc where date(time) = curdate() and (cause like
'%850%') limit 1;
+---------+--------+---------------+-----------------------+-----------------------------------------------------+----------+------------+---------------------+---------------------------------+---------------------------------+-----------------------------------+----------------+
| id      | method | from_tag      | to_tag                | callid                                             
| sip_code | sip_reason | time                | from_uri                       
| to_uri                          | request_uri                       |
cause          |
+---------+--------+---------------+-----------------------+-----------------------------------------------------+----------+------------+---------------------+---------------------------------+---------------------------------+-----------------------------------+----------------+
| 1903785 | BYE    | 627B7414-1509 | telstage-3e5-492294f9 |
492294f9-0127-00105838-0657a1e7-22e4c653 at 88.88.88.88 | 200      | Ok        
| 2008-11-18 05:12:55 | sip:+5599999999 at 99.99.99.99 |
sip:+15555555555 at 88.88.88.88:5060 | sip:88.88.88.88:5060;transport=udp |
Q.850;cause=16 |
+---------+--------+---------------+-----------------------+-----------------------------------------------------+----------+------------+---------------------+---------------------------------+---------------------------------+-----------------------------------+----------------+
1 row in set (1.58 sec)

The cause field contains "Q.850;cause=16" taken from the Reason: header. 

However, the same Reason: header is NOT logged for calls found in the
missed_calls table:

mysql> select * from missed_calls where date(time) = curdate() and sip_code
= 480 limit 1;
+---------+--------+------------------------+--------------+-----------------------------------------------------+----------+---------------------------+---------------------+---------------------------------+---------------------------------+---------------------------------+-------+
| id      | method | from_tag               | to_tag       | callid                                             
| sip_code | sip_reason                | time                | from_uri                       
| to_uri                          | request_uri                     | cause
|
+---------+--------+------------------------+--------------+-----------------------------------------------------+----------+---------------------------+---------------------+---------------------------------+---------------------------------+---------------------------------+-------+
| 1231364 | INVITE | telstage-5d06-492293b5 | 627682C8-40F |
492293b5-0154-0013be65-6d9882a2-bafcf3d3 at 88.88.88.88 | 480      |
Temporarily Not Available | 2008-11-18 05:06:51 |
sip:+15555555555 at 88.88.88.88:5060 | sip:+5599999999 at 63.63.63.63 |
sip:69085599999999 at 200.0.0.0 |       |
+---------+--------+------------------------+--------------+-----------------------------------------------------+----------+---------------------------+---------------------+---------------------------------+---------------------------------+---------------------------------+-------+
1 row in set (1.09 sec)

Note that the cause field is empty, while the OpenSIPS logs clearly show a
Reason: header present in the SIP 480 message:

Nov 18 05:06:51 sip100 /usr/local/sbin/opensips[20355]: TRACE:ONREPLY_ROUTE:
src(200.0.0.0:5060) dst(63.63.63.63:5060) msg(SIP/2.0 480 Temporarily Not
Available^M Via: SIP/2.0/UDP
63.63.63.63;branch=z9hG4bK96cf.a009bc13.0,SIP/2.0/UDP
88.88.88.88:5060;branch=z9hG4bK492293b5-0154-0013be66-6d9882a2-bafcf3d3^M
From: <sip:+15555555555 at 88.88.88.88:5060>;tag=telstage-5d06-492293b5^M To:
sip:+5599999999 at 63.63.63.63;tag=627682C8-40F^M Date: Tue, 18 Nov 2008
10:06:45 GMT^M Call-ID:
492293b5-0154-0013be65-6d9882a2-bafcf3d3 at 88.88.88.88^M Server:
Cisco-SIPGateway/IOS-12.x^M CSeq: 13960 INVITE^M Allow-Events:
telephone-event^M Reason: Q.850;cause=18^M Content-Length: 0^M ^M )

Is this a bug from the ACC module or a limitation, i.e. SIP 4xx messages are
not handled in the same way as the BYE messages in the acc table?

Any advice would be most appreciated!!

Serge

PS: here are the schemas we're using for the acc and missed_calls tables:

mysql> describe acc;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| method      | varchar(16)      | NO   |     |         |                |
| from_tag    | varchar(64)      | NO   |     |         |                |
| to_tag      | varchar(64)      | NO   |     |         |                |
| callid      | varchar(64)      | NO   | MUL |         |                |
| sip_code    | varchar(3)       | NO   |     |         |                |
| sip_reason  | varchar(32)      | NO   |     |         |                |
| time        | datetime         | NO   |     |         |                |
| from_uri    | varchar(64)      | NO   |     |         |                |
| to_uri      | varchar(64)      | NO   |     |         |                |
| request_uri | varchar(64)      | NO   |     |         |                |
| cause       | varchar(60)      | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)

mysql> describe missed_calls;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| method      | varchar(16)      | NO   |     |         |                |
| from_tag    | varchar(64)      | NO   |     |         |                |
| to_tag      | varchar(64)      | NO   |     |         |                |
| callid      | varchar(64)      | NO   | MUL |         |                |
| sip_code    | varchar(3)       | NO   |     |         |                |
| sip_reason  | varchar(32)      | NO   |     |         |                |
| time        | datetime         | NO   |     |         |                |
| from_uri    | varchar(64)      | NO   |     |         |                |
| to_uri      | varchar(64)      | NO   |     |         |                |
| request_uri | varchar(64)      | NO   |     |         |                |
| cause       | varchar(60)      | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
12 rows in set (0.00 sec)

-- 
View this message in context: http://www.nabble.com/ACC-module-issue-logging-Reason%3A-SIP-header-in-missed_calls-tp20569925p20569925.html
Sent from the OpenSER Users Mailing List mailing list archive at Nabble.com.





More information about the Users mailing list