*DECK FFSLCRP 
USETEXT TEXTFFS 
      PROC FFSLCRP; 
*CALL COPYRITE
# TITLE FFSLCRP - CONNECTION (MANAGEMENT LAYER) REQUEST PROCESSOR     # 
  
      BEGIN                          # FFSLCRP                        # 
  
# 
**    FFSLCRP - CONNECTION (MANAGEMENT LAYER) REQUEST PROCESSOR 
* 
*     TET TRAN                         02/88
* 
* 
*     ENTRY  . ARRAY REQUESTS (INDEXED BY RFTPCM$) CONTAINS THE CURRENT 
*              REQUEST, WITH ALL NECESSARY PARAMETERS, FROM FTP LAYER 
* 
*     EXIT   . THE REQUEST IS CONVERTED INTO A PROPER TRIGGER TO THE
*              CONNECTION MANAGEMENT LAYER STATE TABLE. 
*            . THE CONNECTION MANAGEMENT LAYER STATE TABLE HANDLER -
*              FFSLCSH IS CALLED TO PROCESS THE TRIGGER.
* 
# 
  
# 
****  PROC FFSLCRP - XREF LIST
# 
  
      XREF
        BEGIN 
        PROC       DELAYTM;            # PROCEDURE TO FORCE A DELAY#
        PROC       FFSLCSH;            # CM LAYER STATE TABLE HANDLER # 
        PROC       FFSEABT;            # DAYFILE ERROR MSG THEN ABORT # 
        PROC       FFSUWTB;            # WRITE TO CIRCULAR TRACE BUFFR# 
        END 
  
# 
*     LOCAL VARIABLE DECLARATIONS 
# 
  
      ITEM TRIGGER      S:FCE$;        # THE TRIGGER FOR STATE TABLE  # 
      ITEM THEREQUEST   S:RCM;         # THE REQUEST FROM FTP LAYER   # 
  
# 
*     DAYFILE MESSAGES
# 
      ARRAY BADCNTP [00:00] S(4); 
        BEGIN 
        ITEM BCNTP$HDR   C(00,00,10) = [" FFSLCRP -"];
        ITEM BCNTP$MSG   C(01,00,21) = [" BAD CONNECTION TYPE."]; 
        ITEM BCNTP$END   U(03,06,54) = [0]; 
        END 
  
      ARRAY BADEPTF [00:00] S(4);      # BAD EPTFLAG ERROR MESSAGE   #
        BEGIN 
        ITEM BEPTF$HDR   C(00,00,10) = [" FFSLCRP -"];
        ITEM BEPTF$MSG   C(01,00,21) = [" BAD EPTFLAG CONTENT."]; 
        ITEM BEPTF$END   U(03,06,54) = [0]; 
        END 
  
  
      SWITCH LABEL$SW : RCM 
        LAB$NOOP     : NULL,
        LAB$SDDT     : RCSENDAT,       # SEND DATA                    # 
        LAB$INITPC   : RCIPCON,        # INITIATE PASSIVE CONNECT     # 
        LAB$INITAC   : RCIACON,        # INITIATE ACTIVE CONNECT      # 
        LAB$CLOSECN  : RCCLSCON,       # CLOSE CONNECTION REQUEST     # 
        LAB$INITPS   : RCINITP,        # INIT PROCESS (CLIENT/SERVER) # 
        LAB$ABORTDT  : RCABTDAT,       # ABORT DATA CONNECTION        # 
        LAB$LCNML    : RCLCNML,        # SEND CONNECT LOCAL NORMAL    # 
        LAB$LCABN    : RCLCABN,        # SEND CONNECT LOCAL ABNORMAL  # 
        LAB$RDDDCN   : RCRDATAD,       # RESUME DATA DELIVERY, DATA CN# 
        LAB$SDDDCN   : RCSDATAD;       # SUSPEND DATA DELIVERY,DATA CN# 
  
  
  
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
  
# 
*     CALL *FFSUWTB* TO WRITE THE REQUEST TO THE
*     CIRCULAR TRACE BUFFER *CTB*.
# 
  
      BTYPE = REQ$; 
      LNAME = S"LCM"; 
      FFSUWTB;
  
      THEREQUEST = REQ$RCODE[RFTPCM$];           # OBTAIN THE REQUEST # 
      GOTO LABEL$SW [THEREQUEST];      # AND GO PROCESS IT ACCORDINGLY# 
  
  
LAB$NOOP: 
  
      GOTO LAB$END;                    # DO NOTHING RETURN            # 
  
  
LAB$SDDT:                              # SEND DATA                    # 
  
      TRIGGER = FCE$"FCE$SDDTRQ";      # CONVERT INTO A PROPER TRIGGER# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$INITPC:                            # INITIATE PASSIVE CONNECT     # 
  
      DELAYTM;
      TRIGGER = FCE$"FCE$INITPCRQ";    # CONVERT INTO A PROPER TRIGGER# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$INITAC:                            # INITIATE ACTIVE CONNECT      # 
  
      DELAYTM;
      TRIGGER = FCE$"FCE$INITACRQ";    # CONVERT INTO A PROPER TRIGGER# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$CLOSECN:                           # CLOSE CONNECTION REQUEST     # 
  
      IF REQ$CTYPE[RFTPCM$] EQ CTYPE"CTDATA"
      THEN
        BEGIN 
        TRIGGER = FCE$"FCE$CLDTCNRQ";  # CLOSE DATA CONNECTION TRIGGER# 
        END 
  
      ELSE
        BEGIN 
        IF REQ$CTYPE[RFTPCM$] EQ CTYPE"CTCTRL"
        THEN
          BEGIN 
          TRIGGER = FCE$"FCE$CLCTCNRQ"; # CLOSE CTRL CN TRIGGER       # 
          END 
  
        ELSE
          BEGIN 
          FFSEABT (BADCNTP);           # BAD CONNECTION TYPE FOR REQ  # 
          END 
        END 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
LAB$INITPS:                            # INIT PROCESS (CLIENT/SERVER) # 
  
      IF EPTFLAG EQ FTPC$              # IF THIS IS A CLIENT VERSION  # 
      THEN
        BEGIN 
        TRIGGER = FCE$"FCE$INITCLV";   # CONVERT INTO A PROPER TRIGGER# 
        END 
  
      ELSE IF EPTFLAG EQ FTPS$         # ELSE IF THIS IS A SERVER VERS# 
      THEN
        BEGIN 
        TRIGGER = FCE$"FCE$INITSER";   # CONVERT INTO A PROPER TRIGGER# 
        END 
  
      ELSE
        BEGIN 
        FFSEABT (BADEPTF);             # UNKNOWN EPTFLAG CODE         # 
        END 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$ABORTDT:                           # ABORT DATA CONNECTION        # 
  
      TRIGGER = FCE$"FCE$ABDTCNRQ";    # ABORT DATA CONNECTION REQ    # 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$LCNML:                             # SEND CONNECT LOCAL NORMAL    # 
  
      TRIGGER = FCE$"FCE$CNCLVAL";     # CONVERT INTO A PROPER TRIGGER# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
LAB$LCABN:                             # SEND CONNECT LOCAL ABNORMAL  # 
  
      TRIGGER = FCE$"FCE$CNCLBAD";     # CONVERT INTO A PROPER TRIGGER# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
LAB$RDDDCN:                            # RESUME DATA DELIVERY, DATA CN# 
  
      TRIGGER = FCE$"FCE$RDDDCN";      # TRIGGER IS RESUME DATA DELIVY# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
LAB$SDDDCN:                            # SUSPEND DATA DELIVERY,DATA CN# 
  
      TRIGGER = FCE$"FCE$SDDDCN";      # TRIGGER IS SUSPEND DATA DELIY# 
  
      GOTO LAB$CALLSTH;                # GOTO CALL STATE TABLE HANDLER# 
  
  
LAB$CALLSTH:                           # CALL STATE TABLE HANDLER     # 
  
      FFSLCSH ( TRIGGER); 
  
  
LAB$END:                               # END OF FFSLCRP               # 
  
      RETURN; 
  
      END                            # FFSLCRP #
  
      TERM
