diff --git a/CHANGELOG.md b/CHANGELOG.md index c8139da..30e54c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -# Unreleased +# v3.0.2 - 23.02.2026 - Gracefully handle HTTP/2 connections: h2c upgrade requests are served as HTTP/1.1, and direct HTTP/2 connections receive a GOAWAY with HTTP_1_1_REQUIRED instead of being silently dropped. - Fixed HTTP/2 prior-knowledge detection in ffi diff --git a/gleam.toml b/gleam.toml index 6f0842e..71c4400 100644 --- a/gleam.toml +++ b/gleam.toml @@ -1,5 +1,5 @@ name = "ewe" -version = "3.0.1" +version = "3.0.2" description = "🐑 a fluffy Gleam web server" target = "erlang" diff --git a/manifest.toml b/manifest.toml index 00a3e4b..8e9d819 100644 --- a/manifest.toml +++ b/manifest.toml @@ -10,7 +10,7 @@ packages = [ { name = "gleam_httpc", version = "5.0.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gleam_httpc", source = "hex", outer_checksum = "C545172618D07811494E97AAA4A0FB34DA6F6D0061FDC8041C2F8E3BE2B2E48F" }, { name = "gleam_json", version = "3.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "44FDAA8847BE8FC48CA7A1C089706BD54BADCC4C45B237A992EDDF9F2CDB2836" }, { name = "gleam_otp", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "BA6A294E295E428EC1562DC1C11EA7530DCB981E8359134BEABC8493B7B2258E" }, - { name = "gleam_stdlib", version = "0.68.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F7FAEBD8EF260664E86A46C8DBA23508D1D11BB3BCC6EE1B89B3BC3E5C83FF1E" }, + { name = "gleam_stdlib", version = "0.69.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "AAB0962BEBFAA67A2FBEE9EEE218B057756808DC9AF77430F5182C6115B3A315" }, { name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" }, { name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" }, { name = "glisten", version = "8.0.3", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "86B838196592D9EBDE7A1D2369AE3A51E568F7DD2D168706C463C42D17B95312" }, diff --git a/src/ewe/internal/http1.gleam b/src/ewe/internal/http1.gleam index 04ce466..9d48b4c 100644 --- a/src/ewe/internal/http1.gleam +++ b/src/ewe/internal/http1.gleam @@ -1,10 +1,10 @@ -import ewe/internal/http1/buffer.{type Buffer, Buffer} import ewe/internal/clock import ewe/internal/decoder.{ AbsPath, HttpBin, HttpEoh, HttpHeader, HttpRequest, HttphBin, More, Packet, } import ewe/internal/encoder import ewe/internal/file +import ewe/internal/http1/buffer.{type Buffer, Buffer} import gleam/bit_array import gleam/bool import gleam/bytes_tree.{type BytesTree} diff --git a/src/ewe/internal/http1/handler.gleam b/src/ewe/internal/http1/handler.gleam index 5bb7cc2..4f48cd1 100644 --- a/src/ewe/internal/http1/handler.gleam +++ b/src/ewe/internal/http1/handler.gleam @@ -1,11 +1,11 @@ import compresso -import ewe/internal/http1/buffer.{Buffer} import ewe/internal/encoder import ewe/internal/file import ewe/internal/http1.{ type Connection, type HttpVersion, type ResponseBody, BitsData, BytesData, Chunked, Empty, File, SSE, StringTreeData, TextData, Websocket, } as ewe_http +import ewe/internal/http1/buffer.{Buffer} import exception import gleam/bit_array import gleam/bytes_tree diff --git a/test/clock.gleam b/test/clock.gleam index 883bd36..ab970ba 100644 --- a/test/clock.gleam +++ b/test/clock.gleam @@ -2,7 +2,6 @@ import ewe/internal/clock import gleam/float import gleam/int import gleam/io -import gleam/list pub fn main() { let iterations = 10_000_000 @@ -12,9 +11,7 @@ pub fn main() { io.println("Getting HTTP date speed test") let begin = now_microseconds() - let _ = - list.range(0, iterations) - |> list.each(fn(_) { clock.get_http_date() }) + int.range(0, iterations, "", fn(_, _) { clock.get_http_date() }) let end = now_microseconds() let total_duration = end - begin