Commit 7edb25a
lib/minbox/client.rb
@@ -1,12 +1,11 @@
module Minbox
class Client
- attr_reader :host, :socket, :logger
+ attr_reader :server, :socket, :logger
- def initialize(host, socket, logger, tls = false)
- @host = host
+ def initialize(server, socket, logger)
+ @server = server
@logger = logger
@socket = socket
- @tls = tls
end
def handle(&block)
@@ -63,20 +62,28 @@ module Minbox
def ehlo(line)
_ehlo, _client_domain = line.split(" ")
- write "250-#{host}"
+ write "250-#{server.host}"
#write "250 AUTH PLAIN LOGIN"
write "250-ENHANCEDSTATUSCODES"
- write "250 STARTTLS" if @tls
+ write "250 STARTTLS" if server.tls?
write "250 OK"
end
def helo(line)
_ehlo, _client_domain = line.split(" ")
- write "250 #{host}"
+ write "250 #{server.host}"
end
def start_tls
write "220 Ready to start TLS"
+
+ @original_socket = @socket
+ @socket = OpenSSL::SSL::SSLSocket.new(@original_socket, server.ssl_context)
+ @socket.sync_close = true
+ #begin
+ puts @socket.accept.inspect
+ #rescue OpenSSL::SSL::SSLError => e
+ #end
end
def reset
lib/minbox/server.rb
@@ -9,10 +9,14 @@ module Minbox
@tls = tls
end
+ def tls?
+ @tls
+ end
+
def listen!(&block)
logger.debug("Starting server on port #{port}...")
@server = TCPServer.new(port.to_i)
- @server = upgrade(@server) if @tls
+ @server = upgrade(@server) if tls?
logger.debug("Server started!")
loop do
@@ -24,7 +28,7 @@ module Minbox
def handle(socket, &block)
logger.debug("client connected: #{socket.inspect}")
- Client.new(host, socket, logger, @tls).handle(&block)
+ Client.new(self, socket, logger).handle(&block)
end
def shutdown!
@@ -66,11 +70,14 @@ module Minbox
end
def ssl_context(key = OpenSSL::PKey::RSA.new(2048))
- ssl_context = OpenSSL::SSL::SSLContext.new
- ssl_context.cert = certificate_for(key)
- ssl_context.key = key
- ssl_context.ssl_version = :SSLv23
- ssl_context
+ @ssl_context ||=
+ begin
+ ssl_context = OpenSSL::SSL::SSLContext.new
+ ssl_context.cert = certificate_for(key)
+ ssl_context.key = key
+ ssl_context.ssl_version = :SSLv23
+ ssl_context
+ end
end
end
end