Is It a Telnet Job?

Article ID: 19290

Q: Is there any way to identify a job as being an active Telnet job? Here's my situation: I have some users who start a Telnet session to attach to a remote system. When they sign off that remote system, I'd like to be able to SIGNOFF ENDCNN(*YES). If they are not in a Telnet job, then I'd like to use ENDCNN(*NO).

A: The QDCRDEVD API with format DEVD0600 returns detailed information about a display device. One of the fields tells you whether the job is a telnet job.

The following CL program determines whether the current job is a Telnet job. If it is, it returns '1'; otherwise, it returns '0'.

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)

   /*  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')
   ENDDO
   ELSE DO
       CHGVAR VAR(&ISTELNET) VALUE('0')
   ENDDO

ENDPGM

ProVIP Sponsors

ProVIP Sponsors