Создание ответа протокола SIP

Характерное отличие SIP-ответов от запросов – это наличие строки состояния Status-Line, в состав которой входят версия протокола и код ответа (Status-Code) со связанной с ним текстовой расшифровкой (Reason-Phrase), разделённые пробелом. Символы возврата каретки (СR) и перевода строки (LF) могут использоваться только совместно в завершающей строку последовательности CRLF.

Версия протокола Пробел Код ответа Пробел Расшифровка ответа СRLF

Код ответа – это целое трёхзначное число, отражающее результат обработки запроса сервером. Расшифровка ответа (Reason-Phrase) дает краткое описанеи кода ответа и предназначена для визуального восприятия пользователем в отличие от кода ответа (Status-Code), который служит для оповещения технических устройств. К формулировке расшифровки ответа (Reason-Phrase) не предъявляется жестких требований.

Определено шесть типов ответов, несущих разную функциональную нагрузку. Тип ответа кодируется трехзначным числом. Самой важной является первая цифра, которая определяет класс ответа, остальные две цифры лишь дополняют первую. В некоторых случаях оборудование даже может не знать все коды ответов, но оно обязательно должно интерпретировать первую цифру ответа.

Все ответы делятся на две группы: информационные и финальные.

Информационные ответы кодируются трехзначным числом, начинающимся с единицы, 1хх и показывают, что запрос находится в стадии обработки. Информационные ответы показывают, что запрос находится в стадии обработки. Некоторые информационные ответы, например, 100 Trying, предназначены для установки на нуль таймеров, которые запускаются в оборудовании, передавшем запрос. Если к моменту срабатывания таймера ответ на запрос не получен, то считается, что этот запрос потерян и может (по усмотрению производителя) быть передан повторно. Один из распространенных ответов - 180 Ringing; по назначению он идентичен сигналу «Контроль посылки вызова» в ТфОП и означает, что вызываемый пользователь получает сигнал о входящем вызове.

Финальные ответы кодируются трехзначными числами, начинающимися с цифр 2, 3, 4, 5 и 6. Они означают завершение обработки запроса и содержат, когда это нужно, результат обработки запроса.

Ответы 2хх означают, что запрос был успешно обработан. В настоящее время из всех ответов типа 2хх определен лишь два - 200 ОК и 202 Accepted.

Значение ответа 200 ОК зависит от того, на какой запрос он отвечает:

- ответ 200 OK на запрос INVITE означает, что вызываемое оборудование согласно на участие в сеансе связи; в теле ответа указываются функциональные возможности этого оборудования;

- ответ 200 OK на запрос BYE означает завершение сеанса связи, в теле ответа никакой информации не содержится;

- ответ 200 OK на запрос CANCEL означает отмену поиска, в теле ответа никакой информации не содержится;

- ответ 200 OK на запрос REGISTER означает, что регистрация прошла успешно;

- ответ 200 OK на запрос OPTIONS служит для передачи сведений о функциональных возможностях оборудования, эти сведения содержатся в теле ответа.

Ответ 202 Accepted означает, что запрос был принят для обработки, но обработка еще не завершена.

Ответы 3хх информируют оборудование вызывающего пользователя о новом местоположении вызываемого пользователя или переносят другую информацию, которая может быть использована для нового вызова:

- в ответе 300 Multiple Choices указывается несколько SIP-адресов, по которым можно найти вызываемого пользователя, и вызывающему пользователю предлагается выбрать один из них;

- ответ 301 Moved Permanently означает, что вызываемый пользователь больше не находится по адресу, указанному в запросе, и направлять запросы нужно на адрес, указанный в поле Contact;

- ответ 302 Moved Temporary означает, что пользователь временно (промежуток времени может быть указан в поле Expires) находится по другому адресу, который указывается в поле Contact.

Ответы 4хх информируют о том, что в запросе обнаружена ошибка. После получения такого ответа пользователь не должен передавать тот же самый запрос без его модификации:

- ответ 400 Bad Request означает, что запрос не понят из-за наличия в нем синтаксических ошибок;

- ответ 401 Unauthorized означает, что запрос требует проведения процедуры аутентификации пользователя. Существуют разные варианты аутентификации, и в ответе может быть указано, какой из них использовать в данном случае;

- ответ 403 Forbidden означает, что сервер понял запрос, но отказался его обслуживать. Повторный запрос посылать не следует. Причины могут быть разными, например, запросы с этого адреса не обслуживаются и т.д.;

- ответ 485 Ambiguous означает, что адрес в запросе не определяет вызываемого пользователя однозначно;

- ответ 486 Busy Here означает, что вызываемый пользователь в настоящий момент не может принять входящий вызов по данному адресу. Ответ не исключает возможности связаться с пользователем по другому адресу или, к примеру, оставить сообщение в речевом почтовом ящике.

Ответы 5хх информируют о том, что запрос не может быть обработан из-за отказа сервера:

- ответ 500 Server Internal Error означает, что сервер не имеет возможности обслужить запрос из-за внутренней ошибки. Клиент может попытаться повторно послать запрос через некоторое время;

- ответ 501 Not Implemented означает, что в сервере не реализованы функции, необходимые для обслуживания этого запроса. Ответ передается, например в том случае, когда сервер не может распознать тип запроса;

- ответ 502 Bad Gateway информирует о том, что сервер, функционирующий в качестве шлюза или прокси-сервера, принял некорректный ответ от сервера, к которому он направил запрос;

- ответ 503 Service Unavailable говорит от том, что сервер не может в данный момент обслужить вызов вследствие перегрузки или проведения технического обслуживания.

Ответы 6хх информируют о том, что соединение с вызываемым пользователем установить невозможно:

- ответ 600 Busy Everywhere сообщает, что вызываемый пользователь занят и не может принять вызов в данный момент ни по одному из имеющихся у него адресов. Ответ может указывать время, подходящее для вызова пользователя;

- ответ 603 Decline означает, что вызываемый пользователь не может или не желает принять входящий вызов. В ответе может быть указано подходящее для вызова время;

- ответ 604 Does Not Exist Anywhere означает, что вызываемого пользователя не существует.

Пример ответа 200 ОК:

SIP/2.0 200 OK

Via: SIP/2.0/UDP kton.bell-tel.com

From: A. Bell <sip:a.g.bell@bell-tel.com>

To: <sip:watson@bell-tel.com>;

Call-ID: 3298420296@kton.bell-tel.com

Cseq: 1 INVITE

Content-Type: application/sdp

Content-Length:...

v=0

o=watson 4858949 4858949 IN IP4 192.1.2.3

t=3149329600 0

SIP=IN IP4 boston.bell-tel.com

m=audio 5004 RTP/AVP 0 3

a=rtpmap:0 PCMU/8000

a=rtpmap:3 GSM/8000

В ответе пользователя Watson на запрос Bell сообщается, что он может принимать аудиоинформацию на порт 5004, понимает кодеки PCMU, GSM. Поля From, To, Via, Call-ID взяты из запроса. Поле Cseq показывает, что это – ответ на INVITE с Cseq: 1.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: