@@ -19,12 +19,8 @@ let int_value shift len v = (v lsr shift) land ((1 lsl len) - 1)
19
19
20
20
(* Eio only uses Cstructs so we lose 0copy :(! *)
21
21
let read_exactly src remaining =
22
- let open Cohttp_eio.Server in
23
22
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)
28
24
with End_of_file -> None
29
25
30
26
let read_uint16 ic =
@@ -38,7 +34,6 @@ let read_int64 ic =
38
34
| Some s -> Some (Int64. to_int @@ EndianString.BigEndian. get_int64 s 0 )
39
35
40
36
let write_frame_to_buf ~mode buf fr =
41
- let scratch = Bytes. create 8 in
42
37
let open Frame in
43
38
let content = Bytes. unsafe_of_string fr.content in
44
39
let len = Bytes. length content in
@@ -54,16 +49,14 @@ let write_frame_to_buf ~mode buf fr =
54
49
let hdr = set_bit hdr 7 (is_client mode) in
55
50
let hdr = hdr lor payload_len in
56
51
(* 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;
59
53
( match len with
60
54
| n when n < 126 -> ()
61
55
| 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
64
57
| 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
+ ) ;
67
60
( match mode with
68
61
| Server -> ()
69
62
| Client random_string ->
@@ -73,9 +66,7 @@ let write_frame_to_buf ~mode buf fr =
73
66
Buf_write. bytes buf content
74
67
75
68
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
79
70
80
71
let read_frame ic oc mode hdr =
81
72
let hdr_part1 = EndianString.BigEndian. get_int8 hdr 0 in
@@ -86,7 +77,6 @@ let read_frame ic oc mode hdr =
86
77
let frame_masked = is_bit_set 7 hdr_part2 in
87
78
let length = int_value 0 7 hdr_part2 in
88
79
let opcode = Frame.Opcode. of_enum opcode in
89
- Buf_write. flush oc ;
90
80
let payload_len =
91
81
match length with
92
82
| i when i < 126 -> i
@@ -103,14 +93,12 @@ let read_frame ic oc mode hdr =
103
93
else
104
94
let mask =
105
95
if frame_masked then (
106
- Buf_write. flush oc ;
107
96
match read_exactly ic 4 with
108
97
| None -> proto_error " could not read mask"
109
98
| Some mask -> mask )
110
99
else String. empty in
111
100
if payload_len = 0 then Frame. create ~opcode ~extension ~final ()
112
101
else (
113
- Buf_write. flush oc ;
114
102
match read_exactly ic payload_len with
115
103
| None -> proto_error " could not read payload (len=%d)" payload_len
116
104
| Some payload ->
@@ -120,7 +108,6 @@ let read_frame ic oc mode hdr =
120
108
frame )
121
109
122
110
let make_read_frame ~mode ic oc () =
123
- Buf_write. flush oc ;
124
111
match read_exactly ic 2 with
125
112
| None -> raise End_of_file
126
113
| Some hdr -> read_frame ic oc mode hdr
@@ -136,24 +123,20 @@ module Connected_client = struct
136
123
137
124
let source {endp; _} = endp
138
125
139
- let create ? read_buf http_request endp ic oc =
126
+ let create http_request endp ic oc =
140
127
let read_frame = make_read_frame ~mode: Server ic oc in
141
- { buffer= oc;
128
+ { buffer = oc;
142
129
endp;
143
130
ic;
144
131
http_request;
145
- standard_frame_replies= false ;
132
+ standard_frame_replies = false ;
146
133
read_frame }
147
134
148
135
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
152
137
153
138
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
157
140
158
141
let standard_recv t =
159
142
let fr = t.read_frame () in
0 commit comments