aboutsummaryrefslogtreecommitdiff
path: root/portal/tcp/portal.ml
diff options
context:
space:
mode:
Diffstat (limited to 'portal/tcp/portal.ml')
-rw-r--r--portal/tcp/portal.ml29
1 files changed, 14 insertions, 15 deletions
diff --git a/portal/tcp/portal.ml b/portal/tcp/portal.ml
index e44732d..290975c 100644
--- a/portal/tcp/portal.ml
+++ b/portal/tcp/portal.ml
@@ -29,22 +29,21 @@ let header ?from domain ((stream, push) : t) =
If you have Github, feel free to get the word out to aantron. *)
`Comment ""]
- and error = Lwt.fail_with "TODO"
in push (Some (of_list stanza));
- let* xml = Markup_lwt.next stream
- in match xml with
- | Some `Xml {version="1.0"; encoding=None; standalone=None} ->
- let* stream_open = Markup_lwt.next stream in
- begin
- match stream_open with
- | Some `Start_element ((ns, "stream"), attributes) when ns = xmlns->
- List.find_map
- (fun ((_, name), value) -> if name = "id" then Some value else None)
- attributes
- |> Option.fold ~none:error ~some:Lwt.return
- | _ -> error
- end
- | _ -> error
+ let some_id ((_, name), value) = if name = "id" then Some value else None in
+ let* xml = Markup_lwt.next stream in
+ let* id = match xml with
+ | Some `Xml {version="1.0"; encoding=None; standalone=None} ->
+ let* stream_open = Markup_lwt.next stream in
+ begin match stream_open with
+ | Some `Start_element ((ns, "stream"), attributes) when ns = xmlns->
+ List.find_map some_id attributes |> Lwt.return
+ | _ -> Lwt.return_none
+ end
+ | _ -> Lwt.return_none
+ in match id with
+ | Some id -> Lwt.return id
+ | None -> Lwt.fail_with "Invalid stream opening server-side."
let close (_, push) = [`End_element] |> Markup.of_list |> Option.some |> push