1 /* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_P2P_CLIENT_SOCKETMONITOR_H_ 12 #define WEBRTC_P2P_CLIENT_SOCKETMONITOR_H_ 13 14 #include <vector> 15 16 #include "webrtc/base/criticalsection.h" 17 #include "webrtc/base/sigslot.h" 18 #include "webrtc/base/thread.h" 19 #include "webrtc/p2p/base/transport.h" // for ConnectionInfos 20 21 // TODO(pthatcher): Move these to connectionmonitor.h and 22 // connectionmonitor.cc, or just move them into channel.cc 23 24 namespace cricket { 25 26 class ConnectionStatsGetter { 27 public: ~ConnectionStatsGetter()28 virtual ~ConnectionStatsGetter() {} 29 virtual bool GetConnectionStats(ConnectionInfos* infos) = 0; 30 }; 31 32 class ConnectionMonitor : public rtc::MessageHandler, 33 public sigslot::has_slots<> { 34 public: 35 ConnectionMonitor(ConnectionStatsGetter* stats_getter, 36 rtc::Thread* worker_thread, 37 rtc::Thread* monitoring_thread); 38 ~ConnectionMonitor(); 39 40 void Start(int cms); 41 void Stop(); 42 43 sigslot::signal2<ConnectionMonitor*, 44 const std::vector<ConnectionInfo>&> SignalUpdate; 45 46 protected: 47 void OnMessage(rtc::Message* message); 48 private: 49 void PollConnectionStats_w(); 50 51 std::vector<ConnectionInfo> connection_infos_; 52 ConnectionStatsGetter* stats_getter_; 53 rtc::Thread* worker_thread_; 54 rtc::Thread* monitoring_thread_; 55 rtc::CriticalSection crit_; 56 uint32_t rate_; 57 bool monitoring_; 58 }; 59 60 } // namespace cricket 61 62 #endif // WEBRTC_P2P_CLIENT_SOCKETMONITOR_H_ 63