*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<ABH>  = PTR TO INPUT APPLICATION BLOCK HEADER (*IABH*).
*              CONABN  = 0 = NEW CONNECTION REQUEST 
*                     <> 0 = RESPONSE TO CON/ACRQ 
*              P<APSM> = 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<APSM>   = 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
