LGPL 2.1 und Kommerzielle Lizenz.
  • PureBasic 80.9%
  • Shell 14.2%
  • Python 2.9%
  • Makefile 1.9%
  • JavaScript 0.1%
Find a file
René Linder c639609496 NETLIB-140: WS-H2-Cross-Thread-Crash-Fix — Pins net_lib 6fada22 / http_lib 537c488 + Regressionstest
Behebt den realen purepower-Prod-Crash (WS-System-Channel-Broadcast aus App-Thread →
H2_Stream::SendData → NET_Core-Owner-Thread-Guard → SIGABRT). WS-H2-Server-Push wird jetzt
aus Nicht-Worker-Threads an den owning Data-Worker marshallt. WS_TestSuite Section 20
(_TestWSCrossThreadSendMarshals) als Regression. make test 10/10.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 07:31:04 +02:00
bench_results HTTPLIB-4/5/6/7: Hot-Path Cascade abgeschlossen + Bench-CSV + Submodule-Bumps 2026-05-18 07:26:21 +02:00
http_doc doc: Auflösung Echtpfad — sauberes Nicht-VPN-LAN (Test-VM) bestätigt H3=H2-Parität, VPN-MTU war der Confound 2026-06-06 09:39:27 +02:00
http_lib@537c488f9a NETLIB-140: WS-H2-Cross-Thread-Crash-Fix — Pins net_lib 6fada22 / http_lib 537c488 + Regressionstest 2026-06-08 07:31:04 +02:00
http_tests NETLIB-140: WS-H2-Cross-Thread-Crash-Fix — Pins net_lib 6fada22 / http_lib 537c488 + Regressionstest 2026-06-08 07:31:04 +02:00
lhs_lib@f19c0a6e64 NETLIB-122 Bug #2 (lhs_lib f19c0a6 + http_lib 2150bd3): H3-Stall gefixt 2026-06-05 01:35:51 +02:00
lhttpd lhttpd: Self-Deploy-Installer (purepower-Stil, Apache-Layout) 2026-06-04 22:16:22 +02:00
net_doc chore: net_lib/net_doc Update aus NET_Framework 2026-03-31 15:06:46 +02:00
net_lib@6fada226b6 NETLIB-140: WS-H2-Cross-Thread-Crash-Fix — Pins net_lib 6fada22 / http_lib 537c488 + Regressionstest 2026-06-08 07:31:04 +02:00
.gitignore chore: .gitignore — purebasic.c (C-Backend-Artefakt) + kimi_findings.md (internes Review) 2026-05-30 09:41:01 +02:00
.gitmodules net_lib v5.6.0 Bump + lhs_lib als Sibling-Submodul 2026-05-14 19:44:27 +02:00
CLAUDE.md Version-Bump V3.9.1 → V3.9.2: Kimi-Sprint (HTTPLIB-15..25, 11 Tickets) 2026-05-20 23:21:31 +02:00
LICENSE Initial commit 2026-03-01 11:26:25 +01:00
Makefile HTTPLIB-WSRSS (GC_MEM P5 Achse 3): WS-Shrink-Bump + Footprint-Gate (ws-rss-test.sh) 2026-06-03 16:24:12 +02:00
README.md Version-Bump V3.9.1 → V3.9.2: Kimi-Sprint (HTTPLIB-15..25, 11 Tickets) 2026-05-20 23:21:31 +02:00

PureBasic HTTP Stack V3.9.2 — Beta für V4.0.0

Triple-Protocol HTTP Server & Client + WebSocket — HTTP/1.1 · HTTP/2 · HTTP/3

License: LGPL v2.1 Commercial License PureBasic Platform NET Stack Tests V4.0 Beta

Beta-Hinweis: Dieser Release ist die Beta-Vorstufe für V4.0.0 (Public-Struct-Cascade auf lhs_arena::HashMap). Der V4.0-Cascade ist seit 2026-05-14 produktiv im Code; das v4.0.0-Tag wird gesetzt, sobald sich der purepower-framework-Konsument auf dem aktuellen Stand stabilisiert hat. Bis dahin trägt der Stack die Versionsnummer V3.9.2 (Sicherheits- und Thread-Safety-Fixes aus dem Kimi-Code-Review 2026-05-20).


Übersicht

Ein vollständiger, hochperformanter HTTP-Stack in PureBasic mit nativem Support für alle drei HTTP-Generationen:

Protokoll Standard Features
HTTP/1.1 RFC 72307235 Zero-Copy State-Machine Parser, Chunked Transfer
HTTP/2 RFC 9113 Binary Framing, HPACK, Stream Multiplexing, Push
HTTP/3 RFC 9114 QUIC Transport, QPACK, 0-RTT, Connection Migration

13 HTTP-Module · ~26'000 Codezeilen · 1510/1510 Tests bestanden (10 Suiten)

Basierend auf dem NET Stack v5.6.1 mit nativem QUIC, GSO/GRO, ECN, Pacing und eventfd-Wake. Per-Connection-Arena via lhs_lib (lhs_arena::HashMap, Bytes-API, Bump-Allokationen).


Features

  • Triple-Protocol Transparency — Ein einziges API für H1, H2 und H3; Protokollwahl erfolgt automatisch (ALPN)
  • QUIC / HTTP/3 — Native OpenSSL 3.5 QUIC Integration, QPACK Header-Kompression, H3 Framing
  • HTTP/2 — Full Binary Framing, HPACK, Server Push, h2c Cleartext Support
  • TLS / HTTPS — OpenSSL-basiert mit SNI Multi-Domain und ALPN Negotiation
  • ACME / Let's Encrypt — Automatische Zertifikatsbeschaffung und -erneuerung
  • Routing — Named Parameters (:id), Wildcards (*path), Spezifitäts-Ranking, Virtual Hosts
  • Interne PKI — Self-Signed Zertifikate, Interne Root CA, Auto-TLS (V3.4)
  • Static File Serving — Range Requests (HTTP 206), Directory Index, Path-Traversal-Schutz
  • HTTP Client — Vollständiger Client mit H1/H2/H3 Support, Downloads, Protokoll-Fixierung
  • QUIC Performance — GSO/GRO Batch-Sends, ECN Congestion Notification, Pacing (NET V5.3)

Neu in V3.9.2 (Beta für V4.0.0)

Kimi-Code-Review 2026-05-20 — 11 Tickets in einem Sprint behoben:

  • HTTPLIB-15 _StoreHeader-Parse-Position bei Content-Length-Fehlern: undefiniertes pos*conn\hdr_value_start.
  • HTTPLIB-16 H3 Reentrant-Deadlock + Lock-Over-Callback: _h3_ctx_mutex wird nicht mehr über die H3_Stream-Callback-Kette gehalten.
  • HTTPLIB-17 _extracted_params global → Per-Request Arena-Map: behebt H2/H3-Multiplexing-Race bei Route-Params.
  • HTTPLIB-18 H3 Body ohne max_body_size-Limit (DoS-Vektor): Content-Length-Pre-Check + per-DATA-Frame-Check, sauberes 413 + Stream-Cleanup.
  • HTTPLIB-19 Body-Timeout sendet jetzt 408: war zuvor schlicht Break — Slow-POST-Schutz war wirkungslos.
  • HTTPLIB-20 Range-Support über H2/H3 + Streaming-Pfad: ServeFile akzeptiert *req, liest Range aus der Arena-Header-Map, streamt ab 1 MB in 64 KB-Chunks.
  • HTTPLIB-21 Static- und WS-Routes Thread-Safe: eigene Mutexe um _static_routes und _ws_routes.
  • HTTPLIB-22 H3 _H3_FindConnId O(1) via Reverse-Map; Pending-Arena von 8 KB → 2 KB Initial.
  • HTTPLIB-23 Dead-Code raus (_HTTP_RedirectToHTTPS), _IsHdrName LCase vor Schleife, _StatusText/_HTTPDateHTTP_Protokoll-Wrapper.
  • HTTPLIB-24 Alt-Svc-Doppelung im _BuildAndSend entfernt; _MatchSegments byte-Compare statt LCase-pro-Segment.
  • HTTPLIB-25 Neue Test-Suite Concurrent_Stress_TestSuite (27 Tests) als Regression-Suite.

Neu in V3.9.1 (Beta für V4.0.0)

V4.0 Public-Struct-CascadeHTTP_Request.headers, HTTP_Request.query_params und HTTP_Response.headers sind ab V4.0 keine Map x.s() mehr, sondern *lhs_arena::HashMap. Alle 17 betroffenen Procedure-Signaturen in HTTP_Protokoll, HPACK_Codec, QPACK_Codec, H2_Stream, H3_Stream und die _H3_RequestHandler-Callback wurden mitkaskadiert. Handler-Code nutzt HTTP_Server::PrepareResponse(@res, connection_id) zur Arena-Vorbereitung — Beispiele im Demo-Doc.

Per-Connection-Arena — Bei Accept eine lhs_arena::Create(65536), Reset per Request, Destroy beim Close. Keine malloc/free-Paare im Request-Pfad. Allocations werden gemeinsam disponiert; Multi-Threaded ohne PB-Heap-Locks.

Header-Parse Hot-Path (HTTPLIB-4) — Header-Bytes gehen direkt aus dem Socket-Buffer über lhs_arena::MapSetBytes in die Arena, ohne PeekS/LCase. Case-Insensitive Lookup via FNV-1a + branchless ASCII-Lowercase. Multi-Value-Header (Cookie, Forwarded) werden im Arena-Bump zusammengesetzt.

Response-Build via Arena-Builder (HTTPLIB-5) — Neuer _RBuilder baut Status-Line, Auto-Headers, User-Headers und Body direkt in die Arena. Kein PB-String-Concat, kein PokeS-Roundtrip; ein einzelnes SendAll.

WebSocket über H2/H3 — Extended CONNECT (RFC 8441 + RFC 9220) zusätzlich zum klassischen H1-Upgrade. Gleicher RegisterWebSocket() für alle drei Protokollversionen; Server announcet SETTINGS_ENABLE_CONNECT_PROTOCOL=1 automatisch.

HPACK doppelter UTF8-Roundtrip raus (HTTPLIB-2) — _HuffmanEncodedLengthBytes + _HuffmanEncodeBytes arbeiten jetzt direkt auf einer einmaligen UTF8-Bytefolge.

ACME auf lhs_json (HTTPLIB-10/11) — ACME_Protokoll.pbi nutzt für alle Parse/Compose-Pfade lhs_json statt PB-ParseJSON/ComposeJSON. Crypto-Builds (JWK, JWS) sind byte-stabil.


XIncludeFile "http_lib/HTTP_Server.pbi"

Procedure Hello(connection_id.i, *req.HTTP_Protokoll::HTTP_Request)
  HTTP_Server::RespondText(connection_id, 200, "Hello World!")
EndProcedure

HTTP_Server::Init()
HTTP_Server::RegisterRoute("GET", "/", @Hello())
HTTP_Server::Start("0.0.0.0", 8080)

Testen: curl http://localhost:8080/

Für HTTPS + HTTP/2:

HTTP_Server::SetCertificate("cert.pem", "key.pem")
HTTP_Server::StartTLS("0.0.0.0", 443)
; ALPN "h2,http/1.1" wird automatisch konfiguriert.
; Handler-Code ist für HTTP/1.1 und HTTP/2 identisch!

Noch schneller (V3.4 Auto-TLS — kein Zertifikat nötig):

XIncludeFile "http_lib/HTTP_PKI.pbi"     ; ← VOR HTTP_Server!
XIncludeFile "http_lib/HTTP_Server.pbi"

HTTP_Server::Init()
HTTP_Server::RegisterRoute("GET", "/", @Hello())
HTTP_Server::StartTLS("0.0.0.0", 443)    ; → Self-Signed wird automatisch generiert

Für ausführliche Beispiele (inkl. Routing, PKI, VHosts) siehe die Demos & Benutzung.


Modulübersicht

HTTP-Module (http_lib/) — V4.0-Cascade aktiv

Modul Beschreibung
HTTP_Server.pbi Triple-Protocol Webserver (H1/H2/H3), Per-Connection-Arena, _RBuilder, Routing, VHosts, TLS, Auto-TLS, WS-Upgrade
HTTP_Client.pbi Triple-Protocol Client (H1/H2/H3), Downloads, Pooling, Protokoll-Fixierung
HTTP_PKI.pbi Interne PKI: Self-Signed, Root CA, Auto-TLS
HTTP_Protokoll.pbi Protocol Core: Methods, Status, URL, MIME, Pseudo-Headers + HGet/HSet/HExists/HCount/HInit/HClear Arena-Header-Helper
ACME_Protokoll.pbi Let's Encrypt ACME v2 (via lhs_json für JWK/JWS, byte-stabil), HTTP-01, Auto-Renew
H2_Stream.pbi HTTP/2 Connection/Stream Manager, Flow-Control, Push, Extended CONNECT für WS
H2_Frame.pbi HTTP/2 Frame Parser & Builder (RFC 9113)
HPACK_Codec.pbi HTTP/2 Header-Kompression (RFC 7541) — Single-UTF8-Hot-Path
H3_Stream.pbi HTTP/3 Session/Stream Manager (RFC 9114), Extended CONNECT für WS
H3_Frame.pbi HTTP/3 Frame Parser & Builder
QPACK_Codec.pbi HTTP/3 Header-Kompression (RFC 9204)
WS_Frame.pbi WebSocket Frame-Layer (RFC 6455) — Masking, Fragments, Control-Frames
WS_Connection.pbi WebSocket Connection-Manager — H1/H2/H3 transparent via ProtoTransportSend

Submodule

  • net_lib v5.6.1 — NET Stack: epoll, sockets, TLS_OpenSSL, native QUIC, eventfd-Wake
  • lhs_lib master — lhs_arena (HashMap, FlatList, Bytes-API), lhs_json, lhs_log, ldl

Dokumentation

API-Referenz

Dokument Beschreibung
API-Referenz Übersicht und Einstiegspunkt
API-Standard HTTP_Server + HTTP_Client + ACME — alles was ein Anwender braucht
API-Experten Protokoll-Internals: H2/H3/HPACK/QPACK für Framework-Entwickler

Demos & Beispiele

Dokument Beschreibung
Demos & Benutzung Übersicht und Einstiegspunkt
Demo-Standard Quick Start, Routing, Static Files, VHosts, Client, ACME
Demo-Experten Triple-Protocol, SSE, Server Push, h2c, Protokoll-Fixierung

Tests

1510/1510 Tests bestanden (V3.9.2, Mai 2026):

Test Suite Tests Beschreibung
H1_HTTP_Protokoll_TestSuite 328 HTTP/1.1 Core, URL Encoding, MIME, Headers, H2/H3 Helpers
H2_TestSuite 501 HPACK, H2_Frame, Integration, RFC 9113 Compliance, Stress
H3_Frame_TestSuite 142 HTTP/3 Frame Encoding/Decoding (RFC 9114)
H3_Stream_TestSuite 82 HTTP/3 Session/Stream Manager
QPACK_TestSuite 114 HTTP/3 Header-Kompression (RFC 9204)
V34_Routing_PKI_TestSuite 87 Named Params, Wildcards, Spezifität, SNI, PKI
Upload_TestSuite 55 Binary Upload (0 B 10 MB), Multipart, CRC32, Echo-Roundtrip, 413
WS_TestSuite 72 WebSocket Frame + Connection, H1/H2/H3 Transport-Abstraktion
Arena_Lifecycle_TestSuite 102 Per-Connection-Arena + HashMap/FlatList API Compliance
Concurrent_Stress_TestSuite 27 Regression-Tests für Kimi-Sprint (HTTPLIB-15..25)

Komplette Suite + Build:

make              # Alle 10 Suiten kompilieren
make test         # Build + Run (1510 Tests)
make test-h1      # Einzelne Suite
make test-ws      # WebSocket-Suite
make clean        # Build-Artefakte loeschen

Hinweis: Der gesamte HTTP Stack benötigt das C Backend (pbcompilerc bzw. --backend c). Grund: atomic-ops.pbi verwendet C-Inline Atomics — darauf bauen Lock-Free Queue, NET_Core und der gesamte Stack auf.


Voraussetzungen

  • PureBasic 6.x (Linux x64, C Backendpbcompilerc / --backend c)
  • OpenSSL 3.5+ (für TLS und QUIC)
  • Linux mit epoll-Support (Kernel 2.6+, Kernel 4.18+ für QUIC GSO)

Lizenz

Dieses Projekt ist dual-lizenziert:

LGPL 2.1 (Open Source)

Für Open-Source-Projekte steht die Bibliothek unter der GNU Lesser General Public License v2.1 zur Verfügung. Du kannst die Bibliothek frei in eigenen Projekten verwenden, solange Änderungen an der Bibliothek selbst unter LGPL veröffentlicht werden.

Kommerzielle Lizenz

Für den Einsatz in proprietären oder Closed-Source-Projekten ohne LGPL-Pflichten ist eine kommerzielle Lizenz verfügbar.

📧 Kontakt: info@lihaso.ch


Entwicklung & Vibe Coding 🤖

Dieses Projekt wurde im Vibe-Coding-Stil entwickelt — in enger Zusammenarbeit zwischen Mensch und KI. Folgende KI-Assistenten waren am Entwicklungsprozess beteiligt:

KI-Assistent Anbieter
Claude Anthropic
Grok xAI
ChatGPT OpenAI
Mistral Mistral AI
DeepSeek DeepSeek
Qwen 2.5 Coder Alibaba (lokal via Ollama)

Vibe Coding = Der Mensch steuert Architektur, Design und Qualitätsanspruch. Die KI unterstützt bei Implementierung, Refactoring, Tests und Dokumentation. Das Ergebnis: Schnellere Iteration bei gleichbleibend hoher Code-Qualität.


Kontakt

Linder Hard- und Software René Linder

📧 info@lihaso.ch 🌐 lihaso.ch


Projektstruktur

.
├── README.md                          # Diese Datei
├── LICENSE                            # LGPL 2.1 Lizenztext
├── .gitignore
│
├── http_lib/                          # HTTP-Module (11 .pbi)
│   ├── HTTP_Server.pbi
│   ├── HTTP_Client.pbi
│   ├── HTTP_PKI.pbi                   # V3.4: Interne PKI, Self-Signed, Root CA
│   ├── HTTP_Protokoll.pbi
│   ├── ACME_Protokoll.pbi
│   ├── H2_Stream.pbi / H2_Frame.pbi / HPACK_Codec.pbi
│   └── H3_Stream.pbi / H3_Frame.pbi / QPACK_Codec.pbi
│
├── http_tests/                        # Testsuites & Test-Programme
│   ├── H1_HTTP_Protokoll_TestSuite.pbi   # 323 Tests
│   ├── H2_TestSuite.pbi                  # 501 Tests
│   ├── V34_Routing_PKI_TestSuite.pbi     # 87 Tests (V3.4)
│   ├── Upload_TestServer.pb / Upload_TestClient.pb  # 43 Tests
│   ├── H3_Frame_TestSuite.pbi / H3_Stream_TestSuite.pbi
│   ├── QPACK_TestSuite.pbi
│   └── client_*.pb / pb-wget.pb
│
├── http_doc/                          # HTTP-Dokumentation
│   ├── HTTP_API-Referenz.md           # Index → Standard + Experten
│   ├── HTTP_API-Standard.md           # Server + Client + ACME + PKI API
│   ├── HTTP_API-Experten.md           # H2/H3/HPACK/QPACK Internals
│   ├── HTTP_Demo-Benutzung.md         # Index → Standard + Experten
│   ├── HTTP_Demo-Standard.md          # Praxis-Beispiele
│   └── HTTP_Demo-Experten.md          # Fortgeschrittene Szenarien
│
├── net_lib/                           # NET Stack (separates Repository)
└── net_doc/                           # NET Dokumentation (separates Repository)