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.