Skip to content

feat(httpsys): add Lazarus/FPC compatibility on Windows - #473

Merged
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:feature/httpsys-provider
Jun 24, 2026
Merged

feat(httpsys): add Lazarus/FPC compatibility on Windows#473
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:feature/httpsys-provider

Conversation

@regyssilveira

Copy link
Copy Markdown
Contributor

Resumo

Este PR adiciona suporte para compilação e execução do provider nativo HTTP.sys do Windows (Horse.Provider.HttpSys.pas) utilizando o Lazarus/FPC na plataforma Windows.

Alterações Propostas

  1. Uses e Diretivas Condicionais: Adaptado Horse.Provider.HttpSys.pas e Horse.pas para importar condicionalmente httpprotocol (que fornece HTTPDecode) e coleções genéricas sem os namespaces do Delphi quando sob FPC.
  2. Decodificação de URL: Substituído TNetEncoding.URL.Decode por HTTPDecode quando FPC estiver definido.
  3. Controle de Concorrência (TThread em vez de TTask): Como o FPC não possui System.Threading e suporte completo a métodos anônimos da mesma forma que o Delphi, foi introduzida a classe THttpSysRequestThread (herdeira de TThread) para processar requisições de forma concorrente no FPC, mantendo o pool do TTask.Run intacto no Delphi.
  4. Adaptação do THttpSysWebResponse: Envolvido os overrides de métodos do TWebResponse em {$IFNDEF FPC}, uma vez que no FPC a classe base herda de TResponse (da unit fpHTTP do Lazarus) e não exige esses overrides.
  5. Inicialização Segura de TDictionary: Corrigido um crash de Access Violation no FPC durante o class constructor do provider ao usar TIStringComparer.Ordinal (causado pela ordem de inicialização das units no FPC). Ajustamos para usar o construtor padrão TDictionary.Create sob FPC.
  6. Demo no Lazarus: Adicionado um projeto de exemplo para Lazarus em samples/lazarus/httpsys (escutando na porta 9095 para evitar conflitos).
  7. Gitignore: Adicionado *.ppu à lista de arquivos ignorados do Lazarus.

Verificação e Testes

  • Compilação do core e da demo do Lazarus efetuada com sucesso absoluto usando FPC 3.2.2.
  • Validação de integridade HTTP (incluindo o header Server: Microsoft-HTTPAPI/2.0) efetuada com sucesso utilizando a demo do Lazarus.
  • Compilação do core e da demo do Delphi efetuada com sucesso absoluto no Delphi 11 (dcc32).

@viniciussanchez
viniciussanchez merged commit 0bc3bf1 into HashLoad:master Jun 24, 2026
@regyssilveira
regyssilveira deleted the feature/httpsys-provider branch June 24, 2026 11:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants