Skip to content

Commit 6181364

Browse files
committed
Use Buf_write.BE and remove flushes
1 parent 7d43000 commit 6181364

File tree

2 files changed

+15
-28
lines changed

2 files changed

+15
-28
lines changed

eio/io.ml

+11-28
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,8 @@ let int_value shift len v = (v lsr shift) land ((1 lsl len) - 1)
1919

2020
(* Eio only uses Cstructs so we lose 0copy :(! *)
2121
let read_exactly src remaining =
22-
let open Cohttp_eio.Server in
2322
try
24-
Buf_read.ensure src remaining ;
25-
let t = Some (Cstruct.to_string (Buf_read.peek src) ~off:0 ~len:remaining) in
26-
Buf_read.consume src remaining ;
27-
t
23+
Some (Buf_read.take remaining src)
2824
with End_of_file -> None
2925

3026
let read_uint16 ic =
@@ -38,7 +34,6 @@ let read_int64 ic =
3834
| Some s -> Some (Int64.to_int @@ EndianString.BigEndian.get_int64 s 0)
3935

4036
let write_frame_to_buf ~mode buf fr =
41-
let scratch = Bytes.create 8 in
4237
let open Frame in
4338
let content = Bytes.unsafe_of_string fr.content in
4439
let len = Bytes.length content in
@@ -54,16 +49,14 @@ let write_frame_to_buf ~mode buf fr =
5449
let hdr = set_bit hdr 7 (is_client mode) in
5550
let hdr = hdr lor payload_len in
5651
(* Payload len is guaranteed to fit in 7 bits *)
57-
EndianBytes.BigEndian.set_int16 scratch 0 hdr ;
58-
Buf_write.bytes ~off:0 ~len:2 buf scratch ;
52+
Buf_write.BE.uint16 buf hdr;
5953
( match len with
6054
| n when n < 126 -> ()
6155
| n when n < 1 lsl 16 ->
62-
EndianBytes.BigEndian.set_int16 scratch 0 n ;
63-
Buf_write.bytes ~off:0 ~len:2 buf scratch
56+
Buf_write.BE.uint16 buf n
6457
| n ->
65-
EndianBytes.BigEndian.set_int64 scratch 0 Int64.(of_int n) ;
66-
Buf_write.bytes ~off:0 ~len:8 buf scratch ) ;
58+
Buf_write.BE.uint64 buf Int64.(of_int n);
59+
);
6760
( match mode with
6861
| Server -> ()
6962
| Client random_string ->
@@ -73,9 +66,7 @@ let write_frame_to_buf ~mode buf fr =
7366
Buf_write.bytes buf content
7467

7568
let close_with_code mode dst code =
76-
Buf_write.flush dst ;
77-
write_frame_to_buf ~mode dst @@ Frame.close code ;
78-
Buf_write.flush dst
69+
write_frame_to_buf ~mode dst @@ Frame.close code
7970

8071
let read_frame ic oc mode hdr =
8172
let hdr_part1 = EndianString.BigEndian.get_int8 hdr 0 in
@@ -86,7 +77,6 @@ let read_frame ic oc mode hdr =
8677
let frame_masked = is_bit_set 7 hdr_part2 in
8778
let length = int_value 0 7 hdr_part2 in
8879
let opcode = Frame.Opcode.of_enum opcode in
89-
Buf_write.flush oc ;
9080
let payload_len =
9181
match length with
9282
| i when i < 126 -> i
@@ -103,14 +93,12 @@ let read_frame ic oc mode hdr =
10393
else
10494
let mask =
10595
if frame_masked then (
106-
Buf_write.flush oc ;
10796
match read_exactly ic 4 with
10897
| None -> proto_error "could not read mask"
10998
| Some mask -> mask )
11099
else String.empty in
111100
if payload_len = 0 then Frame.create ~opcode ~extension ~final ()
112101
else (
113-
Buf_write.flush oc ;
114102
match read_exactly ic payload_len with
115103
| None -> proto_error "could not read payload (len=%d)" payload_len
116104
| Some payload ->
@@ -120,7 +108,6 @@ let read_frame ic oc mode hdr =
120108
frame )
121109

122110
let make_read_frame ~mode ic oc () =
123-
Buf_write.flush oc ;
124111
match read_exactly ic 2 with
125112
| None -> raise End_of_file
126113
| Some hdr -> read_frame ic oc mode hdr
@@ -136,24 +123,20 @@ module Connected_client = struct
136123

137124
let source {endp; _} = endp
138125

139-
let create ?read_buf http_request endp ic oc =
126+
let create http_request endp ic oc =
140127
let read_frame = make_read_frame ~mode:Server ic oc in
141-
{ buffer= oc;
128+
{ buffer = oc;
142129
endp;
143130
ic;
144131
http_request;
145-
standard_frame_replies= false;
132+
standard_frame_replies = false;
146133
read_frame }
147134

148135
let send {buffer; _} frame =
149-
Buf_write.flush buffer ;
150-
write_frame_to_buf ~mode:Server buffer frame ;
151-
Buf_write.flush buffer
136+
write_frame_to_buf ~mode:Server buffer frame
152137

153138
let send_multiple {buffer; _} frames =
154-
Buf_write.flush buffer ;
155-
List.iter (write_frame_to_buf ~mode:Server buffer) frames ;
156-
Buf_write.flush buffer
139+
List.iter (write_frame_to_buf ~mode:Server buffer) frames
157140

158141
let standard_recv t =
159142
let fr = t.read_frame () in

websocket-eio.opam

+4
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,7 @@ build: [
4646
["dune" "install" "-p" name "--create-install-files" name]
4747
]
4848
dev-repo: "git+https://github.com/vbmithr/ocaml-websocket.git"
49+
pin-depends: [
50+
[ "http.dev" "git+https://github.com/mirage/ocaml-cohttp#ce5f271b69fe42471ede858c5b8ce8203e3c14ad" ]
51+
[ "cohttp-eio.dev" "git+https://github.com/mirage/ocaml-cohttp#ce5f271b69fe42471ede858c5b8ce8203e3c14ad" ]
52+
]

0 commit comments

Comments
 (0)