Indy ライブラリは TCP/UDP/RAW ソケットをサポートするオープンソースのクライアント/サーバー通信ライブラリで、SMTP、POP3、IMAP、NNTP、HTTP、FTP など 100 以上の高レベルプロトコルも含まれています。Indy は Delphi で書かれていますが C++Builder と FreePascal でも利用できます。sgcWebSockets は一部のコンポーネントの基盤として Indy を使用しており、sgcWebSockets の各エディションは Indy ライブラリをそれぞれ異なる形で利用します。
sgcWebSockets は ALPN の使用を必要とする HTTP/2 などのプロトコルをサポートし、openSSL 1.1.1 または openSSL 3.0.0 を使用して TLS 1.3 を使用できます... これらの機能はすべて標準の Indy ライブラリではサポートされていないため、sgcWebSockets Enterprise エディションはこれらの機能をサポートするカスタム Indy ライブラリを含んでいます。IDE から標準の Indy ライブラリをアンインストールする必要がないよう、必要な Indy ファイルはプレフィックス "sgc" を追加してリネームされています。例えば "IdGlobal" ユニットは "sgcIdGlobal" にリネームされます。これにより、両方のバージョンが問題なく共存できます。
以下に、sgcWebSocketsの各エディションで使用されるIndyのバージョンを示します。
| sgcWebSockets エディション | Indy バージョン |
| STANDARD | スタンダード |
| PROFESSIONAL | スタンダード |
| ENTERPRISE | カスタム |
sgcWebSockets パッケージが分割される前の古いライセンスである「登録済み」ライセンスをお持ちのお客様は、次の sgcWebSockets パッケージバージョンをご利用いただけます:
| sgcWebSockets エディション | Indy バージョン |
| sgcWebSockets | スタンダード |
| sgcWebSockets 最小 | スタンダード |
| sgcWebSockets min Indy* | カスタム |
*sgcWebSockets_min_indy は sgcWebSockets Enterprise エディションと同じです。
カスタムIndyバージョンの使用はソースフォルダーにある「sgcVer.inc」ファイルで定義されています。このIndyバージョンの使用を有効または無効にする「SGC_CUSTOM_INDY」というコンパイラ定義があります。Enterprise Edition をお持ちで、カスタムIndyの使用を無効にしたい場合は、以下のコンパイラ定義を削除してください:
{$DEFINE SGC_CUSTOM_INDY}
もちろん、SGC_CUSTOM_INDY を有効にしても、ソースフォルダーに必要なカスタム Indy バージョンのユニットがなければ、このコンパイラ定義は機能しません。
カスタムIndy バージョンの使用は、sgcWebSockets コンポーネントに限定されません。一部のユーザーは、SMTPなどの標準的なIndyコンポーネントでこのカスタムIndyバージョンの新機能を活用したい場合があります。例えば、メール送信時にTLS 1.3を使用したり、FTPサーバーを利用したりすることができます。eSeGeCe ALL-ACCESS エディションでは、これらすべての機能を備えた完全なIndyパッケージを追加で提供しています。「sgcIndy パッケージ」と呼ばれるこのパッケージには、openSSL 1.1.1およびopenSSL 3.0.0をサポートした完全なIndyライブラリが含まれています。まず、IDEにインストールされている現在のIndyライブラリをアンインストールしてから、このバージョンをインストールしてください。sgcIndy パッケージのインストール手順は、通常のIndyライブラリと全く同じです(このバージョンではユニット名は変更されません)。
OpenSSL ライブラリを使用する場合は、OpenSSL ライブラリを読み込む前に、グローバル変数 OPENSSL_API_VERSION を希望の OpenSSL API バージョンに設定するだけです。このグローバル変数は IdSSLOpenSSLHeaders ユニットにあります。
例: openSSL 1.1.1 ライブラリを使用する場合
OPENSSL_API_VERSION := opSSL_1_1;
eSeGeCe ALL-ACCESS と sgcIndy パッケージを同じアプリケーションで使用する場合、sgcWebSockets Enterprise バージョンはIndyユニットの名前を変更したカスタムIndyバージョンを使用するため、ソースが重複する可能性があります。つまり、たとえば sgcIdGlobal.pas と IdGlobal.pas のようなユニットが同じアプリケーションでコンパイルされることになります(前者はsgcWebSockets Enterprise パッケージの任意のコンポーネントを使用するときに、後者はftp、smtpなどのsgcIndy パッケージの任意のコンポーネントを使用するときに使用されます)。
この動作を回避するために、sgcWebSockets パッケージをインストール済みの sgcIndy バージョンを使用するように設定でき、すべてのコンポーネントを引き続き利用できます。これを行うには、以下の手順に従ってください:
1. sgcWebSockets パッケージの Source フォルダーにある sgcVer.inc ファイルを開きます。
2. コンパイラディレクティブSGC_CUSTOM_INDYを無効にします。このオプションは、sgcId*.pasで始まるファイルが存在し、sgcWebSockets Enterprise Packageのコンパイル時に使用する必要があることをコンパイラに伝えます。
3. 以下のコンパイラを有効にします: SGC_INDY_LIB。このオプションはコンパイラに sgcIndy パッケージがインストールされており、パッケージのコンパイル時に使用される必要があることを伝えます。
{$DEFINE SGC_INDY_LIB}
前述の構成を使用すると、sgcWebSockets Enterprise パッケージはインストール済みのsgcIndy パッケージを使用し、このパッケージを利用するすべての機能(http/2、IOCP、openSSL 3.0 など)が有効になります。