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:
paulc 2014-06-18 08:38:30 +00:00
parent cfa8ec23c8
commit 303e9abc0e
2 changed files with 42 additions and 6 deletions

View File

@ -292,12 +292,21 @@ void SIPMessage::complete(SIPEngine* engine, const char* user, const char* domai
addHeader("Call-ID",tmp);
}
if (!(isAnswer() || getHeader("CSeq"))) {
String tmp;
if (m_cseq <= 0)
m_cseq = engine->getNextCSeq();
tmp << m_cseq << " " << method;
addHeader("CSeq",tmp);
if (!isAnswer()) {
hl = const_cast<MimeHeaderLine*>(getHeader("CSeq"));
if (hl) {
if (m_cseq <= 0) {
String tmp(*hl);
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";

View File

@ -932,6 +932,7 @@ public:
virtual bool msgText(Message& msg, const char* text);
virtual bool msgDrop(Message& msg, const char* reason);
virtual bool msgUpdate(Message& msg);
virtual bool msgControl(Message& msg);
virtual bool callRouted(Message& msg);
virtual void callAccept(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);
m_dialog = *m;
m_dialog.localCSeq = m->getCSeq();
m_dialog.remoteCSeq = msg.getIntValue("remote_cseq",-1);
if (s_privacy)
copyPrivacy(*m,msg);
@ -7529,6 +7531,31 @@ bool YateSIPConnection::msgUpdate(Message& msg)
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)
{
const String* reason = msg.getParam(YSTRING("reason"));