Internet ToolKit for 4D

 - News !
They use ITK...
To order...
Programmer's Guide
Programmer's FAQ
Upgrade to ITKv2.5
Technical Support
Mailing lists
Year 2000 Info

Internet ToolKit version history

From version 1.0a5 to version 2.6.1

You can find the latest version of this document here:

Version History:

Internet ToolKit™ for 4D v2.6.1 (22-Nov-2004)

ITKv2.6.1 is a free upgrade to ITK v2.5 and above providing the following bug fixes and changes:

  • Vulnerability fix in the openssl library. Under Windows, OpenSSL is now located in 2 DLLs (libeay32.dll and ssleay32.dll) that must be located in the WIND4DX folder
  • Some memory problems have been fixed by changing the 'SetHandleSize' code.
  • ITK_TCPRcv got some fixes in the OpenTransport code (MacOS 9/X)
  • ITK_TCPRcv under Windows was returning SSL data in small chunks (each SSL encrypted data packet was read one by one). Now it tries to read as many data as available.
  • ITK_Text2xxx & ITK_xxx2Text routines now check that the 32000 chars boundary is not broken. If the resulting string is longer than 32000 chars, it is now cut to 32000 chars.
  • ITK_BlobSearch/Replace could crash when blobs were not allocated
  • ITK_TCPRcv under MacOS could return invalid data when the status of the stream had reached 14 due to bad value returned by ITK_TCPChRcvd
  • ITK_Addr2Name under MacOS X was not returning dotted IP names anymore (like if no name could be retrieved
  • ITK_Encrypt/ITK_Decrypt routines could crash when the InitialValue parameter was not initialized
  • ITKccert.pem can now store client certificate that will be used by ITK_TCPOpen
  • ITK_SSLSetCert: better support of chained certificates.
  • ITK_TCPStrmInfo now handles UDP sockets correctly (could crash under MacOS)
  • ITK_TCPInfos under MacOS X was not returning valid TCP layers version infos.
  • ITK_Addr2Name under MacOS X was not returning dotted IP names anymore (like
  • ITK_TCPClose on SSL streams was shutting down the SSL layers, now this is done in ITK_TCPRelease.
  • ITK_Status2A was not handling invalid streamRef correctly, now status -1 is returned for invalid streams and not considered as an error.
  • ITK_BlobGzip now uses a slightly large compression buffer (500 bytes more). 

Internet ToolKit™ for 4D v2.6 (4-Sept-2002)

ITKv2.6 is a free upgrade to ITK v2.5 mainly providing MacOS X Carbon compatibility and bug fixes.

Some existing ITK commands have been enhanced compared to v2.5.

ITK "Light Binary Package" limitations

The "Light" binary package file can be used with both ITK Pro (with no stream limitation) and ITK Light license numbers (with the 8 streams limit). The "light binary package" is only provided to save disk space by removing uneeded cryptography and SSL code.

No more 68K code version

ITK v2.6 does not contain 68K code anymore. If you still need to use ITK on a 68K Macintosh, please contact ITK's Technical support (  

Enhanced and new commands:

  • ITK_SSLSetCert now allows to set default certificate infos.
  • Added ITK_SSLSetCipher(streamRef; cipherlist) to allow to set the list of ciphers on an SSL stream. ITK_SSLSetCipher must be called alfter ITK_TCPListen and BEFORE ITK_SSLSetCert.
  • ITK_Text2HTML and ITK_HTML2Text now support the euro symbol (€)

Bug fixes:

  • ITK_BlobUnzip: a bug could occur because of a too small decompression buffer.
  • Expiration date was checked by mistake on SSL Server license numbers.
  • New parameter added in ITK_EncryptText, ITK_EncryptBlob, ITK_DecryptText end ITK_DecryptBlob to provide initial vectors (IV) values. Encryption routines where not working correctly when using modes other than ECB (due to missing initialization of IVs).
  • When using SSL under Windows, the negociation could fail with some browsers. This is fixed.

Other changes:

  • Change of internal resource ID (15256 instead of 15000) to workaround a 4D Insider bug
  • Better support of "soft line breaks" in ITK_Text2Quoted. This is activated if option is set to 2.
  • Version 0.9.6g of OpenSSL is now used. This version includes a security bug fix regarding possible buffer overflows discovered in July 2002 (see
  • Several optimization in the SSL code should improve its speed.

Internet ToolKit™ for 4D v2.5.1 (11-Mar-2002)

Internet ToolKit v2.5.1 new features :

  • Added MD4 digests calculations.

Internet ToolKit v2.5.1 bug fixes :

  • ITK_BlobGzip could have problems compressing very small blobs.
  • ITK_PictSize , ITK_PictSave & ITK_TCPSendPict under Windows were not extracting JPEG data correctly in some cases.
  • ITK_SSLStrmInfo now returns -3 if the stream is not connected (status # 8)
  • ITK_uu2Text could not decode multiple lines uuencoded data correctly (result data was truncated).
  • SSL negociation was not handled asynchronously which could cause ITK to halt on calls like ITK_TCPStatus.
  • SSL negociation : when a stream was connecting but negociation done by the remote end before closing it, it status could stay to 2 indefinitely. Now the status will move to 20.
  • SSLv2 negociation could fail.
  • ITK_Bin2Mac could not decode files with a fork larger than 16MB (error code 3 was returned). This is fixed.
  • ITK_RFC2Secs was not converting some 2 digits years correctly. This is fixed.
  • ITK_TCPInfos was not returning ITK's last version number under ITK Light.
  • ITK_TCPSendBlob could not send a one byte blob (or a one byte portion of a blob). This is fixed. Starting and ending offsets are now also checked, if bad, they could cause ITK_TCPSendBlob to hang.
  • ITK_TCPRecv : better 4D multi-process handling (IDLE 4D is called only when ITK_TCPRecv loops).
  • ITK_BlobRead / ITK_PictRead : added a test on memory allocation for the read blob or pict in case of large files. ITK could corrupt memory in some cases (large blobs or picts).

MacOS only fixes :

  • Under MacOS, when using SSL, ITK_TCPClose could take a very long time to execute and no more SSL connection could be accepted in some circumpstances (like when the browser was IE 5.5 under Win2000).

Windows only fixes :

  • License checking bug fix in the Windows version : ITK was not detecting correctly compiled apps under Windows. This was causing compiled apps to switch to the demo mode after the development license expiration date. This is fixed. Be sure to upgrade previous installed version of ITK !
  • ITK_TCPUnrcv under Windows when using SSL streams was corrupting SSL decryption. This is fixed.

Internet ToolKit™ for 4D v2.5 (30-Mar-2001)

Internet ToolKit v2.5 main new features : 

  • SSL support !
  • support for standard cryptography algorithms
  • data compression (gzip algorithm) of text and blobs

New license numbers requires. Please see the distributor page for purchase info.

Internet ToolKit™ for 4D v2.0.4 (6-Oct-2000)

Internet ToolKit v2.0.4 new features :  

  1. ITK_TCPUnRcv: a new parameter has been added to allow to specify were the "unreceived data" mus be put in the receive buffer. ITK_TCPUnRcv($stream;$data;0) -> data are put at the END of the unreceive buffer, ITK_TCPUnRcv($stream; $data; 1) -> data are put at the BEGINNING of the unreceive buffer.
  2. Added a new type of message digest calculation (RIPE-MD160) to allow to implement QuickDNS Pro Load balancing.
  3. ITK_PictRead & ITK_PictSave: a new option (value 1) has been added to allow to remove the 512 bytes headers when reading a PICT file using ITK_PictRead and adding them when using ITK_PictSave.
     $pict := ITK_PictRead("HD:PictFile";0;0;1) ` remove the 512 byte header
     $err :=
    ITK_PictSave($pict;"HD:PictFile";0;0;1) ` add the 512 byte header
  4. Added ITK_Record2Blob and ITK_Blob2Record
     $err := ITK_Record2Blob(fileNum; blob)
     $err :=
    ITK_Blob2Record(blob; fileNum)
  5. ITK_URL2Text & ITK_Text2URL: a new option value (4) allow to avoid ISO 8859-1 encoding (usefull when the URL encoded data is not using the ISO 8859-1 charset).
  6. ITK_Text2HTML: added a new option (2) to avoid encoding ampersand followed by spaces "& "
    ITK_Text2HTML(" && ";2) -> " && "
    ITK_Text2HTML(" && ";0) -> " && "
  7. ITK_TCPRcvFile: added a new parameter to specify the maximum size of the file to be received.
    err := ITK_TCPRcvFile(stream; filePath; filter; options; timeout; maxlen)

Internet ToolKit v2.0.4 bug fixes :

  1. ITK_TCPStatus: in some cases returned values (like the amount of transmitted data) where invalid (negatives numbers). This is now fixed.
  2. ITK_TCPRcvFile : there was a bug on the maximum length feature. Only the first 16KB were received if no maximum length was provided.
  3. ITK_DigestBlob: could crash under Windows or do bad Digest calculations under MacOS. This is now fixed.
  4. ITK_PictSize: added a new test in JPEG picture analysis to avoid crashing on some fake JPEG data.
  5. ITK_PictSize had a problem analysing some JPEG pictures (encoded using non-baseline scheme). This is fixed.
  6. ITK_Text2URL: ASCII character 127 was not encoded, now it is encoded correctly.
  7. ITK_TCPRcvFile: the receiving file wasn't always closed. This is fixed.
  8. ITK_TCPRcvFile: the timeout parameter wasn't always working. This is fixed.
  9. ITK_TCPSendFile was returning a error -1 if the file couldn't be opened. Not it returns a MacOS style error code, or -2 if a problem occured while opening the file.
  10. ITK_Rot13Text & ITK_Rot13Blob : was crashing in some cases. This is fixed.
  11. ITK_ICMPEcho: if the size was 0 (default size) ITK_ICMPEcho wasn't using a default packet size of 64 bytes, but an empty packet. This is fixed.

MacOS only fixes :

  1. ITK_UDPRelease: could crash in some cases under MacOS. It should be fixed.
  2. Changed creator signature from "4D05" to "4D06" for all files created by ITK.

Windows only fixes :

  1. Date conversion routines under Windows: daylight saving was not taken into account in the time zone offset calculations. This is now fixed.
  2. ITK_TCPClose in the Windows version was releasing the stream instead on just doing a close. This prevented the use of any ITK_TCPRead routines after an ITK_TCPClose.
  3. ITK_TCPRcv, ITK_TCPRcvFile, ITK_TCPRcvPict, ITK_TCPRcvBlob (windows only): If the stream was closed by the remote host, but some data were still available, the status was immediately moving to 14 (closewait). Now the status remains at 8 (connected), then moves to 14 only when there are no remaining data to read which is the behaviour in the MacOS version of ITK.
  4. ITK_TCPRcvFile (windows only): the "append" flag was not working, this is now fixed.

Internet ToolKit™ for 4D v2.0.3 (13-Jul-99)

Internet ToolKit v2.0.3 new features:  

  1. ITK_Text2B64: a new option has been added to allow ITK to add RFC required padding chars ("=") at the end of the Base64 encoded string. (see manual)
  2. ITK_TCPRecvBlob: two new options have been added to change the behaviour of ITK_TCPRecvBlob when using and end string.
    4 = look for the end string only in new received data (usefull when appending data to an existing blob)
    8 = remove end string at the end of the received blob
  3. ITK_SetTimeout is a new routine that can be used to set a timeout on all ITK routines that send some data (ITK_TCPSend, ITK_TCPSendPict, etc). This will make all sending routines return control when ITK has not been able to send data during the given timeout. The default behaviour is an infinite timeout (meaning that ITK does return control).
    This timeout is usefull to avoid having a stream remaining used even if the remote host has gone (modem disconnection, host reboot, etc).

    Syntax:  $currentTimeout := ITK_SetTimeout($stream; $newTimeout)

    $stream indicates on which streamRef the "send" timeout must be set
    $newTimeout indicates the timeout value (in ticks), a zero or negative value will not set the timeout
    $currentTimeout will contain the new timeout value


    $currentTimeout := ITK_SetTimeout($streamRef;30*60) ` set a 30s timeout
    $currentTimeout := ITK_SetTimeout(streamRef;-1) ` retrieve the current timeout value
    $currentTimeout := ITK_SetTimeout(streamRef;0) ` set an infinite timeout

  4. ITK_TCPRelease has been modified to accept a new flag to request that all internal ITK listeners are removed when the last "listening" stream is released. This is only valid under OpenTransport and Windows, under MacTCP this was already the default behaviour.


    $err : ITK_TCPRelease(streamRef;2) ` force internal listener to stop listening 

  5. ITK_PictSize: a new type of picture is now detected.
    Mac style PICT are now scanned to look for JPEG data (found for example in QuickTime compressed PICT).
    If some JPEG data are found, ITK_PictSize will return the size of the JPEG data and a picture type of 3.
  6. ITK_UDPRcv : now accept timeout values less than a second.
    When the timeout value is negative, it indicates a number of ticks (1/60s).
    Ex: $err := ITK_UDPRcv($udp;$data;$remAddr;$remPort;$localPort;-6) ` wait 1/10s
  7. Two new IPC calls:
    - ITK_CountIPC returns the current number of existing IPC channels.
    - ITK_GetIndIPC(L) returns the channel number of the nth IPC channel.
    ` Total number of messages in IPC channels
    $nbMsg := 0
    For ($i;1;ITK_CountIPC)
      $nbMsg := $nbMsg + ITK_NbIPCMsg(ITK_GetIndIPC($i))
    End For
  8. ITK_TCPSendFile accepts a new parameter which allows to specify if the resource fork should be sent instead of the data fork.
    Ex: $err := ITK_TCPSendFile($c;$file;filterFlag;sendBlockSize;startOffset;endOffset;option)
    option = 1 -> send the resource fork (MacOS only)

MacOS OpenTransport new features:

  1. ITK_TCPRelease: In order to force ITK to remove all FinWait2 stream, the option flag must be set to 4.

Windows only new features:

  1. ITK PPP routines have been implemented in the Windows version of ITK.
    See the programmer's guide update for more details.

Internet ToolKit v2.0.3 fixes:  

  1. All ITK TCP receiving routines using an endstring parameter could cause a memory corruption in some cases. This has been fixed.
  2. Digest calculation routines (ITK_DigestStart, ITK_DigestAdd, ITK_DigestBlob and ITK_DigestStop) could crash in some circonstances. This is fixed.
  3. ITK_TCPStatus($stream;14) or ITK_TCPStatus($stream;17)was not returning the requested value but the stream status.
  4. ITK_TCPRecvBlob:
    • change in the end string detection code. The end string was searched in new incoming data packets only. This could cause ITK not to detect the end string if this end string was received in separate data packets. Now it is searched in all the accumulated data.
    • when the end string was used, ITK_TCPRecvBlob was not accumulating the last packet of received data in the blob. This is fixed.
    • was returning a value not reflecting the amount of data added to an existing blob. This is fixed.
    • was not searching the endstring properly due to some missing initialization. This is fixed.

MacOS OpenTransport related fixes:

  1. ITK_TCPStatus under OpenTranport could keep returning 2 for listening streams in some circumstances (best known as the ITK OT "deafness" bug). In some cases, an incoming call can be followed by a "disconnection" before the stream was really connected. This case was not handled properly and has been fixed.
  2. ITK_TCPListen has been modified to avoid possible listening problems when under heavy load. This modification requires version 1.1.1 of OpenTransport.
    ITK now runs automatically in MacTCP mode under pre 1.1.1 versions of OpenTransport.

Windows only related fixes:

  1. ITK_TCPStatus under Windows was staying at 8 (connected) even when the remote host had closed the connection. Now, the status moves to 14 (CLOSEWAIT, close has been received).
  2. ITK_SetPriority under Windows: the correct values for the priority levels are 64 (normal), 32 (idle), 128 (high), 256 (realtime). Other values will return an error and the process priority will not change.

Internet ToolKit v2.0.2 (30-Dec-98)

  1. In demo mode, ITK was running as a "Light" version, now it runs as "Pro" one.
  2. ITK_PictRead: real PICT files were incorrectly read.
  3. ITK_PictSave: real PICT files were incorrectly saved.
  4. ITK_Text2B64: added a test to dissalow convertion of too long text. The limit is 24500 characters.
  5. ITK_Text2uu: added a test to dissalow convertion of too long text. The limit is 180 characters.
  6. ITK_TCPRecvBlob: the received blob was empty if it was not allocated by 4D. Now ITK allocates it if needed.
  7. ITK_Pict2Blob & ITK_Blob2Pict: the returned data was refering to the same data in memory. Added a new parameter to request either a copy of the original data or a transfer of the original data.

Windows only:

  1. ITK_TCPGlobInfo under Windows was returning 0 in all cases. Fixed.

MacOS with OpenTransport only:

  1. In some cases, ITK could stop "listening" and keep returning 2 in all ITK_TCPStatus. This has been fixed.
  2. ITK_TCPOpen under OpenTransport: could stay "freezed" during 4mn. Fixed.
  3. ITK_TCPSendFile could lock itself in some flow control cases. Fixed.
  4. All ITK_TCPSend routine (ITK_TCPSend, ITK_TCPSendFile, ITK_TCPSendBlob) were not always detecting that the stream was down if the remote end was not responding anymore. A timeout of 4mn (2xMSL as decribed in RFC793) has been added to avoid this.

Internet ToolKit v2.0.1 (17-Aug-98)

  1. ITK_Init: several problems related to license number checking. ITKv2 could run in "Light" mode with "Pro" license numbers or even in Demo mode with the Windows version. This is fixed.
  2. ITK_TCPRcv: a memory leak has been fixed.
  3. The ITK Programmer's Guide has been corrected in various places.

MacOS with OpenTransport only:

  1. ITK_TCPStrmInfo under OpenTransport: the local port number wasn't returned if the stream wasn't connected.

Internet ToolKit v2.0 (3-Aug-98)

See the ITKv2 announcement for more details on version 2.0

Internet ToolKit v1.1.6

  1. ITK_RcvIPCMsg: a memory corruption bug has been fixed. This bug was only present when the second parameter was used to keep the message in the IPC channel.
  2. ITK_TCPRcvFile: a new option allow to keep the stream open.
    Ex: $err := ITK_TCPRcvFile($stream;$filePath;$filters;2)
    The 4th parameter in now a bitfield (1=append, 2=release).
  3. ITK_TCPStrmInfo: the error code rueterned was not always set.
  4. 4D Server v6: the demo dialog was displayed on the server side in some circonstances.
    This was due to some new call implemented in 4D Server v6.
  5. ITK_ResetIPC: was setting the number of messages in a channel to -1 instead of 0.
  6. All Pict related routines (ITK_PictSize, ITK_TCPSendPict, ITK_Pict2GIF) now check that the image passed is not null.
  7. The "stream reuse" feature has been removed. It did not provide real performance enhancement, and could cause some troubles.
  8. ITK_Text2URL: new option added to allow to encode every chars included reserved ones (conformance to RFC#1738/2.2).
    Ex: $url := ITK_Text2URL($text;2) ` convert everything according to RFC#1738/2.2

MacOS only:

  1. ITK_Addr2Name: could return an empty string even when the second parameter was set to 0.
  2. ITK_TimerStop and ITK_TimerLap are now checking if the passed value is 0.
    ITK_TimerStop also set the timerRef to 0 to avoid possible crashes.
    Be carefull with values passed to ITK_TimerStop and ITK_TimerLap, you must only pass values returned by ITK_TimerStart.
  3. PPP routines: added support for FreePPP 2.6 and OT/PPP.
    With OT/PPP, ITK_PPPStatus does not return -1 if OT/PPP or FreePPP are selected in the TCP/IP control panel due to a missing function in the OpenTransport API.

Windows only:

  1. ITK_Init: The result code was not always set to 0 when everything was fine.
  2. ITK_TCPSendFile: The result code was not always set to 0 (generally 2) when everything was fine.
  3. ITK_TCPStatus: When the remote host was releasing the stream, the status returned wasn't updated accordingly until ITK_TCPRcv was called (always returning 8).
  4. ITK_TCPClose: the FIN frame in the TCP protocol was not always sent and the stream could be release to early (the remaining data were not sent in that case).

Internet ToolKit v1.1.5

  • ITK_PictSize return the size of GIF and JFIF picture read using ITK_PictRead.
    Picture type for JFIF pictures is 2.
  • A bug has been fixed on ITK_RFC2Secs.
  • ITK_ICGetRaw and ITK_ICSetRaw have been added to access some Internet Config info not stored as Pascal Strings.
  • ITK_RcvIPCMsg has a new parameter that allows to keep the received messages in the channel. A memory related bug has also been fixed.
    Ex: $msg := ITK_RcvIPCMsg(canal;1) ` the received msg is still in the channel
  • ITK_TCPSendPict can now send the entire picture data by setting the "end offset" to -1.
    Ex: err := ITK_TCPSendPict(stream;pict;0;-1) ` everything is sent

Windows only:

  • ITK_TCPSend wasn't updating the stream status if the stream was closed.
  • ITK_Addr2Name tries to filter NetBios answers.
  • ITK_PictSave wasn't using the "start offset" parameter and was always saving the picture from the first byte.

Internet ToolKit v1.1.4

  • ITK_Text2HTML wasn't converting Œ and ¹ into '.
  • ITK_TCPRelease: stream reuse wasn't working anymore (since ITK v1.1).
  • ITK_Bin2Mac was changing the destination pathname parameter in compiled databases.
  • ITK_Mac2Hqx has been modified to add some "filler" chars at the end of the encoded data.
  • ITK_HTML2Text, "&#nnn;" patterns were incorrectly decoded .

MacOS only:

  • Under OpenTransport, ITK_TCPStatus could return 8 while the stream was already closed. ITK now checks the remote host IP address to return 14 when this address passes to 0 (workaround described by a Swedish user of ITK). This bug seem to come from OpenTransport.

Windows only:

  • ITK_TCPSendFile wasn't sending the file data.
  • ITK_TCPRcv: -1 was returned instead of 0 when no data were available.
  • Fix on ITK_TCPListen to allow IP address reuse (Winsock level).
  • New handling of incoming connections under Windows NT.
  • ITK_Addr2Name(xxx;1) was returning a "dotted" adress instead of an empty string when the reverse name couldn't be retrieved.

Internet ToolKit v1.1.3:

  • ITK_Text2HTML and ITK_HTML2Text now use RFC#1866 conversion table. The previous table was incomplete.


  • ITK_TCPSendFile has two new parameters to allow sending portions of a file instead of sending the whole file. This is usefull to support "byterange serving" in HTTP servers (used for example by Acrobat 3.0 plugins).

Mac specific changes:

  • ITK_TCPClose had a bug that could trash the end of the data to be sent. This is now fixed.

Windows specific changes:

  • ITK could cause a crash when reopening another database. This was caused by some Windows specific "hook". It has been fixed.


  • ITK_UDPRcv was sometime causing an exception. This has been fixed.

  • File conversion routines (ITK_Mac2Bin, ITK_Bin2Mac, ITK_Mac2Hqx and ITK_Hqx2Mac) are now supported under Windows. Be aware that the resource fork will always be lost.

Internet ToolKit v1.1.2

  • ITK_TCPSendPict wasn't sending JPEG pictures correctly due to a change related to the addition of ITK_PictSave and ITK_PictRead in ITK v1.1.1. It is now fixed.
  • ITK_Addr2Name could return garbage when the DNS wasn't answering. This is now fixed.
  • ITK_Text2HTML now translate "°" into "°". All other &#xxx; translation have been fixed. Previous 1.1.x versions were adding an additional garbage character before the ";" character.
  • ITK_Text2URL now encodes "<" and ">" characters.
  • ITK_RFC2Secs was returning a bad value when the time zone offset was greater than the hour (resulting in a negative hour in some internal calculation that lead Date2Secs's Toolbox routine to return an invalid value). The time zone offset is now calculated differently to avoid this problem.

Windows only bug fixes:

  • ITK_TCPListen & ITK_TCPRelease are now handled differently under Windows to workaround a Winsock bug. The workaround is only applied when more than one stream is opened on the same port number and IP address.
  • ITK_Pict2GIF offscreen pixmap where not released by Altura's Mac2Win library resulting in a huge memory leak. This is now fixed.

ITK v1.1.2 as been tested under Windows NT Server 4.0 and MacOS 7.5.5 with OpenTransport 1.1 and OpenTransport 1.1.1b8.

Know problem:

Under pre 1.1.1b8 versions of OpenTransport, ITK_Addr2Name can lock the machine after a large number of calls (a few thousands). This is fixed in OpenTransport 1.1.1b8 and should be fixed in the final 1.1.1 version of OpenTransport.

Internet ToolKit v1.1.1

  • licence number wasn't always correctly recognized by ITK 1.1,
  • ITK_Secs2RFC & ITK_RFC2Secs had some troubles due to a bug in string manipulation routines,
  • ITK_Mac2Bin, ITK_Bin2Mac, ITK_Mac2Hqx and ITK_Hqx2Mac now accept long pathnames correctly.
  • ITK_TCPSendFile and ITK_TCPRcvFile have been fixed on Windows to handle extended ascii in pathnames correctly,
  • high load on the Windows version should now be handled more efficiently. If a lot of incoming call were received, Winsock could reject some of them.

Internet ToolKit v1.1

This new version of ITK is now available for Mac and Windows (95 and NT only). ITK 1.1 bring some new features. For more details, please check the latest version of "ITK Programmer's Guide" available on ITK's internet site at

Internet ToolKit v1.0.4

  • ITK_Date2Secs was not handling the local time zone correctly when the new parameter introduced in v1.0.3 was used.
  • ITK_TCPSendFile could sometime send output buffered data twice. This problem was also present in ITK_TCPRcv.
  • ITK_TCPWaitConn could stay locked if an error occured on the stream before a connection was detected.
  • New info returned by ITK_TCPInfos to get current OpenTransport version.
    Check ITK Programmer's Guide for more details about this new info returned by ITK_TCPInfos.
  • ITK_Mac2Bin wasn't always encoding files correctly. It is now fixed. This could cause ITK_Bin2Mac to hang when decoding improperly encoded files.
  • ITK_Hqx2Mac was returning -1 when no error occured. This is now fixed and 0 is returned.

Internet ToolKit v1.0.3

This version of Internet ToolKit fixes two problems:

  • ITK_Secs2RFC was not working correctly if the current time zone wasn't the GMT one.
  • ITK_TCPSend now returns the number of bytes stored in its internal output buffer when using output buffering.

Internet ToolKit v1.0.2

This version of ITK fixes one problem:

  • A bug in CR->CRLF and CRLF->CR filters was not updating the length on the result string.

Internet ToolKit v1.0.1

This version of Internet ToolKit fixes two problems:

  • Some incompatibilities with other 4D External Packages (such as System7Pack) due to bad resources in ITK Package,
  • A bug in ITK_Addr2Name which was not always returning a result to 4D, which may lead to some freezes or crashes in 4D.

Internet ToolKit v1.0

This is the first shipping version of Internet ToolKit.

You must have a valid license number to use this version of Internet ToolKit.

Internet ToolKit v1.0b3

  • ITK_TCPOpen and ITK_TCPListen accept two new parameters to set the type of service field in MacTCP and to reuse previous streams. Reusing stream get bring some performance increase and simpler code.
  • ITK_TCPWaitConn accepts a new timeout parameter (in seconds) that limit the time ITK_TCPWaitConn has to wait for the specified status value.
    For example: $err := ITK_TCPWaitConn($stream;14;30) will wait only during 30 seconds
  • ITK_Pict2GIF accepts two new parameters to specify the coordinates (horizontal, vertical) of a transparent pixel. If not specified, the first pixel (0,0) is assumed to be transparent.
  • ITK_TCPStatus returns -1 if issued on a UDP stream instead of a TCP stream.
  • ITK_HTML2Text acceps a new value to extract the text from some HTML code by deleting all text surrounded by "<" and ">".
    ex: ITK_HTML2Text("<h1>Main part</h1>";2) return "Main part".
  • a bug in ITK_Text2URL has been fixed. The heap could be corrupted if the text to be translated was ending by escaped characters.

ITK 1.0b3 is also the first version that checks ITK's licence number.

Internet ToolKit v1.0b2

  • ITK_TCPSendPict accepts 2 new optional parameters to give a starting and ending offset for the data you want to send. This allows sending of pictures (or data contained in picture field or variables) as you want.
  • the output buffer wasn't always flushed when using ITK_TCPRcv, not it is.
  • text conversion routines on empty text could cause some troubles (like type 11 errors on PPC).

Internet ToolKit v1.0b1

Internet ToolKit v1.0a9 (13/7/95)

ITK_TCPWaitConn can now wait for a stream to be closed, ex:
$err := ITK_TCPWaitConn($c;-1)

New options for translation routines:

ITK_HTML2Text accepts a new flag (value = 1) to avoid translating &amp; &gt; &lt; &quot;

ITK_URL2Text and ITK_Text2URL accepts a new flag (value = 1) to do true URL translation,

ITK_URL2Text("test%204D+ITK.html";1) will return "test 4D+ITK.html"

ITK_Text2URL(" 4D+ITK.html";1) will return ""

New options for DNS routines and DNS load balancing:

ITK_Addr2Name accepts a new parameter (value = 0, 1 and 2) to specify the result format,
ITK_Addr2Name($addr;1) will only return full text adress obtained from DNS (ex: machine.dom) or an empty string if the address cannot be resolved,
ITK_Addr2Name($addr;2) will only return a dotted adress (ex:,
ITK_Addr2Name($addr;0) will return a full text adress if possible otherwise it will return a dotted address if the address cannot be resolved.

ITK_Name2Addr accepts a new parameter to allow DNS load balancing. This new parameter can be used to specify which address you want if more than one address is found for the given host name.
ex: ITK_Name2Addr("machine.dom";1) returns the first IP address (or 0 if none),
ITK_Name2Addr("machine.dom";2) returns the second IP address (or 0 if none),
ITK_Name2Addr("machine.dom";3) returns the third IP address (or 0 if none),
ITK_Name2Addr("machine.dom";4) returns the fourth IP address (or 0 if none),
ITK_Name2Addr("machine.dom";-1) returns one of the resolved addresses (choosed randomly)

ITK_TCPOpen($host;$port;$buffSize) now uses DNS load balancing (see ITK_Name2Addr) if the $host parameter starts with a period '.',
ex: ITK_TCPOpen(".machine.dom";80;32000) will randomly choose one of the resolved adresses.

New UDP support

UDP is now supported by ITK with 5 new routines (ITK_UDPCreate, ITK_UDPRelease, ITK_UDPSend, ITK_UDPRcv, ITK_UDPMTUSize).

New Picture routines

ITK_Pict2GIF allows GIF encoding of pictures,

ITK_TCPSendPict extracts JPEG or GIF data from JPEG compressed PICT or GIF encoded picture and send it on the stream, ex:
COMPRESS PICTURE($myPict;"jpeg";500)
$err := ITK_TCPSendPict($c;$myPict)
$err := ITK_TCPSendPict($c;ITK_Pict2GIF($myPict))

ITK_PictSize returns the size and coordinates of a picture.

ITK demo mode has been changed:
- there is no more limit on the number of stream you can open in demo mode,
- demo mode will now expire after 30 minutes.

ITK Example database is now is a separate file.

Internet ToolKit v1.0a8 (5/7/95)

  • ITK_Mac2Hqx and ITK_Hqx2Mac allows BinHex encoding and decoding,
  • ITK_TCPReceive and ITK_TCPClose now flushes the output buffer,
  • ITK_TCPSend with flush flag > 255 now works as documented,
  • new HTTP example,
  • examples are now in 4D Insider Library format as well as in 4D Structure file format.

Internet ToolKit v1.0a7 (23/6/95)

  • new filtering flags for ITK_TCPSend, ITK_TCPRcv, ITK_TCPSendFile, ITK_TCPRcvFile,
  • better control over output buffering in ITK_TCPSend,
  • new stopwatch-like routines (ITK_TimerStart, ITK_TimerStop),
  • new InterProcess Communication routines (ITK_NbIPCMsg, ITK_SendIPCMsg, ITK_RcvIPCMsg, ITK_ResetIPC),
  • alpha version time bomb changed.

Internet ToolKit v1.0a6 (17/6/95)

  • FAT version,
  • New examples with SMTP and FTP (in 4D Insider Library format)

Internet ToolKit v1.0a5 (13/6/95)

  • Internet Config support now added,
  • MacPPP control added,
  • HTML/URL/ISO codec added.

To get your licence number, use ITK's order form.
For more info about these changes, check the last version of ITK Programmer's Guide at:
Last update: 4-Sept-2002 by CQ