*DECK FFSSPCB 
USETEXT TEXTFFS 
      PROC FFSSPCB; 
*CALL COPYRITE
# TITLE FFSSPCB - PROCESS CON/CB SUPERVISORY MESSAGE.                  #
  
      BEGIN                            # FFSSPCB                       #
# 
**    FFSSPCB  PROCESS CON/CB SUPERVISORY MESSAGE.
* 
*     A. LIM                           88/01/18 
* 
*     THIS PROCEDURE PROCESSES A CON/CB SUPERVISORY MESSAGE.
* 
*     PROC FFSSPCB
* 
*     ENTRY    P<APSM> = PTR TO INPUT SUPERVISORY MESSAGE (*INPBUF*). 
*              CURACN  = FILE SERVER CONNECTION NUMBER. 
* 
*     EXIT     CONNECTION ENDED ABNORMALLY. 
* 
*     METHOD   IF THE CONNECTION STATE IS *NULL*, *PCONACRQ* OR 
*              *RETRYPEND*: 
*                TREATED AS A NAM PROTOCOL ERROR. 
* 
*              IF THE CONNECTION STATE IS *ENDPEND*:  
*                IGNORE THE CON/CB. 
* 
*              DAYFILE MESSAGE THAT CON/CB RECEIVED.
*              SEND CON/END/R.
*              IF STATE IS *ACTIVE*:  
*                CHANGE STATE TO *ENDPEND*. 
*              IF STATE IS *PENDING*: 
*                CHANGE STATE TO *RETRYPEND*. 
* 
# 
  
# 
****  PROC FFSSPCB - XREF LIST
# 
      XREF
        BEGIN 
        PROC ABORT; 
        PROC MESSAGE; 
        PROC FFSEESC;    # END SINGLE FILE SERVER CONNECTION           #
        PROC FFSEEFS;    # END ALL FILE SERVER CONNECTION              #
        PROC FFSURAE;    # RESET ACN ENTRY                             #
        FUNC FFSUFCE B;  # UTILITY TO FIND FILE SERVER CONNECTION ENTRY#
        END 
# 
****
# 
  
      ARRAY CCB [00:00] S(5);          # CON/CB MESSAGE                #
        BEGIN 
        ITEM CCB$MSG    C(00,00,43) = 
                        [" FTPS - CON/CB RECEIVED ON XXXX CONNECTION."];
        ITEM CCB$ID     C(00,06,04);   # HEADER ID, "FTPS" OR "FTPI"   #
        ITEM CCB$CTYPE  C(02,42,04);   # CONNECTION TYPE               #
        ITEM CCB$ZBYTE  U(04,18,42);   # ZERO BYTE TERMINATOR          #
        END 
  
      ARRAY CT [CTYPE"CTCS" : CTYPE"CTDATA"] S(1);   # CONNECTION TYPE #
        BEGIN 
        ITEM CT$TYPE    C(00,00,04) = ["  CS",
                                       " SAP",
                                       "CTRL",
                                       "DATA"]; 
        END 
  
      CONTROL EJECT;
  
#     START MAIN PROCEDURE                                             #
# 
*     CONNECTION STATE IS *NULL* - TREAT AS A NAM PROTOCOL ERROR. 
# 
  
      IF NOT FFSUFCE
      THEN
        BEGIN 
        FFSEEFS (NCONCB); 
        END 
# 
*     CONNECTION STATE IS *PCONACRQ*, OR *RETRYPEND*, 
*     TREAT AS A NAM PROTOCOL ERROR.
# 
      IF ACN$STATE[ACNX] LAN
        (PCONACRQ + RETRYPEND) NQ 0 
      THEN
        BEGIN 
        FFSEEFS (NCONCB); 
        END 
# 
*     CONNECTION STATE IS *ENDPEND* - IGNORE. 
# 
      IF ACN$STATE[ACNX] LAN
        (ENDPEND) NQ 0
      THEN
        BEGIN 
        RETURN; 
        END 
  
# 
*     CONNECTION STATE IS *PENDING* OR *ACTIVE*.
# 
  
      IF ACN$STATE[ACNX] LAN
        (PENDING + ACTIVE) NQ 0 
      THEN
        BEGIN 
        IF EPTFLAG EQ FTPC$ 
        THEN
          BEGIN 
          CCB$ID[0] = "FTPI";          # CLIENT MODE, HEADER IS "FTPI" #
          END 
        ELSE
          BEGIN 
          CCB$ID[0] = "FTPS"; 
          END 
        CCB$CTYPE[0] = CT$TYPE[ACNX];  # FILL IN CONNECTION TYPE       #
        MESSAGE(CCB[0], 0);            # DAYFILE CON/CB MESSAGE        #
  
        IF     (ACN$STATE[ACNX] EQ ACTIVE)
           AND (ACNX EQ S"CTCS")
        THEN
          BEGIN                        # CON/CB ON INBOUND CONNECTION  #
          FFSURAE;                     # RESET ACN ENTRY               #
          NUMACN = NUMACN - 1;
          IND$ICODE[INAMTCP$] = INAM"INCONBKN";  # C/N BROKEN INDICATIN#
          RETURN;                      # ***** EXIT *****              #
          END 
  
        FFSEESC;                       # SEND CON/END/R                #
        IF ACN$STATE[ACNX] EQ PENDING 
        THEN
          BEGIN 
          ACN$STATE[ACNX] = RETRYPEND;    # CHANGE STATE TO *RETRYPEND*#
          END 
  
        IF ACN$STATE[ACNX] EQ ACTIVE
        THEN
          BEGIN                          # STATE IS *ACTIVE*           #
          ACN$STATE[ACNX] = ENDPEND;     # CHANGE STATE TO *ENDPEND*   #
          END 
  
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSSPCB                       #
  
      TERM
