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

Re: Base64 decode of a PNG file



   Many thanks to you all: to Scott M.(for the�O_TEXTDATA), to Thomas (
   for�add *DATA to the %addr() function) and to you Mike (for�declen -
   not %len(OutputData)).
   After all your advises I've was finally able to decode and write the
   result in IFS in a .PNG file.
   So if someone , someday, will need to call FEDEX webservice and decode
   the binary result... do not hesitate.
   Now I'll use PRTSTMF to print the PNG to a laser printer ( PRTSTMF -
   very handy tool to print a STMF to a printer, PDF to laser, ZPL to
   Zebra, etc... thanks again Scott K.)�   Thank you once again for your advises and patience,
   all the best,
   Radu

   On Mon, Feb 23, 2015 at 6:53 PM, Mike Krebs
   <[1]mkrebs@xxxxxxxxxxxxxxxxxx> wrote:

     In this post, Scott showed how to set the length of the result
     (outputData).
     [2]http://forums.iprodeveloper.com/forums/aft/148487
     After the call to decode, the length of the output is in declen -
     not %len(OutputData). So you need to use declen as the length.
     -----Original Message-----
     From: [3]ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     [mailto:[4]ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
     Thomas Raddatz
     Sent: Monday, February 23, 2015 11:37 AM
     To: HTTPAPI and FTPAPI Projects
     Subject: Re: Base64 decode of a PNG file

   Radu,
   As far as I can see, 'OutputData' is a "varying" field:
   � D OutputData� � � s� � � � � 32767A� �varying
   Hence you need to add *DATA to the %addr() function:
   � callp write(fd: %addr(OutputData: *DATA): %len(OutputData));
   Thomas.
   Am 23.02.2015 um 17:10 schrieb Radu Botescu:
   >� � Hello,
   >� � I call a Fedex webservice in order to retrieve a document in PNG
   format
   >� � and print it.
   >� � But this document is base64 encoded.
   >� � Thanks to Scott's HTTPAPI I can call the webservice and parse
   the right
   >� � XML element into a file in IFS.
   >� � So at this time I have a binary file in IFS:
   >� � -� /tmp/fedex.bin ==>� CCSID 819
   >� � - if I� �copy/paste it in a online internet decoder I have no
   problem
   >� � in getting back the PNG
   >� � - but on the AS400 I have no luck:
   >� � � �- I've tried the openssl (opened QSHELL and put "openssl
   base64 -d
   >� � -in /tmp/fedex.bin -out /tmp/fedex.png� �") ==> the result is
   a
   >� � fedex.png with 0 bytes;
   >� � � �- I've tried Scott's base64_decode (reading the IFS and
   writing the
   >� � result in IFS)� �==> same result, a fedex.png with 0 bytes;
   >� � What I'm doing wrong...? :(
   >� � Thank you in advance for your help.
   >� � Here below the program using Scott's base64_decode (sorry in
   advance if
   >� � my code is a mess...it is only a draft version..proof of concept
   kind
   >� � of...):
   >� � H DFTACTGRP(*NO) BNDDIR('BASE64':'QC2LE')
   >
   >
   >
   >� � � /copy BASE64_H
   >
   >� � � /copy httpapi_h
   >
   >� � � /copy ifsio_h
   >
   >
   >
   >
   >
   >� � D BASE64DATA� � � � �s� � � � � � � � � �72A� �   DIM(43) CTDATA
   >� � PERRCD(1)
   >� � D ReportError� � � �PR
   >
   >
   >
   >� � D IFS_file2Var� � � pr� � � � � � �65535a� � varying
   >
   >� � D� �pFile� � � � � � � � � � � � � � � � �   256a� � value
   >
   >
   >
   >� � D InputData� � � � � s� � � � � � � �32767A� �   varying
   >
   >� � D OutputData� � � � �s� � � � � � � �32767A� �   varying
   >
   >� � d decdata� � � � � � �s� � � � � � � �32764a
   >
   >� � d decoded� � � � � � �s� � � � � � � �32764a
   >
   >� � d declen� � � � � � � �s� � � � � � � � � �10i
   0
   >
   >� � d len� � � � � � � � � �s� � � � � � � � �   �10i 0
   >
   >� � D outputfile� � � � �s� � � � � � � � � 200A
   >
   >� � D outfile� � � � � � �s� � � � � � � � � �10I 0
   >
   >� � d rc� � � � � � � � � � �s� � � � � � � � �   �10i 0
   >
   >� � d i� � � � � � � � � � � s� � � � � � � � �   �10i 0
   >
   >� � D fd� � � � � � � � � � �S� � � � � � � � �   �10I 0
   >
   >
   >
   >� � � � � � �// Declare the files
   >
   >� � � � � � �InputData = IFS_file2Var('/tmp/fedex.bin');
   >
   >� � � � � � �len = %len(InputData);
   >
   >
   >
   >� � � � � � �outputfile = '/tmp/fedex.png';
   >
   >
   >
   >� � � � � � �// Prepare the OUT file
   >
   >� � � � � � �fd = open(outputfile
   >
   >� � � � � � � � � � � � � � � � � :
   O_WRONLY+O_CREAT+O_TRUNC+O_CCSID
   >
   >� � � � � � � � � � � � � � � � � : S_IRGRP + S_IWGRP
   + S_IXGRP +
   >
   >� � � � � � � � � � � � � � � � � � � �S_IRUSR +
   S_IWUSR + S_IXUSR
   >
   >� � � � � � � � � � � � � � � � � : 819);
   >
   >� � � � � � �callp close(fd);
   >
   >� � � � � � fd = open(outputfile:O_WRONLY+O_TEXTDATA);
   >
   >
   >
   >� � � � � � // decode InputData
   >
   >� � � � � � declen = base64_decode(%addr(InputData : *DATA )
   >
   >� � � � � � � � � � � � � � � � � � � � � � �:
   len
   >
   >� � � � � � � � � � � � � � � � � � � � � � �:
   %addr(OutputData : *DATA )
   >
   >� � � � � � � � � � � � � � � � � � � � � � �:
   %len(OutputData));
   >
   >
   >
   >� � � � � � // write it
   >
   >� � � � � � callp write(fd: %addr(OutputData):
   %len(OutputData));
   >
   >� � � � � � callp close(fd);
   >
   >
   >
   >� � � � � � *inlr = *on;
   >
   >
   >
   >� � � **** IFS ==> variable pgm
   >
   >� � P IFS_file2Var� � � b� � � � � � � � � � � � �   � export
   >
   >� � D IFS_file2Var� � � pi� � � � � � �65535a� � varying
   >
   >� � D� �pFile� � � � � � � � � � � � � � � � �   256a� � value
   >
   >
   >
   >� � D open� � � � � � � � � pr� � � � � � � � �   10i 0 extproc('open')
   >
   >� � D� �filename� � � � � � � � � � � � � � � � �   *� � value
   >� � options(*string)
   >� � D� �openflags� � � � � � � � � � � � � � � 10i
   0 value
   >
   >� � D� �mode� � � � � � � � � � � � � � � � � �   �10u 0 value
   >� � options(*nopass)
   >� � D� �codepage� � � � � � � � � � � � � � � �10u
   0 value options(*nopass)
   >
   >� � D� �creatcnvid� � � � � � � � � � � � � � 10u 0
   value options(*nopass)
   >
   >
   >
   >� � D read� � � � � � � � � pr� � � � � � � � �   10i 0 extproc('read')
   >
   >� � D� �handle� � � � � � � � � � � � � � � � �   10i 0 value
   >
   >� � D� �buffer� � � � � � � � � � � � � � � � �   � �*� � value
   >
   >� � D� �bytes� � � � � � � � � � � � � � � � � �   10u 0 value
   >
   >
   >
   >� � D close� � � � � � � � pr� � � � � � � � � 10i
   0 extproc('close')
   >
   >� � D� �handle� � � � � � � � � � � � � � � � �   10i 0 value
   >
   >� � D data� � � � � � � � � s� � � � � � � �65535a
   >
   >� � D bytesRead� � � � � s� � � � � � � � � �10i 0
   >
   >� � D handle� � � � � � � �s� � � � � � � � � �10i
   0
   >
   >� � D rc� � � � � � � � � � �s� � � � � � � � �   �10i 0
   >
   >� � D O_RDONLY� � � � � � c� � � � � � � � � � � �   � � 1
   >
   >� � D O_TEXTDATA� � � � �c� � � � � � � � � � � �   � � 16777216
   >
   >
   >
   >
   >
   >
   >
   >� � � � �handle = open(%trim(pFile): O_RDONLY+O_TEXTDATA);
   >
   >� � � � �if handle < 0;
   >
   >� � � � � � // something is wrong
   >
   >� � � � � � �return '';
   >
   >� � � � �endif;
   >
   >� � � � � � bytesRead = read(handle: %addr(data): %size(data));
   >
   >� � � � � � if bytesRead <= 0;
   >
   >� � � � � � return '';
   >
   >� � � � � � endIf;
   >
   >� � � � � � rc = close(handle);
   >
   >� � � � � � return %trim(data);
   >
   >
   >� � P� � � � � � � � � � � � �e
   >
   >
   >

     >
     --------------------------------------------------------------------
     --
     > - This is the FTPAPI mailing list.� To unsubscribe, please go to:

   > [5]http://www.scottklement.com/mailman/listinfo/ftpapi
   >
   ----------------------------------------------------------------------
   > -
   >
   -----------------------------------------------------------------------
   This is the FTPAPI mailing list.� To unsubscribe, please go to:
   [6]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------
   -----------------------------------------------------------------------
   This is the FTPAPI mailing list.� To unsubscribe, please go to:
   [7]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------

   --
   R.

References

   1. mailto:mkrebs@xxxxxxxxxxxxxxxxxx
   2. http://forums.iprodeveloper.com/forums/aft/148487
   3. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   4. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   5. http://www.scottklement.com/mailman/listinfo/ftpapi
   6. http://www.scottklement.com/mailman/listinfo/ftpapi
   7. http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------