Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pjsip对Notify消息使用Sip特定的事件通知_Java_C++_Sip_Pjsip_Csip Simple - Fatal编程技术网

Java Pjsip对Notify消息使用Sip特定的事件通知

Java Pjsip对Notify消息使用Sip特定的事件通知,java,c++,sip,pjsip,csip-simple,Java,C++,Sip,Pjsip,Csip Simple,我想在CsipSimple中实现Notify事件回调这里是我编写的C代码 我的C/C++文件 pjsip_event_notification.h文件 #include <pjsip-simple/evsub.h> class EventCallBack { public: virtual ~EventCallBack() {} virtual void on_evsub_state(pjsip_evsub *sub, pjsip_event *

我想在CsipSimple中实现Notify事件回调这里是我编写的C代码

我的C/C++文件

pjsip_event_notification.h文件

#include <pjsip-simple/evsub.h>

class EventCallBack {

public:
        virtual ~EventCallBack() {}

        virtual void on_evsub_state(pjsip_evsub *sub, pjsip_event *event){}
        virtual void on_tsx_state(pjsip_evsub *sub, pjsip_transaction *tsx,
                        pjsip_event *event){}
        virtual void on_rx_refresh(pjsip_evsub *sub, pjsip_rx_data *rdata,
                        int p_st_code, pj_str_t **p_st_text, pjsip_hdr *res_hdr,
                        pjsip_msg_body **p_body){}
        virtual void on_rx_notify(pjsip_evsub *sub, pjsip_rx_data *rdata, int *p_st_code,
                        pj_str_t **p_st_text, pjsip_hdr *res_hdr, pjsip_msg_body **p_body){}
        virtual void on_client_refresh(pjsip_evsub *sub){}
        virtual void on_server_timeout(pjsip_evsub *sub){}

};
extern "C" {
void setEventCallbackObject(EventCallBack* eventCallBack);
}
以及用于实现的Java文件

package com.csipsimple.events;

import org.pjsip.pjsua.EventCallBack;
import org.pjsip.pjsua.SWIGTYPE_p_int;
import org.pjsip.pjsua.SWIGTYPE_p_p_pj_str_t;
import org.pjsip.pjsua.SWIGTYPE_p_p_pjsip_msg_body;
import org.pjsip.pjsua.SWIGTYPE_p_pjsip_evsub;
import org.pjsip.pjsua.SWIGTYPE_p_pjsip_hdr;
import org.pjsip.pjsua.SWIGTYPE_p_pjsip_rx_data;
import org.pjsip.pjsua.SWIGTYPE_p_pjsip_transaction;
import org.pjsip.pjsua.pjsip_event;

public class EventNotify extends EventCallBack{

        @Override
        public void on_evsub_state(SWIGTYPE_p_pjsip_evsub sub, pjsip_event event) {

                System.out.println("EventNotify on_evsub_state");
                super.on_evsub_state(sub, event);
        }

        @Override
        public void on_tsx_state(SWIGTYPE_p_pjsip_evsub sub,
                        SWIGTYPE_p_pjsip_transaction tsx, pjsip_event event) {
                System.out.println("EventNotify on_tsx_state");
                super.on_tsx_state(sub, tsx, event);
        }

        @Override
        public void on_rx_refresh(SWIGTYPE_p_pjsip_evsub sub,
                        SWIGTYPE_p_pjsip_rx_data rdata, int p_st_code,
                        SWIGTYPE_p_p_pj_str_t p_st_text, SWIGTYPE_p_pjsip_hdr res_hdr,
                        SWIGTYPE_p_p_pjsip_msg_body p_body) {
                System.out.println("EventNotify on_rx_refresh");
                super.on_rx_refresh(sub, rdata, p_st_code, p_st_text, res_hdr, p_body);
        }

        @Override
        public void on_rx_notify(SWIGTYPE_p_pjsip_evsub sub,
                        SWIGTYPE_p_pjsip_rx_data rdata, SWIGTYPE_p_int p_st_code,
                        SWIGTYPE_p_p_pj_str_t p_st_text, SWIGTYPE_p_pjsip_hdr res_hdr,
                        SWIGTYPE_p_p_pjsip_msg_body p_body) {
                System.out.println("EventNotify on_rx_notify");
                super.on_rx_notify(sub, rdata, p_st_code, p_st_text, res_hdr, p_body);
        }

        @Override
        public void on_client_refresh(SWIGTYPE_p_pjsip_evsub sub) {
                System.out.println("EventNotify on_client_refresh");
                super.on_client_refresh(sub);
        }

        @Override
        public void on_server_timeout(SWIGTYPE_p_pjsip_evsub sub) {
                System.out.println("EventNotify on_server_timeout");
                super.on_server_timeout(sub);
        }

}

}
我想问的是,我怎样才能得到这些方法的回电

完整的Src可在以下位置克隆:
git克隆

这可以使用 下面 pjsip_事件_通知.cpp

#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事件通知.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
静态事件回调*registeredCallbackObject=NULL;
外部“C”{
pj_bool_t on_rx_response_包装(pjsip_rx_data*rdata){
registeredCallbackObject->on_rx_响应(rdata);
返回PJ_FALSE;
}
pj_bool_t on_rx_request_wrapper(pjsip_rx_data*rdata){
registeredCallbackObject->on_rx_请求(rdata);
返回PJ_FALSE;
}
/*模块实例*/
静态pjsip_模块mod_事件_处理程序=
{
NULL,NULL,/*prev,next*/
{(char*)“mod reg事件”,12},/*名称*/
-1,/*Id*/
PJSIP_模块_优先级_TSX_层-1,/*优先级*/
NULL,/*load()*/
NULL,/*start()*/
NULL,/*stop()*/
NULL,/*unload()*/
&在接收响应包装器上,/*在接收请求()上*/
&在\u rx\u response\u包装器上,/*在\u rx\u response()上*/
NULL,/*应_-tx_请求*/
NULL,/*on_tx_response()*/
NULL,/*在\u tsx\u state()上*/
};
PJ_DECL(PJ_status_t)事件回调_init(){
返回pjsip_endpt_register_模块(pjsua_get_pjsip_endpt(),
&mod_事件处理程序);
}
void setEventCallbackObject(EventCallBack*EventCallBack){
registeredCallbackObject=eventCallBack;
}
}
相同的h文件 pjsip_事件_通知.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);
}
#包括
#包括
类事件回调{
公众:
虚拟~EventCallBack(){}
接收响应上的虚拟无效(pjsip接收数据*rdata){
//通知消息的目标回拨
}
接收请求时的虚拟无效(pjsip接收数据*rdata){
}
};
外部“C”{
pj_status_t event_callback_init();
void setEventCallbackObject(EventCallBack*EventCallBack);
}
#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);
}