Oracle Tuxedo Mainframe Adapter for TCP (IMS)(以後TMA TCP for IMSと呼ぶ)のクライアントおよびサーバーのトランザクションは、通常のIMS MPPトランザクションですが、Oracle TMA TCP for IMSゲートウェイをOTMAクライアントとして実行している場合は、FastPathトランザクションもそれに該当します。IMSがサポートしているアプリケーション・プログラミング言語であれば、どの言語でもトランザクションを記述できます。このドキュメントに記載されているサンプル・トランザクションのソース・コードは、Oracle TMA TCP for IMSのSOURCE
配布ライブラリに収録されています。次のサンプル・トランザクションは、このドキュメントに記載されているものです。
IMSサーバー・トランザクションは、指定されたサービスを提供する役割を担い、そのサービスに対するクライアント・リクエストを処理します。サーバー・リクエストの処理は、次の順番に従います。
リストE-1は簡単なエコー・トランザクションです。受け取ったリクエスト・データを単にそのままレスポンスとして戻します。
CBL APOST *****************************************************************
FILE: BEASVR01
PURPOSE: SAMPLE IMS SERVER TRANSACTION FOR USE WITH
BEA TMA TCP FOR IMS
COMMENTS: THIS IS A SIMPLE ECHO SERVER TRANSACTION THAT ISSUES A
RESPONSE CONSISTING OF THE SAME DATA AS RECEIVED.
LANGUAGE: COBOL
COPYRIGHT (C) 1997 BEA SYSTEMS, INC. ALL RIGHTS RESERVED
*****************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. BEASVR01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 BEAGW PIC X(08) VALUE 'BEATCPI '.
*****************************************************************
* REQUEST MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
*****************************************************************
* RESPONSE MESSAGE *
*****************************************************************
01 REQUEST-MESSAGE.
(1) COPY SERVER.
05 USER-DATA PIC X(512).
LINKAGE SECTION.
****************************************************************
* I/O PCB *
****************************************************************
01 01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
*****************************************************************
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
PERFORM IOPCB-GET THRU IOPCB-GET-EXIT.
PERFORM ECHO-MSG THRU ECHO-MSG-EXIT.
PERFORM ISRT-MSG THRU ISRT-MSG-EXIT.
GO TO 9999-RETURN.
*****************************************************************
* RETRIEVE THE REQUEST MESSAGE FROM THE IMS QUEUE *
*****************************************************************
IOPCB-GET.
(2) CALL 'CBLTDLI' USING GU, IOPCB, REQUEST-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
IOPCB-GET-EXIT.
EXIT.
*****************************************************************
* COMPOSE THE RESPONSE MESSAGE *
*****************************************************************
ECHO-MSG.
* THE RESPONSE MESSAGE HAS THE SAME BASIC FORMAT AS
* THE REQUEST MESSAGE. WE CHANGE THE TRAN CODE TO THAT
* OF THE DESTINATION. NOTE THAT THE FIELD
* BEA-RESERVED MUST BE COPIED INTACT FROM THE
* REQUEST MESSAGE TO THE RESPONSE MESSAGE. FOR RE-
* SPONSE DATA, WE SIMPLY RETURN THE REQUEST DATA.
* HENCE THIS IS AN ECHO TRANSACTION.
(3) MOVE REQUEST-MESSAGE TO RESPONSE-MESSAGE.
(4,6) MOVE BEAGW TO TRAN-CODE IN RESPONSE-MESSAGE.
ECHO-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO IMS QUEUE *
*****************************************************************
ISRT-MSG.
* (5) CALL 'CBLTDLI' USING ISRT, IOPCB, RESPONSE-MESSAGE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
ISRT-MSG-EXIT.
EXIT.
*****************************************************************
* INSERT RESPONSE MESSAGE TO ALTERNATE PCB *
*****************************************************************
PCB-ISRT.
9999-RETURN.
GOBACK.
SERVER
というCOBOLコピーブックに掲載されています。それに相当するC言語のヘッダーは、BEATCPI.H
ヘッダー・ファイルに掲載されています。どちらもOracle TMA TCP for IMSのINCLUDE
配布ライブラリに収録されています。GU
(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューからリクエスト・メッセージを取得します。サーバー・リクエスト・メッセージは常に単体のメッセージ・セグメントにフォーマットされるため、GN
(次のセグメントを取得)呼出しは厳密に言えば不要です。USER-DATA
(ユーザー定義のリクエスト・データ)は、単にリクエスト・メッセージからレスポンス・メッセージにコピーします。TRAN-CODE
を、Oracle TMA TCP for IMSのトランザクション・コードに設定します(この例ではBEAGW="BEATCPI
ですが、インストール環境によっては名前が異なることもあります)。ISRT
(挿入)呼出しを発行して、Oracle TMA TCP for IMSにレスポンスを戻すためのメッセージをIMSメッセージ・キューに挿入します。
IMSクライアント・トランザクションは、Oracle TMA TCP for IMSを介してアクセス可能な指定のリモート・サービスに対するリクエストを発行します。IMSクライアント・リクエストは、サーバー・リクエストとは異なり、2つのフェーズに分かれ、リクエスト・フェーズとくレスポンス・フェーズの順に処理します。リクエストとレスポンスを処理する際には、それぞれ別々のトランザクション(たとえばT1
とT2
)を実行する必要があります。
次のIMSクライアント・リクエスト・トランザクションのサンプルは、リモート・システムのTOUPPER
というサービスにリクエストを発行します。TOUPPER
サービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRQ01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA. PIC X(91) VALUE SPACES.
10 MI-DATA
(1) 01 CLIENT-REQUEST.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(2) CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(3) MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE 'BEACRP01' TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO
CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.
(4) MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.
(5) COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.
(6) CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(7) CALL 'CBLTDLI' USING ISRT, ALTPCB, CLIENT-REQUEST.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(8) CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(9) 9999-RETURN.
GOBACK.
CLIENT
というCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.H
ヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE
配布ライブラリに収録されています。GU
(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューから端末入力メッセージを取得します。CRR-TRANCODE
をTMA TCP for IMSゲートウェイのトランザクション・コードに設定します(この例ではBEATCPI
になっていますが、インストール環境によっては異なることもあります)。BEA-RESERVED
-1 をバイナリ・ゼロに初期化する必要があります。CRR-HEADER-LEN
をクライアント・リクエストのヘッダーの長さ(96バイト)に設定します。CRR-REQUEST-TYPE
を、レスポンスを要求することを示す1に設定します。CRR-RESPONSE-FORMAT
を、レスポンスを1つのメッセージ・セグメントで戻すことを示す0に設定します。CRR-ORIGIN-TERMINAL
を、IOPCB
から取得したリクエスト元の端末の名前(LTERM
)に設定します。CRR-SERVICE-NAME
をリクエスト対象のサービスの名前(TOUPPER
)に設定します。この名前は、TMA TCP for IMSにローカル定義されているサービスの名前でなければなりません。サービスを提供するリモート・システムに定義されているサービス名と、この名前は一致することもあれば一致しないこともあります。CRR-RESPONSE-TRAN
を指定のレスポンス・トランザクション(BEACRP01
)の名前に設定します。CRR-REQUEST-DATA-LEN
を送信対象のユーザー定義リクエスト・データの長さに設定します。CRR-MAX-RESPONSE-LEN
を、適応可能なレスポンス・データの最大長に設定します。BEA-RESERVED-2
をバイナリ・ゼロに初期化する必要があります。LL
)をクライアント・リクエスト・メッセージ全体の長さ(ヘッダー + コンテキスト・データ + リクエスト・データ)に設定します。CHNG
(変更)呼出しを発行して、宛先をTMA TCP for IMSゲートウェイのトランザクション・コードに設定します(この例ではBEATCPI
ですが、インストール環境によっては名前が異なることもあります)。ISRT
(挿入)呼出しを発行して、クライアント・リクエスト・メッセージをIMSメッセージ・キューに挿入します。この例では、クライアント・リクエスト・メッセージを単体のメッセージ・セグメントにフォーマットしていますが、必要に応じて複数のメッセージ・セグメントにフォーマットしてもかまいません。PURG
呼出しを発行して、メッセージが完了したことを通知します。たとえば、これ以上メッセージ・セグメントはない場合などです。 次のIMSクライアント・レスポンス・トランザクションのサンプルは、リモート・システムのTOUPPER
というサービスに対するリクエストからのレスポンスを処理します。TOUPPER
サービスは、大文字に変換したリクエスト・データで構成されるレスポンスを戻します。
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRP01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU'.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
1 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA
10 MO-DATA PIC X(91) VALUE SPACES.
(1) 01 CLIENT-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
(7) 05 CRR-RESPONSE-DATA-LEN PIC 9(08) COMP.
(7) 05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
(3) 05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC S9(08) COMP.
05 CRR-REASON-CODE PIC S9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
(6) 05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-RESPONSE-AREA.
10 CRR-RESPONSE-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 ALTPCB
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
01 IOPCB.
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(2) CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(4) IF CRR-ERROR-CODE EQUAL 0 AND
(5) CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
(8) CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO 9999-RETURN.
9999-RETURN.
GOBACK.
CLIENT
というCOBOLコピーブックに記述されています。それに相当するC言語のヘッダーはBEATCPI.H
ヘッダー・ファイルに記述されています。どちらもTMA TCP for IMSのINCLUDE
配布ライブラリに収録されています。GU
(固有セグメントを取得)呼出しを発行して、IMSメッセージ・キューからクライアント・レスポンス・メッセージを取得します。CRR-RESPONSE-FORMAT
は、元のリクエストに指定されたとおりの値で、レスポンスのフォーマットが単体のセグメントなのか複数のセグメントなのかを表します。マルチセグメント形式のレスポンスが指定された場合、レスポンス・メッセージはレスポンス・ヘッダー、コンテキスト・データ、レスポンス・データの3つのセグメントで構成されます。CRR-ERROR-CODE
はエラー発生の有無を表します。このフィールドがゼロの場合は、リクエストが正常に処理されたことを表します。それ以外の場合は、エラーが発生しており、エラー・コードによってエラー・タイプが示されます。レスポンスを処理する前に、エラー・コードをチェックする必要があります。CRR-REASON-CODE
が補足情報を示すことがあります。値がゼロの場合は、補足情報はないことを表します。CRR-RESPONSE-DATA-LEN
には、戻されるレスポンス・データの長さが格納されます。切捨てのエラーが発生した場合でも、このフィールドにはレスポンス・データの実際の長さ(切捨て前の長さ)が格納されます。戻されるレスポンス・データのうち、CRR-MAX-RESPONSE-LEN.
に指定された長さを超えた分は切り捨てられます。CRR-ORIGIN-TERMINAL
に保持されたLTERM
に従って、元の(リクエスト元の)端末に書き込まれます。この目的で使用する場合は、代替PCB
を使用する必要があります。必要があれば、IMSのクライアント・リクエストとレスポンスのトランザクションの役割を1つの応用トランザクションにまとめることができます。ただし、動的に実行する内容に応じて、該当する処理(リクエストまたはレスポンス)を実行するためのロジックを追加する必要があります。
CBL APOST
IDENTIFICATION DIVISION.
PROGRAM-ID. BEACRR01.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-370.
OBJECT-COMPUTER. IBM-370.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 GU PIC X(04) VALUE 'GU '.
77 CHNG PIC X(04) VALUE 'CHNG'.
77 ISRT PIC X(04) VALUE 'ISRT'.
77 PURG PIC X(04) VALUE 'PURG'.
01 MSG-IN.
05 MI-LL PIC S9(04) COMP VALUE +0.
05 MI-ZZ PIC S9(04) COMP VALUE +0.
05 MI-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MI-AREA.
10 MI-DATA PIC X(91) VALUE SPACES.
01 MSG-OUT.
05 MO-LL PIC S9(04) COMP VALUE +0.
05 MO-ZZ PIC S9(04) COMP VALUE +0.
05 MO-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 MO-AREA.
10 MO-DATA PIC X(91) VALUE SPACES.
(1) 01 CLIENT-REQUEST-RESPONSE.
05 CRR-LL PIC 9(04) COMP VALUE 0.
05 CRR-ZZ PIC 9(04) COMP VALUE 0.
05 CRR-TRANCODE PIC X(08) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 BEA-RESERVED-1 PIC X(03) VALUE LOW-VALUES.
05 CRR-HEADER-LEN PIC 9(08) COMP.
05 CRR-CONTEXT-DATA-LEN PIC 9(08) COMP.
05 CRR-REQUEST-DATA-LEN PIC 9(08) COMP.
05 CRR-MAX-RESPONSE-LEN PIC 9(08) COMP.
05 CRR-REQUEST-TYPE PIC 9(08) COMP.
05 CRR-RESPONSE-FORMAT PIC 9(08) COMP.
05 CRR-ERROR-CODE PIC 9(08) COMP.
05 CRR-REASON-CODE PIC 9(08) COMP.
05 CRR-SERVICE-NAME PIC X(16) VALUE LOW-VALUES.
05 CRR-RESPONSE-TRAN PIC X(08) VALUE LOW-VALUES.
05 CRR-ORIGIN-TERMINAL PIC X(08) VALUE LOW-VALUES.
05 BEA-RESERVED-2 PIC X(16) VALUE LOW-VALUES.
05 CRR-CONTEXT-AREA.
10 CRR-CONTEXT-DATA PIC X(31) VALUE SPACES.
05 CRR-REQUEST-AREA.
10 CRR-REQUEST-DATA PIC X(100) VALUE SPACES.
LINKAGE SECTION.
01 IOPCB.
05 LTERM PIC X(08).
05 FILLER PIC X(02).
05 IOPCB-STATUS PIC X(02).
05 FILLER PIC X(28).
01 01 ALTPCB.
05 ALTPCB-DEST PIC X(08).
05 FILLER PIC X(02).
05 ALTPCB-STATUS PIC X(02).
05 FILLER PIC X(10).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING IOPCB, ALTPCB.
(3) IF LTERM = SPACES OR LOW-VALUES
THEN PERFORM RESPONSE-MESSAGE THRU RESPONSE-MESSAGE-EXIT
ELSE PERFORM REQUEST-MESSAGE THRU REQUEST-MESSAGE-EXIT.
9999-RETURN.
GOBACK.
REQUEST-MESSAGE.
CALL 'CBLTDLI' USING GU, IOPCB, MSG-IN.
IF IOPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
MOVE 'BEATCPI' TO CRR-TRANCODE.
MOVE 96 TO CRR-HEADER-LEN.
MOVE 1 TO CRR-REQUEST-TYPE.
MOVE 0 TO CRR-RESPONSE-FORMAT.
MOVE LTERM TO CRR-ORIGIN-TERMINAL.
MOVE 'TOUPPER' TO CRR-SERVICE-NAME.
MOVE MI-TRANCODE TO CRR-RESPONSE-TRAN.
MOVE ALL 'A' TO CRR-REQUEST-DATA.
MOVE LENGTH OF CRR-REQUEST-AREA TO CRR-REQUEST-DATA-LEN.
MOVE CRR-REQUEST-DATA-LEN TO CRR-MAX-RESPONSE-LEN.
MOVE ALL 'B' TO CRR-CONTEXT-DATA.
MOVE LENGTH OF CRR-CONTEXT-AREA TO CRR-CONTEXT-DATA-LEN.
COMPUTE CRR-LL = CRR-REQUEST-DATA-LEN +
CRR-CONTEXT-DATA-LEN +
CRR-HEADER-LEN.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-TRANCODE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
CALL 'CBLTDLI' USING ISRT, ALTPCB,CLIENT-REQUEST-RESPONSE.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO REQUEST-MESSAGE-EXIT.
REQUEST-MESSAGE-EXIT.
EXIT.
RESPONSE-MESSAGE.
CALL 'CBLTDLI' USING GU, IOPCB, CLIENT-REQUEST-RESPONSE.
IF IOPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
IF CRR-ERROR-CODE EQUAL 0 AND
CRR-REASON-CODE EQUAL 0
THEN MOVE 'PASSED' TO MO-DATA
ELSE MOVE 'FAILED' TO MO-DATA.
MOVE CRR-TRANCODE TO MO-TRANCODE.
MOVE 84 TO MO-LL.
CALL 'CBLTDLI' USING CHNG, ALTPCB, CRR-ORIGIN-TERMINAL.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
CALL 'CBLTDLI' USING ISRT, ALTPCB, MSG-OUT.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
CALL 'CBLTDLI' USING PURG, ALTPCB.
IF ALTPCB-STATUS NOT = SPACES
GO TO RESPONSE-MESSAGE-EXIT.
RESPONSE-MESSAGE-EXIT.
EXIT.