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

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:
> 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
-----------------------------------------------------------------------