Class: Net::IMAP::ResponseReader
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Inherits: | Object |
| Defined in: | lib/net/imap/response_reader.rb |
Overview
Class Method Summary
- .new(client, sock) ⇒ ResponseReader constructor
Instance Attribute Summary
- #client readonly
-
#buff
readonly
private
response buffer state.
- #done? ⇒ Boolean readonly private
- #empty? ⇒ Boolean readonly private
-
#literal_size
readonly
private
response buffer state.
-
#max_response_size
readonly
private
cached config.
- #response_too_large? ⇒ Boolean readonly private
Instance Method Summary
- #read_response_buffer
- #bytes_read private
- #get_literal_size(buff) private
- #guard_response_too_large! private
- #line_done? ⇒ Boolean private
- #max_response_remaining private
- #min_response_remaining private
- #min_response_size private
- #read_line private
- #read_literal private
Constructor Details
.new(client, sock) ⇒ ResponseReader
# File 'lib/net/imap/response_reader.rb', line 9
def initialize(client, sock) @client, @sock = client, sock # cached config @max_response_size = nil # response buffer state @buff = @literal_size = nil end
Instance Attribute Details
#buff (readonly, private)
response buffer state
# File 'lib/net/imap/response_reader.rb', line 41
attr_reader :buff, :literal_size
#client (readonly)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 7
attr_reader :client
#done? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 45
def done? = line_done? && !literal_size
#empty? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 44
def empty? = buff.empty?
#literal_size (readonly, private)
response buffer state
# File 'lib/net/imap/response_reader.rb', line 41
attr_reader :buff, :literal_size
#max_response_size (readonly, private)
cached config
# File 'lib/net/imap/response_reader.rb', line 38
attr_reader :max_response_size
#response_too_large? ⇒ Boolean (readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 66
def response_too_large? = max_response_size &.< min_response_size
Instance Method Details
#bytes_read (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 43
def bytes_read = buff.bytesize
#get_literal_size(buff) (private)
[ GitHub ]#guard_response_too_large! (private)
# File 'lib/net/imap/response_reader.rb', line 73
def guard_response_too_large! return unless response_too_large? raise ResponseTooLargeError.new( max_response_size:, bytes_read:, literal_size:, ) end
#line_done? ⇒ Boolean (private)
#max_response_remaining (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 65
def max_response_remaining = max_response_size &.- bytes_read
#min_response_remaining (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 69
def min_response_remaining empty? ? 3 : done? ? 0 : (literal_size || 0) + 2 end
#min_response_size (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 67
def min_response_size = bytes_read + min_response_remaining
#read_line (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 52
def read_line line = (@sock.gets(CRLF, max_response_remaining) or throw :eof) @literal_size = get_literal_size(line) buff << line end
#read_literal (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 58
def read_literal literal = String.new(capacity: literal_size) buff << (@sock.read(literal_size, literal) or throw :eof) ensure @literal_size = nil end
#read_response_buffer
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 17
def read_response_buffer @max_response_size = client.max_response_size @buff = String.new catch :eof do while true guard_response_too_large! read_line # check before allocating memory for literal guard_response_too_large! break unless literal_size read_literal end end buff ensure @buff = @literal_size = nil end