RECEIVE_ALLOCATE_EX
RECEIVE_ALLOCATE_EX動詞は、アタッチ マネージャーの登録を許可する新しい VCB 構造体を受け入れます。
構文
typedef struct receive_allocate_ex {
unsigned short opcode;
unsigned char opext;
unsigned char format;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char tp_name[64];
unsigned char tp_id[8];
unsigned long conv_id;
unsigned char sync_level;
unsigned char conv_type;
unsigned char user_id[10];
unsigned char lu_alias[8];
unsigned char plu_alias[8];
unsigned char mode_name[8];
unsigned char reserv3[2];
unsigned long conv_group_id;
unsigned char fqplu_name[17];
unsigned char pip_incoming;
unsigned long timeout;
unsigned char password[10];
unsigned char reserv5[2];
unsigned char attach_id[8];
}
メンバー
opcode
指定されたパラメーター: RECEIVE_ALLOCATE_EX
opext
指定されたパラメーター。 動詞操作拡張機能AP_BASIC_CONVERSATIONを指定します。
format
予約済みパラメーター。
primary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるプライマリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。
secondary_rc
返されたパラメーター。 動詞の完了時に APPC によって設定されるセカンダリ リターン コードを指定します。 有効なリターン コードは、発行された APPC 動詞によって異なります。
tp_name
指定されたパラメーター。 tp_nameは、返されるパラメーターのみです。 ただし、アプリケーションは、 tp_name (つまり 64 文字) を保持し、名前を EBCDIC スペース (16 進数 X'40') に初期化するのに十分なバッファー領域を割り当てる必要があります。
返される動詞には、リモート システムによって送信された実際の TP 名が含まれます。
tp_id
返されたパラメーター。 ローカル TP を識別します。
conv_id
返されたパラメーター。 会話識別子を提供します。 これは、2 つのパートナー TP 間で APPC が確立した会話を識別します。
sync_level
返されたパラメーター。 会話の同期レベルを指定します。 これは、TP がデータの受信確認を要求し、データの受信を確認できるかどうかを決定します。
AP_NONE は、この会話で確認処理を使用しないことを指定します。
AP_CONFIRM_SYNC_LEVEL は、TP がこの会話で確認処理を使用できることを指定します。
AP_SYNCPT は、この会話で TP が同期ポイント レベル 2 の確認処理を使用できることを指定します。
conv_type
返されたパラメーター。 MC_ALLOCATEまたは ALLOCATE を使用して、パートナー TP によって選択される会話の種類を指定します。 返される値は次のとおりです。AP_BASIC_CONVERSATION
AP_MAPPED_CONVERSATION
user_id
これは、リモート・システムから送信される EBCDIC user_idです。lu_alias
指定されたパラメーター。 ローカル LU エイリアス。 アタッチ マネージャーを登録するには、指定する必要があります。 Host Integration Server サブドメイン内の特定のローカル LU エイリアスに登録できるアタッチ マネージャーは 1 つだけです。 このlu_aliasに対して別のアタッチ マネージャー プロセスが既に登録されている場合は、次のエラーが返されます。primary_rc = AP_STATE_CHECK (0x0002) secondary_rc = AP_LU_ALREADY_REGISTERED (0x0000050A)
これは、Host Integration Server がこのアタッチ マネージャーを登録できなかったことを示します。
plu_alias
返されたパラメーター。 (受信割り当てを開始した) パートナー LU がローカル TP に認識されるエイリアスを提供します。 これは ASCII 文字列です。mode_name
返されたパラメーター。 パートナー TP で MC_ALLOCATE または ALLOCATE によって指定されたモード名を提供します。 これは、構成時に定義された一連のネットワーク特性の名前です。 mode_nameは A EBCDIC 型の文字列です。reserv3
予約済みパラメーター。conv_group_id
会話グループ識別子。fqplu_name
この戻り値パラメーターは、完全修飾 LU 名を提供します。pip_incoming
指定されたパラメーター。 このアタッチ マネージャーが PIP データを含む受信 FMH-5 アタッチを受け入れる場合は、これを AP_YES に設定します。 それ以外の場合は、これを [AP_NO] に設定します。返されるパラメーター: PIP データが受信 Attach に存在する場合、これは AP_YES に設定されます。 PIP データが存在しない場合は、 AP_NOに設定されます。
timeout
タイムアウト (秒単位)。 0xFFFFFFFFの値を使用すると、永遠に待機できます。password
戻りパラメーター: リモート・システムから送信された EBCDIC パスワードです。 リモート システムで "パスワードの置換" (パスワード暗号化) がサポートされている場合、暗号化されたパスワードは RECEIVE_ALLOCATE_EXで受信されます。 このパスワードを復号化する機能がないため、アプリケーションはユーザーの資格情報を検証できません。reserv5
予約済みパラメーター。attach_id
返されたパラメーター。 常に 0 に設定します。 このフィールドは、Microsoft 以外の SNA 製品とのソース互換性のために定義されています。
注釈
Host Integration Server では、呼び 出し可能 なトランザクション プログラムの設計と実装を簡略化するために、APPC RECEIVE_ALLOCATE_EXとRECEIVE_ALLOCATE_EX_END がサポートされています。 この関数を使用すると、APPC アプリケーションは、特定のローカル APPC LU 経由でホスト統合サーバーによって受信されたすべての受信 FMH-5 Attach 要求を受信し、アプリケーションが "アタッチ マネージャー" として機能できるようにします。アタッチ マネージャーは、LU6.2 会話を開始するための受信 FMH-5 アタッチ要求を処理するプログラムです。 APPC アプリケーションが (RECEIVE_ALLOCATE_EX ではなく) RECEIVE_ALLOCATEを呼び出すと、Host Integration Server によってアタッチ マネージャー機能が処理されます。 APPC アプリケーション内にアタッチ マネージャー機能を実装するには、次の処理が行われます。
アプリケーションは、 RECEIVE_ALLOCATE_EX 関数にローカル APPC LU エイリアスを提供し、EBCDIC スペース (16 進数 X'40') のtp_nameを指定します。
Host Integration Server は、そのローカル APPC LU を使用して LU6.2 セッション経由で受信 FMH-5 アタッチ要求を受信すると、Host Integration Server によってアプリケーションに要求がルーティングされます。
RECEIVE_ALLOCATE_EXが完了すると、アプリケーションは次の処理を行います。
FMH-5 アタッチの受け入れまたは拒否
会話レベルのセキュリティの確認と
アタッチ要求を受け入れる場合は、Win32 プロセス コンテキスト内で要求を完全に処理します。
新しい着信アタッチ要求のリッスンを停止するために、アプリケーションは RECEIVE_ALLOCATE_EX_ENDを呼び出します。
プロセスがRECEIVE_ALLOCATE_EXを発行 した後、プロセスは特定の TP 名 を持つRECEIVE_ALLOCATE を呼び出さないでください。 同様に、プロセスが RECEIVE_ALLOCATE を呼び出す場合、そのプロセスは後で RECEIVE_ALLOCATE_EX を呼び出すべきではありません。 言い換えると、呼び出し可能 TP をサポートするプロセスの間、プロセスは排他的に RECEIVE_ALLOCATEまたは RECEIVE_ALLOCATE_EXを呼び出す必要がありますが、両方を呼び出す必要はありません。
メッセージ交換 ID は独自のアプリケーション コンテキスト内でのみ有効であるため、アプリケーションが受信アタッチ要求を別のプロセスにディスパッチすることはできません。
Note
: ホスト統合サーバーでは、アタッチ マネージャー アプリケーションの自動起動はサポートされていません。 つまり、アプリケーションが RECEIVE_ALLOCATE_EX を呼び出す場合、着信アタッチ要求がローカル LU 経由で到着する前に、アプリケーションを開始する必要があります。
現在の仕様では、セキュリティ インジケーター (FMH-5 アタッチのバイト 4) は返されません。 そのため、アプリケーションは、次を含む受信添付要求に対応する必要があります。
user_idもパスワードも (アタッチでセキュリティが送信されない場合)、
user_idのみ ("既に検証済み" のアタッチの場合など)、または
user_idとパスワードの両方 (ユーザーの承認が必要な場合)。
LU6.2 BIND 要求では、Host Integration Server は、ユーザー セキュリティ、既に検証済み、パスワードの置換を含む受信 FMH-5 アタッチ要求のサポートを示します。 Host Integration Server では、永続的な検証を要求する受信アタッチはサポートされていません。
RECEIVE_ALLOCATE_EX関数を使用すると、tp_nameがすべての EBCDIC スペース (X'40') に設定され、ローカル LU 別名が lu_alias フィールドに指定されている場合、アプリケーションは接続マネージャーとして登録できます。 特定のlu_aliasのアタッチ マネージャーとして登録すると、Host Integration Server は、lu_alias経由で受信したすべての受信アタッチをアプリケーションにルーティングします。 Host Integration Server が受信 FMH-5 アタッチ要求をルーティングする方法の詳細については、以下を参照してください。
アプリケーションは 、RECEIVE_ALLOCATE_EX を複数回呼び出して、1 つ以上のローカル LU のアタッチ マネージャーとして登録できます。 ただし、SNA サブドメイン内の特定のlu_aliasに登録できるアタッチ マネージャーは 1 つだけです (つまり、すべてのホスト統合サーバーと接続されているホスト統合サーバー クライアント全体)。 アプリケーションで空白のtp_nameと空白のlu_aliasを指定することはできません。 つまり、アプリケーションは、SNA サブドメインのすべての受信アタッチ要求を受信する既定のアタッチ マネージャーとして登録できません。
RECEIVE_ALLOCATE_EXが完了すると、アプリケーションは次の処理を行います。
添付ファイルを受け入れるかどうかを決定します。 Host Integration Server には、トランザクション プログラム (TP) を構成するためのメカニズムはありません。 アプリケーションには、サポートする tp 名を定義する独自の手段が必要です。
受け入れられた場合、アプリケーションは、新しい会話の処理を処理するために、メッセージ交換セキュリティ属性 (user_id、パスワード) を検証する必要があります。
tp_idとconv_idを別の処理プロセスに渡すことはできません。 すべての TP 処理は、アプリケーションによって提供される必要があります。
アプリケーションがアタッチ要求を拒否することを選択した場合、[ MC_]DEALLOCATE を 呼び出す必要があります。完了したRECEIVE_ALLOCATE_EXで受信した conv_idと、dealloc_type パラメーターの適切な理由コードを指定します。これらの新しい拡張コードを使用します。
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_EXPIRED 0x10
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_INVALID 0x11
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED 0x12
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_INVALID 0x13
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_MISSING 0x14
#define AP_DEALLOC_SECURITY_NOT_VALID_PASSWORD_MISSING 0x15
#define AP_DEALLOC_SECURITY_NOT_VALID_GROUP_INVALID 0x16
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP 0x17
#define AP_DEALLOC_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP 0x18
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU 0x19
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU 0x1A
#define AP_DEALLOC_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM 0x1B
#define AP_DEALLOC_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED 0x1C
#define AP_DEALLOC_SECURITY_NOT_VALID_PROCESSING_FAILURE 0x1D
#define AP_DEALLOC_SECURITY_NOT_VALID_PROTOCOL_VIOLATION 0x1E
アプリケーションが上記のdealloc_typeを設定すると、ホスト統合サーバーは、FMH-5 Attach 要求を拒否するときにリモート システムに送信される FMH-7 エラー内で対応するセンス コードを送信します。
#define AP_SECURITY_NOT_VALID_PASSWORD_EXPIRED APPC_FLIPL(x080fff00)
#define AP_SECURITY_NOT_VALID_PASSWORD_INVALID APPC_FLIPL(x080fff01)
#define AP_SECURITY_NOT_VALID_USERID_REVOKED APPC_FLIPL(x080fff02)
#define AP_SECURITY_NOT_VALID_USERID_INVALID APPC_FLIPL(x080fff03)
#define AP_SECURITY_NOT_VALID_USERID_MISSING APPC_FLIPL(x080fff04)
#define AP_SECURITY_NOT_VALID_PASSWORD_MISSING APPC_FLIPL(x080fff05)
#define AP_SECURITY_NOT_VALID_GROUP_INVALID APPC_FLIPL(x080fff06)
#define AP_SECURITY_NOT_VALID_USERID_REVOKED_IN_GROUP APPC_FLIPL(x080fff07)
#define AP_SECURITY_NOT_VALID_USERID_NOT_DEFD_TO_GROUP APPC_FLIPL(x080fff08)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_AT_REMOTE_LU APPC_FLIPL(x080fff09)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_FROM_LOCAL_LU APPC_FLIPL(x080fff0A)
#define AP_SECURITY_NOT_VALID_NOT_AUTHORIZED_TO_TRANSACTION_PROGRAM APPC_FLIPL(x080fff0B)
#define AP_SECURITY_NOT_VALID_INSTALLATION_EXIT_FAILED APPC_FLIPL(x080fff0C)
#define AP_SECURITY_NOT_VALID_PROCESSING_FAILURE APPC_FLIPL(x080fff0D)
#define AP_SECURITY_NOT_VALID_PROTOCOL_VIOLATION APPC_FLIPL(x080fff0E)
RECEIVE_ALLOCATE_EXを呼び出す前に、アプリケーションでローカル APPC LU の構成設定を確認して、LU が同期レベル 2 をサポートしているか、既定の LU プールのメンバーであるかどうかを判断する必要があります。 これを行うには、拡張 GET_LU_STATUS API を使用します。
特定のローカル APPC LU のアタッチ マネージャーとして登録を解除するには、アプリケーションで RECEIVE_ALLOCATE_EX_END を呼び出す必要があります。以下に記載されています。 アプリケーションが複数のlu_aliasのアタッチ マネージャーとして登録されている場合は、lu_aliasごとに RECEIVE_ALLOCATE_EX_END を呼び出す必要があります。
アプリケーションは、受信アタッチ要求をタイムリーに処理するために、常に保留中の RECEIVE_ALLOCATE_EX を試行する必要があります。 アプリケーションが新しい RECEIVE_ALLOCATE_EXをポストできない場合、Host Integration Server は、アプリケーションがホスト統合サーバーで実行されている場合は最大 2,048 個の受信アタッチをキューに入れます。また、HIS クライアントで実行されている場合は 256 個までキューに入れます。 制限を超えた場合、Host Integration Server はセンス コード X'084B6031' または AP_TRANS_PGM_NOT_AVAIL_RETRYを使用してアタッチ要求を拒否します。