| Index: remoting/protocol/content_description.cc
|
| diff --git a/remoting/protocol/content_description.cc b/remoting/protocol/content_description.cc
|
| index 70ba05b570ae48b4747ec83b0f998368fff7562a..2904f0c887e0ef90fa2d11ee2143cc54a3f75fa1 100644
|
| --- a/remoting/protocol/content_description.cc
|
| +++ b/remoting/protocol/content_description.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/string_number_conversions.h"
|
| #include "remoting/base/constants.h"
|
| #include "remoting/protocol/authenticator.h"
|
| +#include "remoting/protocol/name_value_map.h"
|
| #include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
|
|
|
| using buzz::QName;
|
| @@ -36,45 +37,19 @@ const char kCodecAttr[] = "codec";
|
| const char kDeprecatedWidthAttr[] = "width";
|
| const char kDeprecatedHeightAttr[] = "height";
|
|
|
| -const char kStreamTransport[] = "stream";
|
| -const char kDatagramTransport[] = "datagram";
|
| -const char kNoneTransport[] = "none";
|
| -
|
| -const char kVerbatimCodec[] = "verbatim";
|
| -const char kVp8Codec[] = "vp8";
|
| -const char kZipCodec[] = "zip";
|
| -const char kVorbisCodec[] = "vorbis";
|
| -
|
| -const char* GetTransportName(ChannelConfig::TransportType type) {
|
| - switch (type) {
|
| - case ChannelConfig::TRANSPORT_STREAM:
|
| - return kStreamTransport;
|
| - case ChannelConfig::TRANSPORT_DATAGRAM:
|
| - return kDatagramTransport;
|
| - case ChannelConfig::TRANSPORT_NONE:
|
| - return kNoneTransport;
|
| - }
|
| - NOTREACHED();
|
| - return NULL;
|
| -}
|
| -
|
| -const char* GetCodecName(ChannelConfig::Codec type) {
|
| - switch (type) {
|
| - case ChannelConfig::CODEC_VERBATIM:
|
| - return kVerbatimCodec;
|
| - case ChannelConfig::CODEC_VP8:
|
| - return kVp8Codec;
|
| - case ChannelConfig::CODEC_ZIP:
|
| - return kZipCodec;
|
| - case ChannelConfig::CODEC_VORBIS:
|
| - return kVorbisCodec;
|
| - default:
|
| - break;
|
| - }
|
| - NOTREACHED();
|
| - return NULL;
|
| -}
|
| +const NameMapElement<ChannelConfig::TransportType> kTransports[] = {
|
| + { ChannelConfig::TRANSPORT_STREAM, "stream" },
|
| + { ChannelConfig::TRANSPORT_STREAM, "mux-stream" },
|
| + { ChannelConfig::TRANSPORT_DATAGRAM, "datagram" },
|
| + { ChannelConfig::TRANSPORT_NONE, "none" },
|
| +};
|
|
|
| +const NameMapElement<ChannelConfig::Codec> kCodecs[] = {
|
| + { ChannelConfig::CODEC_VERBATIM, "verbatim" },
|
| + { ChannelConfig::CODEC_VP8, "vp8" },
|
| + { ChannelConfig::CODEC_ZIP, "zip" },
|
| + { ChannelConfig::CODEC_VORBIS, "vorbis" },
|
| +};
|
|
|
| // Format a channel configuration tag for chromotocol session description,
|
| // e.g. for video channel:
|
| @@ -85,61 +60,33 @@ XmlElement* FormatChannelConfig(const ChannelConfig& config,
|
| QName(kChromotingXmlNamespace, tag_name));
|
|
|
| result->AddAttr(QName(kDefaultNs, kTransportAttr),
|
| - GetTransportName(config.transport));
|
| + ValueToName(kTransports, config.transport));
|
|
|
| result->AddAttr(QName(kDefaultNs, kVersionAttr),
|
| base::IntToString(config.version));
|
|
|
| if (config.codec != ChannelConfig::CODEC_UNDEFINED) {
|
| result->AddAttr(QName(kDefaultNs, kCodecAttr),
|
| - GetCodecName(config.codec));
|
| + ValueToName(kCodecs, config.codec));
|
| }
|
|
|
| return result;
|
| }
|
|
|
| -bool ParseTransportName(const std::string& value,
|
| - ChannelConfig::TransportType* transport) {
|
| - if (value == kStreamTransport) {
|
| - *transport = ChannelConfig::TRANSPORT_STREAM;
|
| - } else if (value == kDatagramTransport) {
|
| - *transport = ChannelConfig::TRANSPORT_DATAGRAM;
|
| - } else if (value == kNoneTransport) {
|
| - *transport = ChannelConfig::TRANSPORT_NONE;
|
| - } else {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool ParseCodecName(const std::string& value, ChannelConfig::Codec* codec) {
|
| - if (value == kVerbatimCodec) {
|
| - *codec = ChannelConfig::CODEC_VERBATIM;
|
| - } else if (value == kVp8Codec) {
|
| - *codec = ChannelConfig::CODEC_VP8;
|
| - } else if (value == kZipCodec) {
|
| - *codec = ChannelConfig::CODEC_ZIP;
|
| - } else if (value == kVorbisCodec) {
|
| - *codec = ChannelConfig::CODEC_VORBIS;
|
| - } else {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| // Returns false if the element is invalid.
|
| bool ParseChannelConfig(const XmlElement* element, bool codec_required,
|
| ChannelConfig* config) {
|
| - if (!ParseTransportName(element->Attr(QName(kDefaultNs, kTransportAttr)),
|
| - &config->transport) ||
|
| + if (!NameToValue(
|
| + kTransports, element->Attr(QName(kDefaultNs, kTransportAttr)),
|
| + &config->transport) ||
|
| !base::StringToInt(element->Attr(QName(kDefaultNs, kVersionAttr)),
|
| &config->version)) {
|
| return false;
|
| }
|
|
|
| if (codec_required) {
|
| - if (!ParseCodecName(element->Attr(QName(kDefaultNs, kCodecAttr)),
|
| - &config->codec)) {
|
| + if (!NameToValue(kCodecs, element->Attr(QName(kDefaultNs, kCodecAttr)),
|
| + &config->codec)) {
|
| return false;
|
| }
|
| } else {
|
|
|