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

Side by Side Diff: webrtc/api/peerconnectioninterface.h

Issue 2587133004: Reland of: Adding error output param to SetConfiguration, using new RTCError type. (Closed)
Patch Set: Fixing compile error in less confusing way. Created 3 years, 11 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
« no previous file with comments | « webrtc/api/peerconnection_unittest.cc ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 virtual void AddHistogramSample(PeerConnectionMetricsName type, 143 virtual void AddHistogramSample(PeerConnectionMetricsName type,
144 int value) = 0; 144 int value) = 0;
145 145
146 protected: 146 protected:
147 virtual ~MetricsObserverInterface() {} 147 virtual ~MetricsObserverInterface() {}
148 }; 148 };
149 149
150 typedef MetricsObserverInterface UMAObserver; 150 typedef MetricsObserverInterface UMAObserver;
151 151
152 // Enumeration to represent distinct classes of errors that an application 152 // Enumeration to represent distinct classes of errors that an application
153 // may wish to act upon differently. These roughly map to DOMExceptions in 153 // may wish to act upon differently. These roughly map to DOMExceptions or
154 // the web API, as described in the comments below. 154 // RTCError "errorDetailEnum" values in the web API, as described in the
155 enum class RtcError { 155 // comments below.
156 enum class RTCErrorType {
156 // No error. 157 // No error.
157 NONE, 158 NONE,
158 // A supplied parameter is valid, but currently unsupported. 159 // A supplied parameter is valid, but currently unsupported.
159 // Maps to InvalidAccessError DOMException. 160 // Maps to InvalidAccessError DOMException.
160 UNSUPPORTED_PARAMETER, 161 UNSUPPORTED_PARAMETER,
161 // General error indicating that a supplied parameter is invalid. 162 // General error indicating that a supplied parameter is invalid.
162 // Maps to InvalidAccessError or TypeError DOMException depending on context. 163 // Maps to InvalidAccessError or TypeError DOMException depending on context.
163 INVALID_PARAMETER, 164 INVALID_PARAMETER,
164 // Slightly more specific than INVALID_PARAMETER; a parameter's value was 165 // Slightly more specific than INVALID_PARAMETER; a parameter's value was
165 // outside the allowed range. 166 // outside the allowed range.
(...skipping 10 matching lines...) Expand all
176 // Maps to InvalidModificationError DOMException. 177 // Maps to InvalidModificationError DOMException.
177 INVALID_MODIFICATION, 178 INVALID_MODIFICATION,
178 // An error occurred within an underlying network protocol. 179 // An error occurred within an underlying network protocol.
179 // Maps to NetworkError DOMException. 180 // Maps to NetworkError DOMException.
180 NETWORK_ERROR, 181 NETWORK_ERROR,
181 // The operation failed due to an internal error. 182 // The operation failed due to an internal error.
182 // Maps to OperationError DOMException. 183 // Maps to OperationError DOMException.
183 INTERNAL_ERROR, 184 INTERNAL_ERROR,
184 }; 185 };
185 186
187 // Roughly corresponds to RTCError in the web api. Holds an error type and
188 // possibly additional information specific to that error.
189 //
190 // Doesn't contain anything beyond a type now, but will in the future as more
191 // errors are implemented.
192 class RTCError {
193 public:
194 RTCError() : type_(RTCErrorType::NONE) {}
195 explicit RTCError(RTCErrorType type) : type_(type) {}
196
197 RTCErrorType type() const { return type_; }
198 void set_type(RTCErrorType type) { type_ = type; }
199
200 private:
201 RTCErrorType type_;
202 };
203
186 // Outputs the error as a friendly string. 204 // Outputs the error as a friendly string.
187 // Update this method when adding a new error type. 205 // Update this method when adding a new error type.
188 std::ostream& operator<<(std::ostream& stream, RtcError error); 206 std::ostream& operator<<(std::ostream& stream, RTCErrorType error);
189 207
190 class PeerConnectionInterface : public rtc::RefCountInterface { 208 class PeerConnectionInterface : public rtc::RefCountInterface {
191 public: 209 public:
192 // See http://dev.w3.org/2011/webrtc/editor/webrtc.html#state-definitions . 210 // See http://dev.w3.org/2011/webrtc/editor/webrtc.html#state-definitions .
193 enum SignalingState { 211 enum SignalingState {
194 kStable, 212 kStable,
195 kHaveLocalOffer, 213 kHaveLocalOffer,
196 kHaveLocalPrAnswer, 214 kHaveLocalPrAnswer,
197 kHaveRemoteOffer, 215 kHaveRemoteOffer,
198 kHaveRemotePrAnswer, 216 kHaveRemotePrAnswer,
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 ice_connection_receiving_timeout = 330 ice_connection_receiving_timeout =
313 kAggressiveIceConnectionReceivingTimeout; 331 kAggressiveIceConnectionReceivingTimeout;
314 332
315 // These parameters are not defined in Java or IOS configuration, 333 // These parameters are not defined in Java or IOS configuration,
316 // so their values will not be overwritten. 334 // so their values will not be overwritten.
317 enable_ice_renomination = true; 335 enable_ice_renomination = true;
318 redetermine_role_on_ice_restart = false; 336 redetermine_role_on_ice_restart = false;
319 } 337 }
320 } 338 }
321 339
340 bool operator==(const RTCConfiguration& o) const;
341 bool operator!=(const RTCConfiguration& o) const;
342
322 bool dscp() { return media_config.enable_dscp; } 343 bool dscp() { return media_config.enable_dscp; }
323 void set_dscp(bool enable) { media_config.enable_dscp = enable; } 344 void set_dscp(bool enable) { media_config.enable_dscp = enable; }
324 345
325 // TODO(nisse): The corresponding flag in MediaConfig and 346 // TODO(nisse): The corresponding flag in MediaConfig and
326 // elsewhere should be renamed enable_cpu_adaptation. 347 // elsewhere should be renamed enable_cpu_adaptation.
327 bool cpu_adaptation() { 348 bool cpu_adaptation() {
328 return media_config.video.enable_cpu_overuse_detection; 349 return media_config.video.enable_cpu_overuse_detection;
329 } 350 }
330 void set_cpu_adaptation(bool enable) { 351 void set_cpu_adaptation(bool enable) {
331 media_config.video.enable_cpu_overuse_detection = enable; 352 media_config.video.enable_cpu_overuse_detection = enable;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 bool prune_turn_ports = false; 406 bool prune_turn_ports = false;
386 // If set to true, this means the ICE transport should presume TURN-to-TURN 407 // If set to true, this means the ICE transport should presume TURN-to-TURN
387 // candidate pairs will succeed, even before a binding response is received. 408 // candidate pairs will succeed, even before a binding response is received.
388 bool presume_writable_when_fully_relayed = false; 409 bool presume_writable_when_fully_relayed = false;
389 // If true, "renomination" will be added to the ice options in the transport 410 // If true, "renomination" will be added to the ice options in the transport
390 // description. 411 // description.
391 bool enable_ice_renomination = false; 412 bool enable_ice_renomination = false;
392 // If true, ICE role is redetermined when peerconnection sets a local 413 // If true, ICE role is redetermined when peerconnection sets a local
393 // transport description that indicates an ICE restart. 414 // transport description that indicates an ICE restart.
394 bool redetermine_role_on_ice_restart = true; 415 bool redetermine_role_on_ice_restart = true;
416 //
417 // Don't forget to update operator== if adding something.
418 //
395 }; 419 };
396 420
397 struct RTCOfferAnswerOptions { 421 struct RTCOfferAnswerOptions {
398 static const int kUndefined = -1; 422 static const int kUndefined = -1;
399 static const int kMaxOfferToReceiveMedia = 1; 423 static const int kMaxOfferToReceiveMedia = 1;
400 424
401 // The default value for constraint offerToReceiveX:true. 425 // The default value for constraint offerToReceiveX:true.
402 static const int kOfferToReceiveMediaTrue = 1; 426 static const int kOfferToReceiveMediaTrue = 1;
403 427
404 int offer_to_receive_video = kUndefined; 428 int offer_to_receive_video = kUndefined;
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 virtual bool UpdateIce(const IceServers& configuration, 586 virtual bool UpdateIce(const IceServers& configuration,
563 const MediaConstraintsInterface* constraints) { 587 const MediaConstraintsInterface* constraints) {
564 return false; 588 return false;
565 } 589 }
566 virtual bool UpdateIce(const IceServers& configuration) { return false; } 590 virtual bool UpdateIce(const IceServers& configuration) { return false; }
567 // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of 591 // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of
568 // PeerConnectionInterface implement it. 592 // PeerConnectionInterface implement it.
569 virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() { 593 virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() {
570 return PeerConnectionInterface::RTCConfiguration(); 594 return PeerConnectionInterface::RTCConfiguration();
571 } 595 }
596
572 // Sets the PeerConnection's global configuration to |config|. 597 // Sets the PeerConnection's global configuration to |config|.
598 //
599 // The members of |config| that may be changed are |type|, |servers|,
600 // |ice_candidate_pool_size| and |prune_turn_ports| (though the candidate
601 // pool size can't be changed after the first call to SetLocalDescription).
602 // Note that this means the BUNDLE and RTCP-multiplexing policies cannot be
603 // changed with this method.
604 //
573 // Any changes to STUN/TURN servers or ICE candidate policy will affect the 605 // Any changes to STUN/TURN servers or ICE candidate policy will affect the
574 // next gathering phase, and cause the next call to createOffer to generate 606 // next gathering phase, and cause the next call to createOffer to generate
575 // new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies 607 // new ICE credentials, as described in JSEP. This also occurs when
576 // cannot be changed with this method. 608 // |prune_turn_ports| changes, for the same reasoning.
609 //
610 // If an error occurs, returns false and populates |error| if non-null:
611 // - INVALID_MODIFICATION if |config| contains a modified parameter other
612 // than one of the parameters listed above.
613 // - INVALID_RANGE if |ice_candidate_pool_size| is out of range.
614 // - SYNTAX_ERROR if parsing an ICE server URL failed.
615 // - INVALID_PARAMETER if a TURN server is missing |username| or |password|.
616 // - INTERNAL_ERROR if an unexpected error occurred.
617 //
577 // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of 618 // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of
578 // PeerConnectionInterface implement it. 619 // PeerConnectionInterface implement it.
579 virtual bool SetConfiguration( 620 virtual bool SetConfiguration(
621 const PeerConnectionInterface::RTCConfiguration& config,
622 RTCError* error) {
623 return false;
624 }
625 // Version without error output param for backwards compatibility.
626 // TODO(deadbeef): Remove once chromium is updated.
627 virtual bool SetConfiguration(
580 const PeerConnectionInterface::RTCConfiguration& config) { 628 const PeerConnectionInterface::RTCConfiguration& config) {
581 return false; 629 return false;
582 } 630 }
583 // Provides a remote candidate to the ICE Agent. 631 // Provides a remote candidate to the ICE Agent.
584 // A copy of the |candidate| will be created and added to the remote 632 // A copy of the |candidate| will be created and added to the remote
585 // description. So the caller of this method still has the ownership of the 633 // description. So the caller of this method still has the ownership of the
586 // |candidate|. 634 // |candidate|.
587 // TODO(ronghuawu): Consider to change this so that the AddIceCandidate will 635 // TODO(ronghuawu): Consider to change this so that the AddIceCandidate will
588 // take the ownership of the |candidate|. 636 // take the ownership of the |candidate|.
589 virtual bool AddIceCandidate(const IceCandidateInterface* candidate) = 0; 637 virtual bool AddIceCandidate(const IceCandidateInterface* candidate) = 0;
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 cricket::WebRtcVideoEncoderFactory* encoder_factory, 915 cricket::WebRtcVideoEncoderFactory* encoder_factory,
868 cricket::WebRtcVideoDecoderFactory* decoder_factory) { 916 cricket::WebRtcVideoDecoderFactory* decoder_factory) {
869 return CreatePeerConnectionFactory( 917 return CreatePeerConnectionFactory(
870 worker_and_network_thread, worker_and_network_thread, signaling_thread, 918 worker_and_network_thread, worker_and_network_thread, signaling_thread,
871 default_adm, encoder_factory, decoder_factory); 919 default_adm, encoder_factory, decoder_factory);
872 } 920 }
873 921
874 } // namespace webrtc 922 } // namespace webrtc
875 923
876 #endif // WEBRTC_API_PEERCONNECTIONINTERFACE_H_ 924 #endif // WEBRTC_API_PEERCONNECTIONINTERFACE_H_
OLDNEW
« no previous file with comments | « webrtc/api/peerconnection_unittest.cc ('k') | webrtc/api/peerconnectioninterface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698