Module: OpenSSL::Buffering
- Includes:
- Enumerable
- Included in:
- SSL::SSLSocket
- Defined in:
- lib/framework/autocomplete/OpenSSL.rb,
lib/extensions/openssl/openssl/buffering.rb
Constant Summary collapse
- BLOCK_SIZE =
1024*16
Instance Attribute Summary collapse
-
#sync ⇒ Object
Returns the value of attribute sync.
Instance Method Summary collapse
- #<<(s) ⇒ Object
- #close ⇒ Object
- #each(eol = $/) ⇒ Object (also: #each_line)
- #each_byte ⇒ Object
- #eof? ⇒ Boolean (also: #eof)
- #flush ⇒ Object
- #getc ⇒ Object
- #gets(eol = $/, limit = nil) ⇒ Object
- #initialize(*args) ⇒ Object
- #print(*args) ⇒ Object
- #printf(s, *args) ⇒ Object
- #puts(*args) ⇒ Object
- #read(size = nil, buf = nil) ⇒ Object
-
#read_nonblock(maxlen, buf = nil) ⇒ Object
Reads at most maxlen bytes in the non-blocking manner.
- #readchar ⇒ Object
- #readline(eol = $/) ⇒ Object
- #readlines(eol = $/) ⇒ Object
- #readpartial(maxlen, buf = nil) ⇒ Object
- #ungetc(c) ⇒ Object
- #write(s) ⇒ Object
-
#write_nonblock(s) ⇒ Object
Writes str in the non-blocking manner.
Methods included from Enumerable
Instance Attribute Details
#sync ⇒ Object
Returns the value of attribute sync.
383 384 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 383 def sync end |
Instance Method Details
#<<(s) ⇒ Object
419 420 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 419 def <<(s) end |
#close ⇒ Object
429 430 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 429 def close end |
#each(eol = $/) ⇒ Object Also known as: each_line
395 396 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 395 def each(eol) end |
#each_byte ⇒ Object
405 406 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 405 def each_byte end |
#eof? ⇒ Boolean Also known as: eof
411 412 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 411 def eof? end |
#flush ⇒ Object
427 428 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 427 def flush end |
#getc ⇒ Object
403 404 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 403 def getc end |
#gets(eol = $/, limit = nil) ⇒ Object
393 394 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 393 def gets(eol,limit) end |
#initialize(*args) ⇒ Object
23 24 25 26 27 |
# File 'lib/extensions/openssl/openssl/buffering.rb', line 23 def initialize(*args) @eof = false @rbuffer = "" @sync = @io.sync end |
#print(*args) ⇒ Object
423 424 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 423 def print(args) end |
#printf(s, *args) ⇒ Object
425 426 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 425 def printf(s,args) end |
#puts(*args) ⇒ Object
421 422 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 421 def puts(args) end |
#read(size = nil, buf = nil) ⇒ Object
387 388 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 387 def read(size,buf) end |
#read_nonblock(maxlen, buf = nil) ⇒ Object
Reads at most maxlen bytes in the non-blocking manner.
When no data can be read without blocking, It raises OpenSSL::SSL::SSLError extended by IO::WaitReadable or IO::WaitWritable.
IO::WaitReadable means SSL needs to read internally. So read_nonblock should be called again after underlying IO is readable.
IO::WaitWritable means SSL needs to write internally. So read_nonblock should be called again after underlying IO is writable.
So OpenSSL::Buffering#read_nonblock needs two rescue clause as follows.
# emulates blocking read (readpartial).
begin
result = ssl.read_nonblock(maxlen)
rescue IO::WaitReadable
IO.select([io])
retry
rescue IO::WaitWritable
IO.select(nil, [io])
retry
end
Note that one reason that read_nonblock write to a underlying IO is the peer requests a new TLS/SSL handshake. See openssl FAQ for more details. www.openssl.org/support/faq.html
135 136 |
# File 'lib/extensions/openssl/openssl/buffering.rb', line 135 def read_nonblock(maxlen,buf) end |
#readchar ⇒ Object
407 408 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 407 def readchar end |
#readline(eol = $/) ⇒ Object
401 402 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 401 def readline(eol) end |
#readlines(eol = $/) ⇒ Object
399 400 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 399 def readlines(eol) end |
#readpartial(maxlen, buf = nil) ⇒ Object
389 390 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 389 def readpartial(maxlen,buf) end |
#ungetc(c) ⇒ Object
409 410 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 409 def ungetc(c) end |
#write(s) ⇒ Object
415 416 |
# File 'lib/framework/autocomplete/OpenSSL.rb', line 415 def write(s) end |
#write_nonblock(s) ⇒ Object
Writes str in the non-blocking manner.
If there are buffered data, it is flushed at first. This may block.
write_nonblock returns number of bytes written to the SSL connection.
When no data can be written without blocking, It raises OpenSSL::SSL::SSLError extended by IO::WaitReadable or IO::WaitWritable.
IO::WaitReadable means SSL needs to read internally. So write_nonblock should be called again after underlying IO is readable.
IO::WaitWritable means SSL needs to write internally. So write_nonblock should be called again after underlying IO is writable.
So OpenSSL::Buffering#write_nonblock needs two rescue clause as follows.
# emulates blocking write.
begin
result = ssl.write_nonblock(str)
rescue IO::WaitReadable
IO.select([io])
retry
rescue IO::WaitWritable
IO.select(nil, [io])
retry
end
Note that one reason that write_nonblock read from a underlying IO is the peer requests a new TLS/SSL handshake. See openssl FAQ for more details. www.openssl.org/support/faq.html
290 291 |
# File 'lib/extensions/openssl/openssl/buffering.rb', line 290 def write_nonblock(s) end |