tp2 0.11.2 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69d5ffc704823ef9650889a3b0ce785aa9aae379905940672ad89ecb6dca0d2b
4
- data.tar.gz: 8375c0c32f27279c104351821c2dc07ec5dd7ae5b735b64ce3d5dfa774a95c64
3
+ metadata.gz: ecbdd5f3235d547f97643c111afbdb42c0b069f43d832ad6b3ee4f316104b2f7
4
+ data.tar.gz: 00eccb47e2b984880081e3b38bf1839cdfd0849bd8840e54efeaa04f264d5587
5
5
  SHA512:
6
- metadata.gz: c6c9ac7ee73752d17d56dcdbb9d87bb74a0712f93328f7b8d57352de069595b45e9cf94d67f178828e39ee2a792e19f760550e9c2d08f7e11f3eaeb929e56e16
7
- data.tar.gz: e0665223dba5271296c2fa8ab4aa624a280a97a86af609e9fd3ff5b9a3f215b65012f7d077f1fca3a5dc8dd698fbe96a8294c87d76bd2383a552aadb064c4bc5
6
+ metadata.gz: f69b124309ee1582c3197c2fead077e01d7b5782985ca86caae097bbe70fb0d7ca7d6cb2d85f174a7676e1a048476092aac39292183a52fbeef10eea70b29a18
7
+ data.tar.gz: 7f3f7c6c883e04f884ecefee2b4e3d58bf90f56ae21419dff78f897f16b7f2cb019af513ef96680d8969276ee54c0e67f636d3f828ddb966456c361527cb1222
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # Version 0.11.3 2025-06-16
2
+
3
+ - Rename HTTP1Adapter to HTTP1Connection
4
+ - Refactor HTTP error handling
5
+
1
6
  # Version 0.11.2 2025-06-15
2
7
 
3
8
  - Improve URI calculation for logging
data/TODO.md CHANGED
@@ -1,4 +1,7 @@
1
1
  - Add failing tests for request bombs (requests with lots of bytes)
2
+
3
+ - add test for `ProtocolError` handling
4
+
2
5
  - Add limits for:
3
6
  - total request size (pre body)
4
7
  - line size
@@ -4,7 +4,7 @@ require 'qeweney'
4
4
  require 'stringio'
5
5
 
6
6
  module TP2
7
- class HTTP1Adapter
7
+ class HTTP1Connection
8
8
  attr_reader :fd
9
9
 
10
10
  def initialize(machine, fd, opts, &app)
@@ -26,24 +26,16 @@ module TP2
26
26
  persist = serve_request
27
27
  break if !persist
28
28
  end
29
- rescue Exception => e
30
- case e
31
- when UM::Terminate
32
- # we're done
33
- when SystemCallError
34
- @opts[:log]&.log("Encountered #{e.class}, closing connection")
35
- when ProtocolError
36
- @opts[:log]&.log("Protocol error (#{e.message}), closing connection")
37
- when StandardError
38
- @opts[:log]&.log("Unhandled exception #{e.class}: #{e.message}, closing connection")
39
- @opts[:log]&.log(e.backtrace.join("\n"))
40
- else
41
- raise
42
- end
29
+ rescue UM::Terminate, SystemCallError
30
+ # we're done, we don't care about broken socket
31
+ rescue StandardError
32
+ @opts[:log]&.log("Unhandled exception #{e.class}: #{e.message}, closing connection")
33
+ @opts[:log]&.log(e.backtrace.join("\n"))
43
34
  ensure
44
35
  @machine.close_async(@fd)
45
36
  end
46
37
 
38
+ # Returns true if connection should persist
47
39
  def serve_request
48
40
  headers = parse_headers
49
41
  return false if !headers
@@ -51,6 +43,9 @@ module TP2
51
43
  request = Qeweney::Request.new(headers, self)
52
44
  @app.call(request)
53
45
  persist_connection?(headers)
46
+ rescue ProtocolError
47
+ # TODO: add hook for testing protocol errors
48
+ return false
54
49
  end
55
50
 
56
51
  def get_body(req)
data/lib/tp2/server.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'tp2/http1_adapter'
3
+ require 'tp2/http1_connection'
4
4
  require 'tp2/request_extensions'
5
5
  require 'tp2/rack_adapter'
6
6
 
@@ -102,7 +102,7 @@ module TP2
102
102
 
103
103
  def accept_incoming(listen_fd)
104
104
  @machine.accept_each(listen_fd) do |fd|
105
- conn = HTTP1Adapter.new(@machine, fd, @opts, &@app)
105
+ conn = HTTP1Connection.new(@machine, fd, @opts, &@app)
106
106
  f = @machine.spin(conn) do
107
107
  it.run
108
108
  ensure
data/lib/tp2/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TP2
2
- VERSION = '0.11.2'
2
+ VERSION = '0.11.3'
3
3
  end
@@ -8,7 +8,7 @@ class String
8
8
  end
9
9
  end
10
10
 
11
- class HTTP1AdapterTest < Minitest::Test
11
+ class HTTP1ConnectionTest < Minitest::Test
12
12
  def make_socket_pair
13
13
  port = 10000 + rand(30000)
14
14
  server_fd = @machine.socket(UM::AF_INET, UM::SOCK_STREAM, 0, 0)
@@ -31,7 +31,7 @@ class HTTP1AdapterTest < Minitest::Test
31
31
  @reqs = []
32
32
  @hook = nil
33
33
  @app = ->(req) { @hook&.call(req); @reqs << req }
34
- @adapter = TP2::HTTP1Adapter.new(@machine, @s_fd, {}, &@app)
34
+ @adapter = TP2::HTTP1Connection.new(@machine, @s_fd, {}, &@app)
35
35
  end
36
36
 
37
37
  def teardown
data/test/test_server.rb CHANGED
@@ -75,7 +75,7 @@ class ServerTest < Minitest::Test
75
75
  req.respond("method: #{req.method}")
76
76
  }
77
77
 
78
- write_http_request "GET /foo HTTP/1.1\r\nServer: foo.com\r\n\r\nSCHMET /bar HTTP/1.1\r\n\r\n"
78
+ write_http_request "GET /foo HTTP/1.1\r\nServer: foo.com\r\n\r\nSCHmet /bar HTTP/1.1\r\n\r\n"
79
79
 
80
80
  response = read_client_side
81
81
  expected = "HTTP/1.1 200\r\nContent-Length: 11\r\n\r\nmethod: getHTTP/1.1 200\r\nContent-Length: 14\r\n\r\nmethod: schmet"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tp2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.11.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
@@ -70,7 +70,7 @@ files:
70
70
  - examples/rack.ru
71
71
  - examples/simple.rb
72
72
  - lib/tp2.rb
73
- - lib/tp2/http1_adapter.rb
73
+ - lib/tp2/http1_connection.rb
74
74
  - lib/tp2/logger.rb
75
75
  - lib/tp2/rack_adapter.rb
76
76
  - lib/tp2/request_extensions.rb