[Opalvoip-svn] SF.net SVN: opalvoip:[24762] opal/branches/v3_8
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2010-09-30 01:26:25
|
Revision: 24762 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=24762&view=rev Author: rjongbloed Date: 2010-09-30 01:26:18 +0000 (Thu, 30 Sep 2010) Log Message: ----------- Restored the old presence packet handler for backward compatibility reasons. Modified Paths: -------------- opal/branches/v3_8/src/sip/handlers.cxx Property Changed: ---------------- opal/branches/v3_8/ Property changes on: opal/branches/v3_8 ___________________________________________________________________ Modified: svn:mergeinfo - /opal/branches/Sirius_A:23371,23374,23549,23560,23770 /opal/branches/Sirius_B:24604,24683,24685 /opal/branches/autoconf:20594-21001 /opal/branches/csoutheren/LalandeBranch1:23412-23413,23415,23424,23510,23516,23553,23577,23607,23669,23724,23742-23744,23747-23748,23755,23758,23780,23788,23848,23850,23856 /opal/branches/rjongbloed/BarnardPlus:20584,20656,20749,20751,20756,20762,20786,20789,20814,20820,20829,20831,20841,20843,20923,20927,20938,22016-22017,22518,22582,22941 /opal/branches/v3_2:21143,21220,21227,21253,21455 /opal/branches/v3_4:21060,21062,21088,21092,21111,21113,21115,21119,21143,21148,21151-21152,21155,21158,21184,21188,21253,21265-21266,21283-21284,21298,21300,21303,21307,21309,21311,21327,21331,21333,21359,21367,21369,21488,21556,21564-21565,21568,21570,21620,21625,21631,21748,21751,21756,21759,21761,21767,21770,22246,23044,23140,23143,23286 /opal/branches/v3_6:22169,22178,22184,22186,22197,22204,22216,22251,22253,22255,22258,22260,22291,22296,22300,22306,22308,22313,22319,22336,22353,22358,22436,22447,22449,22497,22511,22517,22519-22521,22527,22536,22538,22589,22596,22599,22617,22620,22622,22630,22640,22655,22675,22682,22726-22728,22730,22733,22738,22745-22746,22800,22820-22821,22842,22844-22845,22851,22853,22889,22896,22902,22904,22906,22918,22924,22928,22946,22965,22967,22976,22978,22980,22982,22994,23028,23123,23125-23126,23128,23157,23165,23173,23175,23183,23294,23341,23465,23467,23474,23521,23829,24346 /opal/trunk:22308,24052,24056,24103,24181,24189,24191,24193,24195,24197,24206,24211,24229,24233,24238,24240,24264,24276,24279,24282,24301,24397,24402,24469,24475,24615,24622,24631,24671-24672,24740,24742 /ptlib/trunk:20820 + /opal/branches/Sirius_A:23371,23374,23549,23560,23770 /opal/branches/Sirius_B:24604,24683,24685 /opal/branches/autoconf:20594-21001 /opal/branches/csoutheren/LalandeBranch1:23412-23413,23415,23424,23510,23516,23553,23577,23607,23669,23724,23742-23744,23747-23748,23755,23758,23780,23788,23848,23850,23856 /opal/branches/rjongbloed/BarnardPlus:20584,20656,20749,20751,20756,20762,20786,20789,20814,20820,20829,20831,20841,20843,20923,20927,20938,22016-22017,22518,22582,22941 /opal/branches/v3_2:21143,21220,21227,21253,21455 /opal/branches/v3_4:21060,21062,21088,21092,21111,21113,21115,21119,21143,21148,21151-21152,21155,21158,21184,21188,21253,21265-21266,21283-21284,21298,21300,21303,21307,21309,21311,21327,21331,21333,21359,21367,21369,21488,21556,21564-21565,21568,21570,21620,21625,21631,21748,21751,21756,21759,21761,21767,21770,22246,23044,23140,23143,23286 /opal/branches/v3_6:22169,22178,22184,22186,22197,22204,22216,22251,22253,22255,22258,22260,22291,22296,22300,22306,22308,22313,22319,22336,22353,22358,22436,22447,22449,22497,22511,22517,22519-22521,22527,22536,22538,22589,22596,22599,22617,22620,22622,22630,22640,22655,22675,22682,22726-22728,22730,22733,22738,22745-22746,22800,22820-22821,22842,22844-22845,22851,22853,22889,22896,22902,22904,22906,22918,22924,22928,22946,22965,22967,22976,22978,22980,22982,22994,23028,23123,23125-23126,23128,23157,23165,23173,23175,23183,23294,23341,23465,23467,23474,23521,23829,24346 /opal/trunk:22308,24052,24056,24103,24181,24189,24191,24193,24195,24197,24206,24211,24229,24233,24238,24240,24264,24276,24279,24282,24301,24397,24402,24469,24475,24615,24622,24631,24671-24672,24739-24740,24742 /ptlib/trunk:20820 Modified: opal/branches/v3_8/src/sip/handlers.cxx =================================================================== --- opal/branches/v3_8/src/sip/handlers.cxx 2010-09-29 09:23:37 UTC (rev 24761) +++ opal/branches/v3_8/src/sip/handlers.cxx 2010-09-30 01:26:18 UTC (rev 24762) @@ -1214,6 +1214,78 @@ #if P_EXPAT +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.AsString(); + info.m_target = to.AsString(); + + // 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::NoPresence; + else + info.m_state = SIPPresenceInfo::Unchanged; + } + + 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); + + static void ParseParticipant(PXMLElement * participantElement, SIPDialogNotification::Participant & participant) { if (participantElement == NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |