Advertisement
Guest User

Posterdati

a guest
Nov 7th, 2018
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 4.12 KB | None | 0 0
  1. (in-package #:test-ssl-client)
  2.  
  3. ;;
  4. ;; Parameters.
  5. ;;
  6.  
  7. (defparameter *port* 41971)
  8. (defparameter *server-hostname* "localhost")
  9. (defparameter *password* nil)
  10. ;;(defparameter *external-format* '(:utf-8 :eol-style :crlf))
  11. (defparameter *external-format* '(:iso-8859-1 :eol-style :lf))
  12.  
  13. ;;
  14. ;; Functions.
  15. ;;
  16.  
  17.  
  18. (defun client ()
  19.   (let ((active-socket-object nil)
  20.         (ssl-context-object (cl+ssl:make-context))
  21.         (ssl-stream-object nil))
  22.     (unwind-protect
  23.  
  24.          ;; unwind-protect protected form.
  25.  
  26.          (handler-case
  27.              (cl+ssl:with-global-context (ssl-context-object :auto-free-p t)
  28.                (format *standard-output*
  29.                        "Client started.~%")
  30.                (finish-output *standard-output*)
  31.                (format *standard-output*
  32.                        "Using SSL context ~a.~%"
  33.                        ssl-context-object)
  34.                (finish-output *standard-output*)
  35.                (setq active-socket-object (iolib/sockets:make-socket :connect :active
  36.                                                                      :address-family :internet
  37.                                                                      :type :stream
  38.                                                                      :external-format *external-format*
  39.                                                                      :ipv6 nil))
  40.                (when active-socket-object
  41.                  (iolib/sockets:connect active-socket-object
  42.                                         (iolib:lookup-hostname *server-hostname*)
  43.                                         :port *port*
  44.                                         :wait t)
  45.                  (when (iolib/sockets:socket-connected-p active-socket-object)
  46.                    (format *standard-output*
  47.                            "Connected to server ~a:~a via my local connection at ~a:~a!~%"
  48.                            (iolib/sockets:remote-host active-socket-object)
  49.                            (iolib/sockets:remote-port active-socket-object)
  50.                            (iolib/sockets:local-host active-socket-object)
  51.                            (iolib/sockets:local-port active-socket-object))
  52.                    (finish-output *standard-output*)
  53.                    (setq ssl-stream-object (cl+ssl:make-ssl-client-stream active-socket-object
  54.                                                                           :unwrap-stream-p t
  55.                                                                           :external-format *external-format*))
  56.                    (when ssl-stream-object
  57.                      (format *standard-output*
  58.                              "Created an SSL stream ~a.~%"
  59.                              ssl-stream-object)
  60.                      (finish-output *standard-output*)
  61.                      (format ssl-stream-object "Hi!")
  62.                      (force-output ssl-stream-object)
  63.                      (handler-case
  64.                          (loop
  65.                             (format *standard-output*
  66.                                     "Received -> ~a~%"
  67.                                     (read ssl-stream-object))
  68.                             (finish-output *standard-output*))
  69.  
  70.                        (end-of-file ()
  71.                          (format *standard-output*
  72.                                  "All data received.~%")
  73.                          (finish-output *standard-output*)))))))
  74.  
  75.            (cl+ssl:ssl-error-verify ()
  76.              (format *standard-output*
  77.                      "Failed to verify the server certificate.~%")
  78.              (finish-output *standard-output*)))
  79.  
  80.       ;; unwind-protect clean-up forms.
  81.  
  82.       (progn
  83.         (when ssl-stream-object
  84.           (format *standard-output*
  85.                   "Closing SSL stream.~%")
  86.           (finish-output *standard-output*)
  87.           (close ssl-stream-object))
  88.         (when active-socket-object
  89.           (format *standard-output*
  90.                   "Closing socket and exiting.~%")
  91.           (finish-output *standard-output*)
  92.           (close active-socket-object))))))
  93.  
  94. (defun main ()
  95.   "Launch client which comunicates over SSL."
  96.   (client))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement