| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef REMOTING_PROTOCOL_SESSION_CONFIG_H_ | 5 #ifndef REMOTING_PROTOCOL_SESSION_CONFIG_H_ |
| 6 #define REMOTING_PROTOCOL_SESSION_CONFIG_H_ | 6 #define REMOTING_PROTOCOL_SESSION_CONFIG_H_ |
| 7 | 7 |
| 8 #include <list> | 8 #include <list> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 CODEC_VP9, | 35 CODEC_VP9, |
| 36 CODEC_OPUS, | 36 CODEC_OPUS, |
| 37 CODEC_SPEEX, | 37 CODEC_SPEEX, |
| 38 }; | 38 }; |
| 39 | 39 |
| 40 // Creates a config with transport field set to TRANSPORT_NONE which indicates | 40 // Creates a config with transport field set to TRANSPORT_NONE which indicates |
| 41 // that corresponding channel is disabled. | 41 // that corresponding channel is disabled. |
| 42 static ChannelConfig None(); | 42 static ChannelConfig None(); |
| 43 | 43 |
| 44 // Default constructor. Equivalent to None(). | 44 // Default constructor. Equivalent to None(). |
| 45 ChannelConfig() = default; | 45 ChannelConfig(); |
| 46 | 46 |
| 47 // Creates a channel config with the specified parameters. | 47 // Creates a channel config with the specified parameters. |
| 48 ChannelConfig(TransportType transport, int version, Codec codec); | 48 ChannelConfig(TransportType transport, int version, Codec codec); |
| 49 | 49 |
| 50 // operator== is overloaded so that std::find() works with | 50 // operator== is overloaded so that std::find() works with |
| 51 // std::list<ChannelConfig>. | 51 // std::list<ChannelConfig>. |
| 52 bool operator==(const ChannelConfig& b) const; | 52 bool operator==(const ChannelConfig& b) const; |
| 53 | 53 |
| 54 TransportType transport = TRANSPORT_NONE; | 54 TransportType transport; |
| 55 int version = 0; | 55 int version; |
| 56 Codec codec = CODEC_UNDEFINED; | 56 Codec codec; |
| 57 }; | 57 }; |
| 58 | 58 |
| 59 class CandidateSessionConfig; | |
| 60 | |
| 61 // SessionConfig is used by the chromoting Session to store negotiated | 59 // SessionConfig is used by the chromoting Session to store negotiated |
| 62 // chromotocol configuration. | 60 // chromotocol configuration. |
| 63 class SessionConfig { | 61 class SessionConfig { |
| 64 public: | 62 public: |
| 65 // Selects session configuration that is supported by both participants. | 63 SessionConfig(); |
| 66 // nullptr is returned if such configuration doesn't exist. When selecting | |
| 67 // channel configuration priority is given to the configs listed first | |
| 68 // in |client_config|. | |
| 69 static scoped_ptr<SessionConfig> SelectCommon( | |
| 70 const CandidateSessionConfig* client_config, | |
| 71 const CandidateSessionConfig* host_config); | |
| 72 | 64 |
| 73 // Extracts final protocol configuration. Must be used for the description | 65 void set_control_config(const ChannelConfig& control_config) { |
| 74 // received in the session-accept stanza. If the selection is ambiguous | 66 control_config_ = control_config; |
| 75 // (e.g. there is more than one configuration for one of the channel) | 67 } |
| 76 // or undefined (e.g. no configurations for a channel) then nullptr is | |
| 77 // returned. | |
| 78 static scoped_ptr<SessionConfig> GetFinalConfig( | |
| 79 const CandidateSessionConfig* candidate_config); | |
| 80 | |
| 81 // Returns a suitable session configuration for use in tests. | |
| 82 static scoped_ptr<SessionConfig> ForTest(); | |
| 83 static scoped_ptr<SessionConfig> WithLegacyIceForTest(); | |
| 84 | |
| 85 bool standard_ice() const { return standard_ice_; } | |
| 86 | |
| 87 const ChannelConfig& control_config() const { return control_config_; } | 68 const ChannelConfig& control_config() const { return control_config_; } |
| 69 void set_event_config(const ChannelConfig& event_config) { |
| 70 event_config_ = event_config; |
| 71 } |
| 88 const ChannelConfig& event_config() const { return event_config_; } | 72 const ChannelConfig& event_config() const { return event_config_; } |
| 73 void set_video_config(const ChannelConfig& video_config) { |
| 74 video_config_ = video_config; |
| 75 } |
| 89 const ChannelConfig& video_config() const { return video_config_; } | 76 const ChannelConfig& video_config() const { return video_config_; } |
| 77 void set_audio_config(const ChannelConfig& audio_config) { |
| 78 audio_config_ = audio_config; |
| 79 } |
| 90 const ChannelConfig& audio_config() const { return audio_config_; } | 80 const ChannelConfig& audio_config() const { return audio_config_; } |
| 91 | 81 |
| 92 bool is_audio_enabled() const { | 82 bool is_audio_enabled() const { |
| 93 return audio_config_.transport != ChannelConfig::TRANSPORT_NONE; | 83 return audio_config_.transport != ChannelConfig::TRANSPORT_NONE; |
| 94 } | 84 } |
| 95 | 85 |
| 86 // Returns a suitable session configuration for use in tests. |
| 87 static SessionConfig ForTest(); |
| 88 |
| 96 private: | 89 private: |
| 97 SessionConfig(); | |
| 98 | |
| 99 bool standard_ice_ = true; | |
| 100 | |
| 101 ChannelConfig control_config_; | 90 ChannelConfig control_config_; |
| 102 ChannelConfig event_config_; | 91 ChannelConfig event_config_; |
| 103 ChannelConfig video_config_; | 92 ChannelConfig video_config_; |
| 104 ChannelConfig audio_config_; | 93 ChannelConfig audio_config_; |
| 105 }; | 94 }; |
| 106 | 95 |
| 107 // Defines session description that is sent from client to the host in the | 96 // Defines session description that is sent from client to the host in the |
| 108 // session-initiate message. It is different from the regular Config | 97 // session-initiate message. It is different from the regular Config |
| 109 // because it allows one to specify multiple configurations for each channel. | 98 // because it allows one to specify multiple configurations for each channel. |
| 110 class CandidateSessionConfig { | 99 class CandidateSessionConfig { |
| 111 public: | 100 public: |
| 112 static scoped_ptr<CandidateSessionConfig> CreateEmpty(); | 101 static scoped_ptr<CandidateSessionConfig> CreateEmpty(); |
| 113 static scoped_ptr<CandidateSessionConfig> CreateFrom( | 102 static scoped_ptr<CandidateSessionConfig> CreateFrom( |
| 114 const SessionConfig& config); | 103 const SessionConfig& config); |
| 115 static scoped_ptr<CandidateSessionConfig> CreateDefault(); | 104 static scoped_ptr<CandidateSessionConfig> CreateDefault(); |
| 116 | 105 |
| 117 ~CandidateSessionConfig(); | 106 ~CandidateSessionConfig(); |
| 118 | 107 |
| 119 bool standard_ice() const { return standard_ice_; } | |
| 120 void set_standard_ice(bool standard_ice) { standard_ice_ = standard_ice; } | |
| 121 | |
| 122 const std::list<ChannelConfig>& control_configs() const { | 108 const std::list<ChannelConfig>& control_configs() const { |
| 123 return control_configs_; | 109 return control_configs_; |
| 124 } | 110 } |
| 125 | 111 |
| 126 std::list<ChannelConfig>* mutable_control_configs() { | 112 std::list<ChannelConfig>* mutable_control_configs() { |
| 127 return &control_configs_; | 113 return &control_configs_; |
| 128 } | 114 } |
| 129 | 115 |
| 130 const std::list<ChannelConfig>& event_configs() const { | 116 const std::list<ChannelConfig>& event_configs() const { |
| 131 return event_configs_; | 117 return event_configs_; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 144 } | 130 } |
| 145 | 131 |
| 146 const std::list<ChannelConfig>& audio_configs() const { | 132 const std::list<ChannelConfig>& audio_configs() const { |
| 147 return audio_configs_; | 133 return audio_configs_; |
| 148 } | 134 } |
| 149 | 135 |
| 150 std::list<ChannelConfig>* mutable_audio_configs() { | 136 std::list<ChannelConfig>* mutable_audio_configs() { |
| 151 return &audio_configs_; | 137 return &audio_configs_; |
| 152 } | 138 } |
| 153 | 139 |
| 140 // Selects session configuration that is supported by both participants. |
| 141 // nullptr is returned if such configuration doesn't exist. When selecting |
| 142 // channel configuration priority is given to the configs listed first |
| 143 // in |client_config|. |
| 144 bool Select(const CandidateSessionConfig* client_config, |
| 145 SessionConfig* result); |
| 146 |
| 154 // Returns true if |config| is supported. | 147 // Returns true if |config| is supported. |
| 155 bool IsSupported(const SessionConfig& config) const; | 148 bool IsSupported(const SessionConfig& config) const; |
| 156 | 149 |
| 150 // Extracts final protocol configuration. Must be used for the description |
| 151 // received in the session-accept stanza. If the selection is ambiguous |
| 152 // (e.g. there is more than one configuration for one of the channel) |
| 153 // or undefined (e.g. no configurations for a channel) then nullptr is |
| 154 // returned. |
| 155 bool GetFinalConfig(SessionConfig* result) const; |
| 156 |
| 157 scoped_ptr<CandidateSessionConfig> Clone() const; | 157 scoped_ptr<CandidateSessionConfig> Clone() const; |
| 158 | 158 |
| 159 // Helpers for enabling/disabling specific features. | 159 // Helpers for enabling/disabling specific features. |
| 160 void DisableAudioChannel(); | 160 void DisableAudioChannel(); |
| 161 void EnableVideoCodec(ChannelConfig::Codec codec); | 161 void EnableVideoCodec(ChannelConfig::Codec codec); |
| 162 | 162 |
| 163 private: | 163 private: |
| 164 CandidateSessionConfig(); | 164 CandidateSessionConfig(); |
| 165 explicit CandidateSessionConfig(const CandidateSessionConfig& config); | 165 explicit CandidateSessionConfig(const CandidateSessionConfig& config); |
| 166 CandidateSessionConfig& operator=(const CandidateSessionConfig& b); | 166 CandidateSessionConfig& operator=(const CandidateSessionConfig& b); |
| 167 | 167 |
| 168 bool standard_ice_ = true; | 168 static bool SelectCommonChannelConfig( |
| 169 const std::list<ChannelConfig>& host_configs_, |
| 170 const std::list<ChannelConfig>& client_configs_, |
| 171 ChannelConfig* config); |
| 172 static bool IsChannelConfigSupported(const std::list<ChannelConfig>& list, |
| 173 const ChannelConfig& value); |
| 169 | 174 |
| 170 std::list<ChannelConfig> control_configs_; | 175 std::list<ChannelConfig> control_configs_; |
| 171 std::list<ChannelConfig> event_configs_; | 176 std::list<ChannelConfig> event_configs_; |
| 172 std::list<ChannelConfig> video_configs_; | 177 std::list<ChannelConfig> video_configs_; |
| 173 std::list<ChannelConfig> audio_configs_; | 178 std::list<ChannelConfig> audio_configs_; |
| 174 }; | 179 }; |
| 175 | 180 |
| 176 } // namespace protocol | 181 } // namespace protocol |
| 177 } // namespace remoting | 182 } // namespace remoting |
| 178 | 183 |
| 179 #endif // REMOTING_PROTOCOL_SESSION_CONFIG_H_ | 184 #endif // REMOTING_PROTOCOL_SESSION_CONFIG_H_ |
| OLD | NEW |