Из libosip2, файла osip_port.h, код возврата ошибки -2 означает неверный параметр:
#define OSIP_BADPARAMETER -2
Первая строка ответа выглядит примерно так: « SIP / 2.0 100 Trying ".
В вашем коде вы правильно настраиваете" SIP / 2.0"и" 100".Однако вы забыли причину фразы.Для " 100 ", очевидно, строка должна быть " Trying ".Таким образом, полная первая строка ответа должна быть сделана с помощью:
osip_message_set_version(response, osip_strdup("SIP/2.0"));
osip_message_set_status_code(response, 100);
//ADD THIS
osip_message_set_reason_phrase (answer, osip_strdup("Trying");
Выше будет исправлена первая ошибка, но, похоже, будет больше.Вы используете " osip_message_get_contact ", чтобы получить контакт из ответа.Но нет ни одного.Чтобы установить контакт, вам нужно найти ваш IP-адрес, номер порта и параметры, которые вы хотите добавить.Рекомендуется что-то вроде этого:
osip_message_set_contact (response, "<sip:192.168.1.10:5678;ob>");
Приведенный выше API проанализирует строку как заголовок контакта и добавит ее в ответ.
Чтобы сделать ее понятной (как вы ее использовали), " response-> req_uri " пуст для ответа.Это означает «Request-URI», который предназначен только для запроса.
Если вы хотите получить полный ответ, вам также необходимо скопировать все заголовки « Через »:
{
osip_list_iterator_t it;
osip_via_t *via = (osip_via_t *) osip_list_get_first (&request->vias, &it);
while (via != NULL) {
osip_via_t *via2;
i = osip_via_clone (via, &via2);
if (i != 0) {
osip_message_free (response);
return i;
}
osip_list_add (&response->vias, via2, -1);
via = (osip_via_t *) osip_list_get_next (&it);
}
}
ПРИМЕЧАНИЕ: используйте osip_strdup вместо strdup для любого выделения osip, чтобы сделать ваш код более переносимым.
osip_message_to_str должен работать тогда!
Для более точного кода, не стесняйтесь взглянутьу меня exosip2 код здесь .Это наверняка поможет вам в следующем вопросе, который у вас возникнет!