Class: Async::HTTP::Protocol::HTTP2::Request
- Inherits:
-
Request
show all
- Defined in:
- lib/async/http/protocol/http2/request.rb
Constant Summary
collapse
- NO_RESPONSE =
[
[STATUS, '500'],
[REASON, "No response generated"]
]
Instance Attribute Summary collapse
Attributes inherited from Request
#protocol
Attributes inherited from Request
#authority, #body, #headers, #method, #path, #scheme, #version
Instance Method Summary
collapse
Methods inherited from Request
#peer, #remote_address, #remote_address=
Methods inherited from Request
[], #connect?, #head?, #idempotent?, #to_s
#body?, #close, #each, #finish, #read, #save
Constructor Details
#initialize(protocol, stream_id) ⇒ Request
Returns a new instance of Request.
29
30
31
32
33
34
35
|
# File 'lib/async/http/protocol/http2/request.rb', line 29
def initialize(protocol, stream_id)
super(nil, nil, nil, nil, VERSION, Headers.new)
@input = nil
@protocol = protocol
@stream = Stream.new(self, protocol, stream_id)
end
|
Instance Attribute Details
#stream ⇒ Object
Returns the value of attribute stream.
37
38
39
|
# File 'lib/async/http/protocol/http2/request.rb', line 37
def stream
@stream
end
|
Instance Method Details
#close!(state) ⇒ Object
54
55
|
# File 'lib/async/http/protocol/http2/request.rb', line 54
def close!(state)
end
|
#create_promise_stream(headers, stream_id) ⇒ Object
47
48
49
50
51
52
|
# File 'lib/async/http/protocol/http2/request.rb', line 47
def create_promise_stream(, stream_id)
request = self.class.new(@protocol, stream_id)
request.(self, , false)
return request.stream
end
|
#hijack? ⇒ Boolean
39
40
41
|
# File 'lib/async/http/protocol/http2/request.rb', line 39
def hijack?
false
end
|
#push(path, headers = nil) ⇒ Stream
Returns the promised stream, on which to send data.
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/async/http/protocol/http2/request.rb', line 58
def push(path, = nil)
= [
[SCHEME, @scheme],
[METHOD, GET],
[PATH, path],
[AUTHORITY, @authority]
]
if
= Headers::Merged.new(
,
)
end
@stream.send_push_promise()
end
|
#push? ⇒ Boolean
43
44
45
|
# File 'lib/async/http/protocol/http2/request.rb', line 43
def push?
@protocol.enable_push?
end
|
#receive_data(stream, data, end_stream) ⇒ Object
108
109
110
111
112
113
114
115
116
|
# File 'lib/async/http/protocol/http2/request.rb', line 108
def receive_data(stream, data, end_stream)
unless data.empty?
@input.write(data)
end
if end_stream
@input.close
end
end
|
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/async/http/protocol/http2/request.rb', line 76
def (stream, , end_stream)
.each do |key, value|
if key == SCHEME
return @stream.send_failure(400, "Request scheme already specified") if @scheme
@scheme = value
elsif key == AUTHORITY
return @stream.send_failure(400, "Request authority already specified") if @authority
@authority = value
elsif key == METHOD
return @stream.send_failure(400, "Request method already specified") if @method
@method = value
elsif key == PATH
return @stream.send_failure(400, "Request path already specified") if @path
@path = value
else
@headers[key] = value
end
end
unless end_stream
@body = @input = Body::Writable.new
end
@protocol.requests.enqueue self
end
|
#receive_reset_stream(stream, error_code) ⇒ Object
118
119
|
# File 'lib/async/http/protocol/http2/request.rb', line 118
def receive_reset_stream(stream, error_code)
end
|
#send_response(response) ⇒ Object
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/async/http/protocol/http2/request.rb', line 129
def send_response(response)
if response.nil?
@stream.(nil, NO_RESPONSE, ::HTTP::Protocol::HTTP2::END_STREAM)
elsif response.body?
= [
[STATUS, response.status],
]
if length = response.body.length
<< [CONTENT_LENGTH, length]
end
= Headers::Merged.new(
,
response.
)
@stream.(nil, )
@stream.send_body(response.body)
else
= Headers::Merged.new([
[STATUS, response.status],
], response.)
@stream.(nil, , ::HTTP::Protocol::HTTP2::END_STREAM)
end
end
|
#stop_connection(error) ⇒ Object
121
122
|
# File 'lib/async/http/protocol/http2/request.rb', line 121
def stop_connection(error)
end
|