TsgcQUICServer

TsgcQUICServer é um servidor QUIC de baixo nível que escuta conexões QUIC via UDP e troca dados por streams QUIC.

Introdução

TsgcQUICServer implementa um servidor QUIC de baixo nível (RFC 9000) que escuta conexões QUIC sobre UDP e troca dados da aplicação por streams QUIC. Por padrão roda sobre o mecanismo integrado do OpenSSL 3.5+ (a API de listener QUIC); quando esse listener não está disponível, recorre ao mecanismo QUIC sgc, e com QUICOptions.SSLOptions.IOHandler = iohNativeTLS sempre usa o mecanismo sgc com o handshake TLS 1.3 sobre o mecanismo TLS nativo. A propriedade somente leitura QUICMode informa o mecanismo selecionado ao iniciar, veja QUIC para a comparação. O QUIC sempre utiliza TLS 1.3 e são necessários um certificado de servidor e uma chave privada. Siga os passos abaixo para configurar este componente:

1. Crie uma nova instância do componente TsgcQUICServer.

2. Defina a Port de escuta e configure o certificado do servidor e a chave privada por meio de QUICOptions.SSLOptions.

3. Trate os eventos OnQUICConnect e OnQUICData e chame Start para começar a escutar. exemplo:


    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;

Referência

Principais Propriedades

NameDescrição
ActiveIndica se o servidor QUIC está ativo e escutando conexões de entrada.
PortPorta UDP à qual o servidor se vincula e escuta conexões QUIC de entrada.
QUICOptionsConfiguração do servidor, incluindo o certificado TLS, a chave privada e o número máximo de conexões.

Métodos Principais

NameDescrição
StartCarrega o OpenSSL, cria o QUIC listener e começa a aceitar conexões.
StopPara de escutar, fecha todas as conexões ativas e libera o listener QUIC.
WriteDataEnvia bytes de aplicação a um par conectado pelo stream QUIC padrão.

Eventos Principais

NameDescrição
OnQUICConnectDisparado quando uma nova conexão QUIC foi aceita e seu primeiro stream está pronto.
OnQUICDataÉ disparado quando dados da aplicação são recebidos de um par pelo seu stream QUIC padrão.
OnQUICDisconnectÉ disparado quando uma conexão QUIC é encerrada.

Exemplo 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;

Requisitos

RequisitoDetalhes
EdiçãoEdição Enterprise.
Define de compilaçãoSGC_QUIC deve estar habilitado em sgcVer.inc.
UnidadesgcQUIC_Server
OpenSSLOpenSSL 3.5 ou posterior com IOHandler = iohOpenSSL, que fornece a API do listener QUIC. Com iohNativeTLS o OpenSSL não é necessário.