*DECK CTRLMSG 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRNAM 
USETEXT COMRQUE 
PROC CTRLMSG; 
# TITLE CTRLMSG - PROCESS INCOMING CONTROL MESSAGES. #
  
      BEGIN  # CTRLMSG #
  
# 
**    CTRLMSG - PROCESS INCOMING CONTROL MESSAGES.
* 
*     PROCESSES INCOMING CONTROL MESSAGES.  THESE MESSAGES ARE WRITTEN
*     INTO A CONTROL MESSAGE QUEUE ENTRY BY NDR DURING A STATUS FUNC. 
* 
*     PROC CTRLMSG. 
* 
*     ENTRY   - CONTROL MESSAGE QUEUE HAS AN ENTRY ON IT. 
* 
*     EXIT    - ALL CONTROL MESSAGE ENTRIES ARE PROCESSED.
* 
*     PROCESS - FOR EACH ENTRY ON CONTROL MESSAGE QUEUE:  
*                 DEQUEUE ENTRY 
*                 DEPENDING ON WHICH CASE:  
*                   CONTROL MESSAGE IS REJECT:  
*                     ISSUE MESSAGE.
*                     PRINT OUT CONTROL MESSAGE.
*                     FREE ENTRY. 
*                   CONTROL MESSAGE FOR UNKNOWN APPLICATION.
*                     ISSUE DAYFILE MESSAGE.
*                     PRINT OUT CONTROL MESSAGE.
*                     FREE QUEUE ENTRY. 
*                   CONTROL MESSAGE IS FC/BRK:  
*                     INITIATE BRKRCVD. 
*                   CONTROL MESSAGE IS FC/RST:  
*                     INITIATE RSTRCVD. 
*                   CONTROL MESSAGE IS ANYTHING ELSE: 
*                     ISSUE MESSAGE.
*                     PRINT OUT CONTROL MESSAGE.
*                     FREE ENTRY. 
*                 RETURN. 
* 
* 
****  PROC CTRLMSG - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC BRKRCVD;              # INITIATE FC/BRK/R SUPR REPLY # 
        PROC DEQUEUE;              # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                 # RELEASE QUEUE ENTRY #
        PROC PRCTRLM;              # PRINT OUT CONTROL MESSAGE #
        PROC RHFMSG;               # SEND DAYFILE TO RHF CTL PT. #
        PROC RSTRCVD;              # INITIATE FC/RST/R SUPR REPLY # 
        END 
  
# 
****  PROC CTRLMSG - XREF LIST END. 
# 
  
  
      ITEM MSG$REJMSG C(58) = 
        " RHF, THE FOLLOWING CONTROL MESS. WAS REJECTED BY THE NAD."; 
      ITEM MSG$UNKAPL C(57) = 
        " RHF, THE FOLLOWING CONTROL MESS. IS FOR AN UNKNOWN PATH.";
      ITEM MSG$INVMSG C(50) = 
        " RHF, THE FOLLOWING CONTROL MESS. IS NOT SUPPORTED.";
  
CONTROL EJECT;
  
      ASLONGAS CTLMSGQ NE 0 
      DO
        BEGIN  # PROCESS INCOMING CONTROL MESSAGES #
        DEQUEUE(LOC(CTLMSGQ));
        P<APL$HEADER> = QU$APPL;
        P<CONNECTION> = P<APL$HEADER> + APL$LENGTH +
                        (QU$ACN - APL$MINACN) * CON$LENGTH; 
        IF QU$REJECT
        THEN
          BEGIN 
          RHFMSG(LOC(MSG$REJMSG),58); 
          PRCTRLM;
          FREE; 
          END 
  
        ELSE
          BEGIN 
          IF P<APL$HEADER> EQ 0 
            OR (QU$ACN LT APL$MINACN OR QU$ACN GT APL$MAXACN) 
          THEN
            BEGIN 
            RHFMSG(LOC(MSG$UNKAPL),55); 
            PRCTRLM;
            FREE; 
            END 
  
          ELSE
            BEGIN  # CONTROL MESSAGE NOT REJECTED # 
            IF QU$BYTECNT GE 3
              AND QU$CTLLGTH EQ BRKLENGTH 
              AND QU$CTLFC EQ $FCBRK
            THEN
              BEGIN 
              BRKRCVD;
              END 
  
            ELSE
              BEGIN 
              IF QU$BYTECNT GE 2
                AND QU$CTLLGTH EQ RSTLENGTH 
                AND QU$CTLFC EQ $FCRST
              THEN
                BEGIN 
                RSTRCVD;
                END 
  
              ELSE
                BEGIN 
                RHFMSG(LOC(MSG$INVMSG),50); 
                PRCTRLM;
                FREE; 
                END 
  
              END 
  
            END  # CONTROL MESSAGE NOT REJECTED # 
  
          END 
  
        END  # PROCESS CONTROL MESSAGES # 
  
      RETURN; 
      END  # CTRLMSG #
  
      TERM
