def encodeForwardingEntry(self, forwardingEntry): """ Encode forwardingEntry and return the encoding. :param forwardingEntry: The ForwardingEntry object to encode. :type forwardingEntry: ForwardingEntry :return: A Blob containing the encoding. :rtype: Blob """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.FreshnessPeriod, forwardingEntry.getFreshnessPeriod()) encoder.writeNonNegativeIntegerTlv( Tlv.ForwardingFlags, forwardingEntry.getForwardingFlags().getForwardingEntryFlags()) encoder.writeOptionalNonNegativeIntegerTlv(Tlv.FaceID, forwardingEntry.getFaceId()) self._encodeName(forwardingEntry.getPrefix(), encoder) if (forwardingEntry.getAction() != None and len(forwardingEntry.getAction()) > 0): # Convert str to a bytearray. encoder.writeBlobTlv( Tlv.Action, bytearray(forwardingEntry.getAction(), 'ascii')) encoder.writeTypeAndLength(Tlv.ForwardingEntry, len(encoder) - saveLength) return Blob(encoder.getOutput(), False)
def encodeForwardingEntry(self, forwardingEntry): """ Encode forwardingEntry and return the encoding. :param forwardingEntry: The ForwardingEntry object to encode. :type forwardingEntry: ForwardingEntry :return: A Blob containing the encoding. :rtype: Blob """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.FreshnessPeriod, forwardingEntry.getFreshnessPeriod()) encoder.writeNonNegativeIntegerTlv( Tlv.ForwardingFlags, forwardingEntry.getForwardingFlags().getForwardingEntryFlags()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.FaceID, forwardingEntry.getFaceId()) self._encodeName(forwardingEntry.getPrefix(), encoder) if (forwardingEntry.getAction() != None and len(forwardingEntry.getAction()) > 0): # Convert str to a bytearray. encoder.writeBlobTlv( Tlv.Action, bytearray(forwardingEntry.getAction(), 'ascii')) encoder.writeTypeAndLength(Tlv.ForwardingEntry, len(encoder) - saveLength) return Blob(encoder.getOutput(), False)
def encodeInterest(self, interest): """ Encode interest in NDN-TLV and return the encoding. :param Interest interest: The Interest object to encode. :return: A Blob containing the encoding. :rtype: Blob """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.InterestLifetime, interest.getInterestLifetimeMilliseconds()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.Scope, interest.getScope()) # Encode the Nonce as 4 bytes. if interest.getNonce().size() == 0: # This is the most common case. Generate a nonce. nonce = bytearray(4) for i in range(4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() < 4: nonce = bytearray(4) # Copy existing nonce bytes. nonce[:interest.getNonce().size()] = interest.getNonce().buf() # Generate random bytes for remaining bytes in the nonce. for i in range(interest.getNonce().size(), 4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() == 4: # Use the nonce as-is. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()) else: # Truncate. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()[:4]) self._encodeSelectors(interest, encoder) self._encodeName(interest.getName(), encoder) encoder.writeTypeAndLength(Tlv.Interest, len(encoder) - saveLength) return Blob(encoder.getOutput(), False)
def encodeControlParameters(self, controlParameters): """ Encode controlParameters and return the encoding. :param controlParameters: The ControlParameters object to encode. :type controlParameters: ControlParameters :return: A Blob containing the encoding. :rtype: Blob """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.ControlParameters_ExpirationPeriod, controlParameters.getExpirationPeriod()) if controlParameters.getStrategy().size() > 0: strategySaveLength = len(encoder) self._encodeName(controlParameters.getStrategy(), encoder) encoder.writeTypeAndLength(Tlv.ControlParameters_Strategy, len(encoder) - strategySaveLength) flags = controlParameters.getForwardingFlags().getNfdForwardingFlags() if (flags != ForwardingFlags().getNfdForwardingFlags()): # The flags are not the default value. encoder.writeNonNegativeIntegerTlv(Tlv.ControlParameters_Flags, flags) encoder.writeOptionalNonNegativeIntegerTlv(Tlv.ControlParameters_Cost, controlParameters.getCost()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_Origin, controlParameters.getOrigin()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_LocalControlFeature, controlParameters.getLocalControlFeature()) if len(controlParameters.getUri()) != 0: encoder.writeBlobTlv(Tlv.ControlParameters_Uri, Blob(controlParameters.getUri()).buf()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_FaceId, controlParameters.getFaceId()) if controlParameters.getName() != None: self._encodeName(controlParameters.getName(), encoder) encoder.writeTypeAndLength(Tlv.ControlParameters_ControlParameters, len(encoder) - saveLength) return Blob(encoder.getOutput(), False)
def encodeControlParameters(self, controlParameters): """ Encode controlParameters and return the encoding. :param controlParameters: The ControlParameters object to encode. :type controlParameters: ControlParameters :return: A Blob containing the encoding. :rtype: Blob """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.ControlParameters_ExpirationPeriod, controlParameters.getExpirationPeriod()) # TODO: Encode Strategy. flags = controlParameters.getForwardingFlags().getNfdForwardingFlags() if (flags != ForwardingFlags().getNfdForwardingFlags()): # The flags are not the default value. encoder.writeNonNegativeIntegerTlv( Tlv.ControlParameters_Flags, flags) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_Cost, controlParameters.getCost()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_Origin, controlParameters.getOrigin()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_LocalControlFeature, controlParameters.getLocalControlFeature()) # TODO: Encode Uri. encoder.writeOptionalNonNegativeIntegerTlv( Tlv.ControlParameters_FaceId, controlParameters.getFaceId()) if controlParameters.getName().size() > 0: self._encodeName(controlParameters.getName(), encoder) encoder.writeTypeAndLength(Tlv.ControlParameters_ControlParameters, len(encoder) - saveLength) return Blob(encoder.getOutput(), False)
def encodeInterest(self, interest): """ Encode interest in NDN-TLV and return the encoding. :param Interest interest: The Interest object to encode. :return: A Tuple of (encoding, signedPortionBeginOffset, signedPortionEndOffset) where encoding is a Blob containing the encoding, signedPortionBeginOffset is the offset in the encoding of the beginning of the signed portion, and signedPortionEndOffset is the offset in the encoding of the end of the signed portion. The signed portion starts from the first name component and ends just before the final name component (which is assumed to be a signature for a signed interest). :rtype: (Blob, int, int) """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.InterestLifetime, interest.getInterestLifetimeMilliseconds()) encoder.writeOptionalNonNegativeIntegerTlv(Tlv.Scope, interest.getScope()) # Encode the Nonce as 4 bytes. if interest.getNonce().size() == 0: # This is the most common case. Generate a nonce. nonce = bytearray(4) for i in range(4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() < 4: nonce = bytearray(4) # Copy existing nonce bytes. nonce[:interest.getNonce().size()] = interest.getNonce().buf() # Generate random bytes for remaining bytes in the nonce. for i in range(interest.getNonce().size(), 4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() == 4: # Use the nonce as-is. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()) else: # Truncate. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()[:4]) self._encodeSelectors(interest, encoder) (tempSignedPortionBeginOffset, tempSignedPortionEndOffset) = \ self._encodeName(interest.getName(), encoder) signedPortionBeginOffsetFromBack = (len(encoder) - tempSignedPortionBeginOffset) signedPortionEndOffsetFromBack = (len(encoder) - tempSignedPortionEndOffset) encoder.writeTypeAndLength(Tlv.Interest, len(encoder) - saveLength) signedPortionBeginOffset = (len(encoder) - signedPortionBeginOffsetFromBack) signedPortionEndOffset = len(encoder) - signedPortionEndOffsetFromBack return (Blob(encoder.getOutput(), False), signedPortionBeginOffset, signedPortionEndOffset)
def encodeInterest(self, interest): """ Encode interest in NDN-TLV and return the encoding. :param Interest interest: The Interest object to encode. :return: A Tuple of (encoding, signedPortionBeginOffset, signedPortionEndOffset) where encoding is a Blob containing the encoding, signedPortionBeginOffset is the offset in the encoding of the beginning of the signed portion, and signedPortionEndOffset is the offset in the encoding of the end of the signed portion. The signed portion starts from the first name component and ends just before the final name component (which is assumed to be a signature for a signed interest). :rtype: (Blob, int, int) """ encoder = TlvEncoder(256) saveLength = len(encoder) # Encode backwards. encoder.writeOptionalNonNegativeIntegerTlvFromFloat( Tlv.InterestLifetime, interest.getInterestLifetimeMilliseconds()) encoder.writeOptionalNonNegativeIntegerTlv( Tlv.Scope, interest.getScope()) # Encode the Nonce as 4 bytes. if interest.getNonce().size() == 0: # This is the most common case. Generate a nonce. nonce = bytearray(4) for i in range(4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() < 4: nonce = bytearray(4) # Copy existing nonce bytes. nonce[:interest.getNonce().size()] = interest.getNonce().buf() # Generate random bytes for remaining bytes in the nonce. for i in range(interest.getNonce().size(), 4): nonce[i] = _systemRandom.randint(0, 0xff) encoder.writeBlobTlv(Tlv.Nonce, nonce) elif interest.getNonce().size() == 4: # Use the nonce as-is. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()) else: # Truncate. encoder.writeBlobTlv(Tlv.Nonce, interest.getNonce().buf()[:4]) self._encodeSelectors(interest, encoder) (tempSignedPortionBeginOffset, tempSignedPortionEndOffset) = \ self._encodeName(interest.getName(), encoder) signedPortionBeginOffsetFromBack = (len(encoder) - tempSignedPortionBeginOffset) signedPortionEndOffsetFromBack = (len(encoder) - tempSignedPortionEndOffset) encoder.writeTypeAndLength(Tlv.Interest, len(encoder) - saveLength) signedPortionBeginOffset = (len(encoder) - signedPortionBeginOffsetFromBack) signedPortionEndOffset = len(encoder) - signedPortionEndOffsetFromBack return (Blob(encoder.getOutput(), False), signedPortionBeginOffset, signedPortionEndOffset)