美文网首页
sip客户端注册超时细节

sip客户端注册超时细节

作者: XDgbh | 来源:发表于2018-01-29 12:33 被阅读448次

    1、注册信息数据库表。

    • 当有sip客户端向服务器注册时,在进行一番验证注册成功后,会向<.dir.>/freeswitch/db/core.db数据库的registrations表中以及sofia_reg_internal.db数据库的sip_registrations表中,存入注册信息,两者大部分数据是相同的。
    //源文件sofia.c第2476行。
    //将注册信息存入sofia_reg_internal.db数据库的sip_registrations表中。
    sql = switch_mprintf("insert into sip_registrations "
                         "(call_id, sip_user, sip_host, presence_hosts, contact, status, rpid, expires,"
                         "user_agent, server_user, server_host, profile_name, hostname, network_ip, network_port, sip_username, sip_realm,"
                         "mwi_user, mwi_host, orig_server_host, orig_hostname, ping_status, ping_count) "
                         "values ('%q','%q','%q','%q','%q','Registered','%q',%ld, '%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q','%q', '%q', %d)",
                         call_id, from_user, from_host, presence_hosts, contact_str, rpid, expires, user_agent, to_user, guess_ip4,
                         profile_name, mod_sofia_globals.hostname, network_ip, network_port, username, realm, mwi_user, mwi_host,
                         orig_server_host, orig_hostname, "Reachable", 0);
    

    2、超时时间。

    • core.db的registrations表中,重点关注第五列数据(一个长整型数据),这个数据就是超时时间,也就是指的这个用户的注册信息如果不更新将在这个时间后失效。具体是指——“当前系统正常时间-UNIX时间纪元(1970/1/1/00:00:00)”转化成秒数的长整型数字。
    • sofiq_reg_internal.db的sip_registrations表中有上面registrations表中的所有数据,并多有一些其他更详细的数据。

    3、注册信息更新。

    • 如果在用户的配置信息如1010.xml中添加一行<variable name="sip-force-expires" value="100"/>。那么1010这个sip客户端就会在注册后的每50~100秒内重新再注册一次,然后更新注册信息中的超时时间。

    4、超时时间和注册时间的关系。

    • 超时时间一般是在当前注册时间的系统时间(秒数)的基础上,加上一定的秒数x和秒数y。
      即:超时时间 = 注册时刻系统时间now + x + y 。

    这个秒数x有两种情况:
    1)如果用户配置信息中配置了sip-force-expires具体值如100,那么x等于100秒。
    2)如果用户配置信息中没配置该expires值,那么就从sip客户端注册时提交的信息中获取expires值,如x-lite sip客户端一般将expires值设为3600秒。那么x等于3600秒。

    这个秒数y是指:sip协议源代码中,默认设置的一个安全时间,一般y是60秒。可以防止用户配置信息中sip-force-expires设置的太小,导致频繁检测注册用户是否超时。

    若要在源代码中修改,可修改sofia_reg.c源文件中的 超时时间=(long)reg_time + (long)exptime + profile->sip_expires_late_margin 与上面式子一一对应。

    5、注册超时

    • sip协议源代码中,会有个线程循环检测比较当前系统时间和注册信息表中的超时时间,如果系统时间到了超时时间,这条注册信息还没有更新超时时间,则认为这条用户注册信息超时了(原因可能是对应用户的sip客户端断网或者进程非正常结束)。但是不会立马删除数据库中的这条数据,测试时发现在10秒左右之后,再删除,并发送 CUSTOM sofia::expire 事件通知有用户注册超时。

    6、用户正常上下线事件通知

    • 正常注册上线。不管是第一次注册还是后面每隔多少秒更新注册,都会发送一个注册事件CUSTOM Sofia::register。这些注册方式都是UDP。
    • 不正常注册上线时。如果是用户在断网或其他原因不正常下线后又恢复网络重新注册时,注册方式会是TCP,会产生3个事件CUSTOM Sofia::register。
    • 正常取消注册下线时。此为正常手动关闭退出sip客户端程序,会产生事件CUSTOM Sofia::unregister。
    • 不正常下线时。如果因为注册超时,然后被删除数据库注册信息,会收到 CUSTOM sofia::expire 事件通知有用户注册超时。

    以上这些事件需要向freeswitch发送相关api订阅api event plain CUSTOM sofia::register sofia::unregister sofia::expire。收到的事件的正文内容会包含一些用户的信息,比如号码、系统当前时间、超时时间等等。

    相关文章

      网友评论

          本文标题:sip客户端注册超时细节

          本文链接:https://www.haomeiwen.com/subject/hoqxzxtx.html