Home | History | Annotate | Download | only in xmpp
      1 /*
      2  * libjingle
      3  * Copyright 2004--2005, Google Inc.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are met:
      7  *
      8  *  1. Redistributions of source code must retain the above copyright notice,
      9  *     this list of conditions and the following disclaimer.
     10  *  2. Redistributions in binary form must reproduce the above copyright notice,
     11  *     this list of conditions and the following disclaimer in the documentation
     12  *     and/or other materials provided with the distribution.
     13  *  3. The name of the author may not be used to endorse or promote products
     14  *     derived from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
     19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
     25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26  */
     27 
     28 #include "talk/xmpp/constants.h"
     29 
     30 #include <string>
     31 
     32 #include "webrtc/libjingle/xmllite/qname.h"
     33 #include "webrtc/libjingle/xmllite/xmlconstants.h"
     34 #include "webrtc/libjingle/xmllite/xmlelement.h"
     35 #include "talk/xmpp/jid.h"
     36 #include "webrtc/base/basicdefs.h"
     37 
     38 namespace buzz {
     39 
     40 // TODO: Remove static objects of complex types, particularly
     41 // Jid and QName.
     42 
     43 const char NS_CLIENT[] = "jabber:client";
     44 const char NS_SERVER[] = "jabber:server";
     45 const char NS_STREAM[] = "http://etherx.jabber.org/streams";
     46 const char NS_XSTREAM[] = "urn:ietf:params:xml:ns:xmpp-streams";
     47 const char NS_TLS[] = "urn:ietf:params:xml:ns:xmpp-tls";
     48 const char NS_SASL[] = "urn:ietf:params:xml:ns:xmpp-sasl";
     49 const char NS_BIND[] = "urn:ietf:params:xml:ns:xmpp-bind";
     50 const char NS_DIALBACK[] = "jabber:server:dialback";
     51 const char NS_SESSION[] = "urn:ietf:params:xml:ns:xmpp-session";
     52 const char NS_STANZA[] = "urn:ietf:params:xml:ns:xmpp-stanzas";
     53 const char NS_PRIVACY[] = "jabber:iq:privacy";
     54 const char NS_ROSTER[] = "jabber:iq:roster";
     55 const char NS_VCARD[] = "vcard-temp";
     56 const char NS_AVATAR_HASH[] = "google:avatar";
     57 const char NS_VCARD_UPDATE[] = "vcard-temp:x:update";
     58 const char STR_CLIENT[] = "client";
     59 const char STR_SERVER[] = "server";
     60 const char STR_STREAM[] = "stream";
     61 
     62 const char STR_GET[] = "get";
     63 const char STR_SET[] = "set";
     64 const char STR_RESULT[] = "result";
     65 const char STR_ERROR[] = "error";
     66 
     67 const char STR_FORM[] = "form";
     68 const char STR_SUBMIT[] = "submit";
     69 const char STR_TEXT_SINGLE[] = "text-single";
     70 const char STR_LIST_SINGLE[] = "list-single";
     71 const char STR_LIST_MULTI[] = "list-multi";
     72 const char STR_HIDDEN[] = "hidden";
     73 const char STR_FORM_TYPE[] = "FORM_TYPE";
     74 
     75 const char STR_FROM[] = "from";
     76 const char STR_TO[] = "to";
     77 const char STR_BOTH[] = "both";
     78 const char STR_REMOVE[] = "remove";
     79 const char STR_TRUE[] = "true";
     80 
     81 const char STR_TYPE[] = "type";
     82 const char STR_NAME[] = "name";
     83 const char STR_ID[] = "id";
     84 const char STR_JID[] = "jid";
     85 const char STR_SUBSCRIPTION[] = "subscription";
     86 const char STR_ASK[] = "ask";
     87 const char STR_X[] = "x";
     88 const char STR_GOOGLE_COM[] = "google.com";
     89 const char STR_GMAIL_COM[] = "gmail.com";
     90 const char STR_GOOGLEMAIL_COM[] = "googlemail.com";
     91 const char STR_DEFAULT_DOMAIN[] = "default.talk.google.com";
     92 const char STR_TALK_GOOGLE_COM[] = "talk.google.com";
     93 const char STR_TALKX_L_GOOGLE_COM[] = "talkx.l.google.com";
     94 const char STR_XMPP_GOOGLE_COM[] = "xmpp.google.com";
     95 const char STR_XMPPX_L_GOOGLE_COM[] = "xmppx.l.google.com";
     96 
     97 #ifdef FEATURE_ENABLE_VOICEMAIL
     98 const char STR_VOICEMAIL[] = "voicemail";
     99 const char STR_OUTGOINGVOICEMAIL[] = "outgoingvoicemail";
    100 #endif
    101 
    102 const char STR_UNAVAILABLE[] = "unavailable";
    103 
    104 const char NS_PING[] = "urn:xmpp:ping";
    105 const StaticQName QN_PING = { NS_PING, "ping" };
    106 
    107 const char NS_MUC_UNIQUE[] = "http://jabber.org/protocol/muc#unique";
    108 const StaticQName QN_MUC_UNIQUE_QUERY = { NS_MUC_UNIQUE, "unique" };
    109 const StaticQName QN_HANGOUT_ID = { STR_EMPTY, "hangout-id" };
    110 
    111 const char STR_GOOGLE_MUC_LOOKUP_JID[] = "lookup.groupchat.google.com";
    112 
    113 const char STR_MUC_ROOMCONFIG_ROOMNAME[] = "muc#roomconfig_roomname";
    114 const char STR_MUC_ROOMCONFIG_FEATURES[] = "muc#roomconfig_features";
    115 const char STR_MUC_ROOM_FEATURE_ENTERPRISE[] = "muc_enterprise";
    116 const char STR_MUC_ROOMCONFIG[] = "http://jabber.org/protocol/muc#roomconfig";
    117 const char STR_MUC_ROOM_FEATURE_HANGOUT[] = "muc_es";
    118 const char STR_MUC_ROOM_FEATURE_HANGOUT_LITE[] = "muc_lite";
    119 const char STR_MUC_ROOM_FEATURE_BROADCAST[] = "broadcast";
    120 const char STR_MUC_ROOM_FEATURE_MULTI_USER_VC[] = "muc_muvc";
    121 const char STR_MUC_ROOM_FEATURE_RECORDABLE[] = "recordable";
    122 const char STR_MUC_ROOM_FEATURE_CUSTOM_RECORDING[] = "custom_recording";
    123 const char STR_MUC_ROOM_OWNER_PROFILE_ID[] = "muc#roominfo_owner_profile_id";
    124 const char STR_MUC_ROOM_FEATURE_ABUSE_RECORDABLE[] = "abuse_recordable";
    125 
    126 const char STR_ID_TYPE_CONVERSATION[] = "conversation";
    127 const char NS_GOOGLE_MUC_HANGOUT[] = "google:muc#hangout";
    128 const StaticQName QN_GOOGLE_MUC_HANGOUT_INVITE =
    129     { NS_GOOGLE_MUC_HANGOUT, "invite" };
    130 const StaticQName QN_GOOGLE_MUC_HANGOUT_INVITE_TYPE =
    131     { NS_GOOGLE_MUC_HANGOUT, "invite-type" };
    132 const StaticQName QN_ATTR_CREATE_ACTIVITY =
    133     { STR_EMPTY, "create-activity" };
    134 const StaticQName QN_GOOGLE_MUC_HANGOUT_PUBLIC =
    135     { NS_GOOGLE_MUC_HANGOUT, "public" };
    136 const StaticQName QN_GOOGLE_MUC_HANGOUT_INVITEE =
    137     { NS_GOOGLE_MUC_HANGOUT, "invitee" };
    138 const StaticQName QN_GOOGLE_MUC_HANGOUT_NOTIFICATION_STATUS =
    139     { NS_GOOGLE_MUC_HANGOUT, "notification-status" };
    140 const StaticQName QN_GOOGLE_MUC_HANGOUT_NOTIFICATION_TYPE = {
    141     NS_GOOGLE_MUC_HANGOUT, "notification-type" };
    142 const StaticQName QN_GOOGLE_MUC_HANGOUT_HANGOUT_START_CONTEXT = {
    143     NS_GOOGLE_MUC_HANGOUT, "hangout-start-context" };
    144 const StaticQName QN_GOOGLE_MUC_HANGOUT_CONVERSATION_ID = {
    145     NS_GOOGLE_MUC_HANGOUT, "conversation-id" };
    146 
    147 const StaticQName QN_STREAM_STREAM = { NS_STREAM, STR_STREAM };
    148 const StaticQName QN_STREAM_FEATURES = { NS_STREAM, "features" };
    149 const StaticQName QN_STREAM_ERROR = { NS_STREAM, "error" };
    150 
    151 const StaticQName QN_XSTREAM_BAD_FORMAT = { NS_XSTREAM, "bad-format" };
    152 const StaticQName QN_XSTREAM_BAD_NAMESPACE_PREFIX =
    153     { NS_XSTREAM, "bad-namespace-prefix" };
    154 const StaticQName QN_XSTREAM_CONFLICT = { NS_XSTREAM, "conflict" };
    155 const StaticQName QN_XSTREAM_CONNECTION_TIMEOUT =
    156     { NS_XSTREAM, "connection-timeout" };
    157 const StaticQName QN_XSTREAM_HOST_GONE = { NS_XSTREAM, "host-gone" };
    158 const StaticQName QN_XSTREAM_HOST_UNKNOWN = { NS_XSTREAM, "host-unknown" };
    159 const StaticQName QN_XSTREAM_IMPROPER_ADDRESSIING =
    160      { NS_XSTREAM, "improper-addressing" };
    161 const StaticQName QN_XSTREAM_INTERNAL_SERVER_ERROR =
    162     { NS_XSTREAM, "internal-server-error" };
    163 const StaticQName QN_XSTREAM_INVALID_FROM = { NS_XSTREAM, "invalid-from" };
    164 const StaticQName QN_XSTREAM_INVALID_ID = { NS_XSTREAM, "invalid-id" };
    165 const StaticQName QN_XSTREAM_INVALID_NAMESPACE =
    166     { NS_XSTREAM, "invalid-namespace" };
    167 const StaticQName QN_XSTREAM_INVALID_XML = { NS_XSTREAM, "invalid-xml" };
    168 const StaticQName QN_XSTREAM_NOT_AUTHORIZED = { NS_XSTREAM, "not-authorized" };
    169 const StaticQName QN_XSTREAM_POLICY_VIOLATION =
    170     { NS_XSTREAM, "policy-violation" };
    171 const StaticQName QN_XSTREAM_REMOTE_CONNECTION_FAILED =
    172     { NS_XSTREAM, "remote-connection-failed" };
    173 const StaticQName QN_XSTREAM_RESOURCE_CONSTRAINT =
    174     { NS_XSTREAM, "resource-constraint" };
    175 const StaticQName QN_XSTREAM_RESTRICTED_XML = { NS_XSTREAM, "restricted-xml" };
    176 const StaticQName QN_XSTREAM_SEE_OTHER_HOST = { NS_XSTREAM, "see-other-host" };
    177 const StaticQName QN_XSTREAM_SYSTEM_SHUTDOWN =
    178     { NS_XSTREAM, "system-shutdown" };
    179 const StaticQName QN_XSTREAM_UNDEFINED_CONDITION =
    180     { NS_XSTREAM, "undefined-condition" };
    181 const StaticQName QN_XSTREAM_UNSUPPORTED_ENCODING =
    182     { NS_XSTREAM, "unsupported-encoding" };
    183 const StaticQName QN_XSTREAM_UNSUPPORTED_STANZA_TYPE =
    184     { NS_XSTREAM, "unsupported-stanza-type" };
    185 const StaticQName QN_XSTREAM_UNSUPPORTED_VERSION =
    186     { NS_XSTREAM, "unsupported-version" };
    187 const StaticQName QN_XSTREAM_XML_NOT_WELL_FORMED =
    188     { NS_XSTREAM, "xml-not-well-formed" };
    189 const StaticQName QN_XSTREAM_TEXT = { NS_XSTREAM, "text" };
    190 
    191 const StaticQName QN_TLS_STARTTLS = { NS_TLS, "starttls" };
    192 const StaticQName QN_TLS_REQUIRED = { NS_TLS, "required" };
    193 const StaticQName QN_TLS_PROCEED = { NS_TLS, "proceed" };
    194 const StaticQName QN_TLS_FAILURE = { NS_TLS, "failure" };
    195 
    196 const StaticQName QN_SASL_MECHANISMS = { NS_SASL, "mechanisms" };
    197 const StaticQName QN_SASL_MECHANISM = { NS_SASL, "mechanism" };
    198 const StaticQName QN_SASL_AUTH = { NS_SASL, "auth" };
    199 const StaticQName QN_SASL_CHALLENGE = { NS_SASL, "challenge" };
    200 const StaticQName QN_SASL_RESPONSE = { NS_SASL, "response" };
    201 const StaticQName QN_SASL_ABORT = { NS_SASL, "abort" };
    202 const StaticQName QN_SASL_SUCCESS = { NS_SASL, "success" };
    203 const StaticQName QN_SASL_FAILURE = { NS_SASL, "failure" };
    204 const StaticQName QN_SASL_ABORTED = { NS_SASL, "aborted" };
    205 const StaticQName QN_SASL_INCORRECT_ENCODING =
    206     { NS_SASL, "incorrect-encoding" };
    207 const StaticQName QN_SASL_INVALID_AUTHZID = { NS_SASL, "invalid-authzid" };
    208 const StaticQName QN_SASL_INVALID_MECHANISM = { NS_SASL, "invalid-mechanism" };
    209 const StaticQName QN_SASL_MECHANISM_TOO_WEAK =
    210     { NS_SASL, "mechanism-too-weak" };
    211 const StaticQName QN_SASL_NOT_AUTHORIZED = { NS_SASL, "not-authorized" };
    212 const StaticQName QN_SASL_TEMPORARY_AUTH_FAILURE =
    213     { NS_SASL, "temporary-auth-failure" };
    214 
    215 // These are non-standard.
    216 const char NS_GOOGLE_AUTH_PROTOCOL[] =
    217     "http://www.google.com/talk/protocol/auth";
    218 const StaticQName QN_GOOGLE_AUTH_CLIENT_USES_FULL_BIND_RESULT =
    219     { NS_GOOGLE_AUTH_PROTOCOL, "client-uses-full-bind-result" };
    220 const StaticQName QN_GOOGLE_ALLOW_NON_GOOGLE_ID_XMPP_LOGIN =
    221     { NS_GOOGLE_AUTH_PROTOCOL, "allow-non-google-login" };
    222 const StaticQName QN_GOOGLE_AUTH_SERVICE =
    223     { NS_GOOGLE_AUTH_PROTOCOL, "service" };
    224 
    225 const StaticQName QN_DIALBACK_RESULT = { NS_DIALBACK, "result" };
    226 const StaticQName QN_DIALBACK_VERIFY = { NS_DIALBACK, "verify" };
    227 
    228 const StaticQName QN_STANZA_BAD_REQUEST = { NS_STANZA, "bad-request" };
    229 const StaticQName QN_STANZA_CONFLICT = { NS_STANZA, "conflict" };
    230 const StaticQName QN_STANZA_FEATURE_NOT_IMPLEMENTED =
    231     { NS_STANZA, "feature-not-implemented" };
    232 const StaticQName QN_STANZA_FORBIDDEN = { NS_STANZA, "forbidden" };
    233 const StaticQName QN_STANZA_GONE = { NS_STANZA, "gone" };
    234 const StaticQName QN_STANZA_INTERNAL_SERVER_ERROR =
    235     { NS_STANZA, "internal-server-error" };
    236 const StaticQName QN_STANZA_ITEM_NOT_FOUND = { NS_STANZA, "item-not-found" };
    237 const StaticQName QN_STANZA_JID_MALFORMED = { NS_STANZA, "jid-malformed" };
    238 const StaticQName QN_STANZA_NOT_ACCEPTABLE = { NS_STANZA, "not-acceptable" };
    239 const StaticQName QN_STANZA_NOT_ALLOWED = { NS_STANZA, "not-allowed" };
    240 const StaticQName QN_STANZA_PAYMENT_REQUIRED =
    241     { NS_STANZA, "payment-required" };
    242 const StaticQName QN_STANZA_RECIPIENT_UNAVAILABLE =
    243     { NS_STANZA, "recipient-unavailable" };
    244 const StaticQName QN_STANZA_REDIRECT = { NS_STANZA, "redirect" };
    245 const StaticQName QN_STANZA_REGISTRATION_REQUIRED =
    246     { NS_STANZA, "registration-required" };
    247 const StaticQName QN_STANZA_REMOTE_SERVER_NOT_FOUND =
    248     { NS_STANZA, "remote-server-not-found" };
    249 const StaticQName QN_STANZA_REMOTE_SERVER_TIMEOUT =
    250     { NS_STANZA, "remote-server-timeout" };
    251 const StaticQName QN_STANZA_RESOURCE_CONSTRAINT =
    252     { NS_STANZA, "resource-constraint" };
    253 const StaticQName QN_STANZA_SERVICE_UNAVAILABLE =
    254     { NS_STANZA, "service-unavailable" };
    255 const StaticQName QN_STANZA_SUBSCRIPTION_REQUIRED =
    256     { NS_STANZA, "subscription-required" };
    257 const StaticQName QN_STANZA_UNDEFINED_CONDITION =
    258     { NS_STANZA, "undefined-condition" };
    259 const StaticQName QN_STANZA_UNEXPECTED_REQUEST =
    260     { NS_STANZA, "unexpected-request" };
    261 const StaticQName QN_STANZA_TEXT = { NS_STANZA, "text" };
    262 
    263 const StaticQName QN_BIND_BIND = { NS_BIND, "bind" };
    264 const StaticQName QN_BIND_RESOURCE = { NS_BIND, "resource" };
    265 const StaticQName QN_BIND_JID = { NS_BIND, "jid" };
    266 
    267 const StaticQName QN_MESSAGE = { NS_CLIENT, "message" };
    268 const StaticQName QN_BODY = { NS_CLIENT, "body" };
    269 const StaticQName QN_SUBJECT = { NS_CLIENT, "subject" };
    270 const StaticQName QN_THREAD = { NS_CLIENT, "thread" };
    271 const StaticQName QN_PRESENCE = { NS_CLIENT, "presence" };
    272 const StaticQName QN_SHOW = { NS_CLIENT, "show" };
    273 const StaticQName QN_STATUS = { NS_CLIENT, "status" };
    274 const StaticQName QN_LANG = { NS_CLIENT, "lang" };
    275 const StaticQName QN_PRIORITY = { NS_CLIENT, "priority" };
    276 const StaticQName QN_IQ = { NS_CLIENT, "iq" };
    277 const StaticQName QN_ERROR = { NS_CLIENT, "error" };
    278 
    279 const StaticQName QN_SERVER_MESSAGE = { NS_SERVER, "message" };
    280 const StaticQName QN_SERVER_BODY = { NS_SERVER, "body" };
    281 const StaticQName QN_SERVER_SUBJECT = { NS_SERVER, "subject" };
    282 const StaticQName QN_SERVER_THREAD = { NS_SERVER, "thread" };
    283 const StaticQName QN_SERVER_PRESENCE = { NS_SERVER, "presence" };
    284 const StaticQName QN_SERVER_SHOW = { NS_SERVER, "show" };
    285 const StaticQName QN_SERVER_STATUS = { NS_SERVER, "status" };
    286 const StaticQName QN_SERVER_LANG = { NS_SERVER, "lang" };
    287 const StaticQName QN_SERVER_PRIORITY = { NS_SERVER, "priority" };
    288 const StaticQName QN_SERVER_IQ = { NS_SERVER, "iq" };
    289 const StaticQName QN_SERVER_ERROR = { NS_SERVER, "error" };
    290 
    291 const StaticQName QN_SESSION_SESSION = { NS_SESSION, "session" };
    292 
    293 const StaticQName QN_PRIVACY_QUERY = { NS_PRIVACY, "query" };
    294 const StaticQName QN_PRIVACY_ACTIVE = { NS_PRIVACY, "active" };
    295 const StaticQName QN_PRIVACY_DEFAULT = { NS_PRIVACY, "default" };
    296 const StaticQName QN_PRIVACY_LIST = { NS_PRIVACY, "list" };
    297 const StaticQName QN_PRIVACY_ITEM = { NS_PRIVACY, "item" };
    298 const StaticQName QN_PRIVACY_IQ = { NS_PRIVACY, "iq" };
    299 const StaticQName QN_PRIVACY_MESSAGE = { NS_PRIVACY, "message" };
    300 const StaticQName QN_PRIVACY_PRESENCE_IN = { NS_PRIVACY, "presence-in" };
    301 const StaticQName QN_PRIVACY_PRESENCE_OUT = { NS_PRIVACY, "presence-out" };
    302 
    303 const StaticQName QN_ROSTER_QUERY = { NS_ROSTER, "query" };
    304 const StaticQName QN_ROSTER_ITEM = { NS_ROSTER, "item" };
    305 const StaticQName QN_ROSTER_GROUP = { NS_ROSTER, "group" };
    306 
    307 const StaticQName QN_VCARD = { NS_VCARD, "vCard" };
    308 const StaticQName QN_VCARD_FN = { NS_VCARD, "FN" };
    309 const StaticQName QN_VCARD_PHOTO = { NS_VCARD, "PHOTO" };
    310 const StaticQName QN_VCARD_PHOTO_BINVAL = { NS_VCARD, "BINVAL" };
    311 const StaticQName QN_VCARD_AVATAR_HASH = { NS_AVATAR_HASH, "hash" };
    312 const StaticQName QN_VCARD_AVATAR_HASH_MODIFIED =
    313     { NS_AVATAR_HASH, "modified" };
    314 
    315 const StaticQName QN_NAME = { STR_EMPTY, "name" };
    316 const StaticQName QN_AFFILIATION = { STR_EMPTY, "affiliation" };
    317 const StaticQName QN_ROLE = { STR_EMPTY, "role" };
    318 
    319 #if defined(FEATURE_ENABLE_PSTN)
    320 const StaticQName QN_VCARD_TEL = { NS_VCARD, "TEL" };
    321 const StaticQName QN_VCARD_VOICE = { NS_VCARD, "VOICE" };
    322 const StaticQName QN_VCARD_HOME = { NS_VCARD, "HOME" };
    323 const StaticQName QN_VCARD_WORK = { NS_VCARD, "WORK" };
    324 const StaticQName QN_VCARD_CELL = { NS_VCARD, "CELL" };
    325 const StaticQName QN_VCARD_NUMBER = { NS_VCARD, "NUMBER" };
    326 #endif
    327 
    328 const StaticQName QN_XML_LANG = { NS_XML, "lang" };
    329 
    330 const StaticQName QN_ENCODING = { STR_EMPTY, STR_ENCODING };
    331 const StaticQName QN_VERSION = { STR_EMPTY, STR_VERSION };
    332 const StaticQName QN_TO = { STR_EMPTY, "to" };
    333 const StaticQName QN_FROM = { STR_EMPTY, "from" };
    334 const StaticQName QN_TYPE = { STR_EMPTY, "type" };
    335 const StaticQName QN_ID = { STR_EMPTY, "id" };
    336 const StaticQName QN_CODE = { STR_EMPTY, "code" };
    337 
    338 const StaticQName QN_VALUE = { STR_EMPTY, "value" };
    339 const StaticQName QN_ACTION = { STR_EMPTY, "action" };
    340 const StaticQName QN_ORDER = { STR_EMPTY, "order" };
    341 const StaticQName QN_MECHANISM = { STR_EMPTY, "mechanism" };
    342 const StaticQName QN_ASK = { STR_EMPTY, "ask" };
    343 const StaticQName QN_JID = { STR_EMPTY, "jid" };
    344 const StaticQName QN_NICK = { STR_EMPTY, "nick" };
    345 const StaticQName QN_SUBSCRIPTION = { STR_EMPTY, "subscription" };
    346 const StaticQName QN_TITLE1 = { STR_EMPTY, "title1" };
    347 const StaticQName QN_TITLE2 = { STR_EMPTY, "title2" };
    348 
    349 const StaticQName QN_XMLNS_CLIENT = { NS_XMLNS, STR_CLIENT };
    350 const StaticQName QN_XMLNS_SERVER = { NS_XMLNS, STR_SERVER };
    351 const StaticQName QN_XMLNS_STREAM = { NS_XMLNS, STR_STREAM };
    352 
    353 
    354 // Presence
    355 const char STR_SHOW_AWAY[] = "away";
    356 const char STR_SHOW_CHAT[] = "chat";
    357 const char STR_SHOW_DND[] = "dnd";
    358 const char STR_SHOW_XA[] = "xa";
    359 const char STR_SHOW_OFFLINE[] = "offline";
    360 
    361 const char NS_GOOGLE_PSTN_CONFERENCE[] = "http://www.google.com/pstn-conference";
    362 const StaticQName QN_GOOGLE_PSTN_CONFERENCE_STATUS = { NS_GOOGLE_PSTN_CONFERENCE, "status" };
    363 const StaticQName QN_ATTR_STATUS = { STR_EMPTY, "status" };
    364 
    365 // Presence connection status
    366 const char STR_PSTN_CONFERENCE_STATUS_CONNECTING[] = "connecting";
    367 const char STR_PSTN_CONFERENCE_STATUS_JOINING[] = "joining";
    368 const char STR_PSTN_CONFERENCE_STATUS_CONNECTED[] = "connected";
    369 const char STR_PSTN_CONFERENCE_STATUS_HANGUP[] = "hangup";
    370 
    371 // Subscription
    372 const char STR_SUBSCRIBE[] = "subscribe";
    373 const char STR_SUBSCRIBED[] = "subscribed";
    374 const char STR_UNSUBSCRIBE[] = "unsubscribe";
    375 const char STR_UNSUBSCRIBED[] = "unsubscribed";
    376 
    377 // Google Invite
    378 const char NS_GOOGLE_SUBSCRIBE[] = "google:subscribe";
    379 const StaticQName QN_INVITATION = { NS_GOOGLE_SUBSCRIBE, "invitation" };
    380 const StaticQName QN_INVITE_NAME = { NS_GOOGLE_SUBSCRIBE, "name" };
    381 const StaticQName QN_INVITE_SUBJECT = { NS_GOOGLE_SUBSCRIBE, "subject" };
    382 const StaticQName QN_INVITE_MESSAGE = { NS_GOOGLE_SUBSCRIBE, "body" };
    383 
    384 // Kick
    385 const char NS_GOOGLE_MUC_ADMIN[] = "google:muc#admin";
    386 const StaticQName QN_GOOGLE_MUC_ADMIN_QUERY = { NS_GOOGLE_MUC_ADMIN, "query" };
    387 const StaticQName QN_GOOGLE_MUC_ADMIN_QUERY_ITEM =
    388     { NS_GOOGLE_MUC_ADMIN, "item" };
    389 const StaticQName QN_GOOGLE_MUC_ADMIN_QUERY_ITEM_REASON =
    390     { NS_GOOGLE_MUC_ADMIN, "reason" };
    391 
    392 // PubSub: http://xmpp.org/extensions/xep-0060.html
    393 const char NS_PUBSUB[] = "http://jabber.org/protocol/pubsub";
    394 const StaticQName QN_PUBSUB = { NS_PUBSUB, "pubsub" };
    395 const StaticQName QN_PUBSUB_ITEMS = { NS_PUBSUB, "items" };
    396 const StaticQName QN_PUBSUB_ITEM = { NS_PUBSUB, "item" };
    397 const StaticQName QN_PUBSUB_PUBLISH = { NS_PUBSUB, "publish" };
    398 const StaticQName QN_PUBSUB_RETRACT = { NS_PUBSUB, "retract" };
    399 const StaticQName QN_ATTR_PUBLISHER = { STR_EMPTY, "publisher" };
    400 
    401 const char NS_PUBSUB_EVENT[] = "http://jabber.org/protocol/pubsub#event";
    402 const StaticQName QN_NODE = { STR_EMPTY, "node" };
    403 const StaticQName QN_PUBSUB_EVENT = { NS_PUBSUB_EVENT, "event" };
    404 const StaticQName QN_PUBSUB_EVENT_ITEMS = { NS_PUBSUB_EVENT, "items" };
    405 const StaticQName QN_PUBSUB_EVENT_ITEM = { NS_PUBSUB_EVENT, "item" };
    406 const StaticQName QN_PUBSUB_EVENT_RETRACT = { NS_PUBSUB_EVENT, "retract" };
    407 const StaticQName QN_NOTIFY = { STR_EMPTY, "notify" };
    408 
    409 const char NS_PRESENTER[] = "google:presenter";
    410 const StaticQName QN_PRESENTER_PRESENTER = { NS_PRESENTER, "presenter" };
    411 const StaticQName QN_PRESENTER_PRESENTATION_ITEM =
    412     { NS_PRESENTER, "presentation-item" };
    413 const StaticQName QN_PRESENTER_PRESENTATION_TYPE =
    414     { NS_PRESENTER, "presentation-type" };
    415 const StaticQName QN_PRESENTER_PRESENTATION_ID =
    416     { NS_PRESENTER, "presentation-id" };
    417 
    418 // JEP 0030
    419 const StaticQName QN_CATEGORY = { STR_EMPTY, "category" };
    420 const StaticQName QN_VAR = { STR_EMPTY, "var" };
    421 const char NS_DISCO_INFO[] = "http://jabber.org/protocol/disco#info";
    422 const char NS_DISCO_ITEMS[] = "http://jabber.org/protocol/disco#items";
    423 const StaticQName QN_DISCO_INFO_QUERY = { NS_DISCO_INFO, "query" };
    424 const StaticQName QN_DISCO_IDENTITY = { NS_DISCO_INFO, "identity" };
    425 const StaticQName QN_DISCO_FEATURE = { NS_DISCO_INFO, "feature" };
    426 
    427 const StaticQName QN_DISCO_ITEMS_QUERY = { NS_DISCO_ITEMS, "query" };
    428 const StaticQName QN_DISCO_ITEM = { NS_DISCO_ITEMS, "item" };
    429 
    430 // JEP 0020
    431 const char NS_FEATURE[] = "http://jabber.org/protocol/feature-neg";
    432 const StaticQName QN_FEATURE_FEATURE = { NS_FEATURE, "feature" };
    433 
    434 // JEP 0004
    435 const char NS_XDATA[] = "jabber:x:data";
    436 const StaticQName QN_XDATA_X = { NS_XDATA, "x" };
    437 const StaticQName QN_XDATA_INSTRUCTIONS = { NS_XDATA, "instructions" };
    438 const StaticQName QN_XDATA_TITLE = { NS_XDATA, "title" };
    439 const StaticQName QN_XDATA_FIELD = { NS_XDATA, "field" };
    440 const StaticQName QN_XDATA_REPORTED = { NS_XDATA, "reported" };
    441 const StaticQName QN_XDATA_ITEM = { NS_XDATA, "item" };
    442 const StaticQName QN_XDATA_DESC = { NS_XDATA, "desc" };
    443 const StaticQName QN_XDATA_REQUIRED = { NS_XDATA, "required" };
    444 const StaticQName QN_XDATA_VALUE = { NS_XDATA, "value" };
    445 const StaticQName QN_XDATA_OPTION = { NS_XDATA, "option" };
    446 
    447 // JEP 0045
    448 const char NS_MUC[] = "http://jabber.org/protocol/muc";
    449 const StaticQName QN_MUC_X = { NS_MUC, "x" };
    450 const StaticQName QN_MUC_ITEM = { NS_MUC, "item" };
    451 const StaticQName QN_MUC_AFFILIATION = { NS_MUC, "affiliation" };
    452 const StaticQName QN_MUC_ROLE = { NS_MUC, "role" };
    453 const char STR_AFFILIATION_NONE[] = "none";
    454 const char STR_ROLE_PARTICIPANT[] = "participant";
    455 
    456 const char NS_GOOGLE_SESSION[] = "http://www.google.com/session";
    457 const StaticQName QN_GOOGLE_CIRCLE_ID = { STR_EMPTY, "google-circle-id" };
    458 const StaticQName QN_GOOGLE_USER_ID = { STR_EMPTY, "google-user-id" };
    459 const StaticQName QN_GOOGLE_SESSION_BLOCKED = { NS_GOOGLE_SESSION, "blocked" };
    460 const StaticQName QN_GOOGLE_SESSION_BLOCKING =
    461     { NS_GOOGLE_SESSION, "blocking" };
    462 
    463 const char NS_MUC_OWNER[] = "http://jabber.org/protocol/muc#owner";
    464 const StaticQName QN_MUC_OWNER_QUERY = { NS_MUC_OWNER, "query" };
    465 
    466 const char NS_MUC_USER[] = "http://jabber.org/protocol/muc#user";
    467 const StaticQName QN_MUC_USER_CONTINUE = { NS_MUC_USER, "continue" };
    468 const StaticQName QN_MUC_USER_X = { NS_MUC_USER, "x" };
    469 const StaticQName QN_MUC_USER_ITEM = { NS_MUC_USER, "item" };
    470 const StaticQName QN_MUC_USER_STATUS = { NS_MUC_USER, "status" };
    471 const StaticQName QN_MUC_USER_REASON = { NS_MUC_USER, "reason" };
    472 const StaticQName QN_MUC_USER_ABUSE_VIOLATION = { NS_MUC_USER, "abuse-violation" };
    473 
    474 // JEP 0055 - Jabber Search
    475 const char NS_SEARCH[] = "jabber:iq:search";
    476 const StaticQName QN_SEARCH_QUERY = { NS_SEARCH, "query" };
    477 const StaticQName QN_SEARCH_ITEM = { NS_SEARCH, "item" };
    478 const StaticQName QN_SEARCH_ROOM_NAME = { NS_SEARCH, "room-name" };
    479 const StaticQName QN_SEARCH_ROOM_DOMAIN = { NS_SEARCH, "room-domain" };
    480 const StaticQName QN_SEARCH_ROOM_JID = { NS_SEARCH, "room-jid" };
    481 const StaticQName QN_SEARCH_HANGOUT_ID = { NS_SEARCH, "hangout-id" };
    482 const StaticQName QN_SEARCH_EXTERNAL_ID = { NS_SEARCH, "external-id" };
    483 
    484 // JEP 0115
    485 const char NS_CAPS[] = "http://jabber.org/protocol/caps";
    486 const StaticQName QN_CAPS_C = { NS_CAPS, "c" };
    487 const StaticQName QN_VER = { STR_EMPTY, "ver" };
    488 const StaticQName QN_EXT = { STR_EMPTY, "ext" };
    489 
    490 // JEP 0153
    491 const char kNSVCard[] = "vcard-temp:x:update";
    492 const StaticQName kQnVCardX = { kNSVCard, "x" };
    493 const StaticQName kQnVCardPhoto = { kNSVCard, "photo" };
    494 
    495 // JEP 0172 User Nickname
    496 const char NS_NICKNAME[] = "http://jabber.org/protocol/nick";
    497 const StaticQName QN_NICKNAME = { NS_NICKNAME, "nick" };
    498 
    499 // JEP 0085 chat state
    500 const char NS_CHATSTATE[] = "http://jabber.org/protocol/chatstates";
    501 const StaticQName QN_CS_ACTIVE = { NS_CHATSTATE, "active" };
    502 const StaticQName QN_CS_COMPOSING = { NS_CHATSTATE, "composing" };
    503 const StaticQName QN_CS_PAUSED = { NS_CHATSTATE, "paused" };
    504 const StaticQName QN_CS_INACTIVE = { NS_CHATSTATE, "inactive" };
    505 const StaticQName QN_CS_GONE = { NS_CHATSTATE, "gone" };
    506 
    507 // JEP 0091 Delayed Delivery
    508 const char kNSDelay[] = "jabber:x:delay";
    509 const StaticQName kQnDelayX = { kNSDelay, "x" };
    510 const StaticQName kQnStamp = { STR_EMPTY, "stamp" };
    511 
    512 // Google time stamping (higher resolution)
    513 const char kNSTimestamp[] = "google:timestamp";
    514 const StaticQName kQnTime = { kNSTimestamp, "time" };
    515 const StaticQName kQnMilliseconds = { STR_EMPTY, "ms" };
    516 
    517 // Jingle Info
    518 const char NS_JINGLE_INFO[] = "google:jingleinfo";
    519 const StaticQName QN_JINGLE_INFO_QUERY = { NS_JINGLE_INFO, "query" };
    520 const StaticQName QN_JINGLE_INFO_STUN = { NS_JINGLE_INFO, "stun" };
    521 const StaticQName QN_JINGLE_INFO_RELAY = { NS_JINGLE_INFO, "relay" };
    522 const StaticQName QN_JINGLE_INFO_SERVER = { NS_JINGLE_INFO, "server" };
    523 const StaticQName QN_JINGLE_INFO_TOKEN = { NS_JINGLE_INFO, "token" };
    524 const StaticQName QN_JINGLE_INFO_HOST = { STR_EMPTY, "host" };
    525 const StaticQName QN_JINGLE_INFO_TCP = { STR_EMPTY, "tcp" };
    526 const StaticQName QN_JINGLE_INFO_UDP = { STR_EMPTY, "udp" };
    527 const StaticQName QN_JINGLE_INFO_TCPSSL = { STR_EMPTY, "tcpssl" };
    528 
    529 // Call Performance Logging
    530 const char NS_GOOGLE_CALLPERF_STATS[] = "google:call-perf-stats";
    531 const StaticQName QN_CALLPERF_STATS =
    532     { NS_GOOGLE_CALLPERF_STATS, "callPerfStats" };
    533 const StaticQName QN_CALLPERF_SESSIONID = { STR_EMPTY, "sessionId" };
    534 const StaticQName QN_CALLPERF_LOCALUSER = { STR_EMPTY, "localUser" };
    535 const StaticQName QN_CALLPERF_REMOTEUSER = { STR_EMPTY, "remoteUser" };
    536 const StaticQName QN_CALLPERF_STARTTIME = { STR_EMPTY, "startTime" };
    537 const StaticQName QN_CALLPERF_CALL_LENGTH = { STR_EMPTY, "callLength" };
    538 const StaticQName QN_CALLPERF_CALL_ACCEPTED = { STR_EMPTY, "callAccepted" };
    539 const StaticQName QN_CALLPERF_CALL_ERROR_CODE = { STR_EMPTY, "callErrorCode" };
    540 const StaticQName QN_CALLPERF_TERMINATE_CODE = { STR_EMPTY, "terminateCode" };
    541 const StaticQName QN_CALLPERF_DATAPOINT =
    542     { NS_GOOGLE_CALLPERF_STATS, "dataPoint" };
    543 const StaticQName QN_CALLPERF_DATAPOINT_TIME = { STR_EMPTY, "timeStamp" };
    544 const StaticQName QN_CALLPERF_DATAPOINT_FRACTION_LOST =
    545     { STR_EMPTY, "fraction_lost" };
    546 const StaticQName QN_CALLPERF_DATAPOINT_CUM_LOST = { STR_EMPTY, "cum_lost" };
    547 const StaticQName QN_CALLPERF_DATAPOINT_EXT_MAX = { STR_EMPTY, "ext_max" };
    548 const StaticQName QN_CALLPERF_DATAPOINT_JITTER = { STR_EMPTY, "jitter" };
    549 const StaticQName QN_CALLPERF_DATAPOINT_RTT = { STR_EMPTY, "RTT" };
    550 const StaticQName QN_CALLPERF_DATAPOINT_BYTES_R =
    551     { STR_EMPTY, "bytesReceived" };
    552 const StaticQName QN_CALLPERF_DATAPOINT_PACKETS_R =
    553     { STR_EMPTY, "packetsReceived" };
    554 const StaticQName QN_CALLPERF_DATAPOINT_BYTES_S = { STR_EMPTY, "bytesSent" };
    555 const StaticQName QN_CALLPERF_DATAPOINT_PACKETS_S =
    556     { STR_EMPTY, "packetsSent" };
    557 const StaticQName QN_CALLPERF_DATAPOINT_PROCESS_CPU =
    558     { STR_EMPTY, "processCpu" };
    559 const StaticQName QN_CALLPERF_DATAPOINT_SYSTEM_CPU = { STR_EMPTY, "systemCpu" };
    560 const StaticQName QN_CALLPERF_DATAPOINT_CPUS = { STR_EMPTY, "cpus" };
    561 const StaticQName QN_CALLPERF_CONNECTION =
    562     { NS_GOOGLE_CALLPERF_STATS, "connection" };
    563 const StaticQName QN_CALLPERF_CONNECTION_LOCAL_ADDRESS =
    564     { STR_EMPTY, "localAddress" };
    565 const StaticQName QN_CALLPERF_CONNECTION_REMOTE_ADDRESS =
    566     { STR_EMPTY, "remoteAddress" };
    567 const StaticQName QN_CALLPERF_CONNECTION_FLAGS = { STR_EMPTY, "flags" };
    568 const StaticQName QN_CALLPERF_CONNECTION_RTT = { STR_EMPTY, "rtt" };
    569 const StaticQName QN_CALLPERF_CONNECTION_TOTAL_BYTES_S =
    570     { STR_EMPTY, "totalBytesSent" };
    571 const StaticQName QN_CALLPERF_CONNECTION_BYTES_SECOND_S =
    572     { STR_EMPTY, "bytesSecondSent" };
    573 const StaticQName QN_CALLPERF_CONNECTION_TOTAL_BYTES_R =
    574     { STR_EMPTY, "totalBytesRecv" };
    575 const StaticQName QN_CALLPERF_CONNECTION_BYTES_SECOND_R =
    576     { STR_EMPTY, "bytesSecondRecv" };
    577 const StaticQName QN_CALLPERF_CANDIDATE =
    578     { NS_GOOGLE_CALLPERF_STATS, "candidate" };
    579 const StaticQName QN_CALLPERF_CANDIDATE_ENDPOINT = { STR_EMPTY, "endpoint" };
    580 const StaticQName QN_CALLPERF_CANDIDATE_PROTOCOL = { STR_EMPTY, "protocol" };
    581 const StaticQName QN_CALLPERF_CANDIDATE_ADDRESS = { STR_EMPTY, "address" };
    582 const StaticQName QN_CALLPERF_MEDIA = { NS_GOOGLE_CALLPERF_STATS, "media" };
    583 const StaticQName QN_CALLPERF_MEDIA_DIRECTION = { STR_EMPTY, "direction" };
    584 const StaticQName QN_CALLPERF_MEDIA_SSRC = { STR_EMPTY, "SSRC" };
    585 const StaticQName QN_CALLPERF_MEDIA_ENERGY = { STR_EMPTY, "energy" };
    586 const StaticQName QN_CALLPERF_MEDIA_FIR = { STR_EMPTY, "fir" };
    587 const StaticQName QN_CALLPERF_MEDIA_NACK = { STR_EMPTY, "nack" };
    588 const StaticQName QN_CALLPERF_MEDIA_FPS = { STR_EMPTY, "fps" };
    589 const StaticQName QN_CALLPERF_MEDIA_FPS_NETWORK = { STR_EMPTY, "fpsNetwork" };
    590 const StaticQName QN_CALLPERF_MEDIA_FPS_DECODED = { STR_EMPTY, "fpsDecoded" };
    591 const StaticQName QN_CALLPERF_MEDIA_JITTER_BUFFER_SIZE =
    592     { STR_EMPTY, "jitterBufferSize" };
    593 const StaticQName QN_CALLPERF_MEDIA_PREFERRED_JITTER_BUFFER_SIZE =
    594     { STR_EMPTY, "preferredJitterBufferSize" };
    595 const StaticQName QN_CALLPERF_MEDIA_TOTAL_PLAYOUT_DELAY =
    596     { STR_EMPTY, "totalPlayoutDelay" };
    597 
    598 // Muc invites.
    599 const StaticQName QN_MUC_USER_INVITE = { NS_MUC_USER, "invite" };
    600 
    601 // Multiway audio/video.
    602 const char NS_GOOGLE_MUC_USER[] = "google:muc#user";
    603 const StaticQName QN_GOOGLE_MUC_USER_AVAILABLE_MEDIA =
    604     { NS_GOOGLE_MUC_USER, "available-media" };
    605 const StaticQName QN_GOOGLE_MUC_USER_ENTRY = { NS_GOOGLE_MUC_USER, "entry" };
    606 const StaticQName QN_GOOGLE_MUC_USER_MEDIA = { NS_GOOGLE_MUC_USER, "media" };
    607 const StaticQName QN_GOOGLE_MUC_USER_TYPE = { NS_GOOGLE_MUC_USER, "type" };
    608 const StaticQName QN_GOOGLE_MUC_USER_SRC_ID = { NS_GOOGLE_MUC_USER, "src-id" };
    609 const StaticQName QN_GOOGLE_MUC_USER_STATUS = { NS_GOOGLE_MUC_USER, "status" };
    610 const StaticQName QN_CLIENT_VERSION = { NS_GOOGLE_MUC_USER, "client-version" };
    611 const StaticQName QN_LOCALE = { NS_GOOGLE_MUC_USER, "locale" };
    612 const StaticQName QN_LABEL = { STR_EMPTY, "label" };
    613 
    614 const char NS_GOOGLE_MUC_MEDIA[] = "google:muc#media";
    615 const StaticQName QN_GOOGLE_MUC_AUDIO_MUTE =
    616     { NS_GOOGLE_MUC_MEDIA, "audio-mute" };
    617 const StaticQName QN_GOOGLE_MUC_VIDEO_MUTE =
    618     { NS_GOOGLE_MUC_MEDIA, "video-mute" };
    619 const StaticQName QN_GOOGLE_MUC_VIDEO_PAUSE =
    620     { NS_GOOGLE_MUC_MEDIA, "video-pause" };
    621 const StaticQName QN_GOOGLE_MUC_RECORDING =
    622     { NS_GOOGLE_MUC_MEDIA, "recording" };
    623 const StaticQName QN_GOOGLE_MUC_MEDIA_BLOCK = { NS_GOOGLE_MUC_MEDIA, "block" };
    624 const StaticQName QN_STATE_ATTR = { STR_EMPTY, "state" };
    625 
    626 const char AUTH_MECHANISM_GOOGLE_COOKIE[] = "X-GOOGLE-COOKIE";
    627 const char AUTH_MECHANISM_GOOGLE_TOKEN[] = "X-GOOGLE-TOKEN";
    628 const char AUTH_MECHANISM_OAUTH2[] = "X-OAUTH2";
    629 const char AUTH_MECHANISM_PLAIN[] = "PLAIN";
    630 
    631 }  // namespace buzz
    632