Jump to content

Recommended Posts

ICS V9.1 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, Win64 and MacOS 32-bit targets. Beware Mac OS-X and C++ have not been tested recently due to lack of support from such users.

 

The distribution zip includes the latest OpenSSL 3.0.13. 3.1.5 and 3.2.1, for Win32 and Win64.

 

The highlights of V9.1 were posted in this topic two weeks ago, and are included in the download page.

 

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

 

There is also a new page https://wiki.overbyte.eu/wiki/index.php/Updating_projects_to_V9.1 to help with migrating existing projects.

 

The main ICS readme9.txt has the installation section rewritten to explain the new common groups and packages used for Delphi 10.4 and later, so you won't find any dedicated ICS packages for Delphi 11 or 12.  The readme now also explains all defines in the .\Source\Include\OverbyteIcsDefs.inc file that control how OpenSSL is loaded.

 

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

 

Angus

 

 

  • Like 4
  • Thanks 4

Share this post


Link to post

Update went (at least I think so) without a hitch.

Because the way we deploy our software is a bit special I had to change the SSL-Settings, but I think it is ok, that you chose the new way as default.

Share this post


Link to post

Thanks, if you retain your old Defs file, ICS should behave as before, although I changed all the samples and my own applications so not sure when I last tested that...

 

Angus

Share this post


Link to post
21 hours ago, Angus Robertson said:

Thanks, if you retain your old Defs file,

I never changed anything in there so I had no problem "overwriting" it. I prefer to understand the settings, and change them if needed, so this was alright to me.

Starting with 9.0 I started using ICS "directly" instead of via GetIt and I also decided to vendor the used release into my git repo, so I can easily track the changes between the releases, or if I have to patch something.

Share this post


Link to post

ICS V9.1 is now available to install from GetIt for Delphi 11 and 12, either VCL only or VCL and FMX.

 

Start with the samples at C:\Users\(user)\Documents\Embarcadero\Studio\23.0\CatalogRepository\

 

Angus

 

 

 

Share this post


Link to post

There is a clever improvement in the GetIt ICS installation process, thanks Embarcadero.

 

After the packages have been built and installed, the ICS demos-delphi-vcl project group opens in the IDE, allowing all the samples to be viewed and built, recommend saving the group as a favourite so it can be easily found.

 

The group opens with the OverbyteIcsSnippets project, that provides one button examples of HTTP and FTP multiple file downloading and uploading, HTTP REST requests, Websocket client, TCP socket traffic, and sending email using Mail Queue. 

 

Angus

 

Share this post


Link to post

This looks great, if I can get it working. Thank you, Angus. We use C++ Builder (Alexandria). GetIt installed everything fine, but I couldn't find the .hpp file for C++ Builder. Do they get created, or do I have to install manually?

Thanks,

Ian

Share this post


Link to post
Posted (edited)

Ah, I see that GetIt only installs ICS for the Delphi personality. They don't show up in the C++ Builder personality. That's new. The last time I used GetIt to install the components, they did show up in C++. Will try to figure out the manual install.

 

Edit: I'm very unfamiliar with the Pascal personality. My understanding is that when you compile a Pascal file in C++ Builder, it automatically generates the .hpp file. Is the option not set in the project? 

Edited by w0wbagger
Trying to determine cause.

Share this post


Link to post

I don't do C++ so it is totally untested for V9.1, I removed hundreds of old files and some of those might have been needed for C++.  Once you get it working, please email any changes for the next release.   We can then restore it for GetIt.

 

Due to OpenSSL being more integrated now, there will probably be quarterly releases to match OpenSSL.

 

Angus

 

Share this post


Link to post

If I figure it out, I'm happy to e-mail any project file changes. I notice the difference between 8.xx installer and 9.1 installer is that the .pas files aren't included in the C++ project, and since it never opens them to compile them, (I believe) it doesn't create the .hpp files. 

The project file only includes the .dcr files. Again, I know nothing about the Pascal personality, so I'm going to just try adding the .PAS files to their respective projects and see if that works.

Share this post


Link to post
Posted (edited)

I'm going to add what I've found here. The IcsVCLCBNewRun.cpp currently includes a #pragma link "IcsCommonCB110Run.a" and a #pragma link "IcsCommonCB110Run.lib"

(I think?) these should be changed to "IcsCommonCBNewRun".  

IcsVCLCBNewDesign.cbproj has "IcsCommonCB110Run.bpi" under "Requires". I'm assuming that this should be removed and replaced with "IcsCommonCBNewRun.bpi". 

IcsVCLCBNewDesign.cbproj also has "IcsVCLCB110Run.bpi" under "Requires". I'm assuming also that his should also be removed and replaced with "IcsVCLCBNewRun.bpi"

 

Made these changes but it still doesn't work. There are a lot of references to 110 in the various project files (vs 22.0). 

 

When I install the components in "IcsCommonCBNewDesign", no component tab gets generated, but if I look at the components from the "Components->Install Packages" screen, I see them all there.

However, when I install the components from "IcsVCLCBNewDesign", it says they're installed, but there are no components showing when I click on the "Components" button from the "Components->Install Packages" screen when highlighting the VCL Design-Time Package. I'm at a bit of a loss, now. 

Edited by w0wbagger
Added more issues I've found

Share this post


Link to post

Thanks for the comments, but what I need are modified and tested package files I can release to others, no point my trying to make changes I can not test.

 

Angus

 

Share this post


Link to post
Posted (edited)

Hi,

 Thanks for the continuous update of this component package 🙂

 

I'm trying to update from 9.0 to 9.1 under Delphi 7 , but it won't compile:

[Error] OverbyteIcsSslBase.pas(494): Undeclared identifier: 'TBytes'

Is there a quick-fix for that ?

 

EDIT:

 

[SOLVED]

 

Just added this line:

unit OverbyteIcs....;

interface
...
 OverbyteIcsTypes,          { V9.1 }

 

To these files:

OverbyteIcsHttpAppServer.pas
OverbyteIcsIpUtils.pas
OverbyteIcsSslBase.pas
OverbyteIcsUrl.pas

 

Edited by PizzaProgram
Solved

Share this post


Link to post

Thanks, as the readme9 says, we no longer test Delphi 7, too old, but I'll add Types soon, all due to increasing use of TBytes that Delphi 7 does not understand.

 

Angus

 

Share this post


Link to post

Great 😉

 

I'd just like to report that:

- it WORKS !

 

Both TSSLContext + JOSE + SuperObject + Utils.

(Just made my first attempt to communicate with the government test server to send/receive some data.)

 

Share this post


Link to post

... hmmm that's interesting:

 

Since the upgrade from v9.0 -> to v9.1

My EXE file (compiled under Delphi 7 ) increased from:

15.5 MB -> to

20.5 MB

 

I'm using MPress to self-compress it, and it also shows a +21% size increase:  7.1 MB -> 8.6 MB

That's a huge difference if we count that only pure code happened. (No new pictures added or similar, which would explain it)

Well, it is not a very big problem, but there are still some restaurants having only 30-60Kbit internet max. (3G)

... and also a memory consupmtion on a Win32 tablet is +25% more.

 

...

Investigating it further I've realized, there are new huge .RES files in the source directory.

LibV32OpenSSL32.RES

 

And so I've realized what all that means: I have red about in the 9.1 " what changed " topic, but did not comprehend, that the section:

"Distribution of the ICS OpenSSL files has changed "

is an extreamly cool upgrade :classic_cool:

 

Maybe re-writing it using my own words can help others too:

 

The new 9.1+ ICS will force-include OpenSSL DLL files inside the compiled EXE by default.

- It will extract these DLL files from the EXE on first run / initialisation to a common directory.

- This behaviour can be turned off by editing the ...\ICS\Source\Include\OverbyteIcsDefs.inc file.

- But it's not recommended because some features will fail to work.

Share this post


Link to post

Because you no longer need to distribute the DLLs separately, the increase EXE size should mostly cancel out.  Or change the defs file and leave the DLLs alone, this change was really intended for new applications. I have tried to explain all this.  You also don't need to distribute a root bundle file, but many people probably ignored that. 

 

https://wiki.overbyte.eu/wiki/index.php/Updating_projects_to_V9.1

 

Angus

Share this post


Link to post

Yes, I fully understand all of it now. Thanks for the replay!

 

The only 4 things are not yet clear to me:

1.) What is the command I can force this "unpacking" (+ initialization) of the resource-embedded DLLs ?

 

2.) Can I set a path before where is should happen?  (I like to put those to my own APP's dir, like: MyExePath\Bin\SSL\20240205\dll )

3.) ... If I want to do that, should I disable: {DEFINE OpenSSL_ProgramData} ?

 

4.) After resource unpacking / before each initialization if these DLL files:
 - Is ICS checking the file's integrity? (CRC32 or at least the size?)
 (Because I could list many cases when it does not succeed. (Write error, bad Antivirus program, modified by a malware, ... )

Share this post


Link to post

The OpenSSL_ProgramData define is ignored if OpenSSL resource files are linked, it's an alternative option.

 

You can not use OpenSSL_AutoLoad_CA_Bundle if you want to change where OpenSSL is loaded, it's too late to change anything in code. 

 

You can set GSSL_PUBLIC_DIR to your own directory before OpenSSL is loaded (instead of c:\programdata) but sub-directorties will still be created in your new directory, each OpenSSL release needs a unique directory.  Note I've not tested this! 

 

Use of the existing GSSL_SignTest_Check public variable is unchanged, if set true before loading OpenSSL, ICS checks the DLLs are digitally signed, which includes corruption checks.  It does not check the signing certificate at the moment, too much extra code.  This does not work yet for OpenSSL_AutoLoad_CA_Bundle, too late, need to think about that.

 

Angus

 

 

 

  • Like 1

Share this post


Link to post

... fixing the PATH problem was easy,

 
 ...
   p := exe_path + c_my_SSL3_base_dir;
   OverbyteIcsSSLEAY.GSSL_PUBLIC_DIR := p;
   OverbyteIcsSSLEAY.GSSL_DLL_DIR    := p + '\2301'; // 'e:\myApp\Bin\SSL\202xxxxx\2301'; // add version number
   // GSSL_SignTest_Check := True; 
   try
     OverbyteIcsLIBEAY.IcsLoadSsl; 
     Result := True;
   except on E:Exception do
      logme('Failed to initialize SSL3 DLLs. Error message: ' + E.Message);
   end;

 

Share this post


Link to post

But now I have found a new problem with latest release:

 

openssl.exe is not running on Win10 64bit PC, if only the 32bit DLL-s are present !

(This problem did not occure on prev. versions.)

 

- What can I do?

- Is there any "command line switch" to force search for the 32 bit DLLs ?

 

(My app is 32 bit, I have now all the 32bit DLLs embedded into into, taking already lot's of space.)

Share this post


Link to post
20 minutes ago, DelphiUdIT said:

Go there and download...

Thank You very much for trying to help, but I'm talking about hundreds of PCs, that needs to use this exe every few year once to generate new keys.

Deploying all those missing DLLs by hand to every each PC one by one would be an insane big task.

If there are 32 bit normal DLLs present in the same directory, the EXE should have had recognise and use those, just like it did before this new version.

 

Of course, as a programmer myself, I can make some "dirty hack-solutions" to circumvent the problem, (which will probably cause other problems,)

but it's just not the way it should work! 😞

Share this post


Link to post

If your Delphi app is built for Win32, you only use Win32 DLLs, even when running in a Win64 OS.  This has been the case for 25 years.

 

If it is failing, there is another reason. 

 

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
×