*DECK FFSSIAA 
USETEXT TEXTFFS 
      PROC FFSSIAA; 
*CALL COPYRITE
# TITLE FFSSIAA - INITIATE A-A CONNECTIION                             #
  
      BEGIN                            # FFSSIAA                       #
# 
**    FFSSIAA  INITIATE A-A CONNECTION. 
* 
*     A. LIM                           88/01/18 
* 
*     THIS PROCEDURE INITIATES AN A-A CONNECTION BY SENDING A 
*     CON/ACRQ/R.  THE CONNECTION TYPE HAS TO BE SAP, CONTROL 
*     OR DATA CONNECTION. 
* 
*     PROC FFSSIAA
* 
*     ENTRY    ACNX    = INTO ACN TABLE.
*              CURACN  = FILE SERVER CONNECTION NUMBER. 
* 
*     EXIT     CON/ACRQ/R SENT. 
*              P<APSM> = PTR TO OUTPUT SUPERVISORY MESSAGE (*OUTBUF*).
* 
*     METHOD   IF CONNECTION TYPE IS CONTROL STATEMENT
*              THEN 
*                RETURN.
*              IF STATE IS *NULL* 
*                SEND CON/ACRQ/R. 
*                CHANGE STATE TO PENDING CON/ACRQ RESPONSE. 
*              ELSE 
*                DECLARE A FTPS INTERNAL ERROR. 
* 
*     NOTE:    FOR A DETAIL DESCRIPTION, REFER TO NAM STATE TABLE.
# 
  
# 
****  PROC FFSSIAA - XREF LIST
# 
      XREF
        BEGIN 
        PROC FFSEEFS;    # END FILE SERVER                             #
        PROC NETPUT;     # OUTPUT SUPERVISORY MESSAGE TO NETWORK       #
        END 
# 
****
# 
  
      CONTROL EJECT;
# 
**    START MAIN PROCEDURE
# 
  
      IF    REQ$CTYPE[RTCPNAM$] LS S"CTSAP" 
         OR REQ$CTYPE[RTCPNAM$] GR S"CTDATA"
      THEN
        BEGIN 
        FFSEEFS(NINVDCT);              # C/N TYPE INCORRECT, END FTPS  #
        END 
  
      IF ACN$STATE[ACNX] EQ NULL
      THEN
        BEGIN                          # STATE IS NULL                 #
        P<ABH>    = LOC(SABH);         # POINT ABH ON OUTPUT ABH       #
        P<APSM>   = LOC(OUTBUF);       # POINT SM ON OUTPUT BUFFER     #
        SPMSG0[0] = 0;                 # CLEAR FIRST WORD              #
        SPMSG1[0] = 0;                 # CLEAR SECOND WORD             #
        PFCSFC[0] = CONACR; 
        ABHTLC[0] = LCONAC; 
        ABHABN[0] = ACNX;              # USE C/N TYPE AS ABH ABN       #
        CONANM[0] = NAME1$;            # GET NAME1                     #
        CONANM2[0]= NAM2$NAME2[0];     # GET NAME2                     #
        NETPUT(SABH, OUTBUF);          # SEND CON/ACRQ/R               #
        ACN$STATE[ACNX] = PCONACRQ;    # STATE = PENDING CON/ACRQ RESP #
        END 
      ELSE
        BEGIN                          # INVALID STATE                 #
        FFSEEFS(NINITCN); 
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FFSSIAA                       #
  
      TERM
