В некоторых случаях eXosip_automatic_action не может работать. Это специально.
Вместо этого, для выбранного вами варианта использования вам нужно использовать такой код, когда вы получаете событие EXOSIP_CALL_MESSAGE_REQUESTFAILURE с отрицательным параметром "did":
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 l oop" .
eXosip_default_action должно выполнять автомат c отсутствует повторная попытка!
РЕДАКТИРОВАТЬ: извините, это также необходимо сделать для события 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);
}
}
РЕДАКТИРОВАТЬ2: Возможно, что если вы позвоните eXosip_automatic_action слишком поздно, затем транзакция преобразуется в ЗАВЕРШЕНО, прежде чем вы фактически задействуете метод eXosip_automatic_action ?
Это выдержка из моего собственного кода, показывающая WHEN метод должен быть вызван.
je = eXosip_event_wait (tv_s, tv_ms);
eXosip_lock ();
eXosip_automatic_action ();
-Я автор osip / exosip-