libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
pcapsdpmap.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <cstdint>
14#include <promeki/namespace.h>
15#include <promeki/ancdesc.h>
16#include <promeki/enums_pcap.h>
17#include <promeki/error.h>
18#include <promeki/list.h>
21#include <promeki/string.h>
22
23PROMEKI_NAMESPACE_BEGIN
24
25class SdpSession;
26class SdpMediaDescription;
27
38struct PcapFlow {
40 NetworkAddress address;
42 uint16_t port = 0;
44 PcapFlowKind kind = PcapFlowKind::Unknown;
46 uint8_t payloadType = 0;
48 bool hasPayloadType = false;
50 String encoding;
52 uint32_t clockRate = 0;
54 AncDesc anc;
56 String label;
57
59 SocketAddress destination() const { return SocketAddress(address, port); }
60};
61
87class PcapSdpMap {
88 public:
89 PcapSdpMap() = default;
90
101 Error ingest(const SdpSession &sdp);
102
109 void addFlow(const PcapFlow &flow) { _flows.pushToBack(flow); }
110
125 void addAncFlow(const NetworkAddress &address, uint16_t port, int payloadType = -1);
126
128 void clear() { _flows.clear(); }
129
131 bool isEmpty() const { return _flows.isEmpty(); }
132
134 const List<PcapFlow> &flows() const { return _flows; }
135
140 const PcapFlow *find(const NetworkAddress &address, uint16_t port) const;
141
143 const PcapFlow *find(const SocketAddress &dst) const { return find(dst.address(), dst.port()); }
144
151 static PcapFlowKind classify(const SdpMediaDescription &md);
152
153 private:
154 List<PcapFlow> _flows;
155};
156
157PROMEKI_NAMESPACE_END
158
159#endif // PROMEKI_ENABLE_NETWORK