|  | /* | 
|  | *  Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  | #ifndef TEST_PEER_SCENARIO_SIGNALING_ROUTE_H_ | 
|  | #define TEST_PEER_SCENARIO_SIGNALING_ROUTE_H_ | 
|  |  | 
|  | #include <string> | 
|  | #include <utility> | 
|  |  | 
|  | #include "test/network/network_emulation_manager.h" | 
|  | #include "test/peer_scenario/peer_scenario_client.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | namespace test { | 
|  |  | 
|  | // Helper class to reduce the amount of boilerplate required for ICE signalling | 
|  | // ad SDP negotiation. | 
|  | class SignalingRoute { | 
|  | public: | 
|  | SignalingRoute(PeerScenarioClient* caller, | 
|  | PeerScenarioClient* callee, | 
|  | CrossTrafficRoute* send_route, | 
|  | CrossTrafficRoute* ret_route); | 
|  |  | 
|  | void StartIceSignaling(); | 
|  |  | 
|  | // The |modify_offer| callback is used to modify an offer after the local | 
|  | // description has been set. This is legal (but odd) behavior. | 
|  | // The |munge_offer| callback is used to modify an offer between its creation | 
|  | // and set local description. This behavior is forbidden according to the spec | 
|  | // but available here in order to allow test coverage on corner cases. | 
|  | // The |exchange_finished| callback is called with the answer produced after | 
|  | // SDP negotations has completed. | 
|  | // TODO(srte): Handle lossy links. | 
|  | void NegotiateSdp( | 
|  | std::function<void(SessionDescriptionInterface* offer)> munge_offer, | 
|  | std::function<void(SessionDescriptionInterface* offer)> modify_offer, | 
|  | std::function<void(const SessionDescriptionInterface& answer)> | 
|  | exchange_finished); | 
|  | void NegotiateSdp( | 
|  | std::function<void(SessionDescriptionInterface* offer)> modify_offer, | 
|  | std::function<void(const SessionDescriptionInterface& answer)> | 
|  | exchange_finished); | 
|  | void NegotiateSdp( | 
|  | std::function<void(const SessionDescriptionInterface& answer)> | 
|  | exchange_finished); | 
|  | SignalingRoute reverse() { | 
|  | return SignalingRoute(callee_, caller_, ret_route_, send_route_); | 
|  | } | 
|  |  | 
|  | private: | 
|  | PeerScenarioClient* const caller_; | 
|  | PeerScenarioClient* const callee_; | 
|  | CrossTrafficRoute* const send_route_; | 
|  | CrossTrafficRoute* const ret_route_; | 
|  | }; | 
|  |  | 
|  | }  // namespace test | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // TEST_PEER_SCENARIO_SIGNALING_ROUTE_H_ |