• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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