|
29 | 29 | (;; This lock protects the request-queue
|
30 | 30 | (rq-lock :initform (bt:make-lock) :accessor rq-lock)
|
31 | 31 | (request-queue :initform '() :accessor request-queue)
|
32 |
| - (host :initarg :host :initform (error "You must supply a host to connect to")) |
33 |
| - (port :initarg :port :initform 443) |
| 32 | + (host :initarg :host :initform (error "You must supply a host to connect to") :accessor host) |
| 33 | + (port :initarg :port :initform 443 :accessor port) |
34 | 34 | (engine-version :initarg :quic-version :initform (error "You must supply a QUIC protocol version string")
|
35 | 35 | :accessor engine-version)
|
36 | 36 | (engine-settings :initform (cffi-helpers:safe-foreign-alloc '(:struct engine-settings))
|
|
58 | 58 | ;; TODO: write a with-foreign-alloc macro, if can't borrow one
|
59 | 59 | ;; from somewhere, instead of this foreign-alloc that we don't
|
60 | 60 | ;; free.
|
61 |
| - (let ((errbuf (foreign-alloc :char :count 256))) |
| 61 | + (let* ((bufsize 256) |
| 62 | + (errbuf (foreign-alloc :char :count bufsize))) |
62 | 63 | (with-foreign-slots ((es-versions es-ql-bits) engine-settings (:struct engine-settings))
|
63 |
| - (cffi-helpers:with-pointer-to-int (bufsize 256) |
64 |
| - (setf es-ql-bits 0) |
65 |
| - (setf es-versions (logior es-versions (ash 1 (str->quic-version engine-version)))) |
66 |
| - (when (not (eq 0 (engine-check-settings engine-settings lseng-http errbuf bufsize))) |
67 |
| - (error 'invalid-settings)) |
68 |
| - (logger-initialize log-level) |
69 |
| - (with-foreign-slots ((ea-settings |
70 |
| - ea-packets-out |
71 |
| - ea-packets-out-ctx |
72 |
| - ea-stream-if |
73 |
| - ea-stream-if-ctx) engine-api (:struct engine-api)) |
74 |
| - (setf ea-settings engine-settings) |
75 |
| - (setf ea-stream-if client-callbacks) |
76 |
| - (setf ea-packets-out (callback cb-packets-out)))))))) |
| 64 | + (setf es-ql-bits 0) |
| 65 | + (setf es-versions (logior es-versions (ash 1 (str->quic-version engine-version)))) |
| 66 | + (when (not (eq 0 (engine-check-settings engine-settings lseng-http errbuf bufsize))) |
| 67 | + (error 'invalid-settings)) |
| 68 | + (logger-initialize log-level) |
| 69 | + (with-foreign-slots ((ea-settings |
| 70 | + ea-packets-out |
| 71 | + ea-packets-out-ctx |
| 72 | + ea-stream-if |
| 73 | + ea-stream-if-ctx) engine-api (:struct engine-api)) |
| 74 | + (setf ea-settings engine-settings) |
| 75 | + (setf ea-stream-if client-callbacks) |
| 76 | + (setf ea-packets-out (callback cb-packets-out))))))) |
77 | 77 |
|
78 | 78 | (defmethod set-context ((client client))
|
79 | 79 | (format t "~A~%" client)
|
|
89 | 89 |
|
90 | 90 | (defmethod quic-connect ((client client))
|
91 | 91 | (with-slots (host port engine socket engine-version quic-conn peer-ctx conn-ctx) client
|
92 |
| - (with-pointer-to-int (zero 0) |
93 |
| - (let* ((version (str->quic-version engine-version)) |
94 |
| - (udp-socket (create-udp-socket host :port port))) |
95 |
| - (setf socket udp-socket) |
96 |
| - (let ((conn (engine-connect |
97 |
| - engine |
98 |
| - version |
99 |
| - (local-sockaddr udp-socket) |
100 |
| - (peer-sockaddr udp-socket) |
101 |
| - peer-ctx |
102 |
| - conn-ctx |
103 |
| - host |
104 |
| - 0 |
105 |
| - (cffi:null-pointer) |
106 |
| - zero |
107 |
| - (cffi:null-pointer) |
108 |
| - zero))) |
| 92 | + (let* ((version (str->quic-version engine-version)) |
| 93 | + (udp-socket (create-udp-socket host :port port))) |
| 94 | + (setf socket udp-socket) |
| 95 | + (let ((conn (engine-connect |
| 96 | + engine |
| 97 | + version |
| 98 | + (local-sockaddr udp-socket) |
| 99 | + (peer-sockaddr udp-socket) |
| 100 | + peer-ctx |
| 101 | + conn-ctx |
| 102 | + host |
| 103 | + 0 |
| 104 | + (cffi:null-pointer) |
| 105 | + 0 |
| 106 | + (cffi:null-pointer) |
| 107 | + 0))) |
109 | 108 | (check-null-p conn)
|
110 |
| - (setf quic-conn conn))))) |
| 109 | + (setf quic-conn conn)))) |
111 | 110 | (sb-ext:schedule-timer
|
112 | 111 | (sb-ext:make-timer (lambda () (process-conns client)) :thread t)
|
113 | 112 | 0.1)
|
|
0 commit comments