示例#1
0
    public void expressHintInterest(Name.Component excludeComp = null)
    {
        Name hintName = new Name(prefix);

        hintName.append(this.getStartTimeComponent()).append(producerNameComponents.trackHint);
        Interest hintInterest = new Interest(hintName);



        if (excludeComp != null)
        {
            Exclude exclude = new Exclude();
            exclude.appendAny();
            //		Debug.Log ("   excluding hint num " + excludeComp.toNumber ());
            exclude.appendComponent(excludeComp);
            hintInterest.setExclude(exclude);
        }

        hintInterest.setMustBeFresh(true);
        hintInterest.setInterestLifetimeMilliseconds(config.defaultHintLifetime);
        hintInterest.setChildSelector(1);
        HintHandler handler = new HintHandler(this);

        FaceSingleton.getFace().expressInterest(hintInterest, handler, handler);
    }
示例#2
0
    public void startOptConsumer()
    {
        Interest initialInterest = new Interest(new Name(optPrefix));

        initialInterest.setMustBeFresh(true);
        initialInterest.setInterestLifetimeMilliseconds(defaultInitialLifetime);
        // for initial interest, the rightMostChild is preferred
        initialInterest.setChildSelector(1);

        face_.expressInterest(initialInterest, initialHandler_, initialHandler_);
    }
示例#3
0
        onContentSet
            (Namespace nameSpace, Namespace contentNamespace, long callbackId)
        {
            if (!(contentNamespace.getName().size() >= namespace_.getName().size() + 1 &&
                  contentNamespace.getName()[namespace_.getName().size()].isSegment()))
            {
                // Not a segment, ignore.
                return;
            }

            // TODO: Use the Namespace mechanism to validate the Data packet.

            var metaInfo = contentNamespace.getData().getMetaInfo();

            if (metaInfo.getFinalBlockId().getValue().size() > 0 &&
                metaInfo.getFinalBlockId().isSegment())
            {
                finalSegmentNumber_ = metaInfo.getFinalBlockId().toSegment();
            }

            // Report as many segments as possible where the node already has content.
            while (true)
            {
                var nextSegmentNumber = maxRetrievedSegmentNumber_ + 1;
                var nextSegment       = debugGetRightmostLeaf
                                            (namespace_[Name.Component.fromSegment(nextSegmentNumber)]);
                if (nextSegment.getContent() == null)
                {
                    break;
                }

                maxRetrievedSegmentNumber_ = nextSegmentNumber;
                fireOnSegment(nextSegment);

                if (finalSegmentNumber_ >= 0 && nextSegmentNumber == finalSegmentNumber_)
                {
                    // Finished.
                    fireOnSegment(null);
                    return;
                }
            }

            if (finalSegmentNumber_ < 0 && !didRequestFinalSegment_)
            {
                didRequestFinalSegment_ = true;
                // Try to determine the final segment now.
                var interestTemplate = new Interest();
                interestTemplate.setInterestLifetimeMilliseconds(4000.0);
                interestTemplate.setChildSelector(1);
                namespace_.expressInterest(interestTemplate);
            }

            requestNewSegments(interestPipelineSize_);
        }
示例#4
0
    void expressInitialInterest()
    {
        Debug.Log("expressInitialInterest: start");
        Interest initialInterest = new Interest(this.prefix);

        initialInterest.setMustBeFresh(true);
        initialInterest.setInterestLifetimeMilliseconds(config.defaultInitialLifetime);
        // for initial interest, the rightMostChild is preferred
        initialInterest.setChildSelector(1);

        InitialDataHandler handler = new InitialDataHandler(this);

        Debug.Log("expressInitialInterest: " + initialInterest.toUri());
        this.face.expressInterest(initialInterest, handler, handler);
    }
示例#5
0
        private void fetchFirstSegment(Interest baseInterest)
        {
            Interest interest = new Interest(baseInterest);

            interest.setChildSelector(1);
            interest.setMustBeFresh(true);

            try {
                face_.expressInterest(interest, this, this);
            } catch (IOException ex) {
                try {
                    onError_.onError(net.named_data.jndn.util.SegmentFetcher.ErrorCode.IO_ERROR,
                                     "I/O error fetching the first segment " + ex);
                } catch (Exception exception) {
                    logger_.log(ILOG.J2CsMapping.Util.Logging.Level.SEVERE, "Error in onError", exception);
                }
            }
        }
示例#6
0
        private void fetchNextSegment(Interest originalInterest_0, Name dataName,
                                      long segment)
        {
            // Start with the original Interest to preserve any special selectors.
            Interest interest = new Interest(originalInterest_0);

            // Changing a field clears the nonce so that the library will generate a new one.
            interest.setChildSelector(0);
            interest.setMustBeFresh(false);
            interest.setName(dataName.getPrefix(-1).appendSegment(segment));
            try {
                face_.expressInterest(interest, this, this);
            } catch (IOException ex) {
                try {
                    onError_.onError(net.named_data.jndn.util.SegmentFetcher.ErrorCode.IO_ERROR,
                                     "I/O error fetching the next segment " + ex);
                } catch (Exception exception) {
                    logger_.log(ILOG.J2CsMapping.Util.Logging.Level.SEVERE, "Error in onError", exception);
                }
            }
        }
示例#7
0
    //fetchTrack
    public void expressInterestForTrack(string trackID, Name.Component excludeComp = null)
    {
        Name trackName = new Name(prefix);

        trackName.append(startTimeComponent).append(producerNameComponents.tracks).append(trackID);           //.append ("0");
        Interest trackInterest = new Interest(trackName);

        if (excludeComp != null)
        {
            Exclude exclude = new Exclude();
            exclude.appendAny();
            exclude.appendComponent(excludeComp);
            trackInterest.setExclude(exclude);
        }


        trackInterest.setMustBeFresh(true);
        trackInterest.setChildSelector(1);
        TrackHandler handler = new TrackHandler(this);

        FaceSingleton.getFace().expressInterest(trackInterest, handler, handler);
    }
示例#8
0
        static void Main(string[] args)
        {
            var interest = new Interest();

            interest.wireDecode(new Blob(TlvInterest));
            Console.Out.WriteLine("Interest:");
            dumpInterest(interest);

            // Set the name again to clear the cached encoding so we encode again.
            interest.setName(interest.getName());
            var encoding = interest.wireEncode();

            Console.Out.WriteLine("");
            Console.Out.WriteLine("Re-encoded interest " + encoding.toHex());

            var reDecodedInterest = new Interest();

            reDecodedInterest.wireDecode(encoding);
            Console.Out.WriteLine("");
            Console.Out.WriteLine("Re-decoded Interest:");
            dumpInterest(reDecodedInterest);

            var freshInterest = new Interest(new Name("/ndn/abc"));

            freshInterest.setMinSuffixComponents(4);
            freshInterest.setMaxSuffixComponents(6);
            freshInterest.setInterestLifetimeMilliseconds(30000);
            freshInterest.setChildSelector(1);
            freshInterest.setMustBeFresh(true);
            freshInterest.getKeyLocator().setType(KeyLocatorType.KEY_LOCATOR_DIGEST);
            freshInterest.getKeyLocator().setKeyData
                (new Blob(new byte[] {
                0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
                0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
            }));
            freshInterest.getExclude().appendComponent(new Name("abc").get(0)).appendAny();

            var identityStorage   = new MemoryIdentityStorage();
            var privateKeyStorage = new MemoryPrivateKeyStorage();
            var keyChain          = new KeyChain
                                        (new IdentityManager(identityStorage, privateKeyStorage),
                                        new SelfVerifyPolicyManager(identityStorage));

            // Initialize the storage.
            var keyName         = new Name("/testname/DSK-123");
            var certificateName = keyName.getSubName(0, keyName.size() - 1).append
                                      ("KEY").append(keyName.get(-1)).append("ID-CERT").append("0");

            identityStorage.addKey(keyName, KeyType.RSA, new Blob(DEFAULT_RSA_PUBLIC_KEY_DER));
            privateKeyStorage.setKeyPairForKeyName
                (keyName, KeyType.RSA, new ByteBuffer(DEFAULT_RSA_PUBLIC_KEY_DER),
                new ByteBuffer(DEFAULT_RSA_PRIVATE_KEY_DER));

            // Make a Face just so that we can sign the interest.
            var face = new Face("localhost");

            face.setCommandSigningInfo(keyChain, certificateName);
            face.makeCommandInterest(freshInterest);

            Interest reDecodedFreshInterest = new Interest();

            reDecodedFreshInterest.wireDecode(freshInterest.wireEncode());
            Console.Out.WriteLine("");
            Console.Out.WriteLine("Re-decoded fresh Interest:");
            dumpInterest(reDecodedFreshInterest);

            VerifyCallbacks callbacks = new VerifyCallbacks("Freshly-signed Interest");

            keyChain.verifyInterest(reDecodedFreshInterest, callbacks, callbacks);
        }