从sip header或msg body中获取文本消息

时间:2012-12-03 17:05:55

标签: iphone pjsip

我正在尝试获取在拨号后发送的服务器文本响应

我正在获取这样的日志

  

来自:; tag = as121b5ca6

     

收件人:“我”; tag = FP0KRz3fkxBtR6q19Er1ykMXhHCqtqOU

     

Call-ID:ltPywl5Qkt5JwdG47.U0K2J.R.YZN0my

     

CSeq:103 MESSAGE

     

User-Agent:Asterisk PBX 1.6.2.18

     

Content-Type:text / plain; charset = UTF-8

     

内容长度:137

     

ResultHead = STARS1STARSText = STARS 2764 6053 2778 7089 7541 7156 4997 3457 4438 3666 2246 1307 3666 2246 300 4838 7230 4577 4216 3811 STARS

我想获取'ResultHead'

知道我得到很多这样的消息..是否有任何功能(我确定有但我无法看到它)只获取此消息或至少将标题作为字符串...

我想我需要使用这个功能,但我不知道如何!!

static pjsip_rx_data *get_rx_data(pjsip_event *e)
{
  if (e->type == PJSIP_EVENT_RX_MSG)
     return e->body.rx_msg.rdata;

  if (e->type == PJSIP_EVENT_TSX_STATE && e->body.tsx_state.type == PJSIP_EVENT_RX_MSG)
  return e->body.tsx_state.src.rdata;

 // There's no rdata on this eevnt
  return NULL;
 }

*我在Pjsip ..thnx上使用虹吸管 我希望我的问题很清楚

1 个答案:

答案 0 :(得分:1)

看起来我最后回答了我的问题

因为很难找到答案,至少它对我来说..我会发布它,希望有人会利用它..

首先你需要创建新模块并注册它,

fisrt创建pjsip_module

pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata);

static pj_status_t logging_on_tx_msg(pjsip_tx_data *tdata);

static pjsip_module my_pjsua_msg_logger =

{

 NULL, NULL,                /* prev, next.      */
{ "my_mod-pjsua-log", 13 },     /* Name.        */
-1,                 /* Id           */
PJSIP_MOD_PRIORITY_TRANSPORT_LAYER-1,/* Priority            */
NULL,               /* load()       */
NULL,               /* start()      */
NULL,               /* stop()       */
NULL,               /* unload()     */
&logging_on_rx_msg,         /* on_rx_request()  */
&logging_on_rx_msg,         /* on_rx_response() */
&logging_on_tx_msg,         /* on_tx_request.   */
&logging_on_tx_msg,         /* on_tx_response() */

NULL,               /* on_tsx_state()   */

};

在sip_connect函数中使用

    pjsip_endpt_register_module(pjsua_get_pjsip_endpt(), &my_pjsua_msg_logger);

现在实现了reciepient函数

static pj_status_t logging_on_tx_msg(pjsip_tx_data *tdata)
{

/* Important note:
 *  tp_info field is only valid after outgoing messages has passed
 *  transport layer. So don't try to access tp_info when the module
 *  has lower priority than transport layer.
 */


/* Always return success, otherwise message will not get sent! */
return PJ_SUCCESS;
}



pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata)

{

NSLog(@"\n recieving rx msg %s--end my joy",rdata->msg_info.msg_buf);

if (rdata->msg_info.msg->type == PJSIP_RESPONSE_MSG)

{

   do something 

}

return PJ_FALSE;

}