Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(907)

Side by Side Diff: remoting/protocol/session_config.h

Issue 292093002: Switch CandidateSession to use lists rather than vectors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unused variable Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <string> 9 #include <string>
9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 13
14 namespace remoting { 14 namespace remoting {
15 namespace protocol { 15 namespace protocol {
16 16
17 extern const int kDefaultStreamVersion; 17 extern const int kDefaultStreamVersion;
18 18
19 // Struct for configuration parameters of a single channel. 19 // Struct for configuration parameters of a single channel.
(...skipping 21 matching lines...) Expand all
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(); 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::vector<ChannelConfig>. 51 // std::list<ChannelConfig>.
52 bool operator==(const ChannelConfig& b) const; 52 bool operator==(const ChannelConfig& b) const;
53 53
54 TransportType transport; 54 TransportType transport;
55 int version; 55 int version;
56 Codec codec; 56 Codec codec;
57 }; 57 };
58 58
59 // SessionConfig is used by the chromoting Session to store negotiated 59 // SessionConfig is used by the chromoting Session to store negotiated
60 // chromotocol configuration. 60 // chromotocol configuration.
61 class SessionConfig { 61 class SessionConfig {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 ChannelConfig event_config_; 94 ChannelConfig event_config_;
95 ChannelConfig video_config_; 95 ChannelConfig video_config_;
96 ChannelConfig audio_config_; 96 ChannelConfig audio_config_;
97 }; 97 };
98 98
99 // Defines session description that is sent from client to the host in the 99 // Defines session description that is sent from client to the host in the
100 // session-initiate message. It is different from the regular Config 100 // session-initiate message. It is different from the regular Config
101 // because it allows one to specify multiple configurations for each channel. 101 // because it allows one to specify multiple configurations for each channel.
102 class CandidateSessionConfig { 102 class CandidateSessionConfig {
103 public: 103 public:
104 static scoped_ptr<CandidateSessionConfig> CreateEmpty();
105 static scoped_ptr<CandidateSessionConfig> CreateFrom(
106 const SessionConfig& config);
107 static scoped_ptr<CandidateSessionConfig> CreateDefault();
108
104 ~CandidateSessionConfig(); 109 ~CandidateSessionConfig();
105 110
106 const std::vector<ChannelConfig>& control_configs() const { 111 const std::list<ChannelConfig>& control_configs() const {
107 return control_configs_; 112 return control_configs_;
108 } 113 }
109 114
110 std::vector<ChannelConfig>* mutable_control_configs() { 115 std::list<ChannelConfig>* mutable_control_configs() {
111 return &control_configs_; 116 return &control_configs_;
112 } 117 }
113 118
114 const std::vector<ChannelConfig>& event_configs() const { 119 const std::list<ChannelConfig>& event_configs() const {
115 return event_configs_; 120 return event_configs_;
116 } 121 }
117 122
118 std::vector<ChannelConfig>* mutable_event_configs() { 123 std::list<ChannelConfig>* mutable_event_configs() {
119 return &event_configs_; 124 return &event_configs_;
120 } 125 }
121 126
122 const std::vector<ChannelConfig>& video_configs() const { 127 const std::list<ChannelConfig>& video_configs() const {
123 return video_configs_; 128 return video_configs_;
124 } 129 }
125 130
126 std::vector<ChannelConfig>* mutable_video_configs() { 131 std::list<ChannelConfig>* mutable_video_configs() {
127 return &video_configs_; 132 return &video_configs_;
128 } 133 }
129 134
130 const std::vector<ChannelConfig>& audio_configs() const { 135 const std::list<ChannelConfig>& audio_configs() const {
131 return audio_configs_; 136 return audio_configs_;
132 } 137 }
133 138
134 std::vector<ChannelConfig>* mutable_audio_configs() { 139 std::list<ChannelConfig>* mutable_audio_configs() {
135 return &audio_configs_; 140 return &audio_configs_;
136 } 141 }
137 142
138 // Selects session configuration that is supported by both participants. 143 // Selects session configuration that is supported by both participants.
139 // NULL is returned if such configuration doesn't exist. When selecting 144 // NULL is returned if such configuration doesn't exist. When selecting
140 // channel configuration priority is given to the configs listed first 145 // channel configuration priority is given to the configs listed first
141 // in |client_config|. 146 // in |client_config|.
142 bool Select(const CandidateSessionConfig* client_config, 147 bool Select(const CandidateSessionConfig* client_config,
143 SessionConfig* result); 148 SessionConfig* result);
144 149
145 // Returns true if |config| is supported. 150 // Returns true if |config| is supported.
146 bool IsSupported(const SessionConfig& config) const; 151 bool IsSupported(const SessionConfig& config) const;
147 152
148 // Extracts final protocol configuration. Must be used for the description 153 // Extracts final protocol configuration. Must be used for the description
149 // received in the session-accept stanza. If the selection is ambiguous 154 // received in the session-accept stanza. If the selection is ambiguous
150 // (e.g. there is more than one configuration for one of the channel) 155 // (e.g. there is more than one configuration for one of the channel)
151 // or undefined (e.g. no configurations for a channel) then NULL is returned. 156 // or undefined (e.g. no configurations for a channel) then NULL is returned.
152 bool GetFinalConfig(SessionConfig* result) const; 157 bool GetFinalConfig(SessionConfig* result) const;
153 158
154 scoped_ptr<CandidateSessionConfig> Clone() const; 159 scoped_ptr<CandidateSessionConfig> Clone() const;
155 160
156 static scoped_ptr<CandidateSessionConfig> CreateEmpty(); 161 // Helpers for enabling/disabling specific features.
157 static scoped_ptr<CandidateSessionConfig> CreateFrom( 162 void DisableAudioChannel();
158 const SessionConfig& config); 163 void EnableVideoCodec(ChannelConfig::Codec codec);
159 static scoped_ptr<CandidateSessionConfig> CreateDefault();
160
161 // Modifies |config| to disable specific features.
162 static void DisableAudioChannel(CandidateSessionConfig* config);
163 static void DisableVideoCodec(CandidateSessionConfig* config,
164 ChannelConfig::Codec codec);
165 164
166 private: 165 private:
167 CandidateSessionConfig(); 166 CandidateSessionConfig();
168 explicit CandidateSessionConfig(const CandidateSessionConfig& config); 167 explicit CandidateSessionConfig(const CandidateSessionConfig& config);
169 CandidateSessionConfig& operator=(const CandidateSessionConfig& b); 168 CandidateSessionConfig& operator=(const CandidateSessionConfig& b);
170 169
171 static bool SelectCommonChannelConfig( 170 static bool SelectCommonChannelConfig(
172 const std::vector<ChannelConfig>& host_configs_, 171 const std::list<ChannelConfig>& host_configs_,
173 const std::vector<ChannelConfig>& client_configs_, 172 const std::list<ChannelConfig>& client_configs_,
174 ChannelConfig* config); 173 ChannelConfig* config);
175 static bool IsChannelConfigSupported(const std::vector<ChannelConfig>& vector, 174 static bool IsChannelConfigSupported(const std::list<ChannelConfig>& list,
176 const ChannelConfig& value); 175 const ChannelConfig& value);
177 176
178 std::vector<ChannelConfig> control_configs_; 177 std::list<ChannelConfig> control_configs_;
179 std::vector<ChannelConfig> event_configs_; 178 std::list<ChannelConfig> event_configs_;
180 std::vector<ChannelConfig> video_configs_; 179 std::list<ChannelConfig> video_configs_;
181 std::vector<ChannelConfig> audio_configs_; 180 std::list<ChannelConfig> audio_configs_;
182 }; 181 };
183 182
184 } // namespace protocol 183 } // namespace protocol
185 } // namespace remoting 184 } // namespace remoting
186 185
187 #endif // REMOTING_PROTOCOL_SESSION_CONFIG_H_ 186 #endif // REMOTING_PROTOCOL_SESSION_CONFIG_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698