sgcIndy in cinque minuti

sgcIndy è una build mantenuta di Indy, non un fork con nomi nuovi. I nomi delle unit, i nomi delle classi e le pagine della palette dei componenti sono quelli che usi già, quindi la guida rapida non è "scrivi questo codice", ma "installalo, ricompila e poi imposta una sola nuova proprietà".

Stessi nomi di unit e classi di Indy
OpenSSL 1.0, 1.1 e 3.0, con TLS 1.3
Delphi, C++Builder, FreePascal e Lazarus

Il fatto che determina tutto il resto

Non esiste alcun prefisso sgcId. Né in una unit, né in una classe. Il tuo codice esistente compila senza modifiche.

Nomi delle unit

Nomi Indy semplici. IdTCPClient, IdHTTP, IdSSLOpenSSL e circa quattrocento altri. Nessuna unit della libreria ha un nome con prefisso sgc.

Nomi delle classi

Anche qui nomi Indy semplici: TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdSSHClient, TIdSFTPClient.

Pagine della palette

Le stesse cinque: Indy Clients, Indy Servers, Indy Intercepts, Indy I/O Handlers e Indy Misc. Circa 166 componenti distribuiti tra di esse, nei posti in cui li cerchi già.

Quindi cosa cambia

L'installer cambia quali package carica l'IDE e riscrive il search path. Il tuo progetto non cambia. La differenza visibile è una nuova proprietà, SSLOptions.APIVersion, e le correzioni sotto il cofano.

Requisiti ed edizioni

sgcIndy non ha livelli di funzionalità. I livelli di licenza cambiano cosa c'è nella confezione, non ciò che il codice sa fare.

Cosa Valore
IDE Da Delphi 7 a RAD Studio 13 e da C++Builder 2007 a 13. Per ciascuno sono inclusi i gruppi di package.
Clausola uses Invariata. Tutto ciò che il tuo progetto scrive già continua a funzionare, perché i nomi delle unit sono identici a quelli di Indy standard.
Versione base di Indy La libreria si presenta come Indy 10.6.3.12. Le modifiche sgc sono segnalate con commenti e define condizionali dentro le unit originali, non rinominandole.
Edizioni Nessun livello di funzionalità. Il flag dell'edizione viene iniettato in fase di build e ha esattamente due consumatori, la finestra Informazioni e la splash screen dell'IDE. Nulla nella libreria è regolato da esso. Ciò che i livelli cambiano davvero è il confezionamento: le build Community e Basic includono binari compilati con i file .pas e .inc esclusi, mentre la build con sorgenti li include.
FreePascal e Lazarus Supportati. È incluso un package Lazarus, insieme agli stub dei package FreePascal e ai file di build, e la scala dei compilatori copre da FPC 2.2.2 a 3.3.1. Un'avvertenza: la modalità Delphi è volutamente disattivata per Lazarus, quindi una unit che la presuppone dovrà essere adattata.
Piattaforme Windows, Linux, macOS, FreeBSD, iOS e Android hanno ciascuno i propri blocchi condizionali. Su iOS, OpenSSL deve essere collegato staticamente.

La cosa più utile da sapere prima di iniziare: poiché i nomi delle unit coincidono con quelli dell'Indy incluso in RAD Studio, è l'installer a gestire lo scambio per te. Annulla la registrazione dei package di design di Indy integrati, registra i propri e riscrive i search path dell'IDE.

Installa e conferma lo scambio

Il lavoro lo fa l'installer. Ciò che conta è confermare che l'IDE stia davvero caricando sgcIndy dopo l'installazione.

1. Esegui l'installer

Esegui il setup scaricato e seleziona le versioni di RAD Studio e le piattaforme che vuoi. Copia la libreria e, per i pacchetti Community e Basic, omette i file sorgente.

2. Lascia che scambi i package

L'installer annulla la registrazione dei package di design di Indy integrati nell'IDE e registra i propri al loro posto. È ciò che fa sì che gli stessi nomi di unit vengano risolti in sgcIndy.

3. Lascia che corregga il search path

Mette le cartelle di sgcIndy in testa ai search path dell'IDE per ogni piattaforma e rimuove le voci obsolete di un'installazione precedente.

4. Conferma alla splash screen

Riavvia l'IDE. La splash screen cita sgcIndy e lo fa anche la finestra Informazioni di Indy. È il controllo che conferma che lo scambio è avvenuto.

5. Ricompila il tuo progetto

Apri il tuo progetto Indy esistente e ricompila. Non toccare la clausola uses. Se compilava con Indy standard, compila con questa.

Ricompila, poi raggiungi TLS 1.3

La prima scheda è l'aspetto che ha già il tuo progetto esistente. La seconda è l'unica nuova riga che vale la pena aggiungere. La terza dimostra che stai usando sgcIndy e non Indy standard.

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;

Il tuo progetto esistente ha già questo aspetto, ed è proprio il punto. Non esiste sgcIdTCPClient né TsgcIdSSLIOHandlerSocketOpenSSL, perché nessuna unit e nessuna classe della libreria porta un prefisso sgc. Installa, ricompila, fatto.

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 ha i membri sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 e sslvAPI_3_0. Né il tipo né la proprietà esistono in Indy standard, il che rende questo frammento una prova in fase di compilazione di quale libreria stai usando.

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;

Stessi componenti, stesse proprietà, stessa pagina della palette. PassThrough := False è ciò che trasforma il socket semplice in uno TLS, esattamente come in Indy standard. Si legge con IdTCPClient1.IOHandler.ReadLn, si scrive con IOHandler.Write, senza modifiche.

Le prime due schede provengono dalla demo inclusa Demos\HttpClient\FHttpClient.pas, con la casella combinata sostituita da un valore letterale. In totale sono incluse diciotto demo, tra cui client SSH e SFTP, un client FTP, client di posta, un server TCP e una coppia UDP.

Dimostra che stai usando sgcIndy

Poiché i nomi delle unit sono identici, non puoi capirlo dal tuo sorgente. Ecco tre controlli inequivocabili.

La splash screen

Riavvia l'IDE dopo l'installazione. La splash screen cita sgcIndy. È il controllo che conferma che lo scambio dei package è avvenuto ed è il più rapido.

La finestra Informazioni

La finestra Informazioni di Indy riporta eSeGeCe invece del testo standard e indica Community Edition sul pacchetto gratuito.

Una riga che non compila con Indy standard

SSLOptions.APIVersion := sslvAPI_3_0;. Il tipo TIdSSLAPIVersion non esiste in Indy standard, quindi se quella riga compila, stai usando sgcIndy.

Il tuo progetto

Ricompilalo senza toccare la clausola uses. Dovrebbe compilare esattamente come prima, perché i nomi di unit e classi sono identici.

Cosa va storto di solito la prima volta

Sei problemi spiegano quasi ogni migrazione.

Sei andato a cercare le unit sgcId

Non ce ne sono. Nessuna unit e nessuna classe della libreria porta un prefisso sgc. Se riscrivi la tua clausola uses con sgcIdTCPClient il progetto non compila, perché una unit del genere non esiste.

L'IDE carica ancora Indy standard

Lo scambio dei package lo gestisce l'installer, quindi di solito significa che l'installazione non è stata completata oppure che una voce manuale nel search path ha la precedenza. Controlla la splash screen, che cita sgcIndy quando lo scambio è avvenuto.

TLS 1.3 non viene negoziato

Imposta entrambe le proprietà. SSLOptions.APIVersion seleziona quale generazione dell'API OpenSSL usare e SSLOptions.Method seleziona la versione del protocollo. TLS 1.3 richiede l'API 3.0, quindi entrambe le righe devono cambiare insieme.

Mancano le DLL di OpenSSL

Ogni cartella delle demo contiene l'insieme che le serve accanto all'eseguibile. Per l'API 3.0 sono libcrypto-3.dll e libssl-3.dll. Per le API più vecchie i nomi sono diversi e copiare la coppia sbagliata è una causa comune di un handshake che fallisce prima ancora di iniziare.

Una unit fallisce con Lazarus

La modalità Delphi è volutamente disattivata per le build Lazarus nei define del compilatore, con un commento che dice che lì fallisce. Il codice che si affida alla semantica della modalità Delphi va adattato.

I file sorgente non sono nel pacchetto

Gli installer Community e Basic includono binari compilati ed escludono i file .pas e .inc. Se devi entrare con il debugger nella libreria, ti serve il pacchetto che include i sorgenti.

Cosa aggiunge sgcIndy a Indy

Quattro cose da sapere una volta completata la ricompilazione.

OpenSSL moderno e TLS 1.3

Indy standard 10.6.2 è precedente ai cambiamenti delle API di OpenSSL 1.1 e 3.0. SSLOptions.APIVersion seleziona la generazione e sslvTLSv1_3 diventa raggiungibile con l'API 3.0.

Funzionalità di sgcIndy

SSH e SFTP

TIdSSHClient e TIdSFTPClient non sono affatto presenti in Indy standard. Per entrambi sono incluse delle demo.

Client SSH e client SFTP

Server ad alte prestazioni

Gli IO handler IOCP ed epoll sostituiscono il modello a un thread per connessione su Windows e Linux, ed è ciò che cambia il comportamento di un server sotto carico reale.

Come si confronta

Autenticazione moderna per la posta

Il supporto a XOAUTH2 significa che un client SMTP o IMAP può autenticarsi presso provider che hanno dismesso l'autenticazione di base.

XOAUTH2 in sgcIndy

Riferimento, demo e documentazione

Diciotto progetti demo sono inclusi nel download, da un client echo a SSH e SFTP.

Funzionalità di sgcIndy Cosa corregge e aggiunge questa build rispetto a Indy 10.6.3.
Come si confronta sgcIndy a confronto con Indy standard, funzionalità per funzionalità.
Download Il pacchetto Community è gratuito.
Acquista I pacchetti che includono i sorgenti completi.
Panoramica del prodotto Cos'è sgcIndy e a chi è rivolto.
Tutti i prodotti I prezzi di ogni libreria eSeGeCe in un'unica tabella.

Letture correlate: OpenSSL 3.0 con Indy, il server IOCP, il client SSH e le ultime note di rilascio. Ogni prodotto ha la propria guida rapida, elencata nella pagina per iniziare.

Domande sulla guida rapida di sgcIndy

No, ed è la cosa più importante di sgcIndy. Ogni unit mantiene il proprio nome originale di Indy, IdTCPClient, IdHTTP, IdSSLOpenSSL e le altre, e ogni classe mantiene il proprio nome originale, TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL. In tutta la libreria non esiste alcuna unit né classe con un prefisso sgc. Installalo, ricompila e il tuo progetto usa sgcIndy.
Li scambia l'installer. Annulla nell'IDE la registrazione dei package di design di Indy integrati, registra al loro posto quelli di sgcIndy e mette le cartelle di sgcIndy in testa ai search path. Poiché i nomi delle unit sono identici, è questo che deve cambiare e non il tuo codice.
Tre controlli. La splash screen dell'IDE cita sgcIndy all'avvio. Lo fa anche la finestra Informazioni di Indy. E c'è una prova in fase di compilazione: SSLOptions.APIVersion esiste solo in questa build, quindi una riga che gli assegna sslvAPI_3_0 compila qui e fallisce con Indy standard.
Due proprietà, impostate insieme. SSLOptions.APIVersion := sslvAPI_3_0 seleziona la generazione dell'API OpenSSL 3.0 e SSLOptions.Method := sslvTLSv1_3 seleziona il protocollo. Il tipo TIdSSLAPIVersion ha i membri sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 e sslvAPI_3_0, e TIdSSLVersion ha guadagnato sslvTLSv1_3. Poi distribuisci libcrypto-3.dll e libssl-3.dll accanto al tuo eseguibile, come fanno le demo.
La libreria si presenta come Indy 10.6.3.12. Le modifiche sgc sono fatte dentro i file originali, segnalate con commenti e protette da define condizionali, ed è esattamente per questo che i nomi delle unit hanno potuto restare gli stessi.
Nessuna, perché nessuna funzionalità è regolata dall'edizione. Il flag dell'edizione viene iniettato in fase di build e ha solo due consumatori in tutta la libreria, entrambi estetici: la didascalia della finestra Informazioni e il testo della splash screen dell'IDE. Ciò che i livelli cambiano davvero è il confezionamento, perché gli installer Community e Basic includono binari compilati ed escludono i file .pas e .inc, mentre il pacchetto con i sorgenti li include.
Sì. È incluso un package Lazarus, insieme agli stub dei package FreePascal e ai file di build, e la scala dei compilatori copre da FPC 2.2.2 a 3.3.1. C'è un'avvertenza da conoscere prima di iniziare: la modalità Delphi è volutamente disattivata per Lazarus nei define del compilatore, con un commento che dice che lì fallisce, quindi una unit che dipende dalla semantica della modalità Delphi dovrà essere adattata.
Windows, Linux, macOS, FreeBSD, iOS e Android hanno ciascuno i propri blocchi condizionali nei define del compilatore. I target Unix usano OpenSSL e la unit zlib inclusa. iOS è quella con un vincolo reale: lì OpenSSL deve essere collegato staticamente invece di essere caricato a runtime.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto a lasciare Indy standard?

Il pacchetto Community è gratuito. Installalo, ricompila e controlla la splash screen.