*DECK CONARQR 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRMEM 
USETEXT COMRNET 
USETEXT COMRQUE 
USETEXT COMRRTN 
USETEXT COMRSTA 
PROC CONARQR; 
# TITLE CONARQR - PROCESS CON/ACRQ/R REQUEST. # 
  
      BEGIN  # CONARQR #
  
# 
**    CONARQR - PROCESS CON/ACRQ/R REQUEST. 
* 
*     INITIATES ESTABLISHMENT OF AN APPLICATION TO APPLICATION
*     CONNECTION IN RESPONSE TO A CON/ACRQ/R SUPERVISORY MESSAGE
*     REQUEST.
* 
*     PROC CONARQR. 
* 
*     ENTRY   -  QU$ADDRESS IS BASED ARRAY CONTAINING CON/ACRQ/R. 
*                APL$HEADER IS BASED ARRAY CONTAINING APPL HEADER.
* 
*     EXIT    -  NSUP UPDATED.
*                NETPUT REQUEST (CON/ACRQ/R) SET COMPLETE.
*                APPLICATION CONNECTION REQUEST TRANSMITTED TO REMOTE 
*                    MAINFRAME. 
*                OR - 
*                CON/ACRQ/A GENERATED.
* 
*     PROCESS -  IF NETWORK SHUTDOWN IN PROCESS 
*                THEN:  
*                  SEND CON/ACRQ/A - ACRQ$LSHUT.
*                ELSE:  
*                  IF NO ACNS LEFT FOR REQUESTING APPLICATION 
*                  THEN:  
*                    SEND CON/ACRQ/A - ACRQ$MXCON.
*                  ELSE:  
*                    FOR EACH PATH TO REQUESTED PID/LID (CHOOSING BEST
*                                                     PATH FIRST):  
*                      MAKE CONNECTION REQUEST
*                      IF CONNECTION REQUEST SUCCESSFUL 
*                      THEN:  
*                        INITIALIZE CONNECTION TABLE ENTRY FIELDS 
*                        PUT CON/ACRQ/R QUEUE ENTRY ON DELAY QUEUE
*                        INCREMENT LOCAL AND REMOTE CONNECTION COUNTS 
*                        IF ACTIVITY BIT USED IN PATH SELECTION 
*                        THEN:  
*                          COMPLEMENT ACTIVITY BIT. 
*                        INITIATE NSUP UPDATE AND SET REQUEST COMPLETE. 
*                    IF LID/PID/NAD/PATH DISABLED FOR ALL POSSIBLE PATHS
*                    THEN:  
*                      SEND CON/ACRQ/A - ACRQ$ILIDS.
*                    IF ALL CONNECTION ATTEMPTS REJECTED BY NAD 
*                    THEN:  
*                      IF CAUSE OF REJECT IS LACK OF REMOTE MF RESPONSE 
*                      THEN:  
*                        SEND CON/ACRQ/A - ACRQ$NORES.
*                      ELSE:  
*                        SEND CON/ACRQ/A - ACRQ$LIMIT.
*                RETURN:  
* 
* 
****  PROC CONARQR - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC ACANSUP;                # GIVE CON/ACRQ/R ABORT RESPONSE # 
        FUNC ACNFND B;               # CK FOR FREE ACN FOR THIS APPL. # 
        PROC FINDPTH;                # FIND BEST PATH TO REQUESTED LID# 
        PROC GETFREE;                # GET FREE QUEUE ENTRY # 
        PROC QUEUE;                  # ADD ENTRY TO QUEUE # 
        PROC REQCON;                 # INITIATE NAD CONNECT REQUEST # 
        PROC RTNNSUP;                # COMPLETE REQUEST AND UPDATE NSUP#
        END 
  
# 
****  PROC CONARQR - XREF LIST END. 
# 
  
  
      ITEM ACTSEL B;                 # PATH SELECTION BASED ON ACTY BIT#
      ITEM CONRTN I;                 # RETURN CODE FOR REQCON CALL #
      ITEM PTHRTN I;                 # RETURN CODE FOR FINDPTH CALL # 
      ITEM QUJOBID I;                # TEMP CELL - JOB ID OF REQUESTOR# 
      ITEM QUUCPA  I;                # TEMP CELL - UCPA OF REQUESTOR #
  
CONTROL EJECT;
  
      IF SHUTDWN OR IDLEDWN 
      THEN
        BEGIN  # REFUSE REQUEST - SHUTDOWN IN PROCESS # 
        ACANSUP(ACRQ$LSHUT);
        END 
  
      ELSE
        BEGIN # SHUTDOWN NOT IN PROGRESS #
        IF NOT ACNFND 
        THEN
          BEGIN  # ALL ACNS IN USE #
          ACANSUP(ACRQ$MXCON);
          END 
  
        ELSE
          BEGIN  # AVAILABLE ACN WAS FOUND #
          P<NET$HEADER> = 0;         # USED BY FINDPTH #
          CONRTN = - 1; 
          PTHRTN = SCAN$OK; 
  
          ASLONGAS PTHRTN EQ SCAN$OK  AND CONRTN NE 0 
          DO
            BEGIN # LOCATE BEST PATH THAT WILL RESPOND #
            FINDPTH(PTHRTN,ACTSEL); 
  
            IF PTHRTN EQ SCAN$OK
            THEN
              BEGIN  # AVAILABLE PATH FOUND # 
              REQCON(CONRTN);        # REQUEST CONNECTION # 
  
              IF CONRTN EQ 0
              THEN
                BEGIN  # SUCCESSFUL CONNECT REQUEST # 
                QU$REQCLK = 30; 
                CON$FLAGS = 0;
                CON$PATHAD = P<PTH$ENTRY>;
                CON$NADORD =  PTH$NADORD; 
                CON$PATHID =  CST$PATHID; 
                CON$ALN    =  0;
                CON$ACT    =  0;
                CON$ACTWD  =  0;
                QUUCPA     =  QU$UCPA; # SAVE UCPA FOR NSUP REPLY # 
                QUJOBID    =  QU$JOBID; 
                CON$DELAYQ = 0; 
                QUEUE(LOC(CON$DELAYQ));  # PUT CON/ACRQ/R ON DELAY 0 #
                NAD$CCOUNT = NAD$CCOUNT + 1;
                RMT$CCOUNT = RMT$CCOUNT + 1;
                ACTIVECONS = ACTIVECONS + 1;
  
                IF ACTSEL 
                THEN
                  BEGIN  # FLIP PATH ACTIVITY FLAG BIT #
                  PTH$ACTIV = NOT PTH$ACTIV;
                  END 
  
                GETFREE;
                QU$CHARGE = 1;        # THIS IS HIGH OVERHEAD FUNCTION #
                QU$UCPA = QUUCPA; 
                QU$JOBID= QUJOBID;
                RTNNSUP;             # RETURN NSUP AND COMPLETE RQST #
                END  # SUCCESSFUL CONNECT REQUEST # 
  
              END  # AVAILABLE PATH FOUND # 
  
            END  # LOCATE BEST PATH THAT WILL RESPOND # 
  
          IF PTHRTN EQ SCAN$DIS 
          THEN
            BEGIN  # LID/PID/NAD DISABLED # 
            ACANSUP(ACRQ$DLIDS);
            END 
  
          ELSE
            BEGIN 
            IF PTHRTN EQ SCAN$NOID
            THEN
              BEGIN  # LID NOT DEFINED #
              ACANSUP(ACRQ$ILIDS);
              END 
  
            ELSE
              BEGIN 
              IF PTHRTN EQ SCAN$REJ 
              THEN
                BEGIN  # ALL CONNECTION ATTEMPTS REJECTED # 
                ACANSUP(ACRQ$LIMIT);
                END 
              END 
  
            END 
  
          END  # AVAILABLE ACN WAS FOUND #
  
        END  # SHUTDOWN NOT IN PROGRESS # 
  
      RETURN; 
      END  # CONARQR #
  
      TERM
