2012-06-25 40 views
1

可能发送缺少对话NOTIFY消息吗? 我正在使用PBX和SIP电话连接到它。我需要在PBX上进行一些更改时将NOTFIY消息发送到手机。我知道电话必须与PBX相呼应,并且PBX可以发送NOTIFY消息,这是在对话消息中。缺少SIP中的对话NOTIFY消息

我需要的是对话NOTIFY消息的OUT是手机。手机已经编码了解OOD NOTIFY。 我知道像REFER这样的方法存在隐式订阅。有没有这样的事情,以便我可以发送OOD NOTIFY而无需订阅电话?

回答

1

有没有标准的方式发送NOTIFY没有必要的订阅(我见过NOTIFY请求被用作NAT保持活动机制没有订阅,但这是一些淘气的ATA黑客)。

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

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

#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); 
} 
第h文件