Indy

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 edition에는 이러한 기능을 지원하는 사용자 지정 Indy 라이브러리가 포함되어 있습니다. IDE에서 표준 Indy 라이브러리를 제거하지 않기 위해, 필요한 Indy 파일은 접두사 "sgc"를 추가하여 이름이 변경됩니다. 예를 들어 "IdGlobal" 유닛은 "sgcIdGlobal"로 이름이 변경됩니다. 이렇게 하면 두 버전이 문제없이 공존할 수 있습니다.

 

모든 sgcWebSockets 에디션에서 사용되는 Indy 버전을 아래에서 확인하십시오:

 

sgcWebSockets Edition Indy 버전
STANDARD Standard
PROFESSIONAL Standard
ENTERPRISE Custom

 

sgcWebSockets 패키지가 분할되기 전의 오래된 라이선스인 "Registered" 라이선스를 가진 고객은 다음 sgcWebSockets 패키지 버전을 찾을 수 있습니다:

 

sgcWebSockets Edition Indy 버전
sgcWebSockets Standard
sgcWebSockets min Standard
sgcWebSockets min Indy* Custom

 

*sgcWebSockets_min_indy는 sgcWebSockets Enterprise 에디션과 동일합니다.

 

사용자 정의 Indy 버전의 사용은 source 폴더에 있는 "sgcVer.inc" 파일에 정의되어 있습니다. 이 indy 버전의 사용을 활성화하거나 비활성화하는 "SGC_CUSTOM_INDY"라는 컴파일러 define이 있습니다. Enterprise Edition을 사용하고 사용자 정의 indy 사용을 비활성화하려면 다음 컴파일러 define을 삭제하기만 하면 됩니다:

 

{$DEFINE SGC_CUSTOM_INDY}

 

물론, SGC_CUSTOM_INDY를 활성화했지만 소스 폴더에 필요한 사용자 지정 indy 버전 유닛이 없는 경우, 이 컴파일러 define은 작동하지 않습니다.

 

sgcIndy 패키지

사용자 지정 Indy 버전의 사용은 sgcWebSockets 구성 요소로 제한되지 않습니다. 일부 고객은 예를 들어 SMTP와 같은 표준 Indy 구성 요소에서 이 사용자 지정 Indy 버전의 새 기능을 사용하기를 원합니다. 그래서 이메일을 보낼 때 TLS 1.3을 사용하거나 FTP 서버를 사용할 수 있습니다. eSeGeCe ALL-ACCESS 에디션은 이러한 모든 기능이 있는 추가 전체 Indy 패키지를 제공합니다. "sgcIndy package"라고 하는 이 패키지에는 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;

 

 

단일 sgcIndy 패키지를 사용하는 방법

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...)이 활성화됩니다.