@@ -253,6 +253,8 @@ module Net
253253 class IMAP < Protocol
254254 VERSION = "0.2.4"
255255
256+ autoload :ResponseReader , File . expand_path ( "imap/response_reader" , __dir__ )
257+
256258 include MonitorMixin
257259 if defined? ( OpenSSL ::SSL )
258260 include OpenSSL
@@ -1144,6 +1146,7 @@ def initialize(host, port_or_options = {},
11441146 @idle_response_timeout = options [ :idle_response_timeout ] || 5
11451147 @parser = ResponseParser . new
11461148 @sock = tcp_socket ( @host , @port )
1149+ @reader = ResponseReader . new ( self , @sock )
11471150 begin
11481151 if options [ :ssl ]
11491152 start_tls_session ( options [ :ssl ] )
@@ -1295,25 +1298,14 @@ def get_tagged_response(tag, cmd, timeout = nil)
12951298 end
12961299
12971300 def get_response
1298- buff = String . new
1299- while true
1300- s = @sock . gets ( CRLF )
1301- break unless s
1302- buff . concat ( s )
1303- if /\{ (\d +)\} \r \n /n =~ s
1304- s = @sock . read ( $1. to_i )
1305- buff . concat ( s )
1306- else
1307- break
1308- end
1309- end
1301+ buff = @reader . read_response_buffer
13101302 return nil if buff . length == 0
1311- if @@debug
1312- $stderr. print ( buff . gsub ( /^/n , "S: " ) )
1313- end
1314- return @parser . parse ( buff )
1303+ $stderr. print ( buff . gsub ( /^/n , "S: " ) ) if @@debug
1304+ @parser . parse ( buff )
13151305 end
13161306
1307+ #############################
1308+
13171309 def record_response ( name , data )
13181310 unless @responses . has_key? ( name )
13191311 @responses [ name ] = [ ]
@@ -1491,6 +1483,7 @@ def start_tls_session(params = {})
14911483 context . verify_callback = VerifyCallbackProc
14921484 end
14931485 @sock = SSLSocket . new ( @sock , context )
1486+ @reader = ResponseReader . new ( self , @sock )
14941487 @sock . sync_close = true
14951488 @sock . hostname = @host if @sock . respond_to? :hostname=
14961489 ssl_socket_connect ( @sock , @open_timeout )
0 commit comments