Sha256: 23d3f9e584902d46ee928a3ac6248bc6565c3f36a3e98b1c8881ff496f2a6a76
Contents?: true
Size: 1.28 KB
Versions: 2
Compression:
Stored size: 1.28 KB
Contents
# Copyright (C) 2014, all contributors <yahns-public@yhbt.net> # License: GPLv3 or later (see COPYING for details) require_relative 'sendfile_compat' # this is to be included into a Kgio::Socket-derived class # this requires Ruby 2.1 and later for "exception: false" module Yahns::OpenSSLClient # :nodoc: include Yahns::SendfileCompat def yahns_init_ssl(ssl_ctx) @need_accept = true @ssl = OpenSSL::SSL::SSLSocket.new(self, ssl_ctx) end def kgio_trywrite(buf) rv = @ssl.write_nonblock(buf, exception: false) Integer === rv and rv = buf.bytesize == rv ? nil : buf.byteslice(rv, buf.bytesize) rv end def kgio_syssend(buf, flags) kgio_trywrite(buf) end def kgio_tryread(len, buf) if @need_accept # most protocols require read before write, so we start the negotiation # process here: begin @ssl.accept_nonblock rescue IO::WaitReadable return :wait_readable rescue IO::WaitWritable return :wait_writable rescue OpenSSL::SSL::SSLError return nil end @need_accept = false end @ssl.read_nonblock(len, buf, exception: false) end def shutdown(*args) @ssl.shutdown(*args) super # BasicSocket#shutdown end def close @ssl.close super # IO#close end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
yahns-1.6.0 | lib/yahns/openssl_client.rb |
yahns-1.5.0 | lib/yahns/openssl_client.rb |