class HTTPClient::JavaSocketWrap

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
  size = @instr.read(@buf)
  if size > 0
    @bufstr << String.from_java_bytes(@buf, Encoding::BINARY)[0, size]
  end
  size
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