Domyślnie Indy definiuje najczęstsze funkcje OpenSSL potrzebne do szyfrowania komunikacji, jednak czasami wymagane są dodatkowe funkcje do szyfrowania, podpisywania itp. Można użyć metody IdOpenSSLSetLoadFuncsCallback, aby przypisać callback do dynamicznego ładowania dodatkowych funkcji OpenSSL.
TIdLoadSSLFuncsCallback = procedure(hIdSSL: TIdLibHandle; hIdCrypto: TIdLibHandle; const FailedLoadList: TStringList);
Jest to typ procedury służący jako wywołanie zwrotne przyjmujące trzy parametry:
Celem tego wywołania zwrotnego jest umożliwienie użytkownikowi wykonywania niestandardowego przetwarzania podczas ładowania funkcji OpenSSL, takiego jak rejestrowanie nieudanych prób załadowania funkcji lub obsługa błędów.
TIdUnLoadSSLFuncsCallback = procedure();
Służy jako wywołanie zwrotne do zwalniania funkcji SSL. Jest przydatny do wykonywania czynności porządkowych podczas zwalniania bibliotek OpenSSL.
Poniżej znajduje się prosty przykład ładowania funkcji EVP_PKEY_CTX_set_rsa_padding przy użyciu wywołań zwrotnych.
var
EVP_PKEY_CTX_set_rsa_padding : function(ctx: PEVP_PKEY_CTX; pad: Integer): Integer; cdecl;
procedure DoOpenSSLLoadFuncsCallback(hIdSSL: TIdLibHandle; hIdCrypto:
TIdLibHandle; const FailedLoadList: TStringList);
begin
@EVP_PKEY_CTX_set_rsa_padding := LoadLibFunction(hIdCrypto, 'EVP_PKEY_CTX_set_rsa_padding');
end;
procedure DoOpenSSLUnLoadFuncsCallback;
begin
@EVP_PKEY_CTX_set_rsa_padding := nil;
end;
IdOpenSSLSetLoadFuncsCallback(DoOpenSSLLoadFuncsCallback);
IdOpenSSLSetUnLoadFuncsCallback(DoOpenSSLUnLoadFuncsCallback);