//--------------------------------------------------------------------- bool PeerContactProfile::setPublicProfile(ElementPtr newProfileElement) { AutoRecursiveLock lock(mLock); if (!mDocument) return false; PeerFilesPtr outer = mPeerFiles.lock(); if (!outer) return false; IPeerFilePrivatePtr privatePeer = outer->getPrivate(); if (!privatePeer) return false; try { ElementPtr contactProfileElement = getContactProfileElement(); if (!contactProfileElement) return false; ElementPtr publicElement = contactProfileElement->findFirstChildElement("public"); ElementPtr profileElement; if (publicElement) profileElement = publicElement->findFirstChildElementChecked("profile"); if (!newProfileElement) { // erasing the profile element to clean newProfileElement = Element::create(); newProfileElement->setValue("profile"); } if (profileElement) { profileElement->adoptAsNextSibling(newProfileElement); profileElement->orphan(); } else { if (!publicElement) { publicElement = Element::create(); publicElement->setValue("public"); contactProfileElement->adoptAsFirstChild(publicElement); } publicElement->adoptAsLastChild(newProfileElement); } // upgrade the document version number UINT version = getVersionNumber(); ++version; contactProfileElement->setAttribute("version", Stringize<UINT>(version).string()); if (!isExternal()) { // now this this must be signed privatePeer->signElement(contactProfileElement); } } catch (zsLib::XML::Exceptions::CheckFailed &) { return false; } return true; }
//--------------------------------------------------------------------- DocumentPtr PeerKeepAliveResult::encode() { DocumentPtr ret = IMessageHelper::createDocumentWithRoot(*this); ElementPtr root = ret->getFirstChildElement(); if (hasAttribute(AttributeType_Expires)) { root->adoptAsFirstChild(IMessageHelper::createElementWithText("expires", IHelper::timeToString(mExpires))); } return ret; }
DocumentPtr PeerToPeerPeerIdentifyRequest::encode( message::PeerToPeerPeerIdentifyRequest &msg, IPeerFilesPtr peerFile ) { DocumentPtr ret = IMessageHelper::createDocumentWithRoot(msg); ElementPtr root = ret->getFirstChildElement(); ElementPtr elPb, elP, el; elP = IMessageHelper::createElement("proof"); if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_ProofID)) { IMessageHelper::setAttributeID(elP, msg.mProofID); } elPb = IMessageHelper::createElement("proofBundle"); elPb->adoptAsFirstChild(elP); root->adoptAsFirstChild(elPb); if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_LocationID)) { elP->adoptAsLastChild(IMessageHelper::createElementWithID("location", msg.mLocationID)); } if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_FindSecret)) { elP->adoptAsLastChild(IMessageHelper::createElementWithText("findSecret", msg.mFindSecret)); } if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_OneTimeKey)) { elP->adoptAsLastChild(IMessageHelper::createElementWithID("oneTimeKey", msg.mOneTimeKey)); } if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_Expires)) { elP->adoptAsLastChild(IMessageHelper::createElementWithText("expires", Stringize<time_t>(zsLib::toEpoch(msg.mExpires)))); } if(msg.hasAttribute(message::PeerToPeerPeerIdentifyRequest::AttributeType_UserAgent)) { elP->adoptAsLastChild(IMessageHelper::createElementWithTextAndEntityEncode("userAgent", msg.mUserAgent)); } if(peerFile) { IPeerFilePublicPtr pubPeer = peerFile->getPublic(); if (pubPeer) { ElementPtr pubPeerEl = pubPeer->saveToXML(); if (pubPeerEl) elP->adoptAsLastChild(pubPeerEl); } IPeerFilePrivatePtr privPeer = peerFile->getPrivate(); if (privPeer) { privPeer->signElement(elP); } } return ret; }