File tree 6 files changed +25
-26
lines changed
6 files changed +25
-26
lines changed Original file line number Diff line number Diff line change 30
30
:authority (lsquic :host client)
31
31
:verb verb
32
32
:body body))
33
- (pipe (lsquic :new-stream client request)))
34
- (lsquic :wait-for-response pipe )))
33
+ (request-handler (lsquic :new-stream client request)))
34
+ (lsquic :: wait-for-response request-handler )))
35
35
36
36
(defmacro request-no-body (verb)
37
37
(let* ((sym-name (symbol-name verb))
Original file line number Diff line number Diff line change 132
132
(pop (request-queue client))))
133
133
134
134
(defmethod new-stream ((client client) request)
135
- (let ((pipe (make-instance ' pipe :request request)))
136
- (push-stream-ctx client pipe )
135
+ (let ((handler (make-instance ' request-handler :request request)))
136
+ (push-stream-ctx client handler )
137
137
(conn-make-stream (quic-conn client))
138
- pipe ))
138
+ handler ))
139
139
140
140
(defmethod get-fd ((client client))
141
141
(sb-bsd-sockets :socket-file-descriptor (socket (socket client))))
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 11
11
(:file " sockets" )
12
12
(:file " lsquic" )
13
13
(:file " request" )
14
- (:file " io " )
14
+ (:file " request-handler " )
15
15
(:file " ev" )
16
16
(:file " client" ))
17
17
:depends-on (:bordeaux-threads
20
20
:cffi-helpers
21
21
:lev
22
22
:split-sequence
23
+ :fast-http
23
24
:weird-pointers
24
25
:udp ))
Original file line number Diff line number Diff line change 28
28
(weird-pointers :save (pop-stream-ctx (weird-pointers :restore stream-ctx))))))
29
29
30
30
(defcallback stream-readf-cb :unsigned-int ((stream-ctx :pointer ) (buf :pointer ) (buf-len :unsigned-int ) (fin :int ))
31
- (format t " in stream-readf: ~A~% " (cffi :foreign-string-to-lisp buf))
32
- (force-output )
31
+ (let* ((request-handler (weird-pointers :restore stream-ctx)))
32
+ (multiple-value-bind (http header-completed-p completed-p)
33
+ (funcall (response-parser request-handler) (babel :string-to-octets (cffi :foreign-string-to-lisp buf)))
34
+ (when completed-p
35
+ (signal-completed request-handler))))
33
36
buf-len)
34
37
35
38
(defcallback cb-on-read :void ((stream :pointer ) (stream-ctx :pointer ))
Original file line number Diff line number Diff line change
1
+ (in-package :lsquic )
2
+
3
+ (defclass request-handler ()
4
+ ((request :initarg :request :accessor request)
5
+ (response-parser :initform (fast-http :make-parser (fast-http :make-http-response)) :accessor response-parser)
6
+ (completed-signal :initform (bt :make-semaphore) :accessor completed-signal)))
7
+
8
+ (defmethod signal-completed ((request-handler request-handler))
9
+ (bt :signal-semaphore (completed-signal request-handler)))
10
+
11
+ (defmethod wait-for-response ((request-handler request-handler))
12
+ (bt :wait-on-semaphore (completed-signal request-handler))
13
+ (response-parser request-handler))
You can’t perform that action at this time.
0 commit comments