diff options
Diffstat (limited to 'lib/stream.ml')
-rw-r--r-- | lib/stream.ml | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/lib/stream.ml b/lib/stream.ml index 6b46ed6..cc5ad92 100644 --- a/lib/stream.ml +++ b/lib/stream.ml @@ -81,38 +81,3 @@ let negotiate_feature (mandatory : bool) (feat : feature) (portal : Portal.t) else Lwt.return_unit | Mechanisms mechs -> authenticate mechs | _ -> Lwt.return_unit - -(** [negotiate domain portal auth] is a promise containing the features supported by the - XMPP server [portal], after eventual STARTTLS negotiation and authentication using - the auth config [auth]. - - This function should be called every time a stream needs to be reopened and stream - negotiation takes place. - - Basically, it conforms to - {{: https://datatracker.ietf.org/doc/html/rfc6120#section-4.3 }}. *) -let negotiate - (domain : string) - (portal : Portal.t) - (config : config) : features Lwt.t = - (* Test if a specific features mandates a restart of the stream. *) - let needs_restart = function - | Mechanisms _ | STARTTLS -> true - | _ -> false - in - let rec handle_features (f : features) : features Lwt.t = - match f with - | m :: mandatory, optional -> let* () = negotiate_feature true m portal config - in if needs_restart m - then start domain portal >>= handle_features - else handle_features (mandatory, optional) - | [], _ -> Lwt.return f - in start domain portal >>= handle_features - -(** [initiate domain] initiates a stream with the XMPP server [domain]. *) -let initiate (domain : string) (config : config) : (Portal.t * features) Lwt.t = - let open Portal in - let* p = connect domain - in let+ features = negotiate domain p config - in (p, features) - |