Действия UAC |
|
Механизм offer/answer, используемый для обмена информацией описания сеанса при работе с запросом INVITE, применяется и для запроса re-INVITE. UAC, который, к примеру, хочет создать новый медиапоток, формирует новое предложение offer, описывающее параметры этого медиапотока, и передает его в сообщении INVITE другому участнику сеанса. Важно заметить, что передается полное описание сеанса, а не его изменение. Конечно, UAC может передать re-INVITE без описания сеанса; в этом случае первый надежный ответ на re-INVITE, не информирующий об ошибке (класса 2хх), будет содержать offer. Если формат описания сеанса предусматривает возможность нумерации версий - присвоения порядкового номера SDP-описанию, предложенному в ходе сеанса, - инициатор модификации должен указать, что версия описания сеанса изменилась. Заголовки То, From, Call-ID, CSeq, и поле Request-URI формируются в соответствии с правилами для запросов в рамках существующего диалога. UAC может решить не добавлять в запрос re-INVITE заголовок Alert-Info или тело сообщения со значением alert в заголовке Content-Disposition, поскольку UAS обычно не извещает пользователя о получении re-INVITE. В отличие от INVITE, re-INVITE не может быть размножен при прохождении по сети и, следовательно, на него всегда приходит один окончательный ответ. Причиной является то, что поле Request-URI идентифицирует текущий адрес вызываемого пользователя, а не его списочный адрес. Заметим, что UAC не должен инициировать новую INVITE-транзакцию в диалоге, пока протекает другая INVITE-транзакция в любом из двух направлении, а именно:
Однако во время выполнения INVITE-транзакции UA может инициировать транзакцию для запроса любого типа, кроме INVITE, ACK и CANCEL. И, наоборот, UA также может инициировать INVITE-транзакцию во время действия транзакции запросов любого типа, кроме INVITE, ACK и CANCEL. Если UA получает на запрос re-INVITE окончательный ответ, отличный от класса 2хх, параметры сеанса останутся неизменными, как будто запрос re-INVITE не передавался. Если полученный ответ является 481 (Call/Transaction Does Not Exist) или 408 (Request Timeout) или если ответа на re-INVITE не получено (то есть от клиентской транзакции пришло уведомление о срабатывании таймера), UAC завершит диалог. Если UAC на запрос re-INVITE получает ответ с кодом 491, он должен запустить таймер со значением Т, выбранным в соответствии с нижеописанным.
Когда таймер сработает, UAC должен предпринять еще одну попытку передать re-INVITE, если до этих пор сохранилась необходимость модификации сеанса. Например, в случае, если произошло завершение сеанса связи, сопровождающееся передачей сообщения BYE, re-INVITE не будет передан. Правила для передачи запроса re-INVITE и для создания подтверждения АСК ответа 2хх на re-INVITE те же, что для начального INVITE. |

