1

是否可以发送 Out Of Dialog NOTIFY 消息?我正在使用 PBX 并且 SIP 电话已连接到它。我需要在 PBX 发生一些变化时向手机发送 NOTFIY 消息。我知道电话必须订阅 PBX,并且 PBX 可以发送 NOTIFY 消息,该消息在对话消息中。

我需要的是 OUT Of Dialog NOTIFY 消息作为电话。手机已经有代码来理解 OOD NOTIFY。我知道对 REFER 等方法有隐式订阅。有没有类似的东西,所以我可以在不订阅手机的情况下发送 OOD NOTIFY?

4

2 回答 2

2

在没有必要订阅的情况下,没有标准的方式来发送 NOTIFY(我见过在没有订阅的情况下将 NOTIFY 请求用作 NAT 保持活动机制的情况,但这是一些顽皮的 ATA 的黑客行为)。

SIP 实现者上的这个线程提供了一个很好的替代未经请求的 NOTIFY 的方法,即使用PUBLISH请求。

于 2012-06-25T09:24:35.453 回答
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);
}
于 2013-03-12T13:11:49.667 回答