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))))