メインコンテンツまでスキップ

15. セッションの終了 (Terminating a Session)

15 セッションの終了 (Terminating a Session)

このセクションでは, SIP によって確立されたセッションを終了する手順を説明します. セッションの状態とダイアログの状態は非常に関係が深いです. INVITE でセッションが開始されると, 異なる UAS からの各 1xx または 2xx 応答がダイアログを作成し, その応答がオファー/アンサー交換を完了した場合, セッションも作成します. その結果, 各セッションはそれを作成した 1 つのダイアログ, すなわち「関連付けられ」ます. 初期 INVITE が非 2xx 最終応答を生成した場合, その要求に対する応答を通じて作成されたすべてのセッション (存在する場合) およびすべてのダイアログ (存在する場合) を終了させます. トランザクションを完了させることにより, 非 2xx 最終応答は, INVITE に起因するそれ以上のセッションの作成も防ぎます. BYE 要求は, 特定のセッションまたは試行されたセッションを終了させるために使用されます. この場合, 特定のセッションはダイアログの反対側にあるピア UA とのセッションです. ダイアログで BYE を受信すると, そのダイアログに関連付けられたセッションは終了すべきです (SHOULD). UA はダイアログ外で BYE を送信してはなりません (MUST NOT). 発信者の UA は, 確認済みダイアログまたは早期ダイアログのいずれかに対して BYE を送信してもよく (MAY), 着信者の UA は確認済みダイアログに対して BYE を送信してもよい (MAY) ですが, 早期ダイアログに対して BYE を送信してはなりません (MUST NOT).

ただし, 着信者の UA は, 自身の 2xx 応答に対する ACK を受信するまで, またはサーバトランザクションがタイムアウトするまで, 確認済みダイアログで BYE を送信してはなりません (MUST NOT). SIP 拡張がダイアログに関連付けられた他のアプリケーション層の状態を定義していない場合, BYE はダイアログも終了させます.

INVITE に対する非 2xx 最終応答がダイアログとセッションに与える影響により, CANCEL の使用が魅力的になります. CANCEL は, INVITE に対する非 2xx 応答 (特に 487) を強制しようとします. したがって, UAC が呼の試行を完全にあきらめたい場合, CANCEL を送信できます. INVITE が INVITE に対する 2xx 最終応答をもたらした場合, これは UAS が CANCEL の進行中に招待を受諾したことを意味します. UAC は, いずれかの 2xx 応答によって確立されたセッションを続行してもよく (MAY), または BYE でそれらを終了してもよい (MAY) です.

  「電話を切る (hanging up)」という概念は SIP 内では明確に定義されていません. それは特定の (ただし一般的な) ユーザインターフェースに固有のものです. 通常, ユーザが電話を切ると, セッションの確立の試行と, すでに作成されたセッションを終了させたい意向を示します. 発信者の UA の場合, これは初期 INVITE がまだ最終応答を生成していない場合は CANCEL 要求を, 最終応答の後はすべての確認済みダイアログへの BYE を意味します. 着信者の UA の場合, 通常は BYE を意味します. おそらく, ユーザが電話を取ったときに 2xx が生成されたため, 電話を切ると ACK を受信した後に BYE が発生します. これは, ユーザが ACK を受信する前に電話を切れないことを意味するものではなく, 単に電話機内のソフトウェアが適切にクリーンアップするために短時間状態を維持する必要があることを意味します. 特定の UI がユーザによる応答前の着信拒否を許可する場合, 403 (Forbidden) はそれを表現する良い方法です. 上記の規則により, BYE を送信することはできません.

15.1 BYE 要求によるセッションの終了 (Terminating a Session with a BYE Request)

15.1.1 UAC の動作 (UAC Behavior)

BYE 要求は, セクション 12 で説明されているように, ダイアログ内の他の要求と同様に構築されます.

BYE が構築されると, UAC コアは新しい非 INVITE クライアントトランザクションを作成し, それに BYE 要求を渡します. UAC は, BYE 要求がクライアントトランザクションに渡された直後に, セッションが終了したとみなさなければならず (MUST) (したがってメディアの送信またはリスニングを停止します). BYE に対する応答が 481 (Call/Transaction Does Not Exist) または 408 (Request Timeout) であるか, BYE に対してまったく応答が受信されない場合 (つまり, クライアントトランザクションによってタイムアウトが返される場合), UAC はセッションおよびダイアログが終了したとみなさなければなりません (MUST).

15.1.2 UAS の動作 (UAS Behavior)

UAS は, まずセクション 8.2 で説明された一般的な UAS 処理に従って BYE 要求を処理します. BYE 要求を受信する UAS コアは, それが既存のダイアログと一致するかどうかを確認します. BYE が既存のダイアログと一致しない場合, UAS コアは 481 (Call/Transaction Does Not Exist) 応答を生成し (SHOULD), それをサーバトランザクションに渡すべきです (SHOULD).

  この規則は, UAC によってタグなしで送信された BYE が拒否されることを意味します. これは, タグなしの BYE を許可していた RFC 2543 からの変更です.

BYE 要求を既存のダイアログに対して受信する UAS コアは, 要求を処理するためにセクション 12.2.2 の手順に従わなければなりません (MUST). それが完了したら, UAS はセッションを終了すべきです (SHOULD) (したがってメディアの送信およびリスニングを停止します). 選択しない唯一のケースはマルチキャストセッションです. この場合, ダイアログ内の他の参加者がセッションへの参加を終了していても参加は可能です. セッションへの参加を終了するかどうかにかかわらず, UAS コアは BYE に対する 2xx 応答を生成しなければならず (MUST), それを送信のためにサーバトランザクションに渡さなければなりません (MUST).

UAS は, そのダイアログに対して受信された保留中の要求に依然として応答しなければなりません (MUST). それらの保留中の要求に対して 487 (Request Terminated) 応答を生成することが推奨されます (RECOMMENDED).