0

電話での通話アクティビティ/状態の監視が必要な SIP アプリケーションでの作業。私のアプリ (UA) は、監視されている電話と同様に、プロキシ サーバーに登録されています。私は SUBSCRIBE/NOTIFY メッセージを利用して、「ダイアログ」イベントについて知りたいことを電話に伝えています。一度購読すると、これは正常に機能します。私は2つの問題に直面しています:

  1. 私は 900 秒のサブスクリプションの長さを要求していますが、電話から一貫して 4000 秒以上のばかげた量が返されます。

  2. サブスクリプションがアクティブな間、電話が取り外される可能性があります (質問しないでください。ただし、可能性はあります)。これが発生した場合、電話が使用できなくなったという通知はありません。したがって、サブスクリプションがタイムアウトするのを待ち、更新を試み、失敗を処理し、新しいサブスクリプションを作成する必要があります。

有効期限よりも早くサブスクリプションを更新できることはわかっていますが、より良い方法はありますか? たとえば、「プレゼンス」イベントを取得し、それらを使用して、電話がいつあるかどうかを知ることができますか? これらのイベントは、電話の起動時に常に発生することが保証されていますか?それでも、途中にプロキシがあるため、通知を受け取ることさえできますか?それとも、電話が再起動してサブスクリプションを認識しなくなったことをまだ知らないでしょうか? s)? これらの「プレゼンス」の更新は、プロキシから要求できるものですか?

どんな洞察も素晴らしいでしょう。今のところ、サブスクリプションをもっと短い間隔で更新してみるだけですが、もっと良い方法があるかどうか知りたいです. 前もって感謝します。

4

2 に答える 2

5

おそらくどういうわけか電話にpingする以外のSIPにとらわれない方法については知りませんが、プレゼンスを行うSIPの方法は間違いなくあり、それはダイアログに使用しているのと同じサブスクライブ/通知モデルを使用していますが、この場合はプレゼンスに使用しています。関連する標準は、RFC 3856 A Presence Event Package for the Session Initiation Protocol (SIP)です。

通常、プレゼンス通知は SIP レジストラによって生成されます。電話機がプロキシに登録されていると言うので、レジストラも組み込まれている必要があります。レジストラは、他の電話機の登録ステータスが最初に変更されたときなどに UA に通知します。オンラインになったとき、または再登録に失敗したとき。電話が「消失」してからレジストラ サーバーがそれを検出するまでの遅延に関しては、規定された方法はありません。登録期間が満了するのを待ち、登録に失敗した場合は電話をオフラインとしてマークするか、サーバーが積極的にパケットまたは OPTIONS 要求などの SIP 要求を電話に送信し、オフラインとしてマークすることができます。失敗応答を得た場合、アスタリスクは後者のアプローチを使用します。

于 2012-05-31T23:02:55.180 に答える