SIP中的对话NOTIFY消息

时间:2012-06-25 08:33:48

标签: c++ sip

可以发送Out Of Dialog NOTIFY消息吗? 我正在使用PBX和SIP电话连接到它。我需要在PBX上发生一些变化时将NOTFIY消息发送到手机。我知道手机必须支持PBX,PBX可以发送NOTIFY消息,这是对话消息。

我需要的是OUT Of Dialog NOTIFY消息是电话。电话已经有代码来理解OOD NOTIFY。 我知道有像REFER这样的方法的隐式订阅。有没有这样的东西,所以我可以发送OOD NOTIFY而无需订阅手机?

2 个答案:

答案 0 :(得分:1)

没有标准化的方式来发送没有必要订阅的NOTIFY(我已经看到NOTIFY请求被用作没有订阅的NAT保持活动机制但是这是一些顽皮的ATA的黑客攻击的情况)。

SIP实现者的这个thread为使用PUBLISH请求的未经请求的NOTIFY提供了一个很好的替代方案。

答案 1 :(得分:0)

#include "pjsip_event_notification.h"
#include <pjsip.h>
#include <pjsip_ua.h>
#include <pjlib-util.h>
#include <pjlib.h>
#include <pjlib.h>
#include <pjsua.h>
#include <pjsua-lib/pjsua_internal.h>

static EventCallBack* registeredCallbackObject = NULL;

extern "C" {

  pj_bool_t on_rx_response_wrapper(pjsip_rx_data *rdata){
          registeredCallbackObject->on_rx_response(rdata);
          return PJ_FALSE;
 }

  pj_bool_t on_rx_request_wrapper(pjsip_rx_data *rdata){
          registeredCallbackObject->on_rx_request(rdata);
          return PJ_FALSE;
  }


  /* The module instance. */
  static pjsip_module mod_event_handler =
  {
      NULL, NULL,             /* prev, next.      */
      { (char*)"mod-reg-event", 12 },  /* Name.        */
      -1,                 /* Id           */
      PJSIP_MOD_PRIORITY_TSX_LAYER - 1,  /* Priority         */
      NULL,               /* load()       */
      NULL,               /* start()      */
      NULL,               /* stop()       */
      NULL,               /* unload()     */
      &on_rx_response_wrapper,               /* on_rx_request()  */
      &on_rx_response_wrapper,               /* on_rx_response() */
      NULL,               /* on_tx_request.   */
      NULL,               /* on_tx_response() */
      NULL,               /* on_tsx_state()   */

  };


  PJ_DECL(pj_status_t) event_callback_init() {
      return pjsip_endpt_register_module(pjsua_get_pjsip_endpt(),
                          &mod_event_handler);
  }

 void setEventCallbackObject(EventCallBack* eventCallBack){
         registeredCallbackObject=eventCallBack;
 }


}

同一个pjsip_event_notification.h的h文件

#include <pj/config_site.h>
#include <pjsua-lib/pjsua.h>

class EventCallBack {

public:
        virtual ~EventCallBack() {}
        virtual void on_rx_response(pjsip_rx_data *rdata){
 // Target Call Back for Notify message
        }

        virtual void on_rx_request(pjsip_rx_data *rdata){

        }



};
extern "C" {
pj_status_t event_callback_init();

void setEventCallbackObject(EventCallBack* eventCallBack);
}