*** empty log message ***
git-svn-id: http://yate.null.ro/svn/yate/trunk@147 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
6b0074459a
commit
57edf0b457
|
@ -71,7 +71,8 @@ SIPEvent::~SIPEvent()
|
|||
}
|
||||
|
||||
SIPEngine::SIPEngine(const char* userAgent)
|
||||
: m_t1(500000), m_t4(5000000), m_maxForwards(70), m_userAgent(userAgent)
|
||||
: m_t1(500000), m_t4(5000000), m_maxForwards(70),
|
||||
m_cseq(0), m_userAgent(userAgent)
|
||||
{
|
||||
Debug(DebugInfo,"SIPEngine::SIPEngine() [%p]",this);
|
||||
if (m_userAgent.null())
|
||||
|
|
|
@ -103,13 +103,13 @@ const NamedString* HeaderLine::getParam(const char *name) const
|
|||
|
||||
SIPMessage::SIPMessage(const char* _method, const char* _uri, const char* _version)
|
||||
: version(_version), method(_method), uri(_uri),
|
||||
body(0), m_ep(0), m_valid(true), m_answer(false), m_outgoing(true)
|
||||
body(0), m_ep(0), m_valid(true), m_answer(false), m_outgoing(true), m_cseq(-1)
|
||||
{
|
||||
Debug(DebugAll,"SIPMessage::SIPMessage() [%p]",this);
|
||||
}
|
||||
|
||||
SIPMessage::SIPMessage(SIPParty* ep, const char *buf, int len)
|
||||
: body(0), m_ep(ep), m_valid(false), m_answer(false), m_outgoing(false)
|
||||
: body(0), m_ep(ep), m_valid(false), m_answer(false), m_outgoing(false), m_cseq(-1)
|
||||
{
|
||||
Debugger debug(DebugAll,"SIPMessage::SIPMessage","(%p,%d) [%p]\n%s",
|
||||
buf,len,this,buf);
|
||||
|
@ -126,7 +126,7 @@ SIPMessage::SIPMessage(SIPParty* ep, const char *buf, int len)
|
|||
|
||||
SIPMessage::SIPMessage(const SIPMessage* message, int _code, const char* _reason)
|
||||
: code(_code), reason(_reason), body(0),
|
||||
m_ep(0), m_valid(false), m_answer(true), m_outgoing(true)
|
||||
m_ep(0), m_valid(false), m_answer(true), m_outgoing(true), m_cseq(-1)
|
||||
{
|
||||
Debug(DebugAll,"SIPMessage::SIPMessage(%p,%d,'%s') [%p]",
|
||||
message,_code,_reason,this);
|
||||
|
@ -138,17 +138,39 @@ SIPMessage::SIPMessage(const SIPMessage* message, int _code, const char* _reason
|
|||
version = message->version;
|
||||
uri = message->uri;
|
||||
method = message->method;
|
||||
copyAllHeaders(message,"via");
|
||||
copyHeader(message,"to");
|
||||
copyHeader(message,"from");
|
||||
copyHeader(message,"cseq");
|
||||
copyHeader(message,"call-id");
|
||||
copyAllHeaders(message,"Via");
|
||||
copyHeader(message,"To");
|
||||
copyHeader(message,"From");
|
||||
copyHeader(message,"Call-ID");
|
||||
copyHeader(message,"CSeq");
|
||||
#if 0
|
||||
body = message->body ? message->body->clone() : 0;
|
||||
#endif
|
||||
m_valid = true;
|
||||
}
|
||||
|
||||
SIPMessage::SIPMessage(const SIPMessage* message)
|
||||
: method("ACK"),
|
||||
body(), m_ep(0), m_valid(false), m_answer(false), m_outgoing(true), m_cseq(-1)
|
||||
{
|
||||
Debug(DebugAll,"SIPMessage::SIPMessage(%p) [%p]",message,this);
|
||||
if (!(message && message->isValid()))
|
||||
return;
|
||||
m_ep = message->getParty();
|
||||
if (m_ep)
|
||||
m_ep->ref();
|
||||
version = message->version;
|
||||
uri = message->uri;
|
||||
copyAllHeaders(message,"Via");
|
||||
copyHeader(message,"To");
|
||||
copyHeader(message,"From");
|
||||
copyHeader(message,"Call-ID");
|
||||
String tmp;
|
||||
tmp << message->getCSeq() << " " << method;
|
||||
addHeader("CSeq",tmp);
|
||||
m_valid = true;
|
||||
}
|
||||
|
||||
SIPMessage::~SIPMessage()
|
||||
{
|
||||
Debug(DebugAll,"SIPMessage::~SIPMessage() [%p]",this);
|
||||
|
@ -165,10 +187,19 @@ void SIPMessage::complete(SIPEngine* engine)
|
|||
{
|
||||
if (!engine)
|
||||
return;
|
||||
if (!getHeader("Max-Forwards")) {
|
||||
String m(engine->getMaxForwards());
|
||||
addHeader("Max-Forwards",m);
|
||||
|
||||
if (!getHeader("CSeq")) {
|
||||
String tmp;
|
||||
m_cseq = engine->getNextCSeq();
|
||||
tmp << m_cseq << " " << method;
|
||||
addHeader("CSeq",tmp);
|
||||
}
|
||||
|
||||
if (!getHeader("Max-Forwards")) {
|
||||
String tmp(engine->getMaxForwards());
|
||||
addHeader("Max-Forwards",tmp);
|
||||
}
|
||||
|
||||
if (!getHeader("User-Agent"))
|
||||
addHeader("User-Agent",engine->getUserAgent());
|
||||
}
|
||||
|
@ -275,10 +306,14 @@ bool SIPMessage::parse(const char* buf, int len)
|
|||
line->trimBlanks();
|
||||
DDebug("SIPMessage::parse",DebugAll,"header='%s' value='%s'",name.c_str(),line->c_str());
|
||||
header.append(new HeaderLine(name.c_str(),*line));
|
||||
if (content.null() && (name &= "content-type")) {
|
||||
if (content.null() && (name &= "Content-Type")) {
|
||||
content = *line;
|
||||
content.toLower();
|
||||
}
|
||||
if ((m_cseq < 0) && (name &= "CSeq")) {
|
||||
String seq = *line;
|
||||
seq >> m_cseq;
|
||||
}
|
||||
line->destruct();
|
||||
}
|
||||
body = SIPBody::build(buf,len,content);
|
||||
|
|
|
@ -167,13 +167,14 @@ SIPEvent* SIPTransaction::getEvent()
|
|||
void SIPTransaction::setResponse(SIPMessage* message)
|
||||
{
|
||||
setLatestMessage(message);
|
||||
m_lastMessage->deref();
|
||||
changeState(Finish);
|
||||
}
|
||||
|
||||
void SIPTransaction::setResponse(int code, const char* reason)
|
||||
{
|
||||
setResponse(new SIPMessage(m_firstMessage, code, reason));
|
||||
SIPMessage* msg = new SIPMessage(m_firstMessage, code, reason);
|
||||
setResponse(msg);
|
||||
msg->deref();
|
||||
}
|
||||
|
||||
bool SIPTransaction::processMessage(SIPMessage* message, const String& branch)
|
||||
|
@ -197,6 +198,7 @@ bool SIPTransaction::processMessage(SIPMessage* message, const String& branch)
|
|||
setTimeout(m_engine->getTimer('I'));
|
||||
return true;
|
||||
}
|
||||
// fire up a retransmission of the latest outgoing message
|
||||
setTransmit();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -145,6 +145,11 @@ public:
|
|||
*/
|
||||
SIPMessage(const SIPMessage* message, int _code, const char* _reason);
|
||||
|
||||
/**
|
||||
* Creates an ACK message from the initial message.
|
||||
*/
|
||||
SIPMessage(const SIPMessage* message);
|
||||
|
||||
/**
|
||||
* Destroy the message and all
|
||||
*/
|
||||
|
@ -210,6 +215,12 @@ public:
|
|||
inline bool isReliable() const
|
||||
{ return m_ep ? m_ep->isReliable() : false; }
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
inline int getCSeq() const
|
||||
{ return m_cseq; }
|
||||
|
||||
/**
|
||||
* Find a header line by name
|
||||
* @param name Name of the header to locate
|
||||
|
@ -289,6 +300,7 @@ protected:
|
|||
bool m_valid;
|
||||
bool m_answer;
|
||||
bool m_outgoing;
|
||||
int m_cseq;
|
||||
String m_branch;
|
||||
mutable String m_string;
|
||||
mutable DataBlock m_data;
|
||||
|
@ -672,6 +684,12 @@ public:
|
|||
inline const String& getUserAgent() const
|
||||
{ return m_userAgent; }
|
||||
|
||||
/**
|
||||
* Get a CSeq value suitable for use in a new request
|
||||
*/
|
||||
inline int getNextCSeq()
|
||||
{ return ++m_cseq; }
|
||||
|
||||
/**
|
||||
* TransList is the key.
|
||||
* Is the list that holds all the transactions.
|
||||
|
@ -683,6 +701,7 @@ protected:
|
|||
unsigned long long m_t1;
|
||||
unsigned long long m_t4;
|
||||
unsigned int m_maxForwards;
|
||||
int m_cseq;
|
||||
String m_userAgent;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue