sgcIndy en cinco minutos

sgcIndy es una compilación mantenida de Indy, no un fork con nombres nuevos. Los nombres de las units, los nombres de las clases y las páginas de la paleta de componentes son los que ya usas, así que el inicio rápido no es «escribe este código», es «instálalo, recompila y define una propiedad nueva».

Mismos nombres de units y clases que Indy
OpenSSL 1.0, 1.1 y 3.0, con TLS 1.3
Delphi, C++Builder, FreePascal y Lazarus

El hecho que lo condiciona todo lo demás

No hay ningún prefijo sgcId. Ni una unit, ni una clase. Tu código existente compila sin cambios.

Nombres de units

Nombres normales de Indy. IdTCPClient, IdHTTP, IdSSLOpenSSL y unas cuatrocientas más. Ninguna unit de la biblioteca lleva un prefijo sgc en su nombre.

Nombres de clases

También nombres normales de Indy: TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdSSHClient, TIdSFTPClient.

Páginas de la paleta

Las mismas cinco: Indy Clients, Indy Servers, Indy Intercepts, Indy I/O Handlers e Indy Misc. Unos 166 componentes repartidos entre ellas, en los sitios donde ya los buscas.

Entonces, ¿qué cambia?

El instalador cambia qué paquetes carga el IDE y reescribe la ruta de búsqueda. Tu proyecto no cambia. La diferencia visible es una propiedad nueva, SSLOptions.APIVersion, y las correcciones que hay por debajo.

Requisitos y ediciones

sgcIndy no tiene niveles de características. Los niveles de licencia cambian lo que hay en la caja, no lo que puede hacer el código.

Qué Valor
IDE Delphi 7 hasta RAD Studio 13, y C++Builder 2007 hasta 13. Se incluyen grupos de paquetes para cada uno.
Cláusula uses Sin cambios. Lo que ya escriba tu proyecto sigue funcionando, porque los nombres de las units son idénticos a los de Indy estándar.
Versión base de Indy La biblioteca se identifica como Indy 10.6.3.12. Los cambios de sgc están marcados con comentarios y defines condicionales dentro de las units originales, no renombrándolas.
Ediciones Sin niveles de características. El indicador de edición se inyecta en tiempo de compilación y tiene exactamente dos consumidores, el cuadro Acerca de y la pantalla de bienvenida del IDE. Nada de la biblioteca depende de él. Lo que los niveles cambian realmente es el empaquetado: las compilaciones Community y Basic incluyen binarios compilados sin los archivos .pas e .inc, mientras que la compilación con código fuente los incluye.
FreePascal y Lazarus Compatibles. Se incluye un paquete de Lazarus, junto con los stubs de paquetes de FreePascal y los archivos de compilación, y la escalera de compiladores cubre de FPC 2.2.2 a 3.3.1. Una salvedad: el modo Delphi está desactivado a propósito para Lazarus, así que una unit que lo presuponga necesitará ajustes.
Plataformas Windows, Linux, macOS, FreeBSD, iOS y Android tienen cada una sus propios bloques condicionales. En iOS, OpenSSL tiene que enlazarse estáticamente.

Lo más útil que hay que saber antes de empezar: como los nombres de las units colisionan con el Indy que se incluye en RAD Studio, el instalador gestiona el cambio por ti. Desregistra los paquetes de tiempo de diseño de Indy incorporados, registra los suyos y reescribe las rutas de búsqueda del IDE.

Instala y confirma el cambio

El instalador hace el trabajo. Lo que importa es confirmar después que el IDE realmente está cargando sgcIndy.

1. Ejecuta el instalador

Ejecuta el instalador descargado y marca las versiones de RAD Studio y las plataformas que quieras. Copia la biblioteca y, en los paquetes Community y Basic, omite los archivos de código fuente.

2. Deja que cambie los paquetes

El instalador desregistra los paquetes de tiempo de diseño de Indy incorporados en el IDE y registra los suyos en su lugar. Esto es lo que hace que los mismos nombres de units se resuelvan a sgcIndy.

3. Deja que corrija la ruta de búsqueda

Pone las carpetas de sgcIndy al principio de las rutas de búsqueda del IDE para cada plataforma, y elimina las entradas obsoletas de una instalación anterior.

4. Confirma en la pantalla de bienvenida

Reinicia el IDE. La pantalla de bienvenida nombra sgcIndy, y el cuadro Acerca de de Indy también lo dice. Esa es la comprobación de que el cambio funcionó.

5. Recompila tu proyecto

Abre tu proyecto Indy existente y recompila. No toques la cláusula uses. Si compilaba contra Indy estándar, compila contra esto.

Recompila y llega a TLS 1.3

La primera pestaña es el aspecto que ya tiene tu proyecto existente. La segunda es la única línea nueva que merece la pena añadir. La tercera demuestra que estás en sgcIndy y no en Indy estándar.

FHttpClient.pas
// This is a shipped sgcIndy demo's uses clause.
// Read it twice: there is not one sgc prefix in it.
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
  IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;

Tu proyecto existente ya tiene este aspecto, y ese es el objetivo. No hay sgcIdTCPClient ni TsgcIdSSLIOHandlerSocketOpenSSL, porque ninguna unit ni clase de la biblioteca lleva un prefijo sgc. Instala, recompila y listo.

FHttpClient.pas
procedure TFRMHttpClient.btnGoToClick(Sender: TObject);
var
  oStream: TStringStream;
begin
  // Two separate settings. APIVersion picks which generation of the
  // OpenSSL API to call, Method picks the TLS version. TLS 1.3 needs
  // the 3.0 API, so both lines change together.
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;

  oStream := TStringStream.Create('');
  try
    IdHTTP1.Get(txtURL.Text, oStream);
  finally
    FreeAndNil(oStream);
  end;
end;

TIdSSLAPIVersion tiene los miembros sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 y sslvAPI_3_0. Ni el tipo ni la propiedad existen en Indy estándar, lo que hace de este fragmento una prueba en tiempo de compilación de contra qué biblioteca estás compilando.

fTcpClient.pas
procedure TfrmTCPClient.btnConnectClick(Sender: TObject);
begin
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
  IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;

  IdTCPClient1.Host := txtHost.Text;
  IdTCPClient1.Port := StrToInt(txtPort.Text);
  IdSSLIOHandlerSocketOpenSSL1.PassThrough := False;

  IdTCPClient1.Connect;
end;

procedure TfrmTCPClient.btnDisconnectClick(Sender: TObject);
begin
  IdTCPClient1.Disconnect;
end;

Mismos componentes, mismas propiedades, misma página de la paleta. PassThrough := False es lo que convierte el socket normal en uno TLS, exactamente igual que en Indy estándar. Leer es IdTCPClient1.IOHandler.ReadLn, escribir es IOHandler.Write, sin cambios.

Las dos primeras pestañas proceden de la demo incluida Demos\HttpClient\FHttpClient.pas, con el cuadro combinado sustituido por un literal. En total se incluyen dieciocho demos, entre ellas clientes SSH y SFTP, un cliente FTP, clientes de correo, un servidor TCP y una pareja UDP.

Demuestra que estás ejecutando sgcIndy

Como los nombres de las units son idénticos, no puedes saberlo por tu propio código fuente. Aquí tienes tres comprobaciones inequívocas.

La pantalla de bienvenida

Reinicia el IDE tras instalar. La pantalla de bienvenida nombra sgcIndy. Esa es la comprobación de que el cambio de paquetes funcionó, y es la más rápida.

El cuadro Acerca de

El diálogo Acerca de de Indy indica eSeGeCe en lugar del texto estándar, y dice Community Edition en el paquete gratuito.

Una línea que no compila contra Indy estándar

SSLOptions.APIVersion := sslvAPI_3_0;. El tipo TIdSSLAPIVersion no existe en Indy estándar, así que si esa línea compila, estás en sgcIndy.

Tu propio proyecto

Recompílalo sin tocar la cláusula uses. Debería compilar exactamente como antes, porque los nombres de las units y de las clases son idénticos.

Lo que suele fallar la primera vez

Seis problemas explican casi todas las migraciones.

Fuiste a buscar units sgcId

No hay ninguna. Cero units y cero clases de la biblioteca llevan un prefijo sgc. Si reescribes tu cláusula uses a sgcIdTCPClient el proyecto no compilará, porque esa unit no existe.

El IDE sigue cargando Indy estándar

El instalador gestiona el cambio de paquetes, así que esto suele significar que la instalación no se completó o que una entrada manual en la ruta de búsqueda está ganando. Comprueba la pantalla de bienvenida, que nombra sgcIndy cuando el cambio funcionó.

TLS 1.3 no se negocia

Define ambas propiedades. SSLOptions.APIVersion selecciona qué generación de la API de OpenSSL usar, y SSLOptions.Method selecciona la versión del protocolo. TLS 1.3 necesita la API 3.0, así que las dos líneas tienen que cambiar juntas.

Faltan las DLL de OpenSSL

Cada carpeta de demo incluye el conjunto que necesita junto al ejecutable. Para la API 3.0 son libcrypto-3.dll y libssl-3.dll. Para las APIs más antiguas los nombres son distintos, y copiar la pareja equivocada es una causa habitual de un handshake que falla antes de empezar.

Una unit falla en Lazarus

El modo Delphi está desactivado a propósito en las compilaciones de Lazarus en los defines del compilador, con un comentario que dice que falla ahí. El código que depende de la semántica del modo Delphi necesita ajustes.

Los archivos de código fuente no están en el paquete

Los instaladores Community y Basic incluyen binarios compilados y excluyen los archivos .pas e .inc. Si necesitas entrar con el depurador en la biblioteca, necesitas el paquete que incluye el código fuente.

Lo que sgcIndy añade sobre Indy

Cuatro cosas que conviene conocer cuando la recompilación está hecha.

OpenSSL moderno, y TLS 1.3

Indy estándar 10.6.2 es anterior a los cambios de API de OpenSSL 1.1 y 3.0. SSLOptions.APIVersion selecciona la generación, y sslvTLSv1_3 pasa a estar disponible con la API 3.0.

Características de sgcIndy

SSH y SFTP

TIdSSHClient y TIdSFTPClient no están en absoluto en Indy estándar. Se incluyen demos para ambos.

Cliente SSH y cliente SFTP

Servidores de alto rendimiento

Los manejadores de E/S IOCP y epoll sustituyen el modelo de un hilo por conexión en Windows y Linux, que es lo que cambia la forma de un servidor bajo carga real.

Cómo se compara

Autenticación moderna para correo

La compatibilidad con XOAUTH2 permite que un cliente SMTP o IMAP se autentique con proveedores que han retirado la autenticación básica.

XOAUTH2 en sgcIndy

Referencia, demos y documentación

Se incluyen dieciocho proyectos de demo dentro de la descarga, desde un cliente de eco hasta SSH y SFTP.

Características de sgcIndy Lo que esta compilación corrige y añade sobre Indy 10.6.3.
Cómo se compara sgcIndy frente a Indy estándar, característica por característica.
Descargar El paquete Community es de uso gratuito.
Comprar Los paquetes que incluyen el código fuente completo.
Visión general del producto Qué es sgcIndy y para quién es.
Todos los productos Los precios de todas las bibliotecas de eSeGeCe en una sola tabla.

Lecturas relacionadas: OpenSSL 3.0 con Indy, el servidor IOCP, el cliente SSH y las últimas notas de versión. Cada producto tiene su propio inicio rápido, listado en la página de primeros pasos.

Preguntas sobre el inicio rápido de sgcIndy

No, y esto es lo más importante de sgcIndy. Cada unit conserva su nombre original de Indy, IdTCPClient, IdHTTP, IdSSLOpenSSL y el resto, y cada clase conserva su nombre original, TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL. No hay ninguna unit ni clase en toda la biblioteca que lleve un prefijo sgc. Instálalo, recompila y tu proyecto está en sgcIndy.
El instalador los intercambia. Desregistra del IDE los paquetes de tiempo de diseño de Indy incorporados, registra los de sgcIndy en su lugar y pone las carpetas de sgcIndy al principio de las rutas de búsqueda. Como los nombres de las units son idénticos, eso es lo que tiene que cambiar, y no tu código.
Tres comprobaciones. La pantalla de bienvenida del IDE nombra sgcIndy al arrancar. El cuadro Acerca de de Indy también lo dice. Y hay una prueba en tiempo de compilación: SSLOptions.APIVersion existe solo en esta compilación, así que una línea que le asigne sslvAPI_3_0 compila aquí y falla contra Indy estándar.
Dos propiedades, definidas juntas. SSLOptions.APIVersion := sslvAPI_3_0 selecciona la generación 3.0 de la API de OpenSSL, y SSLOptions.Method := sslvTLSv1_3 selecciona el protocolo. El tipo TIdSSLAPIVersion tiene los miembros sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 y sslvAPI_3_0, y TIdSSLVersion ganó sslvTLSv1_3. Después distribuye libcrypto-3.dll y libssl-3.dll junto a tu ejecutable, como hacen las demos.
La biblioteca se identifica como Indy 10.6.3.12. Los cambios de sgc se hacen dentro de los archivos originales, marcados con comentarios y protegidos por defines condicionales, que es exactamente la razón por la que los nombres de las units pudieron seguir siendo los mismos.
Ninguna, porque ninguna característica está controlada por la edición. El indicador de edición se inyecta en tiempo de compilación y tiene solo dos consumidores en toda la biblioteca, ambos cosméticos: el título del cuadro Acerca de y el texto de la pantalla de bienvenida del IDE. Lo que los niveles cambian realmente es el empaquetado, porque los instaladores Community y Basic incluyen binarios compilados y excluyen los archivos .pas e .inc, mientras que el paquete con código fuente los incluye.
Sí. Se incluye un paquete de Lazarus, junto con los stubs de paquetes de FreePascal y los archivos de compilación, y la escalera de compiladores cubre de FPC 2.2.2 a 3.3.1. Hay una salvedad que conviene conocer antes de empezar: el modo Delphi está desactivado a propósito para Lazarus en los defines del compilador, con un comentario que dice que falla ahí, así que una unit que dependa de la semántica del modo Delphi necesitará ajustes.
Windows, Linux, macOS, FreeBSD, iOS y Android tienen cada una sus propios bloques condicionales en los defines del compilador. Los destinos Unix usan OpenSSL y la unit de zlib incluida. iOS es la que tiene una restricción real: OpenSSL tiene que enlazarse estáticamente ahí en lugar de cargarse en tiempo de ejecución.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para dejar atrás Indy estándar?

El paquete Community es gratuito. Instálalo, recompila y comprueba la pantalla de bienvenida.