Angus Robertson 574 Posted November 3, 2022 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 5 4 Share this post Link to post
Guest Posted November 12, 2022 (edited) 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 Edited November 12, 2022 by Guest Share this post Link to post
Angus Robertson 574 Posted November 12, 2022 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 Posted November 12, 2022 (edited) 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 November 12, 2022 by Guest Share this post Link to post
Angus Robertson 574 Posted November 13, 2022 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 Posted November 13, 2022 (edited) 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 November 13, 2022 by Guest Share this post Link to post
Angus Robertson 574 Posted November 13, 2022 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
PizzaProgram 9 Posted November 15, 2022 If I try to compile the runtime under Delphi 7: [Error] OverbyteIcsFileCopy.pas(1583): 'END' expected but ',' found Share this post Link to post
PizzaProgram 9 Posted November 15, 2022 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
HTMLValidator.com 6 Posted December 20, 2022 (edited) Awesome, thanks. But the download the link is not working... any ideas why? A temporary issue I hope. Edited December 20, 2022 by HTMLValidator.com Share this post Link to post
Angus Robertson 574 Posted December 20, 2022 The wiki server hardware has been rebuilt recently so has been off-line on and off, but ICS can also be downloaded from my server at: https://www.magsys.co.uk/delphi/magics.asp Angus 1 Share this post Link to post
HTMLValidator.com 6 Posted December 22, 2022 (edited) 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. Edited December 22, 2022 by HTMLValidator.com Share this post Link to post
Angus Robertson 574 Posted December 22, 2022 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 1 Share this post Link to post
HTMLValidator.com 6 Posted December 22, 2022 (edited) 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 December 22, 2022 by HTMLValidator.com Share this post Link to post
Angus Robertson 574 Posted December 23, 2022 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
Fr0sT.Brutal 900 Posted January 12, 2023 (edited) 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 January 12, 2023 by Fr0sT.Brutal Share this post Link to post
Angus Robertson 574 Posted January 12, 2023 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
Fr0sT.Brutal 900 Posted January 12, 2023 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
Mark- 29 Posted January 12, 2023 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
Angus Robertson 574 Posted January 12, 2023 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
Angus Robertson 574 Posted January 12, 2023 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
Mark- 29 Posted January 12, 2023 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
Angus Robertson 574 Posted January 12, 2023 Quote SSL/TLS remaining optional is valuable to me. Why? Angus Share this post Link to post
Mark- 29 Posted January 12, 2023 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
Angus Robertson 574 Posted January 12, 2023 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