Skip to content

Commit

Permalink
Refactor.
Browse files Browse the repository at this point in the history
  • Loading branch information
fukamachi committed Aug 11, 2024
1 parent 168c584 commit d49dbb7
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 36 deletions.
10 changes: 0 additions & 10 deletions src/ev/tcp.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -189,16 +189,6 @@
(cffi:foreign-slot-value *dummy-sockaddr* '(:struct wsock:sockaddr-in) 'wsock::port)))
(t (values nil nil)))))

(defun make-ssl-handle (client-fd)
(cl+ssl::ensure-initialized)
(cl+ssl::with-new-ssl (handle)
(cl+ssl::install-nonblock-flag client-fd)
(cl+ssl::ssl-set-fd handle client-fd)
(cl+ssl::ssl-set-accept-state handle)
(when cl+ssl:*default-cipher-list*
(cl+ssl::ssl-set-cipher-list handle cl+ssl:*default-cipher-list*))
handle))

(define-c-callback tcp-accept-cb :void ((evloop :pointer) (listener :pointer) (events :int))
(declare (ignore evloop events))
(let* ((fd (io-fd listener))
Expand Down
32 changes: 32 additions & 0 deletions src/ssl.lisp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
(defpackage woo.ssl
(:use :cl)
(:import-from :cl+ssl
:with-new-ssl
:install-nonblock-flag
:ssl-set-fd
:ssl-set-accept-state
:*default-cipher-list*
:ssl-set-cipher-list
:with-pem-password
:install-key-and-cert)
(:import-from :woo.ev.socket
:socket-fd
:socket-ssl-handle)
(:export :init-ssl-handle))
(in-package :woo.ssl)

(defun init-ssl-handle (socket ssl-cert-file ssl-key-file ssl-key-password)
(let ((client-fd (socket-fd socket)))
(with-new-ssl (handle)
(install-nonblock-flag client-fd)
(ssl-set-fd handle client-fd)
(ssl-set-accept-state handle)
(when *default-cipher-list*
(ssl-set-cipher-list handle *default-cipher-list*))
(setf (socket-ssl-handle socket) handle)
(with-pem-password ((or ssl-key-password ""))
(install-key-and-cert
handle
ssl-key-file
ssl-cert-file))
socket)))
48 changes: 23 additions & 25 deletions src/woo.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,14 @@

(let ((*app* app)
(*debug* debug)
(*listener* nil))
(*listener* nil)
(ssl (or ssl-key-file ssl-cert-file)))
(labels ((start-socket (socket)
(when (and ssl-key-file ssl-cert-file)
(let ((ssl-handle (woo.ev.tcp::make-ssl-handle (woo.ev.socket::socket-fd socket))))
(setf (woo.ev.socket:socket-ssl-handle socket) ssl-handle)
(cl+ssl::with-pem-password ((or ssl-key-password ""))
(cl+ssl::install-key-and-cert
ssl-handle
ssl-key-file
ssl-cert-file))))
(when ssl
(woo.ssl:init-ssl-handle socket
ssl-cert-file
ssl-key-file
ssl-key-password))
(setup-parser socket)
(woo.ev.tcp:start-listening-socket socket))
(start-multithread-server ()
Expand Down Expand Up @@ -130,22 +128,22 @@
:backlog backlog
:fd fd
:sockopt wsock:+SO-REUSEADDR+)))
(wev:close-tcp-server *listener*)))))
(main ()
(if worker-num
(start-multithread-server)
(start-singlethread-server))))
(when ssl-key-file
(setf ssl-key-file
(uiop:native-namestring
(or (probe-file ssl-key-file)
(error "SSL private key file '~A' does not exist." ssl-key-file)))))
(when ssl-cert-file
(setf ssl-cert-file
(uiop:native-namestring
(or (probe-file ssl-cert-file)
(error "SSL certificate '~A' does not exist." ssl-cert-file)))))
(main))))
(wev:close-tcp-server *listener*))))))
(when ssl
(cl+ssl::ensure-initialized)
(when ssl-key-file
(setf ssl-key-file
(uiop:native-namestring
(or (probe-file ssl-key-file)
(error "SSL private key file '~A' does not exist." ssl-key-file)))))
(when ssl-cert-file
(setf ssl-cert-file
(uiop:native-namestring
(or (probe-file ssl-cert-file)
(error "SSL certificate '~A' does not exist." ssl-cert-file))))))
(if worker-num
(start-multithread-server)
(start-singlethread-server)))))

(defun read-cb (socket data &key (start 0) (end (length data)))
(let ((parser (wev:socket-data socket)))
Expand Down
3 changes: 2 additions & 1 deletion woo.asd
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"cl+ssl")
:components ((:module "src"
:components
((:file "woo" :depends-on ("ev" "response" "worker" "signal" "specials" "util"))
((:file "woo" :depends-on ("ev" "response" "worker" "ssl" "signal" "specials" "util"))
(:file "response" :depends-on ("ev"))
(:file "ev" :depends-on ("ev-packages"))
(:file "worker" :depends-on ("ev" "queue" "specials"))
Expand All @@ -38,6 +38,7 @@
(:file "tcp" :depends-on ("event-loop" "socket" "util" "condition"))
(:file "condition")
(:file "util")))
(:file "ssl" :depends-on ("ev-packages"))
(:module "llsocket"
:depends-on ("syscall")
:serial t
Expand Down

0 comments on commit d49dbb7

Please # to comment.