*DECK CONREQM                      26MAY81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC CONREQM; 
      BEGIN    # CONREQM #
# 
**    CONREQM    RESPOND TO CON/REQ MESSAGE.
* 
*     CONREQM SENDS A CON/REQ/A (ACCEPT) OR CON/REQ/N (REJECT)
*     MESSAGE IN RESPONSE TO A CONNECTION REQUEST (CON/REQ).
* 
*     PROC CONREQM
* 
*     ENTRY      ACN = APPLICATION CONNECTION NUMBER. 
*                NHA, NTA = MESSAGE HEADER, TEXT ADDR.
*                QRCV = QTFI/QTFS (INITIATOR/SERVICER) FLAG.
* 
*     EXIT       AFT ENTRY UPDATED -- 
*                FILECPD = PID (QTFS).
*                FILECMM = CMM GROUP IDENTIFIER.
*                FILEABL = APPLICATION BLOCK LIMIT. 
*                FILEDBZ = BLOCK SIZE.
*                CON/REQ/A (OR N) SUPERVISORY MESSAGE SENT. 
* 
*     PROCESS    IF INVALID MESSAGE OR CALLER,
*                  SET ERROR RESPONSE.
*                ELSE 
*                  SET UP AFT ENTRY 
*                  SET POSITIVE RESPONSE. 
*                CALL NETPUT. 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC ABORTQ;
        PROC CMMAGR;
        PROC CONLOG;
        PROC FTUPUT;
        PROC NAME;                 # DEBUG CODE # 
        FUNC NFETCH;
        PROC NSTORE;
        PROC RELNTA;
        END 
# 
****  XREF END
# 
  
      DEF LEMSGCM    #23#;
      ARRAY EMSGCM     S(3);
        BEGIN 
        ITEM $DCM       C(00,00,LEMSGCM) =
                 ["CONNECTION ESTABLISHED."]; 
        END 
  
      ITEM DT         U;           # NETWORK DEVICE TYPE #
      ITEM TEMP       U;           # TEMPORARY #
  
  
        $BEGIN
        NAME("CONREQM");             # DEBUG #
        $END
  
      DT = NFETCH(NTA, $CONDT);    # GET NETWORK DEVICE TYPE #
      IF (NOT ( (DT EQ 5) OR (DT EQ 6) ) ) # IF NOT A-TO-A CONN # 
      THEN
        BEGIN 
        NTAWD[1]=0;                  # CLEAR MESSAGE TEXT WORD #
        NSTORE(NTA,$PFCSFC,CONREQ);  # STORE CON/REQ COMMAND #
        NSTORE(NTA,$CONACN,ACN);     # STORE CONNECTION NUMBER #
        NSTORE(NTA,$EB,1);           # SET ERROR RESPONSE # 
  
        IF NOT QRCV                  # IF QTFI (INITIATOR) #
        THEN
          BEGIN 
          IF (NOT FILECM) 
            AND (FILEFTS EQ FTS$WNMSG)
            AND (FILELFN NE 0)
          THEN
            BEGIN 
            FILEFTS = FTS$ASGUNC;  # FILE ASSIGNED, UNCONNECTED # 
            END 
  
          ELSE
            BEGIN 
            ABORTQ("CONREQM");
            END 
  
          END 
        END 
  
      ELSE  # MESSAGE VALID # 
        BEGIN 
        IF NOT QRCV                # IF QTFI (INITIATOR) #
        THEN
          BEGIN 
          IF  FILELFN EQ 0         # IF ENTRY VACANT #
          THEN
            BEGIN 
            ABORTQ("CONREQM");
            END 
  
          ELSE
            BEGIN 
              $BEGIN
              NAME("CON/REQ(I)");  # DEBUG CODE # 
              $END
  
            FILEFTS = FTS$WNMSG;
            END 
  
          END 
  
        ELSE  # QTFS (SERVICER) # 
          BEGIN 
          FILECPD=CONPID[1];       # SET PID #
            $BEGIN
            NAME("CON/REQ(S)");  # DEBUG CODE # 
            $END
  
          FILEFTS = FTS$INIT; 
          END 
  
        FILECM=TRUE;               # SET CONNECTION-MADE FLAG # 
        FILEDBZ = CONDBZ[1];       # SAVE DOWNLINE BLOCK SIZE # 
        FILEABL = CONABL[1];       # SAVE ABL # 
# 
*     BUILD POSITIVE RESPONSE TO CONNECTION REQUEST.
# 
        NTAWD[1]=0;                  # CLEAR MESSAGE TEXT WORD #
        NSTORE(NTA,$PFCSFC,CONREQ);  # STORE CON/REQ COMMAND #
        NSTORE(NTA,$CONACN,ACN);     # STORE CONNECTION NUMBER #
        NSTORE(NTA,$RB,1);           # SET RESPONSE BIT # 
        NSTORE(NTA,$CONACT,ACTDEF);  # DEFAULT CHARACTER TYPE # 
        NSTORE(NTA,$CONALN,0);     # ASSIGN TO APPL LIST ZERO # 
        IF FILECMM EQ 0            # IF NO GROUP NAME ASSIGNED #
        THEN
          BEGIN 
          CMMAGR(0, TEMP);         # ASSIGN CMM GROUP NAME #
          FILECMM = TEMP; 
          END 
  
        RELNTA(FILENHA);           # RELEASE ALL NETPUT BUFFERS # 
        FILENHA = 0;
        CONLOG(LOC(EMSGCM),LEMSGCM);
        END 
  
      NHA = SUPHDR;                # SUPERVISORY MESSAGE #
      FTUPUT(NHA,NTA);             # SEND NETWORK MESSAGE # 
  
      END      # CONREQM #
    TERM
