Index: webrtc/api/peerconnectioninterface.h |
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h |
index 5f5a58b4319295312cf169a612855b897d73a9af..5e1fd327e221bcc9b1493f7b16e6e52e6ac3337b 100644 |
--- a/webrtc/api/peerconnectioninterface.h |
+++ b/webrtc/api/peerconnectioninterface.h |
@@ -150,9 +150,10 @@ class MetricsObserverInterface : public rtc::RefCountInterface { |
typedef MetricsObserverInterface UMAObserver; |
// Enumeration to represent distinct classes of errors that an application |
-// may wish to act upon differently. These roughly map to DOMExceptions in |
-// the web API, as described in the comments below. |
-enum class RtcError { |
+// may wish to act upon differently. These roughly map to DOMExceptions or |
+// RTCError "errorDetailEnum" values in the web API, as described in the |
+// comments below. |
+enum class RTCErrorType { |
// No error. |
NONE, |
// A supplied parameter is valid, but currently unsupported. |
@@ -183,9 +184,26 @@ enum class RtcError { |
INTERNAL_ERROR, |
}; |
+// Roughly corresponds to RTCError in the web api. Holds an error type and |
+// possibly additional information specific to that error. |
+// |
+// Doesn't contain anything beyond a type now, but will in the future as more |
+// errors are implemented. |
+class RTCError { |
+ public: |
+ RTCError() : type_(RTCErrorType::NONE) {} |
+ explicit RTCError(RTCErrorType type) : type_(type) {} |
+ |
+ RTCErrorType type() const { return type_; } |
+ void set_type(RTCErrorType type) { type_ = type; } |
+ |
+ private: |
+ RTCErrorType type_; |
+}; |
+ |
// Outputs the error as a friendly string. |
// Update this method when adding a new error type. |
-std::ostream& operator<<(std::ostream& stream, RtcError error); |
+std::ostream& operator<<(std::ostream& stream, RTCErrorType error); |
class PeerConnectionInterface : public rtc::RefCountInterface { |
public: |
@@ -319,6 +337,9 @@ class PeerConnectionInterface : public rtc::RefCountInterface { |
} |
} |
+ bool operator==(const RTCConfiguration& o) const; |
+ bool operator!=(const RTCConfiguration& o) const; |
+ |
bool dscp() { return media_config.enable_dscp; } |
void set_dscp(bool enable) { media_config.enable_dscp = enable; } |
@@ -392,6 +413,9 @@ class PeerConnectionInterface : public rtc::RefCountInterface { |
// If true, ICE role is redetermined when peerconnection sets a local |
// transport description that indicates an ICE restart. |
bool redetermine_role_on_ice_restart = true; |
+ // |
+ // Don't forget to update operator== if adding something. |
+ // |
}; |
struct RTCOfferAnswerOptions { |
@@ -569,14 +593,38 @@ class PeerConnectionInterface : public rtc::RefCountInterface { |
virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() { |
return PeerConnectionInterface::RTCConfiguration(); |
} |
+ |
// Sets the PeerConnection's global configuration to |config|. |
+ // |
+ // The members of |config| that may be changed are |type|, |servers|, |
+ // |ice_candidate_pool_size| and |prune_turn_ports| (though the candidate |
+ // pool size can't be changed after the first call to SetLocalDescription). |
+ // Note that this means the BUNDLE and RTCP-multiplexing policies cannot be |
+ // changed with this method. |
+ // |
// Any changes to STUN/TURN servers or ICE candidate policy will affect the |
// next gathering phase, and cause the next call to createOffer to generate |
- // new ICE credentials. Note that the BUNDLE and RTCP-multiplexing policies |
- // cannot be changed with this method. |
+ // new ICE credentials, as described in JSEP. This also occurs when |
+ // |prune_turn_ports| changes, for the same reasoning. |
+ // |
+ // If an error occurs, returns false and populates |error| if non-null: |
+ // - INVALID_MODIFICATION if |config| contains a modified parameter other |
+ // than one of the parameters listed above. |
+ // - INVALID_RANGE if |ice_candidate_pool_size| is out of range. |
+ // - SYNTAX_ERROR if parsing an ICE server URL failed. |
+ // - INVALID_PARAMETER if a TURN server is missing |username| or |password|. |
+ // - INTERNAL_ERROR if an unexpected error occurred. |
+ // |
// TODO(deadbeef): Make this pure virtual once all Chrome subclasses of |
// PeerConnectionInterface implement it. |
virtual bool SetConfiguration( |
+ const PeerConnectionInterface::RTCConfiguration& config, |
+ RTCError* error) { |
+ return false; |
+ } |
+ // Version without error output param for backwards compatibility. |
+ // TODO(deadbeef): Remove once chromium is updated. |
+ virtual bool SetConfiguration( |
const PeerConnectionInterface::RTCConfiguration& config) { |
return false; |
} |