class HTTPClient::JavaSocketWrap
def self.connect(socket, site, opts = {})
def self.connect(socket, site, opts = {}) socket_addr = InetSocketAddress.new(site.host, site.port) if opts[:connect_timeout] socket.connect(socket_addr, normalize_timeout(opts[:connect_timeout])) else socket.connect(socket_addr) end socket.setSoTimeout(normalize_timeout(opts[:so_timeout])) if opts[:so_timeout] socket.setKeepAlive(true) if opts[:tcp_keepalive] socket end
def self.normalize_timeout(timeout)
def self.normalize_timeout(timeout) [Java::JavaLang::Integer::MAX_VALUE, timeout].min end
def <<(str)
def <<(str) rv = @outstr.write(str.to_java_bytes) debug(str) rv end
def close
def close @socket.close end
def closed?
def closed? @socket.isClosed end
def debug(str)
def debug(str) @debug_dev << str if @debug_dev && str end
def eof?
def eof? @socket.isClosed end
def fill
def fill begin size = @instr.read(@buf) if size > 0 @bufstr << String.from_java_bytes(@buf, Encoding::BINARY)[0, size] end size rescue java.io.IOException => e raise OpenSSL::SSL::SSLError.new("#{e.class}: #{e.getMessage}") end end
def flush
def flush @socket.flush end
def gets(rs)
def gets(rs) while (size = @bufstr.index(rs)).nil? if fill() == -1 size = @bufstr.size break end end str = @bufstr.slice!(0, size + rs.size) debug(str) str end
def initialize(socket, debug_dev = nil)
def initialize(socket, debug_dev = nil) @socket = socket @debug_dev = debug_dev @outstr = @socket.getOutputStream @instr = BufferedInputStream.new(@socket.getInputStream) @buf = (' ' * BUF_SIZE).to_java_bytes @bufstr = '' end
def read(size, buf = nil)
def read(size, buf = nil) while @bufstr.size < size if fill() == -1 break end end str = @bufstr.slice!(0, size) debug(str) if buf buf.replace(str) else str end end
def readpartial(size, buf = nil)
def readpartial(size, buf = nil) while @bufstr.size == 0 if fill() == -1 raise EOFError.new('end of file reached') end end str = @bufstr.slice!(0, size) debug(str) if buf buf.replace(str) else str end end
def sync
def sync true end
def sync=(sync)
def sync=(sync) unless sync raise "sync = false is not supported. This option was introduced for backward compatibility just in case." end end