Сообщение UPDATE |
|
Часто возникают случаи, когда необходимо изменить некоторые параметры сеанса (например, кодеки) до прихода окончательного ответа на начальное сообщение INVITE. Например, предответное состояние (early media) - ситуация, когда сеанс устанавливается для передачи информации о текущем состоянии процесса обслуживания вызова до того, как на запрос INVITE сервером будет передан ответ. Важно, чтобы и вызывающая, и вызываемая стороны могли изменять параметры сеанса до того как поступит ответ на вызов. Запрос re-INVITE (INVITE, передаваемый входе сеанса) не может быть использован для этих целей, поскольку re-INVITE оказывает влияние не только на состояние сеанса, но и на состояние диалога. В противоположность ему, запрос UPDATE может быть передан агентом пользователя в режиме диалога (находящегося на ранней стадии или установленного) для обновления параметров сеанса без воздействия на состояние диалога.
Запрос UPDATE используется следующим образом. Вызывающая сторона создает начальную INVITE-транзакцию. В поле заголовка Allow запроса INVITE, среди прочих типов запроса, указывается UPDATE для того, чтобы указать на способность вызывающей стороны принимать запросы этого типа. INVITE-транзакция протекает надлежащим образом. Любой ответ (предварительный или окончательный) от вызываемой стороны также содержит заголовок Allow с указанным в нем значением UPDATE. После перехода в режим диалога (находящегося на ранней стадии или установленного) вызывающая сторона может создать запрос UPDATE, который содержит информацию offer (предложение с описанием сеанса связи в переносит информацию answer (ответ на предложение с указанием принятых параметров, также в формате SDP). Подобным образом, после установления диалога вызываемая сторона может передать запрос UPDATE с информацией offer, а вызывающая сторона - поместить в answer в ответ класса 2хх на UPDATE. Если UA получает окончательный ответ не-2хх на UPDATE, параметры сеанса должны оставаться неизменными. Запрос UPDATE с новой информацией offer не может быть передан (и, соответственно, не может быть принят) до тех пор, пока на информацию offer, переданную в начальном INVITE, ненадежном предварительном ответе, надежном предварительном ответе, запросе PRACK или предыдущем UPDATE не получена информация answer. Это действительно для случая, когда начальная INVITE-транзакция не завершена. Когда она заканчивает свое существование, то же относится к информации answer, передаваемой в ответ на информацию offer, содержащуюся в re-INVITE или в предыдущем UPDATE. UPDATE является запросом, обновляющим текущий адрес удаленного польователя (target refresh request).
INVITE(c offer 1) |

