29#define YRTP_API __declspec(dllexport)
32#define YRTP_API __declspec(dllimport)
67 : m_dbg(
dbg), m_traceId(traceId)
112 friend class UDPSession;
113 friend class UDPTLSession;
114 friend class RTPGroup;
115 friend class RTPTransport;
116 friend class RTPSender;
117 friend class RTPReceiver;
144 virtual void rtpData(
const void* data,
int len);
170 {
return m_wrongSrc; }
185 unsigned int m_wrongSrc;
198 friend class RTPProcessor;
245 unsigned long m_sleep;
308 {
return m_localAddr; }
315 {
return m_remoteAddr; }
346 {
return m_rtpSock.setTOS(tos); }
353 {
return &m_rtpSock; }
360 {
return &m_rtcpSock; }
380 virtual void rtpData(
const void* data,
int len);
390 bool sendData(
Socket& sock,
const SocketAddr& to,
const void* data,
int len,
391 const char* what,
bool& flag);
404 bool m_warnSendErrorRtp;
405 bool m_warnSendErrorRtcp;
425 RTPDejitter(RTPReceiver* receiver,
unsigned int mindelay,
unsigned int maxdelay,
442 virtual bool rtpRecv(
bool marker,
int payload,
unsigned int timestamp,
443 const void* data,
int len);
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;
475 friend class RTPSession;
476 friend class RTPSecure;
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)
502 {
return m_dataType; }
516 {
return m_eventType; }
530 {
return m_silenceType; }
550 { m_ssrcInit =
true; }
556 inline unsigned int ssrc()
const
557 {
return m_ssrcInit ? 0 : m_ssrc; }
562 inline void ssrc(
unsigned int src)
563 { m_ssrc = src; m_ssrcInit =
false; }
569 inline u_int16_t
seq()
const
577 {
return m_rollover; }
584 {
return m_seq | (((u_int64_t)m_rollover) << 16); }
591 {
return m_ioPackets; }
598 {
return m_ioOctets; }
605 {
return m_ts + m_tsLast; }
612 {
return m_session; }
647 { m_secLen = len; m_mkiLen = key; }
655 u_int32_t m_rollover;
661 unsigned int m_evSeq;
662 u_int32_t m_ioPackets;
663 u_int32_t m_ioOctets;
664 unsigned int m_tsLast;
666 int m_debugDataLevel;
682 friend class RTPSession;
683 friend class RTPDejitter;
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)
705 {
return m_ioLostPkt; }
719 inline void setDejitter(
unsigned int mindelay,
unsigned int maxdelay)
720 {
setDejitter(
new RTPDejitter(
this,mindelay,maxdelay,
dbg(),m_traceId)); }
732 virtual bool rtpRecv(
bool marker,
int payload,
unsigned int timestamp,
733 const void* data,
int len);
744 const void* data,
int len);
756 int volume,
unsigned int timestamp);
799 virtual bool rtpDecipher(
unsigned char* data,
int len,
const void* secData, u_int32_t
ssrc, u_int64_t
seq);
813 u_int32_t m_ioLostPkt;
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;
824 u_int16_t m_seqCount;
827 unsigned int m_seqLost;
828 unsigned int m_wrongSSRC;
829 unsigned int m_syncLost;
861 bool rtpSend(
bool marker,
int payload,
unsigned int timestamp,
862 const void* data,
int len);
873 const void* data,
int len);
883 bool rtpSendEvent(
int event,
int duration,
int volume = 0,
unsigned int timestamp = 0);
893 bool rtpSendKey(
char key,
int duration,
int volume = 0,
unsigned int timestamp = 0);
901 {
return m_padding; }
938 virtual void rtpAddIntegrity(
const unsigned char* data,
int len,
unsigned char* authData);
943 unsigned char m_padding;
945 bool sendEventData(
unsigned int timestamp);
989 {
return m_transport && m_transport->remoteAddr(addr,sniff); }
997 {
return m_transport && m_transport->setBuffer(bufLen); }
1005 {
return m_transport && m_transport->setTOS(tos); }
1012 {
return m_transport ? m_transport->rtpSock() : 0; }
1019 {
return m_transport && m_transport->drillHole(); }
1032 {
return m_transport; }
1054 RTPTransport* m_transport;
1055 u_int64_t m_timeoutTime;
1056 u_int64_t m_timeoutInterval;
1117 const void* data,
int len);
1129 int volume,
unsigned int timestamp);
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); }
1200 const void* data,
int len)
1201 {
Lock lck(
this);
return m_send && m_send->rtpSendData(marker,timestamp,data,len); }
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); }
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); }
1230 {
return m_recv ? m_recv->ioPacketsLost() : 0; }
1237 {
return m_send ? m_send->padding() : 0; }
1245 {
return m_send && m_send->padding(chunk); }
1252 inline void setDejitter(
unsigned int mindelay = 20,
unsigned int maxdelay = 50)
1253 {
if (m_recv) m_recv->setDejitter(mindelay,maxdelay); }
1292 {
return m_direction; }
1348 {
Lock lck(
this);
return m_transport && m_transport->localAddr(addr,rtcp); }
1355 {
return m_send ? m_send->security() : m_secure; }
1386 { m_warnSeq = on ? 1 : -1; }
1394 m_recv->initDebugData(
true,params);
1396 m_send->initDebugData(
false,params);
1422 u_int64_t m_reportTime;
1423 u_int64_t m_reportInterval;
1445 {
Lock lck(
this);
return m_transport && m_transport->localAddr(addr,
false); }
1452 {
return m_maxLen; }
1459 {
return m_maxSec; }
1508 virtual void udptlRecv(
const void* data,
int len, u_int16_t seq,
bool recovered) = 0;
1511 void recoverSec(
const unsigned char* data,
int len, u_int16_t seq,
int nSec);
1526 friend class RTPReceiver;
1527 friend class RTPSender;
1528 friend class RTPSession;
1574 {
return m_rtpCipher; }
1620 virtual void rtpAddIntegrity(
const unsigned char* data,
int len,
unsigned char* authData);
1631 virtual bool rtpDecipher(
unsigned char* data,
int len,
const void* secData, u_int32_t ssrc, u_int64_t seq);
1642 virtual bool rtpCheckIntegrity(
const unsigned char* data,
int len,
const void* authData, u_int32_t ssrc, u_int64_t seq);
1664 u_int32_t m_rtpAuthLen;
1665 bool m_rtpEncrypted;
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
bool silencePayload(int type)
int dataPayload() const
Definition yatertp.h:501
bool eventPayload(int type)
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 ¶ms)
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)
virtual bool rtpRecv(bool marker, int payload, unsigned int timestamp, const void *data, int len)
void join(RTPProcessor *proc)
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)
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)
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 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)
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)
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 ¶ms)
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)
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
RTPTransport(Type type=RTP, DebugEnabler *dbg=0, const char *traceId=0)
void setMonitor(RTPProcessor *monitor=0)
bool remoteAddr(SocketAddr &addr, bool sniff=false)
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 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
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 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)