Parent

Files

HTTPClient::SessionManager

Manages sessions for a HTTPClient instance.

Attributes

agent_name[RW]

Name of this client. Used for ‘User-Agent’ header in HTTP request.

from[RW]

Owner of this client. Used for ‘From’ header in HTTP request.

protocol_version[RW]

Requested protocol version

chunk_size[RW]

Chunk size for chunked request

debug_dev[RW]

Device for dumping log for debugging

socket_sync[RW]

Boolean value for Socket#sync

connect_timeout[RW]
connect_retry[RW]

Maximum retry count. 0 for infinite.

send_timeout[RW]
receive_timeout[RW]
read_block_size[RW]
protocol_retry_count[RW]
ssl_config[RW]
test_loopback_http_response[R]

Public Class Methods

new(client) click to toggle source
     # 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

Public Instance Methods

keep(sess) click to toggle source
     # File lib/httpclient/session.rb, line 164
164:     def keep(sess)
165:       add_cached_session(sess)
166:     end
proxy=(proxy) click to toggle source
     # 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
query(req, via_proxy) click to toggle source
     # 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
reset(uri) click to toggle source
     # File lib/httpclient/session.rb, line 155
155:     def reset(uri)
156:       site = Site.new(uri)
157:       close(site)
158:     end
reset_all() click to toggle source
     # File lib/httpclient/session.rb, line 160
160:     def reset_all
161:       close_all
162:     end

Private Instance Methods

add_cached_session(sess) click to toggle source
     # 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
close(dest) click to toggle source
     # 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
close_all() click to toggle source
     # 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
get_cached_session(uri) click to toggle source
     # 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
open(uri, via_proxy = false) click to toggle source
     # 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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.