ヘッダーをスキップ
Oracle Communication and Mobility Server開発者ガイド
リリース10.1.3
E05480-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

A Oracle Diameter Java API

この付録では、Oracle Diameter Java APIについて説明します。内容は次のとおりです。

図A-1 Oracle Diameterのアーキテクチャ

この図は、Oracle Diameterのアーキテクチャを表しています。
「図A-1 Oracle Diameterのアーキテクチャ」の説明

基本プロトコル・ライブラリは、図の主要要素です。基本プロトコルの実装が含まれ、スタンドアロンC++共有ライブラリとして使用できます。上部の、Diameter基本プロトコル・ライブラリは、アプリケーション登録メカニズムを提供します。特定のアプリケーションのサブクラスAcctApplicationは、アプリケーションの実装に必要なステート・マシンに応じて、ユーザーが派生させることができます。各アプリケーション・オブジェクトは、独自のセッション・サブクラスを実装できます。特定のセッション・サブクラス(AuthSessionとAcctSession)は、アプリケーションによって実装されたステート・マシン(認証、承認またはアカウンティング)に応じて、ユーザーが派生させることができます。下部のDiameter基本プロトコル・ライブラリは、トランスポート・モジュールと対話するAPIを提供します。このAPIでは、ユーザー・アプリケーションがTransportクラスの任意のサブクラスをインスタンス化できます。これらのサブクラスは、システム依存にすることができ、Diameterにあらゆる種類のトランスポート・プロトコルを提供できます。Diameterには、UNIXのような環境でのTCPおよびSCTPカーネル実装用のソケット・ベースのトランスポート・モジュールが付属しています。Diameterの基本プロトコル・ライブラリは、ダイレクトCoreインタフェースも提供します。このAPIは、動的なレルムベースのルーティング表構成、汎用トレースおよびロギング・コールバック、外部メモリー・マネージャのサポート、動的ディクショナリ拡張を含む、すべての構成ニーズをサポートします。

Diameter Java基本プロトコルAPI

Diameter Java APIは、JAIN準拠のAPIです。JAINイニシアチブは、オープンな標準化ベースのネットワークに独自の通信ネットワークを移行するために、必要なJavaインタフェースをコアJavaプラットフォームの拡張として定義する通信分野のエキスパートのコミュニティです。Diameter Java APIはDiameter C++ APIを包含します。

この項では、Diameter基本プロトコル用のJava APIを定義します。Java開発者は、ここで説明するJavaインタフェースとクラスを使用して、Diameter基本プロトコルに基づくアプリケーションを作成できます。このJava APIは、複数の実装を提供可能なように設計されました。次の項では、その1つであるRf Diameterアプリケーションを定義し、詳しく説明します。

図A-2 Oracle Diameter Java APIのアーキテクチャ

Oracle Diameter Java APIのアーキテクチャ
「図A-2 Oracle Diameter Java APIのアーキテクチャ」の説明

Diameterのインタフェースを通して、ファクトリからDiameterプロトコル・スタック・プロバイダが取得され、その後、Diameterスタックによって作成されたプロバイダにDiameterリスナーが追加されます。

基本プロトコルDiameter Javaインタフェース

Diameter Java APIは、いくつかのインタフェースで構成されています。

Diameterファクトリ

DiameterFactoryインタフェースは、Diameter Java APIで定義されたすべてのインタフェースの異なる実装の特定インスタンスを取得するために、Diameterアプリケーションが使用します。DiameterFactoryの唯一のインスタンスは、getInstance()メソッドを使用して取得できます。

Diameterスタック

DiameterStackインタフェースは、[RFC 3588]で定義されたDiameterプロトコル・スタックを表します。このインタフェースは、プロバイダ、ルートおよびリスニング・ポイントの作成にも使用されます。Diameterスタックは、メッセージを交換する前に初期化し、構成する必要があります(セクション[6.2]を参照)。

Diameterアプリケーション

DiameterProviderインタフェースは、Diameter基本プロトコルの上で動作するDiameterアプリケーション(1つの承認/認証アプリケーションIDまたは1つのアカウンティング・アプリケーションIDを持つ)を表します。DiameterListenerインタフェースは、DiameterProviderインタフェースを実装するオブジェクトによってトリガーされるイベントを処理します。1つのプロバイダには1つのリスナーのみ存在します。このインタフェースは、アプリケーション・プログラマが実装する必要があります。

Diameterトランスポート

DiameterRouteインタフェースは、レルムベースのルーティング表のルート・エントリを表します。Diameterクライアント・アプリケーションは、createDiameterRouteメソッドをコールして、リモート・ピアを宣言します。DiameterListeningPointインタフェースは、Diameterスタックのローカル・トランスポート・アドレスを表し、宣言されたリモート・ピアからの着信接続を受け入れられるようにします。

Diameter AVP

DiameterMessageFactoryインタフェースは、Diameterアプリケーションがこの仕様の特定の実装用にAVPとメソッドを作成するためのファクトリ・メソッドを提供します。AVPは、次のクラス・タイプによって定義されます。

  • DiameterFloat32AVP: 32ビット浮動AVP

  • DiameterFloat64AVP: 64ビット浮動AVP

  • DiameterInteger32AVP: 32ビット整数AVP

  • DiameterInteger64AVP: 64ビット整数AVP

  • DiameterGroupedAVP: グループ化されたAVP

  • DiameterOctetStringAVP: 値がロー・バイト配列のAVP

  • DiameterGenericAVP: プロトコル・ディクショナリで宣言されていないAVP

DiameterMessageインタフェースは、[RFC 3588]で定義されたDiameterメッセージを表します。Diameterメッセージは、add()メソッドをコールして追加されるAVPから構成されます。

Diameterセッション

DiameterSessionインタフェースは、[RFC 3588]で定義されたDiameterセッションを表します。Diameterアプリケーションは、新しいDiameterセッションのリクエストを送信する必要がある場合、DiameterProviderインタフェースからcreateClientDiameterSessionメソッドをコールします。その後、sendMessageメソッドをコールして、リクエストを送信できます。また、着信リクエストは、createServerDiameterSessionをコールして、新しいサーバー・セッションを作成し、sendMessageを使用してレスポンスを送信して処理できます。

Diameterイベント

DiameterEventインタフェースは、すべてのDiameterイベントのベース・クラスです。このインタフェースには、次の特別なイベントがあります。

  • DiameterMessageEvent: このイベントは、着信メッセージを使用できるときに生成されます。

  • DiameterRealmStateChangeEvent: このイベントは、ピアの起動または停止により、リモート・レルムにアクセス可能かどうかをアプリケーションに通知します。

  • DiameterSessionEvent: 受信メッセージ、セッション・タイムアウト、セッション・エラーなどのDiameterセッションに関連するすべてのイベントを表します。

Diameterスタックは、Diameter Eventクラスのインスタンスを作成し、これらのインスタンスをDiameterListener.processEventメソッドに渡すことで、ユーザー・アプリケーションに情報を届けます。

Diameter例外

DiameterExceptionインタフェースは、すべてのDiameter例外のベース・クラスです。このインタフェースには、次の特別な例外があります。

  • DiameterInvalidArgumentException: この例外は、メソッドが無効なパラメータ値を受信するとスローされます。

  • DiameterInvalidMessageException: この例外は、Diameterメッセージがエンコードできない場合にスローされます。

  • DiameterMessageException: この例外は、メッセージの送信中に障害が発生した場合にスローされます。

  • DiameterTransportFailureException: この例外は、APIアクション中に同期トランスポート障害が発生した場合にスローされます。

  • DiameterUnsupportedFeatureException: この例外は、この実装でサポートされていない操作が起動された場合に、実装によってスローされます。

3GPP/Rf Diameter Java API

この項では、Diameterプロトコルを介して3GPP [TS 32.299] Rfインタフェース用のJava APIを定義します(指定順に[TS 32.225]、[TS 32.200]および[TS 32.240])。

3GPP/Rf Diameter Javaインタフェース

この項では、Javaインタフェースについて説明します。

Rf Provider

DiameterRfProviderインタフェースは、3GPPインタフェースで定義されたRf Diameterアプリケーションを表します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.createDiameterRfProvider(Properties, refFSM)をコールして取得できます。refFSMの値は次のとおりです。

  • RFC_SRV_LESS: Rfc 3588ステートレス・サーバー・ステート・マシン用

  • RFC_SRV_FULL: Rfc 3588ステートフル・サーバー・ステート・マシン用

  • RFC_CL: Rfc 3588クライアント・ステート・マシン用

Propertiesパラメータでは、このRfプロバイダで処理される機能を指定します。これはプロパティのリストで、多数のオプションが含まれる場合があります。Rfアプリケーション・オプションの詳細は、セクション[3.2.6]を参照してください。

Rfリスナー

DiameterRfListenerインタフェースは、DiameterRfProviderインタフェースを実装するDiameterRfProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterRfListenerインスタンスは、メソッドDiameterRfProvider. setDiameterRfListener ()によってプロバイダに登録されます。このインタフェースは2つの主要メソッド、accountingRequestReceived()とaccountingAnswerReceived()を提供します。最初のメソッドは、オプションAUTO_ANSWERをfalseに設定した場合に実装し、コールする必要があります。この場合、サーバーは受信したアカウンティング・リクエストに対応するアカウンティング・アンサーを作成できる必要があります。2番目のメソッドは、受信したアカウンティング・アンサーを処理します。

Rfメッセージ・ファクトリ

DiameterRfMessageFactoryインタフェースは、アプリケーションが3GPPで定義されたDiameter Rfメッセージを作成できるファクトリ・メソッド、createAccountingRequest()とcreateAccountingAnswer()を提供します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.getRfDiameterMessageFactory()メソッドをコールして取得できます。このファクトリによって作成されるメッセージは次のとおりです。

  • Accounting-Request (ACR): 次に示す最初のメソッドは、基本的なACR(必須AVPのみを備えた)を作成し、2番目のメソッドは、3GPPで定義された頻繁に使用されるAVPを備えた高度なACRを作成します。

    • Diameterメッセージ

      createAccountingRequest (String Destination-Realm,
                               int Accounting-Record-Type,
                               int Accounting-Record-Number)
      
    • Diameterメッセージ

      createAccountingRequest(String Destination-Realm,
                               int Accounting-Record-Type,
                               int Accounting-Record-Number,
                               String roleOfNode,
                               String userSessionId,
                               String callingPartyAddress,
                               String calledPartyAddress)
      
  • Accounting-Answer (ACA): 次に示す最初のメソッドは、基本的なACA(必須AVPのみを備えた)を作成し、2番目のメソッドは、3GPPで定義された頻繁に使用されるAVPを備えた高度なACAを作成します。

    • Diameterメッセージ

      • createAccountingAnswer (String Result-Code,
                                 int Accounting-Record-Type,
                                 int Accounting-Record-Number)
        
    • Diameterメッセージ

      • createAccountingAnswer (String Result-Code,
                                 int Accounting-Record-Type,
                                 int Accounting-Record-Number,
                                 String roleOfNode,
                                 String userSessionId,
                                 String callingPartyAddress,
                                 String calledPartyAddress)
        
3GPP/Rfディクショナリ

3GPP Rfインタフェース・ディクショナリは、getRfDictionary()によって返され、Diameterスタックによって拡張される必要があります。

Rfイベント

他のDiameterアプリケーションと同様、Rfアプリケーションは、Diameterスタックとの間でアカウンティング・イベントを送受信できます。

処理イベント

Diameterスタックからアカウンティング・イベントを受信するには、ユーザーはDiameterRfListener実装でprocessEvent(DiameterEvent)コールバックを実装する必要があります。受信する可能性のあるアカウンティング・イベントを次に示します。

  • DiameterTimeoutEvent(Object, DiameterSession, int): このイベントは、セッション・タイマーの1つが経過したときに、Diameter実装によって生成されます。Rfインタフェースにイベントがトリガーされる様々な理由は、次のとおりです。

    • SESSION_TIMEOUT_EXPIRED: このイベントは、セッション監視タイマーの有効期限が切れたときにスタックによってトリガーされます。

    • TX_TIMEOUT_EXPIRED: このイベントは、セッション監視タイマーの有効期限が切れたときにスタックによってトリガーされます。

    • INTERIM_TIMEOUT_EXPIRED: このイベントは、仮の間隔期間で指定された時間が切れたときにトリガーされます。

  • DiameterTimeoutEvent(Object, DiameterSession, int): このイベントは、1つのサービスが終了したときに、Diameter実装によって生成されます。Rfインタフェースにイベントがトリガーされる様々な理由は、次のとおりです。

    • TERMINATE_SERVICE: このイベントは、サービスがスタックまたはサーバーによって終了されるときにスタックによってトリガーされます。

  • DiameterInvalidMessageReceivedEvent(Object, DiameterSession, Message): このイベントは、無効なメッセージを受信したときにスタックによってトリガーされます。このイベント・オブジェクトには、無効な受信メッセージが含まれています。

イベントの呼出し

Diameterスタックにアカウンティング・イベントを送信するには、ユーザーはアカウンティング・アプリケーションのeventRaised(DiameterEvent)メソッドをコールする必要があります。Rfアプリケーションによってトリガーされるアカウンティング・イベントは、DiameterRfOutOfSpaceEvent(Object, int)のみです。DiameterRfOutOfSpaceEventには次の様々なタイプのイベントがあります。

  • EVT_OUT_OF_SPACE: このイベントは、スタックに受信済または送信済のアカウンティング・メッセージを格納するスペースが不足していることを通知するためにアプリケーションによってトリガーされます。このイベントは、タイプ・パラメータがEVT_OUT_OF_SPACEに設定されたクラスをインスタンス化することで作成されます。RfサーバーのAUTO_ANSWERモードがアクティブで、EVT_OUT_OF_SPACEイベントがトリガーされると、スタックは自動的に、DIAMETER_OUT_OF_SPACEに設定されたResult-Code AVPを含むアンサー・メッセージを返し、EVT_NOT_OF_OUT_SPACEイベントがトリガーされるまで続きます。

  • EVT_END_OUT_OF_SPACE: このイベントは、スタックに受信済または送信済のアカウンティング・リクエスト・メッセージを格納するスペースが回復したことを通知するためにアプリケーションによってトリガーされます。このイベントは、タイプがEVT_END_OUT_OF_SPACEのDiameterRfOutOfSpaceEventクラスをインスタンス化して作成されます。このようなイベントは、EVT_OUT_OF_SPACEイベントがトリガーされた後にのみトリガーされます。

    DiameterRfOutOfSpaceEventは、AUTO_ANSWERモードがアクティブ化されている場合のみ使用されます。

Rfアプリケーション・オプション

次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(java.util.propertiesを参照)のリストで、多数のオプションが含まれる場合があります。FSMに固有のオプションもあります。次に、実装したFSMに応じて設定できるRfアプリケーションの構成可能なオプションを示します。

Rfステートレス・サーバー

FSMでは、次のオプション設定が認められています。

  • AUTO_ANSWER

  • AUTO_DELETION

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

Rfステートフル・サーバー

FSMでは、次のオプション設定が認められています。

  • AUTO_ANSWER

  • AUTO_DELETION

  • DELETE_ON_TIMEOUT

  • SUPERVISION_TIMER_DURATION

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

Rfクライアント

FSMでは、次のオプション設定が認められています。

  • AUTO_DELETION

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

  • DELETE_ON_TIMEOUT

  • SUPERVISION_TIMER_DURATION

  • INTERIM_INTERVAL

  • REALTIME_REQUIRED

INTERIM_INTERVALおよびREALTIME_REQUIREDオプションのデフォルト値は、特定のセッションでsetSessionParameter()メソッドを使用することによって、アプリケーションにより動的に上書きされることがあります。

RfアプリケーションFSM

[RFC 3588]で示されているように、実際のアカウント・サービスのタイプによって、様々なタイプのアカウンティング・レコードが送信されます。アカウント・サービスがワンタイム・イベントの場合、つまり、イベントの開始と終了が同時の場合、Accounting-Record-Type AVPの値をEVENT_RECORDに設定する必要があります。アカウント・サービスが測定可能な時間継続する場合、AVPに値START_RECORDとSTOP_RECORD、および場合によってはINTERIM_RECORDを使用する必要があります。次に、Rf Diameterアプリケーションで処理できる、2つの異なるメッセージの流れを示します。ワンタイム・イベントのアカウンティング・サービス:

  • クライアント > ACR (EVENT_RECORD) > サーバー

  • クライアント < ACA (EVENT_RECORD) < サーバー

測定可能な時間継続するアカウンティング・サービス:

  • クライアント > ACR (START_RECORD) > サーバー

  • クライアント < ACA (START_RECORD) < サーバー

  • クライアント > ACR (INTERIM_RECORD) > サーバー

  • クライアント < ACA (INTERIM_RECORD) < サーバー

  • クライアント > ACR (INTERIM_RECORD) > サーバー

  • クライアント < ACA (INTERIM_RECORD) < サーバー

  • クライアント > ACR (STOP_RECORD) > サーバー

  • クライアント < ACA (STOP_RECORD) < サーバー

ACR(EVENT_RECORD)は、Accounting-Record-Type AVPがEVENT_RECORDに設定され、リクエスト・フラグがtrueに設定されたAccounting-Requestメッセージを表します。ACA(EVENT_RECORD)は、Accounting-Record-Type AVPがEVENT_RECORDに設定され、リクエスト・フラグがfalseに設定されたAccounting-Answerメッセージを表します。

次に、Rfアプリケーションで実装できるFSMの様々なタイプについて説明します。

RfクライアントFSM

このFSMは、クライアント側のステート・マシンを定義する[RFC 3588]要件に対応します。このFSMを実装するアプリケーションによってインスタンス化されるセッションは、最初の受信メッセージとして、Accounting-Record-Type AVPの値がEVENT_RECORDまたはSTART_RECORDに設定されたアカウンティング・リクエスト・メッセージを待ちます。Accounting-Record-Type AVPの値がSTART_RECORDに設定されたアカウンティング・リクエスト・メッセージを受信すると、FSMはAccounting-Record-Type AVPの値がINTERIM_RECORDまたはSTOP_RECORDに設定された他のアカウンティング・リクエスト・メッセージを待ちます。Accounting-Record-Type AVPの値がSTOP_RECORDに設定されたアカウンティング・リクエスト・メッセージを受信すると、セッションが終了します。

Rfステートフル・サーバーFSM

このFSMは、サーバー側のステート・マシンを定義する[RFC 3588]要件に対応します。この後ろに、アカウンティング・サーバーでセッション状態を追跡する必要があるアプリケーションが続く場合があります。このFSMを実装するアプリケーションは、リクエスト・アカウンティング・メッセージを待ち、リクエスト・メッセージで受信したのと同じAccounting-Record-Type AVP値を持つレスポンスを送信します。このFSMを実装するアプリケーションによってインスタンス化されるセッションは、最初の受信メッセージとして、Accounting-Record-Type AVPの値がEVENT_RECORDまたはSTART_RECORDに設定されたアカウンティング・リクエスト・メッセージを待ちます。Accounting-Record-Type AVPの値がSTART_RECORDに設定されたアカウンティング・リクエスト・メッセージを受信すると、FSMはAccounting-Record-Type AVPの値がINTERIM_RECORDまたはSTOP_RECORDに設定された他のアカウンティング・リクエスト・メッセージを待ちます。Accounting-Record-Type AVPの値がSTOP_RECORDに設定されたアカウンティング・リクエスト・メッセージを受信すると、セッションが終了します。

Rfステートレス・サーバーFSM

このFSMはデフォルトのサーバー側ステート・マシンを定義する[RFC 3588]要件に対応します。このマシンは、順序や時間に関係なくアカウンティング・レコードを受け取る必要があり、レコードの処理に標準の要件はありません。このFSMを実装するアプリケーションは、リクエスト・アカウンティング・メッセージを待ち、リクエスト・メッセージで受信したのと同じAccounting-Record-Type AVP値を持つレスポンスを送信します。

3GPP/Ro DIAMETER JAVA API

この項では、Diameterプロトコルを介して3GPP [TS 32.299] Roインタフェース用のJava APIを定義します(指定順に[TS 32.225]、[TS 32.200]および[TS 32.240])。

3GPP/Ro Diameter JAVAインタフェース

この項では、3GPP/Ro Diameter Javaインタフェースについて説明します。

Roプロバイダ

DiameterRoProviderインタフェースは、3GPPインタフェースで定義されたRo Diameterアプリケーションを表します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.createDiameterRoProvider(Properties, refFSM)をコールして取得できます。refFSMの値は次のとおりです。

  • RFC_CL_LESS: Rfc 4006イベント・ベース・クライアント・ステート・マシン用

  • RFC_CL_FULL: Rfc 4006セッション・ベース・クライアント・ステート・マシン用

  • RFC_SRV: Rfc 4006サーバー・ステート・マシン用

Propertiesパラメータでは、このRoプロバイダで処理される機能を指定します。これはプロパティのリストで、多数のオプションが含まれる場合があります。Roアプリケーション・オプションの詳細は、セクション[4.2.6]を参照してください。

Roリスナー

DiameterRoListenerインタフェースは、DiameterRoProviderインタフェースを実装するDiameterRoProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterRoListenerインスタンスは、メソッドDiameterRoProvider. setDiameterRoListener ()によってプロバイダに登録されます。このインタフェースは、4つの主要メソッド、creditControlRequestReceived()、creditControlAnswerReceived()、reAuthRequestReceived()およびreAuthAnswerReceived()を提供します。最初と3番目のメソッドは、オプションAUTO_ANSWERをfalseに設定した場合に実装し、コールする必要があります。この場合、サーバーは受信したアカウンティング・リクエストに対応するアカウンティング・アンサーを作成できる必要があります。2番目と最後のメソッドは、受信したアカウンティング・アンサーを処理します。

Roメッセージ・ファクトリ

DiameterRoMessageFactoryインタフェースは、アプリケーションが3GPPで定義されたDiameter Roメッセージを作成できるファクトリ・メソッドcreateCreditControlRequest()、createCreditConrolAnswer()、createReAuthRequest()およびcreateReAuthAnswer()を提供します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.getRoDiameterMessageFactory()メソッドをコールして取得できます。このファクトリによって作成されるメッセージは次のとおりです。

  • Credit-Control-Request(CCR)

    次のメソッドは基本的なCCR(必須AVPのみを備えた)を作成します。最初のメソッドは、Requested-Action AVP(イベント・セッションの場合のみ必須)のないCCRを作成します。つまり、メソッド名では、Requested-Actionの値を指定します。

    • Diameterメッセージ

      createCreditControlRequest (String destinationRealm,
         int authApplicationId,
         StringserviceContextId,
         String CCRequestType
         int CCRequestNumber)
      
    • Diameterメッセージ

      createCreditControlRequestDirectDebiting(String destinationRealm,
         int authApplicationId,
         String serviceContextId,
         int CCRequestNumber)
      
    • Diameterメッセージ

      createCreditControlRequestRefundAccount(String destinationRealm,
         int authApplicationId,
         String serviceContextId,
         int CCRequestNumber)
      
    • Diameterメッセージ

      createCreditControlRequestCheckBalance(String destinationRealm,
         int authApplicationId,
         String serviceContextId,
         int CCRequestNumber)
      
    • Diameterメッセージ

      createCreditControlRequestPriceEnquiry(String destinationRealm,
         int authApplicationId,
         String serviceContextId,
         int CCRequestNumber)
      
  • Credit-Control-Answer(CCA)

    次に示す最初のメソッドは、基本的なCCA(必須AVPのみを備えた)を作成し、2番目のメソッドはCCRからCCAを作成します。

    • Diameterメッセージ

      createCreditControlAnswer(String resultCode,
         int authApplicationId,
         String CCRequestType,
         int CCRequestNumber)
      
    • Diameterメッセージ

      createCreditControlAnswer(String resultCode,
         DiameterMessage messageCCR)
      
  • Re-Auth-Request(RAR)

    次のメソッドは基本的なRAR(必須AVPのみを備えた)を作成します。

    • Diameterメッセージ

      createReAuthRequest(String destinationRealm,
         String destinationHost,
         int authApplicationId,
         String reAuthRequestType)
      
  • Re-Auth- Answer(RAA)

    次のメソッドは、Result-Code AVPのみを指定するRAAを作成します。

    • Diameterメッセージ

      createReAuthAnswer(String resultCode)
      

3GPP/Roディクショナリ

3GPP Roインタフェース・ディクショナリは、getRoDictionary()によって返され、Diameterスタックによって拡張される必要があります。

Roイベント

他のDiameterアプリケーションと同様、Roアプリケーションは、Diameterスタックとの間でイベントを送受信できます。

処理イベント

Diameterスタックからアカウンティング・イベントを受信するには、ユーザーはDiameterRoListener実装でprocessEvent(DiameterEvent)コールバックを実装する必要があります。受信する可能性のあるアカウンティング・イベントを次に示します。

  • DiameterTimeoutEvent(Object, DiameterSession, int): このイベントは、セッション・タイマーの1つが経過したときに、Diameter実装によって生成されます。Roインタフェースにイベントがトリガーされる様々な理由は、次のとおりです。

    • SESSION_TIMEOUT_EXPIRED: このイベントは、セッション監視タイマーの有効期限が切れたときにスタックによってトリガーされます。

    • TX_TIMEOUT_EXPIRED: このイベントは、セッション監視タイマーの有効期限が切れたときにスタックによってトリガーされます。

    • TRA_TIMEOUT_EXPIRED: このイベントは、RAAがアプリケーションから時間どおりに送信されなかった場合に、スタックによってトリガーされます。

  • DiameterTimeoutEvent(Object, DiameterSession, int): このイベントは、1つのサービスが終了したときに、Diameter実装によって生成されます。Roインタフェースにイベントがトリガーされる様々な理由は、次のとおりです。

    • TERMINATE_SERVICE: このイベントは、サービスがスタックまたはサーバーによって終了されるときにスタックによってトリガーされます。

    • GRANT_SERVICE: このイベントは、サービスがサーバーによって許可されるときに、スタックによってトリガーされます。

    • BACKUP_SERVICE: このイベントは、Tx2タイマーの有効期限が切れ、アプリケーションがバックアップ・サーバーに接続する必要があるときに、スタックによってトリガーされます。

    • ERROR_SERVICE: このイベントは、スタックでサービス・エラーが検出されたときに、スタックによってトリガーされます。

  • DiameterInvalidMessageReceivedEvent(Object, DiameterSession, Message): このイベントは、無効なメッセージを受信したときにスタックによってトリガーされます。このイベント・オブジェクトには、無効な受信メッセージが含まれています。

イベントの呼出し

Diameterスタックにアカウンティング・イベントを送信するには、ユーザーはアカウンティング・アプリケーションのeventRaised(DiameterEvent)メソッドをコールする必要があります。Roアプリケーションによってトリガーされるアカウンティング・イベントは、DiameterBackupEvent(Object, int)のみです。DiameterBackupEventには次の様々なタイプのイベントがあります。

  • EVT_NOBACKUP_ACCEPTED: このイベントは、スタックにバックアップ・サーバーのアドレスがないことを知らせるために、アプリケーションによってトリガーされます。

  • EVT_BACKUP_SUCCESS: このイベントは、スタックにバックアップ・サーバーから正常に信用管理アンサーを受信したことを通知するために、アプリケーションによってトリガーされます。

  • EVT_BACKUP_FAILED: このイベントは、スタックにバックアップ・サーバーからの信用管理アンサーの受信に失敗したことを通知するために、アプリケーションによってトリガーされます。

これらのイベントは、スタックからアプリケーションにBackupServiceイベントが送信された場合のみ発生します。

Roアプリケーション・オプション

次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(java.util.propertiesを参照)のリストで、多数のオプションが含まれる場合があります。FSMに固有のオプションもあります。次に、実装したFSMに応じて設定できるRoアプリケーションの構成可能なオプションを示します。

Roサーバー

FSMでは、次のオプション設定が認められています。

  • AUTO_ANSWER

  • AUTO_DELETION

  • SUPERVISION_TIMER_DURATION

  • DELETE_ON_TIMEOUT

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

Roステートフル・クライアント

FSMでは、次のオプション設定が認められています。

  • AUTO_DELETION

  • DELETE_ON_TIMEOUT

  • TX_TIMER_DURATION

  • TRA_TIMER_DURATION

  • CCFH

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

Roステートレス・クライアント

FSMでは、次のオプション設定が認められています。

  • AUTO_DELETION

  • DDFH

  • TX1_TIMER_DURATION

  • TX2_TIMER_DURATION

  • BACKUP_TIMER_DURATION

  • RETRANSMISSION_INTERVAL

  • RETRANSMISSION_ATTEMPS

  • ENABLE_INVALID_COMMAND

  • ENABLE_SND_MISSING_AVP

RoアプリケーションFSM

[RFC 4006]で示されているように、実際の信用管理サービスのタイプによって、様々なタイプの信用管理リクエストが送信されます。信用管理サービスがワンタイム・イベントの場合、つまり、イベントの開始と終了が同時の場合、CC-Request-Type AVPの値をEVENT_REQUESTに設定する必要があります。信用管理サービスが測定可能な時間継続する場合、AVPに値INITIAL_REQUESTとTERMINATION_REQUEST、および場合によってはUPDATE_REQUESTを使用する必要があります。次に、Ro Diameterアプリケーションで処理できる、2つの異なるメッセージの流れを示します。ワンタイム・イベントの信用管理サービス:

  • クライアント > CCR (EVENT_REQUEST) > サーバー

  • クライアント < CCA (EVENT_REQUEST) < サーバー

測定可能な時間継続するアカウンティング・サービス:

  • クライアント > CCR (INITIAL_REQUEST) > サーバー

  • クライアント < CCA (INITIAL_REQUEST) < サーバー

  • クライアント > CCR (UPDATE_REQUEST) > サーバー

  • クライアント < CCA (UPDATE_REQUEST) > サーバー

  • クライアント > CCR (UPDATE_REQUEST) > サーバー

  • クライアント < CCA (UPDATE_REQUEST) > サーバー

  • クライアント > CCR (TERMINATION_REQUEST) > サーバー

  • クライアント < CCA (TERMINATION_REQUEST) < サーバー

CCR(EVENT_REQUEST)は、CC-Request-Type AVPがEVENT_REQUESTに設定されたCredit-Control-Requestメッセージを表します。CCA(EVENT_REQUEST)は、CC-Request-Type AVPがEVENT_REQUESTに設定されたCredit-Control- Answerメッセージを表します。

次に、Roアプリケーションで実装できるFSMの様々なタイプについて説明します。

Roステートフル・クライアントFSM

このFSMは、認可/認証プロセスの後に最初の審査が実行される場合のセッションベースの信用管理クライアント・ステート・マシンを定義する[RFC 4006]要件に対応しています。このFSMを実装するアプリケーションによってインスタンス化されたセッションは、最初の送信メッセージとして、CC-Request-Type AVPの値がINITIAL_REQUESTに設定された信用管理リクエスト・メッセージの送信を待ちます。CC-Request-Type AVP値がINITIAL_REQUESTに設定された信用管理アンサー・メッセージを受信すると、FSMはCC-Request-Type AVP値がUPDATE_REQUESTまたはUPDATE_REQUESTに設定された他の信用管理リクエスト・メッセージまたは再認証リクエスト・メッセージの送信を待ちます。CC-Request-Type AVPの値がTERMINATION_REQUESTに設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。

Roステートレス・クライアントFSM

このFSMは、イベントベースの信用管理クライアント・ステート・マシンを定義する[RFC 4006]要件に対応します。このFSMを実装するアプリケーションは、CC-Request-Type AVPがEVENT_REQUESTに設定された信用管理リクエスト・メッセージを送信し、CC-Request-Type AVPがEVENT_REQUESTに設定された信用管理アンサーを待ちます。CC-Request-Type AVPの値がEVENT_REQUESTに設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。

RoサーバーFSM

このFSMは、信用管理サーバー・ステート・マシンを定義する[RFC 4006]要件に対応します。このFSMを実装するアプリケーションは、信用管理リクエスト・メッセージを待ち、リクエスト・メッセージで受信したものと同じCC-Request-Type AVP値のレスポンスの送信を待ちます。このFSMを実装するアプリケーションによってインスタンス化されるセッションは、最初の受信メッセージとして、CC-Request-Type AVPの値がEVENT_REQUESTまたはINITIAL_REQUESTに設定されたアカウンティング・リクエスト・メッセージを待ちます。CC-Request-Type AVPの値がINITIAL_REQUESTに設定された信用管理リクエスト・メッセージを受信すると、FSMはCC-Request-Type AVPの値がUPDATE_REQUESTまたはTERMINATION_REQUESTに設定された他の信用管理リクエスト・メッセージを待ちます。CC-Request-Type AVPの値がTERMINATION_REQUESTに設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。

3GPP/Sh Diameter Java API

この項では、Diameterプロトコルを介した3GPP [TS 29.328]および[TS 29.329] ShインタフェースのJava APIを定義します。

3GPP/Sh Diameter Javaインタフェース

この項では、3GPP/Sh Diameter Javaインタフェースについて説明します。

Shプロバイダ

DiameterShProviderインタフェースは、3GPPインタフェースで定義されたSh Diameterアプリケーションを表します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.createDiameterShProvider(Properties)をコールして取得できます。Propertiesパラメータでは、このShプロバイダで処理される機能を指定します。これはプロパティのリストで、多数のオプションが含まれる場合があります。Shアプリケーション・オプションの詳細は、セクション[5.2.6]を参照してください。

Shリスナー

DiameterShListenerインタフェースは、DiameterShProviderインタフェースを実装するDiameterShProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterShListenerインスタンスは、メソッドDiameterShProvider. setDiameterShListener ()によってプロバイダに登録されます。このインタフェースは、次のメソッドを提供します。

  • profileUpdateRequestReceived()

  • profileUpdateAnswerReceived()

  • pushNotificationRequestReceived()

  • pushNotificationAnswerReceived()

  • subscribeNotificationRequestReceived()

  • subscribeNotificationAnswerReceived()

  • userDataRequestReceived()

  • userDataAnswerReceived()

これらのメソッドは、受信したDiameterメッセージを処理します。

Shメッセージ・ファクトリ

DiameterShMessageFactoryインタフェースは、アプリケーションが3GPP [TS 29.328]仕様(Shインタフェース)で定義されたDiameterメッセージを作成するためのファクトリ・メソッドcreateProfileUpdateRequest()、createProfileUpdateAnswer()、createPushNotificationRequest()、createPushNotificationAnswer()、createSubscribeNotificationRequest()、createSubscribeNotification Answer()、createUserDataRequest()およびcreateUserDataAnswer()を提供します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.getShDiameterMessageFactory()メソッドをコールして取得できます。このファクトリによって作成されるメッセージは次のとおりです。

  • Profile-Update-Request(PUR)

    DiameterMessage
    createProfileUpdateRequest(String destinationRealm,
      String userIdentity,
      String userData)
    
  • Profile-Update- Answer(PUA)

    DiameterMessage
    createProfileUpdateAnswer(String resultCode)
    
  • Push-Notification-Request(PNR)

    DiameterMessage
    createPushNotificationRequest(String destinationRealm,
      String destinationHost,
      String userIdentity,
      String userData)
    
  • Push-Notification- Answer(PNA)

    DiameterMessage
      createPushNotificationAnswer(String resultCode)
    
  • Subscribe-Notification-Request(SNR)

    DiameterMessage
      createSubscribeNotificationRequest(String destinationRealm,
      String userIdentity,
      String dataReference,
      String subsReqType)
    
    DiameterMessage
      createSubscribeNotificationRequest(String destinationRealm,
      String userIdentity,
      String dataReference,
      String subsReqType,
      String serviceIndication,
      String serverName)
    
  • Subscribe-Notification- Answer(SNA)

    DiameterMessage
      createSubscribeNotificationAnswer(String resultCode)
    
  • User-Data-Request(UDR)

    DiameterMessage
      createUserDataRequest(String destinationRealm,
      String userIdentity,
      String userIdentityType,
      String dataReference)
    
    DiameterMessage
      createUserDataRequest(String destinationRealm,
      String userIdentity,
      String userIdentityType,
      String dataReference,
      String requestedDomain,
      String currentLocation,
      String serviceIndication,
      String serverName,
      String destinationHost)
    
  • User-Data- Answer(UDA)

    DiameterMessage
      createUserDataAnswer(String resultCode, String userData)
    

3GPP/Shディクショナリ

3GPP Shインタフェース・ディクショナリは、getShDictionary()によって返され、Diameterスタックによって拡張される必要があります。

Shイベント

他のDiameterアプリケーションと同様、Shアプリケーションは、Diameterスタックとの間でイベントを送受信できます。Diameterアプリケーションからイベントを受信するには、ユーザーはDiameterShListener実装でprocessEvent(DiameterEvent)コールバックを実装する必要があります。

Shアプリケーション・オプション

次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(java.util.propertiesを参照)のリストで、多数のオプションが含まれる場合があります。次に、実装したFSMに応じて設定できるShアプリケーションの構成可能なオプションを示します。オプションの様々な値は次のとおりです。

  • AUTO_SESSION_DELETION

  • SESSION_DELETED_EVENT

  • AUTO_SESSION_TERMINATION_REQUEST

  • AUTO_SESSION_ABORT_ANSWERAUTO_SESSION_TERMINATION_ANSWER

  • SESSION_TIMEOUT_EVENT

  • AUTH_AUTHORIZATION_LIFETIME_EXPIRED_EVENT

  • AUTH_GRACE_PERIOD_EXPIRED_EVENT

  • LISTENER_SEND_HOOK

Diameterアプリケーションの例

この項では、アカウンティング・コールの流れを示し、一般的なアカウンティングDiameterアプリケーションによって実行される手順を詳細に説明します。Rf Java APIを使用してアカウンティング・クライアントとアカウンティング・サーバー間でアカウンティング情報を交換する方法を理解してください。

アカウンティング・コールの流れ

次の図は、イベントベースの請求を行うために、Diameterオフライン・インタフェースで必要なトランザクションを示しています。次の例は、アカウンティング・クライアントとアカウンティング・サーバー間のコールの流れを示しています。

図A-3 アカウンティング・コールの流れ

アカウンティング・コールの流れの説明です。
「図A-3 アカウンティング・コールの流れ」の説明

ネットワーク要素(クライアントとして機能)は、Accounting-Record-Type AVPがEVENT_RECORDに設定されたAccounting-Request (ACR)を送信し、CDF(サーバーとして機能)にサービス固有情報を示します。サーバーは、受信したAccounting-Requestを処理し、Accounting-Record-Type AVPがEVENT_RECORDに設定されたAccounting-Answer (ACA)メッセージをクライアントに返します。次の項では、Rfクライアント/サーバーDiameterアプリケーションを作成するときに実行する必要のあるすべての手順について説明します。クライアント側またはサーバー側の指定がない場合、両方に共通です。

メッセージを交換する前に、Diameterスタックの初期化手順を実行する必要があります。この手順は次のとおりです。

  • DiameterStackインスタンスの作成

  • 作成されたDiameterスタックへのRf Diameterアプリケーションの登録

  • ローカル・トランスポート・アドレスにバインドするリスニング・ポイントの作成(オプション/サーバー側)

  • ルートの構成およびDiameterピアへの接続(オプション/クライアント側)

アプリケーションの初期化

Diameterスタックのインスタンスは、次のように作成できます。

図A-4 Oracle Diameterスタックの作成

Oracle Diameterスタックの作成方法の説明です。
「図A-4 Oracle Diameterスタックの作成」の説明

  1. メソッドDiameterFactory.getInstance()を使用して、DiameterFactoryクラスのインスタンスmyFactoryを取得します。

  2. メソッドmyFactory.createDiameterStack()を使用して、DiameterStackクラスのインスタンスmyStackを作成します。

Rf Diameterアプリケーション

Diameterスタックを定義したら、現在のアカウンティング・アプリケーション・オブジェクトをインスタンス化できます。アカウンティングDiameterアプリケーションは、2つのインタフェースDiameterRfProviderおよびDiameterRfListenerのインスタンスによって表されます。前者は高レベルのユーザー・コードで使用されるアカウンティングDiameterアプリケーションを表します。後者はDiameterスタックで使用されるアカウンティングDiameterアプリケーションを表します。DiameterRfProviderインタフェースは、アカウンティング・メッセージ(Accounting-Request(ACR)とAccounting-Answer(ACA))を送信し、アプリケーションの動作を制御するために、高レベルのユーザー・コードによって使用されます。DiameterRfListenerインタフェースで定義されているすべてのコールバック・メソッドは、これらのアカウンティング・メッセージと一部のイベントをユーザー・コードに送信するために、Diameterスタックによって使用されます。

Rfプロバイダは次のように作成されます。

図A-5 Rfプロバイダの作成

Rfプロバイダの作成方法の説明です。
「図A-5 Rfプロバイダの作成」の説明

  1. メソッドmyStack.createDiameterRfProvider()を使用して、DiameterRfProviderのインスタンスmy Rf Providerを作成します。インスタンス化は、xmlディクショナリに構成された名前と一致するアプリケーション名で行われ、すべての着信メッセージが受信されるように、その名前がリスナーに追加されます。プロバイダの作成中に渡されるパラメータには、セクション[3.2.6]で定義済の一式のアカウンティング・オプションがあり、refFSMは実行するFSMの参照です。

    3GPP Rfインタフェース・ディクショナリは、getRfDictionary()によって返され、Diameterスタックによって拡張される必要があります。

    実際のアカウンティング・アプリケーションで柔軟性を高めるため、アプリケーション固有のAVPとコマンド・コードを使用してディクショナリを拡張できます。使用するメソッドはmyStack.extendGrammar(myDictionnary)です。Rfリスナーは次のように作成および登録されます。

    図A-6 Rfリスナーの作成と登録

    Rfリスナーの作成と登録の説明です。
    「図A-6 Rfリスナーの作成と登録」の説明

  2. DiameterRfListenerImplはDiameterRfListenerインタフェースの実装で、アプリケーション・プログラマが実装できます。myRfListenerはDiameterRfListenerImplのインスタンスです。

  3. メソッドsetDiameterRfListener()を使用して、作成したリスナーmyRfListenerにmyRfProviderを追加します。

トランスポートの構成

アカウンティング・アプリケーションが1つ以上のトランスポート・アドレスで着信接続をリスニングするには、DiameterListeningPointインタフェースのインスタンスを1つ以上作成する必要があります。リスニング・ポイントを作成するとすぐに、Diameterスタックは、createDiameterRoute()メソッドを使用して宣言できるリモート・ピアからの着信接続を受け入れる準備ができます。

図A-7 ルートおよびリスニング・ポイントの作成

ルートおよびリスニング・ポイントの作成方法の説明です。
「図A-7 ルートおよびリスニング・ポイントの作成」の説明

  1. メソッドmyStack.createDiameterListeningPoint()を使用して、DiameterListeningPointのインスタンスLocalURIからリスニング・ポイントを作成します。

  2. メソッドmyStack.createDiameterRoute()を使用して、ルート構成を作成します。ただし、リスナーでisUnknownPeerAuthorized()コールバックが実装されている場合、この手順は、サーバー・プロセスには必須ではありません。このコールバックは、Diameterスタックがルーティング表で宣言されていないピアから接続リクエストを受信したときにコールされます。接続は、このメソッドがtrueを返した場合のみ受け入れられます。

Accounting Diameterのメッセージ交換

初期化および構成フェーズが終了すると、アカウンティングDiameterアプリケーションはDiameterアカウンティング・メッセージ(ACR/ACA)を送受信できるようになります。

Accounting-Request(ACR)

Accounting Requestは次のように作成されます。

  1. クライアント側で、メソッドgetDiameterRfMessageFactory()を使用して、DiameterRfMessageFactoryクラスのインスタンスmyDiameterRfMessageFactoryを取得します。

  2. メソッドcreateAccountingRequest()を使用して、クライアント側のAccounting Requestを作成します。これはDiameterMessageクラスのインスタンスです。

    すべての着信メッセージは、DiameterRfListenerインタフェースを介してユーザーのアカウンティング・アプリケーションに届けられます。アカウンティング・メッセージ(ACR/ACA)がクライアント側またはサーバー側で受信されると、プログラマによって実装された対応するコールバックがコールされます。たとえば、Accounting-Request(ACR)を受信した場合は、accountingRequestReceived()コールバックがコールされます。それ以外の場合はすべて、受信したメッセージはアカウンティング・アプリケーションのプログラマが実装したmyRfListener.processEvent()を介して届けられます。

  3. メソッドcreateClientDiameterAcctSession()を使用して、クライアントDiameterセッション、DiameterSessionのインスタンスを作成します。

  4. メソッドsendMessage()を使用して、作成したAccounting-Request(ACR)のmyACRをサーバー側に送信します。

  5. メソッドaccountingRequestReceived(event)を使用して、受信したイベントに含まれている着信Accounting-Request(ACR)メッセージを処理します。受信したリクエストからサーバー・セッションを作成します。サーバー側のこのセッションは、アンサーの送信後すぐに削除できます。

Accounting-Answer(ACA)

Accounting-Answerは次のように作成されます。

図A-10 対応するACAの作成

対応するAccounting-Answer(ACA)の作成方法の説明です。
「図A-10 対応するACAの作成」の説明

  1. サーバー側で、メソッドgetDiameterRfMessageFactory()を使用して、DiameterRfMessageFactoryクラスのインスタンスmyDiameterRfMessageFactoryを取得します。

  2. メソッドcreateAccountingAnswer()を使用して、サーバー側のAccounting-Answerを作成します。これはDiameterMessageクラスのインスタンスです。

    すべての着信メッセージは、DiameterRfListenerインタフェースを介してユーザーのアカウンティング・アプリケーションに届けられます。

  3. 作成したAccounting-AnswerのmyACAをクライアント側へ送信します。

  4. メソッドaccountingAnswerReceived(event)を使用して、受信したイベントに含まれている着信Accounting-Answer(ACA)メッセージを処理します。

クリーンアップ

最後の手順として、作成したすべてのルート、プロバイダ、リスニング・ポイントのグローバル・クリーンアップを実行します。

図A-12 ルート、プロバイダおよびリスニング・ポイントのクリーンアップ

ルート、プロバイダ、リスニング・ポイントのグローバル・クリーンアップの説明です。
「図A-12 ルート、プロバイダおよびリスニング・ポイントのクリーンアップ」の説明

  1. クリーンアップ:

    • メソッドmyStack.deleteDiameterListeningPoint(listeningPoint)を使用して、作成したすべてのリスニング・ポイントを削除します。

    • myStack.deleteDiameterRfProvider(myRfProvider)を使用して、作成したプロバイダを削除します。

    • myStack.deleteDiameterRoute(route)を使用して、作成したルートを削除します。