Object
Manages sessions for a HTTPClient instance.
# File lib/httpclient/session.rb, line 109
109: def initialize(client)
110: @client = client
111: @proxy = client.proxy
112:
113: @agent_name = nil
114: @from = nil
115:
116: @protocol_version = nil
117: @debug_dev = client.debug_dev
118: @socket_sync = true
119: @chunk_size = 4096
120:
121: @connect_timeout = 60
122: @connect_retry = 1
123: @send_timeout = 120
124: @receive_timeout = 60 # For each read_block_size bytes
125: @read_block_size = 1024 * 16 # follows net/http change in 1.8.7
126: @protocol_retry_count = 5
127:
128: @ssl_config = nil
129: @test_loopback_http_response = []
130:
131: @sess_pool = []
132: @sess_pool_mutex = Mutex.new
133: end
# File lib/httpclient/session.rb, line 164
164: def keep(sess)
165: add_cached_session(sess)
166: end
# File lib/httpclient/session.rb, line 135
135: def proxy=(proxy)
136: if proxy.nil?
137: @proxy = nil
138: else
139: @proxy = Site.new(proxy)
140: end
141: end
# File lib/httpclient/session.rb, line 143
143: def query(req, via_proxy)
144: req.body.chunk_size = @chunk_size
145: sess = open(req.header.request_uri, via_proxy)
146: begin
147: sess.query(req)
148: rescue
149: sess.close
150: raise
151: end
152: sess
153: end
# File lib/httpclient/session.rb, line 226
226: def add_cached_session(sess)
227: @sess_pool_mutex.synchronize do
228: @sess_pool << sess
229: end
230: end
# File lib/httpclient/session.rb, line 201
201: def close(dest)
202: if cached = get_cached_session(dest)
203: cached.close
204: true
205: else
206: false
207: end
208: end
# File lib/httpclient/session.rb, line 192
192: def close_all
193: @sess_pool_mutex.synchronize do
194: @sess_pool.each do |sess|
195: sess.close
196: end
197: end
198: @sess_pool.clear
199: end
# File lib/httpclient/session.rb, line 210
210: def get_cached_session(uri)
211: cached = nil
212: @sess_pool_mutex.synchronize do
213: new_pool = []
214: @sess_pool.each do |s|
215: if s.dest.match(uri)
216: cached = s
217: else
218: new_pool << s
219: end
220: end
221: @sess_pool = new_pool
222: end
223: cached
224: end
# File lib/httpclient/session.rb, line 170
170: def open(uri, via_proxy = false)
171: sess = nil
172: if cached = get_cached_session(uri)
173: sess = cached
174: else
175: sess = Session.new(@client, Site.new(uri), @agent_name, @from)
176: sess.proxy = via_proxy ? @proxy : nil
177: sess.socket_sync = @socket_sync
178: sess.requested_version = @protocol_version if @protocol_version
179: sess.connect_timeout = @connect_timeout
180: sess.connect_retry = @connect_retry
181: sess.send_timeout = @send_timeout
182: sess.receive_timeout = @receive_timeout
183: sess.read_block_size = @read_block_size
184: sess.protocol_retry_count = @protocol_retry_count
185: sess.ssl_config = @ssl_config
186: sess.debug_dev = @debug_dev
187: sess.test_loopback_http_response = @test_loopback_http_response
188: end
189: sess
190: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.