mezzano.lisp - clic - Clic is an command line interactive client for gopher written in Common LISP (HTM) git clone git://bitreich.org/clic/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/clic/ (DIR) Log (DIR) Files (DIR) Refs (DIR) Tags (DIR) README (DIR) LICENSE --- mezzano.lisp (3698B) --- 1 ;;;; -*- Mode: Common-Lisp -*- 2 3 ;;;; See LICENSE for licensing information. 4 5 (in-package :usocket) 6 7 (defun handle-condition (condition &optional (socket nil)) 8 (typecase condition 9 ;; TODO: Add additional conditions as appropriate 10 (mezzano.network.tcp:connection-timed-out 11 (error 'timeout-error :socket socket)))) 12 13 (defun socket-connect (host port &key (protocol :stream) element-type 14 timeout deadline (nodelay nil nodelay-p) 15 local-host local-port) 16 (declare (ignore local-host local-port)) 17 (when deadline 18 (unsupported 'deadline 'socket-connect)) 19 (when (and nodelay-p (not (eq nodelay :if-supported))) 20 (unsupported 'nodelay 'socket-connect)) 21 (when timeout 22 (unsupported 'timeout 'socket-connect)) 23 (with-mapped-conditions () 24 (ecase protocol 25 (:stream 26 (let ((s (mezzano.network.tcp:tcp-stream-connect host port :element-type element-type))) 27 (make-stream-socket :socket s 28 :stream s))) 29 (:datagram 30 ;; TODO: 31 (unsupported 'datagram 'socket-connect))))) 32 33 (defun socket-listen (host port &key reuseaddress 34 (reuse-address nil reuse-address-supplied-p) 35 (backlog 5) 36 (element-type 'character)) 37 (declare (ignore reuseaddress reuse-address reuse-address-supplied-p)) 38 (let ((ip (mezzano.network.ip:make-ipv4-address host))) 39 (make-stream-server-socket (mezzano.network.tcp:tcp-listen ip port :backlog backlog) 40 :element-type element-type))) 41 42 (defun get-hosts-by-name (name) 43 (declare (ignore name))) 44 45 (defun get-host-by-address (address) 46 (declare (ignore address))) 47 48 (defun %setup-wait-list (wait-list) 49 (declare (ignore wait-list))) 50 51 (defun %add-waiter (wait-list waiter) 52 (declare (ignore wait-list waiter))) 53 54 (defun %remove-waiter (wait-list waiter) 55 (declare (ignore wait-list waiter))) 56 57 (defun wait-for-input-internal (wait-list &key timeout) 58 (declare (ignore wait-list timeout))) 59 60 (defmethod socket-close ((usocket stream-usocket)) 61 (with-mapped-conditions () 62 (close (socket-stream usocket)))) 63 64 (defmethod socket-close ((usocket stream-server-usocket)) 65 (with-mapped-conditions () 66 (mezzano.network.tcp:close-tcp-listener (socket usocket)))) 67 68 (defmethod socket-accept ((usocket stream-server-usocket) &key element-type) 69 (declare (ignore element-type)) 70 (with-mapped-conditions (usocket) 71 (let ((s (mezzano.network.tcp:tcp-accept (socket usocket)))) 72 (make-stream-socket :socket s 73 :stream s)))) 74 75 (defmethod get-local-name ((usocket stream-usocket)) 76 (values (get-local-address usocket) 77 (get-local-port usocket))) 78 79 (defmethod get-peer-name ((usocket stream-usocket)) 80 (values (get-peer-address usocket) 81 (get-peer-port usocket))) 82 83 (defmethod get-local-address ((usocket stream-usocket)) 84 (mezzano.network.ip:ipv4-address-to-string 85 (mezzano.network.tcp:tcp-connection-local-ip 86 (mezzano.network.tcp:tcp-stream-connection (socket usocket))))) 87 88 (defmethod get-local-port ((usocket stream-usocket)) 89 (mezzano.network.tcp:tcp-connection-local-port 90 (mezzano.network.tcp:tcp-stream-connection (socket usocket)))) 91 92 (defmethod get-peer-address ((usocket stream-usocket)) 93 (mezzano.network.ip:ipv4-address-to-string 94 (mezzano.network.tcp:tcp-connection-remote-ip 95 (mezzano.network.tcp:tcp-stream-connection (socket usocket))))) 96 97 (defmethod get-peer-port ((usocket stream-usocket)) 98 (mezzano.network.tcp:tcp-connection-remote-port 99 (mezzano.network.tcp:tcp-stream-connection (socket usocket))))