Jump to content
Angus Robertson

ICS V8.70 announced

Recommended Posts

ICS V8.70 has been released at: http://wiki.overbyte.eu/wiki/index.php/ICS_Download

 

ICS is a free internet component library for Delphi 7, 2006 to 2010, XE to XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney and 11.0 and C++ Builder 2006 to XE3, 10.2 Tokyo, 10.3 Rio, 10.4 Sydney and 11. ICS supports VCL and FMX, Win32, Win64 and MacOS 32-bit targets. The distribution zip includes the latest OpenSSL 3.0.7 win32, with other versions of OpenSSL being available from the download page.


Major Changes in ICS V8.70 include:

 

1 - V8.70 has various minor improvements providing better compatibility with modern compilers such as more unicode overloads to avoid ANSI string warnings and casts, and more use of TBytes to avoid ANSI strings. Updated various samples to use TIcsRestEmail to support OAuth2 authentication for GMail and Outlook that no longer allow old authentication protocols.

 

2 - The TIcsFileCopy, TIcsFtpMulti and TIcsHttpMulti file transfer components now support file zipping and unzipping using System.Zip in recent Delphi compilers, instead of the obsolete VclZip which is no longer available. Before a file copy or FTP upload, files may be automatically zipped, useful for large log files, after a file copy, FTP or HTTP download, files may be unzipped in various ways.

 

3 - Added support to TIcsFileCopy to copy file names longer than 259 characters by adding \\?\ to the start of long names passed to Windows APIs, if supported by the disk file system, unicode APIs only. Fixed a problem deleting empty directories after copying. Fixed a problem with BuildDirList2 with COMPILER16_UP.

 

4 - The OverbyteIcsXferTst sample has a new tabs, 'Single File Copy' to test the CopyOneFile method and 'Zip/Unzipping Files' to test zipping and unzipping that has always been supported by the components but not this demo.

 

5 - Allow content compression for HTTP and FTP using System.Zlib in newer versions of Delphi instead of the OverbyteIcsZLibObj unit to avoid duplication. Only Delphi 11.1 and later have the same ZLIB 1.2.12 as ICS, so will automatically used System.Zip.  Beware a new version of OverbyteIcsDefs.inc is required to allow ZLIB to work correctly, otherwise it will default to using the DLL which is unlikely to be available, it is not in the distribution.  So either install the new inc file and customise it, or copy the ZLIB changes to your own inc file.

 

6 - In TWsocket, added ReceiveTB(var Data : TBytes; MaxLen : Integer = -1): Integer; where MaxLen is optional, to receive TCP data into a TBytes dynamic array of bytes. Also ReceiveFromTB and ReceiveFrom6TB for UDP datagrams. The last release added similar SendTB functions, so buffer pointers and ANSI strings can now be avoided.

 

7 - Added UTF-8 support to TIcsIpStrmLog, to convert received lines from UTF-8 to Unicode with unicode compilers (as String) and converts sent data to UTF-8. Changed FRxBuffer to TBytes, use SendTB and ReceiveTB methods with TBytes.

 

8 - Updated OpenSSL to 3.0.7 and 1.1.1s.  OpenSSL 3.0.6 was withdrawn shortly after  release, we never distributed it.

 

9 - In OverbyteIcsSslHttpOAuth, added an OAuth2 and Rest Email Microsoft User Authority property to access different user authorities, defaults to 'consumers' but can be changed to 'common' or an Azure Active Directory tenant GUID for corporate accounts.

 

10 - Added TIcsRestEmail to support OAuth2 authentication to the OverbyteIcsSslMultiWebServ, OverbyteIcsSslMultiFtpServ and OverbyteIcsDDWebService samples, since GMail and Outlook that no longer allow old authentication protocols.

 

11 - In the TIcsInetAlive component, added a new method AliveMethEither so internet alive checking works if either ping or HTTP works, instead of one
or the other.

 

More detailed release notes are at http://wiki.overbyte.eu/wiki/index.php/ICS_V8.70

 

Angus

 

  • Like 5
  • Thanks 4

Share this post


Link to post
Guest

I tried building this version on Delphi 11.2 using 'D110InstallVclFmx.groupproj' and adding all 'source' and subfolders to the library path but I am getting the error attached below. I couldn't circumvent this problem so far. I was able to compile 'D110Install.groupproj' after that error, though. Is there anything else that I am missing? Thanks for any help

 

 

2022-11-12_100246.jpg

Edited by Guest

Share this post


Link to post

All I can say is it builds here without errors on 11.2, do it almost daily.

 

I rarely build the non-FMX packages, but if you are not using FMX they should be fine.

 

Angus

 

Share this post


Link to post
Guest

Hi Angus,

 

For this concrete case, could you, please, point out where are those identifiers declared? I did a search on all *.PAS for those identifiers and didn't find them. 

 

Thanks!

Edited by Guest

Share this post


Link to post

Those literals and functions are in OverbyteIcsZlibHigh.pas.

 

That unit was heavily rewritten last month for the last release, but has existed for many years.

 

Angus

 

Share this post


Link to post
Guest

Thanks, Angus. I guess it is some compiler directive problem. Even though all ICS source paths are in my Delphi library (including the file you listed above) it can't find some files and gives those errors.

Edited by Guest

Share this post


Link to post

There are ifdefs relating to other zlib related files, and those changed in V8.70 to support native Delphi zlib, but OverbyteIcsZlibHigh is always used unconditionally in any unit that needs ZLIB support.  But I may have screwed something up, I'll do more testing later in the week. 

 

Angus

 

Share this post


Link to post

Never mind, looked at the old code and realized: those 2 lines are simply switched ! 😄

 

New code (wrong)
{$ELSE}
    IgnorePathList.Delimiter, '"' + IgnorePathList.Delimiter + '"', [rfReplaceAll]) + '"';  { V8.63 for D7 }
    IgnorePathList.DelimitedText := '"' + StringReplace(AnsiLowerCase(FIgnorePaths),
{$ENDIF}

Old code (working)
{$ELSE}
    IgnorePathList.DelimitedText := '"' + StringReplace(AnsiLowerCase(FIgnorePaths),
        IgnorePathList.Delimiter, '"' + IgnorePathList.Delimiter + '"', [rfReplaceAll]) + '"';  { V8.63 for D7 }
{$ENDIF}

 

Share this post


Link to post

Awesome, thanks.

 

But the download the link is not working... any ideas why? A temporary issue I hope.

Edited by HTMLValidator.com

Share this post


Link to post

Was able to download 8.70 (Delphi 11 only)... but I'm trying to install in Delphi 11.2 (with all C++ Builder files generated because that's what I use) and I'm getting errors: [dcc32 Error] OverbyteIcsSslHttpOAuth.pas(897): E2251 Ambiguous overloaded call to 'IcsShellExec'. Searched for IcsShellExec in the forum and came up with nothing.

 

image.thumb.png.04e5d920fd042cef9dd07838aeb63f5f.png

Edited by HTMLValidator.com

Share this post


Link to post

The IcsShellExec function moved units in V8.69, it is now in OAuth, but perhaps you have an old HttpRest unit with it still in?  Or an old DCU.

 

When installing a new version of ICS, it's always safest to use the Build Group pane to build all four versions of all packages, just wish it installed them as well. 

 

Angus

  • Like 1

Share this post


Link to post
4 hours ago, Angus Robertson said:

The IcsShellExec function moved units in V8.69, it is now in OAuth, but perhaps you have an old HttpRest unit with it still in?  Or an old DCU.

 

When installing a new version of ICS, it's always safest to use the Build Group pane to build all four versions of all packages, just wish it installed them as well. 

 

Angus

Thank you. Must have been some old junk laying around somewhere. Cleaned out old files in C:\Users\Public\Documents\Embarcadero\Studio\22.0 and eventually got everything to install... so far so good! Although my 64-bit app builds are crashing (32-bit works)... but I don't think it's an ICS issue.... time to figure that out now... it's always something, especially with C++Builder. 🙂

Edited by HTMLValidator.com

Share this post


Link to post
9 hours ago, HTMLValidator.com said:

Although my 64-bit app builds are crashing (32-bit works)..

There were a lot of low level changes relating to destroying components this week in SVN that have made some of my Win64 applications a lot more stable.  You might want to try the overnight zip.   And more HTML changes due shortly. 

 

Angus

 

Share this post


Link to post

Noticed bugs (version is 8.71):

1. include paths for DXe7, 8 packages (attaching fixed files)

2. unit OverbyteIcsZLibObj is still included unconditionally into all packages regardless of USE_DELPHI_ZLIB value. It should be either placed under condition or made empty when USE_DELPHI_ZLIB is defined (just like with SSL)

OverbyteIcsDXe7Design.dpk

OverbyteIcsDXe8Design.dpk

3. In /Include/OverbyteIcsDefs.inc:

{ Uncomment next line to always include SSL code into the binary.            }
{ In most cases leave it commented and define USE_SSL in the project options }
{ if required.                                                               }
{$DEFINE USE_SSL}

I suppose either comment should be modified or define commented (the latter is better!)

Edited by Fr0sT.Brutal

Share this post


Link to post

Thanks, I'll look at the various package issues before the final V8.71 release when I update them all with new components.

 

Done the defs file, but it just missed an SVN update, next time. 

 

I rarely test without USE_SSL, it will disappear from the next major release since very little of the internet works without SSL/TLS nowadays and all the conditionals and extra classes make maintenance and upgrades a nightmare.

 

Angus

 

Share this post


Link to post
15 minutes ago, Angus Robertson said:

I rarely test without USE_SSL, it will disappear from the next major release since very little of the internet works without SSL/TLS nowadays and all the conditionals and extra classes make maintenance and upgrades a nightmare.

Well, that's your decision of course but I'll be very sad if you do it. Tons of applications still use plain sockets and if you look at other languages, they always separate plain and TLS: NodeJS, C#, Go lang, Rust, Python...

 

Share this post


Link to post
1 hour ago, Angus Robertson said:

I rarely test without USE_SSL, it will disappear from the next major release since very little of the internet works without SSL/TLS nowadays and all the conditionals and extra classes make maintenance and upgrades a nightmare.

I assume low level components (TWSocket/etc.) will not be impacted. Most of my ICS use is without SSL.

 

And thanks for all your work on ICS.

Share this post


Link to post

Since 95% of new features in ICS relate to SSL/TLS, those that only need limited features and no SSL/TLS may as well stick with old versions. 

 

Sure there are applications that don't need SSL/TLS so it is optional in most components, the issue is whether those components should be compilable without the SSL./TLS code to save space, at the expense of extra complexity and riskier maintenance, thousands of conditional statements.  Simply, it wastes my time. 

 

Angus

 

Share this post


Link to post

I would also argue that using ICS without USE_SSL is risky since I do zero application testing without that define, before a new release I simply ensure the packages will build without error without that define.  So testing is dependent on end users that don't use SSL/TLS.  Thus the recommendation to use older tested versions.

 

Angus

 

Share this post


Link to post
5 minutes ago, Angus Robertson said:

Sure there are applications that don't need SSL/TLS so it is optional in most components, the issue is whether those components should be compatible without the SSL./TLS code to save space... 

For me, space is not an issue. SSL/TLS remaining optional is valuable to me.

Share this post


Link to post
1 minute ago, Angus Robertson said:

Why?

 

Angus

I use TWSocket the most for industrial communications. Some specifications (e.g. MQTT) are optional SSL and I use TSslWSocket if the end user selects SSL.

I also use other components for mail/ftp/client and server HTTP with and without SSL.

Removing "USE_SSL", SSL will continue as an option for all components that already support non-SSL and SSL?

Any downside from removing "USE_SSL"?

Share this post


Link to post

SSL./TLS is nearly always optional for the SSL enabled components and that will never change.

 

I'm planning a new web server component, and there will be no non-SSL version, as there is no non-SSL proxy component.  The existing web server without SSL/TLS could then be abandoned.

 

Angus

 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×