Class: UV::HttpEndpoint
- Inherits:
-
Object
- Object
- UV::HttpEndpoint
- Defined in:
- lib/uv-rays/http_endpoint.rb
Overview
HTTP Proxy - connect to proxy GET #url_with_host HTTP/1.1rn“ Proxy-Authorization: Basic #encoded_credentialsrn rn
Defined Under Namespace
Classes: Connection
Constant Summary collapse
- @@defaults =
{ :path => '/', :keepalive => true }
Instance Attribute Summary collapse
-
#cookiejar ⇒ Object
readonly
Returns the value of attribute cookiejar.
-
#encoded_host ⇒ Object
readonly
Returns the value of attribute encoded_host.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#inactivity_timeout ⇒ Object
Returns the value of attribute inactivity_timeout.
-
#middleware ⇒ Object
readonly
Returns the value of attribute middleware.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
-
#proxy ⇒ Object
readonly
Returns the value of attribute proxy.
-
#scheme ⇒ Object
readonly
Returns the value of attribute scheme.
-
#thread ⇒ Object
readonly
Returns the value of attribute thread.
-
#tls ⇒ Object
readonly
Returns the value of attribute tls.
-
#tls_options ⇒ Object
readonly
Returns the value of attribute tls_options.
Instance Method Summary collapse
- #cancel_all ⇒ Object
- #connection_closed(request, reason) ⇒ Object
-
#connection_ready ⇒ Object
Callbacks.
- #data_received(data) ⇒ Object
- #delete(options = {}) ⇒ Object
- #get(options = {}) ⇒ Object
- #head(options = {}) ⇒ Object
- #http_proxy? ⇒ Boolean
-
#initialize(host, options = {}) ⇒ HttpEndpoint
constructor
A new instance of HttpEndpoint.
- #options(options = {}) ⇒ Object
- #patch(options = {}) ⇒ Object
- #post(options = {}) ⇒ Object
- #put(options = {}) ⇒ Object
- #request(method, options = {}) ⇒ Object
Constructor Details
#initialize(host, options = {}) ⇒ HttpEndpoint
Returns a new instance of HttpEndpoint.
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/uv-rays/http_endpoint.rb', line 144 def initialize(host, = {}) @queue = [] @parser = Http::Parser.new @thread = reactor @connection = nil @options = @@defaults.merge() @tls_options = [:tls_options] || {} @inactivity_timeout = [:inactivity_timeout] || 10000 uri = host.is_a?(::URI) ? host : ::URI.parse(host) @port = uri.port @host = uri.host default_port = uri.port == uri.default_port @encoded_host = default_port ? @host : "#{@host}:#{@port}" @proxy = @options[:proxy] @scheme = uri.scheme @tls = @scheme == 'https' @cookiejar = CookieJar.new @middleware = [] @closing = false @connecting = false end |
Instance Attribute Details
#cookiejar ⇒ Object (readonly)
Returns the value of attribute cookiejar.
174 175 176 |
# File 'lib/uv-rays/http_endpoint.rb', line 174 def @cookiejar end |
#encoded_host ⇒ Object (readonly)
Returns the value of attribute encoded_host.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def encoded_host @encoded_host end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def host @host end |
#inactivity_timeout ⇒ Object
Returns the value of attribute inactivity_timeout.
172 173 174 |
# File 'lib/uv-rays/http_endpoint.rb', line 172 def inactivity_timeout @inactivity_timeout end |
#middleware ⇒ Object (readonly)
Returns the value of attribute middleware.
174 175 176 |
# File 'lib/uv-rays/http_endpoint.rb', line 174 def middleware @middleware end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def port @port end |
#proxy ⇒ Object (readonly)
Returns the value of attribute proxy.
174 175 176 |
# File 'lib/uv-rays/http_endpoint.rb', line 174 def proxy @proxy end |
#scheme ⇒ Object (readonly)
Returns the value of attribute scheme.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def scheme @scheme end |
#thread ⇒ Object (readonly)
Returns the value of attribute thread.
174 175 176 |
# File 'lib/uv-rays/http_endpoint.rb', line 174 def thread @thread end |
#tls ⇒ Object (readonly)
Returns the value of attribute tls.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def tls @tls end |
#tls_options ⇒ Object (readonly)
Returns the value of attribute tls_options.
173 174 175 |
# File 'lib/uv-rays/http_endpoint.rb', line 173 def @tls_options end |
Instance Method Details
#cancel_all ⇒ Object
257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/uv-rays/http_endpoint.rb', line 257 def cancel_all @queue.each do |request| request.reject(:cancelled) end if @parser.request @parser.request.reject(:cancelled) @parser.eof end @queue = [] close_connection end |
#connection_closed(request, reason) ⇒ Object
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/uv-rays/http_endpoint.rb', line 232 def connection_closed(request, reason) # A connection might close due to a connection failure awaiting_close = @closing awaiting_connect = @connecting @closing = false @connecting = false @connection = nil # We may have closed a previous connection if @parser.request && (request.nil? || request == @parser.request) stop_timer @parser.eof elsif request.nil? && @parser.request.nil? && @queue.length > 0 req = @queue.pop req.reject(reason || :connection_failure) end next_request if awaiting_close || awaiting_connect end |
#connection_ready ⇒ Object
Callbacks
219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/uv-rays/http_endpoint.rb', line 219 def connection_ready # A connection can be closed while still connecting return if @closing @connecting = false if @queue.length > 0 restart_timer next_request else close_connection end end |
#data_received(data) ⇒ Object
252 253 254 255 |
# File 'lib/uv-rays/http_endpoint.rb', line 252 def data_received(data) restart_timer close_connection if @parser.received(data) end |
#delete(options = {}) ⇒ Object
179 |
# File 'lib/uv-rays/http_endpoint.rb', line 179 def delete( = {}); request(:delete, ); end |
#get(options = {}) ⇒ Object
177 |
# File 'lib/uv-rays/http_endpoint.rb', line 177 def get( = {}); request(:get, ); end |
#head(options = {}) ⇒ Object
178 |
# File 'lib/uv-rays/http_endpoint.rb', line 178 def head( = {}); request(:head, ); end |
#http_proxy? ⇒ Boolean
269 270 271 |
# File 'lib/uv-rays/http_endpoint.rb', line 269 def http_proxy? @proxy && !@tls end |
#options(options = {}) ⇒ Object
183 |
# File 'lib/uv-rays/http_endpoint.rb', line 183 def ( = {}); request(:options, ); end |
#patch(options = {}) ⇒ Object
182 |
# File 'lib/uv-rays/http_endpoint.rb', line 182 def patch( = {}); request(:patch, ); end |
#post(options = {}) ⇒ Object
181 |
# File 'lib/uv-rays/http_endpoint.rb', line 181 def post( = {}); request(:post, ); end |
#put(options = {}) ⇒ Object
180 |
# File 'lib/uv-rays/http_endpoint.rb', line 180 def put( = {}); request(:put, ); end |
#request(method, options = {}) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/uv-rays/http_endpoint.rb', line 186 def request(method, = {}) = @options.merge() [:method] = method.to_sym # Setup the request with callbacks request = Http::Request.new(self, ) request.then(proc { |response| if response.keep_alive restart_timer else # We might have already started processing the next request # at this point. So don't want to disconnect if already # disconnected. close_connection unless @connecting end next_request response }, proc { |err| # @parser.eof close_connection unless @connecting next_request ::Libuv::Q.reject(@thread, err) }) @queue.unshift(request) next_request request end |