2012-06-25 71 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文件