aboutsummaryrefslogtreecommitdiff
path: root/lib/stream.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/stream.ml')
-rw-r--r--lib/stream.ml19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/stream.ml b/lib/stream.ml
index 4781161..21c134d 100644
--- a/lib/stream.ml
+++ b/lib/stream.ml
@@ -18,10 +18,9 @@ type stream_features = {
unknown_features : Xml.element list;
}
+(** [next stream] is a promise containing a full stanza of the fragments of
+ [stream]. *)
let next (stream : (signal, async) stream) : (signal, sync) stream Lwt.t =
- (** [next stream] is a promise containing a full stanza of the fragments of
- [stream]. *)
-
let traverse_stanza depth fragment =
let depth = match fragment with
| `Start_element _ -> depth + 1
@@ -30,18 +29,18 @@ let next (stream : (signal, async) stream) : (signal, sync) stream Lwt.t =
in ([fragment], if depth = 0 then None else Some depth)
in transform traverse_stanza 0 stream |> Markup_lwt.load
+(** [get stream] is a promise containing a single Xml element of [stream]. *)
let get (stream : (signal, async) stream) : Xml.element Lwt.t =
- (** [get stream] is a promise containing a single Xml element of [stream]. *)
let* signal = next stream
in match Xml.tree signal with
| Some xml -> Lwt.return xml
| None -> Lwt.fail (InvalidStanza (signal |> write_xml |> to_string))
-let start domain : Portal.t Lwt.t =
- (** [start domain] is a promise containing a Portal (stream * push) connected to the
- XMPP server [domain].
+(** [start domain] is a promise containing a Portal (stream * push) connected to the
+ XMPP server [domain].
- Currently, it doesn't handle anything except the initial [<open/>] stanza. *)
+ Currently, it doesn't handle anything except the initial [<open/>] stanza. *)
+let start domain : Portal.t Lwt.t =
let* stream, _push = Portal.connect domain
in let push = function
| None -> _push (Some Portal.stanza_close);
@@ -52,9 +51,9 @@ let start domain : Portal.t Lwt.t =
let+ _ = get stream
in stream, push
+(** [parse_features el] is a [stream_features] record with all the features of the
+ [<stream:features>] stanza contained in [el]. *)
let parse_features (el : Xml.element) : stream_features =
- (** [parse_features el] is a [stream_features] record with all the features of the
- [<stream:features>] stanza contained in [el]. *)
let open Xml in
let open Either in
let parse_mechanism_stanza = function