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

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 (support@internet-toolkit.com).

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 (&euro;)

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.

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
:

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.

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.Example: $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

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 :

ITK_TCPStatus: in some cases returned
values (like the amount of transmitted data) where
invalid (negatives numbers). This is now fixed.

ITK_TCPRcvFile : there was a bug on the
maximum length feature. Only the first 16KB were
received if no maximum length was provided.

ITK_DigestBlob: could crash under Windows
or do bad Digest calculations under MacOS. This is now
fixed.

ITK_PictSize: added a new test in JPEG
picture analysis to avoid crashing on some fake JPEG
data.

ITK_PictSize had a problem analysing some
JPEG pictures (encoded using non-baseline scheme).
This is fixed.

ITK_Text2URL: ASCII character 127 was not
encoded, now it is encoded correctly.

ITK_TCPRcvFile: the receiving file wasn't
always closed. This is fixed.

ITK_TCPRcvFile: the timeout parameter
wasn't always working. This is fixed.

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.

ITK_Rot13Text & ITK_Rot13Blob :
was crashing in some cases. This is fixed.

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 :

ITK_UDPRelease: could crash in some cases
under MacOS. It should be fixed.

Changed creator signature from "4D05" to "4D06"
for all files created by ITK.

Windows only fixes :

Date conversion routines under Windows:
daylight saving was not taken into account in the time
zone offset calculations. This is now fixed.

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.

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.

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:

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)

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

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

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.

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.

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

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.
Ex:
` Total number of messages in IPC channels
$nbMsg := 0
For ($i;1;ITK_CountIPC)
$nbMsg := $nbMsg +
ITK_NbIPCMsg(ITK_GetIndIPC($i))
End For

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:

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

Windows only new features:

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:

All ITK TCP receiving routines using an
endstring parameter could cause a memory corruption in
some cases. This has been fixed.

Digest calculation routines
(ITK_DigestStart, ITK_DigestAdd,
ITK_DigestBlob and ITK_DigestStop) could
crash in some circonstances. This is fixed.

ITK_TCPStatus($stream;14) or
ITK_TCPStatus($stream;17)was not returning the
requested value but the stream status.

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:

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.

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:

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).

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)

In demo mode, ITK was running as a "Light"
version, now it runs as "Pro" one.

ITK_PictRead: real PICT files were
incorrectly read.

ITK_PictSave: real PICT files were
incorrectly saved.

ITK_Text2B64: added a test to dissalow
convertion of too long text. The limit is 24500
characters.

ITK_Text2uu: added a test to dissalow
convertion of too long text. The limit is 180
characters.

ITK_TCPRecvBlob: the received blob was
empty if it was not allocated by 4D. Now ITK allocates
it if needed.

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:

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

MacOS with OpenTransport only:

In some cases, ITK could stop "listening" and keep
returning 2 in all ITK_TCPStatus. This has been
fixed.

ITK_TCPOpen under OpenTransport: could stay
"freezed" during 4mn. Fixed.

ITK_TCPSendFile could lock itself in some
flow control cases. Fixed.

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)

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.

ITK_TCPRcv: a memory leak has been
fixed.

The ITK Programmer's Guide has been
corrected in various places.

MacOS with OpenTransport only:

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

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

Internet ToolKit
v1.1.6

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.

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).

ITK_TCPStrmInfo: the error code rueterned
was not always set.

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.

ITK_ResetIPC: was setting the number of
messages in a channel to -1 instead of 0.

All Pict related routines (ITK_PictSize,
ITK_TCPSendPict, ITK_Pict2GIF) now check that the
image passed is not null.

The "stream reuse" feature has been
removed. It did not provide real performance
enhancement, and could cause some troubles.

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:

ITK_Addr2Name: could return an empty string
even when the second parameter was set to 0.

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.

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:

ITK_Init: The result code was not always
set to 0 when everything was fine.

ITK_TCPSendFile: The result code was not
always set to 0 (generally 2) when everything was
fine.

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).

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 &#140;
and &#185; 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
"&#176;". 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
http://www.internet-toolkit.com/

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.

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,
ex:
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: 199.198.197.196),
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.