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@88.88.88.88 | 200 | Ok | 2008-11-18 05:12:55 | sip:+5599999999@99.99.99.99 | sip:+15555555555@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@88.88.88.88 | 480 | Temporarily Not Available | 2008-11-18 05:06:51 | sip:+15555555555@88.88.88.88:5060 | sip:+5599999999@63.63.63.63 | sip:69085599999999@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@88.88.88.88:5060;tag=telstage-5d06-492293b5^M To: sip:+5599999999@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@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)