/**************************************************************************************/ /* Program: GetJobIP */ /* Author: Glenn Robinson */ /* Date: September 2021 */ /* */ /* Description: */ /* Receive a job name in JobNameJobUserJobNumber format and return the */ /* source IPV4 address. */ /* */ /* Compilation: */ /* Use CRTBNDCL to compile this program */ /**************************************************************************************/ PGM PARM(&QUALJN &IPV4ADDR) DCL VAR(&QUALJN) TYPE(*CHAR) LEN(26) DCL VAR(&IPV4ADDR) TYPE(*CHAR) LEN(15) DCL VAR(&JOBI) TYPE(*CHAR) LEN(700) VALUE(' ') DCL VAR(&JOBILEN) TYPE(*DEC) LEN(4 0) VALUE(700) DCL VAR(&FMTNAME) TYPE(*CHAR) LEN(8) VALUE(JOBI0600) DCL VAR(&INJOB) TYPE(*CHAR) LEN(16) VALUE(' ') DCL VAR(&TEMP) TYPE(*CHAR) LEN(15) DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') DCL VAR(&LEN) TYPE(*INT) LEN(2) VALUE(15) /* Standard error handling variables. */ /* &ERRORSW Logical(1) - Switch identifying error processing has begun. */ /* &MSGDTA Char(100) - Substitution data for the message. */ /* &MSGF Char(10) - Message file containing the message. */ /* &MSGFLIB Char(10) - Library containing the message file. */ /* &MSGID Char(7) - Message number. */ DCL VAR(&ERRORSW) TYPE(*LGL) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(100) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) /* Catch all unmonitored messaged and process gracefully */ MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(STDERR1)) /* Call QUSRJOBI API to retrieve job information */ CALL PGM(QSYS/QUSRJOBI) PARM(&JOBI &JOBILEN &FMTNAME &QUALJN &INJOB) MONMSG MSGID(CPF3C53) EXEC(DO) /* Job does not exist */ SNDPGMMSG MSG('Job ' *CAT &QUALJN *TCAT ' not found.') ENDDO MONMSG MSGID(CPF3C57) EXEC(DO) /* Not authorised to receive job information */ SNDPGMMSG MSGID(CPF3C57) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) ENDDO MONMSG MSGID(CPF3C58) EXEC(DO) /* Job name specified is not valid */ SNDPGMMSG MSGID(CPF3C58) MSGF(QCPFMSG) MSGTYPE(*ESCAPE) ENDDO /* Extract data from the output of QUSRJOBI */ CHGVAR VAR(&IPV4ADDR) VALUE(%SST(&JOBI 308 15)) /* Strip trailing nulls from the IP address*/ CHGVAR VAR(&TEMP) VALUE(&IPV4ADDR) STRIPNULLS: IF COND(%SST(&TEMP &LEN 1) *EQ &NULL) THEN(DO) CHGVAR VAR(&LEN) VALUE(&LEN - 1) CHGVAR VAR(&TEMP) VALUE(%SST(&TEMP 1 &LEN) *CAT ' ') GOTO CMDLBL(STRIPNULLS) ENDDO EXIT: RETURN /* Standard error handling routine */ STDERR1: IF COND(&ERRORSW) THEN(SNDPGMMSG MSGID(CPF9999) + MSGF(QCPFMSG) MSGTYPE(*ESCAPE)) /* Func chk */ CHGVAR VAR(&ERRORSW) VALUE( '1') /* Set to fail if + error occurs */ STDERR2: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) IF COND(&MSGID *EQ ' ') THEN(GOTO CMDLBL(STDERR3)) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*DIAG) GOTO CMDLBL(STDERR2) /* Loop back for addl + diagnostics */ STDERR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) MONMSG MSGID(CPF1005) /* Ignore if not allocated */ SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE) ENDPGM