Index: remoting/protocol/session_config.cc |
diff --git a/remoting/protocol/session_config.cc b/remoting/protocol/session_config.cc |
index 460da2807bfa7bd13b1cbdbca1eac2b837b08e66..f6163f4fa8df622d07e92dfa5ce85620ec484416 100644 |
--- a/remoting/protocol/session_config.cc |
+++ b/remoting/protocol/session_config.cc |
@@ -9,6 +9,30 @@ |
namespace remoting { |
namespace protocol { |
+namespace { |
+ |
+bool IsChannelConfigSupported(const std::list<ChannelConfig>& list, |
+ const ChannelConfig& value) { |
+ return std::find(list.begin(), list.end(), value) != list.end(); |
+} |
+ |
+bool SelectCommonChannelConfig(const std::list<ChannelConfig>& host_configs, |
+ const std::list<ChannelConfig>& client_configs, |
+ ChannelConfig* config) { |
+ // Usually each of these lists will contain just a few elements, so iterating |
+ // over all of them is not a problem. |
+ std::list<ChannelConfig>::const_iterator it; |
+ for (it = client_configs.begin(); it != client_configs.end(); ++it) { |
+ if (IsChannelConfigSupported(host_configs, *it)) { |
+ *config = *it; |
+ return true; |
+ } |
+ } |
+ return false; |
+} |
+ |
+} // namespace |
+ |
const int kDefaultStreamVersion = 2; |
const int kControlStreamVersion = 3; |
@@ -16,12 +40,6 @@ ChannelConfig ChannelConfig::None() { |
return ChannelConfig(); |
} |
-ChannelConfig::ChannelConfig() |
- : transport(TRANSPORT_NONE), |
- version(0), |
- codec(CODEC_UNDEFINED) { |
-} |
- |
ChannelConfig::ChannelConfig(TransportType transport, int version, Codec codec) |
: transport(transport), |
version(version), |
@@ -35,32 +53,93 @@ bool ChannelConfig::operator==(const ChannelConfig& b) const { |
return transport == b.transport && version == b.version && codec == b.codec; |
} |
-SessionConfig::SessionConfig() { |
+// static |
+scoped_ptr<SessionConfig> SessionConfig::SelectCommon( |
+ const CandidateSessionConfig* client_config, |
+ const CandidateSessionConfig* host_config) { |
+ scoped_ptr<SessionConfig> result(new SessionConfig()); |
+ ChannelConfig control_config; |
+ ChannelConfig event_config; |
+ ChannelConfig video_config; |
+ ChannelConfig audio_config; |
+ |
+ result->standard_ice_ = |
+ host_config->standard_ice() && client_config->standard_ice(); |
+ |
+ if (!SelectCommonChannelConfig(host_config->control_configs(), |
+ client_config->control_configs(), |
+ &result->control_config_) || |
+ !SelectCommonChannelConfig(host_config->event_configs(), |
+ client_config->event_configs(), |
+ &result->event_config_) || |
+ !SelectCommonChannelConfig(host_config->video_configs(), |
+ client_config->video_configs(), |
+ &result->video_config_) || |
+ !SelectCommonChannelConfig(host_config->audio_configs(), |
+ client_config->audio_configs(), |
+ &result->audio_config_)) { |
+ return nullptr; |
+ } |
+ |
+ return result; |
} |
// static |
-SessionConfig SessionConfig::ForTest() { |
- SessionConfig result; |
- result.set_control_config(ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
+scoped_ptr<SessionConfig> SessionConfig::GetFinalConfig( |
+ const CandidateSessionConfig* candidate_config) { |
+ if (candidate_config->control_configs().size() != 1 || |
+ candidate_config->event_configs().size() != 1 || |
+ candidate_config->video_configs().size() != 1 || |
+ candidate_config->audio_configs().size() != 1) { |
+ return nullptr; |
+ } |
+ |
+ scoped_ptr<SessionConfig> result(new SessionConfig()); |
+ result->standard_ice_ = candidate_config->standard_ice(); |
+ result->control_config_ = candidate_config->control_configs().front(); |
+ result->event_config_ = candidate_config->event_configs().front(); |
+ result->video_config_ = candidate_config->video_configs().front(); |
+ result->audio_config_ = candidate_config->audio_configs().front(); |
+ |
+ return result.Pass(); |
+} |
+ |
+// static |
+scoped_ptr<SessionConfig> SessionConfig::ForTest() { |
+ scoped_ptr<SessionConfig> result(new SessionConfig()); |
+ result->standard_ice_ = true; |
+ result->control_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
kControlStreamVersion, |
- ChannelConfig::CODEC_UNDEFINED)); |
- result.set_event_config(ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
+ ChannelConfig::CODEC_UNDEFINED); |
+ result->event_config_ = ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |
kDefaultStreamVersion, |
- ChannelConfig::CODEC_UNDEFINED)); |
- result.set_video_config(ChannelConfig(ChannelConfig::TRANSPORT_STREAM, |
+ ChannelConfig::CODEC_UNDEFINED); |
+ result->video_config_ = ChannelConfig(ChannelConfig::TRANSPORT_STREAM, |
kDefaultStreamVersion, |
- ChannelConfig::CODEC_VP8)); |
- result.set_audio_config(ChannelConfig(ChannelConfig::TRANSPORT_NONE, |
+ ChannelConfig::CODEC_VP8); |
+ result->audio_config_ = ChannelConfig(ChannelConfig::TRANSPORT_NONE, |
kDefaultStreamVersion, |
- ChannelConfig::CODEC_UNDEFINED)); |
- return result; |
+ ChannelConfig::CODEC_UNDEFINED); |
+ return result.Pass(); |
} |
+// static |
+scoped_ptr<SessionConfig> SessionConfig::WithLegacyIceForTest() { |
+ scoped_ptr<SessionConfig> result = ForTest(); |
+ result->standard_ice_ = false; |
+ return result.Pass(); |
+} |
+ |
+SessionConfig::SessionConfig() { |
+} |
+ |
+ |
CandidateSessionConfig::CandidateSessionConfig() { } |
CandidateSessionConfig::CandidateSessionConfig( |
const CandidateSessionConfig& config) |
- : control_configs_(config.control_configs_), |
+ : standard_ice_(true), |
+ control_configs_(config.control_configs_), |
event_configs_(config.event_configs_), |
video_configs_(config.video_configs_), |
audio_configs_(config.audio_configs_) { |
@@ -68,33 +147,6 @@ CandidateSessionConfig::CandidateSessionConfig( |
CandidateSessionConfig::~CandidateSessionConfig() { } |
-bool CandidateSessionConfig::Select( |
- const CandidateSessionConfig* client_config, |
- SessionConfig* result) { |
- ChannelConfig control_config; |
- ChannelConfig event_config; |
- ChannelConfig video_config; |
- ChannelConfig audio_config; |
- |
- if (!SelectCommonChannelConfig( |
- control_configs_, client_config->control_configs_, &control_config) || |
- !SelectCommonChannelConfig( |
- event_configs_, client_config->event_configs_, &event_config) || |
- !SelectCommonChannelConfig( |
- video_configs_, client_config->video_configs_, &video_config) || |
- !SelectCommonChannelConfig( |
- audio_configs_, client_config->audio_configs_, &audio_config)) { |
- return false; |
- } |
- |
- result->set_control_config(control_config); |
- result->set_event_config(event_config); |
- result->set_video_config(video_config); |
- result->set_audio_config(audio_config); |
- |
- return true; |
-} |
- |
bool CandidateSessionConfig::IsSupported( |
const SessionConfig& config) const { |
return |
@@ -104,46 +156,6 @@ bool CandidateSessionConfig::IsSupported( |
IsChannelConfigSupported(audio_configs_, config.audio_config()); |
} |
-bool CandidateSessionConfig::GetFinalConfig(SessionConfig* result) const { |
- if (control_configs_.size() != 1 || |
- event_configs_.size() != 1 || |
- video_configs_.size() != 1 || |
- audio_configs_.size() != 1) { |
- return false; |
- } |
- |
- result->set_control_config(control_configs_.front()); |
- result->set_event_config(event_configs_.front()); |
- result->set_video_config(video_configs_.front()); |
- result->set_audio_config(audio_configs_.front()); |
- |
- return true; |
-} |
- |
-// static |
-bool CandidateSessionConfig::SelectCommonChannelConfig( |
- const std::list<ChannelConfig>& host_configs, |
- const std::list<ChannelConfig>& client_configs, |
- ChannelConfig* config) { |
- // Usually each of these vectors will contain just several elements, |
- // so iterating over all of them is not a problem. |
- std::list<ChannelConfig>::const_iterator it; |
- for (it = client_configs.begin(); it != client_configs.end(); ++it) { |
- if (IsChannelConfigSupported(host_configs, *it)) { |
- *config = *it; |
- return true; |
- } |
- } |
- return false; |
-} |
- |
-// static |
-bool CandidateSessionConfig::IsChannelConfigSupported( |
- const std::list<ChannelConfig>& vector, |
- const ChannelConfig& value) { |
- return std::find(vector.begin(), vector.end(), value) != vector.end(); |
-} |
- |
scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::Clone() const { |
return make_scoped_ptr(new CandidateSessionConfig(*this)); |
} |
@@ -157,6 +169,7 @@ scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateEmpty() { |
scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateFrom( |
const SessionConfig& config) { |
scoped_ptr<CandidateSessionConfig> result = CreateEmpty(); |
+ result->set_standard_ice(config.standard_ice()); |
result->mutable_control_configs()->push_back(config.control_config()); |
result->mutable_event_configs()->push_back(config.event_config()); |
result->mutable_video_configs()->push_back(config.video_config()); |
@@ -168,6 +181,8 @@ scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateFrom( |
scoped_ptr<CandidateSessionConfig> CandidateSessionConfig::CreateDefault() { |
scoped_ptr<CandidateSessionConfig> result = CreateEmpty(); |
+ result->set_standard_ice(true); |
+ |
// Control channel. |
result->mutable_control_configs()->push_back( |
ChannelConfig(ChannelConfig::TRANSPORT_MUX_STREAM, |