Hello,
the acc uses the SIP request to get the attributes for logging.
It is why you get it for BYE (a sip request) and not for failed calls
where the header is in reply.
Anyhow, there are couple of solutions to get it:
- store the header in an avp (in route for BYE and in onreply_route for
replies) and set tm parameter:
http://kamailio.org/docs/modules/1.4.x/tm.html#id2506328
- if you don't have parallel forking, then you can use $var(...) instead
of avp (a bit faster)
Cheers,
Daniel
On 11/19/08 01:07, sergejf wrote:
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(a)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(a)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(a)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)
--
Daniel-Constantin Mierla
http://www.asipto.com