Allow retrieving and setting more SIP dialog components.
git-svn-id: http://voip.null.ro/svn/yate@5846 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
cfa8ec23c8
commit
303e9abc0e
|
@ -292,12 +292,21 @@ void SIPMessage::complete(SIPEngine* engine, const char* user, const char* domai
|
||||||
addHeader("Call-ID",tmp);
|
addHeader("Call-ID",tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(isAnswer() || getHeader("CSeq"))) {
|
if (!isAnswer()) {
|
||||||
String tmp;
|
hl = const_cast<MimeHeaderLine*>(getHeader("CSeq"));
|
||||||
if (m_cseq <= 0)
|
if (hl) {
|
||||||
m_cseq = engine->getNextCSeq();
|
if (m_cseq <= 0) {
|
||||||
tmp << m_cseq << " " << method;
|
String tmp(*hl);
|
||||||
addHeader("CSeq",tmp);
|
tmp >> m_cseq;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
String tmp;
|
||||||
|
if (m_cseq <= 0)
|
||||||
|
m_cseq = engine->getNextCSeq();
|
||||||
|
tmp << m_cseq << " " << method;
|
||||||
|
addHeader("CSeq",tmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* info = isAnswer() ? "Server" : "User-Agent";
|
const char* info = isAnswer() ? "Server" : "User-Agent";
|
||||||
|
|
|
@ -932,6 +932,7 @@ public:
|
||||||
virtual bool msgText(Message& msg, const char* text);
|
virtual bool msgText(Message& msg, const char* text);
|
||||||
virtual bool msgDrop(Message& msg, const char* reason);
|
virtual bool msgDrop(Message& msg, const char* reason);
|
||||||
virtual bool msgUpdate(Message& msg);
|
virtual bool msgUpdate(Message& msg);
|
||||||
|
virtual bool msgControl(Message& msg);
|
||||||
virtual bool callRouted(Message& msg);
|
virtual bool callRouted(Message& msg);
|
||||||
virtual void callAccept(Message& msg);
|
virtual void callAccept(Message& msg);
|
||||||
virtual void callRejected(const char* error, const char* reason, const Message* msg);
|
virtual void callRejected(const char* error, const char* reason, const Message* msg);
|
||||||
|
@ -6013,6 +6014,7 @@ YateSIPConnection::YateSIPConnection(Message& msg, const String& uri, const char
|
||||||
filterDebug(m_address);
|
filterDebug(m_address);
|
||||||
m_dialog = *m;
|
m_dialog = *m;
|
||||||
m_dialog.localCSeq = m->getCSeq();
|
m_dialog.localCSeq = m->getCSeq();
|
||||||
|
m_dialog.remoteCSeq = msg.getIntValue("remote_cseq",-1);
|
||||||
if (s_privacy)
|
if (s_privacy)
|
||||||
copyPrivacy(*m,msg);
|
copyPrivacy(*m,msg);
|
||||||
|
|
||||||
|
@ -7529,6 +7531,31 @@ bool YateSIPConnection::msgUpdate(Message& msg)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool YateSIPConnection::msgControl(Message& msg)
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
if (msg[YSTRING("operation")] == YSTRING("query")) {
|
||||||
|
msg.setParam("sip_uri",m_uri);
|
||||||
|
msg.setParam("sip_callid",callid());
|
||||||
|
String tmp;
|
||||||
|
tmp << "<" << m_dialog.localURI << ">";
|
||||||
|
if (m_dialog.localTag)
|
||||||
|
tmp << ";tag=" << m_dialog.localTag;
|
||||||
|
msg.setParam("sip_from",tmp);
|
||||||
|
tmp.clear();
|
||||||
|
tmp << "<" << m_dialog.remoteURI << ">";
|
||||||
|
if (m_dialog.remoteTag)
|
||||||
|
tmp << ";tag=" << m_dialog.remoteTag;
|
||||||
|
msg.setParam("sip_to",tmp);
|
||||||
|
if (m_dialog.localCSeq >= 0)
|
||||||
|
msg.setParam("local_cseq",String(m_dialog.localCSeq));
|
||||||
|
if (m_dialog.remoteCSeq >= 0)
|
||||||
|
msg.setParam("remote_cseq",String(m_dialog.remoteCSeq));
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
return Channel::msgControl(msg) || ok;
|
||||||
|
}
|
||||||
|
|
||||||
void YateSIPConnection::endDisconnect(const Message& msg, bool handled)
|
void YateSIPConnection::endDisconnect(const Message& msg, bool handled)
|
||||||
{
|
{
|
||||||
const String* reason = msg.getParam(YSTRING("reason"));
|
const String* reason = msg.getParam(YSTRING("reason"));
|
||||||
|
|
Loading…
Reference in New Issue