Home | History | Annotate | Download | only in client
      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:
     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