*DECK SREQ                         26MAY81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC SREQ;
      BEGIN    # SREQ # 
# 
**    SREQ       PROCESS SUPERVISORY REQUESTS RECEIVED. 
* 
*     SREQ PROCESSES SUPERVISORY REQUESTS: 1) CONNECTION BREAK, 
*     2) CONNECTION REQUEST, 3) CONNECTION INITIALIZE, 4) ACKNOWLEDGE,
*     AND 5) NO-ACKNOWLEDGE.  OTHER SUPERVISORY REQUESTS ARE INVALID
*     AND PROCESSED BY ILLMSG.
* 
*     PROC SREQ 
* 
*     ENTRY      ACN = CONNECTION NUMBER (AFT ENTRY INDEX). 
*                FC  = FUNCTION CODE FROM SUPERVISORY MESSAGE.
* 
*     EXIT       AFT ENTRY UPDATED. 
*                  FILEACT = TRUE (CONNECTION BROKEN) 
* 
*     PROCESS    IF FC = CON/CB OR FC/BREAK:  
*                  CALL CONERR. 
*                ELSE:  
*                  IF FC = CONNECTION REQUEST:  
*                    CALL CONREQM.
*                  ELSE:  
*                    IF FC = CONNECTION INITIALIZE: 
*                      SEND RESPONSE (NETPUT) 
*                      SET STATE TO FILE ASSIGNED AND CONNECTED.
*                    ELSE:  
*                      IF FC = ACKNOWLEDGE: 
*                        CALL FCACKM. 
*                      ELSE:  
*                        IF FC = NO-ACKNOWLEDGE:  
*                          CALL PUTNTA TO NETPUT BLOCK AGAIN. 
*                        ELSE (ANY OTHER FC): 
*                          CALL ILLMSG. 
* 
*     NOTES      ACN (GLOBAL VARIABLE) IS DESTROYED.
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CONENDM; 
        PROC CONERR;
        PROC CONLOG;
        PROC CONREQM; 
        PROC FCACKM;
        PROC FTUPUT;
        PROC ILLMSG;
        PROC NAME;                 # DEBUG CODE # 
        PROC NSTORE;
        PROC PUTNTA;
        END 
# 
****  XREF END
# 
  
      DEF LEMSG55    #16#;
      ITEM EMSG55     C(LEMSG55) = "FC/BRK RECEIVED.";
  
      DEF LEMSG56    #18#;
      ITEM EMSG56     C(LEMSG56) = "CONNECTION BROKEN.";
  
      DEF LEMSG57    #43#;
      ITEM EMSG57     C(LEMSG57) =
          "NETWORK CONGESTION, RETRANSMITTING MESSAGE.";
  
      DEF LEMSG58    #22#;
      ITEM EMSG58     C(LEMSG58) = "RETRANSMIT SUCCESSFUL.";
  
      DEF NAKMSGTRIG #10#;         # DAYFILE MESSAGE TRIGGER #
        $BEGIN
        NAME("SREQ");              # DEBUG CODE # 
        $END
  
      IF (FC EQ CONCB)               # IF CON-CB THEN SET CONNECTION #
        OR FC EQ FCBRK
      THEN                           # BROKEN AND TERMINATE # 
        BEGIN 
        FILECB = TRUE;             # CONNECTION BROKEN #
        IF FC EQ FCBRK
        THEN
          BEGIN 
          CONERR(LOC(EMSG55),LEMSG55);
          END 
  
        ELSE
          BEGIN 
          IF FILE62 EQ 0           # IF FINI NOT SENT OR RECEIVED # 
          THEN
            BEGIN 
            CONERR(LOC(EMSG56),LEMSG56);
            END 
  
          ELSE
            BEGIN 
            CONENDM;               # NORMAL TERMINATION # 
            END 
  
          END 
  
        END 
  
      ELSE                         # IF NOT BROKEN CONNECTION # 
        BEGIN 
        IF (FC EQ CONREQ)            # IF CON-REQ THEN CONTINUE # 
        THEN
          BEGIN 
          CONREQM;                   # PROCESS CON/REQ #
          END 
  
        ELSE
          BEGIN 
          IF (FC EQ FCINIT)          # IF INITIALIZATION THEN # 
          THEN                       # BUILD FC/INIT MESSAGE #
            BEGIN 
            NSTORE(NTA,$RB,1);       # STORE RESPONSE BIT # 
            NHA = SUPHDR; 
            FTUPUT(NHA,NTA);       # SEND NET MESSAGE # 
            FILEFTS = FTS$ASGCON;  # FILE ASSIGNED AND CONNECTED #
            END 
  
          ELSE
            BEGIN 
            IF (FC EQ FCACK)         # IF ACK THEN PROCESS #
            THEN
              BEGIN 
              IF FILENAK GT NAKMSGTRIG
              THEN
                BEGIN 
                CONLOG(LOC(EMSG58),LEMSG58);
                END 
  
              FILENAK=0;           # CLEAR NAK COUNT #
              FCACKM;              # PROCESS FC/ACK # 
              END 
  
            ELSE
              BEGIN 
              IF(FC EQ FCNAK)      # IF NAK # 
              THEN
                BEGIN 
                IF FILENAK EQ NAKMSGTRIG
                THEN
                  BEGIN 
                  CONLOG(LOC(EMSG57),LEMSG57);
                  END 
  
                IF FILENAK LT O"3777" 
                THEN
                  BEGIN 
                  FILENAK = FILENAK+1;  # INCR RETRY COUNT #
                  END 
  
                PUTNTA;            # RETRANSMIT BLOCK # 
                END 
  
              ELSE                 # ALL OTHER MESSAGES ARE ILLEGAL # 
                BEGIN 
                IF (FC NE FCINA)   # IF FC/INACT IGNORE # 
                THEN
                  BEGIN 
                  ILLMSG;          # ILLEGAL MESSAGE #
                  END 
                END 
              END 
            END 
          END 
        END 
  
      END      # SREQ # 
    TERM
