close()
click to toggle source
def close
@socket.close
end
engine_read_all()
click to toggle source
def engine_read_all
output = @engine.read
while output and additional_output = @engine.read
output << additional_output
end
output
end
flush()
click to toggle source
def flush
@socket.flush
end
peeraddr()
click to toggle source
def peeraddr
@socket.peeraddr
end
peercert()
click to toggle source
def peercert
return @peercert if @peercert
raw = @engine.peercert
return nil unless raw
@peercert = OpenSSL::X509::Certificate.new raw
end
read_nonblock(size)
click to toggle source
def read_nonblock(size)
while true
output = engine_read_all
return output if output
data = @socket.read_nonblock(size)
@engine.inject(data)
output = engine_read_all
return output if output
while neg_data = @engine.extract
@socket.write neg_data
end
end
end
readpartial(size)
click to toggle source
def readpartial(size)
while true
output = @engine.read
return output if output
data = @socket.readpartial(size)
@engine.inject(data)
output = @engine.read
return output if output
while neg_data = @engine.extract
@socket.write neg_data
end
end
end
to_io()
click to toggle source
write(data)
click to toggle source
def write(data)
need = data.bytesize
while true
wrote = @engine.write data
enc = @engine.extract
while enc
@socket.write enc
enc = @engine.extract
end
need -= wrote
return data.bytesize if need == 0
data = data[wrote..-1]
end
end