[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: FTP transfers garbled up



Hi Scott,

Find below some additions.

> Hi Mark,
> 
> > 1. Storing a file in the IFS, where the CCSID of the IFS 
> file is 1252.  
> > When FTP'ing this file, the contents gets garbled up. As if 
> there has 
> > been some kind of code page conversion. This only happens 
> when using 
> > the API. Doing a manual FTP (using the FTP command) from 
> the iSeries 
> > to the server, the file arrives intact.
> 
> The purpose of ASCII mode in FTP is to enable character set 
> conversion. 
>   So there *should* be code page (or CCSID) conversion going 
> on when you use FTP in ASCII mode.
> 
> I'm not really sure what is meant by "garbled up".   I assume 
> that means 
> that it's somehow doing the *wrong* code page conversion, 
> into something unreadable.
> 

Yes, with garbled up I meant some kind of invalid code page conversion.
I have attached an example file, which was attached by reading it
directly from the iSeries IFS file system. It opens and reads just fine.

Some stuff copied and pasted from the green screen properties of the
file in question:

Object . . . . . . :   /SEX/1/interfacing/BackupHistory/NEE_FR_OUT_SPL3
> 
CCSID (Coded Character Set Identifier) :   1252


We are using a "FTPAPI_PUT" program to FTP the file, This program does
the following calls (where in this case the "move/rename" is not
executed):

 * Connect to FTP server ...                                          
c                   eval      Connection =                            
c                             ftp_conn(Server:User:Password)          
c                   if        Connection < 0                          
c                   eval      Message = ftp_errorMsg(0)               
c                   eval      Message = iSeriesAdjust(Message:' ')    
C                   CallP     ProgramLog('*ERROR':'FTP0000':Message)  
c                   CallP     SndPgmMsg('FTP0000':'@MSG':Message:     
c                                       '*ESCAPE')                    
c                   eval      *inlr = *on                             
c                   return                                            
c                   endif                                             
 * Binary Mode ...                                                    
c                   callp     ftp_binaryMode(Connection: *off)        
 * Put file ...                                                       
c                   if        ftp_put(Connection:RemoteFile:LocalFile)
c                                                                  <0 
c                   eval      Message = ftp_errorMsg(Connection)      
c                   eval      Message = iSeriesAdjust(Message:' ')    
C                   CallP     ProgramLog('*ERROR':'FTP0000':Message)  
c                   CallP     SndPgmMsg('FTP0000':'@MSG':Message:      
c                                       '*ESCAPE')                     
c                   endif                                              
 * Move / Rename file ...                                              
c                   If        %Parms >= 6 and FinalLocation <> ' '     
c                   if        ftp_rename(Connection:RemoteFile:        
c                                                     FinalLocation) <0
c                   eval      Message = ftp_errorMsg(Connection)       
c                   eval      Message = iSeriesAdjust(Message:' ')     
C                   CallP     ProgramLog('*ERROR':'FTP0000':Message)   
c                   CallP     SndPgmMsg('FTP0000':'@MSG':Message:      
c                                       '*ESCAPE')                     
c                   endif                                              
c                   Endif                                              
 * Quit ...                                                            
c                   callp     ftp_quit(Connection)                     
c                   eval      *inlr = *on                              
C                   CallP     ProgramLog('*SUCCES':'':LocalFile)       

If you can provide me with your personal email address instead of going
through the list, I can give you IP and username/password of the system
we are FTP'ing to.

> I'm going to need more details in order to take this any 
> further.  If you can tell me how to reproduce the problem on 
> my own system, that would help a lot.
> 
> 
> > 2. Storing a member in a file. This file has CCSID 37. When 
> FTP'ing a
> > CR+LF is translated into a LF. If I am not mistaken this is an
> > "automatic conversion" when using ASCII mode and one side 
> is Unix and
> 
> I don't follow this.  Members in files don't typically have 
> either CRLF or just LF.  Members are record-oriented files, 
> not text files, and so they don't use end-of-line markers, 
> but rather have a fixed-width field layout.

You are right. I got mixed up a bit, because normally when we FTP a
member, on the receiving end, each record in the member is on its own
line, so line delimiters seem to be automatically added. But this
receiver is telling us, that everything is received as one line. They
don't have any linebreaks in the received file.

> Is FTPAPI the sender or receiver?

In both cases FTPAPI is the sender.

> Is the destination a member?  Or is it coming from a member?  Or both?

In both cases the destination is a file on which seems to be a
UNIX/LINUX system.

> 
> Please tell me how to reproduce the problem.  If I can 
> reproduce the problem, I can troubleshoot and fix it.  
> Otherwise, I'm stuck trying to guess all of the technical 
> details, which is extremely difficult.  So please tell me how 
> to reproduce.

Just create a PF (CCSID 37 in this case) with a single field. Create a
member with several records in it and FTP to destination. It uses the
same "FTPAPI_PUT" as mentioned above. The destination is the same FTP
server as in the first problem.

To summarize: FTP'ing to the same system. File from IFS to destination
gets wrong code page conversion. Member to destination does not get any
line delimiters.
 
> > In both cases the FTP API seems to do some stuff that manual FTP 
> > isn't. And as stated before, we never saw these problems with other 
> > servers. And we do exactly the same when communicating to 
> those other 
> > servers.
> 
> Working exactly like IBM's FTP client has never been one of 
> the goals of the FTPAPI project, and probably will never be a 
> goal.  So please help me fix things that are causing 
> problems, but don't ask that it works exactly like IBM's tool.
> 
> If you want something that works exactly like IBM's FTP 
> client, feel free to use IBM's FTP client.

Only wanted to point out, that manual FTP from the same system didn't
cause the same problems, and that IMO FTPAPI might be the suspect here.

Hoping you have enough information. Please feel free to ask, if you need
any more info. Thanks for your time.


Vriendelijke groet / Kind regards,

Mark Smits
Com-Unit BV, The Netherlands
The makers of Spider-Road

Tel. : +31 (0) 20 612 6856
Email: Smits@xxxxxxxxxxxx
WWW  : www.com-unit.com

Attachment: NEE_FR_OUT_SPL30919_040809_16222260.dat
Description: NEE_FR_OUT_SPL30919_040809_16222260.dat

-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------