任何人都知道有关如何设置 pjsip 客户端来接收消息的任何好例子。
我可以使用以下方式从客户端发送消息:
pjsua_im_send(sip_acc_id, &to, NULL, &msgbody, NULL, NULL);
到任何数字。
但我不知道如何才能将消息接收到已注册的 sip 帐户中。
任何信息,将不胜感激。
注意:我只能使用 pjsip 而不能使用其他库。
Edit:我发现的一些新东西:
http://trac.pjsip.org/repos/ticket/1070 http://trac.pjsip.org/repos/ticket/1070
http://www.pjsip.org/release/0.5.4/PJSIP-Dev-Guide.pdf http://www.pjsip.org/release/0.5.4/PJSIP-Dev-Guide.pdf(然而,该文件中关于传入消息的所有内容是这样的:
16.1.2 接收MESSAGE
应用程序将接收任何对话框之外传入的 MESSAGE 请求
模块。
对话框内传入的 MESSAGE 请求将通过以下方式通知对话框的使用情况on_tsx_state()对话框的回调。
它仍然没有说明如何处理传入消息。
http://www.ietf.org/rfc/rfc3261.txt http://www.ietf.org/rfc/rfc3261.txt
http://trac.pjsip.org/repos/wiki/SIP_Message_Buffer_Event http://trac.pjsip.org/repos/wiki/SIP_Message_Buffer_Event
Edit2:有人告诉我需要使用 on_pager 函数来实现此功能。所以我尝试了但不幸的是仍然没有成功。
这是我所做的:
/* Initialize application callbacks */
app_config->cfg.cb.on_call_state = &on_call_state;
app_config->cfg.cb.on_call_media_state = &on_call_media_state;
app_config->cfg.cb.on_incoming_call = &on_incoming_call;
app_config->cfg.cb.on_reg_state = &on_reg_state;
app_config->cfg.cb.on_pager = &on_pager;
以及 on_pager 实现:
static void on_pager(pjsua_call_id call_id, const pj_str_t *from, const pj_str_t *to, const pj_str_t *contact, const pj_str_t *mime_type, const pj_str_t *body) {
NSLog(@"**************** on_pager called **********************");
AppDelegate *app = (AppDelegate *)[AppDelegate sharedApplication];
pjsua_call_info ci;
pjsua_call_get_info(call_id, &ci);
PJ_UNUSED_ARG(call_id);
PJ_UNUSED_ARG(to);
PJ_UNUSED_ARG(contact);
PJ_UNUSED_ARG(mime_type);
[app ring];
//PJ_LOG(3,(THIS_FILE, "MESSAGE from %.*s: %.*s (%.*s)", (int)from->slen, from->ptr, (int)text->slen, text->ptr, (int)mime_type->slen, mime_type->ptr));
postMessageStateNotification(call_id, &ci);
}
我期望应用程序在收到消息时调用 on_pager 但事实并非如此。on_incoming_call
然而,确实被叫了。