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