/*
 * libjingle
 * Copyright 2004--2005, Google Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  1. Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *  3. The name of the author may not be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "talk/p2p/base/constants.h"

namespace cricket {

const std::string NS_EMPTY("");
const std::string NS_JINGLE("urn:xmpp:jingle:1");
const std::string NS_GINGLE("http://www.google.com/session");

// actions (aka <session> or <jingle>)
const buzz::QName QN_ACTION(true, NS_EMPTY, "action");
const std::string LN_INITIATOR("initiator");
const buzz::QName QN_INITIATOR(true, NS_EMPTY, LN_INITIATOR);
const buzz::QName QN_CREATOR(true, NS_EMPTY, "creator");

const buzz::QName QN_JINGLE(true, NS_JINGLE, "jingle");
const buzz::QName QN_JINGLE_CONTENT(true, NS_JINGLE, "content");
const buzz::QName QN_JINGLE_CONTENT_NAME(true, NS_EMPTY, "name");
const buzz::QName QN_JINGLE_CONTENT_MEDIA(true, NS_EMPTY, "media");
const buzz::QName QN_JINGLE_REASON(true, NS_JINGLE, "reason");
const std::string JINGLE_CONTENT_MEDIA_AUDIO("audio");
const std::string JINGLE_CONTENT_MEDIA_VIDEO("video");
const std::string JINGLE_ACTION_SESSION_INITIATE("session-initiate");
const std::string JINGLE_ACTION_SESSION_INFO("session-info");
const std::string JINGLE_ACTION_SESSION_ACCEPT("session-accept");
const std::string JINGLE_ACTION_SESSION_TERMINATE("session-terminate");
const std::string JINGLE_ACTION_TRANSPORT_INFO("transport-info");
const std::string JINGLE_ACTION_TRANSPORT_ACCEPT("transport-accept");

const buzz::QName QN_GINGLE_SESSION(true, NS_GINGLE, "session");
const std::string GINGLE_ACTION_INITIATE("initiate");
const std::string GINGLE_ACTION_INFO("info");
const std::string GINGLE_ACTION_ACCEPT("accept");
const std::string GINGLE_ACTION_REJECT("reject");
const std::string GINGLE_ACTION_TERMINATE("terminate");
const std::string GINGLE_ACTION_CANDIDATES("candidates");

// Session Contents (aka Gingle <session><description>
//                   or Jingle <content><description>)
const std::string LN_DESCRIPTION("description");
const std::string LN_PAYLOADTYPE("payload-type");
const buzz::QName QN_ID(true, NS_EMPTY, "id");
const buzz::QName QN_NAME(true, NS_EMPTY, "name");
const buzz::QName QN_CLOCKRATE(true, NS_EMPTY, "clockrate");
const buzz::QName QN_BITRATE(true, NS_EMPTY, "bitrate");
const buzz::QName QN_CHANNELS(true, NS_EMPTY, "channels");
const buzz::QName QN_WIDTH(true, NS_EMPTY, "width");
const buzz::QName QN_HEIGHT(true, NS_EMPTY, "height");
const buzz::QName QN_FRAMERATE(true, NS_EMPTY, "framerate");
const std::string LN_NAME("name");
const std::string LN_VALUE("value");
const buzz::QName QN_PAYLOADTYPE_PARAMETER_NAME(true, NS_EMPTY, LN_NAME);
const buzz::QName QN_PAYLOADTYPE_PARAMETER_VALUE(true, NS_EMPTY, LN_VALUE);
const std::string PAYLOADTYPE_PARAMETER_BITRATE("bitrate");
const std::string PAYLOADTYPE_PARAMETER_HEIGHT("height");
const std::string PAYLOADTYPE_PARAMETER_WIDTH("width");
const std::string PAYLOADTYPE_PARAMETER_FRAMERATE("framerate");

const std::string CN_AUDIO("audio");
const std::string CN_VIDEO("video");
const std::string CN_OTHER("main");

const std::string NS_JINGLE_RTP("urn:xmpp:jingle:apps:rtp:1");
const buzz::QName QN_JINGLE_RTP_CONTENT(
    true, NS_JINGLE_RTP, LN_DESCRIPTION);
const buzz::QName QN_JINGLE_RTP_PAYLOADTYPE(
    true, NS_JINGLE_RTP, LN_PAYLOADTYPE);
const buzz::QName QN_PARAMETER(true, NS_JINGLE_RTP, "parameter");

const std::string NS_GINGLE_AUDIO("http://www.google.com/session/phone");
const buzz::QName QN_GINGLE_AUDIO_CONTENT(
    true, NS_GINGLE_AUDIO, LN_DESCRIPTION);
const buzz::QName QN_GINGLE_AUDIO_PAYLOADTYPE(
    true, NS_GINGLE_AUDIO, LN_PAYLOADTYPE);
const buzz::QName QN_GINGLE_AUDIO_SRCID(true, NS_GINGLE_AUDIO, "src-id");
const std::string NS_GINGLE_VIDEO("http://www.google.com/session/video");
const buzz::QName QN_GINGLE_VIDEO_CONTENT(
    true, NS_GINGLE_VIDEO, LN_DESCRIPTION);
const buzz::QName QN_GINGLE_VIDEO_PAYLOADTYPE(
    true, NS_GINGLE_VIDEO, LN_PAYLOADTYPE);
const buzz::QName QN_GINGLE_VIDEO_SRCID(true, NS_GINGLE_VIDEO, "src-id");
const buzz::QName QN_GINGLE_VIDEO_BANDWIDTH(true, NS_GINGLE_VIDEO, "bandwidth");

// transports and candidates
const std::string LN_TRANSPORT("transport");
const std::string LN_CANDIDATE("candidate");
const buzz::QName QN_UFRAG(true, cricket::NS_EMPTY, "ufrag");
const buzz::QName QN_PWD(true, cricket::NS_EMPTY, "pwd");
const buzz::QName QN_COMPONENT(true, cricket::NS_EMPTY, "component");
const buzz::QName QN_IP(true, cricket::NS_EMPTY, "ip");
const buzz::QName QN_PORT(true, cricket::NS_EMPTY, "port");
const buzz::QName QN_NETWORK(true, cricket::NS_EMPTY, "network");
const buzz::QName QN_GENERATION(true, cricket::NS_EMPTY, "generation");
const buzz::QName QN_PRIORITY(true, cricket::NS_EMPTY, "priority");
const buzz::QName QN_PROTOCOL(true, cricket::NS_EMPTY, "protocol");
const std::string JINGLE_CANDIDATE_TYPE_PEER_STUN("prflx");
const std::string JINGLE_CANDIDATE_TYPE_SERVER_STUN("srflx");
const std::string JINGLE_CANDIDATE_NAME_RTP("1");
const std::string JINGLE_CANDIDATE_NAME_RTCP("2");

// TODO Once we are full ICE-UDP compliant, use this namespace.
// For now, just use the same as NS_GINGLE_P2P.
// const std::string NS_JINGLE_ICE_UDP("urn:xmpp:jingle:transports:ice-udp:1");
const std::string NS_GINGLE_P2P("http://www.google.com/transport/p2p");
const buzz::QName QN_GINGLE_P2P_TRANSPORT(true, NS_GINGLE_P2P, LN_TRANSPORT);
const buzz::QName QN_GINGLE_P2P_CANDIDATE(true, NS_GINGLE_P2P, LN_CANDIDATE);
const buzz::QName QN_GINGLE_P2P_UNKNOWN_CHANNEL_NAME(
    true, NS_GINGLE_P2P, "unknown-channel-name");
const buzz::QName QN_GINGLE_CANDIDATE(true, NS_GINGLE, LN_CANDIDATE);
const buzz::QName QN_ADDRESS(true, cricket::NS_EMPTY, "address");
const buzz::QName QN_USERNAME(true, cricket::NS_EMPTY, "username");
const buzz::QName QN_PASSWORD(true, cricket::NS_EMPTY, "password");
const buzz::QName QN_PREFERENCE(true, cricket::NS_EMPTY, "preference");
const std::string GINGLE_CANDIDATE_TYPE_STUN("stun");
const std::string GINGLE_CANDIDATE_NAME_RTP("rtp");
const std::string GINGLE_CANDIDATE_NAME_RTCP("rtcp");
const std::string GINGLE_CANDIDATE_NAME_VIDEO_RTP("video_rtp");
const std::string GINGLE_CANDIDATE_NAME_VIDEO_RTCP("video_rtcp");

// terminate reasons and errors
const std::string JINGLE_ERROR_BAD_REQUEST("bad-request");
const std::string JINGLE_ERROR_OUT_OF_ORDER("out-of-order");
const std::string JINGLE_ERROR_UNKNOWN_SESSION("unknown-session");

// Call terminate reasons from XEP-166
const std::string STR_TERMINATE_DECLINE("decline");
const std::string STR_TERMINATE_SUCCESS("success");
const std::string STR_TERMINATE_ERROR("general-error");
const std::string STR_TERMINATE_INCOMPATIBLE_PARAMETERS(
    "incompatible-parameters");

// Old terminate reasons used by cricket
const std::string STR_TERMINATE_CALL_ENDED("call-ended");
const std::string STR_TERMINATE_RECIPIENT_UNAVAILABLE("recipient-unavailable");
const std::string STR_TERMINATE_RECIPIENT_BUSY("recipient-busy");
const std::string STR_TERMINATE_INSUFFICIENT_FUNDS("insufficient-funds");
const std::string STR_TERMINATE_NUMBER_MALFORMED("number-malformed");
const std::string STR_TERMINATE_NUMBER_DISALLOWED("number-disallowed");
const std::string STR_TERMINATE_PROTOCOL_ERROR("protocol-error");
const std::string STR_TERMINATE_INTERNAL_SERVER_ERROR("internal-server-error");
const std::string STR_TERMINATE_UNKNOWN_ERROR("unknown-error");

// old stuff
#ifdef FEATURE_ENABLE_VOICEMAIL
const std::string NS_VOICEMAIL("http://www.google.com/session/voicemail");
const buzz::QName QN_VOICEMAIL_REGARDING(true, NS_VOICEMAIL, "regarding");
#endif

}  // namespace cricket
