示例#1
0
        /// <summary>
        /// Create a deep copy of the given data object, including a clone of the
        /// signature object.
        /// </summary>
        ///
        /// <param name="data">The data object to copy.</param>
        public Data(Data data)
        {
            this.signature_ = new ChangeCounter(
                new Sha256WithRsaSignature());
            this.name_                = new ChangeCounter(new Name());
            this.metaInfo_            = new ChangeCounter(new MetaInfo());
            this.content_             = new Blob();
            this.lpPacket_            = null;
            this.defaultWireEncoding_ = new SignedBlob();
            this.defaultFullName_     = new Name();
            this.getDefaultWireEncodingChangeCount_ = 0;
            this.changeCount_ = 0;
            try {
                signature_
                .set((data.signature_ == null) ? (net.named_data.jndn.util.ChangeCountable)(new Sha256WithRsaSignature())
                                                                : (net.named_data.jndn.util.ChangeCountable)((Signature)data.getSignature().Clone()));
            } catch (Exception e) {
                // We don't expect this to happen, so just treat it as if we got a null pointer.
                throw new NullReferenceException(
                          "Data.setSignature: unexpected exception in clone(): "
                          + e.Message);
            }

            name_.set(new Name(data.getName()));
            metaInfo_.set(new MetaInfo(data.getMetaInfo()));
            content_ = data.content_;
            setDefaultWireEncoding(data.getDefaultWireEncoding(), null);
            defaultFullName_ = new Name(data.defaultFullName_);
        }