Karl Seguin
89ff1411e9
Fix memory leak on invalid websocket continuation frames
2025-02-13 09:34:25 +08:00
Karl Seguin
701e8277d6
support continuation frames
2025-02-13 08:51:21 +08:00
Karl Seguin
4a11f80c45
Make websocket client reader stateful
...
Move more logic into the reader. Avoid copying partial messages in
cases where we know that the buffer is large enough.
This is mostly groundwork for trying to add support for continuation
frames.
2025-02-13 08:51:21 +08:00
Karl Seguin
f1b275d5d0
Increase fuzz count. Add test for [too] large HTTP requests
2025-02-13 08:51:21 +08:00
Karl Seguin
0753eb7691
zig fmt
2025-02-13 08:51:21 +08:00
Karl Seguin
94be7a0e79
Make TCP server websocket-aware
...
Adding HTTP & websocket awareness to the TCP server.
HTTP server handles `GET /json/version` and websocket upgrade requests.
Conceptually, websocket handling is the same code as before, but receiving
data will parse the websocket frames and writing data will wrap it in
a websocket frame.
The previous `Ctx` was split into a `Server` and a `Client`. This was
largely done to make it easy to write unit tests, since the `Client` is
a generic, all its dependencies (i.e. the server) can be mocked out. This
also makes it a bit nicer to know if there is or isn't a client (via the
server's client optional).
Added a MemoryPool for the Send object (I thought that was a nice touch!)
Removed MacOS hack on accept/conn completion usage.
Known issues:
- When framing an outgoing message, the entire message has to be duped. This
is no worse than how it was before, but it should be possible to eliminate
this in the future. Probably not part of this PR.
- Websocket parsing will reject continuation frames. I don't know of a single
client that will send a fragmented message (websocket has its own
message fragmentation), but we should probably still support this just in
case.
- I don't think the receive, timeout and close completions can safely be
re-used like we're doing. I believe they need to be associated with a specific
client socket.
- A new connection creates a new browser session. I think this is right (??),
but for the very first, we're throwing out a perfectly usable session. I'm
thinking this might be a change to how Browser/Sessions work.
- zig build test won't compile. This branch reproduces the issue with none
of these changes:
https://github.com/karlseguin/browser/tree/broken_test_build
(or, as a diff to main):
https://github.com/lightpanda-io/browser/compare/main...karlseguin:broken_test_build
2025-02-13 08:51:19 +08:00
Pierre Tachoire
b2e3419bff
upgrade tigerbeetle
2025-02-12 14:37:39 +01:00
Pierre Tachoire
39b3786776
cdp: ctx state has init and deinit now
2025-02-10 09:31:09 +01:00
Pierre Tachoire
6d530691f3
cdp: use an enum for SessionID
2025-01-29 18:38:05 +01:00
Pierre Tachoire
bbdf63635a
server: REUSEPORT is not allowed on unix socket
...
see 5b0af621c3
2025-01-22 16:08:22 +01:00
Pierre Tachoire
c5688c1bd3
cdp: display last message on cdp error
2025-01-13 10:53:35 +01:00
Pierre Tachoire
8e2cb36597
cdp: fix some id inconsitency accross runtime messages
2025-01-13 10:49:48 +01:00
Francis Bouvier
8f297b83c1
msg: rename MsgBuffer -> Buffer
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-29 15:07:52 +01:00
Francis Bouvier
b800d0eeb8
msg: fix len for msg.Buffer and encode msg size as binary header
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-29 15:07:52 +01:00
Francis Bouvier
95ac92b343
server: fix cancel
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-29 14:59:54 +01:00
Francis Bouvier
8449d5ab22
websocket: use Unix socket for internal server
...
And add an option for TCP only server
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-27 21:24:09 +01:00
Francis Bouvier
325ecedf0b
websocket: first implementation
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-27 21:24:09 +01:00
Pierre Tachoire
18ab0c8199
cdp: replace tick by run_for_ns
2024-11-18 17:39:38 +01:00
Francis Bouvier
eed7b7186d
Merge pull request #284 from lightpanda-io/server-sync-deinit
...
server: ensure Send is always deinit in callback
2024-11-06 18:17:10 +01:00
Francis Bouvier
f6f5ec5eb3
server: add cancel current recv before accepting new connection
...
Only on Linux. On MacOS cancel is not supported for now and
we do not have any problem with the current recv operation
on a closed socket.
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-06 18:07:43 +01:00
Francis Bouvier
c74feb9c3a
server: add log on I/O errors
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-05 17:16:39 +01:00
Pierre Tachoire
dcdef2f640
server: ensure Send is always deinit in callback
2024-10-25 09:51:37 +02:00
Francis Bouvier
8508c21080
cdp: remove send sync
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-21 18:29:10 +02:00
Francis Bouvier
20dd140c31
cdp: send I/O next read before executing current cmd
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-21 18:21:43 +02:00
Francis Bouvier
8e05f09fc8
server, cdp: improve logging
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-15 22:57:56 +02:00
Francis Bouvier
ea9af210f9
Remove heap allocation for Session
...
And adapt to similar changes on zig-js-runtime for Env
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-15 15:52:48 +02:00
Francis Bouvier
cbf6348055
server: panic if sendInspector without an inspector
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-12 10:38:53 +02:00
Francis Bouvier
fa4920bd94
browser: rename setInspector -> initInspector
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 12:45:28 +02:00
Francis Bouvier
2bc58bebce
server: rename public -> jsruntime
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 12:11:43 +02:00
Francis Bouvier
c564702eac
server: formatting
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 12:10:54 +02:00
Francis Bouvier
9400dd799e
Add cli options for server (host, port, timeout)
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 12:06:39 +02:00
Francis Bouvier
ff0bbc3f96
server: simplify Send I/O
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 01:21:24 +02:00
Francis Bouvier
15414f5ee4
server: remove unused sendLater
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 01:00:12 +02:00
Francis Bouvier
f9b097794f
Simplify browser session.setInspector
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 00:58:13 +02:00
Francis Bouvier
a2f65eb540
server: simplify onInspector methods
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 00:56:15 +02:00
Francis Bouvier
cea38a10e9
server: rename buf in read_buf
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 00:56:11 +02:00
Francis Bouvier
c8a91d4cf6
server: merge Cmd and Accept in Ctx
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 00:55:29 +02:00
Francis Bouvier
c35c09db60
server: timeout mechanism
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-08 23:40:50 +02:00
Francis Bouvier
49adb61146
server: handle close and re-open connection
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-08 16:22:24 +02:00
Francis Bouvier
76a9034668
server: newSession on disposeBrowserContext
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-07 21:14:55 +02:00
Francis Bouvier
4c225e515d
server: let the caller of sendSync free the string
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-07 16:04:29 +02:00
Francis Bouvier
9c913b2e6c
Move loop outside Browser
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-07 15:57:16 +02:00
Francis Bouvier
5ab1d2a8a5
Add License in new cdp files
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 18:02:21 +02:00
Francis Bouvier
94d2d28806
Redirect Runtime domain to JS engine Inspector
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 17:12:08 +02:00
Francis Bouvier
ea410c8ced
Fix changes in Zig 0.12 std lib
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-20 00:32:06 +02:00
Francis Bouvier
0f8b47b598
Move MsgBuffer in it's own file for unit test purpose
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-19 15:48:20 +02:00
Francis Bouvier
bfb9db235e
Basic Runtime.evaluate run
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-05-30 16:21:18 +02:00
Francis Bouvier
c57e50c5b9
Handle Runtime.evaluate (no-op)
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-05-27 16:02:14 +02:00
Francis Bouvier
bafdca3ffa
MsgBuffer to handle both combined and multipart read
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-05-22 16:24:39 +02:00
Francis Bouvier
ba12945e5b
Move read input from Cmd callback to allow unit tests
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-24 11:17:55 +02:00