1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
(in-package :ssl)
;;;;;;;;;;;;;;;;;;;;;
;;; ACL style API ;;;
;;;;;;;;;;;;;;;;;;;;;
(defmethod make-ssl-client-stream ((socket integer) &rest options)
(destructuring-bind (&key (format :binary)) options
(when (minusp socket)
(error "not a proper socket descriptor"))
(let ((ssl-socket (make-instance 'ssl-internal:ssl-client-socket :fd socket)))
(case format
(:binary (make-instance 'binary-ssl-stream
:ssl-socket ssl-socket))
(:text (make-instance 'character-ssl-stream
:ssl-socket ssl-socket))
(otherwise (error "Unknown ssl-stream format"))))))
#+lispworks
(defmethod make-ssl-client-stream ((lw-socket-stream comm:socket-stream) &rest options)
(apply #'make-ssl-client-stream (comm:socket-stream-socket lw-socket-stream) options))
#+cormanlisp
(defmethod make-ssl-client-stream (stream &rest options)
(apply #'make-ssl-client-stream (sockets:socket-descriptor (cl::stream-handle stream)) options))
(defmethod make-ssl-server-stream ((socket integer) &rest options)
(destructuring-bind (&key certificate key other-certificates (format :binary)) options
(when (minusp socket)
(error "not a proper socket descriptor"))
(let ((ssl-socket (make-instance 'ssl-internal:ssl-server-socket
:fd socket
:rsa-privatekey-file (or key certificate)
:certificate-file (or certificate key))))
(case format
(:binary (make-instance 'binary-ssl-stream
:ssl-socket ssl-socket))
(:text (make-instance 'character-ssl-stream
:ssl-socket ssl-socket))
(otherwise (error "Unknown ssl-stream format"))))))
(defmethod make-ssl-server-stream ((socket ssl-stream-mixin) &rest options)
(warn "SSL socket ~A reused" socket)
socket)
#+lispworks
(defmethod make-ssl-server-stream ((lw-socket-stream comm:socket-stream) &rest options)
(apply #'make-ssl-server-stream (comm:socket-stream-socket lw-socket-stream) options))
#+ignore
(defmethod make-ssl-server-stream ((acl-socket acl-socket::server-socket) &rest options)
(apply #'make-ssl-server-stream
(comm::get-fd-from-socket (acl-socket::passive-socket acl-socket)) options))
#+ignore
(defmethod make-ssl-server-stream ((lw-socket-stream acl-socket::chunked-socket-stream) &rest options)
(apply #'make-ssl-server-stream (comm:socket-stream-socket lw-socket-stream) options))
|