aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClombrong <cromblong@egregore.fun>2025-08-14 23:01:59 +0200
committerClombrong <cromblong@egregore.fun>2025-08-15 00:14:28 +0200
commit5d31409b2e1a3624b23e894b606c1412546fc5ee (patch)
treee5829642358bec175685e23c5e0b77b9f1c101c6
parentcbdbb587236f8d747ae5baf4b4f92e9458dff4f1 (diff)
feat!: use new opaque domain type in code
-rw-r--r--lib/jid.ml7
-rw-r--r--lib/session.ml4
-rw-r--r--lib/stream.ml2
3 files changed, 7 insertions, 6 deletions
diff --git a/lib/jid.ml b/lib/jid.ml
index 2f071b9..9a1ec9d 100644
--- a/lib/jid.ml
+++ b/lib/jid.ml
@@ -1,7 +1,7 @@
(** An XMPP JID. If there is no localpart or resourcepart, they're [None]. *)
type t = {
localpart : string option;
- domainpart : string;
+ domainpart : Portal.domain;
resourcepart : string option;
}
@@ -65,6 +65,7 @@ let of_string (jid : string) : t =
begin
let b = (value ~default:0 domain_begin) in
sub jid b ((value ~default:(length jid) domain_end) - b)
+ |> Portal.domain_of_string
end;
resourcepart = map (fun i -> sub jid (i + 1) (length jid - i - 1)) domain_end;
}
@@ -72,7 +73,7 @@ let of_string (jid : string) : t =
let to_string ({ localpart; domainpart; resourcepart } : t) =
let local = Option.fold ~none:"" ~some:(fun l -> l ^ "@") localpart
and resource = Option.fold ~none:"" ~some:(fun r -> "/" ^ r) resourcepart
- in local ^ domainpart ^ resource
+ in local ^ (Portal.domain_to_string domainpart) ^ resource
let show ({ localpart; domainpart; resourcepart } : t) =
let show_opt = Option.fold ~none:"None" ~some:(Format.sprintf {|Some "%s"|})
@@ -80,7 +81,7 @@ let show ({ localpart; domainpart; resourcepart } : t) =
{|{ localpart = %s;
domainpart = "%s";
resourcepart = %s }|}
- (show_opt localpart) domainpart (show_opt resourcepart)
+ (show_opt localpart) (Portal.domain_to_string domainpart) (show_opt resourcepart)
(* RFC7622 3.5 examples *)
diff --git a/lib/session.ml b/lib/session.ml
index f4d5f94..421c01e 100644
--- a/lib/session.ml
+++ b/lib/session.ml
@@ -10,7 +10,7 @@ type step =
type state =
| Disconnected
- | Connecting of string
+ | Connecting of Portal.domain
(* TCP/WebSocket connected, not connected in XMPP-land *)
| Connected of Portal.t * step
@@ -27,7 +27,7 @@ type t = {
Basically, it conforms to {{:
https://datatracker.ietf.org/doc/html/rfc6120#section-4.3 }}, and gets the Portal in
a "ready" state. *)
-let create (domain : string) (config : config) : t Lwt.t =
+let create (domain : Portal.domain) (config : config) : t Lwt.t =
let needs_restart = function
| Feature.Mechanisms _ | STARTTLS -> true
| _ -> false
diff --git a/lib/stream.ml b/lib/stream.ml
index b4d5833..23aac34 100644
--- a/lib/stream.ml
+++ b/lib/stream.ml
@@ -65,7 +65,7 @@ let parse_features (stanza : Xml.element) : features =
(** [start domain portal] is a promise to features that starts a stream negotiation with
the XMPP server [portal]. *)
-let start (domain : string) (portal : Portal.t) : features Lwt.t =
+let start (domain : Portal.domain) (portal : Portal.t) : features Lwt.t =
let* _id = Portal.header domain portal
in Wire.get portal.stream >|= parse_features