Skip to content

Commit 6b122ef

Browse files
committed
fix: wip libev
1 parent 6e89eef commit 6b122ef

File tree

6 files changed

+49
-38
lines changed

6 files changed

+49
-38
lines changed

c-src/dns.c

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include <sys/types.h>
99

1010
struct sockaddr* gen_sockaddr(int family, const char *ip, const u_short port) {
11-
printf("Creating sockaddr for %s:%d\n", ip, port);
1211
struct sockaddr_storage *ss = malloc(sizeof(struct sockaddr_storage));
1312

1413
switch (family)

lsquic.i

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
%feature("export");
33
%typemap(cin) int * "(:pointer :int)";
44
%typemap(cin) size_t ":unsigned-int";
5+
%typemap(cin) ssize_t ":int";
56
%typemap(cin) lsxpack_strlen_t ":uint16";
67
%typemap(cin) uint32_t ":uint32";
78
%typemap(cin) uint16_t ":uint16";

src/http3/test/tests.lisp

+11-10
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@
99
;; (let ((request (make-instance 'lsquic:request :authority "google.com")))
1010
;; (is (lsquic:lsxpack-headers request))))
1111

12-
;; (test can-make-network-request
13-
;; (let ((client (make-instance 'lsquic:client
14-
;; :quic-version "Q050"
15-
;; :host "google.com")))
16-
;; (http3:connect client)
17-
;; (http3:make-get-request client :path "/")))
12+
(test can-make-network-request
13+
(let ((client (make-instance 'lsquic:client
14+
:quic-version "Q050"
15+
:log-level "info"
16+
:host "google.com")))
17+
(http3:connect client)
18+
(http3:make-get-request client :path "/")))
1819

1920

20-
(test header-packer
21-
(let ((request (make-instance 'lsquic:request :authority "google.com")))
22-
(lsquic:lsxpack-headers request)
23-
(is (eq 1 0))))
21+
;; (test header-packer
22+
;; (let* ((request (make-instance 'lsquic:request :authority "google.com"))
23+
;; (hdrs (sb-sys:without-gcing (lsquic:lsxpack-headers request))))
24+
;; (is (eq 1 0))))

src/lsquic/client.lisp

+11-27
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,8 @@
105105
0
106106
(cffi:null-pointer)
107107
0)))
108-
(check-null-p conn)
108+
(check-null-p conn)
109109
(setf quic-conn conn))))
110-
(sb-ext:schedule-timer
111-
(sb-ext:make-timer (lambda () (process-conns client)) :thread t)
112-
0.1)
113110
client)
114111

115112
(defmethod new-engine ((client client))
@@ -122,33 +119,11 @@
122119
(with-slots (engine) client
123120
(engine-destroy engine)))
124121

125-
(defmethod process-conns ((client client))
126-
(bt:with-lock-held ((lock client))
127-
(with-slots (engine) client
128-
(lsquic:engine-process-conns engine)
129-
(with-pointer-to-int (diff 0)
130-
(when (> (lsquic:engine-earliest-adv-tick engine diff) 0)
131-
(sb-ext:schedule-timer
132-
(sb-ext:make-timer (lambda () (process-conns client)) :thread t)
133-
(/ (mem-aref diff :int) 1000000)))))))
134-
135122
(defmethod connect ((client client))
136123
(set-context client)
137124
(new-engine client)
138125
(quic-connect client)
139-
(process-conns client)
140-
(packets-in client))
141-
142-
(defmethod packets-in ((client client))
143-
;; TODO: Switch to libev
144-
(bt:with-lock-held ((lock client))
145-
(with-slots (socket engine peer-ctx) client
146-
(let ((read (udp:recv-packets-in engine (local-sockaddr socket) (sb-bsd-sockets:socket-file-descriptor (socket socket)) peer-ctx)))
147-
(when (>= read 0)
148-
(lsquic:engine-process-conns engine)
149-
(sb-ext:schedule-timer
150-
(sb-ext:make-timer (lambda () (packets-in client)) :thread t)
151-
0.1))))))
126+
(start-new-loop client))
152127

153128
(defmethod push-stream-ctx ((client client) ctx)
154129
(bt:with-lock-held ((rq-lock client))
@@ -163,3 +138,12 @@
163138
(push-stream-ctx client pipe)
164139
(conn-make-stream (quic-conn client))
165140
pipe))
141+
142+
(defmethod get-fd ((client client))
143+
(sb-bsd-sockets:socket-file-descriptor (socket (socket client))))
144+
145+
(defmethod start-new-loop ((client client))
146+
(let ((io (cffi:foreign-alloc '(:struct lev:ev-io)))
147+
(timer (cffi:foreign-alloc '(:struct lev:ev-timer))))
148+
(lev:ev-init timer (callback process-conns-cb))
149+
(lev:ev-io-init io (callback packets-in-cb) (get-fd client) lev:+ev-read+)))

src/lsquic/ev.lisp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
(in-package :lsquic)
2+
3+
(defcallback process-conns-cb :void ((evloop :pointer) (timer :pointer) (revents :int))
4+
(declare (ignore revents))
5+
(with-foreign-slots ((lev::data) timer (:struct lev:ev-timer))
6+
(let ((client (weird-pointers:restore lev::data)))
7+
(with-slots (engine) client
8+
(lev:ev-timer-stop evloop timer)
9+
(lsquic:engine-process-conns engine)
10+
(with-pointer-to-int (diff 0)
11+
(when (> (lsquic:engine-earliest-adv-tick engine diff) 0)
12+
(lev:ev-timer-init evloop (callback process-conns-cb) diff 0)))))))
13+
14+
(defcallback packets-in-cb :void ((evloop :pointer) (io :pointer) (revents :int))
15+
(declare (ignore revents evloop))
16+
;; TODO: Switch to libev
17+
(with-foreign-slots ((lev::data) io (:struct lev:ev-io))
18+
(let ((client (weird-pointers:restore lev::data)))
19+
(with-slots (socket engine peer-ctx) client
20+
(udp:recv-packets-in
21+
engine
22+
(local-sockaddr socket)
23+
(get-fd client)
24+
peer-ctx)))))

src/lsquic/lsquic.asd

+2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@
1212
(:file "lsquic")
1313
(:file "request")
1414
(:file "io")
15+
(:file "ev")
1516
(:file "client"))
1617
:depends-on (:bordeaux-threads
1718
:cffi
1819
:dns
1920
:cffi-helpers
21+
:lev
2022
:split-sequence
2123
:weird-pointers
2224
:udp))

0 commit comments

Comments
 (0)