星期一, 11月 06, 2023

2004-09-26 如何辨別哪些線上工作 (Interactive Job) 是由 telnet 方式進入?(API QDCRDEVD)


如何辨別哪些線上工作 (Interactive Job) 是由 telnet 方式進入?(API QDCRDEVD)

有時候 telnet job 於 signoff 時,需要將連線同時中斷,所以要使用 SIGNOFF ENDCNN(*YES)
才能將 telnet 的連線同時中斷(特別是由一台 AS/400 telnet 至另一台 AS/400 時),
回到原主機,AS/400 預設 signoff 並不會將連線中斷, signoff 時,僅是回 SignOn 畫面,
此時若欲中斷 telnet 連線,須按 Attn (PC 的ESC)鍵,接著輸入選項 99 即可中斷 telnet 
連線,返回原 AS/400 主機。

但是這種方式非常不方便,所以最好的方式是利用 API 判斷 Interactive Job 是否為 Telent 形態方式?

可以使用 API QDCRDEVD 取得。


File  : QCLSRC
Member: RTVDEVTYPC
Type  : CLP
Usage : CRTCLPGM RTVDEVTYPC
        CALL RTVDEVTYPC PARM(&ISTELNET)
        利用參數 ISTELNET 判斷
        1 : Telnet job 
        0 : 非 Telnet Job



PGM   PARM(&ISTELNET) 

    DCL VAR(&ISTELNET) TYPE(*LGL) VALUE('0')
    DCL VAR(&RCVVAR)   TYPE(*CHAR) LEN(1000)
    DCL VAR(&RCVLEN)   TYPE(*CHAR) LEN(4)
    DCL VAR(&ERRCODE)  TYPE(*CHAR) LEN(8)
    DCL VAR(&DEVNAME)  TYPE(*CHAR) LEN(10)
    DCL VAR(&JOBTYPE)  TYPE(*CHAR) LEN(1)
    DCL &IPADDRESS  *CHAR 15

    /*  MAKE SURE THAT THIS IS AN INTERACTIVE JOB, AND +
        GET THE DEVICE'S NAME */

    RTVJOBA JOB(&DEVNAME) TYPE(&JOBTYPE)

    IF (&JOBTYPE *NE '1') DO
        SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('This +
                    must be run from an interactive job!') +
                    MSGTYPE(*ESCAPE)
    ENDDO

    /* CALL THE RETRIEVE DEVICE DESCRIPTION (QDCRDEVD) API  +
       WITH FORMAT 'DEVD0600' WHICH SPECIES "DISPLAY DEVICE +
       DETAILS" */

    CHGVAR VAR(%BIN(&ERRCODE 1 4)) VALUE(0)
    CHGVAR VAR(%BIN(&RCVLEN)) VALUE(1000)

    CALL PGM(QDCRDEVD) PARM(&RCVVAR    +
                            &RCVLEN    +
                            'DEVD0600' +
                            &DEVNAME   +
                            &ERRCODE)

    /* POSITION 831 IS THE "PASS-THROUGH INDICATOR" AND IT   +
       WILL HAVE ONE OF THE FOLLOWING VALUES:                +
       '0' = NOT A PASSTHROUGH JOB                           +
       '1' = 5250 PASSTHROUGH                                +
       '2' = VIRTUAL DEVICE ASSOC WITH VIRTUAL TERMINAL APIS +
       '3' = VIRTUAL DEVICE ASSOC WITH TELNET SESSION        +
       '4' = VIRTUAL DEVICE ASSOC WITH STRPASTHR COMMAND    */

    IF (%SST(&RCVVAR 831 1) *EQ '3') DO
        CHGVAR VAR(&ISTELNET) VALUE('1')
        CHGVAR &IPADDRESS %SST(&RCVVAR 878 15)
        SNDPGMMSG  MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('This +
                    Job device type is Telnet and Client IP is' +
                    *BCAT &IPADDRESS *TCAT '.') +
                    MSGTYPE(*COMP)
    ENDDO
    ELSE DO
        CHGVAR VAR(&ISTELNET) VALUE('0')
    ENDDO


ENDPGM


沒有留言: