This program uses the Gateway-Library system programmer calls to do tracing and accounting at the host.
SYSAMP1: PROC OPTIONS(MAIN REENTRANT); /****** SYCPSAS1 - RPC REQUEST APPLICATION - PL/1 - CICS ********/ /* */ /* TRANID: SYS1 */ /* PROGRAM: SYCPSAS1 */ /* PLAN NAME: n/a */ /* FILES: n/a */ /* TABLES: n/a */ /* */ /* This program is executed via a client RPC request from sample */ /* dblib program 'SYS1'. The purpose of the program is primarily */ /* to demonstrate system programmer Server Library calls. */ /* */ /* Server Library calls: */ /* TDACCEPT accept request from client */ /* TDESCRIB describe a column */ /* TDFREE free TDPROC structure */ /* TDINFACT get accounting info */ /* TDINFLOG get logging info */ /* TDINFSPT get specific tracing info */ /* TDINIT establish environment */ /* TDLSTSPT get list of active specific trace tran ids */ /* TDRCVPRM retrieve rpc parameter from client */ /* TDRESULT describe next communication */ /* TDSETACT set accounting */ /* TDSETLOG set logging */ /* TDSETSPT set specific tracing */ /* TDSNDDON send results-completion to client */ /* TDSNDMSG send message to client */ /* TDSNDROW send row to client */ /* TDSTATUS get status information */ /* TDWRTLOG write user log record */ /* */ /**************************************************************/ /**************************************************************/ /* GATEWAY-LIBRARY PL/1 COPY BOOK */ /**************************************************************/ %INCLUDE SYGWPLI; /*------------------------------------------------------------*/ /* SERVER LIB ROUTINES DECLARATIONS */ /*------------------------------------------------------------*/ DCL TDACCEPT ENTRY OPTIONS(INTER ASSEMBLER), TDESCRIB ENTRY OPTIONS(INTER ASSEMBLER), TDFREE ENTRY OPTIONS(INTER ASSEMBLER), TDINFACT ENTRY OPTIONS(INTER ASSEMBLER), TDINFLOG ENTRY OPTIONS(INTER ASSEMBLER), TDINFSPT ENTRY OPTIONS(INTER ASSEMBLER), TDINIT ENTRY OPTIONS(INTER ASSEMBLER), TDLSTSPT ENTRY OPTIONS(INTER ASSEMBLER), TDRCVPRM ENTRY OPTIONS(INTER ASSEMBLER), TDRESULT ENTRY OPTIONS(INTER ASSEMBLER), TDSETACT ENTRY OPTIONS(INTER ASSEMBLER), TDSETLOG ENTRY OPTIONS(INTER ASSEMBLER), TDSETSPT ENTRY OPTIONS(INTER ASSEMBLER), TDSNDDON ENTRY OPTIONS(INTER ASSEMBLER), TDSNDMSG ENTRY OPTIONS(INTER ASSEMBLER), TDSNDROW ENTRY OPTIONS(INTER ASSEMBLER), TDSTATUS ENTRY OPTIONS(INTER ASSEMBLER), TDWRTLOG ENTRY OPTIONS(INTER ASSEMBLER); /*------------------------------------------------------------*/ /* BUILT IN FUNCTIONS DECLARATIONS */ /*------------------------------------------------------------*/ DCL ADDR BUILTIN, STG BUILTIN, STRING BUILTIN; /*------------------------------------------------------------*/ /* WORK AREAS */ /*------------------------------------------------------------*/ DCL 01 GW_LIB_MISC_FIELDS, 05 GWL_PROC PTR, 05 GWL_INIT_HANDLE PTR, 05 GWL_INFACT_STATUS FIXED BIN(31), 05 GWL_INFACT_FILENAME CHAR(08), 05 GWL_INFACT_RECORDS FIXED BIN(31), 05 GWL_INFLOG_GLOBAL FIXED BIN(31), 05 GWL_INFLOG_API FIXED BIN(31), 05 GWL_INFLOG_HEADER FIXED BIN(31), 05 GWL_INFLOG_DATA FIXED BIN(31), 05 GWL_INFLOG_TRACEID FIXED BIN(31), 05 GWL_INFLOG_FILENAME CHAR(08), 05 GWL_INFLOG_RECORDS FIXED BIN(31), 05 GWL_INFSPT_ENTRY FIXED BIN(31), 05 GWL_INFSPT_STATUS FIXED BIN(31), 05 GWL_INFSPT_OPTIONS FIXED BIN(31), 05 GWL_INFSPT_TRANID CHAR(04), 05 GWL_INFSPT_TRANID_L FIXED BIN(31), 05 GWL_LSTSPT_LIST(8) CHAR(08), 05 GWL_RC FIXED BIN(31), 05 GWL_RCVPRM_ID FIXED BIN(31) INIT(1), 05 GWL_RCVPRM_MAX_DATA_L FIXED BIN(31) INIT(2), 05 GWL_RCVPRM_DATA_L FIXED BIN(31) INIT(2), 05 GWL_SETSPT_ENTRY FIXED BIN(31), 05 GWL_SETSPT_OPTIONS FIXED BIN(31), 05 GWL_STATUS_NR FIXED BIN(31), 05 GWL_STATUS_DONE FIXED BIN(31), 05 GWL_STATUS_COUNT FIXED BIN(31), 05 GWL_STATUS_COMM FIXED BIN(31), 05 GWL_STATUS_RETURN_CODE FIXED BIN(31), 05 GWL_STATUS_SUBCODE FIXED BIN(31), 05 GWL_WRTLOG_MSG_L FIXED BIN(31) INIT(34), 05 GWL_WRTLOG_MSG CHAR(34) INIT('TEST MESSAGE FROM SYS1 TRANSACTION'); DCL 01 PARM_FIELDS, 05 PARM_REQUEST CHAR(02); DCL 01 PARM_FIELDS_VALUES STATIC, 05 PARM_REQUEST_INFACT CHAR(02) INIT('IA'), 05 PARM_REQUEST_INFLOG CHAR(02) INIT('IL'), 05 PARM_REQUEST_LSTSPT CHAR(02) INIT('IS'), 05 PARM_REQUEST_SETACT_ON CHAR(02) INIT('YA'), 05 PARM_REQUEST_SETACT_OFF CHAR(02) INIT('NA'), 05 PARM_REQUEST_SETLOG_ON CHAR(02) INIT('YL'), 05 PARM_REQUEST_SETLOG_OFF CHAR(02) INIT('NL'), 05 PARM_REQUEST_SETSPT_ON CHAR(02) INIT('YS'), 05 PARM_REQUEST_SETSPT_OFF CHAR(02) INIT('NS'), 05 PARM_REQUEST_WRTLOG CHAR(02) INIT('WL'); DCL 01 SNA_FIELDS, 05 SNA_SUBC FIXED BIN(31), 05 SNA_CONNECTION_NAME CHAR(08) INIT(' '); DCL 01 COLUMN_NAME_FIELDS STATIC, 05 CN_INFACT_STATUS CHAR(13) INIT('ACT_STATUS'), 05 CN_INFACT_FILENAME CHAR(12) INIT('ACT_FILENAME'), 05 CN_INFACT_RECORDS CHAR(11) INIT('ACT_RECORDS'), 05 CN_INFLOG_GLOBAL CHAR(10) INIT('LOG_GLOBAL'), 05 CN_INFLOG_API CHAR(07) INIT('LOG_API'), 05 CN_INFLOG_HEADER CHAR(10) INIT('LOG_HEADER'), 05 CN_INFLOG_DATA CHAR(08) INIT('LOG_DATA'), 05 CN_INFLOG_TRACEID CHAR(11) INIT('LOG_TRACEID'), 05 CN_INFLOG_FILENAME CHAR(12) INIT('LOG_FILENAME'), 05 CN_INFLOG_RECORDS CHAR(11) INIT('LOG_RECORDS'), 05 CN_LSTSPT_TRANID CHAR(06) INIT('TRANID'); DCL 01 COUNTER_FIELDS, 05 CTR_COLUMN FIXED BIN(31) INIT(0), 05 CTR_ROWS FIXED BIN(31) INIT(0); DCL 01 WORK_FIELDS, 05 WRKLEN1 FIXED BIN(31), 05 WRKLEN2 FIXED BIN(31), 05 WRK_DONE_STATUS FIXED BIN(31), 05 WRK_RPC CHAR(04) INIT('SYS1'), 05 WRK_LSTSPT_SS FIXED BIN(15), 05 WRK_TRANID CHAR(08); DCL 01 MESSAGE_FIELDS, 05 MSG_TYPE FIXED BIN(31), 05 MSG_SEVERITY_ERROR FIXED BIN(31) INIT(11), 05 MSG_NR_ERROR FIXED BIN(31) INIT(2), 05 MSG_RPC CHAR(04), 05 MSG_RPC_L FIXED BIN(31) INIT(4), 05 MSG_TEXT CHAR(20), 05 MSG_TEXT_L FIXED BIN(31), 05 MSG_SRVLIB, 10 MSG_SRVLIB_FUNC CHAR(08) INIT(' '), 10 FILLER CHAR(06) INIT(' RC = '), 10 MSG_SRVLIB_RC PIC '----9'; DCL 01 SWITCHES, 05 SEND_DONE BIT(01) INIT('1'B), 05 SEND_DONE_ERROR BIT(01) INIT('0'B), 05 SEND_DONE_OK BIT(01) INIT('1'B), 05 TRACING BIT(01) INIT('0'B), 05 TRACING_ON BIT(01) INIT('1'B); /*------------------------------------------------------------*/ INITIALIZE_PROGRAM: /*------------------------------------------------------------*/ /* ------------------------------------------------------*/ /* establish gateway environment */ /* ------------------------------------------------------*/ CALL TDINIT (DFHEIBLK, GWL_RC, GWL_INIT_HANDLE); /* ------------------------------------------------------*/ /* accept client request */ /* ------------------------------------------------------*/ CALL TDACCEPT (GWL_PROC, GWL_RC, GWL_INIT_HANDLE, SNA_CONNECTION_NAME, SNA_SUBC); /* ------------------------------------------------------*/ /* TDRESULT to validate kicked off via rpc request */ /* ------------------------------------------------------*/ CALL TDRESULT (GWL_PROC, GWL_RC); IF GWL_RC NE TDS_PARM_PRESENT THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDRESULT'; GO TO END_PROGRAM; END; /*------------------------------------------------------------*/ GET_PARM: /*------------------------------------------------------------*/ CALL TDRCVPRM (GWL_PROC, GWL_RC, GWL_RCVPRM_ID, PARM_REQUEST, TDSCHAR, GWL_RCVPRM_MAX_DATA_L, GWL_RCVPRM_DATA_L); IF PARM_REQUEST = PARM_REQUEST_INFACT THEN CALL TDINFACT_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_INFLOG THEN CALL TDINFLOG_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_LSTSPT THEN CALL TDLSTSPT_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETACT_ON THEN CALL TDSETACT_ON_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETACT_OFF THEN CALL TDSETACT_OFF_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETLOG_ON THEN CALL TDSETLOG_ON_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETLOG_OFF THEN CALL TDSETLOG_OFF_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETSPT_ON THEN CALL TDSETSPT_ON_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_SETSPT_OFF THEN CALL TDSETSPT_OFF_PROC; ELSE IF PARM_REQUEST = PARM_REQUEST_WRTLOG THEN CALL TDWRTLOG_PROC; /*------------------------------------------------------------*/ END_PROGRAM: /*------------------------------------------------------------*/ IF SEND_DONE = SEND_DONE_OK THEN WRK_DONE_STATUS = TDS_DONE_COUNT; ELSE DO; CALL SRVLIB_ERROR; WRK_DONE_STATUS = TDS_DONE_ERROR; CTR_ROWS = 0; END; CALL TDSNDDON (GWL_PROC, GWL_RC, WRK_DONE_STATUS, CTR_ROWS, TDS_ZERO, TDS_ENDRPC); CALL * (GWL_PROC, GWL_RC); EXEC CICS RETURN; /*------------------------------------------------------------*/ TDINFACT_PROC: PROC; /*------------------------------------------------------------*/ WRKLEN1 = STG(GWL_INFACT_STATUS); WRKLEN2 = STG(CN_INFACT_STATUS); CTR_COLUMN = CTR_COLUMN +1; MSG_SRVLIB_FUNC = 'TDESCRIB'; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFACT_STATUS, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFACT_STATUS, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFACT_EXIT; END; WRKLEN1 = STG(GWL_INFACT_FILENAME); WRKLEN2 = STG(CN_INFACT_FILENAME); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSCHAR, WRKLEN1, GWL_INFACT_FILENAME, TDS_ZERO, TDS_FALSE, TDSCHAR, WRKLEN1, CN_INFACT_FILENAME, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFACT_EXIT; END; WRKLEN1 = STG(GWL_INFACT_RECORDS); WRKLEN2 = STG(CN_INFACT_RECORDS); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFACT_RECORDS, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFACT_RECORDS, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFACT_EXIT; END; CALL TDINFACT (GWL_INIT_HANDLE, GWL_RC, GWL_INFACT_STATUS, GWL_INFACT_FILENAME, GWL_INFACT_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFACT'; GO TO TDINFACT_EXIT; END; CALL TDSNDROW (GWL_PROC, GWL_RC); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSNDROW'; GO TO TDINFACT_EXIT; END; CTR_ROWS = CTR_ROWS +1; /*------------------------------------------------------------*/ TDINFACT_EXIT: /*------------------------------------------------------------*/ RETURN; END TDINFACT_PROC; /*------------------------------------------------------------*/ TDINFLOG_PROC: PROC; /*------------------------------------------------------------*/ WRKLEN1 = STG(GWL_INFLOG_GLOBAL); WRKLEN2 = STG(CN_INFLOG_GLOBAL); CTR_COLUMN = CTR_COLUMN +1; MSG_SRVLIB_FUNC = 'TDESCRIB'; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_GLOBAL, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_GLOBAL, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_API); WRKLEN2 = STG(CN_INFLOG_API); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_API, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_API, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_HEADER); WRKLEN2 = STG(CN_INFLOG_HEADER); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_HEADER, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_HEADER, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_DATA); WRKLEN2 = STG(CN_INFLOG_DATA); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_DATA, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_DATA, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_TRACEID); WRKLEN2 = STG(CN_INFLOG_TRACEID); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_TRACEID, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_TRACEID, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_FILENAME); WRKLEN2 = STG(CN_INFLOG_FILENAME); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSCHAR, WRKLEN1, GWL_INFLOG_FILENAME, TDS_ZERO, TDS_FALSE, TDSCHAR, WRKLEN1, CN_INFLOG_FILENAME, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; WRKLEN1 = STG(GWL_INFLOG_RECORDS); WRKLEN2 = STG(CN_INFLOG_RECORDS); CTR_COLUMN = CTR_COLUMN +1; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSINT4, WRKLEN1, GWL_INFLOG_RECORDS, TDS_ZERO, TDS_FALSE, TDSINT4, WRKLEN1, CN_INFLOG_RECORDS, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDINFLOG_EXIT; END; CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDINFLOG_EXIT; END; CALL TDSNDROW (GWL_PROC, GWL_RC); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSNDROW'; GO TO TDINFLOG_EXIT; END; CTR_ROWS = CTR_ROWS +1; /*------------------------------------------------------------*/ TDINFLOG_EXIT: /*------------------------------------------------------------*/ RETURN; END TDINFLOG_PROC; /*------------------------------------------------------------*/ TDLSTSPT_PROC: PROC; /*------------------------------------------------------------*/ WRKLEN1 = STG(WRK_TRANID); WRKLEN2 = STG(CN_LSTSPT_TRANID); CTR_COLUMN = CTR_COLUMN +1; MSG_SRVLIB_FUNC = 'TDESCRIB'; CALL TDESCRIB (GWL_PROC, GWL_RC, CTR_COLUMN, TDSCHAR, WRKLEN1, WRK_TRANID, TDS_ZERO, TDS_FALSE, TDSCHAR, WRKLEN1, CN_LSTSPT_TRANID, WRKLEN2); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; GO TO TDLSTSPT_EXIT; END; /* ------------------------------------------------------*/ /* find global status */ /* ------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); /* ------------------------------------------------------*/ /* if any error, then assume tracing disabled */ /* ------------------------------------------------------*/ IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDLSTSPT_EXIT; END; /* ------------------------------------------------------*/ /* if not specific tracing, then return nothing */ /* ------------------------------------------------------*/ IF GWL_INFLOG_GLOBAL NE TDS_TRACE_SPECIFIC_RPCS THEN GO TO TDLSTSPT_EXIT; /* ------------------------------------------------------*/ /* return rows */ /* ------------------------------------------------------*/ CALL TDLSTSPT (GWL_INIT_HANDLE, GWL_RC, GWL_LSTSPT_LIST(1)); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDLSTSPT'; END; DOROW: DO WRK_LSTSPT_SS = 1 TO 8; WRK_TRANID = GWL_LSTSPT_LIST(WRK_LSTSPT_SS); CALL TDSNDROW (GWL_PROC, GWL_RC); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSNDROW'; LEAVE DOROW; END; CTR_ROWS = CTR_ROWS +1; END; /*------------------------------------------------------------*/ TDLSTSPT_EXIT: /*------------------------------------------------------------*/ RETURN; END TDLSTSPT_PROC; /*------------------------------------------------------------*/ TDSETACT_ON_PROC: PROC; /*------------------------------------------------------------*/ CALL TDINFACT (GWL_INIT_HANDLE, GWL_RC, GWL_INFACT_STATUS, GWL_INFACT_FILENAME, GWL_INFACT_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFACT'; GO TO TDSETACT_ON_EXIT; END; /* ------------------------------------------------------*/ /* turn on host accounting */ /* ------------------------------------------------------*/ CALL TDSETACT (GWL_INIT_HANDLE, GWL_RC, TDS_TRUE, GWL_INFACT_FILENAME, GWL_INFACT_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETACT'; GO TO TDSETACT_ON_EXIT; END; /*------------------------------------------------------------*/ TDSETACT_ON_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETACT_ON_PROC; /*------------------------------------------------------------*/ TDSETACT_OFF_PROC: PROC; /*------------------------------------------------------------*/ CALL TDINFACT (GWL_INIT_HANDLE, GWL_RC, GWL_INFACT_STATUS, GWL_INFACT_FILENAME, GWL_INFACT_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFACT'; GO TO TDSETACT_OFF_EXIT; END; /* ------------------------------------------------------*/ /* turn off host accounting if on */ /* ------------------------------------------------------*/ IF GWL_INFACT_STATUS = TDS_TRUE THEN DO; CALL TDSETACT (GWL_INIT_HANDLE, GWL_RC, TDS_FALSE, GWL_INFACT_FILENAME, GWL_INFACT_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETACT'; GO TO TDSETACT_OFF_EXIT; END; END; /*------------------------------------------------------------*/ TDSETACT_OFF_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETACT_OFF_PROC; /*------------------------------------------------------------*/ TDSETLOG_ON_PROC: PROC; /*------------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDSETLOG_ON_EXIT; END; /* ------------------------------------------------------*/ /* turn on API (CICS Aux Trace) and Header tracing */ /* ------------------------------------------------------*/ CALL TDSETLOG (GWL_INIT_HANDLE, GWL_RC, TDS_TRACE_ALL_RPCS, TDS_TRUE, TDS_TRUE, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETLOG'; GO TO TDSETLOG_ON_EXIT; END; /*------------------------------------------------------------*/ TDSETLOG_ON_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETLOG_ON_PROC; /*------------------------------------------------------------*/ TDSETLOG_OFF_PROC: PROC; /*------------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDSETLOG_OFF_EXIT; END; /* ------------------------------------------------------*/ /* turn off API (CICS Aux Trace) and Header tracing */ /* ------------------------------------------------------*/ CALL TDSETLOG (GWL_INIT_HANDLE, GWL_RC, TDS_NO_TRACING, TDS_FALSE, TDS_FALSE, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETLOG'; GO TO TDSETLOG_OFF_EXIT; END; /*------------------------------------------------------------*/ TDSETLOG_OFF_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETLOG_OFF_PROC; /*------------------------------------------------------------*/ TDSETSPT_ON_PROC: PROC; /*------------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDSETSPT_ON_EXIT; END; /* ------------------------------------------------------*/ /* turn on tracing for specific transactions */ /* ------------------------------------------------------*/ CALL TDSETLOG (GWL_INIT_HANDLE, GWL_RC, TDS_TRACE_SPECIFIC_RPCS, TDS_TRUE, TDS_TRUE, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETLOG'; GO TO TDSETSPT_ON_EXIT; END; /* ------------------------------------------------------*/ /* enable error log recording for this tranid */ /* ------------------------------------------------------*/ GWL_SETSPT_OPTIONS = 2; WRKLEN1 = STG(WRK_RPC); CALL TDSETSPT (GWL_INIT_HANDLE, GWL_RC, TDS_TRUE, GWL_SETSPT_OPTIONS, WRK_RPC, WRKLEN1); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETSPT'; GO TO TDSETSPT_ON_EXIT; END; /*------------------------------------------------------------*/ TDSETSPT_ON_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETSPT_ON_PROC; /*------------------------------------------------------------*/ TDSETSPT_OFF_PROC: PROC; /*------------------------------------------------------------*/ /* ------------------------------------------------------*/ /* Assume specific tracing is on for this transaction, */ /* and turn it off. */ /* ------------------------------------------------------*/ WRKLEN1 = STG(WRK_RPC); CALL TDSETSPT (GWL_INIT_HANDLE, GWL_RC, TDS_FALSE, GWL_SETSPT_OPTIONS, WRK_RPC, WRKLEN1); IF GWL_RC NE TDS_OK AND GWL_RC NE TDS_ENTRY_NOT_FOUND THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDSETSPT'; GO TO TDSETSPT_OFF_EXIT; END; /*------------------------------------------------------------*/ TDSETSPT_OFF_EXIT: /*------------------------------------------------------------*/ RETURN; END TDSETSPT_OFF_PROC; /*------------------------------------------------------------*/ TDWRTLOG_PROC: PROC; /*------------------------------------------------------------*/ /* ------------------------------------------------------*/ /* write a log entry only if logging is enabled */ /* ------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO TDWRTLOG_EXIT; END; /* ------------------------------------------------------*/ /* write a log entry only if logging is enabled */ /* ------------------------------------------------------*/ CALL GET_TRACE_STATUS; IF (TRACING) THEN DO; CALL TDWRTLOG (GWL_PROC, GWL_RC, TDS_TRUE, GWL_WRTLOG_MSG, GWL_WRTLOG_MSG_L); IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDWRTLOG'; GO TO TDWRTLOG_EXIT; END; END; ELSE DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'LOGNOTON'; GO TO TDWRTLOG_EXIT; END; /*------------------------------------------------------------*/ TDWRTLOG_EXIT: /*------------------------------------------------------------*/ RETURN; END TDWRTLOG_PROC; /*------------------------------------------------------------*/ GET_TRACE_STATUS: PROC; /*------------------------------------------------------------*/ /* ------------------------------------------------------*/ /* find global status */ /* ------------------------------------------------------*/ CALL TDINFLOG (GWL_INIT_HANDLE, GWL_RC, GWL_INFLOG_GLOBAL, GWL_INFLOG_API, GWL_INFLOG_HEADER, GWL_INFLOG_DATA, GWL_INFLOG_TRACEID, GWL_INFLOG_FILENAME, GWL_INFLOG_RECORDS); /* ------------------------------------------------------*/ /* if any error, then assume tracing disabled */ /* ------------------------------------------------------*/ IF GWL_RC NE TDS_OK THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINFLOG'; GO TO GET_TRACE_STATUS_EXIT; END; /* ------------------------------------------------------*/ /* if global tracing on, then tracing enabled */ /* ------------------------------------------------------*/ IF GWL_INFLOG_GLOBAL = TDS_TRACE_ALL_RPCS THEN DO; TRACING = TRACING_ON; GO TO GET_TRACE_STATUS_EXIT; END; /* ------------------------------------------------------*/ /* if error logging on, then tracing enabled */ /* ------------------------------------------------------*/ IF GWL_INFLOG_GLOBAL = TDS_TRACE_ERRORS_ONLY THEN DO; TRACING = TRACING_ON; GO TO GET_TRACE_STATUS_EXIT; END; /* ------------------------------------------------------*/ /* if specific tracing not on, then no tracing on */ /* ------------------------------------------------------*/ IF GWL_INFLOG_GLOBAL NE TDS_TRACE_SPECIFIC_RPCS THEN DO; GO TO GET_TRACE_STATUS_EXIT; END; /* ------------------------------------------------------*/ /* specific tracing is on, see if on for this transaction*/ /* ------------------------------------------------------*/ WRKLEN1 = STG(WRK_RPC); CALL TDINFSPT (GWL_INIT_HANDLE, GWL_RC, GWL_INFSPT_STATUS, GWL_INFSPT_OPTIONS, WRK_RPC, WRKLEN1); IF (GWL_RC NE TDS_OK AND GWL_RC NE TDS_ENTRY_NOT_FOUND) THEN DO; SEND_DONE = SEND_DONE_ERROR; MSG_SRVLIB_FUNC = 'TDINSPT'; GO TO GET_TRACE_STATUS_EXIT; END; IF GWL_INFSPT_STATUS = TDS_TRUE THEN DO; TRACING = TRACING_ON; END; /*------------------------------------------------------------*/ GET_TRACE_STATUS_EXIT: /*------------------------------------------------------------*/ RETURN; END GET_TRACE_STATUS; /*------------------------------------------------------------*/ SRVLIB_ERROR: PROC; /*------------------------------------------------------------*/ MSG_SRVLIB_RC = GWL_RC; MSG_TEXT = STRING(MSG_SRVLIB); MSG_TEXT_L = STG(MSG_SRVLIB); MSG_TYPE = TDS_ERROR_MSG; MSG_RPC = WRK_RPC; /*------------------------------------------------------------------*/ SEND_ERROR_MESSAGE: PROC; /*------------------------------------------------------------------*/ SEND_DONE = SEND_DONE_ERROR; MSG_SEVERITY = MSG_SEVERITY_ERROR; MSG_NR = MSG_NR_ERROR; MSG_TYPE = TDS_ERROR_MSG; CALL SEND_MESSAGE; RETURN; END SEND_ERROR_MESSAGE; /*------------------------------------------------------------------*/ SEND_MESSAGE: PROC; /*------------------------------------------------------------------*/ /* ------------------------------------------------------------*/ /* ensure we're in right state to send a message */ /* ------------------------------------------------------------*/ CALL TDSTATUS (GWL_PROC, GWL_RC, GWL_STATUS_NR, GWL_STATUS_DONE, GWL_STATUS_COUNT, GWL_STATUS_COMM, GWL_STATUS_RETURN_CODE, GWL_STATUS_SUBCODE); IF GWL_RC = TDS_OK THEN DO; IF GWL_STATUS_COMM = TDS_RECEIVE THEN CALL TDSNDMSG (GWL_PROC, GWL_RC, MSG_TYPE, MSG_NR, MSG_SEVERITY, TDS_ZERO, TDS_ZERO, MSG_RPC, MSG_RPC_L, MSG_TEXT, MSG_TEXT_L); END; RETURN; END SEND_MESSAGE; RETURN; END SRVLIB_ERROR; END SYSAMP1;
Copyright © 2005. Sybase Inc. All rights reserved. |