(57)【要約】【課題】メッセージを透過的に転送しない場合であっても、メッセージループを検出するメッセージ転送装置を提供する。【解決手段】宛先ＵＲＩと転送先ＵＲＩおよび転送先リクエストＵＲＩとを対応づけて記憶する転送情報テーブル１５３と、メッセージの種類と送信元ＵＲＩと転送先ＵＲＩと転送回数とを対応づけて記憶する転送回数テーブル１５４と、ＵＡから受信したメッセージに含まれる宛先ＵＲＩに対応する転送先ＵＲＩおよび転送先リクエストＵＲＩを取得する取得部１４１と、取得された転送先リクエストＵＲＩのＵＡにメッセージを転送する送信部１０２と、受信したメッセージの種類と受信したメッセージに含まれる送信元ＵＲＩと取得された転送先ＵＲＩとに対応する転送回数に１を加算する加算部１３２と、転送回数が所定の閾値より大きい場合に転送のループが発生していると判断する判断部１３１と、を備えた。【選択図】        図５
2009048528.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続された通信装置間で送受信されるメッセージを転送するメッセージ転送装置であって、
メッセージの宛先である通信装置を識別する宛先ＩＤと、メッセージを転送すべき通信装置を識別する転送先ＩＤとを対応づけた転送情報を記憶する転送情報記憶部と、
メッセージの種類と、メッセージの送信元である通信装置を識別する送信元ＩＤと、前記転送先ＩＤと、メッセージの転送回数とを対応づけて記憶する転送回数記憶部と、
前記送信元ＩＤと前記宛先ＩＤとを含むメッセージを通信装置から受信する受信部と、
受信したメッセージに含まれる前記宛先ＩＤに対応する前記転送先ＩＤを前記転送情報記憶部から取得する取得部と、
取得された前記転送先ＩＤの通信装置に受信したメッセージを転送する送信部と、
受信したメッセージの種類と、受信したメッセージに含まれる前記送信元ＩＤと、取得された前記転送先ＩＤとに対応する前記転送回数記憶部内の前記転送回数に１を加算する加算部と、
前記転送回数が予め定められた閾値より大きいか否かを判断し、大きい場合に転送のループが発生していると判断する判断部と、
を備えたことを特徴とするメッセージ転送装置。
【請求項２】
前記転送回数が前記閾値より大きい場合に、予め定められた照合用文字列を含むメッセージを生成する生成部をさらに備え、
前記送信部は、さらに、生成されたメッセージを、前記取得部によって取得された前記転送先ＩＤの通信装置に転送し、
前記判断部は、さらに、受信したメッセージに前記照合用文字列が含まれるか否かを判断し、含まれる場合に転送のループが発生していると判断すること、
を特徴とする請求項１に記載のメッセージ転送装置。
【請求項３】
前記生成部は、前記メッセージとして、前記文字列を含み、予め定められた処理を要求する要求メッセージを生成すること、
を特徴とする請求項２に記載のメッセージ転送装置。
【請求項４】
前記生成部は、前記メッセージとして、前記文字列を含み、予め定められた処理の要求に対する応答メッセージを生成すること、
を特徴とする請求項２に記載のメッセージ転送装置。
【請求項５】
前記送信部は、さらに、前記転送回数が前記閾値より大きい場合に、受信したメッセージの送信元である通信装置にエラーメッセージを送信すること、
を特徴とする請求項１に記載のメッセージ転送装置。
【請求項６】
確立した通信に関する情報であって、通信を確立した日時または通信を確立した順序を表す番号を含む通信情報を記憶する通信情報記憶部をさらに備え、
前記送信部は、受信したメッセージの送信元である通信装置との間で確立した通信のうち、前記通信情報に含まれる前記日時が最も古い通信、または前記通信情報に含まれる前記番号が最も小さい通信によって、前記エラーメッセージを送信すること、
を特徴とする請求項５に記載のメッセージ転送装置。
【請求項７】
前記受信部は、前記送信元ＩＤと前記宛先ＩＤと確立した通信を識別する通信ＩＤとを含むメッセージを通信装置から受信し、
前記通信ＩＤと、前記通信ＩＤの通信で転送するメッセージの前記送信元ＩＤと、前記通信ＩＤの通信で転送するメッセージの前記宛先ＩＤと、を対応づけた通信情報を記憶する通信情報記憶部と、
前記転送回数が前記閾値より大きい場合に、受信したメッセージに含まれる前記通信ＩＤに対応する前記宛先ＩＤを前記通信情報記憶部から取得し、取得した前記宛先ＩＤを含む前記転送情報を前記転送情報記憶部から削除する削除部と、をさらに備えたこと、
を特徴とする請求項１に記載のメッセージ転送装置。
【請求項８】
前記宛先ＩＤは、ＳＩＰ（Session Initiation Protocol）のリクエストメッセージに含まれるリクエストＵＲＩ（Uniform Resource Identifier）および前記リクエストメッセージのＴｏヘッダで指定されたＵＲＩのいずれかであり、
前記転送先ＩＤは、前記リクエストメッセージを転送すべき通信装置のＵＲＩであり、
前記送信元ＩＤは、前記リクエストメッセージのＦｒｏｍヘッダで指定されたＵＲＩであること、
を特徴とする請求項１に記載のメッセージ転送装置。
【請求項９】
前記転送情報記憶部は、前記宛先ＩＤと、複数の前記転送先ＩＤとを対応づけた前記転送情報を記憶し、
前記取得部は、受信したメッセージに含まれる前記宛先ＩＤに対応する複数の前記転送先ＩＤを前記転送情報記憶部から取得し、
前記送信部は、取得された前記転送先ＩＤの通信装置それぞれに対して受信したメッセージを転送し、
前記加算部は、取得された前記転送先ＩＤごとに、受信したメッセージの種類と、受信したメッセージに含まれる前記送信元ＩＤと、前記転送先ＩＤとに対応する前記転送回数記憶部内の前記転送回数に１を加算すること、
を特徴とする請求項１に記載のメッセージ転送装置。
【請求項１０】
ネットワークを介して接続された通信装置間で送受信されるメッセージを転送するメッセージ転送装置におけるループ検出方法であって、
前記メッセージ転送装置は、
メッセージの宛先である通信装置を識別する宛先ＩＤと、メッセージを転送すべき通信装置を識別する転送先ＩＤとを対応づけた転送情報を記憶する転送情報記憶部と、
メッセージの種類と、メッセージの送信元である通信装置を識別する送信元ＩＤと、前記転送先ＩＤと、メッセージの転送回数とを対応づけて記憶する転送回数記憶部と、を備え、
受信部によって、前記送信元ＩＤと前記宛先ＩＤとを含むメッセージを通信装置から受信する受信ステップと、
取得部によって、受信したメッセージに含まれる前記宛先ＩＤに対応する前記転送先ＩＤを前記転送情報記憶部から取得する取得ステップと、
送信部によって、取得された前記転送先ＩＤの通信装置に受信したメッセージを転送する送信ステップと、
加算部によって、受信したメッセージの種類と、受信したメッセージに含まれる前記送信元ＩＤと、取得された前記転送先ＩＤとに対応する前記転送回数記憶部内の前記転送回数に１を加算する加算ステップと、
判断部によって、前記転送回数が予め定められた閾値より大きいか否かを判断し、大きい場合に転送のループが発生していると判断する判断ステップと、
を備えたことを特徴とするループ検出方法。
【請求項１１】
ネットワークを介して接続された通信装置間で送受信されるメッセージを転送するコンピュータに実行させるループ検出プログラムであって、
前記コンピュータは、
メッセージの宛先である通信装置を識別する宛先ＩＤと、メッセージを転送すべき通信装置を識別する転送先ＩＤとを対応づけた転送情報を記憶する転送情報記憶部と、
メッセージの種類と、メッセージの送信元である通信装置を識別する送信元ＩＤと、前記転送先ＩＤと、メッセージの転送回数とを対応づけて記憶する転送回数記憶部と、を備え、
前記送信元ＩＤと前記宛先ＩＤとを含むメッセージを通信装置から受信する受信手順と、
受信したメッセージに含まれる前記宛先ＩＤに対応する前記転送先ＩＤを前記転送情報記憶部から取得する取得手順と、
取得された前記転送先ＩＤの通信装置に受信したメッセージを転送する送信手順と、
受信したメッセージの種類と、受信したメッセージに含まれる前記送信元ＩＤと、取得された前記転送先ＩＤとに対応する前記転送回数記憶部内の前記転送回数に１を加算する加算手順と、
前記転送回数が予め定められた閾値より大きいか否かを判断し、大きい場合に転送のループが発生していると判断する判断手順と、
を前記コンピュータに実行させるループ検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、受信したメッセージとは別の通信によって当該受信したメッセージを転送する装置、メッセージ転送時のループを検出する方法およびプログラムに関するものである。
【背景技術】
【０００２】
通信装置間に介在し通信を制御・中継するシグナリングプロトコルとしてＳＩＰ（Session Initiation Protocol）が広く知られている。ＳＩＰを用いた通信システムでは、一般に、端末装置であるＳＩＰ端末間の通信仲介サーバ装置としてＳＩＰプロキシが用いられる。ＳＩＰプロキシは、原則としてＳＩＰメッセージ内のヘッダやボディは変更せずに透過的にメッセージを転送する。
【０００３】
また、ＵＡＣ（User Agent Client）およびＵＡＳ（User Agent Server）の両方の機能を有するＢ２ＢＵＡ（Back to Back User Agent)と呼ばれるサーバ装置によって、ＳＩＰ端末間の通信を仲介する場合もある。Ｂ２ＢＵＡは、ＳＩＰプロキシでは実現できない機能を提供可能とするため、転送時にＳＩＰメッセージのヘッダ等の内容を自由に変更することができる。また、Ｂ２ＢＵＡでは、ＳＩＰメッセージを受信したダイアログと異なるダイアログを用いて受信したＳＩＰメッセージを転送する。
【０００４】
ＳＩＰメッセージを転送する場合、通信を仲介するサーバ装置の設定内容によっては、同じサーバ装置間で同一のＳＩＰメッセージを繰り返し転送するメッセージループが発生する場合がある。
【０００５】
ＳＩＰのメッセージループの検出・防御方法に関して、非特許文献１では、ＳＩＰメッセージのＭａｘ−Ｆｏｒｗａｒｄｓヘッダの値を減じることによりループを検出する技術が提案されている。この方法によれば、ヘッダを変更せずに透過的に転送するＳＩＰプロキシなどのサーバ装置間で発生するメッセージのループを検出することができる。
【０００６】
【非特許文献１】J. Rosenberg et al.、 "RFC 3261、 SIP: Session Initiation Protocol"、[online]、June 2002、 retrieved from the Internet: <URL: http://www.ietf.org/rfc/rfc3261.txt>
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、Ｂ２ＢＵＡなどのように、受信したＳＩＰメッセージを別のダイアログで転送し、転送時にヘッダの値を自由に変更可能なサーバ装置の場合、転送時にＭａｘ−Ｆｏｒｗａｒｄｓの値が初期化される可能性があるため、Ｍａｘ−Ｆｏｒｗａｒｄｓを用いてループを検出する方法を適用できないという問題があった。
【０００８】
なお、Ｍａｘ−Ｆｏｒｗａｒｄｓの値を初期化しないようにサーバ装置の機能を変更する方法も考えられるが、すべてのサーバ装置を変更する必要があるため実現は困難である。また、そもそもＭａｘ−Ｆｏｒｗａｒｄｓのデフォルト値は７０であるため、この値を減算して０に到達したことを検出する方法では、ループの検出に時間がかかるという問題があった。
【０００９】
本発明は、上記に鑑みてなされたものであって、メッセージを透過的に転送しない場合であっても、メッセージループを検出することができる装置、方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、ネットワークを介して接続された通信装置間で送受信されるメッセージを転送するメッセージ転送装置であって、メッセージの宛先である通信装置を識別する宛先ＩＤと、メッセージを転送すべき通信装置を識別する転送先ＩＤとを対応づけた転送情報を記憶する転送情報記憶部と、メッセージの種類と、メッセージの送信元である通信装置を識別する送信元ＩＤと、前記転送先ＩＤと、メッセージの転送回数とを対応づけて記憶する転送回数記憶部と、前記送信元ＩＤと前記宛先ＩＤとを含むメッセージを通信装置から受信する受信部と、受信したメッセージに含まれる前記宛先ＩＤに対応する前記転送先ＩＤを前記転送情報記憶部から取得する取得部と、取得された前記転送先ＩＤの通信装置に受信したメッセージを転送する送信部と、受信したメッセージの種類と、受信したメッセージに含まれる前記送信元ＩＤと、取得された前記転送先ＩＤとに対応する前記転送回数記憶部内の前記転送回数に１を加算する加算部と、前記転送回数が予め定められた閾値より大きいか否かを判断し、大きい場合に転送のループが発生していると判断する判断部と、を備えたことを特徴とする。
【００１１】
また、本発明は、上記装置を実行することができる方法およびプログラムである。
【発明の効果】
【００１２】
本発明によれば、メッセージを透過的に転送しない場合であっても、メッセージループを検出することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この発明にかかる装置、方法およびプログラムの最良な実施の形態を詳細に説明する。
【００１４】
（第１の実施の形態）
第１の実施の形態にかかるメッセージ転送装置は、Ｂ２ＢＵＡのように受信時に用いた通信（ダイアログ）と異なる通信（ダイアログ）でＳＩＰメッセージを転送する場合に、メッセージの種類、受信したメッセージのＦｒｏｍヘッダで指定されたＵＲＩ、および転送するメッセージのリクエストＵＲＩまたはＴｏヘッダで指定したＵＲＩによってＳＩＰメッセージを識別し、識別したＳＩＰメッセージごとに転送回数をカウントしてループを検出するものである。
【００１５】
図１は、第１の実施の形態にかかる通信システムのブロック図である。図１に示すように、第１の実施の形態にかかる通信システムは、複数のＵＡ（User Agent）１００ａ、１００ｂと、ＳＩＰプロキシ２００と、複数のメッセージ転送装置３００ａ、３００ｂ、３００ｃとを含んでいる。
【００１６】
ＵＡ１００ａ、１００ｂは、ＳＩＰのＵＡ機能を備えた端末装置である。なお、ＵＡ１００ａ、１００ｂは同一の構成を備えるため、以下では、単にＵＡ１００という場合がある。また、ＵＡ１００は２台に限られず、３台以上のＵＡ１００を備えるように構成してもよい。
【００１７】
ＳＩＰプロキシ２００は、通信仲介のためのプロトコルであるＳＩＰを用いて、ＵＡ１００間のＳＩＰメッセージを中継する中継装置である。また、ＳＩＰプロキシ２００は１台に限られず、２台以上のＳＩＰプロキシ２００を備えるように構成してもよい。
【００１８】
メッセージ転送装置３００ａ、３００ｂ、３００ｃは、Ｂ２ＢＵＡのように、ＳＩＰのＵＡＣおよびＵＡＳの両方の機能を備え、通信相手それぞれに対して確立したダイアログによってＳＩＰメッセージを転送するものである。メッセージ転送装置３００ａ、３００ｂ、および３００ｃは同様の機能を備えるため、以下では単にメッセージ転送装置３００という場合がある。また、メッセージ転送装置３００の個数は３つに限られるものではない。
【００１９】
メッセージ転送装置３００は、メッセージの宛先ごとに転送すべき転送先を対応づけた転送情報を記憶しており、転送情報を用いてメッセージの転送先を決定する。メッセージ転送装置３００の詳細な構成については後述する。
【００２０】
次に、第１の実施の形態にかかる通信装置によるＳＩＰメッセージの転送処理の概要について図２および図３を用いて説明する。図２は、正常にＳＩＰメッセージが転送される場合の転送処理の一例を示す図である。
【００２１】
図２では、ＵＡ１００ａからＵＡ１００ｂに対してＳＩＰリクエストメッセージを送信したときに、メッセージ転送装置３００ａ、３００ｂ、および３００ｃを介して当該ＳＩＰリクエストメッセージが転送される例を示している。
【００２２】
ＳＩＰリクエストメッセージが正常に転送された場合は、転送先のＵＡ１００ｂから複数のメッセージ転送装置３００を介してＵＡ１００ａに対して肯定応答メッセージまたはエラー応答メッセージが返される。
【００２３】
図３は、ＳＩＰメッセージの転送時にメッセージループが発生した場合の転送処理の一例を示す図である。図３では、メッセージ転送装置３００ｃの転送情報の設定が図２と異なるため、メッセージがＵＡ１００ｂに転送されずに、メッセージ転送装置３００ａに転送された場合の例を示している。このような場合、メッセージ転送装置３００ａ、３００ｂ、および３００ｃの間でメッセージループが発生する。
【００２４】
図４は、図３のようなメッセージループが発生する場合の転送処理の詳細なシーケンスを表す図である。なお、図４に示すように、ＵＡ１００ａは、ＳＩＰのＵＲＩとして「ua@example.com」が設定されているものとする。また、メッセージ転送装置３００ａ、３００ｂ、および３００ｃは、それぞれＳＩＰのＵＲＩとして、「s1@example.com」、「s2@example.com」、および「s3@example.com」が設定されているものとする。
【００２５】
また、メッセージ転送装置３００ａは、「a1@example.com」に対して送信されたメッセージを「a2@example.com」に転送することを示す転送情報を記憶しているものとする。同図でメッセージ転送装置３００ａの上部に記載した「（a1→a2）」は、このような転送情報を簡略化して表現したものである。メッセージ転送装置３００ｂおよび３００ｃについても、それぞれ「（a2→a3）」および「（a3→a1）」で表現される転送情報が設定されているものとする。
【００２６】
まず、ＵＡ１００ａが、Ｔｏヘッダに「a1@example.com」、Ｆｒｏｍヘッダに「ua@example.com」、およびリクエストＵＲＩに「s1@example.com」を指定したＳＵＢＳＣＲＩＢＥリクエストを送信したとする（ステップＳ４０１）。そして、このリクエストが、ＳＩＰプロキシ２００（図４では省略）によって、「a1@example.com」を管理するメッセージ転送装置３００ａに送信されたものとする。
【００２７】
この場合、メッセージ転送装置３００ａは、記憶された転送情報に従い、リクエストＵＲＩを「s2@example.com」に書き換え、Ｔｏヘッダを「a2@example.com」に書き換え、Ｆｒｏｍヘッダを「s1@example.com」に書き換えて、受信したＳＵＢＳＣＲＩＢＥリクエストを転送する（ステップＳ４０２）。このリクエストは、さらにＳＩＰプロキシ２００によって、「a2@example.com」を管理するメッセージ転送装置３００ｂに送信される。
【００２８】
メッセージ転送装置３００ｂは、記憶された転送情報に従い、リクエストＵＲＩを「s3@example.com」に書き換え、Ｔｏヘッダを「a3@example.com」に書き換え、Ｆｒｏｍヘッダを「s2@example.com」に書き換えて、受信したＳＵＢＳＣＲＩＢＥリクエストをさらに転送する（ステップＳ４０３）。このリクエストは、ＳＩＰプロキシ２００によって、「a3@example.com」を管理するメッセージ転送装置３００ｃに送信される。
【００２９】
同様に、メッセージ転送装置３００ｃは、記憶された転送情報に従い、リクエストＵＲＩを「s1@example.com」に書き換え、Ｔｏヘッダを「a1@example.com」に書き換え、Ｆｒｏｍヘッダを「s3@example.com」に書き換えて、受信したＳＵＢＳＣＲＩＢＥリクエストをさらに転送する（ステップＳ４０４）。このリクエストは、「s1@example.com」がリクエストＵＲＩとして指定されているため、再度、「a1@example.com」を管理するメッセージ転送装置３００ａに送信される。
【００３０】
以降、ステップＳ４０５、ステップＳ４０６、およびステップＳ４０７では、それぞれステップＳ４０２、ステップＳ４０３、およびステップＳ４０４と同様の処理が実行され、リクエストの転送が繰り返される。複数のメッセージ転送装置３００を介したメッセージの転送処理では、このようにしてメッセージループが発生する。
【００３１】
次に、メッセージ転送装置３００の詳細な構成について説明する。図５は、第１の実施の形態にかかるメッセージ転送装置３００の構成を示すブロック図である。図５に示すように、メッセージ転送装置３００は、記憶部１５０と、受信部１０１と、送信部１０２と、メッセージ処理部１１０と、ダイアログ管理部１２０と、ループ検出部１３０と、転送情報管理部１４０と、を備えている。
【００３２】
記憶部１５０は、メッセージの転送に関する各種データを記憶するものであり、ダイアログ情報テーブル１５１と、ダイアログ対応テーブル１５２と、転送情報テーブル１５３と、転送回数テーブル１５４とを格納している。なお、記憶部１５０は、ＨＤＤ（Hard Disk Drive）、光ディスク、メモリカード、ＲＡＭ（Random Access Memory）などの一般的に利用されているあらゆる記憶媒体により構成することができる。
【００３３】
ダイアログ情報テーブル１５１は、通信相手との間で確立したダイアログに関する情報（ダイアログ情報）を記憶するものである。図６は、ダイアログ情報テーブル１５１に記憶されたダイアログ情報のデータ構造の一例を示す図である。
【００３４】
図６に示すように、ダイアログ情報は、Ｃａｌｌ−ＩＤと、ローカルタグと、リモートタグと、ローカルＵＲＩと、リモートＵＲＩとを含んでいる。
【００３５】
Ｃａｌｌ−ＩＤ、ローカルタグ、およびリモートタグは、ダイアログを識別するためのダイアログＩＤを構成するものである。ローカルＵＲＩおよびリモートＵＲＩには、それぞれ受信したメッセージのＴｏヘッダおよびＦｒｏｍヘッダで指定されたＵＲＩが設定される。なお、メッセージ転送装置３００からダイアログを確立した場合は、ローカルＵＲＩおよびリモートＵＲＩには、それぞれ送信したメッセージのＦｒｏｍヘッダおよびＴｏヘッダで指定したＵＲＩが設定される。
【００３６】
また、同図で示した項目以外に、例えばダイアログで送信されるメッセージの順序制御に用いるシーケンス番号などもダイアログ情報に含むことができるが、同図では省略している。
【００３７】
図５に戻り、ダイアログ対応テーブル１５２は、転送するメッセージの送信元のＵＡ１００との間で確立したダイアログと、転送するメッセージの転送先のＵＡ１００との間で確立したダイアログとの間の対応情報を記憶するものである。図７は、ダイアログ対応テーブル１５２に記憶された対応情報のデータ構造の一例を示す図である。同図に示すように、対応情報は、メッセージ転送に関連する２つのダイアログのうち一方のダイアログのダイアログＩＤ１と、他方のダイアログのダイアログＩＤ２とを含んでいる。
【００３８】
ダイアログ対応テーブル１５２は、受信したメッセージを転送するダイアログを特定するために参照される。
【００３９】
図５に戻り、転送情報テーブル１５３は、受信したメッセージで指定された宛先を識別する宛先ＵＲＩから、受信したメッセージを転送すべき転送先を特定するための転送情報を記憶するものである。図８は、第１の実施の形態の転送情報テーブル１５３に記憶された転送情報のデータ構造の一例を示す図である。図８に示すように、転送情報は、受信したＳＩＰメッセージでＴｏヘッダに指定された宛先ＵＲＩと、当該宛先ＵＲＩが指定された場合に転送すべきＳＩＰメッセージのＴｏヘッダに指定するＵＲＩを表す転送先ＵＲＩとリクエストＵＲＩに指定するＵＲＩを表す転送先リクエストＵＲＩとを含んでいる。
【００４０】
このように、本実施の形態では、転送先ＵＲＩと転送先リクエストＵＲＩを用いる例について説明するが、受信したＳＩＰメッセージのＴｏヘッダに指定されたＵＲＩをそのまま転送するＳＩＰメッセージのＴｏヘッダに指定する場合は、転送先ＵＲＩを省略して構成してもよい。
【００４１】
転送情報テーブル１５３は、後述する取得部１４１が、受信したメッセージを転送すべき外部装置のＵＲＩを取得するときに参照される。なお、外部装置とは、ＵＡ１００を含む端末装置、他のメッセージ転送装置３００、およびＳＩＰプロキシ２００などの、ＳＩＰメッセージの送信元または転送先となりうるあらゆる装置をいう。
【００４２】
図５に戻り、転送回数テーブル１５４は、メッセージループを検出するための転送回数を記憶するものである。第１の実施の形態では、受信したＳＩＰメッセージのリクエストの種類と、受信したＳＩＰメッセージのＦｒｏｍヘッダで指定された送信元の外部装置のＵＲＩ（送信元ＵＲＩ）と、転送すべき外部装置のＵＲＩ（転送先ＵＲＩ）との組合せを表すループ検出情報ごとに、ＳＩＰメッセージの転送回数がカウントされて転送回数テーブル１５４に保存される。
【００４３】
図９は、転送回数テーブル１５４に記憶されたデータのデータ構造の一例を示す図である。同図に示すように、転送回数テーブル１５４には、リクエストの種類と、送信元ＵＲＩと、転送先ＵＲＩと、転送回数とが対応づけられて格納される。
【００４４】
リクエストの種類には、ＩＮＶＩＴＥ、ＳＵＢＳＣＲＩＢＥなどのＳＩＰで用いられるリクエストメッセージの種類を特定する情報が設定される。送信元ＵＲＩには、受信したＳＩＰメッセージのＦｒｏｍヘッダで指定されたＵＲＩが設定される。転送先ＵＲＩには、受信したＳＩＰメッセージで指定された宛先ＵＲＩに対して後述する取得部１４１によって取得された転送先ＵＲＩが設定される。
【００４５】
図５に戻り、受信部１０１は、外部装置からＳＩＰメッセージを受信するものである。送信部１０２は、外部装置に対してＳＩＰメッセージを送信するものである。
【００４６】
メッセージ処理部１１０は、受信したＳＩＰメッセージを転送するための各種処理を実行するものである。具体的には、メッセージ処理部１１０は、受信部１０１からＳＩＰメッセージを受け取り、受け取ったＳＩＰメッセージを転送するためにＳＩＰメッセージのヘッダを再構成する。また、メッセージ処理部１１０は、再構成したＳＩＰメッセージを、送信先の外部装置に転送するために送信部１０２に送出する。
【００４７】
ダイアログ管理部１２０は、通信相手との間で確立するダイアログに関する各種処理を実行するものである。ダイアログ管理部１２０は、ダイアログ保存部１２１と、ダイアログ切断部１２２とを備えている。
【００４８】
ダイアログ保存部１２１は、ダイアログに関する情報を記憶部１５０の関連するテーブルに保存するものである。具体的には、ダイアログ保存部１２１は、受信したＳＩＰリクエストメッセージのダイアログ情報と、ダイアログ情報テーブル１５１に保存されているダイアログ情報とを比較し、一致するダイアログ情報が存在しない場合に、受信したＳＩＰリクエストメッセージのダイアログ情報をダイアログ情報テーブル１５１に保存する。
【００４９】
また、ダイアログ保存部１２１は、受信したＳＩＰリクエストメッセージを転送するために確立したダイアログのダイアログ情報と、受信したＳＩＰメッセージのダイアログ情報とを対応づけた対応情報を作成してダイアログ対応テーブル１５２に保存する。
【００５０】
ダイアログ切断部１２２は、後述するループ検出部１３０によりループが検出された通信相手との間で確立しているダイアログを切断するものである。具体的には、ダイアログ切断部１２２は、ループが検出された通信相手との間で確立しているダイアログに関するダイアログ情報をダイアログ情報テーブル１５１から削除する。また、ダイアログ切断部１２２は、削除したダイアログ情報のダイアログＩＤを対応づけている対応情報を、ダイアログ対応テーブル１５２から削除する。
【００５１】
ループ検出部１３０は、転送回数テーブル１５４に記憶されているループ検出情報ごとの転送回数を参照して、メッセージループの発生を検出するものである。ループ検出部１３０は、判断部１３１と、加算部１３２とを備えている。
【００５２】
判断部１３１は、ループ検出情報ごとの転送回数が予め定められた閾値より大きいか否かを判断し、転送回数が閾値より大きい場合にメッセージループが発生していると判断する。加算部１３２は、ＳＩＰメッセージを転送したときに、ループ検出情報ごとの転送回数に１を加算して転送回数テーブル１５４を更新する。
【００５３】
なお、ループ検出部１３０は、転送したＳＩＰメッセージに対するエラー応答または肯定応答を受信した場合には、対応するループ検出情報に対する転送回数をリセットする機能を有する。
【００５４】
転送情報管理部１４０は、転送情報テーブル１５３に記憶された転送情報に関連する処理を実行するものであり、取得部１４１と、削除部１４２とを備えている。
【００５５】
取得部１４１は、受信したＳＩＰメッセージの宛先ＵＲＩに対応する転送先ＵＲＩを、受信したＳＩＰメッセージの転送先である外部装置のＵＲＩとして取得するものである。削除部１４２は、メッセージループが検出されたダイアログに関連する転送情報を、転送情報テーブル１５３から削除するものである。
【００５６】
次に、このように構成された第１の実施の形態にかかるメッセージ転送装置３００によるメッセージ転送処理について図１０を用いて説明する。図１０は、第１の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【００５７】
まず、受信部１０１が、いずれかの外部装置からＳＩＰメッセージを受信し（ステップＳ１００１）、メッセージ処理部１１０に対して受信したＳＩＰメッセージの処理を依頼する。メッセージ処理部１１０は、受信したＳＩＰメッセージがリクエストメッセージであるか、または応答メッセージであるかを判断する（ステップＳ１００２）。具体的には、メッセージ処理部１１０は、ＳＩＰメッセージの先頭にリクエスト行またはステータス行のいずれが記載されているかによって、ＳＩＰメッセージがリクエストメッセージであるか、または応答メッセージであるかを判断する。
【００５８】
受信したＳＩＰメッセージがリクエストメッセージであった場合（ステップＳ１００２：ＹＥＳ）、取得部１４１は、ＳＩＰメッセージで指定された宛先ＵＲＩに対応する転送先ＵＲＩおよび転送先リクエストＵＲＩを、転送情報テーブル１５３から取得する（ステップＳ１００３）。
【００５９】
次に、ループ検出部１３０の加算部１３２は、受信したＳＩＰメッセージのリクエストの種類、受信したＳＩＰメッセージのＦｒｏｍヘッダで指定された送信元ＵＲＩ、および取得された転送先ＵＲＩに対応する転送回数を、転送回数テーブル１５４から取得する（ステップＳ１００４）。そして、加算部１３２は、取得した転送回数に１を加算して転送回数テーブル１５４に保存する（ステップＳ１００５）。
【００６０】
なお、このように転送先ＵＲＩを取得した時点で転送回数を加算する代わりに、実際にＳＩＰメッセージを転送した時点で転送回数を加算するように構成してもよい。
【００６１】
次に、判断部１３１は、加算後の転送回数が、所定の閾値を超えたか否かを判断する（ステップＳ１００６）。転送回数が閾値を超えていない場合は（ステップＳ１００６：ＮＯ）、ダイアログ保存部１２１が、受信したＳＩＰメッセージのダイアログ情報をダイアログ情報テーブル１５１に保存する（ステップＳ１００７）。
【００６２】
次に、メッセージ処理部１１０は、送信部１０２によって、受信したＳＩＰメッセージを転送先ＵＲＩに対応する外部装置に対して転送する（ステップＳ１００８）。このとき、メッセージ処理部１１０は、Ｆｒｏｍヘッダ、Ｔｏヘッダ、およびリクエストＵＲＩを再構成したＳＩＰメッセージを転送する。具体的には、メッセージ処理部１１０は、Ｆｒｏｍヘッダにメッセージ転送装置３００のＵＲＩを指定し、ＴｏヘッダおよびリクエストＵＲＩに、それぞれステップＳ１００３で取得された転送先ＵＲＩおよび転送先リクエストＵＲＩを指定したＳＩＰメッセージを転送する。なお、送信部１０２は、ＳＩＰメッセージを受信したダイアログとは異なるダイアログによってＳＩＰメッセージを転送する。
【００６３】
ステップＳ１００６で、転送回数が閾値を超えた場合、すなわち、メッセージループが発生していると判断された場合は（ステップＳ１００６：ＹＥＳ）、転送情報管理部１４０の削除部１４２は、メッセージループが発生したダイアログに関連する転送情報を転送情報テーブル１５３から削除する（ステップＳ１００９）。
【００６４】
具体的には、削除部１４２は、受信したメッセージに含まれるダイアログＩＤに対応するローカルＵＲＩをダイアログ情報テーブル１５１から取得し、取得したローカルＵＲＩを宛先ＵＲＩとして含む転送情報を転送情報テーブル１５３から削除する。これにより、これ以降に受信した同じ宛先のＳＩＰメッセージを、ループが発生しうる転送先にさらに転送することを回避できる。
【００６５】
次に、ダイアログ管理部１２０のダイアログ切断部１２２は、メッセージループが発生したダイアログに関連するダイアログをすべて破棄する（ステップＳ１０１０）。
【００６６】
具体的には、ダイアログ切断部１２２は、メッセージループを検出したＳＩＰメッセージのダイアログと、ローカルＵＲＩおよびリモートＵＲＩが一致するダイアログのダイアログ情報をダイアログ情報テーブル１５１から削除する。また、ダイアログ切断部１２２は、ダイアログ情報テーブル１５１から削除したダイアログ情報を含む対応情報を、ダイアログ対応テーブル１５２から削除する。なお、ダイアログを破棄する際には、関連するトランザクションもすべて破棄される。
【００６７】
以上の処理により、受信時と異なるダイアログによってメッセージを転送する場合のように、メッセージを透過的に転送しない場合であっても、転送するメッセージを識別可能なループ検出情報を用いて、ループ検出情報ごとの転送回数を確認し、メッセージループの発生を検出することができる。
【００６８】
ステップＳ１００２で、受信したＳＩＰメッセージがリクエストメッセージでない、すなわち、応答メッセージであると判断された場合（ステップＳ１００２：ＮＯ）、メッセージ処理部１１０は、さらに、応答メッセージが肯定応答またはエラー応答を示すメッセージであるか否かを判断する（ステップＳ１０１１）。
【００６９】
具体的には、メッセージ処理部１１０は、応答メッセージ内の応答コードによって、応答メッセージが肯定応答またはエラー応答であるか否かを判断する。例えば、メッセージ処理部１１０は、応答コードが２００番台の場合に肯定応答であると判断する。また、メッセージ処理部１１０は、応答コードが３００番台以降の場合にエラー応答であると判断する。さらに、メッセージ処理部１１０は、応答コードが１００番台の場合に、メッセージを処理中であることを示す暫定応答であると判断する。
【００７０】
肯定応答またはエラー応答であった場合は（ステップＳ１０１１：ＹＥＳ）、ダイアログ管理部１２０は、応答メッセージ内のＣａｌｌ−ＩＤ、ローカルタグ、およびリモートタグに対応するダイアログ情報をダイアログ情報テーブル１５１から取得する（ステップＳ１０１２）。
【００７１】
次に、ループ検出部１３０は、応答メッセージに対応するループ検出情報を特定し、特定したループ検出情報に対応する転送回数を初期化する（ステップＳ１０１３）。具体的には、ループ検出部１３０は、まず、応答メッセージ内のＣＳｅｑヘッダを参照してリクエストの種類を特定する。また、ループ検出部１３０は、応答メッセージ内のダイアログＩＤに対応する転送元のダイアログＩＤをダイアログ対応テーブル１５２から取得し、取得した転送元のダイアログＩＤに対応するローカルＵＲＩおよびリモートＵＲＩをダイアログ情報テーブル１５１から取得する。次に、ループ検出部１３０は、取得したローカルＵＲＩに対応する転送先ＵＲＩを転送情報テーブル１５３から取得する。次に、ループ検出部１３０は、特定したリクエストの種類、取得したダイアログ情報のリモートＵＲＩ、および取得した転送先ＵＲＩが、それぞれリクエストの種類、送信元ＵＲＩ、および転送先ＵＲＩと一致する転送回数テーブル１５４内のループ検出情報を特定する。最後に、ループ検出部１３０は、特定したループ検出情報に対応する転送回数を０に初期化する。
【００７２】
ステップＳ１０１１で応答メッセージが肯定応答またはエラー応答でないと判断された場合は（ステップＳ１０１１：ＮＯ）、ダイアログ管理部１２０は、応答メッセージ内のＣａｌｌ−ＩＤ、ローカルタグ、およびリモートタグに対応するダイアログ情報をダイアログ情報テーブル１５１から取得する（ステップＳ１０１４）。
【００７３】
転送回数を初期化した後（ステップＳ１０１３）、またはダイアログ情報を取得した後（ステップＳ１０１４）、ダイアログ管理部１２０は、ステップＳ１０１２またはステップＳ１０１４で取得したダイアログ情報内のダイアログＩＤに対応する転送用のダイアログＩＤを、ダイアログ対応テーブル１５２から取得する（ステップＳ１０１５）。
【００７４】
次に、メッセージ処理部１１０は、送信部１０２によって、受信したＳＩＰメッセージを、取得したダイアログＩＤのダイアログを用いて転送する（ステップＳ１０１６）。
【００７５】
これまでは、リクエストの種類と、送信元ＵＲＩと、転送先ＵＲＩとの組み合わせであるループ検出情報を用いて転送するＳＩＰメッセージを識別し、転送回数をカウントする例について説明した。これに対し、受信したＳＩＰメッセージ内で指定された宛先ＵＲＩをさらにループ検出情報に含むように構成してもよい。
【００７６】
これにより、例えば、宛先ＵＲＩとしてＴｏヘッダで指定されたＵＲＩを利用する場合に、送信元および転送先が同じであっても、Ｔｏヘッダで指定されたＵＲＩが異なれば、異なるメッセージとして転送回数を別々にカウントすることができる。
【００７７】
このように、第１の実施の形態にかかるメッセージ転送装置によれば、リクエストの種類と、送信元ＵＲＩと、転送先ＵＲＩとで表現されるループ検出情報が同一であり、エラー応答または肯定応答が返されていないＳＩＰメッセージの転送回数をカウントし、転送回数が閾値を超えた場合に、ループを検出することができる。そして、検出されたループに対応する転送情報やダイアログ情報を破棄することができる。これにより、複数のダイアログに跨って発生するＳＩＰメッセージのループを検出・防御することが可能となる。
【００７８】
（第２の実施の形態）
第２の実施の形態にかかるメッセージ転送装置は、転送回数が閾値を超えた場合に、さらにループ確認用のメッセージを作成して転送先に送信し、当該メッセージを受信した場合に、ループが発生したと判断するものである。また、第２の実施の形態にかかるメッセージ転送装置は、ループを検出した場合に、ループに関連するダイアログのうち、最も古いダイアログを用いて、送信元の装置に対してループが発生したことを示すエラーメッセージを送信するものである。
【００７９】
図１１は、第２の実施の形態にかかるメッセージ転送装置１１００の構成を示すブロック図である。図１１に示すように、メッセージ転送装置１１００は、記憶部１５０と、受信部１０１と、送信部１０２と、メッセージ処理部１１１０と、ダイアログ管理部１２０と、ループ検出部１１３０と、転送情報管理部１４０と、を備えている。
【００８０】
第２の実施の形態では、メッセージ処理部１１１０およびループ検出部１１３０の機能が第１の実施の形態と異なっている。その他の構成および機能は、第１の実施の形態にかかるメッセージ転送装置３００の構成を表すブロック図である図５と同様であるので、同一符号を付し、ここでの説明は省略する。
【００８１】
メッセージ処理部１１１０は、ループが発生していると判断された場合に、ループに関連するダイアログのうち、最も過去に確立されたダイアログ（最古のダイアログ）を特定し、送信部１０２によって最古のダイアログを用いてエラーメッセージを通知する機能が追加された点が、第１の実施の形態のメッセージ処理部１１０と異なっている。なお、本実施の形態では、ダイアログ情報テーブル１５１に通信を確立した時刻を含むダイアログ情報が記憶されており、メッセージ処理部１１１０は、ダイアログ情報に含まれる通信確立の時刻を参照して、最古のダイアログを特定することができる。また、時刻の変わりに通信を確立した順序を表す番号を用いることもできる。
【００８２】
ループ検出部１１３０は、判断部１１３１と、加算部１３２と、生成部１１３３とを備えている。加算部１３２の構成および機能は、第１の実施の形態と同様であるので同一符号を付し、ここでの説明は省略する。
【００８３】
判断部１１３１は、ループ検出情報ごとの転送回数が予め定められた閾値より大きいと判断した後に、後述する生成部１１３３によって生成され送信されたループ確認メッセージ（後述）を受信した場合に、メッセージループが発生していると判断する。
【００８４】
生成部１１３３は、判断部１１３１によって転送回数が予め定められた閾値より大きいと判断された場合に、ループ確認メッセージを生成する。生成部１１３３は、予め定められたループ判定用の文字列をボディ部に含むリクエストメッセージをループ確認メッセージとして生成する。したがって、判断部１１３１は、受信したメッセージのボディ部にループ判定用の文字列が含まれるか否かを確認することによって、受信したメッセージがループ確認メッセージであるか否かを判断することができる。
【００８５】
なお、生成部１１３３は、ループ判定用の文字列をボディ部に含む応答メッセージをループ確認メッセージとして生成するように構成してもよい。また、リクエストメッセージであるループ確認メッセージを受信した場合に、生成部１１３３によってループ確認メッセージに対する応答メッセージを生成し、生成された応答メッセージを送信し、当該応答メッセージを受信した場合に、判断部１１３１によってループが発生したと判断するように構成してもよい。また、生成部１１３３は、ループ判定用の文字列をボディ部ではなくヘッダ部に含むループ確認メッセージを生成するように構成してもよい。
【００８６】
次に、このように構成された第２の実施の形態にかかるメッセージ転送装置１１００によるメッセージ転送処理について図１２を用いて説明する。図１２は、第２の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【００８７】
ステップＳ１２０１からステップＳ１２０２までの、メッセージ受信処理、リクエスト判定処理は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１００１からステップＳ１００２までと同様の処理なので、その説明を省略する。
【００８８】
受信したＳＩＰメッセージがリクエストメッセージであった場合（ステップＳ１２０２）、判断部１１３１は、受信したＳＩＰメッセージがループ確認メッセージであるか否かをさらに判断する（ステップＳ１２０３）。具体的には、判断部１１３１は、受信したＳＩＰメッセージのボディ部にループ判定用の文字列が含まれるか否かを判断し、含まれる場合に、ループ確認メッセージであると判断する。
【００８９】
ループ確認メッセージでない場合は（ステップＳ１２０３：ＮＯ）、転送回数を判定するために以下の処理を実行する（ステップＳ１２０４〜ステップＳ１２１１）。
【００９０】
ステップＳ１２０４からステップＳ１２０９までの、転送情報取得処理、転送回数判定処理、転送処理は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１００３からステップＳ１００８までと同様の処理なので、その説明を省略する。
【００９１】
ステップＳ１２０７で、転送回数が閾値を超えた場合は（ステップＳ１２０７：ＹＥＳ）、生成部１１３３がループ確認メッセージを生成する（ステップＳ１２１０）。そして、メッセージ処理部１１１０は、送信部１０２によって、生成されたループ確認メッセージを転送先ＵＲＩに対応する外部装置に対して転送する（ステップＳ１２１１）。
【００９２】
ステップＳ１２０３で、受信したＳＩＰメッセージがループ確認メッセージであると判断された場合は（ステップＳ１２０３：ＹＥＳ）、転送情報管理部１４０の削除部１４２は、メッセージループが発生したダイアログに関連する転送情報を転送情報テーブル１５３から削除する（ステップＳ１２１２）。
【００９３】
次に、ダイアログ管理部１２０のダイアログ切断部１２２は、メッセージループが発生したダイアログに関連するダイアログのうち、最古のダイアログを除くダイアログをすべて破棄する（ステップＳ１２１３）。
【００９４】
次に、メッセージ処理部１１１０は、最古のダイアログを用いて、ループが発生したことを示すエラーメッセージを、ループが発生したＳＩＰメッセージの送信元の外部装置に対して送信する（ステップＳ１２１４）。
【００９５】
ステップＳ１２１５からステップＳ１２２０までの、応答判定処理、転送回数初期化処理、転送処理は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１０１１からステップＳ１０１６までと同様の処理なので、その説明を省略する。
【００９６】
このように、第２の実施の形態にかかるメッセージ転送装置では、転送回数が閾値を超えた場合に、さらにループ確認用のメッセージを作成して転送先に送信し、当該メッセージを受信した場合に、ループが発生したと判断することができる。これにより、複数のダイアログに跨って発生するＳＩＰメッセージのループを正確に検出・防御することが可能となる。また、第２の実施の形態にかかるメッセージ転送装置では、ループを検出した場合に、最も古いダイアログを用いて、送信元の装置に対してエラーメッセージを送信することができる。これにより、ループの原因となるＳＩＰメッセージの送信者に対して、迅速にループが発生していることを通知することが可能となる。
【００９７】
（第３の実施の形態）
第３の実施の形態にかかるメッセージ転送装置は、受信したメッセージの転送先が複数指定されている場合であっても、転送先ごとに転送回数をカウントしてループを検出するものである。
【００９８】
図１３は、第３の実施の形態にかかるメッセージ転送装置１３００の構成を示すブロック図である。図１３に示すように、メッセージ転送装置１３００は、記憶部１３５０と、受信部１０１と、送信部１０２と、メッセージ処理部１３１０と、ダイアログ管理部１２０と、ループ検出部１３０と、転送情報管理部１３４０と、を備えている。
【００９９】
第３の実施の形態では、記憶部１３５０内の転送情報テーブル１３５３のデータ構造と、メッセージ処理部１３１０および転送情報管理部１３４０の機能とが第１の実施の形態と異なっている。その他の構成および機能は、第１の実施の形態にかかるメッセージ転送装置３００の構成を表すブロック図である図５と同様であるので、同一符号を付し、ここでの説明は省略する。
【０１００】
転送情報テーブル１３５３は、１つの宛先ＵＲＩに対して、複数の転送先ＵＲＩを指定可能である点が、第１の実施の形態の転送情報テーブル１５３と異なっている。図１４は、第３の実施の形態の転送情報テーブル１３５３に記憶された転送情報のデータ構造の一例を示す図である。図１４に示すように、第３の実施の形態では、１つの宛先ＵＲＩに対して、複数の転送先ＵＲＩが指定されうる。なお、以下では、このように複数の転送先ＵＲＩが指定された宛先ＵＲＩを、グループＵＲＩと呼ぶ場合がある。
【０１０１】
メッセージ処理部１３１０は、複数の転送先ＵＲＩが指定されている場合に、すべての転送先ＵＲＩから応答を受信したか否かを判断し、すべての転送先ＵＲＩから応答を受信した場合にのみ、応答を送信元の外部装置に送信する点が、第１の実施の形態のメッセージ処理部１１０と異なっている。
【０１０２】
転送情報管理部１３４０は、グループＵＲＩに対応する転送先ＵＲＩとして、複数の転送先ＵＲＩを取得することができる取得部１３４１を備えた点が、第１の実施の形態の転送情報管理部１４０と異なっている。
【０１０３】
次に、このように構成された第３の実施の形態にかかるメッセージ転送装置１３００によるメッセージ転送処理について図１５を用いて説明する。図１５は、第３の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【０１０４】
ステップＳ１５０１からステップＳ１５０２までの、メッセージ受信処理、リクエスト判定処理は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１００１からステップＳ１００２までと同様の処理なので、その説明を省略する。
【０１０５】
受信したＳＩＰメッセージがリクエストメッセージであった場合（ステップＳ１５０２：ＹＥＳ）、取得部１３４１は、ＳＩＰメッセージで指定された宛先ＵＲＩ（グループＵＲＩ）に対応するすべての転送先ＵＲＩを、転送情報テーブル１３５３から取得する（ステップＳ１５０３）。
【０１０６】
次に、取得した転送先ＵＲＩそれぞれについて、転送回数を判定するために以下の処理を実行する（ステップＳ１５０４〜ステップＳ１５１０）。
【０１０７】
ステップＳ１５０４からステップＳ１５１０までの、転送情報取得処理、転送回数判定処理、転送処理の内容自体は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１００４からステップＳ１０１０までと同様の処理なので、その説明を省略する。
【０１０８】
１つの転送先ＵＲＩについて上記処理を実行後、メッセージ処理部１３１０は、すべての転送先ＵＲＩを処理したか否かを判断し（ステップＳ１５１１）、処理していない場合は（ステップＳ１５１１：ＮＯ）、次の転送先ＵＲＩに対して処理を繰り返す。
【０１０９】
すべての転送先ＵＲＩを処理した場合は（ステップＳ１５１１：ＹＥＳ）、メッセージ転送処理を終了する。
【０１１０】
ステップＳ１５０２で、受信したＳＩＰメッセージがリクエストメッセージでない、すなわち、応答メッセージであると判断された場合（ステップＳ１５０２：ＮＯ）、転送回数の初期化またはメッセージの転送を行うために以下の処理を実行する（ステップＳ１５１２〜ステップＳ１５１８）。
【０１１１】
ステップＳ１５１２からステップＳ１５１５までの、応答判定処理、転送回数初期化処理、ダイアログ情報取得処理は、第１の実施の形態にかかるメッセージ転送装置３００におけるステップＳ１０１１からステップＳ１０１４までと同様の処理なので、その説明を省略する。
【０１１２】
転送回数を初期化した後（ステップＳ１５１４）、またはダイアログ情報を取得した後（ステップＳ１５１５）、メッセージ処理部１３１０は、すべての転送先ＵＲＩから応答を受信したか否かを判断する（ステップＳ１５１６）。なお、メッセージ処理部１３１０は、受信した応答メッセージの送信元のＵＲＩ、および応答メッセージの種類を記憶部１３５０に保存しておくことにより、すべての転送先ＵＲＩから応答を受信したか否かを判断する。
【０１１３】
すべての転送先ＵＲＩから応答を受信していない場合は（ステップＳ１５１６：ＮＯ）、受信した応答メッセージの送信元のＵＲＩおよび応答メッセージの種類を記憶部１３５０に保存してメッセージ転送処理を終了する。
【０１１４】
すべての転送先ＵＲＩから応答を受信した場合は（ステップＳ１５１６：ＹＥＳ）、ダイアログ管理部１２０は、ステップＳ１５１３またはステップＳ１５１５で取得したダイアログ情報内のダイアログＩＤに対応する転送用のダイアログＩＤを、ダイアログ対応テーブル１５２から取得する（ステップＳ１５１７）。
【０１１５】
次に、メッセージ処理部１３１０は、送信部１０２によって、受信したＳＩＰメッセージを、取得したダイアログＩＤのダイアログを用いて転送する（ステップＳ１５１８）。
【０１１６】
このように、第３の実施の形態にかかるメッセージ転送装置では、受信したメッセージの転送先が複数指定されている場合であっても、転送先ごとに転送回数をカウントしてループを検出することができる。
【０１１７】
次に、第１〜第３の実施の形態にかかるメッセージ転送装置のハードウェア構成について図１６を用いて説明する。図１６は、第１〜第３の実施の形態にかかるメッセージ転送装置のハードウェア構成を示す図である。
【０１１８】
第１〜第３の実施の形態にかかるメッセージ転送装置は、ＣＰＵ（Central Processing Unit）５１などの制御装置と、ＲＯＭ（Read Only Memory）５２やＲＡＭ５３などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５４と、ＨＤＤ（Hard Disk Drive）、ＣＤ（Compact Disc）ドライブ装置などの外部記憶装置と、ディスプレイ装置などの表示装置と、キーボードやマウスなどの入力装置と、各部を接続するバス６１を備えており、通常のコンピュータを利用したハードウェア構成となっている。
【０１１９】
第１〜第３の実施の形態にかかるメッセージ転送装置で実行されるループ検出プログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact Disk Recordable）、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１２０】
また、第１〜第３の実施の形態にかかるメッセージ転送装置で実行されるループ検出プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１〜第３の実施の形態にかかるメッセージ転送装置で実行されるループ検出プログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１２１】
また、第１〜第３の実施の形態のループ検出プログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【０１２２】
第１〜第３の実施の形態にかかるメッセージ転送装置で実行されるループ検出プログラムは、上述した各部（受信部、送信部、メッセージ処理部、ダイアログ管理部、ループ検出部、転送情報管理部）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ５１（プロセッサ）が上記記憶媒体からループ検出プログラムを読み出して実行することにより上記各部が主記憶装置上にロードされ、上述した各部が主記憶装置上に生成されるようになっている。
【産業上の利用可能性】
【０１２３】
以上のように、本発明にかかる装置、方法およびプログラムは、ＳＩＰのＢ２ＢＵＡのような転送時にメッセージのヘッダまたはボディを変更しうるサーバ装置に適している。
【図面の簡単な説明】
【０１２４】
【図１】第１の実施の形態にかかる通信システムのブロック図である。
【図２】正常にＳＩＰメッセージが転送される場合の転送処理の一例を示す図である。
【図３】メッセージループが発生した場合の転送処理の一例を示す図である。
【図４】メッセージループが発生する場合の転送処理のシーケンスを表す図である。
【図５】第１の実施の形態にかかるメッセージ転送装置の構成を示すブロック図である。
【図６】ダイアログ情報のデータ構造の一例を示す図である。
【図７】対応情報のデータ構造の一例を示す図である。
【図８】第１の実施の形態の転送情報のデータ構造の一例を示す図である。
【図９】転送回数テーブルに記憶されたデータのデータ構造の一例を示す図である。
【図１０】第１の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【図１１】第２の実施の形態にかかるメッセージ転送装置の構成を示すブロック図である。
【図１２】第２の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【図１３】第３の実施の形態にかかるメッセージ転送装置の構成を示すブロック図である。
【図１４】第３の実施の形態の転送情報のデータ構造の一例を示す図である。
【図１５】第３の実施の形態におけるメッセージ転送処理の全体の流れを示すフローチャートである。
【図１６】第１〜第３の実施の形態にかかるメッセージ転送装置のハードウェア構成を示す図である。
【符号の説明】
【０１２５】
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５４  通信Ｉ／Ｆ
６１  バス
１０１  受信部
１０２  送信部
１１０  メッセージ処理部
１２０  ダイアログ管理部
１２１  ダイアログ保存部
１２２  ダイアログ切断部
１３０  ループ検出部
１３１  判断部
１３２  加算部
１４０  転送情報管理部
１４１  取得部
１４２  削除部
１５０  記憶部
１５１  ダイアログ情報テーブル
１５２  ダイアログ対応テーブル
１５３  転送情報テーブル
１５４  転送回数テーブル
２００  ＳＩＰプロキシ
３００ａ、３００ｂ、３００ｃ  メッセージ転送装置
１１００  メッセージ転送装置
１１１０  メッセージ処理部
１１３０  ループ検出部
１１３１  判断部
１１３３  生成部
１３００  メッセージ転送装置
１３１０  メッセージ処理部
１３４０  転送情報管理部
１３４１  取得部
１３５０  記憶部
１３５３  転送情報テーブル
【図１】
2009048528.tif 000003
【図２】
2009048528.tif 000004
【図３】
2009048528.tif 000005
【図４】
2009048528.tif 000006
【図５】
2009048528.tif 000007
【図６】
2009048528.tif 000008
【図７】
2009048528.tif 000009
【図８】
2009048528.tif 000010
【図９】
2009048528.tif 000011
【図１０】
2009048528.tif 000012
【図１１】
2009048528.tif 000013
【図１２】
2009048528.tif 000014
【図１３】
2009048528.tif 000015
【図１４】
2009048528.tif 000016
【図１５】
2009048528.tif 000017
【図１６】
2009048528.tif 000018