The jingle module can now add entity caps children to already built presence elements for users in serviced domains. Allow overriding the resource.notify handler priority from config.

git-svn-id: http://voip.null.ro/svn/yate@3357 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
marian 2010-05-31 14:38:14 +00:00
parent 37df8e12b0
commit 3578106230
2 changed files with 31 additions and 4 deletions

View File

@ -87,6 +87,8 @@
; If enabled, it's value must be greater then stanza_timeout
;ping_interval=300000
; resource.notify: integer: Override the priority of module's resource.notify message handler
;resource.notify=
[codecs]
; This section allows to individually enable or disable the codecs

View File

@ -364,7 +364,7 @@ public:
ResSubscribe = 10, // handleResSubscribe()
UserNotify = -5, // handleUserNotify()
};
YJGMessageHandler(int handler);
YJGMessageHandler(int handler, int prio);
protected:
virtual bool received(Message& msg);
private:
@ -2997,8 +2997,8 @@ void YJGTransfer::run()
/*
* JBMessageHandler
*/
YJGMessageHandler::YJGMessageHandler(int handler)
: MessageHandler(lookup(handler,s_msgHandler),handler < 0 ? 100 : handler),
YJGMessageHandler::YJGMessageHandler(int handler, int prio)
: MessageHandler(lookup(handler,s_msgHandler),prio),
m_handler(handler)
{
}
@ -3097,7 +3097,10 @@ void YJGDriver::initialize()
for (const TokenDict* d = s_msgHandler; d->token; d++) {
if (!Engine::clientMode() && d->value == YJGMessageHandler::UserNotify)
continue;
YJGMessageHandler* h = new YJGMessageHandler(d->value);
int prio = d->value < 0 ? 100 : d->value;
if (d->value == YJGMessageHandler::ResNotify)
prio = sect->getIntValue(d->token,prio);
YJGMessageHandler* h = new YJGMessageHandler(d->value,prio);
Engine::install(h);
m_handlers.append(h);
}
@ -3578,6 +3581,28 @@ bool YJGDriver::handleResNotify(Message& msg)
bool online = (*oper == "update" || *oper == "online");
if (online || *oper == "delete" || *oper == "offline") {
JabberID remote(msg.getValue("contact"));
// Add jingle caps for serviced domains if requested
if (msg.getBoolValue("addjinglecaps") && handleDomain(remote.domain())) {
XmlElement* xml = YOBJECT(XmlElement,msg.getParam("xml"));
String* data = !xml ? msg.getParam("data") : 0;
XmlElement* dataXml = data ? XMPPUtils::getXml(*data) : 0;
if (xml || dataXml) {
XmlElement* target = xml ? xml : dataXml;
// Add entity caps if not already there
if (!XMPPUtils::findFirstChild(*target,XmlTag::EntityCapsTag,
XMPPNamespace::EntityCaps)) {
target->addChild(new XmlElement(*m_entityCaps));
target->addChild(XMPPUtils::createEntityCapsGTalkV1());
// Restore the data parameter
if (dataXml) {
data->clear();
dataXml->toString(*data);
}
msg.clearParam("addjinglecaps");
}
TelEngine::destruct(dataXml);
}
}
JabberID local;
if (remote)
remote.resource(msg.getValue("instance"));