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);
|
||||
}
|
||||
|
||||
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";
|
||||
|
|
|
@ -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"));
|
||||
|
|
Loading…
Reference in New Issue