Index: remoting/protocol/jingle_messages.cc |
diff --git a/remoting/protocol/jingle_messages.cc b/remoting/protocol/jingle_messages.cc |
index 9896b2758e828d7871e18283cfa3de5a088685d8..bc248e9a8485cd962e12d2d9c1a2c5c37271d19f 100644 |
--- a/remoting/protocol/jingle_messages.cc |
+++ b/remoting/protocol/jingle_messages.cc |
@@ -48,7 +48,7 @@ const NameMapElement<JingleMessage::Reason> kReasons[] = { |
}; |
bool ParseIceCredentials(const buzz::XmlElement* element, |
- JingleMessage::IceCredentials* credentials) { |
+ IceTransportInfo::IceCredentials* credentials) { |
DCHECK(element->Name() == QName(kIceTransportNamespace, "credentials")); |
const std::string& channel = element->Attr(QName(kEmptyNamespace, "channel")); |
@@ -69,7 +69,7 @@ bool ParseIceCredentials(const buzz::XmlElement* element, |
} |
bool ParseIceCandidate(const buzz::XmlElement* element, |
- JingleMessage::NamedCandidate* candidate) { |
+ IceTransportInfo::NamedCandidate* candidate) { |
DCHECK(element->Name() == QName(kIceTransportNamespace, "candidate")); |
const std::string& name = element->Attr(QName(kEmptyNamespace, "name")); |
@@ -108,39 +108,8 @@ bool ParseIceCandidate(const buzz::XmlElement* element, |
return true; |
} |
-bool ParseIceTransportInfo( |
- const buzz::XmlElement* element, |
- std::list<JingleMessage::IceCredentials>* ice_credentials, |
- std::list<JingleMessage::NamedCandidate>* candidates) { |
- DCHECK(element->Name() == QName(kIceTransportNamespace, "transport")); |
- |
- ice_credentials->clear(); |
- candidates->clear(); |
- |
- QName qn_credentials(kIceTransportNamespace, "credentials"); |
- for (const XmlElement* credentials_tag = element->FirstNamed(qn_credentials); |
- credentials_tag; |
- credentials_tag = credentials_tag->NextNamed(qn_credentials)) { |
- JingleMessage::IceCredentials credentials; |
- if (!ParseIceCredentials(credentials_tag, &credentials)) |
- return false; |
- ice_credentials->push_back(credentials); |
- } |
- |
- QName qn_candidate(kIceTransportNamespace, "candidate"); |
- for (const XmlElement* candidate_tag = element->FirstNamed(qn_candidate); |
- candidate_tag; candidate_tag = candidate_tag->NextNamed(qn_candidate)) { |
- JingleMessage::NamedCandidate candidate; |
- if (!ParseIceCandidate(candidate_tag, &candidate)) |
- return false; |
- candidates->push_back(candidate); |
- } |
- |
- return true; |
-} |
- |
XmlElement* FormatIceCredentials( |
- const JingleMessage::IceCredentials& credentials) { |
+ const IceTransportInfo::IceCredentials& credentials) { |
XmlElement* result = |
new XmlElement(QName(kIceTransportNamespace, "credentials")); |
result->SetAttr(QName(kEmptyNamespace, "channel"), credentials.channel); |
@@ -149,7 +118,8 @@ XmlElement* FormatIceCredentials( |
return result; |
} |
-XmlElement* FormatIceCandidate(const JingleMessage::NamedCandidate& candidate) { |
+XmlElement* FormatIceCandidate( |
+ const IceTransportInfo::NamedCandidate& candidate) { |
XmlElement* result = |
new XmlElement(QName(kIceTransportNamespace, "candidate")); |
result->SetAttr(QName(kEmptyNamespace, "name"), candidate.name); |
@@ -171,14 +141,14 @@ XmlElement* FormatIceCandidate(const JingleMessage::NamedCandidate& candidate) { |
} // namespace |
-JingleMessage::NamedCandidate::NamedCandidate( |
+IceTransportInfo::NamedCandidate::NamedCandidate( |
const std::string& name, |
const cricket::Candidate& candidate) |
: name(name), |
candidate(candidate) { |
} |
-JingleMessage::IceCredentials::IceCredentials(std::string channel, |
+IceTransportInfo::IceCredentials::IceCredentials(std::string channel, |
std::string ufrag, |
std::string password) |
: channel(channel), ufrag(ufrag), password(password) { |
@@ -296,11 +266,7 @@ bool JingleMessage::ParseXml(const buzz::XmlElement* stanza, |
const XmlElement* ice_transport_tag = content_tag->FirstNamed( |
QName(kIceTransportNamespace, "transport")); |
if (ice_transport_tag) { |
- if (!ParseIceTransportInfo(ice_transport_tag, &ice_credentials, |
- &candidates)) { |
- *error = "Failed to parse transport info"; |
- return false; |
- } |
+ transport_info.reset(new buzz::XmlElement(*ice_transport_tag)); |
} |
return true; |
@@ -358,17 +324,8 @@ scoped_ptr<buzz::XmlElement> JingleMessage::ToXml() const { |
if (description.get()) |
content_tag->AddElement(description->ToXml()); |
- if (!ice_credentials.empty() || !candidates.empty()) { |
- XmlElement* transport_tag = |
- new XmlElement(QName(kIceTransportNamespace, "transport"), true); |
- content_tag->AddElement(transport_tag); |
- for (const IceCredentials& credentials : ice_credentials) { |
- transport_tag->AddElement(FormatIceCredentials(credentials)); |
- } |
- for (const NamedCandidate& candidate : candidates) { |
- transport_tag->AddElement(FormatIceCandidate(candidate)); |
- } |
- } |
+ if (transport_info) |
+ content_tag->AddElement(new XmlElement(*transport_info)); |
} |
return root.Pass(); |
@@ -475,5 +432,50 @@ scoped_ptr<buzz::XmlElement> JingleMessageReply::ToXml( |
return iq.Pass(); |
} |
+IceTransportInfo::IceTransportInfo() {} |
+IceTransportInfo::~IceTransportInfo() {} |
+ |
+bool IceTransportInfo::ParseXml( |
+ const buzz::XmlElement* element) { |
+ if (element->Name() != QName(kIceTransportNamespace, "transport")) |
+ return false; |
+ |
+ ice_credentials.clear(); |
+ candidates.clear(); |
+ |
+ QName qn_credentials(kIceTransportNamespace, "credentials"); |
+ for (const XmlElement* credentials_tag = element->FirstNamed(qn_credentials); |
+ credentials_tag; |
+ credentials_tag = credentials_tag->NextNamed(qn_credentials)) { |
+ IceTransportInfo::IceCredentials credentials; |
+ if (!ParseIceCredentials(credentials_tag, &credentials)) |
+ return false; |
+ ice_credentials.push_back(credentials); |
+ } |
+ |
+ QName qn_candidate(kIceTransportNamespace, "candidate"); |
+ for (const XmlElement* candidate_tag = element->FirstNamed(qn_candidate); |
+ candidate_tag; candidate_tag = candidate_tag->NextNamed(qn_candidate)) { |
+ IceTransportInfo::NamedCandidate candidate; |
+ if (!ParseIceCandidate(candidate_tag, &candidate)) |
+ return false; |
+ candidates.push_back(candidate); |
+ } |
+ |
+ return true; |
+} |
+ |
+scoped_ptr<buzz::XmlElement> IceTransportInfo::ToXml() const { |
+ scoped_ptr<buzz::XmlElement> result( |
+ new XmlElement(QName(kIceTransportNamespace, "transport"), true)); |
+ for (const IceCredentials& credentials : ice_credentials) { |
+ result->AddElement(FormatIceCredentials(credentials)); |
+ } |
+ for (const NamedCandidate& candidate : candidates) { |
+ result->AddElement(FormatIceCandidate(candidate)); |
+ } |
+ return result.Pass(); |
+} |
+ |
} // namespace protocol |
} // namespace remoting |