Пример #1
0
      //---------------------------------------------------------------------
      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;
      }
Пример #2
0
        //---------------------------------------------------------------------
        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;
        }