sgcIndy w pięć minut

sgcIndy to utrzymywana kompilacja Indy, a nie fork z nowymi nazwami. Nazwy jednostek, nazwy klas i strony palety komponentów są tymi, których już używasz, więc szybki start to nie „napisz ten kod", tylko „zainstaluj, przebuduj, a potem ustaw jedną nową właściwość".

Te same nazwy jednostek i klas co w Indy
OpenSSL 1.0, 1.1 i 3.0, z TLS 1.3
Delphi, C++Builder, FreePascal i Lazarus

Fakt, który kształtuje całą resztę

Nie ma prefiksu sgcId. Ani jednej jednostki, ani jednej klasy. Twój istniejący kod kompiluje się bez zmian.

Nazwy jednostek

Zwykłe nazwy Indy. IdTCPClient, IdHTTP, IdSSLOpenSSL i około czterystu kolejnych. Żadna jednostka w bibliotece nie ma nazwy z prefiksem sgc.

Nazwy klas

Również zwykłe nazwy Indy: TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdSSHClient, TIdSFTPClient.

Strony palety

Te same pięć: Indy Clients, Indy Servers, Indy Intercepts, Indy I/O Handlers i Indy Misc. Około 166 komponentów w nich, w miejscach, w których już szukasz.

Co się więc zmienia

Instalator podmienia pakiety ładowane przez IDE i przepisuje ścieżkę wyszukiwania. Twój projekt się nie zmienia. Widoczną różnicą jest nowa właściwość, SSLOptions.APIVersion, oraz poprawki pod spodem.

Wymagania i edycje

sgcIndy nie ma poziomów funkcji. Poziomy licencji zmieniają to, co jest w pudełku, a nie to, co potrafi kod.

Co Wartość
IDE Od Delphi 7 do RAD Studio 13 oraz od C++Builder 2007 do 13. Dla każdego dostarczane są grupy pakietów.
Klauzula uses Bez zmian. Wszystko, co twój projekt już zawiera, nadal działa, ponieważ nazwy jednostek są identyczne jak w standardowym Indy.
Wersja bazowa Indy Biblioteka zgłasza się jako Indy 10.6.3.12. Zmiany sgc są oznaczone komentarzami i warunkowymi definami wewnątrz oryginalnych jednostek, a nie przez ich przemianowanie.
Edycje Brak poziomów funkcji. Flaga edycji jest wstrzykiwana w czasie budowania i ma dokładnie dwóch konsumentów: okno About i ekran powitalny IDE. Nic w bibliotece nie jest przez nią ograniczone. To, co poziomy faktycznie zmieniają, to pakietowanie: kompilacje Community i Basic zawierają skompilowane pliki binarne bez plików .pas i .inc, a kompilacja ze źródłami je zawiera.
FreePascal i Lazarus Obsługiwane. W pakiecie jest pakiet Lazarus wraz ze szkieletami pakietów FreePascal i plikami budowania, a drabina kompilatorów obejmuje FPC od 2.2.2 do 3.3.1. Jedno zastrzeżenie: tryb Delphi jest celowo wyłączony dla Lazarus, więc jednostka, która go zakłada, będzie wymagać dostosowania.
Platformy Windows, Linux, macOS, FreeBSD, iOS i Android mają własne bloki warunkowe. W iOS OpenSSL musi być linkowany statycznie.

Najbardziej przydatna rzecz do wiedzenia przed startem: ponieważ nazwy jednostek kolidują z Indy dostarczanym w RAD Studio, instalator zarządza podmianą za ciebie. Wyrejestrowuje wbudowane pakiety czasu projektowania Indy, rejestruje własne i przepisuje ścieżki wyszukiwania IDE.

Zainstaluj i potwierdź podmianę

Pracę wykonuje instalator. Ważne jest potwierdzenie, że IDE faktycznie ładuje potem sgcIndy.

1. Uruchom instalator

Uruchom pobrany program instalacyjny i zaznacz wersje RAD Studio oraz platformy, których chcesz użyć. Kopiuje bibliotekę, a dla pakietów Community i Basic pomija pliki źródłowe.

2. Pozwól mu podmienić pakiety

Instalator wyrejestrowuje wbudowane pakiety czasu projektowania Indy w IDE i rejestruje w ich miejsce własne. Dzięki temu te same nazwy jednostek wskazują na sgcIndy.

3. Pozwól mu naprawić ścieżkę wyszukiwania

Umieszcza foldery sgcIndy na początku ścieżek wyszukiwania IDE dla każdej platformy i usuwa nieaktualne wpisy z poprzedniej instalacji.

4. Potwierdź na ekranie powitalnym

Uruchom IDE ponownie. Ekran powitalny wymienia sgcIndy, a okno About Indy też to mówi. To sprawdzenie, że podmiana się udała.

5. Przebuduj swój projekt

Otwórz swój istniejący projekt Indy i przebuduj go. Nie ruszaj klauzuli uses. Jeśli kompilował się ze standardowym Indy, skompiluje się i z tym.

Przebuduj, a potem sięgnij po TLS 1.3

Pierwsza karta to to, jak już wygląda twój istniejący projekt. Druga to jedna nowa linijka, którą warto dodać. Trzecia dowodzi, że jesteś na sgcIndy, a nie na standardowym Indy.

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;

Twój istniejący projekt już tak wygląda i o to chodzi. Nie ma sgcIdTCPClient ani TsgcIdSSLIOHandlerSocketOpenSSL, ponieważ żadna jednostka ani klasa w bibliotece nie ma prefiksu sgc. Zainstaluj, przebuduj, gotowe.

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 ma elementy sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 i sslvAPI_3_0. Ani ten typ, ani ta właściwość nie istnieją w standardowym Indy, co czyni ten fragment dowodem w czasie kompilacji, z którą biblioteką budujesz.

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;

Te same komponenty, te same właściwości, ta sama strona palety. PassThrough := False zamienia zwykłe gniazdo w gniazdo TLS, dokładnie tak jak w standardowym Indy. Odczyt to IdTCPClient1.IOHandler.ReadLn, zapis to IOHandler.Write, bez zmian.

Pierwsze dwie karty pochodzą z dostarczanego dema Demos\HttpClient\FHttpClient.pas, z polem kombi zastąpionym literałem. W sumie w pakiecie jest osiemnaście dem, w tym klienci SSH i SFTP, klient FTP, klienci poczty, serwer TCP i para UDP.

Udowodnij, że działa sgcIndy

Ponieważ nazwy jednostek są identyczne, nie poznasz tego po własnym kodzie źródłowym. Oto trzy jednoznaczne sprawdzenia.

Ekran powitalny

Uruchom IDE ponownie po instalacji. Ekran powitalny wymienia sgcIndy. To sprawdzenie, że podmiana pakietów się udała, i najszybsze.

Okno About

Okno dialogowe About Indy zgłasza eSeGeCe zamiast standardowego tekstu i w bezpłatnym pakiecie mówi Community Edition.

Linijka, która nie skompiluje się ze standardowym Indy

SSLOptions.APIVersion := sslvAPI_3_0;. Typ TIdSSLAPIVersion nie istnieje w standardowym Indy, więc jeśli ta linijka się buduje, jesteś na sgcIndy.

Twój własny projekt

Przebuduj go bez ruszania klauzuli uses. Powinien się kompilować dokładnie tak jak wcześniej, ponieważ nazwy jednostek i klas są identyczne.

Co zwykle idzie nie tak za pierwszym razem

Sześć problemów odpowiada za niemal każdą migrację.

Szukałeś jednostek sgcId

Nie ma żadnych. Zero jednostek i zero klas w bibliotece ma prefiks sgc. Jeśli przepiszesz klauzulę uses na sgcIdTCPClient, projekt się nie skompiluje, ponieważ taka jednostka nie istnieje.

IDE nadal ładuje standardowe Indy

Instalator obsługuje podmianę pakietów, więc zwykle oznacza to, że instalacja się nie zakończyła albo wygrywa ręczny wpis w ścieżce wyszukiwania. Sprawdź ekran powitalny, który wymienia sgcIndy, gdy podmiana się udała.

TLS 1.3 się nie negocjuje

Ustaw obie właściwości. SSLOptions.APIVersion wybiera, której generacji API OpenSSL użyć, a SSLOptions.Method wybiera wersję protokołu. TLS 1.3 wymaga API 3.0, więc obie linijki muszą się zmienić razem.

Brakuje bibliotek DLL OpenSSL

Każdy folder dema zawiera potrzebny zestaw obok pliku wykonywalnego. Dla API 3.0 są to libcrypto-3.dll i libssl-3.dll. Dla starszych API nazwy są inne, a skopiowanie złej pary to częsta przyczyna uzgadniania, które zawodzi, zanim się zacznie.

Jednostka zawodzi w Lazarus

Tryb Delphi jest celowo wyłączony dla kompilacji Lazarus w definach kompilatora, z komentarzem, że tam zawodzi. Kod, który opiera się na semantyce trybu Delphi, wymaga dostosowania.

Plików źródłowych nie ma w pakiecie

Instalatory Community i Basic zawierają skompilowane pliki binarne i pomijają pliki .pas i .inc. Jeśli musisz wejść do biblioteki krok po kroku, potrzebujesz pakietu, który zawiera źródła.

Co sgcIndy dodaje ponad Indy

Cztery rzeczy warte poznania, gdy przebudowa jest już skończona.

Nowoczesny OpenSSL i TLS 1.3

Standardowe Indy 10.6.2 poprzedza zmiany API OpenSSL 1.1 i 3.0. SSLOptions.APIVersion wybiera generację, a sslvTLSv1_3 staje się dostępny w API 3.0.

Funkcje sgcIndy

SSH i SFTP

TIdSSHClient i TIdSFTPClient w ogóle nie istnieją w standardowym Indy. Dla obu dostarczane są dema.

Klient SSH i klient SFTP

Wydajne serwery

Handlery IO IOCP i epoll zastępują model wątku na połączenie w systemach Windows i Linux, co zmienia charakter serwera pod prawdziwym obciążeniem.

Jak wypada w porównaniu

Nowoczesne uwierzytelnianie poczty

Obsługa XOAUTH2 oznacza, że klient SMTP lub IMAP może uwierzytelniać się u dostawców, którzy wycofali uwierzytelnianie podstawowe.

XOAUTH2 w sgcIndy

Dokumentacja, dema i materiały

W pobranym pakiecie jest osiemnaście projektów demo, od klienta echo po SSH i SFTP.

Funkcje sgcIndy Co ta kompilacja naprawia i dodaje ponad Indy 10.6.3.
Jak wypada w porównaniu sgcIndy kontra standardowe Indy, funkcja po funkcji.
Pobierz Pakiet Community można używać bezpłatnie.
Zamów Pakiety zawierające pełne źródła.
Przegląd produktu Czym jest sgcIndy i dla kogo jest przeznaczony.
Wszystkie produkty Cennik każdej biblioteki eSeGeCe w jednej tabeli.

Powiązane lektury: OpenSSL 3.0 z Indy, serwer IOCP, klient SSH i najnowsze informacje o wydaniu. Każdy produkt ma własny szybki start, wymieniony na stronie pierwszych kroków.

Pytania o szybki start sgcIndy

Nie, i to jest najważniejsza rzecz w sgcIndy. Każda jednostka zachowuje oryginalną nazwę Indy, IdTCPClient, IdHTTP, IdSSLOpenSSL i resztę, a każda klasa zachowuje oryginalną nazwę, TIdTCPClient, TIdHTTP, TIdSSLIOHandlerSocketOpenSSL. W całej bibliotece nie ma jednostki ani klasy z prefiksem sgc. Zainstaluj, przebuduj, a twój projekt jest na sgcIndy.
Instalator je podmienia. Wyrejestrowuje wbudowane pakiety czasu projektowania Indy z IDE, rejestruje w ich miejsce pakiety sgcIndy i umieszcza foldery sgcIndy na początku ścieżek wyszukiwania. Ponieważ nazwy jednostek są identyczne, to właśnie to musi się zmienić, a nie twój kod.
Trzy sprawdzenia. Ekran powitalny IDE wymienia sgcIndy przy uruchomieniu. Okno About Indy też to mówi. Jest też dowód w czasie kompilacji: SSLOptions.APIVersion istnieje tylko w tej kompilacji, więc linijka przypisująca do niej sslvAPI_3_0 kompiluje się tutaj, a ze standardowym Indy zawodzi.
Dwie właściwości, ustawione razem. SSLOptions.APIVersion := sslvAPI_3_0 wybiera generację API OpenSSL 3.0, a SSLOptions.Method := sslvTLSv1_3 wybiera protokół. Typ TIdSSLAPIVersion ma elementy sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 i sslvAPI_3_0, a TIdSSLVersion zyskał sslvTLSv1_3. Następnie dołącz libcrypto-3.dll i libssl-3.dll obok pliku wykonywalnego, tak jak robią to dema.
Biblioteka zgłasza się jako Indy 10.6.3.12. Zmiany sgc są wprowadzane wewnątrz oryginalnych plików, oznaczone komentarzami i chronione warunkowymi definami, i właśnie dlatego nazwy jednostek mogły pozostać takie same.
Żadna, ponieważ żadna funkcja nie jest ograniczona edycją. Flaga edycji jest wstrzykiwana w czasie budowania i ma w całej bibliotece tylko dwóch konsumentów, obaj kosmetyczni: podpis okna About i tekst ekranu powitalnego IDE. To, co poziomy faktycznie zmieniają, to pakietowanie, ponieważ instalatory Community i Basic zawierają skompilowane pliki binarne i pomijają pliki .pas i .inc, a pakiet ze źródłami je zawiera.
Tak. W pakiecie jest pakiet Lazarus wraz ze szkieletami pakietów FreePascal i plikami budowania, a drabina kompilatorów obejmuje FPC od 2.2.2 do 3.3.1. Jest jedno zastrzeżenie, które warto znać przed startem: tryb Delphi jest celowo wyłączony dla Lazarus w definach kompilatora, z komentarzem, że tam zawodzi, więc jednostka zależna od semantyki trybu Delphi będzie wymagać dostosowania.
Windows, Linux, macOS, FreeBSD, iOS i Android mają własne bloki warunkowe w definach kompilatora. Cele uniksowe używają OpenSSL i dołączonej jednostki zlib. iOS to ta platforma z prawdziwym ograniczeniem: OpenSSL musi tam być linkowany statycznie, a nie ładowany w czasie działania.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy porzucić standardowe Indy?

Pakiet Community jest bezpłatny. Zainstaluj go, przebuduj i sprawdź ekran powitalny.