*DECK IPISPCR USETEXT TEXTIPL PROC IPISPCR; *CALL COPYRITE CDCNET - COPYRIGHT CONTROL DATA. 1992. # TITLE IPISPCR - PROCESS CON/REQ/R SUPERVISORY MESSAGE # BEGIN # IPISPCR # # **** IPISPCR PROCESS CON/REQ/R SUPERVISORY MESSAGE * * THIS PROCEDURE PROCESSES A CON/REQ/R SUPERVISORY MESSAGE. * * PROC IPISPCR * * ENTRY P = PTR TO INPUT APPLICATION BLOCK HEADER (*IABH*). * CONABN = 0 = NEW CONNECTION REQUEST * <> 0 = RESPONSE TO CON/ACRQ * P = PTR TO INPUT SUPERVISORY MESSAGE (*INPBUF*). * NUMACN = COUNT OF CURRENT OPEN CONNECTIONS. * * EXIT NUMACN = COUNT OF CURRENT OPEN CONNECTIONS. * ACN ENTRY CREATED * * METHOD * * TREAT THE REQUEST AS A NAM PROTOCOL ERROR BASED ON THE FOLLOWING: * * 1) ABN IS OUT OF RANGE. * 2) ACN VALUE OUT OF RANGE. * 3) CONNECTION NOT DT INTER-HOST. * 4) ACN ENTRY ALREADY IN USE. * * FOR A VALID CONNECTION REQUEST: * * 1) CREATE THE APPLICATION CONNECTION ENTRY. * 2) INCREMENT THE NUMBER OF ACTIVE CONNECTIONS. * 3) SEND A CON/REQ/N SUPERVISORY MESSAGE. # # **** PROC IPISPCR - XREF LIST # XREF BEGIN PROC IPIAIPA; # ABORT THE IP APPLICATION # PROC IPIDOSM; # DISPATCH OUTPUT SUPERVISORY MESSAGES # PROC IPUMCLR; # MEMORY CLEAR # PROC MESSAGE; # ISSUE DAYFILE MESSAGE # END # ** # CONTROL EJECT; # **** START MAIN PROCEDURE # # **** VALIDATE THE CONNECTION REQUEST. # IF CONABN [0] GR CONNECTABN$ THEN BEGIN # ABN OUT OF RANGE # IPIAIPA (NCONREQ$); RETURN; END IF (COND [0] NQ DT$INTE) THEN BEGIN # NOT APP/APP INTER CONNECT # IPIAIPA (NCONREQ$); RETURN; END CURACN = CONACN [0]; # SET ACN ENTRY INDEX TO ABN # IF (CURACN GR MAXACN$) OR (CURACN LS MINACN$) THEN BEGIN # INVALID ACN RECEIVED # IPIAIPA (NCONREQ$); RETURN; END IF (ACN$STATE [CURACN] NQ S"IDLE") AND (ACN$STATE [CURACN] NQ S"CLOSED") THEN BEGIN # INVALID CONNECTION STATE # IPIAIPA (NCONREQ$); RETURN; END # **** CREATE THE APPLICATION CONNECTION ENTRY. * # IPUMCLR (LOC (ACN$WORD0 [CURACN]), ACNSIZE$); ACN$ACN [CURACN] = CURACN; # STORE CONNECTION NUMBER # ACN$STATE [CURACN] = S"CONNECTED";# STORE CURRENT CONNECT STATE # ACN$CONNECT [CURACN] = TRUE; # SOCKET CONNECTED TO NAM # ACN$ABN [CURACN] = 1; # STORE APPLICATION BLOCK NO # ACN$DBZ [CURACN] = CONDBZ[0]; # STORE DOWNLINE BLOCK SIZE # ACN$ABL [CURACN] = CONABL[0]; # STORE APPLICATION BLOCK LIMIT # ACN$BUFFER [CURACN] = LOC(QUE$BUF [0, CURACN]); # INPUT BUF LOC # ACN$BLOCK [CURACN] = TRUE; # DEFAULT BLOCKING TRUE # ACN$WAITIME [CURACN] = BLOCKWAIT$;# DEFAULT BLOCK TIME # IF CONABN [0] EQ CONNECTABN$ THEN BEGIN # SAVE ACN FOR FC/INIT VERIFY # ISS$ACN [0] = CONACN [0]; END # **** INCREMENT THE NUMBER OF ACTIVE CONNECTIONS. * # NUMACN = NUMACN + 1; # **** SEND A CON/REQ/N SUPERVISORY MESSAGE. * # P = LOC(OUTBUF); # BASE SUPERVISORY MESSAGE PTR # SPMSG0 [0] = 0; # CLEAR FIRST WORD # RC [0] = 0; # STORE REASON CODE # CONACN [0] = CURACN; # SET CONNECTION NUMBER # CONNXP [0] = TRUE; # SET NO TRANSPARENT DATA FLAG # CONACT [0] = CT8ASCII; # SET CHARACTER TYPE EXPECTED # CONALN [0] = DATA$; # ALL CONNECTIONS ON LIST DATA$ # IPIDOSM (CONREQN,LCORQR); # FORMAT AND SEND CON/REQ/N SM # RETURN; # RETURN TO CALLER # END # IPISPCR # TERM