clucumber 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/README.md +4 -9
- data/lib/clucumber/clucumber-bootstrap.lisp +32 -0
- data/lib/clucumber/vendor/cl-interpol/alias.lisp +55 -0
- data/lib/clucumber/vendor/cl-interpol/cl-interpol.asd +56 -0
- data/lib/clucumber/vendor/cl-interpol/load.lisp +53 -0
- data/lib/clucumber/vendor/cl-interpol/packages.lisp +40 -0
- data/lib/clucumber/vendor/cl-interpol/read.lisp +716 -0
- data/lib/clucumber/vendor/cl-interpol/specials.lisp +113 -0
- data/lib/clucumber/vendor/cl-interpol/test/packages.lisp +34 -0
- data/lib/clucumber/vendor/cl-interpol/test/tests.lisp +128 -0
- data/lib/clucumber/vendor/cl-interpol/test.lisp +177 -0
- data/lib/clucumber/vendor/cl-interpol/test2.lisp +6254 -0
- data/lib/clucumber/vendor/cl-interpol/unicode.lisp +13912 -0
- data/lib/clucumber/vendor/cl-interpol/util.lisp +122 -0
- data/lib/clucumber/vendor/cl-ppcre/api.lisp +1262 -0
- data/lib/clucumber/vendor/cl-ppcre/charmap.lisp +152 -0
- data/lib/clucumber/vendor/cl-ppcre/charset.lisp +242 -0
- data/lib/clucumber/vendor/cl-ppcre/chartest.lisp +98 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-test.asd +34 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode/packages.lisp +38 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode/resolver.lisp +61 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre-unicode.asd +58 -0
- data/lib/clucumber/vendor/cl-ppcre/cl-ppcre.asd +79 -0
- data/lib/clucumber/vendor/cl-ppcre/closures.lisp +471 -0
- data/lib/clucumber/vendor/cl-ppcre/convert.lisp +875 -0
- data/lib/clucumber/vendor/cl-ppcre/errors.lisp +84 -0
- data/lib/clucumber/vendor/cl-ppcre/lexer.lisp +737 -0
- data/lib/clucumber/vendor/cl-ppcre/lispworks-defsystem.lisp +57 -0
- data/lib/clucumber/vendor/cl-ppcre/load.lisp +67 -0
- data/lib/clucumber/vendor/cl-ppcre/optimize.lisp +578 -0
- data/lib/clucumber/vendor/cl-ppcre/packages.lisp +68 -0
- data/lib/clucumber/vendor/cl-ppcre/parser.lisp +319 -0
- data/lib/clucumber/vendor/cl-ppcre/ppcre-tests.lisp +269 -0
- data/lib/clucumber/vendor/cl-ppcre/regex-class-util.lisp +555 -0
- data/lib/clucumber/vendor/cl-ppcre/regex-class.lisp +259 -0
- data/lib/clucumber/vendor/cl-ppcre/repetition-closures.lisp +833 -0
- data/lib/clucumber/vendor/cl-ppcre/scanner.lisp +506 -0
- data/lib/clucumber/vendor/cl-ppcre/specials.lisp +172 -0
- data/lib/clucumber/vendor/cl-ppcre/test/packages.lisp +37 -0
- data/lib/clucumber/vendor/cl-ppcre/test/perl-tests.lisp +150 -0
- data/lib/clucumber/vendor/cl-ppcre/test/tests.lisp +159 -0
- data/lib/clucumber/vendor/cl-ppcre/test/unicode-tests.lisp +80 -0
- data/lib/clucumber/vendor/cl-ppcre/util.lisp +201 -0
- data/lib/clucumber/vendor/cl-unicode/alias.lisp +135 -0
- data/lib/clucumber/vendor/cl-unicode/api.lisp +412 -0
- data/lib/clucumber/vendor/cl-unicode/build/char-info.lisp +133 -0
- data/lib/clucumber/vendor/cl-unicode/build/dump.lisp +239 -0
- data/lib/clucumber/vendor/cl-unicode/build/read.lisp +280 -0
- data/lib/clucumber/vendor/cl-unicode/build/util.lisp +182 -0
- data/lib/clucumber/vendor/cl-unicode/cl-unicode.asd +90 -0
- data/lib/clucumber/vendor/cl-unicode/conditions.lisp +54 -0
- data/lib/clucumber/vendor/cl-unicode/derived.lisp +120 -0
- data/lib/clucumber/vendor/cl-unicode/hash-tables.lisp +20 -0
- data/lib/clucumber/vendor/cl-unicode/lists.lisp +10 -0
- data/lib/clucumber/vendor/cl-unicode/methods.lisp +15 -0
- data/lib/clucumber/vendor/cl-unicode/packages.lisp +76 -0
- data/lib/clucumber/vendor/cl-unicode/specials.lisp +135 -0
- data/lib/clucumber/vendor/cl-unicode/test/packages.lisp +34 -0
- data/lib/clucumber/vendor/cl-unicode/test/tests.lisp +150 -0
- data/lib/clucumber/vendor/cl-unicode/test-functions.lisp +94 -0
- data/lib/clucumber/vendor/cl-unicode/util.lisp +274 -0
- data/lib/clucumber/vendor/lift/compare/fiveam-tests.lisp +14 -0
- data/lib/clucumber/vendor/lift/compare/lift-tests.lisp +13 -0
- data/lib/clucumber/vendor/lift/compare/rt-tests.lisp +16 -0
- data/lib/clucumber/vendor/lift/compare/xlunit-tests.lisp +15 -0
- data/lib/clucumber/vendor/lift/dev/changes.lisp +61 -0
- data/lib/clucumber/vendor/lift/dev/config.lisp +354 -0
- data/lib/clucumber/vendor/lift/dev/copy-file.lisp +117 -0
- data/lib/clucumber/vendor/lift/dev/introspection.lisp +232 -0
- data/lib/clucumber/vendor/lift/dev/lift-interface.lisp +56 -0
- data/lib/clucumber/vendor/lift/dev/lift-notes.lisp +202 -0
- data/lib/clucumber/vendor/lift/dev/lift-randomized.lisp +45 -0
- data/lib/clucumber/vendor/lift/dev/lift.lisp +2383 -0
- data/lib/clucumber/vendor/lift/dev/macros.lisp +229 -0
- data/lib/clucumber/vendor/lift/dev/measuring.lisp +156 -0
- data/lib/clucumber/vendor/lift/dev/packages.lisp +161 -0
- data/lib/clucumber/vendor/lift/dev/port.lisp +151 -0
- data/lib/clucumber/vendor/lift/dev/prototypes.lisp +282 -0
- data/lib/clucumber/vendor/lift/dev/random-testing.lisp +124 -0
- data/lib/clucumber/vendor/lift/dev/report-locations.lisp +13 -0
- data/lib/clucumber/vendor/lift/dev/reports.lisp +916 -0
- data/lib/clucumber/vendor/lift/dev/utilities.lisp +242 -0
- data/lib/clucumber/vendor/lift/docs/package.lisp +6 -0
- data/lib/clucumber/vendor/lift/docs/setup.lisp +17 -0
- data/lib/clucumber/vendor/lift/examples/basic-examples.lisp +289 -0
- data/lib/clucumber/vendor/lift/examples/random-testing.lisp +32 -0
- data/lib/clucumber/vendor/lift/lift-documentation.asd +28 -0
- data/lib/clucumber/vendor/lift/lift-test.asd +35 -0
- data/lib/clucumber/vendor/lift/lift.asd +77 -0
- data/lib/clucumber/vendor/lift/test/equality-tests.lisp +40 -0
- data/lib/clucumber/vendor/lift/test/finding-tests.lisp +32 -0
- data/lib/clucumber/vendor/lift/test/lift-test.lisp +783 -0
- data/lib/clucumber/vendor/lift/test/order-of-operations.lisp +54 -0
- data/lib/clucumber/vendor/lift/test/packages.lisp +17 -0
- data/lib/clucumber/vendor/lift/test/test-config-files.lisp +20 -0
- data/lib/clucumber/vendor/lift/test/test-dynamic-variables.lisp +57 -0
- data/lib/clucumber/vendor/lift/test/test-maximum-problems.lisp +74 -0
- data/lib/clucumber/vendor/lift/test/test-prototypes.lisp +278 -0
- data/lib/clucumber/vendor/lift/test/test-timeout.lisp +37 -0
- data/lib/clucumber/vendor/lift/test/tests-in-progress.lisp +62 -0
- data/lib/clucumber/vendor/lift/test/testsuite-expects.lisp +60 -0
- data/lib/clucumber/vendor/lift/timeout/package.lisp +13 -0
- data/lib/clucumber/vendor/lift/timeout/with-timeout.lisp +123 -0
- data/lib/clucumber/vendor/lift/website/stuff/Temp.lisp +34 -0
- data/lib/clucumber/vendor/st-json/st-json.asd +3 -0
- data/lib/clucumber/vendor/st-json/st-json.lisp +310 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/backtrace.lisp +127 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/fallback.lisp +10 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/map-backtrace.lisp +103 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/mucking.lisp +75 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/packages.lisp +13 -0
- data/lib/clucumber/vendor/trivial-backtrace/dev/utilities.lisp +104 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/packages.lisp +5 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/test-setup.lisp +4 -0
- data/lib/clucumber/vendor/trivial-backtrace/test/tests.lisp +16 -0
- data/lib/clucumber/vendor/trivial-backtrace/trivial-backtrace-test.asd +22 -0
- data/lib/clucumber/vendor/trivial-backtrace/trivial-backtrace.asd +35 -0
- data/lib/clucumber/vendor/usocket/backend/allegro.lisp +199 -0
- data/lib/clucumber/vendor/usocket/backend/armedbear.lisp +491 -0
- data/lib/clucumber/vendor/usocket/backend/clisp.lisp +260 -0
- data/lib/clucumber/vendor/usocket/backend/cmucl.lisp +266 -0
- data/lib/clucumber/vendor/usocket/backend/lispworks.lisp +741 -0
- data/lib/clucumber/vendor/usocket/backend/mcl.lisp +369 -0
- data/lib/clucumber/vendor/usocket/backend/openmcl.lisp +206 -0
- data/lib/clucumber/vendor/usocket/backend/sbcl.lisp +424 -0
- data/lib/clucumber/vendor/usocket/backend/scl.lisp +261 -0
- data/lib/clucumber/vendor/usocket/condition.lisp +227 -0
- data/lib/clucumber/vendor/usocket/package.lisp +82 -0
- data/lib/clucumber/vendor/usocket/server.lisp +45 -0
- data/lib/clucumber/vendor/usocket/test/package.lisp +13 -0
- data/lib/clucumber/vendor/usocket/test/test-usocket.lisp +166 -0
- data/lib/clucumber/vendor/usocket/usocket-test.asd +26 -0
- data/lib/clucumber/vendor/usocket/usocket.asd +37 -0
- data/lib/clucumber/vendor/usocket/usocket.lisp +542 -0
- data/lib/clucumber/vendor/usocket/vendor/kqueue.lisp +1 -0
- data/lib/clucumber/vendor/usocket/vendor/split-sequence.lisp +245 -0
- data/lib/clucumber.rb +29 -7
- metadata +151 -5
@@ -0,0 +1,227 @@
|
|
1
|
+
;;;; $Id: condition.lisp 500 2009-09-17 07:01:50Z hhubner $
|
2
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/condition.lisp $
|
3
|
+
|
4
|
+
;;;; See LICENSE for licensing information.
|
5
|
+
|
6
|
+
(in-package :usocket)
|
7
|
+
|
8
|
+
;; Condition signalled by operations with unsupported arguments
|
9
|
+
;; For trivial-sockets compatibility.
|
10
|
+
|
11
|
+
(define-condition insufficient-implementation (error)
|
12
|
+
((feature :initarg :feature :reader feature)
|
13
|
+
(context :initarg :context :reader context
|
14
|
+
:documentation "String designator of the public API function which
|
15
|
+
the feature belongs to."))
|
16
|
+
(:documentation "The ancestor of all errors usocket may generate
|
17
|
+
because of insufficient support from the underlying implementation
|
18
|
+
with respect to the arguments given to `function'.
|
19
|
+
|
20
|
+
One call may signal several errors, if the caller allows processing
|
21
|
+
to continue.
|
22
|
+
"))
|
23
|
+
|
24
|
+
(define-condition unsupported (insufficient-implementation)
|
25
|
+
((minimum :initarg :minimum :reader minimum
|
26
|
+
:documentation "Indicates the minimal version of the
|
27
|
+
implementation required to support the requested feature."))
|
28
|
+
(:report (lambda (c stream)
|
29
|
+
(format stream "~A in ~A is unsupported."
|
30
|
+
(feature c) (context c))
|
31
|
+
(when (minimum c)
|
32
|
+
(format stream " Minimum version (~A) is required."
|
33
|
+
(minimum c)))))
|
34
|
+
(:documentation "Signalled when the underlying implementation
|
35
|
+
doesn't allow supporting the requested feature.
|
36
|
+
|
37
|
+
When you see this error, go bug your vendor/implementation developer!"))
|
38
|
+
|
39
|
+
(define-condition unimplemented (insufficient-implementation)
|
40
|
+
()
|
41
|
+
(:report (lambda (c stream)
|
42
|
+
(format stream "~A in ~A is unimplemented."
|
43
|
+
(feature c) (context c))))
|
44
|
+
(:documentation "Signalled if a certain feature might be implemented,
|
45
|
+
based on the features of the underlying implementation, but hasn't
|
46
|
+
been implemented yet."))
|
47
|
+
|
48
|
+
;; Conditions raised by sockets operations
|
49
|
+
|
50
|
+
(define-condition socket-condition (condition)
|
51
|
+
((socket :initarg :socket
|
52
|
+
:accessor usocket-socket))
|
53
|
+
;;###FIXME: no slots (yet); should at least be the affected usocket...
|
54
|
+
(:documentation "Parent condition for all socket related conditions."))
|
55
|
+
|
56
|
+
(define-condition socket-error (socket-condition error)
|
57
|
+
() ;; no slots (yet)
|
58
|
+
(:documentation "Parent error for all socket related errors"))
|
59
|
+
|
60
|
+
(define-condition ns-condition (condition)
|
61
|
+
((host-or-ip :initarg :host-or-ip
|
62
|
+
:accessor host-or-ip))
|
63
|
+
(:documentation "Parent condition for all name resolution conditions."))
|
64
|
+
|
65
|
+
(define-condition ns-error (ns-condition error)
|
66
|
+
()
|
67
|
+
(:documentation "Parent error for all name resolution errors."))
|
68
|
+
|
69
|
+
(eval-when (:compile-toplevel :load-toplevel :execute)
|
70
|
+
(defun define-usocket-condition-class (class &rest parents)
|
71
|
+
`(progn
|
72
|
+
(define-condition ,class ,parents ())
|
73
|
+
(export ',class))))
|
74
|
+
|
75
|
+
(defmacro define-usocket-condition-classes (class-list parents)
|
76
|
+
`(progn ,@(mapcar #'(lambda (x)
|
77
|
+
(apply #'define-usocket-condition-class
|
78
|
+
x parents))
|
79
|
+
class-list)))
|
80
|
+
|
81
|
+
;; Mass define and export our conditions
|
82
|
+
(define-usocket-condition-classes
|
83
|
+
(interrupted-condition)
|
84
|
+
(socket-condition))
|
85
|
+
|
86
|
+
(define-condition unknown-condition (socket-condition)
|
87
|
+
((real-condition :initarg :real-condition
|
88
|
+
:accessor usocket-real-condition))
|
89
|
+
(:documentation "Condition raised when there's no other - more applicable -
|
90
|
+
condition available."))
|
91
|
+
|
92
|
+
|
93
|
+
;; Mass define and export our errors
|
94
|
+
(define-usocket-condition-classes
|
95
|
+
(address-in-use-error
|
96
|
+
address-not-available-error
|
97
|
+
bad-file-descriptor-error
|
98
|
+
connection-refused-error
|
99
|
+
connection-aborted-error
|
100
|
+
connection-reset-error
|
101
|
+
invalid-argument-error
|
102
|
+
no-buffers-error
|
103
|
+
operation-not-supported-error
|
104
|
+
operation-not-permitted-error
|
105
|
+
protocol-not-supported-error
|
106
|
+
socket-type-not-supported-error
|
107
|
+
network-unreachable-error
|
108
|
+
network-down-error
|
109
|
+
network-reset-error
|
110
|
+
host-down-error
|
111
|
+
host-unreachable-error
|
112
|
+
shutdown-error
|
113
|
+
timeout-error
|
114
|
+
deadline-timeout-error
|
115
|
+
invalid-socket-error
|
116
|
+
invalid-socket-stream-error)
|
117
|
+
(socket-error))
|
118
|
+
|
119
|
+
(define-condition unknown-error (socket-error)
|
120
|
+
((real-error :initarg :real-error
|
121
|
+
:accessor usocket-real-error))
|
122
|
+
(:report (lambda (c stream)
|
123
|
+
(typecase c
|
124
|
+
(simple-condition
|
125
|
+
(format stream
|
126
|
+
(simple-condition-format-control (usocket-real-error c))
|
127
|
+
(simple-condition-format-arguments (usocket-real-error c))))
|
128
|
+
(otherwise
|
129
|
+
(format stream "The condition ~A occurred." (usocket-real-error c))))))
|
130
|
+
(:documentation "Error raised when there's no other - more applicable -
|
131
|
+
error available."))
|
132
|
+
|
133
|
+
(define-usocket-condition-classes
|
134
|
+
(ns-try-again)
|
135
|
+
(ns-condition))
|
136
|
+
|
137
|
+
(define-condition ns-unknown-condition (ns-condition)
|
138
|
+
((real-error :initarg :real-condition
|
139
|
+
:accessor ns-real-condition))
|
140
|
+
(:documentation "Condition raised when there's no other - more applicable -
|
141
|
+
condition available."))
|
142
|
+
|
143
|
+
(define-usocket-condition-classes
|
144
|
+
;; the no-data error code in the Unix 98 api
|
145
|
+
;; isn't really an error: there's just no data to return.
|
146
|
+
;; with lisp, we just return NIL (indicating no data) instead of
|
147
|
+
;; raising an exception...
|
148
|
+
(ns-host-not-found-error
|
149
|
+
ns-no-recovery-error)
|
150
|
+
(ns-error))
|
151
|
+
|
152
|
+
(define-condition ns-unknown-error (ns-error)
|
153
|
+
((real-error :initarg :real-error
|
154
|
+
:accessor ns-real-error))
|
155
|
+
(:report (lambda (c stream)
|
156
|
+
(typecase c
|
157
|
+
(simple-condition
|
158
|
+
(format stream
|
159
|
+
(simple-condition-format-control (usocket-real-error c))
|
160
|
+
(simple-condition-format-arguments (usocket-real-error c))))
|
161
|
+
(otherwise
|
162
|
+
(format stream "The condition ~A occurred." (usocket-real-error c))))))
|
163
|
+
(:documentation "Error raised when there's no other - more applicable -
|
164
|
+
error available."))
|
165
|
+
|
166
|
+
(defmacro with-mapped-conditions ((&optional socket) &body body)
|
167
|
+
`(handler-bind ((condition #'(lambda (c) (handle-condition c ,socket))))
|
168
|
+
,@body))
|
169
|
+
|
170
|
+
(defparameter +unix-errno-condition-map+
|
171
|
+
`(((11) . retry-condition) ;; EAGAIN
|
172
|
+
((35) . retry-condition) ;; EDEADLCK
|
173
|
+
((4) . interrupted-condition))) ;; EINTR
|
174
|
+
|
175
|
+
(defparameter +unix-errno-error-map+
|
176
|
+
;;### the first column is for non-(linux or srv4) systems
|
177
|
+
;; the second for linux
|
178
|
+
;; the third for srv4
|
179
|
+
;;###FIXME: How do I determine on which Unix we're running
|
180
|
+
;; (at least in clisp and sbcl; I know about cmucl...)
|
181
|
+
;; The table below works under the assumption we'll *only* see
|
182
|
+
;; socket associated errors...
|
183
|
+
`(((48 98) . address-in-use-error)
|
184
|
+
((49 99) . address-not-available-error)
|
185
|
+
((9) . bad-file-descriptor-error)
|
186
|
+
((61 111) . connection-refused-error)
|
187
|
+
((54 104) . connection-reset-error)
|
188
|
+
((53 103) . connection-aborted-error)
|
189
|
+
((22) . invalid-argument-error)
|
190
|
+
((55 105) . no-buffers-error)
|
191
|
+
((12) . out-of-memory-error)
|
192
|
+
((45 95) . operation-not-supported-error)
|
193
|
+
((1) . operation-not-permitted-error)
|
194
|
+
((43 92) . protocol-not-supported-error)
|
195
|
+
((44 93) . socket-type-not-supported-error)
|
196
|
+
((51 101) . network-unreachable-error)
|
197
|
+
((50 100) . network-down-error)
|
198
|
+
((52 102) . network-reset-error)
|
199
|
+
((58 108) . already-shutdown-error)
|
200
|
+
((60 110) . timeout-error)
|
201
|
+
((64 112) . host-down-error)
|
202
|
+
((65 113) . host-unreachable-error)))
|
203
|
+
|
204
|
+
|
205
|
+
(defun map-errno-condition (errno)
|
206
|
+
(cdr (assoc errno +unix-errno-error-map+ :test #'member)))
|
207
|
+
|
208
|
+
|
209
|
+
(defun map-errno-error (errno)
|
210
|
+
(cdr (assoc errno +unix-errno-error-map+ :test #'member)))
|
211
|
+
|
212
|
+
|
213
|
+
(defparameter +unix-ns-error-map+
|
214
|
+
`((1 . ns-host-not-found-error)
|
215
|
+
(2 . ns-try-again-condition)
|
216
|
+
(3 . ns-no-recovery-error)))
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
(defmacro unsupported (feature context &key minimum)
|
221
|
+
`(cerror "Ignore it and continue" 'unsupported
|
222
|
+
:feature ,feature
|
223
|
+
:context ,context
|
224
|
+
:minimum ,minimum))
|
225
|
+
|
226
|
+
(defmacro unimplemented (feature context)
|
227
|
+
`(signal 'unimplemented :feature ,feature :context ,context))
|
@@ -0,0 +1,82 @@
|
|
1
|
+
;;;; $Id: package.lisp 515 2010-01-07 18:26:06Z ctian $
|
2
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/package.lisp $
|
3
|
+
|
4
|
+
;;;; See the LICENSE file for licensing information.
|
5
|
+
|
6
|
+
(in-package :usocket-system)
|
7
|
+
|
8
|
+
#+lispworks
|
9
|
+
(eval-when (:compile-toplevel :load-toplevel :execute)
|
10
|
+
(require "comm"))
|
11
|
+
|
12
|
+
(defpackage :usocket
|
13
|
+
(:use :common-lisp)
|
14
|
+
(:export #:*wildcard-host*
|
15
|
+
#:*auto-port*
|
16
|
+
|
17
|
+
#:*remote-host* ; special variables (udp)
|
18
|
+
#:*remote-port*
|
19
|
+
|
20
|
+
#:socket-connect ; socket constructors and methods
|
21
|
+
#:socket-listen
|
22
|
+
#:socket-accept
|
23
|
+
#:socket-close
|
24
|
+
#:get-local-address
|
25
|
+
#:get-peer-address
|
26
|
+
#:get-local-port
|
27
|
+
#:get-peer-port
|
28
|
+
#:get-local-name
|
29
|
+
#:get-peer-name
|
30
|
+
|
31
|
+
#:socket-send ; udp function (send)
|
32
|
+
#:socket-receive ; udp function (receive)
|
33
|
+
#:socket-server ; udp server
|
34
|
+
|
35
|
+
#:wait-for-input ; waiting for input-ready state (select() like)
|
36
|
+
#:make-wait-list
|
37
|
+
#:add-waiter
|
38
|
+
#:remove-waiter
|
39
|
+
#:remove-all-waiters
|
40
|
+
|
41
|
+
#:with-connected-socket ; convenience macros
|
42
|
+
#:with-server-socket
|
43
|
+
#:with-client-socket
|
44
|
+
#:with-socket-listener
|
45
|
+
|
46
|
+
#:usocket ; socket object and accessors
|
47
|
+
#:stream-usocket
|
48
|
+
#:stream-server-usocket
|
49
|
+
#:socket
|
50
|
+
#:socket-stream
|
51
|
+
#:datagram-usocket
|
52
|
+
|
53
|
+
#:host-byte-order ; IP(v4) utility functions
|
54
|
+
#:hbo-to-dotted-quad
|
55
|
+
#:hbo-to-vector-quad
|
56
|
+
#:vector-quad-to-dotted-quad
|
57
|
+
#:dotted-quad-to-vector-quad
|
58
|
+
#:ip=
|
59
|
+
#:ip/=
|
60
|
+
|
61
|
+
#:integer-to-octet-buffer ; Network utility functions
|
62
|
+
#:octet-buffer-to-integer
|
63
|
+
#:port-to-octet-buffer
|
64
|
+
#:port-from-octet-buffer
|
65
|
+
#:ip-to-octet-buffer
|
66
|
+
#:ip-from-octet-buffer
|
67
|
+
|
68
|
+
#:with-mapped-conditions
|
69
|
+
|
70
|
+
#:socket-condition ; conditions
|
71
|
+
#:ns-condition
|
72
|
+
#:socket-error ; errors
|
73
|
+
#:ns-error
|
74
|
+
#:unknown-condition
|
75
|
+
#:ns-unknown-condition
|
76
|
+
#:unknown-error
|
77
|
+
#:ns-unknown-error
|
78
|
+
#:socket-warning ; warnings (udp)
|
79
|
+
|
80
|
+
#:insufficient-implementation ; conditions regarding usocket support level
|
81
|
+
#:unsupported
|
82
|
+
#:unimplemented))
|
@@ -0,0 +1,45 @@
|
|
1
|
+
;;;; $Id: server.lisp 515 2010-01-07 18:26:06Z ctian $
|
2
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/server.lisp $
|
3
|
+
|
4
|
+
(in-package :usocket)
|
5
|
+
|
6
|
+
(defvar *remote-host*)
|
7
|
+
(defvar *remote-port*)
|
8
|
+
|
9
|
+
(defun socket-server (host port function &optional arguments
|
10
|
+
&key (timeout 1)
|
11
|
+
(max-buffer-size +max-datagram-packet-size+))
|
12
|
+
(let ((socket (socket-connect nil nil
|
13
|
+
:protocol :datagram
|
14
|
+
:local-host host
|
15
|
+
:local-port port))
|
16
|
+
(buffer (make-array max-buffer-size
|
17
|
+
:element-type '(unsigned-byte 8)
|
18
|
+
:initial-element 0)))
|
19
|
+
(unwind-protect
|
20
|
+
(loop (progn
|
21
|
+
(multiple-value-bind (sockets real-time)
|
22
|
+
(wait-for-input socket :timeout timeout)
|
23
|
+
(declare (ignore sockets))
|
24
|
+
(when real-time
|
25
|
+
(multiple-value-bind (recv n *remote-host* *remote-port*)
|
26
|
+
(socket-receive socket buffer max-buffer-size)
|
27
|
+
(declare (ignore recv))
|
28
|
+
(if (plusp n)
|
29
|
+
(progn
|
30
|
+
(let ((reply
|
31
|
+
(apply function
|
32
|
+
(cons (subseq buffer 0 n) arguments))))
|
33
|
+
(when reply
|
34
|
+
(replace buffer reply)
|
35
|
+
(let ((n (socket-send socket buffer (length reply)
|
36
|
+
:host *remote-host*
|
37
|
+
:port *remote-port*)))
|
38
|
+
(when (minusp n)
|
39
|
+
(error "send error: ~A~%" n))))))
|
40
|
+
(error "receive error: ~A" n))))
|
41
|
+
#+scl (when thread:*quitting-lisp*
|
42
|
+
(return))
|
43
|
+
#+(and cmu mp) (mp:process-yield))))
|
44
|
+
(socket-close socket)
|
45
|
+
(values))))
|
@@ -0,0 +1,13 @@
|
|
1
|
+
;;;; $Id: package.lisp 57 2006-02-07 19:39:46Z ehuelsmann $
|
2
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/test/package.lisp $
|
3
|
+
|
4
|
+
;;;; See the LICENSE file for licensing information.
|
5
|
+
|
6
|
+
(in-package :cl-user)
|
7
|
+
|
8
|
+
(eval-when (:execute :load-toplevel :compile-toplevel)
|
9
|
+
(defpackage :usocket-test
|
10
|
+
(:use :cl :regression-test)
|
11
|
+
(:nicknames :usoct)
|
12
|
+
(:export :do-tests :run-usocket-tests)))
|
13
|
+
|
@@ -0,0 +1,166 @@
|
|
1
|
+
;;;; $Id: test-usocket.lisp 510 2010-01-04 07:49:39Z ctian $
|
2
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/test/test-usocket.lisp $
|
3
|
+
|
4
|
+
;;;; See LICENSE for licensing information.
|
5
|
+
|
6
|
+
(in-package :usocket-test)
|
7
|
+
|
8
|
+
;; The parameters below may need adjustments to match the system
|
9
|
+
;; the tests are run on.
|
10
|
+
(defparameter +non-existing-host+ "192.168.1.199")
|
11
|
+
(defparameter +unused-local-port+ 15213)
|
12
|
+
(defparameter *soc1* (usocket::make-stream-socket :socket :my-socket
|
13
|
+
:stream :my-stream))
|
14
|
+
(eval-when (:compile-toplevel :load-toplevel :execute)
|
15
|
+
(defparameter +local-ip+ #(192 168 1 25))
|
16
|
+
(defparameter +common-lisp-net+
|
17
|
+
#+ignore #(80 68 86 115) ;; common-lisp.net IP (not valid as of 2010-01-03
|
18
|
+
(first (usocket::get-hosts-by-name "common-lisp.net"))))
|
19
|
+
|
20
|
+
(defmacro with-caught-conditions ((expect throw) &body body)
|
21
|
+
`(catch 'caught-error
|
22
|
+
(handler-case
|
23
|
+
(progn ,@body)
|
24
|
+
(usocket:unknown-error (c) (if (typep c ,expect)
|
25
|
+
(throw 'caught-error ,throw)
|
26
|
+
(progn
|
27
|
+
(describe c)
|
28
|
+
(describe
|
29
|
+
(usocket::usocket-real-error c))
|
30
|
+
c)))
|
31
|
+
(error (c) (if (typep c ,expect)
|
32
|
+
(throw 'caught-error ,throw)
|
33
|
+
(progn
|
34
|
+
(describe c)
|
35
|
+
c)))
|
36
|
+
(usocket:unknown-condition (c) (if (typep c ,expect)
|
37
|
+
(throw 'caught-error ,throw)
|
38
|
+
(progn
|
39
|
+
(describe c)
|
40
|
+
(describe
|
41
|
+
(usocket::usocket-real-condition c))
|
42
|
+
c)))
|
43
|
+
(condition (c) (if (typep c ,expect)
|
44
|
+
(throw 'caught-error ,throw)
|
45
|
+
(progn
|
46
|
+
(describe c)
|
47
|
+
c))))))
|
48
|
+
|
49
|
+
(deftest make-socket.1 (usocket:socket *soc1*) :my-socket)
|
50
|
+
(deftest make-socket.2 (usocket:socket-stream *soc1*) :my-stream)
|
51
|
+
|
52
|
+
(deftest socket-no-connect.1
|
53
|
+
(with-caught-conditions ('usocket:socket-error nil)
|
54
|
+
(usocket:socket-connect "127.0.0.0" +unused-local-port+ :timeout 0)
|
55
|
+
t)
|
56
|
+
nil)
|
57
|
+
(deftest socket-no-connect.2
|
58
|
+
(with-caught-conditions ('usocket:socket-error nil)
|
59
|
+
(usocket:socket-connect #(127 0 0 0) +unused-local-port+ :timeout 0)
|
60
|
+
t)
|
61
|
+
nil)
|
62
|
+
(deftest socket-no-connect.3
|
63
|
+
(with-caught-conditions ('usocket:socket-error nil)
|
64
|
+
(usocket:socket-connect 2130706432 +unused-local-port+ :timeout 0) ;; == #(127 0 0 0)
|
65
|
+
t)
|
66
|
+
nil)
|
67
|
+
|
68
|
+
(deftest socket-failure.1
|
69
|
+
(with-caught-conditions (#-(or cmu lispworks armedbear openmcl mcl)
|
70
|
+
'usocket:network-unreachable-error
|
71
|
+
#+(or cmu lispworks armedbear)
|
72
|
+
'usocket:unknown-error
|
73
|
+
#+(or openmcl mcl)
|
74
|
+
'usocket:timeout-error
|
75
|
+
nil)
|
76
|
+
(usocket:socket-connect 2130706432 +unused-local-port+ :timeout 0) ;; == #(127 0 0 0)
|
77
|
+
:unreach)
|
78
|
+
nil)
|
79
|
+
(deftest socket-failure.2
|
80
|
+
(with-caught-conditions (#+(or lispworks armedbear)
|
81
|
+
'usocket:unknown-error
|
82
|
+
#+cmu
|
83
|
+
'usocket:network-unreachable-error
|
84
|
+
#+(or openmcl mcl)
|
85
|
+
'usocket:timeout-error
|
86
|
+
#-(or lispworks armedbear cmu openmcl mcl)
|
87
|
+
'usocket:host-unreachable-error
|
88
|
+
nil)
|
89
|
+
(usocket:socket-connect +non-existing-host+ 80 :timeout 0) ;; 80 = just a port
|
90
|
+
:unreach)
|
91
|
+
nil)
|
92
|
+
|
93
|
+
|
94
|
+
;; let's hope c-l.net doesn't move soon, or that people start to
|
95
|
+
;; test usocket like crazy..
|
96
|
+
(deftest socket-connect.1
|
97
|
+
(with-caught-conditions (nil nil)
|
98
|
+
(let ((sock (usocket:socket-connect "common-lisp.net" 80)))
|
99
|
+
(unwind-protect
|
100
|
+
(when (typep sock 'usocket:usocket) t)
|
101
|
+
(usocket:socket-close sock))))
|
102
|
+
t)
|
103
|
+
(deftest socket-connect.2
|
104
|
+
(with-caught-conditions (nil nil)
|
105
|
+
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
|
106
|
+
(unwind-protect
|
107
|
+
(when (typep sock 'usocket:usocket) t)
|
108
|
+
(usocket:socket-close sock))))
|
109
|
+
t)
|
110
|
+
(deftest socket-connect.3
|
111
|
+
(with-caught-conditions (nil nil)
|
112
|
+
(let ((sock (usocket:socket-connect (usocket::host-byte-order +common-lisp-net+) 80)))
|
113
|
+
(unwind-protect
|
114
|
+
(when (typep sock 'usocket:usocket) t)
|
115
|
+
(usocket:socket-close sock))))
|
116
|
+
t)
|
117
|
+
|
118
|
+
;; let's hope c-l.net doesn't change its software any time soon
|
119
|
+
(deftest socket-stream.1
|
120
|
+
(with-caught-conditions (nil nil)
|
121
|
+
(let ((sock (usocket:socket-connect "common-lisp.net" 80)))
|
122
|
+
(unwind-protect
|
123
|
+
(progn
|
124
|
+
(format (usocket:socket-stream sock)
|
125
|
+
"GET / HTTP/1.0~c~c~c~c"
|
126
|
+
#\Return #\linefeed #\Return #\linefeed)
|
127
|
+
(force-output (usocket:socket-stream sock))
|
128
|
+
(read-line (usocket:socket-stream sock)))
|
129
|
+
(usocket:socket-close sock))))
|
130
|
+
#+(or mcl clisp) "HTTP/1.1 200 OK"
|
131
|
+
#-(or clisp mcl) #.(format nil "HTTP/1.1 200 OK~A" #\Return) nil)
|
132
|
+
|
133
|
+
(deftest socket-name.1
|
134
|
+
(with-caught-conditions (nil nil)
|
135
|
+
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
|
136
|
+
(unwind-protect
|
137
|
+
(usocket::get-peer-address sock)
|
138
|
+
(usocket:socket-close sock))))
|
139
|
+
#.+common-lisp-net+)
|
140
|
+
(deftest socket-name.2
|
141
|
+
(with-caught-conditions (nil nil)
|
142
|
+
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
|
143
|
+
(unwind-protect
|
144
|
+
(usocket::get-peer-port sock)
|
145
|
+
(usocket:socket-close sock))))
|
146
|
+
80)
|
147
|
+
(deftest socket-name.3
|
148
|
+
(with-caught-conditions (nil nil)
|
149
|
+
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
|
150
|
+
(unwind-protect
|
151
|
+
(usocket::get-peer-name sock)
|
152
|
+
(usocket:socket-close sock))))
|
153
|
+
#.+common-lisp-net+ 80)
|
154
|
+
(deftest socket-name.4
|
155
|
+
(with-caught-conditions (nil nil)
|
156
|
+
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
|
157
|
+
(unwind-protect
|
158
|
+
(usocket::get-local-address sock)
|
159
|
+
(usocket:socket-close sock))))
|
160
|
+
#.+local-ip+)
|
161
|
+
|
162
|
+
|
163
|
+
(defun run-usocket-tests ()
|
164
|
+
(do-tests))
|
165
|
+
|
166
|
+
;;; (usoct::run-usocket-tests )
|
@@ -0,0 +1,26 @@
|
|
1
|
+
;;;; -*- Mode: Lisp -*-
|
2
|
+
;;;; $Id: usocket-test.asd 46 2006-02-06 20:50:07Z ehuelsmann $
|
3
|
+
;;;; $URL: svn+ssh://common-lisp.net/project/usocket/svn/usocket/trunk/test/usocket-test.asd $
|
4
|
+
|
5
|
+
;;;; See the LICENSE file for licensing information.
|
6
|
+
|
7
|
+
(in-package :cl-user)
|
8
|
+
|
9
|
+
(unless (find-package ':usocket-system)
|
10
|
+
(make-package ':usocket-system
|
11
|
+
:use '(:cl :asdf)))
|
12
|
+
|
13
|
+
(in-package :usocket-system)
|
14
|
+
|
15
|
+
(defsystem usocket-test
|
16
|
+
:name "usocket test"
|
17
|
+
:author "Erik Enge"
|
18
|
+
:version "0.1.0"
|
19
|
+
:licence "MIT"
|
20
|
+
:description "Tests for usocket"
|
21
|
+
:depends-on (:usocket
|
22
|
+
:rt)
|
23
|
+
:components ((:module "test"
|
24
|
+
:components ((:file "package")
|
25
|
+
(:file "test-usocket"
|
26
|
+
:depends-on ("package"))))))
|
@@ -0,0 +1,37 @@
|
|
1
|
+
;;;; -*- Mode: Lisp -*-
|
2
|
+
;;;; $Id: usocket.asd 519 2010-01-13 09:48:05Z ctian $
|
3
|
+
;;;; $URL: svn://common-lisp.net/project/usocket/svn/usocket/trunk/usocket.asd $
|
4
|
+
|
5
|
+
;;;; See the LICENSE file for licensing information.
|
6
|
+
|
7
|
+
(in-package #:cl-user)
|
8
|
+
|
9
|
+
(defpackage #:usocket-system
|
10
|
+
(:use #:cl #:asdf))
|
11
|
+
|
12
|
+
(in-package #:usocket-system)
|
13
|
+
|
14
|
+
(defsystem usocket
|
15
|
+
:name "usocket"
|
16
|
+
:author "Erik Enge & Erik Huelsmann"
|
17
|
+
:version "0.5.0"
|
18
|
+
:licence "MIT"
|
19
|
+
:description "Universal socket library for Common Lisp"
|
20
|
+
:depends-on (#+sbcl :sb-bsd-sockets)
|
21
|
+
:components ((:file "package")
|
22
|
+
(:module "vendor" :depends-on ("package")
|
23
|
+
:components ((:file "split-sequence")
|
24
|
+
#+mcl (:file "kqueue")))
|
25
|
+
(:file "usocket" :depends-on ("vendor"))
|
26
|
+
(:file "condition" :depends-on ("usocket"))
|
27
|
+
(:module "backend" :depends-on ("condition")
|
28
|
+
:components (#+clisp (:file "clisp")
|
29
|
+
#+cmu (:file "cmucl")
|
30
|
+
#+scl (:file "scl")
|
31
|
+
#+(or sbcl ecl) (:file "sbcl")
|
32
|
+
#+lispworks (:file "lispworks")
|
33
|
+
#+mcl (:file "mcl")
|
34
|
+
#+openmcl (:file "openmcl")
|
35
|
+
#+allegro (:file "allegro")
|
36
|
+
#+armedbear (:file "armedbear")))
|
37
|
+
(:file "server" :depends-on ("backend"))))
|