29#define YIAX_API __declspec(dllexport)
32#define YIAX_API __declspec(dllimport)
48class IAXInfoElementString;
49class IAXInfoElementNumeric;
50class IAXInfoElementBinary;
60class IAXMetaTrunkFrame;
66#define IAX_PROTOCOL_VERSION 0x0002
67#define IAX2_MAX_CALLNO 32767
68#define IAX2_MAX_TRANSINFRAMELIST 127
71#define IAX2_TRUNKFRAME_HEADERLENGTH 8
73#define IAX2_TRUNKFRAME_LEN_MIN 20
74#define IAX2_TRUNKFRAME_LEN_DEF 1400
76#define IAX2_TRUNKFRAME_SEND_MIN 5
77#define IAX2_TRUNKFRAME_SEND_DEF 20
80#define IAX2_RETRANS_COUNT_MIN 1
81#define IAX2_RETRANS_COUNT_MAX 10
82#define IAX2_RETRANS_COUNT_DEF 4
83#define IAX2_RETRANS_INTERVAL_MIN 200
84#define IAX2_RETRANS_INTERVAL_MAX 5000
85#define IAX2_RETRANS_INTERVAL_DEF 500
88#define IAX2_PING_INTERVAL_MIN 10000
89#define IAX2_PING_INTERVAL_DEF 20000
92#define IAX2_CHALLENGETOUT_MIN 5000
93#define IAX2_CHALLENGETOUT_DEF 30000
107 CALLED_NUMBER = 0x01,
108 CALLING_NUMBER = 0x02,
111 CALLED_CONTEXT = 0x05,
124 APPARENT_ADDR = 0x12,
136 AESPROVISIONING = 0x1e,
198 static inline const char*
ieText(u_int8_t ieCode)
199 {
return lookup(ieCode,s_ieData); }
215 static inline int causeCode(
const char* name,
int defVal = 0)
269 {
return m_strData.length(); }
276 {
return m_strData; }
289 { buf << m_strData; }
327 {
return m_numericData; }
343 u_int32_t m_numericData;
372 {
return m_data.length(); }
387 { m_data.assign(buf,len); }
449 {
return m_invalidIEList; }
462 {
return 0 == m_list.skipNull(); }
474 u_int32_t ver = 0xFFFF;
476 return ver == IAX_PROTOCOL_VERSION;
484 { m_list.append(ie); }
596 bool m_invalidIEList;
639 : m_format(0), m_multiplier(1)
654 {
return m_multiplier; }
665 unsigned int m_multiplier;
690 G726AAL2 = (1 << 11),
695 AudioMask = G723_1 | GSM | ULAW | ALAW | G726 | ADPCM | SLIN | LPC10 | G729 | SPEEX |
696 ILBC | G726AAL2 | G722 | AMR | GSM_HR,
699 ImageMask = JPEG | PNG,
704 VideoMask = H261 | H263 | H263p | H264,
737 {
return m_format.format(); }
743 inline u_int32_t
in()
const
744 {
return m_formatIn.format(); }
750 inline u_int32_t
out()
const
751 {
return m_formatOut.format(); }
759 {
return in ? m_formatIn : m_formatOut; }
781 void set(u_int32_t* fmt, u_int32_t* fmtIn, u_int32_t* fmtOut);
791 const char* sep =
",");
816 static inline u_int32_t
mask(u_int32_t value,
int type) {
818 return value & AudioMask;
820 return value & VideoMask;
822 return value & ImageMask;
832 static inline u_int32_t
clear(u_int32_t value,
int type) {
834 return value & ~AudioMask;
836 return value & ~VideoMask;
838 return value & ~ImageMask;
945 {
return lookup(type,s_types,0); }
985 const unsigned char* buf,
unsigned int len,
bool mark =
false);
1018 {
return m_sCallNo; }
1025 {
return m_tStamp; }
1059 void*
data,
unsigned int len) {
1060 unsigned char header[4] = {(
unsigned char)(sCallNo >> 8),
1061 (
unsigned char)sCallNo,(
unsigned char)(ts >> 8),(
unsigned char)ts};
1076 bool mark,
void*
data,
unsigned int len);
1098 {
return lookup(
type,s_types,0); }
1114 u_int16_t m_sCallNo;
1165 u_int32_t tStamp,
bool retrans,
1166 const unsigned char* buf,
unsigned int len,
bool mark =
false);
1184 const unsigned char* buf = 0,
unsigned int len = 0,
bool mark =
false);
1213 {
return m_dCallNo; }
1220 {
return m_oSeqNo; }
1227 {
return m_iSeqNo; }
1234 {
return m_subclass; }
1241 return type() == IAXFrame::IAX &&
1250 {
return type() == IAXFrame::IAX &&
subclass() == IAXControl::Inval; }
1269 {
return m_ieList; }
1301 {
return lookup(
type,s_controlTypes,0); }
1311 void setDataHeader();
1313 u_int16_t m_dCallNo;
1314 unsigned char m_oSeqNo;
1315 unsigned char m_iSeqNo;
1316 u_int32_t m_subclass;
1344 unsigned char oSeqNo,
unsigned char iSeqNo, u_int32_t tStamp,
1345 const unsigned char* buf,
unsigned int len,
1348 :
IAXFullFrame(
type,
subclass,sCallNo,dCallNo,
oSeqNo,
iSeqNo,tStamp,buf,len,
mark),
1350 m_retransTimeInterval(retransIntervalMs * 1000),
1351 m_nextTransTime(
Time::now() + m_retransTimeInterval)
1371 unsigned char oSeqNo,
unsigned char iSeqNo, u_int32_t tStamp,
1375 :
IAXFullFrame(
type,
subclass,sCallNo,dCallNo,
oSeqNo,
iSeqNo,tStamp,
ieList,maxlen,
mark),
1377 m_retransTimeInterval(retransIntervalMs * 1000),
1378 m_nextTransTime(
Time::now() + m_retransTimeInterval)
1392 {
return m_retransCount; }
1400 {
return time >= m_nextTransTime; }
1409 ((
unsigned char*)
m_data.data())[2] |= 0x80;
1416 if (!m_retransCount)
1419 m_retransTimeInterval *= 2;
1420 m_nextTransTime += m_retransTimeInterval;
1441 {
return m_ackOnly; }
1448 {
return m_retransTimeInterval != 0; }
1455 if (!m_retransTimeInterval)
1457 m_retransTimeInterval = 0;
1459 m_nextTransTime = tout;
1465 u_int16_t m_retransCount;
1466 u_int32_t m_retransTimeInterval;
1467 u_int64_t m_nextTransTime;
1481 : m_timestamps(true), m_sendInterval(IAX2_TRUNKFRAME_SEND_DEF),
1482 m_maxLen(IAX2_TRUNKFRAME_LEN_DEF),
1483 m_efficientUse(false), m_trunkInSyncUsingTs(true),
1484 m_trunkInTsDiffRestart(5000),
1485 m_retransCount(IAX2_RETRANS_COUNT_DEF),
1486 m_retransInterval(IAX2_RETRANS_INTERVAL_DEF),
1487 m_pingInterval(IAX2_PING_INTERVAL_DEF)
1508 const IAXTrunkInfo* def = 0,
bool out =
true,
bool in =
true);
1518 bool out =
true,
bool in =
true);
1528 void dump(
String& buf,
const char* sep =
" ",
bool out =
true,
bool in =
true,
1532 unsigned int m_sendInterval;
1533 unsigned int m_maxLen;
1534 bool m_efficientUse;
1535 bool m_trunkInSyncUsingTs;
1537 u_int32_t m_trunkInTsDiffRestart;
1539 unsigned int m_retransCount;
1540 unsigned int m_retransInterval;
1541 unsigned int m_pingInterval;
1598 {
return m_trunkTimestamps; }
1605 {
return m_sendInterval; }
1612 {
return m_maxLen; }
1621 unsigned int add(u_int16_t sCallNo,
const DataBlock& data, u_int32_t tStamp);
1629 if (m_dataAddIdx == IAX2_TRUNKFRAME_HEADERLENGTH || !m_send)
1632 return (now > m_send) && doSend(now,
true);
1640 if (m_dataAddIdx == IAX2_TRUNKFRAME_HEADERLENGTH)
1643 return m_dataAddIdx != IAX2_TRUNKFRAME_HEADERLENGTH && doSend();
1649 bool doSend(
const Time& now = Time(),
bool onTime =
false);
1651 inline void setTimestamp(u_int64_t now) {
1653 m_send = now + (u_int64_t)m_sendInterval * 1000;
1656 inline void setSendTime(u_int64_t now)
1657 { m_send = now + (u_int64_t)m_sendInterval * 1000; }
1660 inline void setTimestamp(u_int32_t tStamp) {
1661 m_data[4] = (u_int8_t)(tStamp >> 24);
1662 m_data[5] = (u_int8_t)(tStamp >> 16);
1663 m_data[6] = (u_int8_t)(tStamp >> 8);
1664 m_data[7] = (u_int8_t)tStamp;
1667 unsigned int m_calls;
1669 u_int16_t m_dataAddIdx;
1670 u_int64_t m_timeStamp;
1672 u_int32_t m_lastSentTs;
1673 unsigned int m_sendInterval;
1674 IAXEngine* m_engine;
1676 bool m_trunkTimestamps;
1677 unsigned int m_maxLen;
1678 unsigned int m_maxDataLen;
1679 unsigned char m_miniHdrLen;
1689 friend class IAXTransaction;
1695 : m_inMutex(false,
"IAXTransaction::InMedia"),
1696 m_outMutex(false,
"IAXTransaction::OutMedia"),
1697 m_startedIn(false), m_startedOut(false),
1698 m_outStartTransTs(0), m_outFirstSrcTs(0),
1699 m_lastOut(0), m_lastIn(0), m_sent(0), m_sentBytes(0),
1700 m_recv(0), m_recvBytes(0), m_ooPackets(0), m_ooBytes(0),
1701 m_showInNoFmt(true), m_showOutOldTs(true),
1702 m_dropOut(0), m_dropOutBytes(0)
1712 m_dropOutBytes += len;
1727 int m_outStartTransTs;
1728 unsigned int m_outFirstSrcTs;
1729 u_int32_t m_lastOut;
1731 unsigned int m_sent;
1732 unsigned int m_sentBytes;
1733 unsigned int m_recv;
1734 unsigned int m_recvBytes;
1735 unsigned int m_ooPackets;
1736 unsigned int m_ooBytes;
1738 bool m_showOutOldTs;
1739 unsigned int m_dropOut;
1740 unsigned int m_dropOutBytes;
1750 friend class IAXEvent;
1751 friend class IAXEngine;
1771 NewLocalInvite_AuthRecv,
1772 NewLocalInvite_RepSent,
1774 NewRemoteInvite_AuthSent,
1775 NewRemoteInvite_RepRecv,
1815 {
return m_engine; }
1857 {
return m_localInitTrans; }
1864 { m_userdata = data; }
1871 {
return m_userdata; }
1878 {
return m_lCallNo; }
1885 {
return m_rCallNo; }
1899 {
return m_username; }
1906 {
return m_callingNo; }
1913 {
return m_callingName; }
1920 {
return m_calledNo; }
1927 {
return m_calledContext; }
1934 {
return m_challenge; }
1942 if (
type == IAXFormat::Audio)
1944 if (
type == IAXFormat::Video)
1945 return &m_formatVideo;
1955 if (
type == IAXFormat::Audio)
1956 return &m_dataAudio;
1957 if (
type == IAXFormat::Video)
1958 return &m_dataVideo;
1969 return fmt ? fmt->
format() : 0;
1979 return fmt ? fmt->
in() : 0;
1989 return fmt ? fmt->
out() : 0;
1997 {
return m_capability; }
2004 {
return m_expire; }
2011 {
return m_authdata; }
2017 { m_destroy =
true; }
2043 int type = IAXFormat::Audio,
bool full =
false,
bool mark =
false);
2055 int type = IAXFormat::Audio,
bool mark =
false);
2207 void print(
bool printStats =
false,
bool printFrames =
false,
const char* location =
"status");
2344 bool ackOnly =
false,
bool mark =
false);
2356 bool ackOnly =
false);
2597 m_currentEvent = event;
2602 void adjustTStamp(u_int32_t& tStamp);
2604 void receivedVoiceMiniBeforeFull();
2607 void setPendingEvent(
IAXEvent* ev = 0);
2608 inline void restartTrunkIn(u_int64_t now, u_int32_t ts) {
2609 m_trunkInStartTime = now;
2610 u_int64_t dt = (now - m_lastVoiceFrameIn) / 1000;
2611 m_trunkInTsDelta = m_lastVoiceFrameInTs + (u_int32_t)dt;
2612 m_trunkInFirstTs = ts;
2615 bool processAcceptFmt(IAXIEList* list);
2618 IAXEvent* checkAcceptRecv(
const char* reason, u_int8_t code);
2621 bool m_localInitTrans;
2627 u_int64_t m_timeStamp;
2628 u_int64_t m_timeout;
2630 u_int16_t m_lCallNo;
2631 u_int16_t m_rCallNo;
2632 unsigned char m_oSeqNo;
2633 unsigned char m_iSeqNo;
2634 IAXEngine* m_engine;
2636 u_int32_t m_lastFullFrameOut;
2637 IAXMediaData m_dataAudio;
2638 IAXMediaData m_dataVideo;
2639 u_int16_t m_lastAck;
2640 IAXEvent* m_pendingEvent;
2641 IAXEvent* m_currentEvent;
2643 ObjList m_outFrames;
2644 unsigned int m_retransCount;
2645 unsigned int m_retransInterval;
2648 static unsigned char m_maxInFrames;
2650 u_int32_t m_pingInterval;
2651 u_int64_t m_timeToNextPing;
2653 u_int32_t m_inTotalFramesCount;
2654 u_int32_t m_inOutOfOrderFrames;
2655 u_int32_t m_inDroppedFrames;
2660 String m_callingName;
2662 String m_calledContext;
2667 IAXFormat m_formatVideo;
2668 u_int32_t m_capability;
2670 unsigned int m_adjustTsOutThreshold;
2671 unsigned int m_adjustTsOutOverrun;
2673 unsigned int m_adjustTsOutUnderrun;
2675 u_int64_t m_lastVoiceFrameIn;
2676 u_int32_t m_lastVoiceFrameInTs;
2679 IAXMetaTrunkFrame* m_trunkFrame;
2680 bool m_trunkFrameCallsSet;
2681 bool m_trunkOutEfficientUse;
2682 bool m_trunkOutSend;
2683 bool m_trunkInSyncUsingTs;
2685 u_int64_t m_trunkInStartTime;
2686 u_int32_t m_trunkInTsDelta;
2687 u_int32_t m_trunkInTsDiffRestart;
2688 u_int32_t m_trunkInFirstTs;
2690 IAXIEList* m_startIEs;
2699 friend class IAXTransaction;
2700 friend class IAXConnectionlessTransaction;
2752 inline bool final()
const
2767 {
return m_frameType; }
2774 {
return m_subClass; }
2781 {
return m_transaction ? m_transaction->getEngine() : 0; }
2788 {
return m_transaction; }
2795 {
return m_transaction ? m_transaction->getUserData() : 0; }
2802 {
return *m_ieList; }
2830 u_int8_t m_frameType;
2831 u_int32_t m_subClass;
2855 const NamedList* params = 0,
const char*
name =
"iaxengine");
2875 {
return m_callerNumType; }
2882 {
return m_callingPres; }
2919 int type,
bool mark)
2934 {
return m_challengeTout; }
2941 {
return m_maxFullFrameDataLen; }
2948 inline u_int32_t
format(
bool audio =
true)
const
2949 {
return audio ? m_format : m_formatVideo; }
2956 {
return m_capability; }
2965 unsigned int& under)
const {
2966 thres = m_adjustTsOutThreshold;
2967 over = m_adjustTsOutOverrun;
2968 under = m_adjustTsOutUnderrun;
3001 unsigned int* sent = 0);
3072 int type = IAXFormat::Audio);
3085 {
return m_exiting; }
3132 Lock lck(m_trunkInfoMutex);
3133 info = m_trunkInfoDef;
3154 {
return m_socket; }
3169 inline void setFormats(u_int32_t caps, u_int32_t fmtAudio, u_int32_t fmtVideo) {
3170 m_format = fmtAudio;
3171 m_formatVideo = fmtVideo;
3172 m_capability = caps;
3227 const TokenDict* tokens,
unsigned int val) {
3228 const char* value = lookup(val,tokens);
3246 unsigned int& day,
unsigned int& hour,
unsigned int& minute,
unsigned int& sec);
3254 static unsigned int overallTout(
unsigned int interval = IAX2_RETRANS_INTERVAL_DEF,
3255 unsigned int nRetrans = IAX2_RETRANS_COUNT_DEF);
3304 bool refTrans =
false,
bool startTrans =
true);
3313 bool bind(
const char* iface,
int port,
bool force);
3322 ObjList m_incompleteTransList;
3323 bool m_lUsedCallNo[IAX2_MAX_CALLNO + 1];
3324 int m_lastGetEvIndex;
3327 int m_maxFullFrameDataLen;
3328 u_int16_t m_startLocalCallNo;
3329 u_int16_t m_transListCount;
3330 unsigned int m_challengeTout;
3332 String m_callTokenSecret;
3334 bool m_showCallTokenFailures;
3335 bool m_rejectMissingCallToken;
3337 u_int8_t m_callerNumType;
3338 u_int8_t m_callingPres;
3341 u_int32_t m_formatVideo;
3342 u_int32_t m_capability;
3343 unsigned int m_adjustTsOutThreshold;
3344 unsigned int m_adjustTsOutOverrun;
3346 unsigned int m_adjustTsOutUnderrun;
3351 Mutex m_trunkInfoMutex;
A class that holds just a block of raw data.
Definition yateclass.h:4237
void append(void *value, unsigned int len)
Definition yateclass.h:4358
void * data() const
Definition yateclass.h:4289
unsigned int length() const
Definition yateclass.h:4321
DataBlock & assign(void *value, unsigned int len, bool copyData=true, unsigned int allocated=0)
DebugEnabler(int level=TelEngine::debugLevel(), bool enabled=true)
Definition yateclass.h:319
Wrapper class for authentication methods values.
Definition yateiax.h:605
static void authList(String &dest, u_int16_t auth, char sep)
Type
Definition yateiax.h:610
Wrapper class for subclasses of frames of type IAX.
Definition yateiax.h:893
Type
Definition yateiax.h:898
static const char * typeText(int type)
Definition yateiax.h:944
IAX engine class.
Definition yateiax.h:2843
virtual bool checkCallToken(const SocketAddr &addr, IAXFullFrame &frame)
bool trunkInfo(RefPointer< IAXTrunkInfo > &info)
Definition yateiax.h:3131
bool writeSocket(const void *buf, int len, const SocketAddr &addr, IAXFullFrame *frame=0, unsigned int *sent=0)
virtual bool mediaFormatChanged(IAXTransaction *trans, int type, u_int32_t format)
Definition yateiax.h:3051
IAXTransaction * addFrame(const SocketAddr &addr, IAXFrame *frame)
static void getMD5FromChallenge(String &md5data, const String &challenge, const String &password)
unsigned int challengeTout() const
Definition yateiax.h:2933
bool bind(const char *iface, int port, bool force)
static void buildAddrSecret(String &buf, const String &secret, const SocketAddr &addr)
void getOutDataAdjust(unsigned int &thres, unsigned int &over, unsigned int &under) const
Definition yateiax.h:2964
u_int16_t generateCallNo()
u_int8_t callingPres() const
Definition yateiax.h:2881
bool acceptFormatAndCapability(IAXTransaction *trans, unsigned int *caps=0, int type=IAXFormat::Audio)
IAXTransaction * startLocalTransaction(IAXTransaction::Type type, const SocketAddr &addr, IAXIEList &ieList, bool refTrans=false, bool startTrans=true)
static bool isMD5ChallengeCorrect(const String &md5data, const String &challenge, const String &password)
void sendInval(IAXFullFrame *frame, const SocketAddr &addr)
static void addKeyword(NamedList &list, const char *param, const TokenDict *tokens, unsigned int val)
Definition yateiax.h:3226
void initialize(const NamedList ¶ms)
void readSocket(SocketAddr &addr)
u_int32_t capability() const
Definition yateiax.h:2955
void enableTrunking(IAXTransaction *trans, IAXTrunkInfo &data)
void initTrunkIn(IAXTransaction *trans, const NamedList *params, const String &prefix=String::empty())
void initOutDataAdjust(const NamedList ¶ms, IAXTransaction *tr=0)
const SocketAddr & addr() const
Definition yateiax.h:3160
u_int8_t callerNumType() const
Definition yateiax.h:2874
u_int32_t format(bool audio=true) const
Definition yateiax.h:2948
bool exiting() const
Definition yateiax.h:3084
virtual void processMedia(IAXTransaction *transaction, DataBlock &data, u_int32_t tStamp, int type, bool mark)
Definition yateiax.h:2918
void releaseCallNo(u_int16_t lcallno)
void keepAlive(const SocketAddr &addr)
static unsigned int overallTout(unsigned int interval=IAX2_RETRANS_INTERVAL_DEF, unsigned int nRetrans=IAX2_RETRANS_COUNT_DEF)
void initTrunkIn(IAXTransaction *trans, IAXTrunkInfo &data)
u_int16_t maxFullFrameDataLen() const
Definition yateiax.h:2940
static int addrSecretAge(const String &buf, const String &secret, const SocketAddr &addr)
void removeTransaction(IAXTransaction *transaction)
IAXEvent * getEvent(const Time &now=Time())
void setFormats(u_int32_t caps, u_int32_t fmtAudio, u_int32_t fmtVideo)
Definition yateiax.h:3169
virtual void defaultEventHandler(IAXEvent *event)
bool processTrunkFrames(const Time &time=Time())
const String & name() const
Definition yateiax.h:2867
bool writeSocket(const SocketAddr &addr, IAXFullFrame *frame)
Definition yateiax.h:3009
IAXTransaction * addFrame(const SocketAddr &addr, const unsigned char *buf, unsigned int len)
void runProcessTrunkFrames()
static int getPort(const NamedList ¶ms, const String ¶m="port")
Definition yateiax.h:3181
virtual void processEvent(IAXEvent *event)
IAXEngine(const char *iface, int port, u_int32_t format, u_int32_t capab, const NamedList *params=0, const char *name="iaxengine")
static void decodeDateTime(u_int32_t dt, unsigned int &year, unsigned int &month, unsigned int &day, unsigned int &hour, unsigned int &minute, unsigned int &sec)
virtual void setExiting()
u_int32_t transactionCount()
void enableTrunking(IAXTransaction *trans, const NamedList *params, const String &prefix=String::empty())
Socket & socket()
Definition yateiax.h:3153
IAXTransaction * findTransaction(const SocketAddr &addr, u_int16_t rCallNo)
Event class.
Definition yateiax.h:2698
IAXEvent(Type type, bool local, bool final, IAXTransaction *transaction, IAXFullFrame *frame=0)
Type
Definition yateiax.h:2705
u_int32_t subclass()
Definition yateiax.h:2773
void setFinal()
Definition yateiax.h:2758
IAXEngine * getEngine() const
Definition yateiax.h:2780
void * getUserData() const
Definition yateiax.h:2794
IAXTransaction * getTransaction() const
Definition yateiax.h:2787
IAXIEList & getList()
Definition yateiax.h:2801
bool local() const
Definition yateiax.h:2745
IAXEvent(Type type, bool local, bool final, IAXTransaction *transaction, u_int8_t frameType=0, u_int32_t subclass=0)
u_int8_t frameType()
Definition yateiax.h:2766
Type type() const
Definition yateiax.h:2738
This class holds an outgoing IAX full frame.
Definition yateiax.h:1325
virtual ~IAXFrameOut()
Definition yateiax.h:1384
void setRetrans()
Definition yateiax.h:1405
unsigned int retransCount() const
Definition yateiax.h:1391
IAXFrameOut(Type type, u_int32_t subclass, u_int16_t sCallNo, u_int16_t dCallNo, unsigned char oSeqNo, unsigned char iSeqNo, u_int32_t tStamp, const unsigned char *buf, unsigned int len, u_int16_t retransCount, u_int32_t retransIntervalMs, bool ackOnly, bool mark=false)
Definition yateiax.h:1343
void transmitted()
Definition yateiax.h:1415
void setAck()
Definition yateiax.h:1433
bool canSetTimeout()
Definition yateiax.h:1447
bool ack() const
Definition yateiax.h:1427
bool timeForRetrans(u_int64_t time) const
Definition yateiax.h:1399
bool ackOnly() const
Definition yateiax.h:1440
IAXFrameOut(Type type, u_int32_t subclass, u_int16_t sCallNo, u_int16_t dCallNo, unsigned char oSeqNo, unsigned char iSeqNo, u_int32_t tStamp, IAXIEList *ieList, u_int16_t maxlen, u_int16_t retransCount, u_int32_t retransIntervalMs, bool ackOnly, bool mark=false)
Definition yateiax.h:1370
void setTimeout(u_int64_t tout)
Definition yateiax.h:1454
This class holds an IAX frame.
Definition yateiax.h:956
static void buildMiniFrame(DataBlock &dest, u_int16_t sCallNo, u_int32_t ts, void *data, unsigned int len)
Definition yateiax.h:1058
Type
Definition yateiax.h:961
bool m_retrans
Definition yateiax.h:1109
bool mark() const
Definition yateiax.h:1031
static IAXFrame * parse(const unsigned char *buf, unsigned int len, IAXEngine *engine=0, const SocketAddr *addr=0)
bool retrans() const
Definition yateiax.h:1010
virtual IAXFullFrame * fullFrame()
DataBlock & data()
Definition yateiax.h:1003
IAXFrame(Type type, u_int16_t sCallNo, u_int32_t tStamp, bool retrans, const unsigned char *buf, unsigned int len, bool mark=false)
static u_int32_t unpackSubclass(u_int8_t value)
u_int16_t sourceCallNo() const
Definition yateiax.h:1017
static u_int8_t packSubclass(u_int32_t value)
static void buildVideoMetaFrame(DataBlock &dest, u_int16_t sCallNo, u_int32_t tStamp, bool mark, void *data, unsigned int len)
DataBlock m_data
Definition yateiax.h:1104
static const char * typeText(int type)
Definition yateiax.h:1097
Type type() const
Definition yateiax.h:996
u_int32_t timeStamp() const
Definition yateiax.h:1024
This class holds an IAX full frame.
Definition yateiax.h:1124
void updateBuffer(u_int16_t maxlen)
u_int32_t subclass() const
Definition yateiax.h:1233
u_int16_t destCallNo() const
Definition yateiax.h:1212
IAXFullFrame(Type type, u_int32_t subclass, u_int16_t sCallNo, u_int16_t dCallNo, unsigned char oSeqNo, unsigned char iSeqNo, u_int32_t tStamp, IAXIEList *ieList, u_int16_t maxlen, bool mark=false)
ControlType
Definition yateiax.h:1129
virtual IAXFullFrame * fullFrame()
bool isAuthReq() const
Definition yateiax.h:1240
bool isInval() const
Definition yateiax.h:1249
IAXIEList * removeIEList(bool delObj=true)
IAXFullFrame(Type type, u_int32_t subclass, u_int16_t sCallNo, u_int16_t dCallNo, unsigned char oSeqNo, unsigned char iSeqNo, u_int32_t tStamp, const unsigned char *buf=0, unsigned int len=0, bool mark=false)
bool updateIEList(bool incoming)
void toString(String &dest, const SocketAddr &local, const SocketAddr &remote, bool incoming)
unsigned char oSeqNo() const
Definition yateiax.h:1219
static const char * controlTypeText(int type)
Definition yateiax.h:1300
unsigned char iSeqNo() const
Definition yateiax.h:1226
IAXIEList * ieList()
Definition yateiax.h:1268
IAXFullFrame(Type type, u_int32_t subclass, u_int16_t sCallNo, u_int16_t dCallNo, unsigned char oSeqNo, unsigned char iSeqNo, u_int32_t tStamp, bool retrans, const unsigned char *buf, unsigned int len, bool mark=false)
Information Element container.
Definition yateiax.h:425
bool createFromFrame(const IAXFullFrame *frame, bool incoming=true)
bool appendIE(IAXIEList &src, IAXInfoElement::Type type)
Definition yateiax.h:492
bool empty()
Definition yateiax.h:461
void appendNumeric(IAXInfoElement::Type type, u_int32_t value, u_int8_t len)
Definition yateiax.h:529
void appendString(IAXInfoElement::Type type, unsigned char *src, unsigned len)
Definition yateiax.h:520
void toString(String &dest, const char *indent=0)
IAXIEList(const IAXFullFrame *frame, bool incoming=true)
bool getBinary(IAXInfoElement::Type type, DataBlock &dest)
bool validVersion()
Definition yateiax.h:473
void appendString(IAXInfoElement::Type type, const String &src)
Definition yateiax.h:511
void toBuffer(DataBlock &buf)
bool invalidIEList() const
Definition yateiax.h:448
void clear()
Definition yateiax.h:454
IAXInfoElement * getIE(IAXInfoElement::Type type, bool remove=false)
void appendNull(IAXInfoElement::Type type)
Definition yateiax.h:503
void appendBinary(IAXInfoElement::Type type, unsigned char *data, unsigned len)
Definition yateiax.h:538
bool getString(IAXInfoElement::Type type, String &dest)
void appendIE(IAXInfoElement *ie)
Definition yateiax.h:483
bool getNumeric(IAXInfoElement::Type type, u_int32_t &dest)
A single IAX2 numeric Information Element.
Definition yateiax.h:351
IAXInfoElementBinary(Type type, unsigned char *buf, unsigned len)
Definition yateiax.h:359
static IAXInfoElementBinary * packIP(const SocketAddr &addr)
void setData(void *buf, unsigned len)
Definition yateiax.h:386
virtual void toBuffer(DataBlock &buf)
int length() const
Definition yateiax.h:371
DataBlock & data()
Definition yateiax.h:378
static bool unpackIP(SocketAddr &addr, IAXInfoElementBinary *ie)
virtual void toString(String &buf)
virtual ~IAXInfoElementBinary()
Definition yateiax.h:365
A single IAX2 numeric Information Element.
Definition yateiax.h:300
virtual void toBuffer(DataBlock &buf)
int length() const
Definition yateiax.h:319
IAXInfoElementNumeric(Type type, u_int32_t val, u_int8_t len)
virtual void toString(String &buf)
u_int32_t data() const
Definition yateiax.h:326
virtual ~IAXInfoElementNumeric()
Definition yateiax.h:313
A single IAX2 text Information Element.
Definition yateiax.h:248
IAXInfoElementString(Type type, const char *buf, unsigned len)
Definition yateiax.h:256
virtual ~IAXInfoElementString()
Definition yateiax.h:262
virtual void toBuffer(DataBlock &buf)
int length() const
Definition yateiax.h:268
String & data()
Definition yateiax.h:275
virtual void toString(String &buf)
Definition yateiax.h:288
A single IAX2 Information Element.
Definition yateiax.h:100
Type
Definition yateiax.h:105
static const char * causeName(int code)
Definition yateiax.h:206
IAXInfoElement(Type type)
Definition yateiax.h:167
static const TokenDict s_screening[]
Definition yateiax.h:236
static const TokenDict s_presentation[]
Definition yateiax.h:231
static int causeCode(const char *name, int defVal=0)
Definition yateiax.h:215
virtual void toBuffer(DataBlock &buf)
static const TokenDict s_causeName[]
Definition yateiax.h:221
static const TokenDict s_typeOfNumber[]
Definition yateiax.h:226
static const char * ieText(u_int8_t ieCode)
Definition yateiax.h:198
Type type() const
Definition yateiax.h:178
virtual void toString(String &buf)
virtual ~IAXInfoElement()
Definition yateiax.h:172
An IAX2 transaction.
Definition yateiax.h:1749
u_int16_t localCallNo() const
Definition yateiax.h:1877
static IAXTransaction * factoryOut(IAXEngine *engine, Type type, u_int16_t lcallno, const SocketAddr &addr, IAXIEList &ieList, void *data=0)
void eventTerminated(IAXEvent *event)
bool sendAccept(unsigned int *expires=0)
IAXEvent * getEventRequest(IAXFullFrame *frame, bool &delFrame)
void setUserData(void *data)
Definition yateiax.h:1863
IAXTransaction * processMedia(DataBlock &data, u_int32_t tStamp, int type=IAXFormat::Audio, bool full=false, bool mark=false)
bool sendNoise(u_int8_t noise)
Definition yateiax.h:2168
bool isFrameAcceptable(const IAXFullFrame *frame)
IAXEvent * processMidCallIAXControl(IAXFullFrame *frame, bool &delFrame)
IAXEvent * processMidCallControl(IAXFullFrame *frame, bool &delFrame)
IAXEvent * remoteRejectCall(IAXFullFrame *frame, bool &delFrame)
void print(bool printStats=false, bool printFrames=false, const char *location="status")
IAXTransaction(IAXEngine *engine, Type type, u_int16_t lcallno, const SocketAddr &addr, IAXIEList &ieList, void *data=0)
bool sendRinging()
Definition yateiax.h:2091
IAXTransaction(IAXEngine *engine, IAXFullFrame *frame, u_int16_t lcallno, const SocketAddr &addr, void *data=0)
static const TokenDict s_typeName[]
Definition yateiax.h:2228
Type
Definition yateiax.h:1756
virtual ~IAXTransaction()
void processCallToken(const DataBlock &callToken)
IAXFullFrame * findInFrame(IAXFrame::Type type, u_int32_t subclass)
IAXEvent * internalReject(const char *reason, u_int8_t code)
IAXEvent * createEvent(u_int8_t evType, bool local, IAXFullFrame *frame, State newState)
IAXEvent * processInternalIncomingRequest(const IAXFullFrame *frame, bool &delFrame)
bool findInFrameAck(const IAXFullFrame *frameOut)
static unsigned char getMaxFrameList()
IAXEvent * processAuthRep(IAXEvent *event)
IAXEngine * getEngine() const
Definition yateiax.h:1814
void init(IAXIEList &ieList)
void * getUserData() const
Definition yateiax.h:1870
const String & username()
Definition yateiax.h:1898
IAXEvent * waitForTerminate(u_int8_t evType=0, bool local=true, IAXFullFrame *frame=0)
void postFrameIes(IAXFrame::Type type, u_int32_t subclass, IAXIEList *ies, u_int32_t tStamp=0, bool ackOnly=false)
void postFrame(IAXFrame::Type type, u_int32_t subclass, void *data=0, u_int16_t len=0, u_int32_t tStamp=0, bool ackOnly=false, bool mark=false)
IAXEvent * getEventStartTrans(IAXFullFrame *frame, bool &delFrame)
u_int32_t expire() const
Definition yateiax.h:2003
u_int32_t capability() const
Definition yateiax.h:1996
static String s_iax_modNoAuthMethod
Definition yateiax.h:2238
bool sendProgress()
Definition yateiax.h:2099
IAXEvent * processAccept(IAXEvent *event)
bool sendAuthReply(const String &response)
IAXEvent * getEventRequest_New(IAXFullFrame *frame, bool &delFrame)
State
Definition yateiax.h:1768
u_int64_t timeStamp() const
Definition yateiax.h:1849
bool changeState(State newState)
IAXFormat * getFormat(int type)
Definition yateiax.h:1941
bool sendHangup(const char *cause=0, u_int8_t code=0)
bool findInFrameTimestamp(const IAXFullFrame *frameOut, IAXFrame::Type type, u_int32_t subclass)
IAXEvent * processInternalOutgoingRequest(IAXFrameOut *frame, bool &delFrame)
bool sendFrame(IAXFrameOut *frame, bool vnak=false)
bool sendDtmf(u_int8_t dtmf)
Definition yateiax.h:2151
bool sendText(const char *text)
void sendUnsupport(u_int32_t subclass)
unsigned int sendMedia(const DataBlock &data, unsigned int tStamp, u_int32_t format, int type=IAXFormat::Audio, bool mark=false)
bool sendReject(const char *cause=0, u_int8_t code=0)
static const char * typeName(int type)
Definition yateiax.h:2214
static String s_iax_modNoUsername
Definition yateiax.h:2253
IAXEvent * keepEvent(IAXEvent *event)
Definition yateiax.h:2596
const SocketAddr & remoteAddr() const
Definition yateiax.h:1891
const String & calledContext()
Definition yateiax.h:1926
u_int32_t formatIn(int type)
Definition yateiax.h:1977
static IAXTransaction * factoryIn(IAXEngine *engine, IAXFullFrame *frame, u_int16_t lcallno, const SocketAddr &addr, void *data=0)
IAXEvent * getEvent(const Time &now=Time())
const String & callingNo()
Definition yateiax.h:1905
const String & authdata()
Definition yateiax.h:2010
void setDestroy()
Definition yateiax.h:2016
u_int32_t format(int type)
Definition yateiax.h:1967
bool enableTrunking(IAXMetaTrunkFrame *trunkFrame, bool efficientUse)
static String s_iax_modInvalidAuth
Definition yateiax.h:2248
IAXEvent * processAuthReq(IAXEvent *event)
IAXTransaction * processFrame(IAXFrame *frame)
bool sendConnected(IAXFullFrame::ControlType subclass, IAXFrame::Type frametype=IAXFrame::Control)
IAXEvent * processRegAck(IAXEvent *event)
IAXEvent * getEventResponse_New(IAXFrameOut *frame, bool &delFrame)
bool sendAnswer()
Definition yateiax.h:2083
IAXEvent * getEventResponse(IAXFrameOut *frame, bool &delFrame)
static const char * stateName(int state)
Definition yateiax.h:2222
State state() const
Definition yateiax.h:1835
const String & calledNo()
Definition yateiax.h:1919
IAXTransaction * retransmitOnVNAK(u_int16_t seqNo)
static String s_iax_modNoMediaFormat
Definition yateiax.h:2243
const String & callingName()
Definition yateiax.h:1912
IAXEvent * createResponse(IAXFrameOut *frame, u_int8_t findType, u_int8_t findSubclass, u_int8_t evType, bool local, State newState)
u_int16_t remoteCallNo() const
Definition yateiax.h:1884
IAXEvent * terminate(u_int8_t evType, bool local, IAXFullFrame *frame=0, bool createIEList=true)
void processMiniNoTs(u_int32_t ts, ObjList &blocks, const Time &now=Time())
IAXMediaData * getData(int type)
Definition yateiax.h:1954
Type type() const
Definition yateiax.h:1821
u_int32_t formatOut(int type)
Definition yateiax.h:1987
static const TokenDict s_stateName[]
Definition yateiax.h:2233
const char * typeName()
Definition yateiax.h:1828
static bool setMaxFrameList(unsigned char value)
bool outgoing() const
Definition yateiax.h:1856
IAXEvent * getEventResponse_Reg(IAXFrameOut *frame, bool &delFrame)
void sendAck(const IAXFullFrame *frame)
const char * stateName()
Definition yateiax.h:1842
IAXTransaction * processMediaFrame(const IAXFullFrame *frame, int type)
bool incrementSeqNo(const IAXFullFrame *frame, bool inbound)
const String & challenge()
Definition yateiax.h:1933
Trunk info.
Definition yateiax.h:1475
void updateTrunking(const NamedList ¶ms, const String &prefix=String::empty(), bool out=true, bool in=true)
void dump(String &buf, const char *sep=" ", bool out=true, bool in=true, bool other=true)
void init(const NamedList ¶ms, const String &prefix=String::empty(), const IAXTrunkInfo *def=0)
IAXTrunkInfo()
Definition yateiax.h:1480
void initTrunking(const NamedList ¶ms, const String &prefix=String::empty(), const IAXTrunkInfo *def=0, bool out=true, bool in=true)
Ephemeral mutex or semaphore locking object.
Definition yateclass.h:5833
Mutex support.
Definition yateclass.h:5607
Mutex(bool recursive=false, const char *name=0)
A named string container class.
Definition yateclass.h:5016
int getIntValue(const String &name, int defvalue=0, int minvalue=INT_MIN, int maxvalue=INT_MAX, bool clamp=true) const
NamedList & addParam(NamedString *param)
An object list class.
Definition yateclass.h:1454
Templated smart pointer class.
Definition yateclass.h:1306
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
const char * c_str() const
Definition yateclass.h:2236
static const String & empty()
unsigned int length() const
Definition yateclass.h:2258
A time holding class.
Definition yateclass.h:3927
static u_int64_t msecNow()
Definition yateclass.h:848