sip 클라이언트 등록 시간 초과 세부 사항

3711 단어

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표에서 5열 데이터(한 개의 긴 정형 데이터)에 중점을 두는데 이 데이터는 시간 초과 시간입니다. 즉, 이 사용자의 등록 정보가 업데이트되지 않으면 이 시간 후에 효력을 잃게 됩니다.구체적으로는'현재 시스템 정상 시간-UNIX 시간 기원(1970/1/00:00)'을 초수로 바꾸는 긴 정형 숫자를 가리킨다
  • sofiq_reg_internal.db의sip_registrations 테이블에는 위의 registrations 테이블에 있는 모든 데이터가 있고 더 자세한 데이터가 있습니다

  • 3. 등록 정보가 업데이트됩니다.

  • 사용자의 설정 정보가 1010인 경우.xml에 한 줄을 추가합니다 .그러면 1010 이sip 클라이언트는 등록 후 50~100초 안에 다시 등록하고 등록 정보의 시간 초과 시간을 업데이트합니다..

  • 4. 시간 초과 및 등록 시간의 관계.

  • 시간 초과 시간은 일반적으로 현재 등록 시간의 시스템 시간(초수)을 토대로 일정한 초수 x와 초수 y를 더한다.즉: 시간 초과 = 등록 시간 시스템 시간 now + x + y..

  • 이 초수 x는 두 가지 상황이 있다. 1) 사용자 설정 정보에sip-force-expires의 구체적인 값이 100과 같다면 x는 100초와 같다.2) 사용자 설정 정보에서 이 expires 값을 설정하지 않으면sip 클라이언트가 등록할 때 제출한 정보에서 expires 값을 가져옵니다. 예를 들어 x-litesip 클라이언트는 일반적으로 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 .받은 사건의 본문 내용은 일부 사용자의 정보를 포함할 것이다. 예를 들어 번호, 시스템의 현재 시간, 시간 초과 시간 등이다.

    좋은 웹페이지 즐겨찾기