File: acl-ssl.lisp

package info (click to toggle)
cl-portable-aserve 20190720.gitcac1d69%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,240 kB
  • sloc: lisp: 22,564; makefile: 55; sh: 36
file content (58 lines) | stat: -rw-r--r-- 2,576 bytes parent folder | download | duplicates (10)
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))