TsgcQUICServer

TsgcQUICServer to niskopoziomowy serwer QUIC nasłuchujący połączeń QUIC przez UDP i wymieniający dane przez strumienie QUIC.

Wprowadzenie

TsgcQUICServer implementuje niskopoziomowy serwer QUIC (RFC 9000), który nasłuchuje połączeń QUIC przez UDP i wymienia dane aplikacji przez strumienie QUIC. Domyślnie działa na wbudowanym interfejsie API słuchacza QUIC OpenSSL 3.5+, a gdy ten interfejs jest niedostępny, korzysta z własnego silnika QUIC sgc; z QUICOptions.SSLOptions.IOHandler = iohNativeTLS zawsze używa silnika sgc z uzgadnianiem TLS 1.3 na natywnym silniku TLS. Właściwość tylko do odczytu QUICMode wskazuje silnik wybrany przy starcie. QUIC zawsze działa przez TLS 1.3, a certyfikat serwera i klucz prywatny są wymagane. Zobacz QUIC, aby poznać porównanie silników. Wykonaj poniższe kroki, aby skonfigurować ten komponent:

1. Utwórz nową instancję komponentu TsgcQUICServer.

2. Ustaw nasłuchujący Port i skonfiguruj certyfikat serwera oraz klucz prywatny przez QUICOptions.SSLOptions.

3. Obsłuż zdarzenia OnQUICConnect i OnQUICData i wywołaj Start, aby rozpocząć nasłuchiwanie. przykład:


    oServer := TsgcQUICServer.Create(nil);
    oServer.Port := 4433;
    oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
    oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
    oServer.OnQUICConnect := OnQUICConnectEvent;
    oServer.OnQUICData := OnQUICDataEvent;
    oServer.Start;

    procedure OnQUICDataEvent(Sender: TObject; const aConnection:
        TsgcQUICServerConnection; const aData: TBytes);
    begin
      // echo the received bytes back to the peer
      oServer.WriteData(aConnection, aData);
    end;

Dokumentacja

Kluczowe właściwości

NazwaOpis
ActiveWskazuje, czy serwer QUIC jest aktywny i nasłuchuje przychodzących połączeń.
PortPort UDP, z którym serwer się wiąże i na którym nasłuchuje przychodzących połączeń QUIC.
QUICOptionsKonfiguracja serwera, w tym certyfikat TLS i klucz prywatny oraz maksymalna liczba połączeń.

Kluczowe metody

NazwaOpis
StartWczytuje OpenSSL, tworzy nasłuch QUIC i rozpoczyna akceptowanie połączeń.
StopZatrzymuje nasłuchiwanie, zamyka każde aktywne połączenie i zwalnia nasłuchiwacz QUIC.
WriteDataWysyła bajty aplikacji do połączonego partnera przez jego domyślny strumień QUIC.

Kluczowe zdarzenia

NazwaOpis
OnQUICConnectWywoływane po zaakceptowaniu nowego połączenia QUIC i gotowości jego pierwszego strumienia.
OnQUICDataUruchamiane po odebraniu danych aplikacji od partnera przez jego domyślny strumień QUIC.
OnQUICDisconnectUruchamiane, gdy połączenie QUIC zostało zamknięte.

Kompletny przykład


oServer := TsgcQUICServer.Create(nil);
oServer.Port := 4433;
oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
oServer.QUICOptions.SSLOptions.KeyFile := 'key.pem';
oServer.OnQUICConnect := OnQUICConnectEvent;
oServer.OnQUICData := OnQUICDataEvent;
oServer.OnQUICDisconnect := OnQUICDisconnectEvent;
oServer.OnQUICException := OnQUICExceptionEvent;
oServer.Start;

procedure OnQUICConnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection);
begin
  Log('Connected: ' + aConnection.PeerIP);
end;

procedure OnQUICDataEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aData: TBytes);
begin
  // echo the received bytes back to the peer
  oServer.WriteData(aConnection, aData);
end;

procedure OnQUICDisconnectEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; aCode: Int64; const aReason: string);
begin
  Log('Disconnected: ' + aReason);
end;

procedure OnQUICExceptionEvent(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception);
begin
  Log('Error: ' + aException.Message);
end;

Wymagania

WymaganieSzczegół
EdycjaEdycja Enterprise.
Dyrektywa kompilatoraSGC_QUIC musi być włączone w sgcVer.inc.
JednostkasgcQUIC_Server
OpenSSLOpenSSL 3.5 lub nowszy z IOHandler = iohOpenSSL. Silnik wbudowany korzysta z natywnego API nasłuchiwacza QUIC (OSSL_QUIC_server_method, SSL_new_listener), a silnik sgc z API TLS QUIC OpenSSL 3.5, z których żadne nie istnieje we wcześniejszych wersjach. Z iohNativeTLS OpenSSL nie jest potrzebny.