Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (in-package #:test-ssl-client)
- ;;
- ;; Parameters.
- ;;
- (defparameter *port* 41971)
- (defparameter *server-hostname* "localhost")
- (defparameter *password* nil)
- ;;(defparameter *external-format* '(:utf-8 :eol-style :crlf))
- (defparameter *external-format* '(:iso-8859-1 :eol-style :lf))
- ;;
- ;; Functions.
- ;;
- (defun client ()
- (let ((active-socket-object nil)
- (ssl-context-object (cl+ssl:make-context))
- (ssl-stream-object nil))
- (unwind-protect
- ;; unwind-protect protected form.
- (handler-case
- (cl+ssl:with-global-context (ssl-context-object :auto-free-p t)
- (format *standard-output*
- "Client started.~%")
- (finish-output *standard-output*)
- (format *standard-output*
- "Using SSL context ~a.~%"
- ssl-context-object)
- (finish-output *standard-output*)
- (setq active-socket-object (iolib/sockets:make-socket :connect :active
- :address-family :internet
- :type :stream
- :external-format *external-format*
- :ipv6 nil))
- (when active-socket-object
- (iolib/sockets:connect active-socket-object
- (iolib:lookup-hostname *server-hostname*)
- :port *port*
- :wait t)
- (when (iolib/sockets:socket-connected-p active-socket-object)
- (format *standard-output*
- "Connected to server ~a:~a via my local connection at ~a:~a!~%"
- (iolib/sockets:remote-host active-socket-object)
- (iolib/sockets:remote-port active-socket-object)
- (iolib/sockets:local-host active-socket-object)
- (iolib/sockets:local-port active-socket-object))
- (finish-output *standard-output*)
- (setq ssl-stream-object (cl+ssl:make-ssl-client-stream active-socket-object
- :unwrap-stream-p t
- :external-format *external-format*))
- (when ssl-stream-object
- (format *standard-output*
- "Created an SSL stream ~a.~%"
- ssl-stream-object)
- (finish-output *standard-output*)
- (format ssl-stream-object "Hi!")
- (force-output ssl-stream-object)
- (handler-case
- (loop
- (format *standard-output*
- "Received -> ~a~%"
- (read ssl-stream-object))
- (finish-output *standard-output*))
- (end-of-file ()
- (format *standard-output*
- "All data received.~%")
- (finish-output *standard-output*)))))))
- (cl+ssl:ssl-error-verify ()
- (format *standard-output*
- "Failed to verify the server certificate.~%")
- (finish-output *standard-output*)))
- ;; unwind-protect clean-up forms.
- (progn
- (when ssl-stream-object
- (format *standard-output*
- "Closing SSL stream.~%")
- (finish-output *standard-output*)
- (close ssl-stream-object))
- (when active-socket-object
- (format *standard-output*
- "Closing socket and exiting.~%")
- (finish-output *standard-output*)
- (close active-socket-object))))))
- (defun main ()
- "Launch client which comunicates over SSL."
- (client))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement