Действия UAC при создании запроса |
|
Запрос в состоянии диалога формируется с использованием большинства компонентов, описывающих состояние диалога. URI в заголовке То запроса устанавливается в соответствии с удаленным URI диалога, параметр «tag» в заголовке То - по удаленной метке идентификатора диалога. URI в заголовке From запроса устанавливается в соответствии с локальным URI состояния диалога, параметр «tag» в заголовке From - по локальной метке идентификатора диалога. Если удаленная или локальная метка имеет нулевое значение, параметр «tag» должен быть исключен из состава заголовка То или From, соответственно. Заголовок Call-ID запроса должен быть составлен в соответствии с Call-ID диалога. Запросы в режиме диалога имеют монотонно возрастающие порядковые номера (пошагово увеличивающиеся на единицу), которые содержатся в поле заголовка Cseq, исключая запросы АСК и CANCEL, чьи номера совпадают с номерами подтверждаемого или отменяемого запроса. Таким образом, если локальный порядковый номер присутствует, его значение увеличивается на единицу, и результат этой операции помещается в заголовок CSeq создаваемого запроса. Если же локальный порядковый номер отсутствует, то выбирается начальный порядковый номер. Содержимое поля типа запроса в заголовке CSeq должно соответствовать типу запроса. Верхняя граница порядкового номера - 232, этого хватит на то, чтобы на протяжении 136 лет клиент в рамках одного сеанса генерировал запросы со скоростью один запрос в секунду. Начальный порядковый номер выбирается таким образом, чтобы порядковые номера следующих запросов текущего сеанса не перекрылись с данным. Ненулевое начальное значение порядкового номера дает возможность клиенту привязать его к текущему времени. Например, клиент может выбрать в качестве начального порядкового номера значение, отражающее 31 наибоее значимых битов 32-битового секундного счетчика времени. UAC использует remote target и route set для формирования поля Request-URI и заголовка Route запроса. В случае отсутствия конфигурации маршрута UAC копирует remote target в поле Request-URI, заголовок Route не добавляется. Если же конфигурация маршрута содержит список URI, и первый из них содержит параметр «Ir», UAC также помещает значение remote target в поле Request-URI и включает в состав запроса заголовок Route, содержащий конфигурацию маршрута в прямом порядке и со всеми параметрами. Когда конфигурация маршрута содержит список URI, и первый из них не имеет параметра «Ir», UAC помещает первый URI маршрута в поле Request-URI, исключая любые запрещенные для этого поля параметры. Клиент должен добавить заголовок Route, содержащий оставшуюся часть маршрута. Далее значение remote target копируется в заголовок Route в качестве последнего значения.
Например, если значение remote target - sip:user@remoteua, и route set содержит: UAC должен включить заголовок Contact в состав любого запроса, обновляющего текущий адрес удаленного пользователя в режиме диалога, и в случае необходимости изменить значение remote target - таким образом UA может изменить контактный адрес в ходе диалога. В случае, когда флаг «secure» установлен в состояние «TRUE», адрес должен быть SIPS URI. Как только сформирован запрос, определяется адрес сервера и происходит передача запроса с использованием тех же процедур, что и при работе вне диалога. Итогом выполнения этих процедур обычно является передача запроса на адрес, обозначенный первым в заголовке Route или на адрес, указанный в поле Request-URI, если заголовок Route отсутствует. |

