Update async adapter to use actual async ssl instead of blocking. Added more options.

This commit is contained in:
Alexander K. Hudek 2013-10-08 20:15:30 -04:00
parent 312ae15712
commit 2a36493281

View file

@ -3,7 +3,8 @@
(:import (org.eclipse.jetty.server.handler AbstractHandler) (:import (org.eclipse.jetty.server.handler AbstractHandler)
(org.eclipse.jetty.server Server Request Response) (org.eclipse.jetty.server Server Request Response)
(org.eclipse.jetty.server.nio SelectChannelConnector) (org.eclipse.jetty.server.nio SelectChannelConnector)
(org.eclipse.jetty.server.ssl SslSocketConnector) (org.eclipse.jetty.server.ssl SslSelectChannelConnector)
(org.eclipse.jetty.util.ssl SslContextFactory)
(org.eclipse.jetty.continuation Continuation ContinuationSupport ContinuationListener) (org.eclipse.jetty.continuation Continuation ContinuationSupport ContinuationListener)
(org.eclipse.jetty.io EofException) (org.eclipse.jetty.io EofException)
(javax.servlet.http HttpServletRequest)) (javax.servlet.http HttpServletRequest))
@ -31,7 +32,7 @@
(close [this] (close [this]
(.complete continuation))) (.complete continuation)))
(defn- add-ssl-connector! #_(defn- add-ssl-connector!
"Add an SslSocketConnector to a Jetty Server instance." "Add an SslSocketConnector to a Jetty Server instance."
[^Server server options] [^Server server options]
(let [ssl-connector (SslSocketConnector.)] (let [ssl-connector (SslSocketConnector.)]
@ -45,6 +46,24 @@
(.setTrustPassword ssl-connector (options :trust-password))) (.setTrustPassword ssl-connector (options :trust-password)))
(.addConnector server ssl-connector))) (.addConnector server ssl-connector)))
(defn- add-ssl-connector!
"Add an SslSelectChannelConnector to a Jetty Server instance."
[^Server server options]
(let [ssl-context-factory (SslContextFactory.)]
(doto ssl-context-factory
(.setKeyStorePath (options :keystore))
(.setKeyStorePassword (options :key-password)))
(when (options :truststore)
(.setTrustStore ssl-context-factory (options :truststore)))
(when (options :trust-password)
(.setTrustStorePassword ssl-context-factory (options :trust-password)))
(when (options :include-cipher-suites)
(.setIncludeCipherSuites ssl-context-factory (into-array (options :include-cipher-suites))))
(when (options :include-protocols)
(.setIncludeProtocols ssl-context-factory (into-array (options :include-protocols))))
(let [conn (SslSelectChannelConnector. ssl-context-factory)]
(.addConnector server (doto conn (.setPort (options :ssl-port 8443)))))))
(defn- proxy-handler (defn- proxy-handler
"Returns an Jetty Handler implementation for the given Ring handler." "Returns an Jetty Handler implementation for the given Ring handler."
[handler options] [handler options]