TsgcQUICServer é um servidor QUIC de baixo nível que escuta conexões QUIC via UDP e troca dados por streams QUIC.
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;
| Name | Descrição |
|---|---|
| Active | Indica se o servidor QUIC está ativo e escutando conexões de entrada. |
| Port | Porta UDP à qual o servidor se vincula e escuta conexões QUIC de entrada. |
| QUICOptions | Configuração do servidor, incluindo o certificado TLS, a chave privada e o número máximo de conexões. |
| Name | Descrição |
|---|---|
| Start | Carrega o OpenSSL, cria o QUIC listener e começa a aceitar conexões. |
| Stop | Para de escutar, fecha todas as conexões ativas e libera o listener QUIC. |
| WriteData | Envia bytes de aplicação a um par conectado pelo stream QUIC padrão. |
| Name | Descrição |
|---|---|
| OnQUICConnect | Disparado 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. |
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;
| Requisito | Detalhes |
|---|---|
| Edição | Edição Enterprise. |
| Define de compilação | SGC_QUIC deve estar habilitado em sgcVer.inc. |
| Unidade | sgcQUIC_Server |
| OpenSSL | OpenSSL 3.5 ou posterior com IOHandler = iohOpenSSL, que fornece a API do listener QUIC. Com iohNativeTLS o OpenSSL não é necessário. |