@@ -737,6 +737,8 @@ module Net
737737 class IMAP < Protocol
738738 VERSION = "0.3.8"
739739
740+ autoload :ResponseReader , File . expand_path ( "imap/response_reader" , __dir__ )
741+
740742 include MonitorMixin
741743 if defined? ( OpenSSL ::SSL )
742744 include OpenSSL
@@ -2074,6 +2076,7 @@ def initialize(host, port_or_options = {},
20742076 @idle_response_timeout = options [ :idle_response_timeout ] || 5
20752077 @parser = ResponseParser . new
20762078 @sock = tcp_socket ( @host , @port )
2079+ @reader = ResponseReader . new ( self , @sock )
20772080 begin
20782081 if options [ :ssl ]
20792082 start_tls_session ( options [ :ssl ] )
@@ -2225,25 +2228,14 @@ def get_tagged_response(tag, cmd, timeout = nil)
22252228 end
22262229
22272230 def get_response
2228- buff = String . new
2229- while true
2230- s = @sock . gets ( CRLF )
2231- break unless s
2232- buff . concat ( s )
2233- if /\{ (\d +)\} \r \n /n =~ s
2234- s = @sock . read ( $1. to_i )
2235- buff . concat ( s )
2236- else
2237- break
2238- end
2239- end
2231+ buff = @reader . read_response_buffer
22402232 return nil if buff . length == 0
2241- if @@debug
2242- $stderr. print ( buff . gsub ( /^/n , "S: " ) )
2243- end
2244- return @parser . parse ( buff )
2233+ $stderr. print ( buff . gsub ( /^/n , "S: " ) ) if @@debug
2234+ @parser . parse ( buff )
22452235 end
22462236
2237+ #############################
2238+
22472239 def record_response ( name , data )
22482240 unless @responses . has_key? ( name )
22492241 @responses [ name ] = [ ]
@@ -2421,6 +2413,7 @@ def start_tls_session(params = {})
24212413 context . verify_callback = VerifyCallbackProc
24222414 end
24232415 @sock = SSLSocket . new ( @sock , context )
2416+ @reader = ResponseReader . new ( self , @sock )
24242417 @sock . sync_close = true
24252418 @sock . hostname = @host if @sock . respond_to? :hostname=
24262419 ssl_socket_connect ( @sock , @open_timeout )
0 commit comments