Return to the FTP Tips
STRTCPFTP Command
Attached are four source members. Either FTP them to your AS/400 or reenter them.
The BLDFTP1R and CHKFTP1R are RPGLE, The FTPBATCH is a CMD and teh STRFTTP1C is a CLP.
You can use this command in a CL Program.
filename="strftp1c.txt" /********************************************************************/ /* */ /* PROGRAM FUNCTION */ /* */ /* This is the CPP for command FTPBATCH. */ /* */ /* It performs a batch FTP transfer of one file with a TCP/IP */ /* network connected FTP server. */ /* */ /* Program parameters: */ /* */ /* &TGTSYS (in ) - Target system */ /* &LCLFIL (in ) - Local file name */ /* &RMTFIL (in ) - Remote file name */ /* &FUNCTION (in ) - Function to be executed */ /* values: 'P' = Put */ /* 'G' = Get */ /* &USR (in ) - User ID in remote system */ /* &PWD (in ) - Password in remote system */ /* &CMD1 (in ) - Optional FTP subcommand */ /* (Executed before transfer) */ /* &CMD2 (in ) - Optional FTP subcommand */ /* (Executed before transfer) */ /* &CMD3 (in ) - Optional FTP subcommand */ /* (Executed before transfer) */ /* &SUCCES (out) - Success indicator */ /* values: '0' = Transfer failed */ /* '1' = Transfer successful */ /* */ /* All work files are created into library QTEMP. */ /* */ /* Programs called: */ /* */ /* BLDFTP1R (ILE RPG) - Creates the FTP script */ /* for transfer */ /* CHKFTP1R (ILE RPG) - Checks the success of transfer */ /* by reading the FTP transfer log */ /* */ /********************************************************************/ PGM PARM(&TGTSYS + &LCLFIL + &RMTFIL + &FUNCTION + &USR + &PWD + &CMD1 + &CMD2 + &CMD3 + &SUCCES ) /********************************************************************/ /* Parameters */ /********************************************************************/ DCL VAR(&TGTSYS ) TYPE(*CHAR) LEN(50) DCL VAR(&LCLFIL ) TYPE(*CHAR) LEN(50) DCL VAR(&RMTFIL ) TYPE(*CHAR) LEN(50) DCL VAR(&FUNCTION) TYPE(*CHAR) LEN(1 ) DCL VAR(&USR ) TYPE(*CHAR) LEN(10) DCL VAR(&PWD ) TYPE(*CHAR) LEN(10) DCL VAR(&CMD1 ) TYPE(*CHAR) LEN(20) DCL VAR(&CMD2 ) TYPE(*CHAR) LEN(20) DCL VAR(&CMD3 ) TYPE(*CHAR) LEN(20) DCL VAR(&SUCCES ) TYPE(*CHAR) LEN(1) /********************************************************************/ /* Local variables */ /********************************************************************/ DCL VAR(&OKCODE ) TYPE(*CHAR) LEN(3) DCL VAR(&ON ) TYPE(*CHAR) LEN(1) VALUE('1') DCL VAR(&OFF ) TYPE(*CHAR) LEN(1) VALUE('0') /********************************************************************/ /* Delete/Create the FTP script file */ /********************************************************************/ DLTF FILE(QTEMP/FTPCMD) MONMSG MSGID(CPF0000) CRTSRCPF FILE(QTEMP/FTPCMD) MBR(FTP) /********************************************************************/ /* Build the FTP script */ /********************************************************************/ OVRDBF FILE(FTPCMD) TOFILE(QTEMP/FTPCMD) MBR(FTP) CALL PGM(BLDFTP1R) PARM(&USR &PWD &FUNCTION + &LCLFIL &RMTFIL &CMD1 &CMD2 &CMD3) /********************************************************************/ /* Delete/Create the FTP transfer log file */ /********************************************************************/ DLTF FILE(QTEMP/FTPLOG) MONMSG MSGID(CPF0000) CRTPF FILE(QTEMP/FTPLOG) RCDLEN(132) MBR(FTPLOG) /********************************************************************/ /* Execute FTP transfer */ /********************************************************************/ OVRDBF FILE(INPUT ) TOFILE(QTEMP/FTPCMD) MBR(FTP) OVRDBF FILE(OUTPUT) TOFILE(QTEMP/FTPLOG) MBR(FTPLOG) STRTCPFTP RMTSYS(&TGTSYS) DLTOVR FILE(*ALL) /********************************************************************/ /* Check FTP transfer log file to find out if the transfer was */ /* successful */ /********************************************************************/ CALL PGM(CHKFTP1R) PARM(&OKCODE) IF COND(&OKCODE *EQ 'YES') THEN(CHGVAR + VAR(&SUCCES) VALUE(&ON)) ELSE CMD(CHGVAR VAR(&SUCCES) VALUE(&OFF)) ENDPGM ======================================================================== filename="chkftp1r.txt" F/TITLE CHECK FTP LOG ******************************************************************** * * * This program reads through the FTP transfer log file and * * tries to find out if the transfer was successful. * * * ******************************************************************** * * ******************************************************************** F/SPACE 3 ******************************************************************** * * * INDICATOR USAGE * * * * IND. DESCRIPTION * * * * 99 - FTPLOG EOF * * LR - CLOSE FILES ON EXIT * * * ******************************************************************** F/SPACE 3 F/EJECT ******************************************************************** *FILES USED BY THIS PROGRAM ******************************************************************** FFTPLOG IF F 132 DISK F/EJECT ******************************************************************** * DATA STRUCTURES USED BY THIS PROGRAM * ******************************************************************** * * Define constants * D FileXfer C CONST('File transfer') * * Define input record format * D LogRec DS 132 D ReplyCode 1 3 D ExtraInfo 5 17 C/EJECT ******************************************************************** * VARIABLE DEFINITIONS AND LISTS USED BY THIS PROGRAM * ******************************************************************** C/SPACE 2 C *ENTRY PLIST * Return parameters: C PARM OK 3 * possible values: NO * YE C/EJECT ******************************************************************** * The Main Program * ******************************************************************** * C MOVE 'NOT' OK * C *IN99 DOWEQ *OFF C READ FTPLOG LogRec 99 C *IN99 IFEQ *OFF * C SELECT * Remote system was something else than an AS/400 or any other that uses 2 C ReplyCode WHENEQ '226' C MOVE 'YES' OK C LEAVE * * Remote system was an AS/400 or any other that uses 250 as a response C ReplyCode WHENEQ '250' C ExtraInfo ANDEQ FileXfer C MOVE 'YES' OK C LEAVE * C ENDSL C ENDIF C ENDDO * C EVAL *INLR = *ON C RETURN C/EJECT ****************************************************************** * * * ...and here be the dragons. * * * ****************************************************************** ======================================================================== filename="ftpbatch.txt" FTPBATCH: CMD PROMPT('START A FTP BATCH TRANSFER') PARM KWD(RMTSYS) TYPE(*CHAR) LEN(50) MIN(1) + PROMPT('Remote system for FTP transfer') PARM KWD(LCLFIL) TYPE(*CHAR) LEN(50) MIN(1) + PROMPT('Local file''s name') PARM KWD(RMTFIL) TYPE(*CHAR) LEN(50) MIN(1) + PROMPT('Remote file''s name') PARM KWD(FUNCTION) TYPE(*CHAR) LEN(1) RSTD(*YES) + VALUES(P G) SPCVAL((p P) (g G)) MIN(1) + PROMPT('Function (Put/Get)') PARM KWD(USR) TYPE(*CHAR) LEN(10) MIN(1) + PROMPT('User profile in remote system') PARM KWD(PWD) TYPE(*CHAR) LEN(10) MIN(1) + PROMPT('Password to remote system') PARM KWD(CMD1) TYPE(*CHAR) LEN(20) DFT( ) + PROMPT('User defined FTP command 1') PARM KWD(CMD2) TYPE(*CHAR) LEN(20) DFT( ) + PROMPT('User defined FTP command 2') PARM KWD(CMD3) TYPE(*CHAR) LEN(20) DFT( ) + PROMPT('User defined FTP command 3') PARM KWD(SUCCES) TYPE(*CHAR) LEN(1) RTNVAL(*YES) + PROMPT('1=Transfer successful / 0=Not') ====================================================================== filename="bldftp1r.txt" F/TITLE CREATE FTP SCRIPT ****************************************************************** * * * This program creates the FTP script for FTPBATCH command. * * * ****************************************************************** * * ****************************************************************** F/SPACE 3 ****************************************************************** * * * INDICATOR USAGE * * * * IND. DESCRIPTION * * * * LR - CLOSE FILES ON EXIT * * * ****************************************************************** F/EJECT ****************************************************************** *FILES USED BY THIS PROGRAM **************************************************************** FFTPCMD O F 92 DISK D/EJECT ****************************************************************** * DATA STRUCTURES USED BY THIS PROGRAM ****************************************************************** D/SPACE 2 * * Source file record format * D CmdRec DS D SRCSEQ 1 6 2 D SRCDAT 7 12 0 D SRCDTA 13 92 C/EJECT ****************************************************************** * VARIABLE DEFINITIONS AND LISTS USED BY THIS PROGRAM * ****************************************************************** C/SPACE 2 * * Define parameter list * C *ENTRY PLIST C PARM RMTUSR 10 C PARM RMTPWD 10 C PARM FUNCTION 1 * possible values: P * G C PARM LCLFIL 50 * C PARM RMTFIL 50 * C PARM CMD1 20 C PARM CMD2 20 C PARM CMD3 20 C/EJECT ****************************************************************** * The Main Program * ****************************************************************** * C EXSR CF001 * C EVAL *INLR = *ON C RETURN C* C/EJECT ****************************************************************** * S U B R O U T I N E S * ****************************************************************** ****************************************************************** * Main Processing * ****************************************************************** C CF001 BEGSR * C Z-ADD *ZERO SEQ 6 2 * C EXSR CF002 C EXSR CF003 C EXSR CF004 C EXSR CF005 * C ENDSR C/EJECT ****************************************************************** * Build and Write User ID and Password record * ****************************************************************** C CF002 BEGSR * C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ C RMTUSR CAT(P) RMTPWD:1 SRCDTA C WRITE FTPCMD CmdRec * C ENDSR C/EJECT ****************************************************************** * Write Optional FTP command records * ****************************************************************** C CF003 BEGSR * C CMD1 IFNE *BLANK C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ C MOVEL(P) CMD1 SRCDTA C WRITE FTPCMD CmdRec C ENDIF * C CMD2 IFNE *BLANK C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ C MOVEL(P) CMD2 SRCDTA C WRITE FTPCMD CmdRec C ENDIF * C CMD3 IFNE *BLANK C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ C MOVEL(P) CMD3 SRCDTA C WRITE FTPCMD CmdRec C ENDIF * C ENDSR C/EJECT ****************************************************************** * Build and Write PUT/GET Command Record * ****************************************************************** C CF004 BEGSR * C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ * C SELECT C FUNCTION WHENEQ 'P' C 'PUT' CAT(P) LCLFIL:1 SRCDTA C SRCDTA CAT(P) RMTFIL:1 SRCDTA C WRITE FTPCMD CmdRec * C FUNCTION WHENEQ 'G' C 'GET' CAT(P) RMTFIL:1 SRCDTA C SRCDTA CAT(P) LCLFIL:1 SRCDTA C SRCDTA CAT(P) '(Replace':1 SRCDTA * * * * C WRITE FTPCMD CmdRec C ENDSL * C ENDSR C/EJECT ****************************************************************** * Build and Write QUIT Record * ****************************************************************** C CF005 BEGSR * C Z-ADD *ZERO SRCDAT C ADD 1 SEQ C Z-ADD SEQ SRCSEQ C MOVEL(P) 'QUIT' SRCDTA C WRITE FTPCMD CmdRec * C ENDSR *===============================================================
[report a broken link by clicking here]