summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/PeerIdentity.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webrtc/PeerIdentity.h')
-rw-r--r--dom/media/webrtc/PeerIdentity.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/dom/media/webrtc/PeerIdentity.h b/dom/media/webrtc/PeerIdentity.h
new file mode 100644
index 0000000000..64364d3359
--- /dev/null
+++ b/dom/media/webrtc/PeerIdentity.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * vim: sw=2 ts=2 sts=2 expandtab
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef PeerIdentity_h
+#define PeerIdentity_h
+
+#include "nsISupportsImpl.h"
+#include "nsString.h"
+
+template <class T>
+class nsCOMPtr;
+class nsIIDNService;
+
+namespace mozilla {
+
+/**
+ * This class implements the identifier used in WebRTC identity. Peers are
+ * identified using a string in the form [<user>@]<domain>, for instance,
+ * "user@example.com'. The (optional) user portion is a site-controlled string
+ * containing any character other than '@'. The domain portion is a valid IDN
+ * domain name and is compared accordingly.
+ *
+ * See:
+ * http://tools.ietf.org/html/draft-ietf-rtcweb-security-arch-09#section-5.6.5.3.3.1
+ */
+class PeerIdentity final {
+ public:
+ NS_INLINE_DECL_REFCOUNTING(PeerIdentity)
+
+ explicit PeerIdentity(const nsAString& aPeerIdentity)
+ : mPeerIdentity(aPeerIdentity) {}
+
+ bool Equals(const PeerIdentity& aOther) const;
+ bool Equals(const nsAString& aOtherString) const;
+ const nsString& ToString() const { return mPeerIdentity; }
+
+ private:
+ ~PeerIdentity() = default;
+ static void GetUser(const nsAString& aPeerIdentity, nsAString& aUser);
+ static void GetHost(const nsAString& aPeerIdentity, nsAString& aHost);
+
+ static void GetNormalizedHost(const nsCOMPtr<nsIIDNService>& aIdnService,
+ const nsAString& aHost,
+ nsACString& aNormalizedHost);
+
+ nsString mPeerIdentity;
+};
+
+inline bool operator==(const PeerIdentity& aOne, const PeerIdentity& aTwo) {
+ return aOne.Equals(aTwo);
+}
+
+inline bool operator==(const PeerIdentity& aOne, const nsAString& aString) {
+ return aOne.Equals(aString);
+}
+
+inline bool operator!=(const PeerIdentity& aOne, const PeerIdentity& aTwo) {
+ return !aOne.Equals(aTwo);
+}
+
+inline bool operator!=(const PeerIdentity& aOne, const nsAString& aString) {
+ return !aOne.Equals(aString);
+}
+
+} /* namespace mozilla */
+
+#endif /* PeerIdentity_h */