1269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org/* 2269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * 4269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org */ 10269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 11269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#ifndef WEBRTC_LIBJINGLE_XMPP_JID_H_ 12269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#define WEBRTC_LIBJINGLE_XMPP_JID_H_ 13269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 14269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include <string> 15269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/libjingle/xmllite/xmlconstants.h" 16269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#include "webrtc/base/basictypes.h" 17269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 18269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgnamespace buzz { 19269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 20269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// The Jid class encapsulates and provides parsing help for Jids. A Jid 21269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// consists of three parts: the node, the domain and the resource, e.g.: 22269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// 23269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// node@domain/resource 24269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// 25269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// The node and resource are both optional. A valid jid is defined to have 26269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// a domain. A bare jid is defined to not have a resource and a full jid 27269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org// *does* have a resource. 28269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgclass Jid { 29269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgpublic: 30269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org explicit Jid(); 31269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org explicit Jid(const std::string& jid_string); 32269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org explicit Jid(const std::string& node_name, 33269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& domain_name, 34269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string& resource_name); 35269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org ~Jid(); 36269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 37269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string & node() const { return node_name_; } 38269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string & domain() const { return domain_name_; } 39269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org const std::string & resource() const { return resource_name_; } 40269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 41269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string Str() const; 42269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org Jid BareJid() const; 43269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 44269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool IsEmpty() const; 45269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool IsValid() const; 46269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool IsBare() const; 47269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool IsFull() const; 48269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 49269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool BareEquals(const Jid& other) const; 50269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void CopyFrom(const Jid& jid); 51269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool operator==(const Jid& other) const; 52269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool operator!=(const Jid& other) const { return !operator==(other); } 53269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 54269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool operator<(const Jid& other) const { return Compare(other) < 0; }; 55269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org bool operator>(const Jid& other) const { return Compare(other) > 0; }; 56269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 57269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org int Compare(const Jid & other) const; 58269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 59269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.orgprivate: 60269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org void ValidateOrReset(); 61269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 62269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static std::string PrepNode(const std::string& node, bool* valid); 63269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static char PrepNodeAscii(char ch, bool* valid); 64269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static std::string PrepResource(const std::string& start, bool* valid); 65269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static char PrepResourceAscii(char ch, bool* valid); 66269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static std::string PrepDomain(const std::string& domain, bool* valid); 67269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static void PrepDomain(const std::string& domain, 68269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string* buf, bool* valid); 69269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static void PrepDomainLabel( 70269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string::const_iterator start, std::string::const_iterator end, 71269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string* buf, bool* valid); 72269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org static char PrepDomainLabelAscii(char ch, bool *valid); 73269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 74269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string node_name_; 75269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string domain_name_; 76269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org std::string resource_name_; 77269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org}; 78269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 79269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org} 80269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org 81269fb4bc90b79bebbb8311da0110ccd6803fd0a8henrike@webrtc.org#endif // WEBRTC_LIBJINGLE_XMPP_JID_H_ 82