GETURI Release Notes

v1.00b  - Original

v1.01b  - Changed size of data parameter from 256 to 2048 characters.

v1.02b  - Added option to specify *STMF for data parameter and use

           a stream file to send the request data parameters.

v1.03b  - Added parameters to specify userid and password for

           basic authorization.

v1.04b  - Changed command to not show password in job log.  

          Internal processing updates.

v1.05b  - HOST parameter wasn't being used.  Fixed.

          Authentication was adding an extra line feed causing errors

           when making requests to some systems.  Fixed.

v1.06b  - Added ability to include Cookie: header.  See parameter help

           for location of RFC and formatting of this data.

v1.07b  - Added SSL Timeout parameter to specify a timeout value for 

           the SSL Handshake operation

v1.08b  - Added DEBUG paramter.  When specified as *YES, the HTTP 

           header used will be written to the stream file


v1.09b  - Changed the length of the cookie parameter from 1024 to

           4096, the max specified in the RFC.

v1.10b  - When doing a POST and specifying the URI data in a stream

           file, size was limited to 32k.  Changed this to be 

           unlimited.  GET is still limited to 32k.

v1.11   - Removed beta status.  Added REFERER parameter that allows

           a user to specify a Referer that will be placed in the 

           HTTP header request.

v1.12   - Added timeout functionality.  There is now a TIMEOUT 

           parameter on the GETURI command.  The default is 30 seconds.  

          A special thanks to Paul Nicolay for assistance with 

           this portion of the utility.

v1.13   - Fixed Accept parameter.  GETURI was always using text/html

           and ignoring this parameter.

v2.00b  - Beta version.  Please be sure to test this version if you

           were using a previous version in production for 

           compatibility with your applications.

          Added ability to simulate an HTML form file upload.  

           Specify UPFILE(*YES) and you will be prompted with fields

           to fill in the qualified file name located in the IFS to

           upload, the form file field name, and the file content


          Fixed debug file so that it won't be garbage if emailed or

           FTPed, etc.

          Added CONNECTION parameter.  This is used to specify a

           Connection: value such as Keep-Alive in the header.

          Added CLOSE parameter.  This parameter allows you to specify

           if the connection/socket should be closed after GETURI 


v2.01b  - Added ability to specify content-type.

          Added ability to specify a SOAPAction header.

          Removed extra CRLFs from POST actions.

          Added a warning message that if the socket read times out

           after 1 or more successful reads.  The command will still

           complete normally, but a warning message will be issued.

v2.02b  - Added user defined header/data parmeters.  With these you can enter

           up to 20 user defined HTTP headers and associated data parameters.

          Removed SOAPAction parameter.  If you were using this previously 

           you can use the new user defined header section to include this


          Minimum release level is now V4R5.

v3.00b  - Added *HEAD as an option for request method.

          Added API interface.  See documentation for more information on this at:


v3.10b  - Added Certificate Password parameter.  

          Added error checking so errors don't result in a hard halt from the

           GETURI command.

v3.20b  - Added SSL Application ID parameter.  This parameter is to assign 

           the GETURI application a unique ID that can be used when assigning

           trusted certificates to certain applications.

v3.21b  - Bug fix on using SSL Application ID parameter.  Was allocating storage

           incorrectly.  Fixed to allocate a default of 4096 bytes using malloc().

v3.22b  - Added EBCDIC to ASCII translation table parameter (EATABLE) and

           ASCII to EBCDIC translation table parameter (AETABLE).

v3.23b  - Increased size of storage allocated for application certificate from

           4k to 32k.

v3.24   - Changed program to use the defaults QTCPASC for EATABLE and 

           QEBCDIC for the AETABLE values if left blank when using the API 


          Added parameters LOCIP and LOCPORT which allow you to specify a local 

           IP address and Port to bind the request to.

v3.25   - Updated application to set defaults for GI_CStore to *SYSTEM and

           GI_Close to *YES if left blank.

v3.30  - **NOTE**

         Updated registration to use Serial Number and Model number.

         Removed display to screen only limit from unregistered version.  Instead, 

          temporary keys will be issued to allow unlimited testing for a period of time.

         -- Current Users --

         Email me a note with your serial number(s) and model number(s) before you

          install this version so I can get you a new key.  

         -- New Users --

         Email me and I will get you a temporary key.  This temporary key will allow you

          to use GETURI with all functionality for a limited period of time.  You

          need a temporary key or a permanent key to use GETURI.  

v3.31  - Fixed small problem with temporary registration key processing.

v3.32  - Fixed bug when errors exist and files aren't closed.

v3.33  - Fixed small bug when using *RETURN in the GETURIRG API

v3.34  - Added SPRHEAD parameter which can be used to supress the HTTP headers from

          the result.  This option is only valid with output type of *STMF or

          *RETURN.  If SPRHEAD(*YES) is specified and *STMF is the output type,

          the headers will be placed in a file named "xxxxx.hdr" where "xxxxx" is the

          file name specified for the output file name.  If the API is used there is

          now a 3rd parameter to the GETURIRG API call that will contain the headers

          if the Supress Headers option is used.

v3.35  - Added UPNAME parameter.  This is used when uploading a file (UPFILE(*YES)) and

          allows you to name the file that is being uploaded anything you want.  If

          left as the default of *UPSTMF the stream file used, along with the entire path,

          will be used as the filename (same as before this update).

v3.36  - Added CCSID parameter to be used for EBCDIC to ASCII and ASCII to EBCDIC

          translations.  This was added so the conversion functionality was more like

          the TCPIP servers on the iSeries.  When left as the default of *TBL, the 

          EBCDIC and ASCII tables specified will be used instead of the CCSID.

v3.37  - Fixed small bug when supressing headers and using SSL.

v3.38  - Added HTTPHEAD parameter.  When specifying *NO no HTTP headers will be sent,

          only the data.  When *USRHDR is specifyied, only the user specified headers

          will be used.  Defaults to *YES which will perform as normal.

          When specifying *NO or *USRHDR, the POST method must be used.

v3.39  - Fixed small bug where in rare cases when using API the returned data would

          be shifted over on 2nd - nth calls.

v3.40  - Fixed bug when using API interface.  The Content-length header was not

          getting sent in some cases.

v3.41  - Forced Non-Blocking sockets.

         Changed HOST parm default to *DFT which will use the domain name in the

          request as the host name.

v3.42  - Changed URI parameter length from 128 to 256.

v3.43  - Updated to handle HTTP 1.1 chunked data and content length.

v3.44  - Fixed bug when using GET method and *STMF for input.  Was putting data

          in the URL and in standard input.

v3.45  - When specifying *DFT for HOST parmater added port to the string if it wasn't

          a default port used.

v3.46  - Changed the maximum number of user headers from 20 to 50

v3.47  - Added the DEBUGF parmater in order to allow the user to name the debuf file

          whatever they want.  This value still defaults to /tmp/geturidebug.txt 

          and should not cause any conflicts with previous versions.

          The new parameter added to the API interface is GI_DebugFile.

v3.48  - Internal updates for RXS.

v3.49  - Updates that possibly closed non-GETURI sockets causing issues with

          other applications.

v3.50  - Clean up closing stream files which may have also closed other sockets

v3.51  - Updated return variables for GETURI API from 32767 bytes to 

          65535 bytes

v4.00  - Registration changes.  See installation notes.   

v4.01  - Fix to registration.  If you received new permanent keys for v4.00, please 

          email us for a new key before installing.

         Changed processing so if specifying a proxy and using basic authentication user

          id and password it would use the Proxy-Authorization header for proxy


v4.02  - Bug in registration when using GETURI command.  API still worked fine, but using

          command showed unregistered message after upgrading to v4.00 or v4.01 and

          installing new keys.

v4.03  - Added new parameters for Proxy Authentication so they are separate from the Basic

          Authentication parameters.

v4.04  - (SP061212) Updated GETURI to handle requests without HTTP headers.

         (SP070102) Updated GETURI so Content-Length value is always started

          back at zero.

         Added *NONE options for HOST and CONTTYPE parameters.  When used on either of 

          these parameters, the header specified as *NONE will not be sent. 

v4.05  - Added new parms to GETURIRG API interface.  They are as follows:


          GetUri_Data - Parameter used to pass up to 65k of data instead of using the

           GI_Data parm or a Stream file.  To use this, the GI_Data parm must contain 

           the value of *PARM and the request method must be POST.

          GetUri_MsgCd - Message code returned from the GETURIRG API.  

           C=Completed, D=Diagnostic Messages, E=Error

          GetUri_Msg - Message text returned from the GETURIRG API.  This is the same

           message that is sent to the job log.


         These new parms are included in the updated version of the GETURICOPY member.

         Added error checking for blank URI.

         Fixed bug when content length was zero it wasn't using a zero, instead a blank.

         Updated application so that the HTTP headers are always returned in the

          GETURI_Head paramater, not just when headers are supressed.

v4.06  - (v4.05 SP) Updated GETURI to throw error when no server is specified

            instead of a STRING error.

         (v4.05 SP) Added option of *OFF for the DEBUG parameter which will tell

            GETURI to not send any messages during the running of the


         (v4.05 SP) Changed SSLInitDS to a specific size of 64 bytes (per IBM)

         (v4.05 SP) Updated Base64 encoding for userid and password when using

            Basic Authentication.  Base64 routine was automatically

            adding CRLF to strings over 64bytes causing problems

            with authentication.

         Added new option to use the special value of *STMF for user header (USRHDR)

          and a path to an IFS file for the user header data.  This will import custom

          headers larger that the parameters allow to be entered.  Example:

          USRHDR((*STMF '/tmp/headtest.txt') 

v4.07  - (v4.06 SP) Fixed bug in GETURI when sending a diagnostic error it wasn't

          closing files, sockets, etc.

         (v4.06 SP) Allowed the value SOCKET to be used for the PROTO (GI_Proto)

          parameter to be used when working directly with sockets.

         (v4.06 SP) Allowed for parm value of *RETNC on the GI_OutType parm which

          stands for "Return by no Translation".  This means the data

          will be returned without being converted to EBCDIC.

         (v4.06 SP) Fixed issue when a colon was part of the URI but after the 

          server name (ie

         Fixed bug when uploading some files was erroring out.  Still having issues

          with some files (like zip files) when uploaded.

v4.08  - (v4.07 SP) Added ability when using the GETURIRG API to specify a very long

            URI in the GetURI_Head parameter.  This is done by specifying the

            special value of *GETURI_HEAD as the GI_URI parm and then

            specifying the long URI in the GetURI_Head parameter.

         (v4.07 SP) Updated application so when using a proxy with SSL that it would

            use proper methods for communicating with the proxy.

         (v4.07 SP)  Updated debug file processing where it would error out if code page

            1208 was used and the debug file would be blank.

         (v4.07 SP)  Fixed bug when converted data resulted in DBCS data

         (v4.07 SP)  Fixed bug when domain name started with a number.

         (v4.07 SP)  Added more debugging to conversion routines to put error number and

            text in job log should an error be encountered.

         (v4.07 SP)  Fixed bug when converting 1208 to EBCDIC.

         (v4.07 SP)  Fixed bug when sending zero bytes on a POST.

         (v4.07 SP)  Fixed bug when sending no headers, an extra CRLF was being added to

            the beginning of the data.

         (v4.07 SP)  Added SOCKET2 value for protocol to treat it more like an older

            type socket where it reads until zero bytes are returned.

         (v4.07 SP)  Added debugging for reads from sockets when DEBUG(*YES).

         (v4.07 SP)  Fixed processing for protocol type SOCKET.  It was stopping reading

            if the size of the data returned was less than the size of the

            receiver variable.  It didn't do this before and was causing

            issues with some existing processes.

         (v4.07 SP)  Added new debugging when DEBUG(*YES) is specified.  This will create

            a new file with the same name as the debug file, only with the added

            extension of log (ie /tmp/geturidebug.txt.log).  This file will

            show all the processes such as opening files and sockets, closing

            files and sockets as well as the values of the parameters passed in.

         (v4.07 SP) Update debug file.  Bytes read for stream file was incorrect, added

            logging for select().

         (v4.07 SP)  Fixed issue with debug log files getting code page of 37 instead of

            code page specified on command.

         (v4.07 SP)  Fixed bug when reading HTTP 1.1 chunked data.  The CRLF at the end of

            the data was being included in the results.  Also added some more

            info on chunked data to the geturidebug.txt.log file.

         (v4.07 SP)  Error when convering data to 1208 code page and conversion was made

            to a DBCS piece of data.  Fixed.

         (v4.07 SP)  Fixed bug when using *PARM data and length was > 32k.

         (v4.07 SP)  Fixed bug when using CCSID, data was getting converted incorrectly.  This

            bug only affected those who installed SP120426 which wasn't ever

            available to the public.

         Updated user header data field size from 128 bytes to 1024 bytes.

         SP120812 - Fixed bug when 1 byte of data would get dropped randomly.

           Bug when specifying CCSID and user headers, only first user

            header would get used.  Fixed.

           Fixed bug when data started with space.

SP140830 - Fixed issue when not using a proxy and a port was included in

            the URL.  

           Fixed issue when CLOSE was set to *NO.  It wasn't resusing sockets.

            When using this option if you're specifying HTTP 1.1 by default the

            socket will stay open.  If you're using HTTP 1.0 you need to specify

            keep-alive for the connection and even then not all servers will

            work with this.

v4.09    - Added the option to specify *MULTIPARM when using the GETURIRG API for

            the GI_Data parameter.  This value will allow you to specify data in the

            GetUri_Data parameter to be used in a multi-part POST.

           Added parameters GI_PContType and GI_PContType to the Geturi_In variable.

            these parameters allow you to specify the Content-Type value for the

            parameter data and the stream file data, respectivley, when specifying

            *MULTIPARM for the GI_Data parameter.

v4.10    - Updated background processing to use unique ID instead of timestamp for 

            temporary file.

SP141204 - Updated application so that when stream files are created 

            "other" users would get RWX authority to the files and not

            just RX.

SP150424 - Updated application to remove 100 character file name limit.

SP150609 - Updated application so the value of data area GU002DA will contain

            the SSL protocol version to use.  See


            for protocol versions.

SP150701 - Updated application for CCSID conversions to be more efficient and faster.

SP150903 - Compressed debugging info for reading of header information.

v5.00    - Added licensing by date (SaaS) option.

SP151004 - Updated application so when retrieving to a PF the buffer

            length was the same as the record length of the file 

            receiving data.

SP151123 - Fixed issue when reading chunked lengths for HTTP 1.1 data.

SP151201 - Found issue when trying to use GETURI and not send HTTP

            headers.  Wasn't recognizing *POST as POST method.

SP151221 - Fixed issue when CCSID of input data file was 1208.  Would

            return error Conversion error. RC(0) errno(3490).  Fixed.

v5.10    - Changed all defaults for CCSID and Code Page to 1208.

           Updated Base64 processing to use apr_base64_encode API.

v6.00    - If you are using the GETURIRG API you WILL need to recompile

            any programs to make sure the new /COPY member GETURICOPY

            is brought into your programs.

           Increased User Defined Header (GI_UsrHdr) from 30 to 

            128 bytes.

           Increased User Defined Header Data (GI_UsrHdrDta) size 

            from 1024 to 2048 bytes.

           Reduced maximum number of user headers from 50 to 20

v6.10    - Added PATCH request method.

v6.20    - Updated GI_BUser and GI_BPW from 64 to 128 bytes.

v7.00    - Added the ability to turn off SSL Strict Validation.  This is done

            by changing the value of data area GUSSL01DA to *NO.  Any other 

            value in this data area, or if the data area is deleted,

            will result in SSL Strict Validation.

           Added new feature that in debug and when you specify SSL(*YES)

            the SSL certificate used by the host you are connecting to will

            be saved in the IFS as /tmp/<debugfilename>.cer.

v7.01    - Updated to grab content length of data stream file using API.

           Updated trace file so loading content length was just a couple lines.

           Added more info to trace file such as if it ends abnormally the 

            total bytes sent vs the total bytes of the file.

v7.10    - Added data area GU003DA that holds the buffer size to use for

            reading and writing to and from stream files and sockets.

v8.00    - Fixed issue when using GETURIRG API where GI_CCSID wasn't defaulting

            to 1208.

           Updated to min OS version of V7R1.

v8.10    - Updated so when EWOULDBLOCK error (errno 3406) was encountered during

            HTTP 1.1/SSL connections we would wait until socket was ready.

v8.20    - Updated so when reading non-chunked data and content-length is zero 

            exit immediately.

v8.21    - Updated process for blocking to reset error count for each successful


v8.30    - Fixed small bug when reading chunked data and system would report a not

            ready error.

v8.31    - Fixed issue when using HTTP 1.1 and the data is NOT chunked and the size

            was greater than the buffer.

v10.00   - Added option to use GSKit for SSL communications.  This is done by setting

            the SSLMODE parameter to *GSKIT for the command, or setting GI_SSLMode to 

            *GSKIT for the API.  The default for this parameter is *DFT but in the 

            future it may change to *GSKIT as IBM seems to be moving away from 

            supporting the "legacy" SSL APIs.

           Added SNI support.  GETURI will by default use the host name as the SNI 

            parameter on SSL connections.  This can be overridden using the SNI 

            parameter on the command or the GI_SNI field in the API.  This field is 

            only valid with using *GSKIT for SSL.

v10.01   - Added data area GUSSL02DA that can be used to tell the system which SSL 

            APIs to use.  The value of *GSKIT will use the GSKit APIs and anything else

            will use the standard IBM SSL APIs.  This value can also be overridden on the

            GETURI command by specifying *IBM for the IBM SSL APIs, or *GSKIT for the

            GSKit SSL APIs.

v10.02   - Added code so that if GI_SSLMode isn't passed in it will default to *DFT.

           Changed default of data area GUSSL02DA from *DFT to *GSKIT so the GSKit will

            be used by default for SSL connections.

SP191004 - Fixed bug when reading chunked data and the 2nd to last 

            byte read was part of the ending CRLF of the chunked data.

           Added more debugging/verification to chunked data reading

            to log file.

SP200225 - Fixed issue when sending requests without a path on the URI

            and sending query string data.

SP200505 - When using option *STMF data will also be returned in the

            GetUri_Out parameter on the call to GETURIRG.

SP200506 - Added code to make sure PF is closed if *FILE output type

            is used.  Also added logging to the debug file for opening

            and closing the PF.

v10.10   - Added F.GETURI service program that contains ILE function used to

            call GETURI.

SP200827 - Added check for GSK_WOULD_BLOCK error to reading chunk length.

           Added more debugging messages so operations are more clear

            as to when errors happen.

v10.11   - Updated to work with files > 2GB.

           Updated DEBUG paramter to include the option *ALL.  This option  

            will function as *YES did in previous versions displaying 

            verbose debugging.  The value *YES will now skip most read, write

            and stat() function calls to reduce the size of the debug file and

            make it easier to read.

SP200911 - Changed HTTP headers Content-type and Content-length to

            Content-Type and Content-Length because apparently one server

            is looking for headers as case sensitive.  *tsk tsk*

SP200928-  Updated to accept Content-Type header values using HTTP 1.1

            larger than 2GB (updated field size to 64 bit int).

v11.00   - Change of parmeter sizes and types to Varying.  This now allows returning

             up to 1MB of data into your application.  If you are using the GETURIRG

             API this will require recompilation (at the very least) of your 

             those applications.

           It is STRONGLY encouraged that all new development is done using the ILE 

            functions included in the F.GETURI service program as well as converting

            existing applications to use the same.

           Removed EBCDIC to ASCII translation using tables and QDXLATE

           GI_URI increased to 65535 bytes.

           GI_UsrHdr increased to 2048 bytes.

           GI_UsrHdrDta increased to 65535 bytes.

           GI_Data increased to 65535 bytes.

           Changed default of PROTOV from 1.0 to 1.1.

           Allowed any method on command.  (Already allowed in API and ILE functions).

           Change display of data when using * as return type on GETURI command to 

            use a stream file instead of a PF.

           Changed PORT parameter default from 80 to *DFT which will automatically use

            port 80 if SSL is set to *NO or 443 if SSL is set to *YES.

           Removed proxy support.  This will not be added back in unless for some reason

            proxy technologies are updated and used as normal vs NAT.

           Any port specified on the URI will be igored.

           Added more debug details to trace files.

           Added #geturi_getHeader() function to F.GETURI to allow retrieval of HTTP header 


           Added #geturi_getResponseCode() to F.GETURI to allow retrieval of  HTTP 

            response code (and optionally the response text).

           Removed use of data area GU003DA for stream file read buffer size.  Defaults

            to the size of the buffer in the application now.

           Removed COOKIE paramter.  Use User Defined Headers for this if required.

           Added source PF QRPGLESRC to GETURI library which includes a small sample program

            that uses the ILE functions included in the F.GETURI service program.

           SP210120 - Updated #geturi_resetValues() to initialize all variables

            not just the GetUri_In data structure.

           SP210713 - Updated Content-Type to be set with the content type specified

            when upload file (gi_upfile) is *YES.

           Increased size of Upload File Content Type (gi_upcont) from 64 to  


           SP211119 - Changed METHOD on GETURI command to 10 characters and added 

            *DELETE as an option.

           SP211121 - Added option *ALL to Suppress Headers (SPHREAD) so that when

            your output is a stream file the .hdr file is not created.

v11.10  - Added option of *STMFRAW for the DATA parameter (or GI_Data) so that when

           using a stream file for the POST data it will read and write the data from

           the stream file as raw and not do any conversions. 

v12.00  - Removed the # from the beginning of all ILE function names for better

           compatibility in different code pages.

          SP220106 - Updated GET requests so data wouldn't be corrupted.

           Allow blank or *NONE for ACCEPT parameter.  If so, this header

            will not be used.

          SP220201 - Fixed issue where if debug wasn't *ON or *ALL error messages

            wouldn't be reported when using the GETURI command.  Changed

            it back to previous behavior where it will send an error 

            message unless debug is set to *OFF.  The value of *NO will 

            still send errors as well.

          SP230705 - Updated GETURI command so that user defined headers are larger.  

            The name can be up to 1024 bytes and the value for each can be

            up to 4096.        

          SP230827 - Internal change to allow requests to for error 

            reporting without licensing required.      
          SP230906 - Bug fix when not specifying a full URI.  

          SP230911 - Limited port to max of 65535.    

          SP240102 - Fixed bug when using geturi_getResponseCode() and not using the

            response text parameter it would corrupt part of the

            GetUri_Out data       

v13.00  - Fixed random bug when reading an SSL socket and it would block.  

          Compiled on V7R5 so min release level is now V7R3.  

          SP240510 - Updated geturi_getReponseCode() to not require a status 

            message after the code (ie, 200 vs 200 OK) to return the

            correct status code.