peerconnection.h revision 5e56c5927e097f095aef2e9f7be49fd3d59221e1
128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org/* 228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2012 Google Inc. 428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer. 1028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 1128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 1228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * and/or other materials provided with the distribution. 1328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 1428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * derived from this software without specific prior written permission. 1528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 1928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org */ 2728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_PEERCONNECTION_H_ 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#define TALK_APP_WEBRTC_PEERCONNECTION_H_ 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include <string> 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 335e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström#include "talk/app/webrtc/dtlsidentitystore.h" 3428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/mediastreamsignaling.h" 3528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/peerconnectionfactory.h" 36a09a99950ec40aef6421e4ba35eee7196b7a6e68buildbot@webrtc.org#include "talk/app/webrtc/peerconnectioninterface.h" 3728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/statscollector.h" 3828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/streamcollection.h" 3928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "talk/app/webrtc/webrtcsession.h" 40d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/scoped_ptr.h" 4128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgnamespace webrtc { 4328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass MediaStreamHandlerContainer; 4428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 4528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgtypedef std::vector<PortAllocatorFactoryInterface::StunConfiguration> 4628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org StunConfigurations; 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgtypedef std::vector<PortAllocatorFactoryInterface::TurnConfiguration> 4828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org TurnConfigurations; 4928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// PeerConnectionImpl implements the PeerConnection interface. 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// It uses MediaStreamSignaling and WebRtcSession to implement 5228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// the PeerConnection functionality. 5328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass PeerConnection : public PeerConnectionInterface, 5428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public MediaStreamSignalingObserver, 5528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public IceObserver, 56d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org public rtc::MessageHandler, 5728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public sigslot::has_slots<> { 5828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 5928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org explicit PeerConnection(PeerConnectionFactory* factory); 6028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6141451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org bool Initialize( 6241451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org const PeerConnectionInterface::RTCConfiguration& configuration, 6341451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org const MediaConstraintsInterface* constraints, 6441451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org PortAllocatorFactoryInterface* allocator_factory, 655e56c5927e097f095aef2e9f7be49fd3d59221e1Henrik Boström rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 6641451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org PeerConnectionObserver* observer); 67d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual rtc::scoped_refptr<StreamCollectionInterface> local_streams(); 68d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual rtc::scoped_refptr<StreamCollectionInterface> remote_streams(); 69c2dd5ee2c05b466949fedae3fcfac63838104392perkj@webrtc.org virtual bool AddStream(MediaStreamInterface* local_stream); 7028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void RemoveStream(MediaStreamInterface* local_stream); 7128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 72d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual rtc::scoped_refptr<DtmfSenderInterface> CreateDtmfSender( 7328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org AudioTrackInterface* track); 7428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 75d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual rtc::scoped_refptr<DataChannelInterface> CreateDataChannel( 7628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const std::string& label, 7728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const DataChannelInit* config); 7828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool GetStats(StatsObserver* observer, 79b9a088b920d1ba16e0593698d4a613bb7bb5481fwu@webrtc.org webrtc::MediaStreamTrackInterface* track, 80b9a088b920d1ba16e0593698d4a613bb7bb5481fwu@webrtc.org StatsOutputLevel level); 8128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual SignalingState signaling_state(); 8328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // TODO(bemasc): Remove ice_state() when callers are removed. 8528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual IceState ice_state(); 8628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual IceConnectionState ice_connection_state(); 8728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual IceGatheringState ice_gathering_state(); 8828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual const SessionDescriptionInterface* local_description() const; 9028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual const SessionDescriptionInterface* remote_description() const; 9128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 9228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // JSEP01 9328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void CreateOffer(CreateSessionDescriptionObserver* observer, 9428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const MediaConstraintsInterface* constraints); 95b18bf5e47d1db8ca563c9c6f12e77f9cd63879d4jiayl@webrtc.org virtual void CreateOffer(CreateSessionDescriptionObserver* observer, 96b18bf5e47d1db8ca563c9c6f12e77f9cd63879d4jiayl@webrtc.org const RTCOfferAnswerOptions& options); 9728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void CreateAnswer(CreateSessionDescriptionObserver* observer, 9828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const MediaConstraintsInterface* constraints); 9928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void SetLocalDescription(SetSessionDescriptionObserver* observer, 10028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SessionDescriptionInterface* desc); 10128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void SetRemoteDescription(SetSessionDescriptionObserver* observer, 10228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SessionDescriptionInterface* desc); 103900996290c996193ac3e418f315354fd2bd0ea8ahonghaiz virtual void SetIceConnectionReceivingTimeout(int timeout_ms); 10441451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org // TODO(mallinath) : Deprecated version, remove after all clients are updated. 10528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool UpdateIce(const IceServers& configuration, 10628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const MediaConstraintsInterface* constraints); 10741451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org virtual bool UpdateIce( 10841451d4e55e9cc00c342d0ad64dcf891cfb24622buildbot@webrtc.org const PeerConnectionInterface::RTCConfiguration& config); 10928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual bool AddIceCandidate(const IceCandidateInterface* candidate); 11028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 1111567b8cf8cc486067c5ddf327dd3516bc8dc93e7buildbot@webrtc.org virtual void RegisterUMAObserver(UMAObserver* observer); 1121567b8cf8cc486067c5ddf327dd3516bc8dc93e7buildbot@webrtc.org 11328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual void Close(); 11428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 11528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org protected: 11628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~PeerConnection(); 11728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 11828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org private: 11928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Implements MessageHandler. 120d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org virtual void OnMessage(rtc::Message* msg); 12128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 12228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Implements MediaStreamSignalingObserver. 12314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddRemoteStream(MediaStreamInterface* stream) override; 12414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnRemoveRemoteStream(MediaStreamInterface* stream) override; 12514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddDataChannel(DataChannelInterface* data_channel) override; 12614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddRemoteAudioTrack(MediaStreamInterface* stream, 12714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org AudioTrackInterface* audio_track, 12814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32 ssrc) override; 12914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddRemoteVideoTrack(MediaStreamInterface* stream, 13014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org VideoTrackInterface* video_track, 13114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32 ssrc) override; 13214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnRemoveRemoteAudioTrack(MediaStreamInterface* stream, 13314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org AudioTrackInterface* audio_track) override; 13414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnRemoveRemoteVideoTrack(MediaStreamInterface* stream, 13514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org VideoTrackInterface* video_track) override; 13614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddLocalAudioTrack(MediaStreamInterface* stream, 13714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org AudioTrackInterface* audio_track, 13814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32 ssrc) override; 13914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnAddLocalVideoTrack(MediaStreamInterface* stream, 14014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org VideoTrackInterface* video_track, 14114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32 ssrc) override; 14214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnRemoveLocalAudioTrack(MediaStreamInterface* stream, 14314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org AudioTrackInterface* audio_track, 14414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint32 ssrc) override; 14514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnRemoveLocalVideoTrack(MediaStreamInterface* stream, 14614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org VideoTrackInterface* video_track) override; 14754360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnRemoveLocalStream(MediaStreamInterface* stream) override; 14828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 14928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Implements IceObserver 15054360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnIceConnectionChange(IceConnectionState new_state) override; 15154360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnIceGatheringChange(IceGatheringState new_state) override; 15254360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnIceCandidate(const IceCandidateInterface* candidate) override; 15354360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnIceComplete() override; 15454360510ff9b7c61fc906d3ed360b06a5824bbf1Peter Thatcher void OnIceConnectionReceivingChange(bool receiving) override; 15528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 15628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Signals from WebRtcSession. 15728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void OnSessionStateChange(cricket::BaseSession* session, 15828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org cricket::BaseSession::State state); 15928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void ChangeSignalingState(SignalingState signaling_state); 16028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 161d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::Thread* signaling_thread() const { 16228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return factory_->signaling_thread(); 16328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 16428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 16528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void PostSetSessionDescriptionFailure(SetSessionDescriptionObserver* observer, 16628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org const std::string& error); 16728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 16828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool IsClosed() const { 16928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org return signaling_state_ == PeerConnectionInterface::kClosed; 17028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org } 17128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 17228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Storing the factory as a scoped reference pointer ensures that the memory 17328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // in the PeerConnectionFactoryImpl remains available as long as the 17428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // PeerConnection is running. It is passed to PeerConnection as a raw pointer. 17528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // However, since the reference counting is done in the 17628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // PeerConnectionFactoryInteface all instances created using the raw pointer 17728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // will refer to the same reference count. 178d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_refptr<PeerConnectionFactory> factory_; 17928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org PeerConnectionObserver* observer_; 1801567b8cf8cc486067c5ddf327dd3516bc8dc93e7buildbot@webrtc.org UMAObserver* uma_observer_; 18128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org SignalingState signaling_state_; 18228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // TODO(bemasc): Remove ice_state_. 18328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org IceState ice_state_; 18428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org IceConnectionState ice_connection_state_; 18528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org IceGatheringState ice_gathering_state_; 18628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 187d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<cricket::PortAllocator> port_allocator_; 188d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<WebRtcSession> session_; 189d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<MediaStreamSignaling> mediastream_signaling_; 190d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<MediaStreamHandlerContainer> stream_handler_container_; 191d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::scoped_ptr<StatsCollector> stats_; 19228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 19328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 19428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org} // namespace webrtc 19528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 19628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#endif // TALK_APP_WEBRTC_PEERCONNECTION_H_ 197