TsgcQUICServer

TsgcQUICServer è un server QUIC di basso livello che è in ascolto per connessioni QUIC su UDP e scambia dati su stream QUIC.

Introduzione

TsgcQUICServer implementa un server QUIC di basso livello (RFC 9000) che resta in ascolto per connessioni QUIC su UDP e scambia dati applicativi su stream QUIC. È costruito sull'API listener QUIC di OpenSSL 3.5+, quindi QUIC funziona sempre su TLS 1.3 e sono necessari un certificato del server e una chiave privata. Seguire i passaggi seguenti per configurare questo componente:

Il server QUIC funziona per impostazione predefinita sul motore QUIC OpenSSL 3.5+ integrato. Chiama OSSL_QUIC_server_method e SSL_new_listener quando la libreria OpenSSL caricata li esporta. In caso contrario ripiega sul motore QUIC sgc, e con QUICOptions.SSLOptions.IOHandler = iohNativeTLS utilizza sempre il motore sgc con l'handshake TLS 1.3 sul motore TLS nativo. La proprietà QUICMode, di sola lettura, riporta il motore selezionato all'avvio. Vedere QUIC per il confronto tra i motori.

1. Creare una nuova istanza del componente TsgcQUICServer.

2. Impostare la Port di ascolto e configurare il certificato del server e la chiave privata tramite QUICOptions.SSLOptions.

3. Gestire gli eventi OnQUICConnect e OnQUICData e chiamare Start per iniziare l'ascolto. esempio:


    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;

Riferimento

Proprietà principali

NomeDescrizione
ActiveIndica se il server QUIC è attivo e in ascolto per le connessioni in entrata.
PortPorta UDP a cui il server si associa e su cui resta in ascolto per le connessioni QUIC in entrata.
QUICOptionsConfigurazione del server, incluso il certificato TLS, la chiave privata e il numero massimo di connessioni.

Metodi principali

NomeDescrizione
StartCarica OpenSSL, crea il listener QUIC e inizia ad accettare connessioni.
StopSmette di ascoltare, chiude ogni connessione attiva e rilascia il listener QUIC.
WriteDataInvia byte applicativi a un peer connesso sullo stream QUIC predefinito.

Eventi principali

NomeDescrizione
OnQUICConnectSi attiva quando una nuova connessione QUIC è stata accettata e il suo primo stream è pronto.
OnQUICDataSi attiva quando vengono ricevuti dati applicativi da un peer sul suo stream QUIC predefinito.
OnQUICDisconnectSi attiva quando una connessione QUIC è stata chiusa.

Esempio completo


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;

Requisiti

RequisitoDettaglio
EdizioneEdizione Enterprise.
Define del compilatoreSGC_QUIC deve essere abilitato in sgcVer.inc.
UnitàsgcQUIC_Server
OpenSSLOpenSSL 3.5 o successivo con IOHandler = iohOpenSSL. Il motore integrato usa l'API del listener QUIC nativo (OSSL_QUIC_server_method, SSL_new_listener) e il motore sgc usa l'API QUIC TLS di OpenSSL 3.5, nessuna delle due presente nelle versioni precedenti. Con iohNativeTLS, OpenSSL non è necessario.