Re: [Ekiga-devel-list] Restoring presence in the SIP code
- From: Eugen Dedu <Eugen Dedu pu-pm univ-fcomte fr>
- To: Ekiga development mailing list <ekiga-devel-list gnome org>
- Subject: Re: [Ekiga-devel-list] Restoring presence in the SIP code
- Date: Thu, 23 Sep 2010 14:46:56 +0200
On 23/09/10 14:32, Julien Puydt wrote:
Le 23/09/2010 14:22, Eugen Dedu a écrit :
I do not understand: does the code work or not? If not, could you fix it
(or have you find when the problem is introduced etc.)?
The thing is that opal doesn't seem to call our
OnPresenceInfoReceived/OnDialogInfoReceived methods -- if it were, the
rest looks correct.
And I don't know why opal doesn't call them :-/
Without a patch, OnPresenceInfoReceived (maybe OnDialogInfoReceived too)
is not called. With the patch, it is called (I have tested it). Have
you patched ekiga, as I said in the e-mail attached (in French)?
--
Eugen
--- Begin Message ---
- From: Eugen Dedu <Eugen Dedu pu-pm univ-fcomte fr>
- To: Damien Sandras <dsandras seconix com>, Julien Puydt <jpuydt free fr>
- Subject: Présence
- Date: Sat, 14 Aug 2010 18:38:28 +0200
Bonjour les codeurs,
Le dernier bastion pour une release unstable et la présence.
Grâce à la réponse de Robert, j'ai réglé, dans une certaine mesure, le
problème de présence dans master. En fait, NOTIFY présence marche
maintenant (le client répond OK), mais le NOTIFY dialog;sla ne marche pas :
2010/08/14 12:34:27.845 0:03.470 Opal Liste...0x55f91710 SIPPres
NOTIFY contains unsupported Content-Type "", expecting
"application/dialog-info+xml"
Est-ce que le NOTIFY dialog;sla est important ? Si oui, je m'arrête ici
avec ce problème, je n'arrive pas à le résoudre (à moins qu'il ne soit
pas une erreur dans opal, ou que ce soit fait exprès).
Si non, en dépit du fait que l'échange de présence fonctionne, le roster
n'est pas actualisé (le bonhomme ne devient pas vert). Je soupçonne
fortement un problème de raffraîchissement du roster (un signal qui
n'est pas triggered ?!) Julien, pourrais-tu y jeter un coup d'œil ?
Pour tester, il faut régler la présence comme suit :
- dans lib/engine/components/opal/sip-endpoint.cpp il faut ajouter
#include <ptclib/pxml.h>
- dans le même fichier il faut ajouter à la fin par ex. le code du
fichier joint
ensuite lancer ekiga et voir pourquoi le roster ne se raffraîchit pas.
--
Eugen
class SIPPresenceEventPackageHandler : public SIPEventPackageHandler
{
virtual PCaselessString GetContentType() const
{
return "application/pidf+xml";
}
virtual bool OnReceivedNOTIFY(SIPHandler & handler, SIP_PDU & request)
{
SIPURL from = request.GetMIME().GetFrom();
from.Sanitise(SIPURL::ExternalURI);
SIPURL to = request.GetMIME().GetTo();
to.Sanitise(SIPURL::ExternalURI);
SIPPresenceInfo info;
info.m_entity = from.AsQuotedString();
info.m_target = to.AsQuotedString();
// Check for empty body, if so then is OK, just a ping ...
if (request.GetEntityBody().IsEmpty()) {
handler.GetEndPoint().OnPresenceInfoReceived(info);
return true;
}
PXML xml;
if (!xml.Load(request.GetEntityBody()))
return false;
PXMLElement * rootElement = xml.GetRootElement();
if (rootElement == NULL || rootElement->GetName() != "presence")
return false;
PXMLElement * tupleElement = rootElement->GetElement("tuple");
if (tupleElement == NULL)
return false;
PXMLElement * statusElement = tupleElement->GetElement("status");
if (statusElement == NULL)
return false;
PXMLElement * basicElement = statusElement->GetElement("basic");
if (basicElement != NULL) {
PCaselessString value = basicElement->GetData();
if (value == "open")
info.m_state = SIPPresenceInfo::Available;
else if (value == "closed")
info.m_state = SIPPresenceInfo::Unavailable;
}
PXMLElement * noteElement = statusElement->GetElement("note");
if (!noteElement)
noteElement = rootElement->GetElement("note");
if (!noteElement)
noteElement = tupleElement->GetElement("note");
if (noteElement)
info.m_note = noteElement->GetData();
PXMLElement * contactElement = tupleElement->GetElement("contact");
if (contactElement != NULL)
info.m_contact = contactElement->GetData();
handler.GetEndPoint().OnPresenceInfoReceived(info);
return true;
}
};
static SIPEventPackageFactory::Worker<SIPPresenceEventPackageHandler> presenceEventPackageHandler(SIPSubscribe::Presence);
--- End Message ---
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]