Серверная INVITE-транзакция |
|
Когда приходит запрос, клиентская транзакция создается и переходит в состояние «Proceeding». Серверная транзакция должна передать ответ с кодом 100 (Trying), если не обладает сведениями о том, что TU сформирует предварительный или окончательный ответ в течение 200 мс. Этот предварительный ответ нужен для того, чтобы быстро прекратить повторную передачу запросов и, тем самым, предотвратить перегрузки сети. Полученный запрос должен быть передан TU. TU может передать серверной транзакции любое число предварительных ответов. Пока серверная транзакция находится в состоянии «Proceeding», она должна направлять все эти ответы на транспортный уровень SIP. Т.о., серверная транзакция не занимается повторной передачей предварительных ответов, они передаются ненадежно без ее участия. Поэтому их передача не вызывает изменения состояния серверной транзакции. Если приходит повторный запрос, серверная транзакция направляет на транспортный уровень SIP последний полученный от TU предварительный ответ. Запрос расценивается как повторно переданный, если выполняются условия его соответствия серверной транзакции, которые будут приведены ниже. В случае, когда TU в состоянии «Proceeding» передает серверной транзакции ответ класса 2хх, серверная транзакция должна, опять же, отправить его на транспортный уровень SIP для передачи по сети. Серверная транзакция не занимается повторной передачей ответов 2хх, это - прерогатива TU. После этого серверная транзакция переходит в состояние «Terminated». При получении от TU ответа с кодом 300 - 699 серверная транзакция передает его транспортному уровню SIP и переходит в состояние «Completed». При использовании ненадежного транспорта запускается таймер G со значением Т1. После того как серверная транзакция перешла в состояние «Completed», запускается таймер Н со значением 64 Т1 для любого транспорта. Таймер Н определяет, когда серверная транзакция должна прекратить повторную передачу ответов. Его значение выбирается равным значению таймера В, определяющего время, в течение которого клиентская транзакция будет повторно передавать запросы. Если срабатывает таймер G, ответ отправляется к транспортному уровню SIP для повторной передачи, а таймер G принимает новое значение MIN (2T1, Т2). При очередном срабатывании таймера следуют аналогичные действия, и знаение таймера G удваивается; это происходит до тех пор, пока оно не достигает Т2; после этого значение таймера всегда остается равным Т2. Кроме того, если в состоянии «Completed» приходит повторный запрос, серверу следует отправить ответ на транспортный уровень SIP для передачи. Когда приходит запрос АСК, серверная транзакция должна перейти в состояние «Confirmed». Поскольку в этом состоянии таймер G игнорируется, повторение передачи будет прекращено. Срабатывание таймера Нв состоянии «Completed» говорит о том, что запрос АСК не был получен; серверная транзакция переходит в состояние «Terminated» и информирует TU об ошибке транзакции. Назначение состояния «Confirmed» - принимать дополнительные запросы АСК, являющиеся реакцией на повторно переданные окончательные ответы. Как только это состояние наступает, таймер I запускается со значением Т4 для случая с ненадежным транспортным протоколом и со значением 0 для случая с надежным транспортом. При срабатывании таймера I серверная транзакция переходит в состояние «Terminated». В состоянии «Terminated» серверная транзакция немедленно разрушается. Как и при клиентских транзакциях, это нужно для того, чтобы обеспечить надежность передачи ответов класса 2хх на запрос INVITE. |

