// Returns TRUE if the requested state is different from the current state. bool SipPresenceMonitor::setStatus(const Url& aor, const Status value) { if (OsSysLog::willLog(FAC_SIP, PRI_DEBUG)) { UtlString aorString; aor.toString(aorString); OsSysLog::add(FAC_SIP, PRI_DEBUG, "SipPresenceMonitor::setStatus aor = '%s', value = %d %s", aorString.data(), value, (value == StateChangeNotifier::PRESENT ? "PRESENT" : value == StateChangeNotifier::AWAY ? "AWAY" : "UNKNOWN")); } bool result = false; UtlString contact; aor.getUserId(contact); contact += mHostAndPort; // Make the contact be a proper URI by prepending "sip:". contact.prepend("sip:"); // Create a presence event package and store it in the publisher SipPresenceEvent* sipPresenceEvent = new SipPresenceEvent(contact); UtlString id; makeId(id, contact); Tuple* tuple = new Tuple(id.data()); tuple->setStatus(value == StateChangeNotifier::PRESENT ? STATUS_OPEN : STATUS_CLOSED); tuple->setContact(contact, 1.0); sipPresenceEvent->insertTuple(tuple); // Add the SipPresenceEvent object to the presence event list. result = addPresenceEvent(contact, sipPresenceEvent); return result; }
bool SipPresenceMonitor::setStatus(const Url& aor, const Status value) { bool result = false; UtlString contact; aor.getIdentity(contact); // Create a presence event package and store it in the publisher SipPresenceEvent* sipPresenceEvent = new SipPresenceEvent(contact); UtlString id; NetMd5Codec::encode(contact, id); Tuple* tuple = new Tuple(id.data()); if (value == StateChangeNotifier::PRESENT) { tuple->setStatus(STATUS_OPEN); tuple->setContact(contact, 1.0); } else { if (value == StateChangeNotifier::AWAY) { tuple->setStatus(STATUS_CLOSE); tuple->setContact(contact, 1.0); } } sipPresenceEvent->insertTuple(tuple); // Add the SipPresenceEvent object to the subscribe list result = addPresenceEvent(contact, sipPresenceEvent); return result; }