blob: 370e549e4a0d1105fbdbcf31eb2049679520f2ed [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
2 * Copyright (c) 2011 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_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_
12#define WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_
13
niklase@google.com470e71d2011-07-07 08:21:25 +000014#ifndef WEBRTC_NO_STL
15 #include <map>
16#endif
17
henrike@webrtc.org315282c2011-12-09 17:46:20 +000018#include "system_wrappers/interface/static_instance.h"
19#include "typedefs.h"
20
niklase@google.com470e71d2011-07-07 08:21:25 +000021namespace webrtc {
22class CriticalSectionWrapper;
23
24class SSRCDatabase
25{
niklase@google.com470e71d2011-07-07 08:21:25 +000026public:
27 static SSRCDatabase* GetSSRCDatabase();
28 static void ReturnSSRCDatabase();
29
30 WebRtc_UWord32 CreateSSRC();
31 WebRtc_Word32 RegisterSSRC(const WebRtc_UWord32 ssrc);
32 WebRtc_Word32 ReturnSSRC(const WebRtc_UWord32 ssrc);
33
henrike@webrtc.org315282c2011-12-09 17:46:20 +000034protected:
niklase@google.com470e71d2011-07-07 08:21:25 +000035 SSRCDatabase();
36 virtual ~SSRCDatabase();
37
henrike@webrtc.org315282c2011-12-09 17:46:20 +000038 static SSRCDatabase* CreateInstance() { return new SSRCDatabase(); }
39
40private:
41 // Friend function to allow the SSRC destructor to be accessed from the
42 // template class.
43 friend SSRCDatabase* GetStaticInstance<SSRCDatabase>(
44 CountOperation count_operation);
45 static SSRCDatabase* StaticInstance(CountOperation count_operation);
46
niklase@google.com470e71d2011-07-07 08:21:25 +000047 WebRtc_UWord32 GenerateRandom();
48
49#ifdef WEBRTC_NO_STL
50 int _numberOfSSRC;
51 int _sizeOfSSRC;
52
53 WebRtc_UWord32* _ssrcVector;
54#else
55 std::map<WebRtc_UWord32, WebRtc_UWord32> _ssrcMap;
56#endif
57
58 CriticalSectionWrapper* _critSect;
59};
60} // namespace webrtc
61
62#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_