30#define YSIP_API __declspec(dllexport)
33#define YSIP_API __declspec(dllimport)
51extern YSIP_API TokenDict* SIPResponses;
59 SIPParty(
Mutex* mutex = 0);
60 SIPParty(
bool reliable,
Mutex* mutex = 0);
68 virtual const char* getProtoName()
const = 0;
69 virtual bool setParty(
const URI& uri) = 0;
70 virtual void* getTransport() = 0;
71 void setAddr(
const String& addr,
int port,
bool local);
72 void getAddr(
String& addr,
int& port,
bool local);
73 inline void appendAddr(
String& buf,
bool local,
bool unsafe =
true) {
74 Lock lock(unsafe ? m_mutex : 0);
82 inline const String& getLocalAddr()
const
84 inline const String& getPartyAddr()
const
86 inline int getLocalPort()
const
87 {
return m_localPort; }
88 inline int getPartyPort()
const
89 {
return m_partyPort; }
90 inline bool isReliable()
const
91 {
return m_reliable; }
113 :
Mutex(false,
"CSeq"), m_cseq(cseq)
128 {
Lock mylock(
this);
return (++m_cseq > 0) ? m_cseq : (m_cseq = 1); }
155 NotReqRport = 0x0001,
156 NotAddAllow = 0x0002,
157 NotAddAgent = 0x0004,
158 RportAfterBranch = 0x0008,
159 NotSetRport = 0x0010,
160 NotSetReceived = 0x0020,
161 NoConnReuse = 0x0040,
162 NoTagFailure = 0x0080,
173 SIPMessage(
const char* _method,
const char* _uri,
const char* _version =
"SIP/2.0");
212 unsigned int* bodyLen = 0);
230 void complete(
SIPEngine* engine,
const char* user = 0,
const char* domain = 0,
const char* dlgTag = 0,
int flags = -1);
280 {
return m_outgoing; }
294 {
return m_ep ? m_ep->isReliable() :
false; }
322 {
return m_dontSend; }
329 { m_dontSend = val; }
335 const MimeHeaderLine*
getHeader(
const char* name)
const;
382 inline void addHeader(
const char* name,
const char* value = 0)
383 {
header.append(
new MimeHeaderLine(name,value)); }
401 inline void setHeader(
const char* name,
const char* value = 0)
430 inline void setAutoAuth(
const char* username = 0,
const char* password = 0)
431 { m_authUser = username; m_authPass = password; }
438 {
return m_authUser; }
445 {
return m_authPass; }
542 bool parse(
const char* buf,
int len,
unsigned int* bodyLen);
543 bool parseFirst(
String& line);
630 {
return matches(other,
false); }
638 {
return !
matches(other,
false); }
646 {
return matches(other,
true); }
654 {
return !
matches(other,
true); }
713 {
return m_seq ? m_seq->getLastCSeq() : -1; }
720 {
return m_seq ? m_seq->getNextCSeq() : -1; }
823 bool* autoChangeParty = 0);
854 {
return (Invalid < m_state) && (m_state < Finish); }
860 {
return m_firstMessage; }
866 {
return m_lastMessage; }
872 {
return m_lastMessage ? m_lastMessage : m_firstMessage; }
885 {
return m_outgoing; }
892 {
return !m_outgoing; }
906 {
return m_firstMessage ? m_firstMessage->isReliable() :
false; }
912 {
return m_firstMessage ? m_firstMessage->method :
String::empty(); }
918 {
return m_firstMessage ? m_firstMessage->uri :
String::empty(); }
952 { m_transmit =
true; }
966 {
return m_transCount; }
979 {
return m_autoAck; }
986 { m_autoAck = setAuto; }
1059 {
return m_response; }
1078 { m_private = data; }
1084 {
return m_private; }
1096 {
return m_traceId; }
1177 {
return (m_pending != 0); }
1191 unsigned int m_transCount;
1192 unsigned int m_timeouts;
1194 u_int64_t m_timeout;
1203 bool m_autoChangeParty;
1213class YSIP_API SIPEvent
1215 friend class SIPTransaction;
1219 : m_message(0), m_transaction(0), m_state(SIPTransaction::Invalid)
1222 SIPEvent(
SIPMessage* message, SIPTransaction* transaction = 0);
1231 {
return m_transaction ? m_transaction->getEngine() : 0; }
1238 {
return m_message; }
1245 {
return m_transaction; }
1252 {
return m_message && m_message->isOutgoing(); }
1259 {
return m_message && !m_message->isOutgoing(); }
1265 {
return m_message ? m_message->getParty() : 0; }
1271 {
return m_transaction ? m_transaction->getUserData() : 0; }
1284 {
return (SIPTransaction::Invalid < m_state) && (m_state < SIPTransaction::Finish); }
1364 const MimeHeaderLine* authLine,
GenObject* userData);
1441 u_int64_t
getTimer(
char which,
bool reliable =
false)
const;
1449 {
return m_reqTransCount; }
1457 {
return m_rspTransCount; }
1464 {
return m_maxForwards; }
1470 {
return m_userAgent; }
1484 {
return m_seq->getNextCSeq(); }
1491 {
return m_lazyTrying; }
1498 { m_lazyTrying = lazy100; }
1512 {
return m_autoChangeParty; }
1576 {
return m_allowed; }
1614 int m_reqTransCount;
1615 int m_rspTransCount;
1616 unsigned int m_maxForwards;
1625 u_int32_t m_nonce_time;
1626 Mutex m_nonce_mutex;
1627 bool m_autoChangeParty;
A class that holds just a block of raw data.
Definition yateclass.h:4237
DebugEnabler(int level=TelEngine::debugLevel(), bool enabled=true)
Definition yateclass.h:319
Definition yateclass.h:1049
virtual const String & traceId() const
Ephemeral mutex or semaphore locking object.
Definition yateclass.h:5833
Mutex support.
Definition yateclass.h:5607
Mutex(bool recursive=false, const char *name=0)
virtual bool lock(long maxwait=-1)
A named string container class.
Definition yateclass.h:5016
static const NamedList & empty()
A named string class.
Definition yateclass.h:3481
An object list class.
Definition yateclass.h:1454
Templated smart pointer class.
Definition yateclass.h:1306
SIPDialog(const SIPMessage &message)
int remoteCSeq
Definition yatesip.h:761
int32_t getNextCSeq()
Definition yatesip.h:719
SIPDialog & operator=(const SIPDialog &original)
SIPSequence * getSequence() const
Definition yatesip.h:692
void setSequence(SIPSequence *seq)
Definition yatesip.h:699
void setCSeq(int32_t cseq)
SIPDialog(const String &callid)
Definition yatesip.h:591
String localTag
Definition yatesip.h:746
bool adjustCSeq(const SIPMessage *message)
Definition yatesip.h:735
bool matches(const SIPDialog &other, bool ignoreURIs) const
bool operator&=(const SIPDialog &other) const
Definition yatesip.h:645
String localURI
Definition yatesip.h:741
SIPDialog & operator=(const String &callid)
String remoteTag
Definition yatesip.h:756
bool adjustCSeq(int cseq)
Definition yatesip.h:727
const String & toTag(bool outgoing) const
Definition yatesip.h:685
const String & fromTag(bool outgoing) const
Definition yatesip.h:669
int32_t getLastCSeq() const
Definition yatesip.h:712
const String & toURI(bool outgoing) const
Definition yatesip.h:677
bool operator==(const SIPDialog &other) const
Definition yatesip.h:629
SIPDialog(const SIPDialog &original)
bool operator!=(const SIPDialog &other) const
Definition yatesip.h:637
String remoteURI
Definition yatesip.h:751
bool operator|=(const SIPDialog &other) const
Definition yatesip.h:653
SIPDialog & operator=(const SIPMessage &message)
SIPDialog()
Definition yatesip.h:571
const String & fromURI(bool outgoing) const
Definition yatesip.h:661
The SIP engine and transaction list.
Definition yatesip.h:1304
void addAllowed(const char *method)
void lazyTrying(bool lazy100)
Definition yatesip.h:1497
unsigned int getMaxForwards() const
Definition yatesip.h:1463
int32_t getNextCSeq()
Definition yatesip.h:1483
SIPSequence * getSequence() const
Definition yatesip.h:1476
virtual void allocTraceId(String &id)=0
const String & getAllowed() const
Definition yatesip.h:1575
unsigned int getReqTransCount() const
Definition yatesip.h:1448
const String & getUserAgent() const
Definition yatesip.h:1469
SIPEngine(const char *userAgent=0)
static void buildAuth(const String &hash_a1, const String &nonce, const String &hash_a2, String &response)
virtual SIPTransaction * forkInvite(SIPMessage *answer, SIPTransaction *trans)
virtual void processEvent(SIPEvent *event)
SIPTransaction * addMessage(SIPParty *ep, const char *buf, int len=-1)
long nonceAge(const String &nonce)
bool autoChangeParty() const
Definition yatesip.h:1511
void remove(SIPTransaction *transaction)
Definition yatesip.h:1582
ObjList m_transList
Definition yatesip.h:1610
bool lazyTrying() const
Definition yatesip.h:1490
SIPTransaction * addMessage(SIPMessage *message, bool *autoChangeParty=0)
unsigned int getRspTransCount() const
Definition yatesip.h:1456
virtual bool checkAuth(bool noUser, String &username, const SIPMessage *message, const MimeHeaderLine *authLine, GenObject *userData)
unsigned int transactionCount()
Definition yatesip.h:1603
void nonceGet(String &nonce)
int flags() const
Definition yatesip.h:1504
virtual void traceMsg(SIPMessage *message, bool incoming=true)=0
virtual u_int64_t getUserTimeout() const
int authUser(const SIPMessage *message, String &user, bool proxy=false, GenObject *userData=0)
virtual bool checkUser(String &username, const String &realm, const String &nonce, const String &method, const String &uri, const String &response, const SIPMessage *message, const MimeHeaderLine *authLine, GenObject *userData)
u_int64_t getTimer(char which, bool reliable=false) const
bool isAllowed(const char *method) const
virtual bool buildParty(SIPMessage *message)=0
void insert(SIPTransaction *transaction)
Definition yatesip.h:1596
void append(SIPTransaction *transaction)
Definition yatesip.h:1589
static void buildAuth(const String &username, const String &realm, const String &passwd, const String &nonce, const String &method, const String &uri, String &response, const NamedList &qop=NamedList::empty())
A SIP event as retrieved from engine.
Definition yatesip.h:1214
bool isActive() const
Definition yatesip.h:1283
const String & traceId() const
Definition yatesip.h:1290
void * getUserData() const
Definition yatesip.h:1270
SIPParty * getParty() const
Definition yatesip.h:1264
SIPTransaction * getTransaction() const
Definition yatesip.h:1244
SIPEngine * getEngine() const
Definition yatesip.h:1230
bool isIncoming() const
Definition yatesip.h:1258
bool isOutgoing() const
Definition yatesip.h:1251
SIPMessage * getMessage() const
Definition yatesip.h:1237
int getState() const
Definition yatesip.h:1276
A container and parser for SIP messages.
Definition yatesip.h:148
SIPMessage(const SIPMessage *original, const SIPMessage *answer)
MimeAuthLine * buildAuth(const SIPMessage &original, SIPEngine *engine=0) const
int copyAllHeaders(const SIPMessage *message, const char *name, const char *newName=0)
SIPMessage(const char *_method, const char *_uri, const char *_version="SIP/2.0")
void setHeader(const char *name, const char *value=0)
Definition yatesip.h:401
void setParty(SIPParty *ep=0)
void setAutoAuth(const char *username=0, const char *password=0)
Definition yatesip.h:430
SIPMessage(const SIPMessage &original)
String msgTraceId
Definition yatesip.h:534
MimeBody * body
Definition yatesip.h:529
const String & getAuthPassword() const
Definition yatesip.h:444
int countHeaders(const char *name) const
const String & traceId() const
Definition yatesip.h:492
SIPSequence * getSequence() const
Definition yatesip.h:463
void addRoutes(const ObjList *routes)
int code
Definition yatesip.h:513
void setSequence(SIPSequence *seq)
Definition yatesip.h:470
void setCSeq(int32_t cseq)
Definition yatesip.h:307
const String & getAuthUsername() const
Definition yatesip.h:437
ObjList * getRoutes() const
bool isValid() const
Definition yatesip.h:266
static SIPMessage * fromParsing(SIPParty *ep, const char *buf, int len=-1, unsigned int *bodyLen=0)
String version
Definition yatesip.h:498
bool msgPrint
Definition yatesip.h:539
SIPParty * getParty() const
Definition yatesip.h:254
int getFlags() const
Definition yatesip.h:314
MimeAuthLine * buildAuth(const String &username, const String &password, const String &meth, const String &uri, bool proxy=false, SIPEngine *engine=0) const
bool isAnswer() const
Definition yatesip.h:272
void buildBody(const char *buf, int len=-1)
bool isReliable() const
Definition yatesip.h:293
void complete(SIPEngine *engine, const char *user=0, const char *domain=0, const char *dlgTag=0, int flags=-1)
String reason
Definition yatesip.h:518
const String & getHeaders() const
SIPMessage(SIPParty *ep, const char *buf, int len=-1, unsigned int *bodyLen=0)
int32_t getCSeq() const
Definition yatesip.h:300
bool isACK() const
Definition yatesip.h:286
bool isOutgoing() const
Definition yatesip.h:279
void dontSend(bool val)
Definition yatesip.h:328
const String & getHeaderValue(const char *name, bool last=false) const
Flags
Definition yatesip.h:153
void addHeader(const char *name, const char *value=0)
Definition yatesip.h:382
const DataBlock & getBuffer() const
ObjList header
Definition yatesip.h:523
String uri
Definition yatesip.h:508
void addHeader(MimeHeaderLine *line)
Definition yatesip.h:389
const NamedString * getParam(const char *name, const char *param, bool last=false) const
const String & getParamValue(const char *name, const char *param, bool last=false) const
SIPMessage(const SIPMessage *message, int _code, const char *_reason=0)
bool dontSend() const
Definition yatesip.h:321
const MimeHeaderLine * getLastHeader(const char *name) const
bool copyHeader(const SIPMessage *message, const char *name, const char *newName=0)
const MimeHeaderLine * getHeader(const char *name) const
void setBody(MimeBody *newbody=0)
String method
Definition yatesip.h:503
void clearHeaders(const char *name)
virtual bool transmit(SIPEvent *event)=0
SIP CSeq generator.
Definition yatesip.h:106
SIPSequence(int32_t cseq=-1)
Definition yatesip.h:112
int32_t getNextCSeq()
Definition yatesip.h:127
void setCSeq(int32_t cseq)
Definition yatesip.h:134
int32_t getLastCSeq() const
Definition yatesip.h:120
A class holding one SIP transaction.
Definition yatesip.h:772
virtual void processMessage(SIPMessage *message)
virtual Processed processMessage(SIPMessage *message, const String &branch)
void setTransCount(int count)
bool isPendingEvent() const
Definition yatesip.h:1176
void setUserData(void *data)
Definition yatesip.h:1077
virtual SIPEvent * getServerEvent(int state, int timeout)
void setTransmit()
Definition yatesip.h:951
SIPTransaction(SIPTransaction &original, SIPMessage *answer)
virtual ~SIPTransaction()
int getResponseCode() const
Definition yatesip.h:1058
virtual void processServerMessage(SIPMessage *message, int state)
SIPTransaction(const SIPTransaction &original, const String &tag)
SIPTransaction(SIPMessage *message, SIPEngine *engine, bool outgoing=true, bool *autoChangeParty=0)
void setLatestMessage(SIPMessage *message=0)
virtual void processClientMessage(SIPMessage *message, int state)
bool isActive() const
Definition yatesip.h:853
bool tryAutoAuth(SIPMessage *answer)
const String & traceId() const
Definition yatesip.h:1095
void * getUserData() const
Definition yatesip.h:1083
const String & getURI() const
Definition yatesip.h:917
bool isInvite() const
Definition yatesip.h:898
int authUser(String &user, bool proxy=false, GenObject *userData=0)
State
Definition yatesip.h:777
Processed
Definition yatesip.h:803
bool autoAck() const
Definition yatesip.h:978
const SIPMessage * latestMessage() const
Definition yatesip.h:865
void msgTransmitFailed(SIPMessage *msg)
const SIPMessage * recentMessage() const
Definition yatesip.h:871
void setPendingEvent(SIPEvent *event=0, bool replace=false)
void setDialogTag(const char *tag=0)
virtual SIPEvent * getEvent(bool pendingOnly=false, u_int64_t time=0)
bool setResponse(int code, const char *reason=0)
bool isReliable() const
Definition yatesip.h:905
SIPEngine * getEngine() const
Definition yatesip.h:877
bool isIncoming() const
Definition yatesip.h:891
void requestAuth(const String &realm, const String &domain, bool stale, bool proxy=false)
bool isOutgoing() const
Definition yatesip.h:884
const String & getCallID() const
Definition yatesip.h:931
virtual SIPEvent * getClientEvent(int state, int timeout)
const String & getDialogTag() const
Definition yatesip.h:938
bool setAcknowledge(MimeBody *ackBody=0)
void setResponse(SIPMessage *message)
const String & getMethod() const
Definition yatesip.h:911
void autoAck(bool setAuto)
Definition yatesip.h:985
int getState() const
Definition yatesip.h:846
bool changeState(int newstate)
static const char * stateName(int state)
const String & getBranch() const
Definition yatesip.h:924
const SIPMessage * initialMessage() const
Definition yatesip.h:859
void setTimeout(u_int64_t delay=0, unsigned int count=1)
void setCleared()
Definition yatesip.h:958
unsigned int getTransCount() const
Definition yatesip.h:965
static String & appendTo(String &buf, const String &addr, int port, int family=Unknown)
Definition yateclass.h:6713
A C-style string handling class.
Definition yateclass.h:2131
static const String & empty()
Encapsulation for an URI.
Definition yateclass.h:5396