Jump to content

Recommended Posts

ICS V9.3 has been released at: https://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, 10.1, 10.2, 10.3, 10.4, 11 and 12 and C++ Builder 10.4, 11 and 12. ICS supports VCL and FMX, Win32 and Win64 targets. Beware C++ have not been tested recently due to lack of support from such users.

 

The distribution zip includes the latest OpenSSL 3.0.15, 3.2.3 and 3.3.2, for Win32 and Win64.

 

Changes in ICS V9.3 include:

 

1 - V9.3 continues the simplification of use of ICS components by consolidating many types and constants into the OverbyteIcsTypes unit, avoiding projects needing to find and add specific units before they will build.  For XE2 and later, OverbyteIcsTypes and OverbyteIcsSslBase will be added automatically when components needing them are dropped on a form, or that form accessed for existing projects.  One benefit of this change is removing dependence on several units for many components and applications, it should be possible to remove OverbyteIcsWinsock, OverbyteIcsLIBEAY, OverbyteIcsSSLEAY and OverbyteIcsLogger from most applications, and also other units. See https://wiki.overbyte.eu/wiki/index.php?title=Updating_projects_to_V9.3 for more information.

 

2 - Previously, the Windows Certificate Store was supported on Windows for all components and samples, despite it not always being required.  There are three new defines {$DEFINE MSCRYPT_Clients}, {$DEFINE MSCRYPT_Servers} and {$DEFINE MSCRYPT_Tools) that determine which components can use the store, at least one must be set or applications that need the store will fail. Although these new defines all default to enabled in the OverbyteIcsDefs.inc supplied with V9.3 and later, unless this file is installed, Windows Certificate Store will be unavailable.  These defines are disabled for non-Windows platforms and for C++ Builder which has bugs.

 

3 - Added new application independent monitoring, comprising a client component and server sample.  The ICS Application Monitor TIcsAppMonCli client component is designed to report to an ICS Application Monitor server, which will ensure the main application remains running.  The ICS Application Monitor server IcsAppMon.exe is designed to monitor ICS applications using the TIcsAppMonCli client component, and ensure they remain running, restarting the application if it stops or becomes non-responsive, or on demand. Primarily to keep ICS server Windows services running non-stop, but may also be used for network wide monitoring of ICS applications. Client and server both use the TIcsIpStrmLog component with a simple TCP protocol.  More information at https://wiki.overbyte.eu/wiki/index.php?title=FAQ_ICS_Application_Monitoring

 

4 - The HTTP client components TSslHttpCli and TSslHttpRest have new RespMimeType and RespCharset response properties parsed from the Content-Type header to avoid applications needing to parse this headers.  Fixed a problem in V9.2 where a missing / was added to the start of the request path, but was not needed for absolute paths used for proxies.

 

5 - The TIcsIpStrmLog streaming log component has improvements for TCP Server mode when multiple remote clients connect.  Previously the same data was sent to all remote clients (the original concept being remote logging), but now applications can send data to specific remote clients, and more easily check which remote client is receiving data.  This change means TIcsIpStrmLog can be used as the core of many TCP servers with different protocols, such as the new IcsAppMon sample, see above.

 

6 - The TSslHttpRest and component has a new way for applications to check SSL certificate chains themselves, ignoring OpenSSL bundle checks, usually for self signed private certificates, maybe checking certificate serials, names or public key. If LogSslVerMethod = logSslVerOwnEvent, a new event OnSslCertVerifyEvent is called so the application can check the chain and change the verify result appropriately.

 

7 - Improved the ability to customise SSL ciphers if the ICS defaults need to be changed.  TSslContext and TIcsHosts have three properties, SslCipherList for TLSv12 ciphers, SslCipherList13 for TLSv13 ciphers, and SslCryptoGroups sets the cipher curve groups allowed (like P-256 or X25519).  Beware old SslContexts may include group P-512 which must be corrected to T-521.  SSL handshake responses now show the curve group used for OpenSSL 3.2 and later.  The OverbyteIcsHttpsTst client sample may be used to test the new cipher options, and they will be read from IcsHosts INI files for servers.

 

8 - Added a new web server sample OverbyteIcsBasicWebServer1.dpr which is a simplified version of OverbyteIcsSslMultiWebServ ignoring configuration INI files, security features, session data, most demo pages and most logging, and settings for localhost set in code, search for IcsHosts to change IP addresses, etc. This sample should be easier to use as a basis for new web server applications.  The existing samples OverbyteIcsSslMultiWebServ and OverbyteIcsDDWebService have a new index.html template page, and default to localhost 127.0.0.1 with an internal localhost SSL certificate, so should always response to https://localhost/ without any INI file changes.

 

9 - Fixed an HTTP web server problem in V9.2 to avoid repeated redirection for virtual default page /, was adding /// etc.

 

10 - Updated OpenSSL binary and resource files to releases 3.3.2, 3.2.3 and 3.0.15, only one of which will be linked according to defines.

 

11 - Restored the sample OverbyteIcsConHttp.dpr which is a console example, now supports SSL by replacing THttpCli with TSslHttpRest, no longer needs any events or a message loop for a single sync request, so a less code than without SSL. Now contacts https://wiki.overbyte.eu/wiki.

 

12 - A lot of changes have been made preparing ICS for Linux.  Corrected loading OpenSSL on Posix, now loads the system supplied OpenSSL 3 DLLs on Ubuntu 22.04.  The Linux package now builds correctly, but beware WSocket is not yet supported on Linux so no protocols will work.  There is a new IcsPemTest FMX sample that works on Ubuntu 22.04 and which will create ICS signed SSL certificates.  Note, MacOS support is disabled pending the new Posix implementation.

 

The release notes for V9.3 are at https://wiki.overbyte.eu/wiki/index.php/ICS_V9.3


All ICS active samples are available as prebuilt executables, to allow ease of testing without needing to install ICS and build them all. There are four separate zip files split into clients, servers, tools and miscellaneous samples which can be downloaded from https://wiki.overbyte.eu/wiki/index.php/ICS_Samples

 

 

  • Like 3
  • Thanks 2

Share this post


Link to post

Hello
Internal Error: URW1111 while compiling OverbyteIcsD2010Run.dproj or OverbyteIcsD2010Design.dproj in Delphi 2010
If i compile *.dpr I get the same error

Edited by Mark Lobanov

Share this post


Link to post

Sorry, no idea off hand.  I did build V9.3 with D7, D2007, XE7, D10.3, D11 and D12 last week, so it builds OK for the different generations of compiler, but I can not test on every compiler.  Not sure my D2010 licence still works.

 

Angus

 

Share this post


Link to post

Hello,

After installing ICS V9.3 - Revised: September 25, 2024
I get an error 'Can not find accesspoint of procedure OPENSSL_LH_set_thunks in DLL-file C:\ProgramData\ICS_OpenSSL\3302\libssl-3.dll'

Has anyone encountered this problem before?

Any solutions how to fix it?

Thanks for any help

ics_ssl_img.png

Share this post


Link to post

I'm using windows 11 pro

not sure about the last working openSSL version.

but it seems the libssl-3.dll that is included in the ics installer is causing this error.

Share this post


Link to post

A little searching suggests OPENSSL_LH_set_thunks is in the other DLL and has been for years. 

 

So I guess the extraction of the two DLLs from the ICS resources has been corrupted, try deleting all files in directory 3302, they should re-appear when you run your app again. 

 

This is the first report of a DLL issue in the nine months since I implemented these resource files.

 

Angus

Share this post


Link to post

Hello Angus,

Thanks for your answer.

I've tried your solution but it did not help.

I searched a bit more too, and found a libssl-3.dll that was not giving the error.

I've replaced the dll in directory 3302 and the error message dissapeared.

DLL file that is working is attached.

 

Regards

libssl-3.dll

Share this post


Link to post

Just installing ICS V9.3 from GetIt, on Delphi 12 , however it throws and error as shown in the screen shot below. Many thanks for your work Angus. It seems like big upgrades always have little hidden bugs lurking somewhere! If there are any suggestions on how to fix this it would be appreciated.

 

Kind Regards  

ics1.jpg

ics2.jpg

Share this post


Link to post

I installed ICS from GetIt on D11 myself last week without any errors, and D12 uses the same packages. 

 

The usual reason for install failures is remnants of old ICS releases being found, I wrote a small app for GetIt that uninstalls old version packages which conflicted with the current versions, but perhaps you have an old ICS version in the path somewhere, thus the errors.

 

If it continues to fail from GetIt, try the zipped version, tested that on D12 last week. 

 

Not really using D12 at the moment, too many missing FmxLinux errors whenever I do anything. 

 

Angus

 

Share this post


Link to post

Zipped version installs ok but I had same problem with GetIt version.

Share this post


Link to post

Strangely I just got the same error 'undeclared identifier DefMax', building D2007, it was because that constant was added recently, and I was upgrading an earlier version, removed the packages, restarted D2007, and it compiled without error.  A little surprised, thought even D2007 was better behaved.  

 

Guess I need a new sacrificial D12 install for testing, just trashed my old Win10 VM to upgrade to Win11.

 

Angus

 

Share this post


Link to post

Same error for me! Installation from Getit crashed. 

image.png

Edited by wright

Share this post


Link to post
20 hours ago, Angus Robertson said:

The usual reason for install failures is remnants of old ICS releases being found, I wrote a small app for GetIt that uninstalls old version packages which conflicted with the current versions, but perhaps you have an old ICS version in the path somewhere, thus the errors.

Hi, Can you share it? :classic_biggrin:

Share this post


Link to post

Not sure the Get helper is relevant to the current problem, but it should be seen in the Getit script log: 

 

Downloading Library xx
Extracting Library xx
Launching 'c:\users\..\install\iceremoldpacks.exe -D12'

 

The source is install\icsremoldpacks.dpr.  It searches and removes packages with version numbers for 10.4 and later, since they now use common 'new' names.  I've seen it in logs for VCL only installs, but neither of the two screen shots for VCL/FMX install show it running, will need to check that.  But this is a one-off, updating from V9.0 or V8. 

 

The constant DefMaxIpLogLine was added to OverbyteIcsIpStreamLog.pas for V9.3, so if missing there may be an old OverbyteIcsIpStream.dcu somewhere in the path the compiler is finding rather than building the new version.  DCUs sometimes appear in the library or application source directories, depending on the Options paths, and can cause problems debugging and compiling unless removed and the paths corrected.  The ICS sample paths were only all corrected for V9.1 so before that DCUs would appear in the sample directories. 

 

All this cleaning up of 25 year old ICS is taking time, and causing some problems along the way, but ICS today is easier to maintain and install than two or three years ago.

 

Angus

 

 

Share this post


Link to post

I installed D12.2 into a new W11 24H2 VM today, and installed ICS VCL/FMX from GetIt.  It failed with 'Never build RTL must be built'.

 

I then opened the usual IcsIinstallVclFmx group, and got the same build error, but the package seemed to default to Win64, changed back to Win32, and used the Build Group that does all versions in a known order, and all packages built without error.  So maybe Delphi needs Win32 packages before Win64. 

 

Unfortunately, none of this is relevant to installs over old versions, and certain not the missing constant error. 

 

Angus

Share this post


Link to post

Also the same 'missing constant error' for me via Getit (Delphi 12.2 patched) , all seems OK via the zipped install. 

Edited by PhilPlus

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
×