Соответствие запросов серверным транзакциям |
|
Когда из сети приходит запрос, сервер должен установить принадлежность запроса серверной транзакции. Это проводится следующим образом. Проверяется параметр «branch» первого заголовка Via. Если он присутствует, и его значение начинается с комбинации «z9hG4bK» (magic cookie), то запрос был отправлен серверной транзакцией, функционирующей по общим правилам протокола SIP v. 2 Следовательно, параметр «branch» уникален для каждой транзакции, в которой принимает участие клиент. Запрос соответствует транзакции, когда:
Это правило распространяется и на INVITE-транзакции, и на ne-INVITE-тран-закции. Сравнение значений имени хоста и номера порта в заголовках Via используется в процессе сопоставления в связи с возможностью возникновения случайного или злонамеренного дублирования параметра «branch»: запросы с одинаковым параметром могут придти от разных клиентов. Если в заголовке Via запроса параметр «branch» отсутствует или не начинается с «magic cookie», вышеописанные процедуры также выполняются; это делается для того, чтобы обеспечить согласование с более ранними рекомендациями. Запрос INVITE соответствует транзакции в случае, если его поле Request-URI, параметры «tag» в заголовках То и From, заголовки Call-ID, CSeq и первый заголовок Via идентичны аналогичным составляющим запроса INVITE, инициировавшего транзакцию. В этом случае имеет место повторная передача запроса INVITE. Запрос АСК соответствует транзакции, когда поле Request-URI, параметр «tag» заголовка From, заголовок Call-ID, порядковый номер в заголовке CSeq и первый заголовок Via идентичны аналогичным составляющим запроса INVITE, инициировавшего транзакцию, и параметр «tag» заголовка То совладает с параметром «tag» заголовка То в ответе, переданном серверной транзакцией. Добавление параметра «tag» заголовка То в процесс сопоставления помогает прокси-серверу отличить АСК, являющегося реакцией на ответ класса 2хх, от подтверждения АСК, являющегося реакцией на другие ответы. Для сообщений всех остальных типов, запрос соответствует транзакции когда его поле Request-URI, параметры «tag» в заголовках То и From, заголовки Call-ID, CSeq и первый заголовок Via идентичны аналогичным составляющим запроса, инициировавшего транзакцию. В этом случае имеет место повторная передача He-INVITE-запроса. |

