Yate
yatertp.h
1
20
21#ifndef __YATERTP_H
22#define __YATERTP_H
23
24#include <yateclass.h>
25
26#ifdef _WINDOWS
27
28#ifdef LIBYRTP_EXPORTS
29#define YRTP_API __declspec(dllexport)
30#else
31#ifndef LIBYRTP_STATIC
32#define YRTP_API __declspec(dllimport)
33#endif
34#endif
35
36#endif /* _WINDOWS */
37
38#ifndef YRTP_API
39#define YRTP_API
40#endif
41
45namespace TelEngine {
46
47class RTPGroup;
48class RTPTransport;
49class RTPSession;
50class RTPSender;
51class RTPReceiver;
52class RTPSecure;
53
58class YRTP_API RTPDebug
59{
60public:
66 inline RTPDebug(DebugEnabler* dbg, const char* traceId)
67 : m_dbg(dbg), m_traceId(traceId)
68 {}
69
75
80 inline DebugEnabler* dbg() const
81 { return m_dbg; }
82
87 inline const String& dbgTraceId() const
88 { return m_traceId; }
89
90protected:
96 inline void setDebug(DebugEnabler* dbg, const char* traceId) {
97 m_dbg = dbg;
98 if (!m_traceId)
99 m_traceId = traceId;
100 }
101
102 DebugEnabler* m_dbg;
103 String m_traceId;
104};
105
110class YRTP_API RTPProcessor : public GenObject, public RTPDebug
111{
112 friend class UDPSession;
113 friend class UDPTLSession;
114 friend class RTPGroup;
115 friend class RTPTransport;
116 friend class RTPSender;
117 friend class RTPReceiver;
118
119public:
125 RTPProcessor(DebugEnabler* dbg = 0, const char* traceId = 0);
126
130 virtual ~RTPProcessor();
131
136 inline RTPGroup* group() const
137 { return m_group; }
138
144 virtual void rtpData(const void* data, int len);
145
151 virtual void rtcpData(const void* data, int len);
152
157 virtual void getStats(String& stats) const;
158
162 virtual inline void incWrongSrc()
163 { }
164
169 inline unsigned int wrongSrc()
170 { return m_wrongSrc; }
171
172protected:
177 void group(RTPGroup* newgrp);
178
183 virtual void timerTick(const Time& when) = 0;
184
185 unsigned int m_wrongSrc;
186
187private:
188 RTPGroup* m_group;
189};
190
196class YRTP_API RTPGroup : public GenObject, public Mutex, public Thread
197{
198 friend class RTPProcessor;
199
200public:
207 RTPGroup(int msec = 0, Priority prio = Normal, const String& affinity = String::empty());
208
212 virtual ~RTPGroup();
213
217 virtual void cleanup();
218
222 virtual void run();
223
228 static void setMinSleep(int msec);
229
234 void join(RTPProcessor* proc);
235
240 void part(RTPProcessor* proc);
241
242private:
243 ObjList m_processors;
244 bool m_listChanged;
245 unsigned long m_sleep;
246};
247
252class YRTP_API RTPTransport : public RTPProcessor
253{
254public:
259 Inactive,
260 Bound,
261 Active
262 };
263
267 enum Type {
268 Unknown,
269 RTP,
270 UDPTL
271 };
272
279 RTPTransport(Type type = RTP, DebugEnabler* dbg = 0, const char* traceId = 0);
280
284 virtual ~RTPTransport();
285
289 virtual void destruct();
290
295 void setProcessor(RTPProcessor* processor = 0);
296
301 void setMonitor(RTPProcessor* monitor = 0);
302
307 inline const SocketAddr& localAddr() const
308 { return m_localAddr; }
309
314 inline const SocketAddr& remoteAddr() const
315 { return m_remoteAddr; }
316
323 bool localAddr(SocketAddr& addr, bool rtcp = true);
324
331 bool remoteAddr(SocketAddr& addr, bool sniff = false);
332
338 bool setBuffer(int bufLen = 4096);
339
345 inline bool setTOS(int tos)
346 { return m_rtpSock.setTOS(tos); }
347
352 inline Socket* rtpSock()
353 { return &m_rtpSock; }
354
359 inline Socket* rtcpSock()
360 { return &m_rtcpSock; }
361
366 bool drillHole();
367
368protected:
373 virtual void timerTick(const Time& when);
374
380 virtual void rtpData(const void* data, int len);
381
387 virtual void rtcpData(const void* data, int len);
388
389private:
390 bool sendData(Socket& sock, const SocketAddr& to, const void* data, int len,
391 const char* what, bool& flag);
392 Type m_type;
393 RTPProcessor* m_processor;
394 RTPProcessor* m_monitor;
395 Socket m_rtpSock;
396 Socket m_rtcpSock;
397 SocketAddr m_localAddr;
398 SocketAddr m_remoteAddr;
399 SocketAddr m_remoteRTCP;
400 SocketAddr m_remotePref;
401 SocketAddr m_rxAddrRTP;
402 SocketAddr m_rxAddrRTCP;
403 bool m_autoRemote;
404 bool m_warnSendErrorRtp;
405 bool m_warnSendErrorRtcp;
406};
407
414class YRTP_API RTPDejitter : public RTPProcessor
415{
416public:
425 RTPDejitter(RTPReceiver* receiver, unsigned int mindelay, unsigned int maxdelay,
426 DebugEnabler* dbg = 0, const char* traceId = 0);
427
431 virtual ~RTPDejitter();
432
442 virtual bool rtpRecv(bool marker, int payload, unsigned int timestamp,
443 const void* data, int len);
444
448 void clear();
449
450protected:
455 virtual void timerTick(const Time& when);
456
457private:
458 ObjList m_packets;
459 RTPReceiver* m_receiver;
460 unsigned int m_minDelay;
461 unsigned int m_maxDelay;
462 unsigned int m_headStamp;
463 unsigned int m_tailStamp;
464 u_int64_t m_headTime;
465 u_int64_t m_sampRate;
466 unsigned char m_fastRate;
467};
468
473class YRTP_API RTPBaseIO: public RTPDebug
474{
475 friend class RTPSession;
476 friend class RTPSecure;
477public:
481 inline RTPBaseIO(RTPSession* session = 0)
482 : RTPDebug(session),
483 m_session(session), m_secure(0),
484 m_ssrcInit(true), m_ssrc(0), m_ts(0),
485 m_seq(0), m_rollover(0), m_secLen(0), m_mkiLen(0),
486 m_evTs(0), m_evNum(-1), m_evVol(-1), m_evSeq(0),
487 m_ioPackets(), m_ioOctets(0), m_tsLast(0),
488 m_debugDataLevel(0), m_debugData(false), m_debugEvent(false),
489 m_dataType(-1), m_eventType(-1), m_silenceType(-1)
490 { }
491
495 virtual ~RTPBaseIO();
496
501 inline int dataPayload() const
502 { return m_dataType; }
503
509 bool dataPayload(int type);
510
515 inline int eventPayload() const
516 { return m_eventType; }
517
523 bool eventPayload(int type);
524
529 inline int silencePayload() const
530 { return m_silenceType; }
531
538 bool silencePayload(int type);
539
544 unsigned int ssrcInit();
545
549 inline void reset()
550 { m_ssrcInit = true; }
551
556 inline unsigned int ssrc() const
557 { return m_ssrcInit ? 0 : m_ssrc; }
558
562 inline void ssrc(unsigned int src)
563 { m_ssrc = src; m_ssrcInit = false; }
564
569 inline u_int16_t seq() const
570 { return m_seq; }
571
576 inline u_int32_t rollover() const
577 { return m_rollover; }
578
583 inline u_int64_t fullSeq() const
584 { return m_seq | (((u_int64_t)m_rollover) << 16); }
585
590 inline u_int32_t ioPackets() const
591 { return m_ioPackets; }
592
597 inline u_int32_t ioOctets() const
598 { return m_ioOctets; }
599
604 inline unsigned int tsLast() const
605 { return m_ts + m_tsLast; }
606
611 inline RTPSession* session() const
612 { return m_session; }
613
618 inline RTPSecure* security() const
619 { return m_secure; }
620
625 void security(RTPSecure* secure);
626
632 void initDebugData(bool recv, const NamedList& params);
633
634protected:
639 virtual void timerTick(const Time& when) = 0;
640
646 inline void secLength(u_int32_t len, u_int32_t key = 0)
647 { m_secLen = len; m_mkiLen = key; }
648
649 RTPSession* m_session;
650 RTPSecure* m_secure;
651 bool m_ssrcInit;
652 u_int32_t m_ssrc;
653 u_int32_t m_ts;
654 u_int16_t m_seq;
655 u_int32_t m_rollover;
656 u_int16_t m_secLen;
657 u_int16_t m_mkiLen;
658 u_int32_t m_evTs;
659 int m_evNum;
660 int m_evVol;
661 unsigned int m_evSeq;
662 u_int32_t m_ioPackets;
663 u_int32_t m_ioOctets;
664 unsigned int m_tsLast;
665 // Debug data
666 int m_debugDataLevel;
667 bool m_debugData;
668 bool m_debugEvent;
669
670private:
671 int m_dataType;
672 int m_eventType;
673 int m_silenceType;
674};
675
680class YRTP_API RTPReceiver : public RTPBaseIO
681{
682 friend class RTPSession;
683 friend class RTPDejitter;
684public:
688 inline RTPReceiver(RTPSession* session = 0)
690 m_ioLostPkt(0), m_dejitter(0),
691 m_seqSync(0), m_seqCount(0), m_warn(true), m_warnSeq(1),
692 m_seqLost(0), m_wrongSSRC(0), m_syncLost(0)
693 { }
694
698 virtual ~RTPReceiver();
699
704 inline u_int32_t ioPacketsLost() const
705 { return m_ioLostPkt; }
706
707
712 void setDejitter(RTPDejitter* dejitter);
713
719 inline void setDejitter(unsigned int mindelay, unsigned int maxdelay)
720 { setDejitter(new RTPDejitter(this,mindelay,maxdelay,dbg(),m_traceId)); }
721
732 virtual bool rtpRecv(bool marker, int payload, unsigned int timestamp,
733 const void* data, int len);
734
743 virtual bool rtpRecvData(bool marker, unsigned int timestamp,
744 const void* data, int len);
745
755 virtual bool rtpRecvEvent(int event, char key, int duration,
756 int volume, unsigned int timestamp);
757
765 virtual void rtpNewPayload(int payload, unsigned int timestamp);
766
774 virtual void rtpNewSSRC(u_int32_t newSsrc, bool marker);
775
780 virtual void stats(NamedList& stat) const;
781
782protected:
787 virtual void timerTick(const Time& when);
788
799 virtual bool rtpDecipher(unsigned char* data, int len, const void* secData, u_int32_t ssrc, u_int64_t seq);
800
811 virtual bool rtpCheckIntegrity(const unsigned char* data, int len, const void* authData, u_int32_t ssrc, u_int64_t seq);
812
813 u_int32_t m_ioLostPkt;
814
815private:
816 void rtpData(const void* data, int len);
817 void rtcpData(const void* data, int len);
818 bool decodeEvent(bool marker, unsigned int timestamp, const void* data, int len);
819 bool decodeSilence(bool marker, unsigned int timestamp, const void* data, int len);
820 void finishEvent(unsigned int timestamp);
821 bool pushEvent(int event, int duration, int volume, unsigned int timestamp);
822 RTPDejitter* m_dejitter;
823 u_int16_t m_seqSync;
824 u_int16_t m_seqCount;
825 bool m_warn;
826 int m_warnSeq; // Warn on invalid sequence (1: DebugWarn, -1: DebugInfo)
827 unsigned int m_seqLost;
828 unsigned int m_wrongSSRC;
829 unsigned int m_syncLost;
830};
831
836class YRTP_API RTPSender : public RTPBaseIO
837{
838public:
844 RTPSender(RTPSession* session = 0, bool randomTs = true);
845
849 virtual ~RTPSender()
850 { }
851
861 bool rtpSend(bool marker, int payload, unsigned int timestamp,
862 const void* data, int len);
863
872 bool rtpSendData(bool marker, unsigned int timestamp,
873 const void* data, int len);
874
883 bool rtpSendEvent(int event, int duration, int volume = 0, unsigned int timestamp = 0);
884
893 bool rtpSendKey(char key, int duration, int volume = 0, unsigned int timestamp = 0);
894
895
900 inline int padding() const
901 { return m_padding; }
902
908 bool padding(int chunk);
909
914 virtual void stats(NamedList& stat) const;
915
916protected:
921 virtual void timerTick(const Time& when);
922
929 virtual void rtpEncipher(unsigned char* data, int len);
930
938 virtual void rtpAddIntegrity(const unsigned char* data, int len, unsigned char* authData);
939
940
941private:
942 int m_evTime;
943 unsigned char m_padding;
944 DataBlock m_buffer;
945 bool sendEventData(unsigned int timestamp);
946};
947
952class YRTP_API UDPSession : public RTPProcessor
953{
954public:
958 virtual ~UDPSession();
959
965 virtual RTPTransport* createTransport();
966
972
980 bool initGroup(int msec = 0, Thread::Priority prio = Thread::Normal, const String& affinity = String::empty());
981
988 inline bool remoteAddr(SocketAddr& addr, bool sniff = false)
989 { return m_transport && m_transport->remoteAddr(addr,sniff); }
990
996 inline bool setBuffer(int bufLen = 4096)
997 { return m_transport && m_transport->setBuffer(bufLen); }
998
1004 inline bool setTOS(int tos)
1005 { return m_transport && m_transport->setTOS(tos); }
1006
1011 inline Socket* rtpSock()
1012 { return m_transport ? m_transport->rtpSock() : 0; }
1013
1018 inline bool drillHole()
1019 { return m_transport && m_transport->drillHole(); }
1020
1025 void setTimeout(int interval);
1026
1031 inline RTPTransport* transport() const
1032 { return m_transport; }
1033
1038 virtual void transport(RTPTransport* trans);
1039
1040protected:
1046 UDPSession(DebugEnabler* dbg = 0, const char* traceId = 0);
1047
1052 virtual void timeout(bool initial);
1053
1054 RTPTransport* m_transport;
1055 u_int64_t m_timeoutTime;
1056 u_int64_t m_timeoutInterval;
1057};
1058
1063class YRTP_API RTPSession : public UDPSession, public Mutex
1064{
1065public:
1070 FullStop = 0,
1071 RecvOnly = 1,
1072 SendOnly = 2,
1073 SendRecv = 3
1074 };
1075
1081 RTPSession(DebugEnabler* dbg = 0, const char* traceId = 0);
1082
1086 virtual ~RTPSession();
1087
1092 virtual void getStats(String& stats) const;
1093
1099 virtual void rtpData(const void* data, int len);
1100
1106 virtual void rtcpData(const void* data, int len);
1107
1116 virtual bool rtpRecvData(bool marker, unsigned int timestamp,
1117 const void* data, int len);
1118
1128 virtual bool rtpRecvEvent(int event, char key, int duration,
1129 int volume, unsigned int timestamp);
1130
1138 virtual void rtpNewPayload(int payload, unsigned int timestamp);
1139
1147 virtual void rtpNewSSRC(u_int32_t newSsrc, bool marker);
1148
1155
1162
1169 virtual Cipher* createCipher(const String& name, Cipher::Direction dir);
1170
1176 virtual bool checkCipher(const String& name);
1177
1187 inline bool rtpSend(bool marker, int payload, unsigned int timestamp,
1188 const void* data, int len)
1189 { Lock lck(this); return m_send && m_send->rtpSend(marker,payload,timestamp,data,len); }
1190
1199 inline bool rtpSendData(bool marker, unsigned int timestamp,
1200 const void* data, int len)
1201 { Lock lck(this); return m_send && m_send->rtpSendData(marker,timestamp,data,len); }
1202
1211 inline bool rtpSendEvent(int event, int duration, int volume = 0, unsigned int timestamp = 0)
1212 { Lock lck(this); return m_send && m_send->rtpSendEvent(event,duration,volume,timestamp); }
1213
1222 inline bool rtpSendKey(char key, int duration, int volume = 0, unsigned int timestamp = 0)
1223 { Lock lck(this); return m_send && m_send->rtpSendKey(key,duration,volume,timestamp); }
1224
1229 inline u_int32_t ioPacketsLost() const
1230 { return m_recv ? m_recv->ioPacketsLost() : 0; }
1231
1236 inline int padding() const
1237 { return m_send ? m_send->padding() : 0; }
1238
1244 inline bool padding(int chunk)
1245 { return m_send && m_send->padding(chunk); }
1246
1252 inline void setDejitter(unsigned int mindelay = 20, unsigned int maxdelay = 50)
1253 { if (m_recv) m_recv->setDejitter(mindelay,maxdelay); }
1254
1259 virtual void transport(RTPTransport* trans);
1260
1265 inline RTPSender* sender() const
1266 { return m_send; }
1267
1272 void sender(RTPSender* send);
1273
1278 inline RTPReceiver* receiver() const
1279 { return m_recv; }
1280
1286
1291 inline Direction direction() const
1292 { return m_direction; }
1293
1301
1308 inline bool addDirection(Direction dir)
1309 { return direction((Direction)(m_direction | dir)); }
1310
1317 inline bool delDirection(Direction dir)
1318 { return direction((Direction)(m_direction & ~dir)); }
1319
1325 bool dataPayload(int type);
1326
1332 bool eventPayload(int type);
1333
1339 bool silencePayload(int type);
1340
1347 inline bool localAddr(SocketAddr& addr, bool rtcp = true)
1348 { Lock lck(this); return m_transport && m_transport->localAddr(addr,rtcp); }
1349
1354 inline RTPSecure* security() const
1355 { return m_send ? m_send->security() : m_secure; }
1356
1361 void security(RTPSecure* secure);
1362
1367 void setReports(int interval);
1368
1373 virtual void getStats(NamedList& stats) const;
1374
1378 virtual void incWrongSrc();
1379
1385 inline void setWarnSeq(bool on)
1386 { m_warnSeq = on ? 1 : -1; }
1387
1392 inline void initDebugData(const NamedList& params) {
1393 if (m_recv)
1394 m_recv->initDebugData(true,params);
1395 if (m_send)
1396 m_send->initDebugData(false,params);
1397 }
1398
1399protected:
1404 virtual void timerTick(const Time& when);
1405
1410 void sendRtcpReport(const Time& when);
1411
1416
1417private:
1418 Direction m_direction;
1419 RTPSender* m_send;
1420 RTPReceiver* m_recv;
1421 RTPSecure* m_secure;
1422 u_int64_t m_reportTime;
1423 u_int64_t m_reportInterval;
1424 int m_warnSeq; // Warn on invalid sequence (1: DebugWarn, -1: DebugInfo)
1425};
1426
1431class YRTP_API UDPTLSession : public UDPSession, public Mutex
1432{
1433public:
1438
1444 inline bool localAddr(SocketAddr& addr)
1445 { Lock lck(this); return m_transport && m_transport->localAddr(addr,false); }
1446
1451 inline u_int16_t maxLen() const
1452 { return m_maxLen; }
1453
1458 inline u_int8_t maxSec() const
1459 { return m_maxSec; }
1460
1466 virtual void rtpData(const void* data, int len);
1467
1475 bool udptlSend(const void* data, int len, u_int16_t seq);
1476
1477protected:
1485 UDPTLSession(u_int16_t maxLen = 250, u_int8_t maxSec = 2,
1486 DebugEnabler* dbg = 0, const char* traceId = 0);
1487
1492 virtual void timerTick(const Time& when);
1493
1500
1508 virtual void udptlRecv(const void* data, int len, u_int16_t seq, bool recovered) = 0;
1509
1510private:
1511 void recoverSec(const unsigned char* data, int len, u_int16_t seq, int nSec);
1512 u_int16_t m_rxSeq;
1513 u_int16_t m_txSeq;
1514 u_int16_t m_maxLen;
1515 u_int8_t m_maxSec;
1516 bool m_warn;
1517 ObjList m_txQueue;
1518};
1519
1524class YRTP_API RTPSecure : public GenObject, public RTPDebug
1525{
1526 friend class RTPReceiver;
1527 friend class RTPSender;
1528 friend class RTPSession;
1529public:
1535 RTPSecure(DebugEnabler* dbg = 0, const char* traceId = 0);
1536
1543 RTPSecure(const String& suite, DebugEnabler* dbg = 0, const char* traceId = 0);
1544
1549 RTPSecure(const RTPSecure& other);
1550
1554 virtual ~RTPSecure();
1555
1560 inline RTPBaseIO* owner() const
1561 { return m_owner; }
1562
1567 void owner(RTPBaseIO* newOwner);
1568
1573 inline Cipher* rtpCipher() const
1574 { return m_rtpCipher; }
1575
1581 virtual bool supported(RTPSession* session = 0) const;
1582
1590 virtual bool setup(const String& suite, const String& keyParams, const ObjList* paramList = 0);
1591
1599 virtual bool create(String& suite, String& keyParams, bool buildMaster = true);
1600
1601protected:
1605 virtual void init();
1606
1612 virtual void rtpEncipher(unsigned char* data, int len);
1613
1620 virtual void rtpAddIntegrity(const unsigned char* data, int len, unsigned char* authData);
1621
1631 virtual bool rtpDecipher(unsigned char* data, int len, const void* secData, u_int32_t ssrc, u_int64_t seq);
1632
1642 virtual bool rtpCheckIntegrity(const unsigned char* data, int len, const void* authData, u_int32_t ssrc, u_int64_t seq);
1643
1653 bool deriveKey(Cipher& cipher, DataBlock& key, unsigned int len, unsigned char label, u_int64_t index = 0);
1654
1655private:
1656 RTPBaseIO* m_owner;
1657 Cipher* m_rtpCipher;
1658 DataBlock m_masterKey;
1659 DataBlock m_masterSalt;
1660 DataBlock m_cipherKey;
1661 DataBlock m_cipherSalt;
1662 SHA1 m_authIpad;
1663 SHA1 m_authOpad;
1664 u_int32_t m_rtpAuthLen;
1665 bool m_rtpEncrypted;
1666};
1667
1668}
1669
1670#endif /* __YATERTP_H */
1671
1672/* vi: set ts=8 sw=4 sts=4 noet: */
An abstract cipher.
Definition yateclass.h:8419
Direction
Definition yateclass.h:8424
A class that holds just a block of raw data.
Definition yateclass.h:4237
A holder for a debug level.
Definition yateclass.h:312
virtual const String & traceId() const
Ephemeral mutex or semaphore locking object.
Definition yateclass.h:5833
Mutex(bool recursive=false, const char *name=0)
A named string container class.
Definition yateclass.h:5016
An object list class.
Definition yateclass.h:1454
Common send/recv variables holder.
Definition yatertp.h:474
u_int64_t fullSeq() const
Definition yatertp.h:583
virtual void timerTick(const Time &when)=0
void ssrc(unsigned int src)
Definition yatertp.h:562
u_int32_t ioOctets() const
Definition yatertp.h:597
int silencePayload() const
Definition yatertp.h:529
void security(RTPSecure *secure)
RTPSession * session() const
Definition yatertp.h:611
u_int16_t seq() const
Definition yatertp.h:569
u_int32_t rollover() const
Definition yatertp.h:576
u_int32_t ioPackets() const
Definition yatertp.h:590
unsigned int ssrcInit()
bool silencePayload(int type)
int dataPayload() const
Definition yatertp.h:501
bool eventPayload(int type)
virtual ~RTPBaseIO()
int eventPayload() const
Definition yatertp.h:515
RTPBaseIO(RTPSession *session=0)
Definition yatertp.h:481
unsigned int ssrc() const
Definition yatertp.h:556
void reset()
Definition yatertp.h:549
RTPSecure * security() const
Definition yatertp.h:618
bool dataPayload(int type)
void initDebugData(bool recv, const NamedList &params)
void secLength(u_int32_t len, u_int32_t key=0)
Definition yatertp.h:646
unsigned int tsLast() const
Definition yatertp.h:604
RTPDebug(RTPSession *session)
const String & dbgTraceId() const
Definition yatertp.h:87
DebugEnabler * dbg() const
Definition yatertp.h:80
RTPDebug(DebugEnabler *dbg, const char *traceId)
Definition yatertp.h:66
void setDebug(DebugEnabler *dbg, const char *traceId)
Definition yatertp.h:96
RTPDejitter(RTPReceiver *receiver, unsigned int mindelay, unsigned int maxdelay, DebugEnabler *dbg=0, const char *traceId=0)
virtual void timerTick(const Time &when)
void clear()
virtual bool rtpRecv(bool marker, int payload, unsigned int timestamp, const void *data, int len)
virtual ~RTPDejitter()
virtual ~RTPGroup()
void join(RTPProcessor *proc)
virtual void cleanup()
virtual void run()
void part(RTPProcessor *proc)
RTPGroup(int msec=0, Priority prio=Normal, const String &affinity=String::empty())
static void setMinSleep(int msec)
virtual void rtpData(const void *data, int len)
virtual void timerTick(const Time &when)=0
RTPGroup * group() const
Definition yatertp.h:136
unsigned int wrongSrc()
Definition yatertp.h:169
virtual void getStats(String &stats) const
virtual void rtcpData(const void *data, int len)
void group(RTPGroup *newgrp)
virtual void incWrongSrc()
Definition yatertp.h:162
RTPProcessor(DebugEnabler *dbg=0, const char *traceId=0)
virtual ~RTPProcessor()
RTP/RTCP packet receiver.
Definition yatertp.h:681
virtual void rtpNewPayload(int payload, unsigned int timestamp)
virtual void rtpNewSSRC(u_int32_t newSsrc, bool marker)
RTPReceiver(RTPSession *session=0)
Definition yatertp.h:688
virtual bool rtpDecipher(unsigned char *data, int len, const void *secData, u_int32_t ssrc, u_int64_t seq)
virtual bool rtpCheckIntegrity(const unsigned char *data, int len, const void *authData, u_int32_t ssrc, u_int64_t seq)
void setDejitter(unsigned int mindelay, unsigned int maxdelay)
Definition yatertp.h:719
virtual bool rtpRecvData(bool marker, unsigned int timestamp, const void *data, int len)
virtual void stats(NamedList &stat) const
virtual bool rtpRecvEvent(int event, char key, int duration, int volume, unsigned int timestamp)
virtual void timerTick(const Time &when)
void setDejitter(RTPDejitter *dejitter)
u_int32_t ioPacketsLost() const
Definition yatertp.h:704
virtual bool rtpRecv(bool marker, int payload, unsigned int timestamp, const void *data, int len)
virtual ~RTPReceiver()
SRTP implementation.
Definition yatertp.h:1525
virtual void rtpEncipher(unsigned char *data, int len)
virtual bool supported(RTPSession *session=0) const
RTPSecure(DebugEnabler *dbg=0, const char *traceId=0)
RTPSecure(const String &suite, DebugEnabler *dbg=0, const char *traceId=0)
bool deriveKey(Cipher &cipher, DataBlock &key, unsigned int len, unsigned char label, u_int64_t index=0)
virtual bool rtpDecipher(unsigned char *data, int len, const void *secData, u_int32_t ssrc, u_int64_t seq)
virtual bool rtpCheckIntegrity(const unsigned char *data, int len, const void *authData, u_int32_t ssrc, u_int64_t seq)
virtual ~RTPSecure()
virtual void init()
virtual bool create(String &suite, String &keyParams, bool buildMaster=true)
virtual void rtpAddIntegrity(const unsigned char *data, int len, unsigned char *authData)
RTPSecure(const RTPSecure &other)
void owner(RTPBaseIO *newOwner)
RTPBaseIO * owner() const
Definition yatertp.h:1560
virtual bool setup(const String &suite, const String &keyParams, const ObjList *paramList=0)
Cipher * rtpCipher() const
Definition yatertp.h:1573
RTP/RTCP packet sender.
Definition yatertp.h:837
virtual void rtpEncipher(unsigned char *data, int len)
bool rtpSendEvent(int event, int duration, int volume=0, unsigned int timestamp=0)
virtual ~RTPSender()
Definition yatertp.h:849
int padding() const
Definition yatertp.h:900
bool rtpSendKey(char key, int duration, int volume=0, unsigned int timestamp=0)
bool rtpSend(bool marker, int payload, unsigned int timestamp, const void *data, int len)
virtual void stats(NamedList &stat) const
RTPSender(RTPSession *session=0, bool randomTs=true)
virtual void rtpAddIntegrity(const unsigned char *data, int len, unsigned char *authData)
bool rtpSendData(bool marker, unsigned int timestamp, const void *data, int len)
virtual void timerTick(const Time &when)
bool padding(int chunk)
Full RTP session.
Definition yatertp.h:1064
void setReports(int interval)
virtual void rtpNewPayload(int payload, unsigned int timestamp)
void setWarnSeq(bool on)
Definition yatertp.h:1385
virtual void rtpNewSSRC(u_int32_t newSsrc, bool marker)
virtual void rtpData(const void *data, int len)
void sendRtcpReport(const Time &when)
Direction
Definition yatertp.h:1069
void setDejitter(unsigned int mindelay=20, unsigned int maxdelay=50)
Definition yatertp.h:1252
virtual RTPReceiver * createReceiver()
virtual void transport(RTPTransport *trans)
bool rtpSendEvent(int event, int duration, int volume=0, unsigned int timestamp=0)
Definition yatertp.h:1211
void sender(RTPSender *send)
void security(RTPSecure *secure)
virtual bool checkCipher(const String &name)
virtual ~RTPSession()
bool delDirection(Direction dir)
Definition yatertp.h:1317
virtual RTPSender * createSender()
RTPSession(DebugEnabler *dbg=0, const char *traceId=0)
bool silencePayload(int type)
int padding() const
Definition yatertp.h:1236
bool eventPayload(int type)
bool addDirection(Direction dir)
Definition yatertp.h:1308
bool direction(Direction dir)
bool rtpSendKey(char key, int duration, int volume=0, unsigned int timestamp=0)
Definition yatertp.h:1222
bool rtpSend(bool marker, int payload, unsigned int timestamp, const void *data, int len)
Definition yatertp.h:1187
virtual void getStats(String &stats) const
virtual void rtcpData(const void *data, int len)
virtual Cipher * createCipher(const String &name, Cipher::Direction dir)
void initDebugData(const NamedList &params)
Definition yatertp.h:1392
virtual bool rtpRecvData(bool marker, unsigned int timestamp, const void *data, int len)
virtual void getStats(NamedList &stats) const
RTPSender * sender() const
Definition yatertp.h:1265
virtual bool rtpRecvEvent(int event, char key, int duration, int volume, unsigned int timestamp)
void sendRtcpBye()
virtual void incWrongSrc()
bool rtpSendData(bool marker, unsigned int timestamp, const void *data, int len)
Definition yatertp.h:1199
virtual void timerTick(const Time &when)
bool localAddr(SocketAddr &addr, bool rtcp=true)
Definition yatertp.h:1347
void receiver(RTPReceiver *recv)
bool padding(int chunk)
Definition yatertp.h:1244
u_int32_t ioPacketsLost() const
Definition yatertp.h:1229
RTPSecure * security() const
Definition yatertp.h:1354
bool dataPayload(int type)
Direction direction() const
Definition yatertp.h:1291
RTPReceiver * receiver() const
Definition yatertp.h:1278
Low level transport for RTP and RTCP.
Definition yatertp.h:253
virtual void rtpData(const void *data, int len)
Type
Definition yatertp.h:267
Socket * rtpSock()
Definition yatertp.h:352
bool setBuffer(int bufLen=4096)
bool setTOS(int tos)
Definition yatertp.h:345
bool drillHole()
RTPTransport(Type type=RTP, DebugEnabler *dbg=0, const char *traceId=0)
void setMonitor(RTPProcessor *monitor=0)
bool remoteAddr(SocketAddr &addr, bool sniff=false)
virtual void destruct()
Activation
Definition yatertp.h:258
const SocketAddr & localAddr() const
Definition yatertp.h:307
virtual void rtcpData(const void *data, int len)
const SocketAddr & remoteAddr() const
Definition yatertp.h:314
Socket * rtcpSock()
Definition yatertp.h:359
virtual ~RTPTransport()
virtual void timerTick(const Time &when)
void setProcessor(RTPProcessor *processor=0)
bool localAddr(SocketAddr &addr, bool rtcp=true)
A standard SHA1 digest calculator.
Definition yateclass.h:4763
A socket address holder.
Definition yateclass.h:6400
A generic socket class.
Definition yateclass.h:7361
A C-style string handling class.
Definition yateclass.h:2131
static const String & empty()
Priority
Definition yateclass.h:6014
Thread(const char *name=0, Priority prio=Normal)
A time holding class.
Definition yateclass.h:3927
bool initGroup(int msec=0, Thread::Priority prio=Thread::Normal, const String &affinity=String::empty())
RTPTransport * transport() const
Definition yatertp.h:1031
bool initTransport()
virtual RTPTransport * createTransport()
Socket * rtpSock()
Definition yatertp.h:1011
bool setBuffer(int bufLen=4096)
Definition yatertp.h:996
bool setTOS(int tos)
Definition yatertp.h:1004
void setTimeout(int interval)
bool drillHole()
Definition yatertp.h:1018
virtual void transport(RTPTransport *trans)
UDPSession(DebugEnabler *dbg=0, const char *traceId=0)
bool remoteAddr(SocketAddr &addr, bool sniff=false)
Definition yatertp.h:988
virtual ~UDPSession()
virtual void timeout(bool initial)
u_int8_t maxSec() const
Definition yatertp.h:1458
virtual void rtpData(const void *data, int len)
virtual RTPTransport * createTransport()
u_int16_t maxLen() const
Definition yatertp.h:1451
bool udptlSend(const void *data, int len, u_int16_t seq)
virtual void udptlRecv(const void *data, int len, u_int16_t seq, bool recovered)=0
UDPTLSession(u_int16_t maxLen=250, u_int8_t maxSec=2, DebugEnabler *dbg=0, const char *traceId=0)
bool localAddr(SocketAddr &addr)
Definition yatertp.h:1444
virtual void timerTick(const Time &when)
Definition yatemime.h:34