计费信息写入数据库可能是最方便的后端存储方式,使用SQL命令查询可以直接生成报告。因为,Kamailio本身没有SQL后端,通过连接方式实现了其内部DB API的No-SQL后端连接(例如Cassandra,MongoDB,文本文件),以此满足了与其他系统共享或进行自定义处理的需求。为了将计费记录写入数据库,每个SIP事务都必须用db_flag参数设置的标志进行标记。
340. modparam("acc", "db_flag", FLT_ACC)
就像在syslog存储方式中定义的一样,FLT_ACC在默认的kamailio.cfg中被定义为1。要获取更多的账户细节,用户需要设置参数db_extra, 默认的kamailio.cfg使用:
343. modparam("acc", "db_extra",
344. "src_user=$fU;src_domain=$fd;src_ip=$si;"
345. "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")
对于已记录的INVITE事务,数据库记录如下:
id: 20
method: INVITE
from_tag: vRn7KTHPr
to_tag: caKaFr9jmDvSN
callid: WtkExv-2o3
sip_code: 200 sip_reason: OK
time: 2015-01-01 11:21:54
src_ip: 192.168.178.48
dst_ouser: david
dst_user: david
dst_domain: 192.168.178.54
src_user: alice
src_domain: kamailio.lab
一旦通话结束,就会写入针对INVITE的BYE事务的另一条记录。
id: 21
method: BYE
from_tag: caKaFr9jmDvSN
to_tag: vRn7KTHPr
callid: WtkExv-2o3
sip_code: 200
sip_reason: OK
time: 2015-01-01 11:22:18
src_ip: 192.168.178.48
dst_ouser: david
dst_user: david
dst_domain: 192.168.178.54
src_user: alice
src_domain: kamailio.lab
在BYE记录中最重要的字段是时间,用于计算通话持续时间。如果用户要匹配属于同一通话的INVITE和BYE记录,匹配必须使用记录在数据库的callid、from_tag和to_tag的列进行匹配,系统才能确定是否属于同一呼叫记录。
这里要请注意,如果被叫方发送的BYE请求,则在BYE记录中的from_tag和to_tag的值进行互换(callee发送的BYE请求,根据RFC3261规范的字段),因此用户还需要进行交叉匹配(将INVITE的from_tag与BYE的to_tag匹配,将INVITE的to_tag与BYE的from_tag匹配)。这里的参数detect_direction可以设置为1,以便acc模块检测到BYE请求是否是由被叫方发送,并交换值以获得与INVITE相同的From和To属性和正确匹配。acc数据库表中列的含义在以下表中显示:
作者:james.zhu
来源:SIP实验室
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。