A biblioteca Indy é uma biblioteca de comunicações cliente/servidor de código aberto que suporta sockets TCP/UDP/RAW, bem como mais de 100 protocolos de nível mais alto, incluindo SMTP, POP3, IMAP, NNTP, HTTP, FTP e muitos mais. Indy é escrita em Delphi, mas também está disponível para C++Builder e FreePascal. O sgcWebSockets usa Indy como base para alguns componentes e as diferentes Edições do sgcWebSockets fazem um uso diferente da biblioteca Indy.
A sgcWebSockets suporta protocolos como HTTP/2 que exigem o uso de ALPN, pode usar TLS 1.3 usando openSSL 1.1.1 ou openSSL 3.0.0... todos esses recursos não são suportados pela biblioteca padrão do Indy, portanto a sgcWebSockets Enterprise edition inclui uma biblioteca Indy personalizada que suporta esses recursos. Para evitar desinstalar a biblioteca padrão do Indy do IDE, os arquivos Indy necessários são renomeados adicionando o prefixo "sgc"; assim, por exemplo: a unit "IdGlobal" é renomeada para "sgcIdGlobal". Dessa forma, ambas as versões podem coexistir sem problemas.
Encontre abaixo qual versão do Indy é usada por cada Edição do sgcWebSockets:
| sgcWebSockets Edition | Versão do Indy |
| STANDARD | Standard |
| PROFESSIONAL | Standard |
| ENTERPRISE | Custom |
Os clientes com licenças "Registered", que são licenças antigas anteriores à divisão do pacote sgcWebSockets, encontrarão as seguintes versões do pacote sgcWebSockets:
| sgcWebSockets Edition | Versão do Indy |
| sgcWebSockets | Standard |
| sgcWebSockets min | Standard |
| sgcWebSockets min Indy* | Custom |
*O sgcWebSockets_min_indy é o mesmo que a edição sgcWebSockets Enterprise.
O uso da versão personalizada do Indy é definido no arquivo "sgcVer.inc" localizado na pasta de origem. Há um define de compilador chamado "SGC_CUSTOM_INDY" que habilita ou desabilita o uso desta versão do indy. Se você tem uma Enterprise Edition e quer desabilitar o uso do indy personalizado, basta excluir o seguinte define de compilador:
{$DEFINE SGC_CUSTOM_INDY}
Claro, se você habilitar SGC_CUSTOM_INDY mas não tiver na pasta de código-fonte as units da versão custom do indy necessárias, este define do compilador não funcionará.
O uso da versão personalizada do Indy não está limitado aos componentes sgcWebSockets. Alguns clientes querem fazer uso dos novos recursos desta versão personalizada do Indy em componentes Indy padrão, como SMTP por exemplo, para que possam utilizar TLS 1.3 ao enviar e-mails, utilizando servidores FTP, etc. A edição eSeGeCe ALL-ACCESS fornece um pacote Indy completo adicional com todos esses recursos. Este pacote, chamado "sgcIndy package", inclui a biblioteca Indy completa com suporte para openSSL 1.1.1 e openSSL 3.0.0. Portanto, você primeiro deve desinstalar sua biblioteca Indy atual instalada em seu IDE e então instalar esta versão; o processo para instalar o pacote sgcIndy é exatamente o mesmo de qualquer biblioteca Indy (aqui as units não são renomeadas).
Quando você quiser utilizar as bibliotecas openSSL, basta definir a variável global OPENSSL_API_VERSION com a versão da API OpenSSL desejada antes de carregar as bibliotecas OpenSSL. Esta variável global está na unit IdSSLOpenSSLHeaders.
Exemplo: para usar as bibliotecas openSSL 1.1.1
OPENSSL_API_VERSION := opSSL_1_1;
Ao utilizar o eSeGeCe ALL-ACCESS e o pacote sgcIndy na mesma aplicação, as fontes podem ser duplicadas porque a versão sgcWebSockets Enterprise utiliza uma versão personalizada do Indy com as units do Indy renomeadas. Isso significa que, por exemplo, units como sgcIdGlobal.pas e IdGlobal.pas serão compiladas na mesma aplicação (a primeira é utilizada ao usar qualquer componente do pacote sgcWebSockets Enterprise e a segunda ao usar qualquer componente do pacote sgcIndy, como ftp, smtp...).
Para evitar esse comportamento, o pacote sgcWebSockets pode ser configurado para usar a versão instalada do sgcIndy e ainda fazer uso de todos os componentes. Para isso, siga as instruções abaixo:
1. Abra o arquivo sgcVer.inc, localizado na pasta Source do pacote sgcWebSockets.
2. Desabilite a diretiva de compilador: SGC_CUSTOM_INDY. Esta opção informa ao compilador que os arquivos que começam com sgcId*.pas existem e devem ser utilizados ao compilar o sgcWebSockets Enterprise Package.
3. Habilite o seguinte compilador: SGC_INDY_LIB. Esta opção informa ao compilador que o pacote sgcIndy está instalado e deve ser usado ao compilar o pacote.
{$DEFINE SGC_INDY_LIB}
Utilizando a configuração anterior, o pacote sgcWebSockets Enterprise utilizará o pacote sgcIndy que está instalado e todos os recursos que fazem uso deste pacote (como http/2, IOCP, openSSL 3.0...) serão habilitados.