1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
puma--puma/lib/puma/minissl.rb

138 lines
2.3 KiB
Ruby
Raw Normal View History

2012-08-23 01:12:12 -04:00
module Puma::MiniSSL
2012-08-22 19:53:25 -04:00
class Socket
def initialize(socket, engine)
@socket = socket
@engine = engine
end
def to_io
@socket
end
def readpartial(size)
while true
output = @engine.read
return output if output
2012-08-23 00:43:40 -04:00
data = @socket.readpartial(size)
@engine.inject(data)
2012-08-23 01:34:10 -04:00
output = @engine.read
return output if output
while neg_data = @engine.extract
@socket.write neg_data
end
end
end
def read_nonblock(size)
while true
output = @engine.read
return output if output
data = @socket.read_nonblock(size)
@engine.inject(data)
2012-08-22 19:53:25 -04:00
output = @engine.read
2012-08-23 00:43:40 -04:00
return output if output
2012-08-22 19:53:25 -04:00
2012-08-23 00:43:40 -04:00
while neg_data = @engine.extract
2012-08-22 19:53:25 -04:00
@socket.write neg_data
end
end
end
def write(data)
need = data.size
while true
wrote = @engine.write data
2012-08-23 00:43:40 -04:00
enc = @engine.extract
2012-08-22 19:53:25 -04:00
if enc
2012-09-10 11:50:43 -04:00
@socket.syswrite enc
2012-08-22 19:53:25 -04:00
end
need -= wrote
return data.size if need == 0
data = data[need..-1]
end
end
2012-09-10 11:50:43 -04:00
alias_method :syswrite, :write
2012-08-22 19:53:25 -04:00
def flush
@socket.flush
end
2012-08-23 00:43:40 -04:00
def close
@socket.close
end
def peeraddr
@socket.peeraddr
end
2012-08-22 19:53:25 -04:00
end
2012-08-23 00:43:40 -04:00
class Context
attr_accessor :verify_mode
attr_reader :key
attr_reader :cert
def key=(key)
raise ArgumentError, "No such key file '#{key}'" unless File.exist? key
@key = key
end
def cert=(cert)
raise ArgumentError, "No such cert file '#{cert}'" unless File.exist? cert
@cert = cert
end
2012-08-23 00:43:40 -04:00
end
VERIFY_NONE = 0
VERIFY_PEER = 1
2012-08-23 22:50:01 -04:00
#if defined?(JRUBY_VERSION)
#class Engine
#def self.server(key, cert)
#new(key, cert)
#end
#end
#end
2012-08-23 19:56:37 -04:00
2012-08-22 19:53:25 -04:00
class Server
def initialize(socket, ctx)
@socket = socket
@ctx = ctx
end
def to_io
@socket
end
def accept
io = @socket.accept
2012-08-23 00:43:40 -04:00
engine = Engine.server @ctx.key, @ctx.cert
2012-08-22 19:53:25 -04:00
Socket.new io, engine
end
2012-08-23 00:43:40 -04:00
2012-09-10 11:50:43 -04:00
def accept_nonblock
io = @socket.accept_nonblock
engine = Engine.server @ctx.key, @ctx.cert
Socket.new io, engine
end
2012-08-23 00:43:40 -04:00
def close
@socket.close
end
2012-08-22 19:53:25 -04:00
end
end