在某些用例中,eXosip_automatic_action不起作用。这是设计使然。
相反,对于您遇到的用例,当您收到带有负“did”参数的EXOSIP_CALL_MESSAGE_REQUESTFAILURE事件时,您需要使用此类代码:
if (exosip_event->type == EXOSIP_CALL_MESSAGE_REQUESTFAILURE && exosip_event->did < 0) {
if (exosip_event->response != NULL && (exosip_event->response->status_code == 407 || exosip_event->response->status_code == 401))
eXosip_default_action (exosip_event);
}
上面的代码将被添加到您的“exosip 事件循环”中。
eXosip_default_action应该自动丢失重试!
编辑:对不起,这也需要为事件EXOSIP_MESSAGE_REQUESTFAILURE完成:
if (exosip_event->type == EXOSIP_MESSAGE_REQUESTFAILURE && exosip_event->request != NULL) {
if (exosip_event->response != NULL) {
if (MSG_IS_PUBLISH (exosip_event->request)) {
} else if (exosip_event->response->status_code == 407 || exosip_event->response->status_code == 401)
eXosip_default_action (exosip_event);
}
}
EDIT2:有可能,如果你调用eXosip_automatic_action太晚了,那么在你实际执行eXosip_automatic_action方法之前,事务就变成了 COMPLETED ?
这是我自己的代码的摘录,显示了何时必须调用该方法。
je = eXosip_event_wait (tv_s, tv_ms);
eXosip_lock ();
eXosip_automatic_action ();
-我是osip/exosip的作者-