tipi 0.36 → 0.37
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +3 -3
- data/e +0 -0
- data/examples/http_request_ws_server.rb +2 -1
- data/lib/tipi/http1_adapter.rb +13 -1
- data/lib/tipi/version.rb +1 -1
- data/lib/tipi/websocket.rb +9 -22
- data/tipi.gemspec +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4129b10a7f6b5fb92e4e4784bf8cfd12ea2659840b616b7627bf28d1dc423e87
|
4
|
+
data.tar.gz: 7f5f71c4a870e33c7de84fd292568b3aca582dcc1adc9496d99e636328b3df4b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1bfcbf1cdf4fa2868554e690a71543d89a37bf2d8cfa27cf604e453fb411d5b1dd2e4bc10678cbe79db6a94238ffef1a09e53771f7e8d8e71f2512b87f7265a
|
7
|
+
data.tar.gz: 4f476a65800ffb6cbcdfde6e10ed9e1dd7b9fcc4ddd69ad2babed1a747cba4f94e05659cbd235c1f7e71e1595851d77896262d45d1036d216d866b7bdc3f914a
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tipi (0.
|
4
|
+
tipi (0.37)
|
5
5
|
http-2 (~> 0.10.0)
|
6
6
|
http_parser.rb (~> 0.6.0)
|
7
7
|
msgpack (~> 1.4.2)
|
8
8
|
polyphony (~> 0.51.0)
|
9
|
-
qeweney (~> 0.
|
9
|
+
qeweney (~> 0.5)
|
10
10
|
rack (>= 2.0.8, < 2.3.0)
|
11
11
|
websocket (~> 1.2.8)
|
12
12
|
|
@@ -29,7 +29,7 @@ GEM
|
|
29
29
|
ruby-progressbar
|
30
30
|
msgpack (1.4.2)
|
31
31
|
polyphony (0.51.0)
|
32
|
-
qeweney (0.
|
32
|
+
qeweney (0.5)
|
33
33
|
escape_utils (~> 1.2.1)
|
34
34
|
rack (2.2.3)
|
35
35
|
rake (12.3.3)
|
data/e
ADDED
File without changes
|
@@ -27,7 +27,8 @@ puts 'Listening on port 4411...'
|
|
27
27
|
|
28
28
|
Tipi.serve('0.0.0.0', 4411, opts) do |req|
|
29
29
|
if req.upgrade_protocol == 'websocket'
|
30
|
-
|
30
|
+
conn = req.upgrade_to_websocket
|
31
|
+
ws_handler(conn)
|
31
32
|
else
|
32
33
|
req.respond(HTML, 'Content-Type' => 'text/html')
|
33
34
|
end
|
data/lib/tipi/http1_adapter.rb
CHANGED
@@ -131,6 +131,14 @@ module Tipi
|
|
131
131
|
# protocols, notably WebSocket, can be specified by passing a hash to the
|
132
132
|
# :upgrade option when starting a server:
|
133
133
|
#
|
134
|
+
# def ws_handler(conn)
|
135
|
+
# conn << 'hi'
|
136
|
+
# msg = conn.recv
|
137
|
+
# conn << "You said #{msg}"
|
138
|
+
# conn << 'bye'
|
139
|
+
# conn.close
|
140
|
+
# end
|
141
|
+
#
|
134
142
|
# opts = {
|
135
143
|
# upgrade: {
|
136
144
|
# websocket: Tipi::Websocket.handler(&method(:ws_handler))
|
@@ -154,7 +162,7 @@ module Tipi
|
|
154
162
|
|
155
163
|
def upgrade_with_handler(handler, headers)
|
156
164
|
@parser = @requests_head = @requests_tail = nil
|
157
|
-
handler.(
|
165
|
+
handler.(self, headers)
|
158
166
|
true
|
159
167
|
end
|
160
168
|
|
@@ -173,6 +181,10 @@ module Tipi
|
|
173
181
|
':authority' => headers['host']
|
174
182
|
)
|
175
183
|
end
|
184
|
+
|
185
|
+
def websocket_connection(req)
|
186
|
+
Tipi::Websocket.new(@conn, req.headers)
|
187
|
+
end
|
176
188
|
|
177
189
|
# response API
|
178
190
|
|
data/lib/tipi/version.rb
CHANGED
data/lib/tipi/websocket.rb
CHANGED
@@ -7,32 +7,17 @@ module Tipi
|
|
7
7
|
# Websocket connection
|
8
8
|
class Websocket
|
9
9
|
def self.handler(&block)
|
10
|
-
proc
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
proc do |adapter, headers|
|
11
|
+
req = Qeweney::Request.new(headers, adapter)
|
12
|
+
websocket = req.upgrade_to_websocket
|
13
|
+
block.(websocket)
|
14
|
+
end
|
15
|
+
end
|
14
16
|
|
15
17
|
def initialize(conn, headers)
|
16
18
|
@conn = conn
|
17
19
|
@headers = headers
|
18
|
-
setup(headers)
|
19
|
-
end
|
20
|
-
|
21
|
-
S_WS_GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
|
22
|
-
UPGRADE_RESPONSE = <<~HTTP.gsub("\n", "\r\n")
|
23
|
-
HTTP/1.1 101 Switching Protocols
|
24
|
-
Upgrade: websocket
|
25
|
-
Connection: Upgrade
|
26
|
-
Sec-WebSocket-Accept: %<accept>s
|
27
|
-
|
28
|
-
HTTP
|
29
|
-
|
30
|
-
def setup(headers)
|
31
|
-
key = headers['sec-websocket-key']
|
32
20
|
@version = headers['sec-websocket-version'].to_i
|
33
|
-
accept = Digest::SHA1.base64digest([key, S_WS_GUID].join)
|
34
|
-
@conn << format(UPGRADE_RESPONSE, accept: accept)
|
35
|
-
|
36
21
|
@reader = ::WebSocket::Frame::Incoming::Server.new(version: @version)
|
37
22
|
end
|
38
23
|
|
@@ -64,8 +49,10 @@ module Tipi
|
|
64
49
|
end
|
65
50
|
end
|
66
51
|
|
52
|
+
OutgoingFrame = ::WebSocket::Frame::Outgoing::Server
|
53
|
+
|
67
54
|
def send(data)
|
68
|
-
frame =
|
55
|
+
frame = OutgoingFrame.new(
|
69
56
|
version: @version, data: data, type: :text
|
70
57
|
)
|
71
58
|
@conn << frame.to_s
|
data/tipi.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.executables = ['tipi']
|
21
21
|
|
22
22
|
s.add_runtime_dependency 'polyphony', '~>0.51.0'
|
23
|
-
s.add_runtime_dependency 'qeweney', '~>0.
|
23
|
+
s.add_runtime_dependency 'qeweney', '~>0.5'
|
24
24
|
|
25
25
|
s.add_runtime_dependency 'http_parser.rb', '~>0.6.0'
|
26
26
|
s.add_runtime_dependency 'http-2', '~>0.10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tipi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.37'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: polyphony
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
40
|
+
version: '0.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: http_parser.rb
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,6 +214,7 @@ files:
|
|
214
214
|
- df/ws_page.html
|
215
215
|
- docs/README.md
|
216
216
|
- docs/tipi-logo.png
|
217
|
+
- e
|
217
218
|
- examples/cuba.ru
|
218
219
|
- examples/hanami-api.ru
|
219
220
|
- examples/hello.ru
|