Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef _SIPCCSDPMEDIASECTION_H_
8 : #define _SIPCCSDPMEDIASECTION_H_
9 :
10 : #include "mozilla/Attributes.h"
11 : #include "mozilla/UniquePtr.h"
12 : #include "signaling/src/sdp/SdpMediaSection.h"
13 : #include "signaling/src/sdp/SipccSdpAttributeList.h"
14 :
15 : #include <map>
16 :
17 : extern "C" {
18 : #include "signaling/src/sdp/sipcc/sdp.h"
19 : }
20 :
21 : namespace mozilla
22 : {
23 :
24 : class SipccSdp;
25 : class SdpErrorHolder;
26 :
27 0 : class SipccSdpBandwidths final : public std::map<std::string, uint32_t>
28 : {
29 : public:
30 : bool Load(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder);
31 : void Serialize(std::ostream& os) const;
32 : };
33 :
34 : class SipccSdpMediaSection final : public SdpMediaSection
35 : {
36 : friend class SipccSdp;
37 :
38 : public:
39 0 : ~SipccSdpMediaSection() {}
40 :
41 : virtual MediaType
42 0 : GetMediaType() const override
43 : {
44 0 : return mMediaType;
45 : }
46 :
47 : virtual unsigned int GetPort() const override;
48 : virtual void SetPort(unsigned int port) override;
49 : virtual unsigned int GetPortCount() const override;
50 : virtual Protocol GetProtocol() const override;
51 : virtual const SdpConnection& GetConnection() const override;
52 : virtual SdpConnection& GetConnection() override;
53 : virtual uint32_t GetBandwidth(const std::string& type) const override;
54 : virtual const std::vector<std::string>& GetFormats() const override;
55 :
56 : virtual const SdpAttributeList& GetAttributeList() const override;
57 : virtual SdpAttributeList& GetAttributeList() override;
58 : virtual SdpDirectionAttribute GetDirectionAttribute() const override;
59 :
60 : virtual void AddCodec(const std::string& pt, const std::string& name,
61 : uint32_t clockrate, uint16_t channels) override;
62 : virtual void ClearCodecs() override;
63 :
64 : virtual void AddDataChannel(const std::string& name, uint16_t port,
65 : uint16_t streams, uint32_t message_size) override;
66 :
67 : virtual void Serialize(std::ostream&) const override;
68 :
69 : private:
70 0 : SipccSdpMediaSection(size_t level, const SipccSdpAttributeList* sessionLevel)
71 0 : : SdpMediaSection(level), mAttributeList(sessionLevel)
72 : {
73 0 : }
74 :
75 : bool Load(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder);
76 : bool LoadConnection(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder);
77 : bool LoadProtocol(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder);
78 : bool LoadFormats(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder);
79 : bool ValidateSimulcast(sdp_t* sdp, uint16_t level,
80 : SdpErrorHolder& errorHolder) const;
81 : bool ValidateSimulcastVersions(
82 : sdp_t* sdp,
83 : uint16_t level,
84 : const SdpSimulcastAttribute::Versions& versions,
85 : sdp::Direction direction,
86 : SdpErrorHolder& errorHolder) const;
87 :
88 : // the following values are cached on first get
89 : MediaType mMediaType;
90 : uint16_t mPort;
91 : uint16_t mPortCount;
92 : Protocol mProtocol;
93 : std::vector<std::string> mFormats;
94 :
95 : UniquePtr<SdpConnection> mConnection;
96 : SipccSdpBandwidths mBandwidths;
97 :
98 : SipccSdpAttributeList mAttributeList;
99 : };
100 : }
101 :
102 : #endif
|