@@ -26,22 +26,22 @@ def request(params)
26
26
request << "#{ key } : #{ value } \r \n "
27
27
end
28
28
request << "\r \n "
29
- connection . write ( request )
29
+ socket . write ( request )
30
30
31
31
if params [ :body ]
32
32
if params [ :body ] . is_a? ( String )
33
- connection . write ( params [ :body ] )
33
+ socket . write ( params [ :body ] )
34
34
else
35
35
while chunk = params [ :body ] . read ( CHUNK_SIZE )
36
- connection . write ( chunk )
36
+ socket . write ( chunk )
37
37
end
38
38
end
39
39
end
40
40
41
41
response = Excon ::Response . new
42
- response . status = connection . readline [ 9 ..11 ] . to_i
42
+ response . status = socket . readline [ 9 ..11 ] . to_i
43
43
while true
44
- data = connection . readline . chop!
44
+ data = socket . readline . chop!
45
45
unless data . empty?
46
46
key , value = data . split ( ': ' )
47
47
response . headers [ key ] = value
@@ -61,31 +61,31 @@ def request(params)
61
61
if response . headers [ 'Content-Length' ]
62
62
remaining = response . headers [ 'Content-Length' ] . to_i
63
63
while remaining > 0
64
- block . call ( connection . read ( [ CHUNK_SIZE , remaining ] . min ) )
64
+ block . call ( socket . read ( [ CHUNK_SIZE , remaining ] . min ) )
65
65
remaining -= CHUNK_SIZE
66
66
end
67
67
elsif response . headers [ 'Transfer-Encoding' ] == 'chunked'
68
68
while true
69
- chunk_size = connection . readline . chop! . to_i ( 16 )
70
- chunk = connection . read ( chunk_size + 2 ) . chop! # 2 == "/r/n".length
69
+ chunk_size = socket . readline . chop! . to_i ( 16 )
70
+ chunk = socket . read ( chunk_size + 2 ) . chop! # 2 == "/r/n".length
71
71
if chunk_size > 0
72
72
block . call ( chunk )
73
73
else
74
74
break
75
75
end
76
76
end
77
77
elsif response . headers [ 'Connection' ] == 'close'
78
- block . call ( connection . read )
79
- Thread . current [ :_excon_connections ] [ @uri . to_s ] = nil
78
+ block . call ( socket . read )
79
+ reset_socket
80
80
end
81
81
end
82
- rescue => connection_error
83
- Thread . current [ :_excon_connections ] [ @uri . to_s ] = nil
84
- raise ( connection_error )
82
+ rescue => socket_error
83
+ reset_socket
84
+ raise ( socket_error )
85
85
end
86
86
87
87
if params [ :expects ] && ![ *params [ :expects ] ] . include? ( response . status )
88
- Thread . current [ :_excon_connections ] [ @uri . to_s ] = nil
88
+ reset_socket
89
89
raise ( Excon ::Errors . status_error ( params , response ) )
90
90
else
91
91
response
@@ -106,27 +106,28 @@ def request(params)
106
106
107
107
private
108
108
109
- def connection
110
- Thread . current [ :_excon_connections ] ||= { }
111
- if !Thread . current [ :_excon_connections ] [ @uri . to_s ] || Thread . current [ :_excon_connections ] [ @uri . to_s ] . closed?
112
- Thread . current [ :_excon_connections ] [ @uri . to_s ] = establish_connection
113
- end
114
- Thread . current [ :_excon_connections ] [ @uri . to_s ]
115
- end
116
-
117
- def establish_connection
118
- connection = TCPSocket . open ( @uri . host , @uri . port )
109
+ def reset_socket
110
+ new_socket = TCPSocket . open ( @uri . host , @uri . port )
119
111
120
112
if @uri . scheme == 'https'
121
113
@ssl_context = OpenSSL ::SSL ::SSLContext . new
122
114
@ssl_context . verify_mode = OpenSSL ::SSL ::VERIFY_NONE
123
- connection = OpenSSL ::SSL ::SSLSocket . new ( connection , @ssl_context )
124
- connection . sync_close = true
125
- connection . connect
115
+ new_socket = OpenSSL ::SSL ::SSLSocket . new ( new_socket , @ssl_context )
116
+ new_socket . sync_close = true
117
+ new_socket . connect
126
118
end
127
119
128
- connection
120
+ Thread . current [ :_excon_sockets ] [ @uri . to_s ] = new_socket
129
121
end
122
+
123
+ def socket
124
+ Thread . current [ :_excon_sockets ] ||= { }
125
+ if !Thread . current [ :_excon_sockets ] [ @uri . to_s ] || Thread . current [ :_excon_sockets ] [ @uri . to_s ] . closed?
126
+ reset_socket
127
+ end
128
+ Thread . current [ :_excon_sockets ] [ @uri . to_s ]
129
+ end
130
+
130
131
end
131
132
end
132
133
0 commit comments