この付録では、Oracle Diameter Java APIについて説明します。内容は次のとおりです。
基本プロトコル・ライブラリは、図の主要要素です。基本プロトコルの実装が含まれ、スタンドアロンC++共有ライブラリとして使用できます。上部の、Diameter基本プロトコル・ライブラリは、アプリケーション登録メカニズムを提供します。特定のアプリケーションのサブクラスAcctApplicationは、アプリケーションの実装に必要なステート・マシンに応じて、ユーザーが派生させることができます。各アプリケーション・オブジェクトは、独自のセッション・サブクラスを実装できます。特定のセッション・サブクラス(AuthSessionとAcctSession)は、アプリケーションによって実装されたステート・マシン(認証、承認またはアカウンティング)に応じて、ユーザーが派生させることができます。下部のDiameter基本プロトコル・ライブラリは、トランスポート・モジュールと対話するAPIを提供します。このAPIでは、ユーザー・アプリケーションがTransportクラスの任意のサブクラスをインスタンス化できます。これらのサブクラスは、システム依存にすることができ、Diameterにあらゆる種類のトランスポート・プロトコルを提供できます。Diameterには、UNIXのような環境でのTCPおよびSCTPカーネル実装用のソケット・ベースのトランスポート・モジュールが付属しています。Diameterの基本プロトコル・ライブラリは、ダイレクトCoreインタフェースも提供します。この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アプリケーションを定義し、詳しく説明します。
Diameterのインタフェースを通して、ファクトリからDiameterプロトコル・スタック・プロバイダが取得され、その後、Diameterスタックによって作成されたプロバイダにDiameterリスナーが追加されます。
Diameter Java APIは、いくつかのインタフェースで構成されています。
DiameterFactoryインタフェースは、Diameter Java APIで定義されたすべてのインタフェースの異なる実装の特定インスタンスを取得するために、Diameterアプリケーションが使用します。DiameterFactoryの唯一のインスタンスは、getInstance()メソッドを使用して取得できます。
DiameterStackインタフェースは、[RFC 3588]で定義されたDiameterプロトコル・スタックを表します。このインタフェースは、プロバイダ、ルートおよびリスニング・ポイントの作成にも使用されます。Diameterスタックは、メッセージを交換する前に初期化し、構成する必要があります(セクション[6.2]を参照)。
DiameterProviderインタフェースは、Diameter基本プロトコルの上で動作するDiameterアプリケーション(1つの承認/認証アプリケーションIDまたは1つのアカウンティング・アプリケーションIDを持つ)を表します。DiameterListenerインタフェースは、DiameterProviderインタフェースを実装するオブジェクトによってトリガーされるイベントを処理します。1つのプロバイダには1つのリスナーのみ存在します。このインタフェースは、アプリケーション・プログラマが実装する必要があります。
DiameterRouteインタフェースは、レルムベースのルーティング表のルート・エントリを表します。Diameterクライアント・アプリケーションは、createDiameterRouteメソッドをコールして、リモート・ピアを宣言します。DiameterListeningPointインタフェースは、Diameterスタックのローカル・トランスポート・アドレスを表し、宣言されたリモート・ピアからの着信接続を受け入れられるようにします。
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から構成されます。
DiameterSessionインタフェースは、[RFC 3588]で定義されたDiameterセッションを表します。Diameterアプリケーションは、新しいDiameterセッションのリクエストを送信する必要がある場合、DiameterProviderインタフェースからcreateClientDiameterSessionメソッドをコールします。その後、sendMessageメソッドをコールして、リクエストを送信できます。また、着信リクエストは、createServerDiameterSessionをコールして、新しいサーバー・セッションを作成し、sendMessageを使用してレスポンスを送信して処理できます。
DiameterEventインタフェースは、すべてのDiameterイベントのベース・クラスです。このインタフェースには、次の特別なイベントがあります。
DiameterMessageEvent: このイベントは、着信メッセージを使用できるときに生成されます。
DiameterRealmStateChangeEvent: このイベントは、ピアの起動または停止により、リモート・レルムにアクセス可能かどうかをアプリケーションに通知します。
DiameterSessionEvent: 受信メッセージ、セッション・タイムアウト、セッション・エラーなどのDiameterセッションに関連するすべてのイベントを表します。
Diameterスタックは、Diameter Eventクラスのインスタンスを作成し、これらのインスタンスをDiameterListener.processEventメソッドに渡すことで、ユーザー・アプリケーションに情報を届けます。
DiameterExceptionインタフェースは、すべてのDiameter例外のベース・クラスです。このインタフェースには、次の特別な例外があります。
DiameterInvalidArgumentException: この例外は、メソッドが無効なパラメータ値を受信するとスローされます。
DiameterInvalidMessageException: この例外は、Diameterメッセージがエンコードできない場合にスローされます。
DiameterMessageException: この例外は、メッセージの送信中に障害が発生した場合にスローされます。
DiameterTransportFailureException: この例外は、APIアクション中に同期トランスポート障害が発生した場合にスローされます。
DiameterUnsupportedFeatureException: この例外は、この実装でサポートされていない操作が起動された場合に、実装によってスローされます。
この項では、Diameterプロトコルを介して3GPP [TS 32.299] Rfインタフェース用のJava APIを定義します(指定順に[TS 32.225]、[TS 32.200]および[TS 32.240])。
この項では、Javaインタフェースについて説明します。
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]を参照してください。
DiameterRfListenerインタフェースは、DiameterRfProviderインタフェースを実装するDiameterRfProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterRfListenerインスタンスは、メソッドDiameterRfProvider. setDiameterRfListener ()によってプロバイダに登録されます。このインタフェースは2つの主要メソッド、accountingRequestReceived()とaccountingAnswerReceived()を提供します。最初のメソッドは、オプションAUTO_ANSWERをfalseに設定した場合に実装し、コールする必要があります。この場合、サーバーは受信したアカウンティング・リクエストに対応するアカウンティング・アンサーを作成できる必要があります。2番目のメソッドは、受信したアカウンティング・アンサーを処理します。
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)
他の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モードがアクティブ化されている場合のみ使用されます。
次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(java.util.propertiesを参照)のリストで、多数のオプションが含まれる場合があります。FSMに固有のオプションもあります。次に、実装したFSMに応じて設定できるRfアプリケーションの構成可能なオプションを示します。
FSMでは、次のオプション設定が認められています。
AUTO_ANSWER
AUTO_DELETION
ENABLE_INVALID_COMMAND
ENABLE_SND_MISSING_AVP
[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の様々なタイプについて説明します。
この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に設定されたアカウンティング・リクエスト・メッセージを受信すると、セッションが終了します。
この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に設定されたアカウンティング・リクエスト・メッセージを受信すると、セッションが終了します。
この項では、Diameterプロトコルを介して3GPP [TS 32.299] Roインタフェース用のJava APIを定義します(指定順に[TS 32.225]、[TS 32.200]および[TS 32.240])。
この項では、3GPP/Ro Diameter Javaインタフェースについて説明します。
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]を参照してください。
DiameterRoListenerインタフェースは、DiameterRoProviderインタフェースを実装するDiameterRoProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterRoListenerインスタンスは、メソッドDiameterRoProvider. setDiameterRoListener ()によってプロバイダに登録されます。このインタフェースは、4つの主要メソッド、creditControlRequestReceived()、creditControlAnswerReceived()、reAuthRequestReceived()およびreAuthAnswerReceived()を提供します。最初と3番目のメソッドは、オプションAUTO_ANSWERをfalseに設定した場合に実装し、コールする必要があります。この場合、サーバーは受信したアカウンティング・リクエストに対応するアカウンティング・アンサーを作成できる必要があります。2番目と最後のメソッドは、受信したアカウンティング・アンサーを処理します。
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)
他の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イベントが送信された場合のみ発生します。
次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(java.util.propertiesを参照)のリストで、多数のオプションが含まれる場合があります。FSMに固有のオプションもあります。次に、実装したFSMに応じて設定できるRoアプリケーションの構成可能なオプションを示します。
FSMでは、次のオプション設定が認められています。
AUTO_ANSWER
AUTO_DELETION
SUPERVISION_TIMER_DURATION
DELETE_ON_TIMEOUT
ENABLE_INVALID_COMMAND
ENABLE_SND_MISSING_AVP
[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の様々なタイプについて説明します。
この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に設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。
このFSMは、イベントベースの信用管理クライアント・ステート・マシンを定義する[RFC 4006]要件に対応します。このFSMを実装するアプリケーションは、CC-Request-Type AVPがEVENT_REQUESTに設定された信用管理リクエスト・メッセージを送信し、CC-Request-Type AVPがEVENT_REQUESTに設定された信用管理アンサーを待ちます。CC-Request-Type AVPの値がEVENT_REQUESTに設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。
この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に設定された信用管理アンサー・メッセージを受信すると、セッションは終了します。
この項では、Diameterプロトコルを介した3GPP [TS 29.328]および[TS 29.329] ShインタフェースのJava APIを定義します。
この項では、3GPP/Sh Diameter Javaインタフェースについて説明します。
DiameterShProviderインタフェースは、3GPPインタフェースで定義されたSh Diameterアプリケーションを表します。このインタフェースを実装するクラスのインスタンスは、DiameterStack.createDiameterShProvider(Properties)をコールして取得できます。Propertiesパラメータでは、このShプロバイダで処理される機能を指定します。これはプロパティのリストで、多数のオプションが含まれる場合があります。Shアプリケーション・オプションの詳細は、セクション[5.2.6]を参照してください。
DiameterShListenerインタフェースは、DiameterShProviderインタフェースを実装するDiameterShProviderImplクラスが受信するアカウンティング・メッセージを処理します。DiameterShListenerインスタンスは、メソッドDiameterShProvider. setDiameterShListener ()によってプロバイダに登録されます。このインタフェースは、次のメソッドを提供します。
profileUpdateRequestReceived()
profileUpdateAnswerReceived()
pushNotificationRequestReceived()
pushNotificationAnswerReceived()
subscribeNotificationRequestReceived()
subscribeNotificationAnswerReceived()
userDataRequestReceived()
userDataAnswerReceived()
これらのメソッドは、受信したDiameterメッセージを処理します。
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)
他のDiameterアプリケーションと同様、Shアプリケーションは、Diameterスタックとの間でイベントを送受信できます。Diameterアプリケーションからイベントを受信するには、ユーザーはDiameterShListener実装でprocessEvent(DiameterEvent)コールバックを実装する必要があります。
次のオプションでは、アカウンティング・アプリケーションで処理される機能を指定します。これはプロパティ(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アプリケーションによって実行される手順を詳細に説明します。Rf Java APIを使用してアカウンティング・クライアントとアカウンティング・サーバー間でアカウンティング情報を交換する方法を理解してください。
次の図は、イベントベースの請求を行うために、Diameterオフライン・インタフェースで必要なトランザクションを示しています。次の例は、アカウンティング・クライアントとアカウンティング・サーバー間のコールの流れを示しています。
ネットワーク要素(クライアントとして機能)は、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スタックのインスタンスは、次のように作成できます。
メソッドDiameterFactory.getInstance()を使用して、DiameterFactoryクラスのインスタンスmyFactoryを取得します。
メソッドmyFactory.createDiameterStack()を使用して、DiameterStackクラスのインスタンスmyStackを作成します。
Diameterスタックを定義したら、現在のアカウンティング・アプリケーション・オブジェクトをインスタンス化できます。アカウンティングDiameterアプリケーションは、2つのインタフェースDiameterRfProviderおよびDiameterRfListenerのインスタンスによって表されます。前者は高レベルのユーザー・コードで使用されるアカウンティングDiameterアプリケーションを表します。後者はDiameterスタックで使用されるアカウンティングDiameterアプリケーションを表します。DiameterRfProviderインタフェースは、アカウンティング・メッセージ(Accounting-Request(ACR)とAccounting-Answer(ACA))を送信し、アプリケーションの動作を制御するために、高レベルのユーザー・コードによって使用されます。DiameterRfListenerインタフェースで定義されているすべてのコールバック・メソッドは、これらのアカウンティング・メッセージと一部のイベントをユーザー・コードに送信するために、Diameterスタックによって使用されます。
Rfプロバイダは次のように作成されます。
メソッドmyStack.createDiameterRfProvider()を使用して、DiameterRfProviderのインスタンスmy Rf Providerを作成します。インスタンス化は、xmlディクショナリに構成された名前と一致するアプリケーション名で行われ、すべての着信メッセージが受信されるように、その名前がリスナーに追加されます。プロバイダの作成中に渡されるパラメータには、セクション[3.2.6]で定義済の一式のアカウンティング・オプションがあり、refFSMは実行するFSMの参照です。
3GPP Rfインタフェース・ディクショナリは、getRfDictionary()によって返され、Diameterスタックによって拡張される必要があります。
実際のアカウンティング・アプリケーションで柔軟性を高めるため、アプリケーション固有のAVPとコマンド・コードを使用してディクショナリを拡張できます。使用するメソッドはmyStack.extendGrammar(myDictionnary)です。Rfリスナーは次のように作成および登録されます。
DiameterRfListenerImplはDiameterRfListenerインタフェースの実装で、アプリケーション・プログラマが実装できます。myRfListenerはDiameterRfListenerImplのインスタンスです。
メソッドsetDiameterRfListener()を使用して、作成したリスナーmyRfListenerにmyRfProviderを追加します。
アカウンティング・アプリケーションが1つ以上のトランスポート・アドレスで着信接続をリスニングするには、DiameterListeningPointインタフェースのインスタンスを1つ以上作成する必要があります。リスニング・ポイントを作成するとすぐに、Diameterスタックは、createDiameterRoute()メソッドを使用して宣言できるリモート・ピアからの着信接続を受け入れる準備ができます。
メソッドmyStack.createDiameterListeningPoint()を使用して、DiameterListeningPointのインスタンスLocalURIからリスニング・ポイントを作成します。
メソッドmyStack.createDiameterRoute()を使用して、ルート構成を作成します。ただし、リスナーでisUnknownPeerAuthorized()コールバックが実装されている場合、この手順は、サーバー・プロセスには必須ではありません。このコールバックは、Diameterスタックがルーティング表で宣言されていないピアから接続リクエストを受信したときにコールされます。接続は、このメソッドがtrueを返した場合のみ受け入れられます。
初期化および構成フェーズが終了すると、アカウンティングDiameterアプリケーションはDiameterアカウンティング・メッセージ(ACR/ACA)を送受信できるようになります。
Accounting Requestは次のように作成されます。
クライアント側で、メソッドgetDiameterRfMessageFactory()を使用して、DiameterRfMessageFactoryクラスのインスタンスmyDiameterRfMessageFactoryを取得します。
メソッドcreateAccountingRequest()を使用して、クライアント側のAccounting Requestを作成します。これはDiameterMessageクラスのインスタンスです。
すべての着信メッセージは、DiameterRfListenerインタフェースを介してユーザーのアカウンティング・アプリケーションに届けられます。アカウンティング・メッセージ(ACR/ACA)がクライアント側またはサーバー側で受信されると、プログラマによって実装された対応するコールバックがコールされます。たとえば、Accounting-Request(ACR)を受信した場合は、accountingRequestReceived()コールバックがコールされます。それ以外の場合はすべて、受信したメッセージはアカウンティング・アプリケーションのプログラマが実装したmyRfListener.processEvent()を介して届けられます。
メソッドcreateClientDiameterAcctSession()を使用して、クライアントDiameterセッション、DiameterSessionのインスタンスを作成します。
メソッドsendMessage()を使用して、作成したAccounting-Request(ACR)のmyACRをサーバー側に送信します。
メソッドaccountingRequestReceived(event)を使用して、受信したイベントに含まれている着信Accounting-Request(ACR)メッセージを処理します。受信したリクエストからサーバー・セッションを作成します。サーバー側のこのセッションは、アンサーの送信後すぐに削除できます。
Accounting-Answerは次のように作成されます。
サーバー側で、メソッドgetDiameterRfMessageFactory()を使用して、DiameterRfMessageFactoryクラスのインスタンスmyDiameterRfMessageFactoryを取得します。
メソッドcreateAccountingAnswer()を使用して、サーバー側のAccounting-Answerを作成します。これはDiameterMessageクラスのインスタンスです。
すべての着信メッセージは、DiameterRfListenerインタフェースを介してユーザーのアカウンティング・アプリケーションに届けられます。
作成したAccounting-AnswerのmyACAをクライアント側へ送信します。
メソッドaccountingAnswerReceived(event)を使用して、受信したイベントに含まれている着信Accounting-Answer(ACA)メッセージを処理します。