package dream-httpaf

  1. Overview
  2. Docs
Internal: shared http/af stack for Dream (server) and Hyper (client)

Install

Dune Dependency

Authors

Maintainers

Sources

dream-1.0.0-alpha6.tar.gz
sha256=8d3b6344c0e175aca628b3d5bb8ee58265e8c1074fc2d40d63f136fef83daf90

doc/src/dream-httpaf.dream-websocketaf/serialize.ml.html

Source file serialize.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
let serialize_headers ?mask faraday ~is_fin ~opcode ~payload_length =
  let opcode = Websocket.Opcode.to_int opcode in
  let is_fin = if is_fin then 1 lsl 7 else 0 in
  let is_mask =
    match mask with
    | None   -> 0
    | Some _ -> 1 lsl 7
  in
  Faraday.write_uint8 faraday (is_fin lor opcode);
  if      payload_length <= 125    then
    Faraday.write_uint8 faraday (is_mask lor payload_length)
  else if payload_length <= 0xffff then begin
    Faraday.write_uint8     faraday (is_mask lor 126);
    Faraday.BE.write_uint16 faraday payload_length;
  end else begin
    Faraday.write_uint8     faraday (is_mask lor 127);
    Faraday.BE.write_uint64 faraday (Int64.of_int payload_length);
  end;
  begin match mask with
  | None      -> ()
  | Some mask -> Faraday.BE.write_uint32 faraday mask
  end
;;

let serialize_control ?mask faraday ~opcode =
  let opcode = (opcode :> Websocket.Opcode.t) in
  serialize_headers faraday ?mask ~is_fin:true ~opcode ~payload_length:0

let schedule_serialize ?mask faraday ~is_fin ~opcode ~payload ~src_off ~off ~len =
  serialize_headers faraday ?mask ~is_fin ~opcode ~payload_length:len;
  begin match mask with
  | None -> ()
  | Some mask -> Websocket.Frame.apply_mask mask payload ~src_off ~off ~len
  end;
  Faraday.schedule_bigstring faraday payload ~off ~len;
;;

let serialize_bytes ?mask faraday ~is_fin ~opcode ~payload ~src_off ~off ~len =
  serialize_headers faraday ?mask ~is_fin ~opcode ~payload_length:len;
  begin match mask with
  | None -> ()
  | Some mask -> Websocket.Frame.apply_mask_bytes mask payload ~src_off ~off ~len
  end;
  Faraday.write_bytes faraday payload ~off ~len;
;;
OCaml

Innovation. Community. Security.