Remove static JID and std::string objects.

git-svn-id: http://libjingle.googlecode.com/svn/trunk@90 dd674b97-3498-5ee5-1854-bdd07cd0ff33
diff --git a/talk/base/sslidentity.cc b/talk/base/sslidentity.cc
index e8c222f..0cb52f1 100644
--- a/talk/base/sslidentity.cc
+++ b/talk/base/sslidentity.cc
@@ -55,11 +55,11 @@
 namespace talk_base {
 
 // From RFC 4572
-const std::string DIGEST_SHA_1 = "sha-1";
-const std::string DIGEST_SHA_224 = "sha-224";
-const std::string DIGEST_SHA_256 = "sha-256";
-const std::string DIGEST_SHA_384 = "sha-384";
-const std::string DIGEST_SHA_512 = "sha-512";
+const char DIGEST_SHA_1[] = "sha-1";
+const char DIGEST_SHA_224[] = "sha-224";
+const char DIGEST_SHA_256[] = "sha-256";
+const char DIGEST_SHA_384[] = "sha-384";
+const char DIGEST_SHA_512[] = "sha-512";
 
 SSLCertificate* SSLCertificate::FromPEMString(const std::string& pem_string,
                                               int* pem_length) {
diff --git a/talk/base/sslidentity.h b/talk/base/sslidentity.h
index a202523..37e3080 100644
--- a/talk/base/sslidentity.h
+++ b/talk/base/sslidentity.h
@@ -35,11 +35,11 @@
 namespace talk_base {
 
 // Definitions for the digest algorithms
-extern const std::string DIGEST_SHA_1;
-extern const std::string DIGEST_SHA_224;
-extern const std::string DIGEST_SHA_256;
-extern const std::string DIGEST_SHA_384;
-extern const std::string DIGEST_SHA_512;
+extern const char DIGEST_SHA_1[];
+extern const char DIGEST_SHA_224[];
+extern const char DIGEST_SHA_256[];
+extern const char DIGEST_SHA_384[];
+extern const char DIGEST_SHA_512[];
 
 // Abstract interface overridden by SSL library specific
 // implementations.
diff --git a/talk/examples/call/callclient.cc b/talk/examples/call/callclient.cc
index ee4cb0e..ab8de6a 100644
--- a/talk/examples/call/callclient.cc
+++ b/talk/examples/call/callclient.cc
@@ -834,9 +834,8 @@
     domain = room_name.substr(room_name.find("@") + 1);
   }
 
-  buzz::MucRoomLookupTask* lookup_query_task =
-      new buzz::MucRoomLookupTask(
-          xmpp_client_, buzz::JID_GOOGLE_MUC_LOOKUP, room, domain);
+  buzz::MucRoomLookupTask* lookup_query_task = new buzz::MucRoomLookupTask(
+      xmpp_client_, buzz::Jid(buzz::STR_GOOGLE_MUC_LOOKUP_JID), room, domain);
   lookup_query_task->SignalResult.connect(this,
       &CallClient::OnRoomLookupResponse);
   lookup_query_task->SignalError.connect(this,
diff --git a/talk/session/tunnel/securetunnelsessionclient.cc b/talk/session/tunnel/securetunnelsessionclient.cc
index 84ec5e0..71f38aa 100644
--- a/talk/session/tunnel/securetunnelsessionclient.cc
+++ b/talk/session/tunnel/securetunnelsessionclient.cc
@@ -44,15 +44,16 @@
 
 // XML elements and namespaces for XMPP stanzas used in content exchanges.
 
-const std::string NS_SECURE_TUNNEL("http://www.google.com/talk/securetunnel");
-const buzz::QName QN_SECURE_TUNNEL_DESCRIPTION(NS_SECURE_TUNNEL,
-                                               "description");
-const buzz::QName QN_SECURE_TUNNEL_TYPE(NS_SECURE_TUNNEL, "type");
-const buzz::QName QN_SECURE_TUNNEL_CLIENT_CERT(NS_SECURE_TUNNEL,
-                                               "client-cert");
-const buzz::QName QN_SECURE_TUNNEL_SERVER_CERT(NS_SECURE_TUNNEL,
-                                               "server-cert");
-const std::string CN_SECURE_TUNNEL("securetunnel");
+const char NS_SECURE_TUNNEL[] = "http://www.google.com/talk/securetunnel";
+const buzz::StaticQName QN_SECURE_TUNNEL_DESCRIPTION =
+    { NS_SECURE_TUNNEL, "description" };
+const buzz::StaticQName QN_SECURE_TUNNEL_TYPE =
+    { NS_SECURE_TUNNEL, "type" };
+const buzz::StaticQName QN_SECURE_TUNNEL_CLIENT_CERT =
+    { NS_SECURE_TUNNEL, "client-cert" };
+const buzz::StaticQName QN_SECURE_TUNNEL_SERVER_CERT =
+    { NS_SECURE_TUNNEL, "server-cert" };
+const char CN_SECURE_TUNNEL[] = "securetunnel";
 
 // SecureTunnelContentDescription
 
diff --git a/talk/session/tunnel/tunnelsessionclient.cc b/talk/session/tunnel/tunnelsessionclient.cc
index 13d5c10..05cc757 100644
--- a/talk/session/tunnel/tunnelsessionclient.cc
+++ b/talk/session/tunnel/tunnelsessionclient.cc
@@ -39,10 +39,10 @@
 
 namespace cricket {
 
-const std::string NS_TUNNEL("http://www.google.com/talk/tunnel");
-const buzz::QName QN_TUNNEL_DESCRIPTION(NS_TUNNEL, "description");
-const buzz::QName QN_TUNNEL_TYPE(NS_TUNNEL, "type");
-const std::string CN_TUNNEL("tunnel");
+const char NS_TUNNEL[] = "http://www.google.com/talk/tunnel";
+const buzz::StaticQName QN_TUNNEL_DESCRIPTION = { NS_TUNNEL, "description" };
+const buzz::StaticQName QN_TUNNEL_TYPE = { NS_TUNNEL, "type" };
+const char CN_TUNNEL[] = "tunnel";
 
 enum {
   MSG_CLOCK = 1,
diff --git a/talk/xmpp/constants.cc b/talk/xmpp/constants.cc
index 9f5215e..4cba871 100644
--- a/talk/xmpp/constants.cc
+++ b/talk/xmpp/constants.cc
@@ -40,8 +40,6 @@
 // TODO: Remove static objects of complex types, particularly
 // Jid and QName.
 
-const Jid JID_EMPTY(STR_EMPTY);
-
 const char NS_CLIENT[] = "jabber:client";
 const char NS_SERVER[] = "jabber:server";
 const char NS_STREAM[] = "http://etherx.jabber.org/streams";
@@ -102,7 +100,7 @@
 
 const char STR_UNAVAILABLE[] = "unavailable";
 
-const Jid JID_GOOGLE_MUC_LOOKUP("lookup.groupchat.google.com");
+const char STR_GOOGLE_MUC_LOOKUP_JID[] = "lookup.groupchat.google.com";
 const char STR_MUC_ROOMCONFIG_ROOMNAME[] = "muc#roomconfig_roomname";
 const char STR_MUC_ROOMCONFIG_FEATURES[] = "muc#roomconfig_features";
 const char STR_MUC_ROOM_FEATURE_ENTERPRISE[] = "muc_enterprise";
diff --git a/talk/xmpp/constants.h b/talk/xmpp/constants.h
index 81e7f6e..c321940 100644
--- a/talk/xmpp/constants.h
+++ b/talk/xmpp/constants.h
@@ -34,8 +34,6 @@
 
 namespace buzz {
 
-extern const Jid JID_EMPTY;
-
 extern const char NS_CLIENT[];
 extern const char NS_SERVER[];
 extern const char NS_STREAM[];
@@ -96,7 +94,7 @@
 
 extern const char STR_UNAVAILABLE[];
 
-extern const Jid JID_GOOGLE_MUC_LOOKUP;
+extern const char STR_GOOGLE_MUC_LOOKUP_JID[];
 extern const char STR_MUC_ROOMCONFIG_ROOMNAME[];
 extern const char STR_MUC_ROOMCONFIG_FEATURES[];
 extern const char STR_MUC_ROOM_FEATURE_ENTERPRISE[];
diff --git a/talk/xmpp/hangoutpubsubclient.cc b/talk/xmpp/hangoutpubsubclient.cc
index 6cc383c..c678b7e 100644
--- a/talk/xmpp/hangoutpubsubclient.cc
+++ b/talk/xmpp/hangoutpubsubclient.cc
@@ -40,8 +40,8 @@
 namespace buzz {
 
 namespace {
-const std::string kPresenting = "s";
-const std::string kNotPresenting = "o";
+const char kPresenting[] = "s";
+const char kNotPresenting[] = "o";
 }  // namespace
 
 
diff --git a/talk/xmpp/jid.cc b/talk/xmpp/jid.cc
index 01a025f..638fd00 100644
--- a/talk/xmpp/jid.cc
+++ b/talk/xmpp/jid.cc
@@ -46,7 +46,7 @@
 }
 
 Jid::Jid(const std::string & jid_string) {
-  if (jid_string == STR_EMPTY) {
+  if (jid_string.empty()) {
     data_ = NULL;
     return;
   }
@@ -159,13 +159,20 @@
 }
 
 bool
+Jid::IsEmpty() const {
+  return data_ == NULL ||
+      (data_->node_name_.empty() && data_->domain_name_.empty() &&
+       data_->resource_name_.empty());
+}
+
+bool
 Jid::IsValid() const {
   return data_ != NULL && !data_->domain_name_.empty();
 }
 
 bool
 Jid::IsBare() const {
-  if (Compare(JID_EMPTY) == 0) {
+  if (IsEmpty()) {
     LOG(LS_VERBOSE) << "Warning: Calling IsBare() on the empty jid";
     return true;
   }
diff --git a/talk/xmpp/jid.h b/talk/xmpp/jid.h
index 7db4d9e..dd10f97 100644
--- a/talk/xmpp/jid.h
+++ b/talk/xmpp/jid.h
@@ -24,8 +24,9 @@
  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-#ifndef _jid_h_
-#define _jid_h_
+
+#ifndef TALK_XMPP_JID_H_
+#define TALK_XMPP_JID_H_
 
 #include <string>
 #include "talk/base/basictypes.h"
@@ -83,6 +84,7 @@
   std::string Str() const;
   Jid BareJid() const;
 
+  bool IsEmpty() const;
   bool IsValid() const;
   bool IsBare() const;
   bool IsFull() const;
@@ -125,15 +127,19 @@
   class Data {
   public:
     Data() : refcount_(1) {}
-    Data(const std::string & node, const std::string &domain, const std::string & resource) :
-      node_name_(node),
-      domain_name_(domain),
-      resource_name_(resource),
-      refcount_(1) {}
+    Data(const std::string & node, const std::string &domain,
+         const std::string & resource)
+        : node_name_(node),
+          domain_name_(domain),
+          resource_name_(resource),
+          refcount_(1) {
+    }
     const std::string node_name_;
     const std::string domain_name_;
     const std::string resource_name_;
 
+    // TODO: ref-counter is not thread-safe here. Make it
+    // thread-safe or remove this optimization.
     void AddRef() { refcount_++; }
     void Release() { if (!--refcount_) delete this; }
   private:
@@ -145,6 +151,4 @@
 
 }
 
-
-
-#endif
+#endif  // TALK_XMPP_JID_H_
diff --git a/talk/xmpp/xmppengineimpl.cc b/talk/xmpp/xmppengineimpl.cc
index 262c531..dd33956 100644
--- a/talk/xmpp/xmppengineimpl.cc
+++ b/talk/xmpp/xmppengineimpl.cc
@@ -56,13 +56,11 @@
     stanzaParseHandler_(this),
     stanzaParser_(&stanzaParseHandler_),
     engine_entered_(0),
-    user_jid_(JID_EMPTY),
     password_(),
     requested_resource_(STR_EMPTY),
     tls_needed_(true),
     login_task_(new XmppLoginTask(this)),
     next_id_(0),
-    bound_jid_(JID_EMPTY),
     state_(STATE_START),
     encrypted_(false),
     error_code_(ERROR_NONE),
diff --git a/talk/xmpp/xmpptask.cc b/talk/xmpp/xmpptask.cc
index 60841d4..be32e55 100644
--- a/talk/xmpp/xmpptask.cc
+++ b/talk/xmpp/xmpptask.cc
@@ -115,7 +115,7 @@
   XmlElement* result = new XmlElement(QN_IQ);
   if (!type.empty())
     result->AddAttr(QN_TYPE, type);
-  if (to != JID_EMPTY)
+  if (!to.IsEmpty())
     result->AddAttr(QN_TO, to.Str());
   if (!id.empty())
     result->AddAttr(QN_ID, id);
@@ -151,7 +151,7 @@
     return true;
 
   // We address the server as "", check if we are doing so here.
-  if (to != JID_EMPTY)
+  if (!to.IsEmpty())
     return false;
 
   // It is legal for the server to identify itself with "domain" or