本文整理汇总了Python中pyndn.encoding.wire_format.WireFormat类的典型用法代码示例。如果您正苦于以下问题:Python WireFormat类的具体用法?Python WireFormat怎么用?Python WireFormat使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WireFormat类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: wireDecode
def wireDecode(self, input, wireFormat = None):
"""
Decode the input using a particular wire format and update this Data.
If wireFormat is the default wire format, also set the
defaultWireEncoding to another pointer to the input.
:param input: The array with the bytes to decode. If input is not a
Blob, then copy the bytes to save the defaultWireEncoding (otherwise
take another pointer to the same Blob).
:type input: A Blob or an array type with int elements
:param wireFormat: (optional) A WireFormat object used to decode this
Data object. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
# If input is a blob, get its buf().
decodeBuffer = input.buf() if isinstance(input, Blob) else input
(signedPortionBeginOffset, signedPortionEndOffset) = \
wireFormat.decodeData(self, decodeBuffer)
if wireFormat == WireFormat.getDefaultWireFormat():
# This is the default wire encoding. In the Blob constructor, set
# copy true, but if input is already a Blob, it won't copy.
self._setDefaultWireEncoding(SignedBlob(
Blob(input, True),
signedPortionBeginOffset, signedPortionEndOffset),
WireFormat.getDefaultWireFormat())
else:
self._setDefaultWireEncoding(SignedBlob(), None)
开发者ID:MAHIS,项目名称:PyNDN2,代码行数:32,代码来源:data.py
示例2: wireEncode
def wireEncode(self, wireFormat = None):
"""
Encode this Data for a particular wire format. If wireFormat is the
default wire format, also set the defaultWireEncoding field to the
encoded result.
:param wireFormat: (optional) A WireFormat object used to encode this
Data object. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
:return: The encoded buffer in a SignedBlob object.
:rtype: SignedBlob
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
if (not self.getDefaultWireEncoding().isNull() and
self.getDefaultWireEncodingFormat() == wireFormat):
# We already have an encoding in the desired format.
return self.getDefaultWireEncoding()
(encoding, signedPortionBeginOffset, signedPortionEndOffset) = \
wireFormat.encodeData(self)
wireEncoding = SignedBlob(
encoding, signedPortionBeginOffset, signedPortionEndOffset)
if wireFormat == WireFormat.getDefaultWireFormat():
# This is the default wire encoding.
self._setDefaultWireEncoding(
wireEncoding, WireFormat.getDefaultWireFormat())
return wireEncoding
开发者ID:MAHIS,项目名称:PyNDN2,代码行数:31,代码来源:data.py
示例3: registerPrefix
def registerPrefix(
self, prefix, onInterest, onRegisterFailed, flags = None,
wireFormat = None):
"""
Register prefix with the connected NDN hub and call onInterest when a
matching interest is received.
:param Name prefix: The Name for the prefix to register which is NOT
copied for this internal Node method. The Face registerPrefix is
reponsible for making a copy for Node to use..
:param onInterest: A function object to call when a matching interest is
received.
:type onInterest: function object
:param onRegisterFailed: A function object to call if failed to retrieve
the connected hub's ID or failed to register the prefix.
:type onRegisterFailed: function object
:param ForwardingFlags flags: The flags for finer control of which
interests are forwardedto the application.
:param wireFormat: A WireFormat object used to encode the message.
:type wireFormat: a subclass of WireFormat
"""
if flags == None:
flags = ForwardingFlags()
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
# Node.expressInterest requires a copy of the prefix.
self._node.registerPrefix(
prefix, onInterest, onRegisterFailed, flags, wireFormat)
开发者ID:cawka,项目名称:PyNDN2,代码行数:30,代码来源:face.py
示例4: generate
def generate(self, interest, keyChain, certificateName, wireFormat = None):
"""
Append a timestamp component and a random value component to interest's
name. This ensures that the timestamp is greater than the timestamp used
in the previous call. Then use keyChain to sign the interest which
appends a SignatureInfo component and a component with the signature
bits. If the interest lifetime is not set, this sets it.
:param Interest interest: The interest whose name is append with
components.
:param KeyChain keyChain: The KeyChain for calling sign.
:param Name certificateName: The certificate name of the key to use for
signing.
:param wireFormat: (optional) A WireFormat object used to encode the
SignatureInfo and to encode interest name for signing. If omitted, use
WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
self.prepareCommandInterestName(interest, wireFormat)
keyChain.sign(interest, certificateName, wireFormat)
if (interest.getInterestLifetimeMilliseconds() == None or
interest.getInterestLifetimeMilliseconds()< 0):
# The caller has not set the interest lifetime, so set it here.
interest.setInterestLifetimeMilliseconds(1000.0)
开发者ID:named-data,项目名称:PyNDN2,代码行数:29,代码来源:command_interest_generator.py
示例5: verifyInterest
def verifyInterest(
self, interest, onVerified, onVerifyFailed, stepCount = 0,
wireFormat = None):
"""
Check the signature on the signed interest and call either onVerify or
onVerifyFailed. We use callback functions because verify may fetch
information to check the signature.
:param Interest interest: The interest with the signature to check.
:param onVerified: If the signature is verified, this calls
onVerified(interest).
:type onVerified: function object
:param onVerifyFailed: If the signature check fails or can't find the
public key, this calls onVerifyFailed(interest).
:type onVerifyFailed: function object
:param int stepCount: (optional) The number of verification steps that
have been done. If omitted, use 0.
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
if self._policyManager.requireVerify(interest):
nextStep = self._policyManager.checkVerificationPolicy(
interest, stepCount, onVerified, onVerifyFailed, wireFormat)
if nextStep != None:
self._face.expressInterest(
nextStep.interest, self._makeOnCertificateData(nextStep),
self._makeOnCertificateInterestTimeout(
nextStep.retry, onVerifyFailed, interest, nextStep))
elif self._policyManager.skipVerifyAndTrust(interest):
onVerified(interest)
else:
onVerifyFailed(interest)
开发者ID:mjycom,项目名称:PyNDN2,代码行数:34,代码来源:key_chain.py
示例6: signWithSha256
def signWithSha256(self, data, wireFormat = None):
"""
Wire encode the Data object, digest it and set its SignatureInfo to a
DigestSha256.
:param Data data: The Data object to be signed. This updates its
signature and wireEncoding.
:param wireFormat: (optional) A WireFormat object used to encode the
input. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
data.setSignature(DigestSha256Signature())
# Encode once to get the signed portion.
encoding = data.wireEncode(wireFormat)
# Get the bytes to sign.
signedPortion = encoding.toSignedBuffer()
if sys.version_info[0] == 2:
# In Python 2.x, we need a str. Use Blob to convert signedPortion.
signedPortion = Blob(signedPortion, False).toRawStr()
# Digest and set the signature.
data.getSignature().setSignature(Blob(SHA256.new(signedPortion).digest()))
# Encode again to include the signature.
data.wireEncode(wireFormat)
开发者ID:mjycom,项目名称:PyNDN2,代码行数:30,代码来源:identity_manager.py
示例7: _signInterest
def _signInterest(self, interest, certificateName, wireFormat = None):
"""
Append a SignatureInfo to the Interest name, sign the name components
and append a final name component with the signature bits.
:param Interest interest: The Interest object to be signed. This appends
name components of SignatureInfo and the signature bits.
:param Name certificateName: The certificate name of the key to use for
signing.
:param wireFormat: (optional) A WireFormat object used to encode the
input. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
# TODO: Handle signature algorithms other than Sha256WithRsa.
signature = Sha256WithRsaSignature()
signature.getKeyLocator().setType(KeyLocatorType.KEYNAME)
signature.getKeyLocator().setKeyName(certificateName.getPrefix(-1))
# Append the encoded SignatureInfo.
interest.getName().append(wireFormat.encodeSignatureInfo(signature))
# Append an empty signature so that the "signedPortion" is correct.
interest.getName().append(Name.Component())
# Encode once to get the signed portion.
encoding = interest.wireEncode(wireFormat)
signedSignature = self.sign(encoding.toSignedBuffer(), certificateName)
# Remove the empty signature and append the real one.
interest.setName(interest.getName().getPrefix(-1).append(
wireFormat.encodeSignatureValue(signedSignature)))
开发者ID:WeiqiJust,项目名称:NDN-total,代码行数:34,代码来源:key_chain.py
示例8: verifyInterestSignature
def verifyInterestSignature(
interest, publicKeyOrCertificate, digestAlgorithm = None, wireFormat = None):
"""
Verify the Interest packet using the public key, where the last two name
components are the SignatureInfo and signature bytes. This does not
check the type of public key or digest algorithm against the type of
SignatureInfo such as Sha256WithRsaSignature.
:param Interest interest: The Interest packet to verify.
:param publicKeyOrCertificate: The object containing the public key, or
the public key DER which is used to make the PublicKey object, or the
certificate containing the public key.
:type publicKeyOrCertificate: Blob, or an object which is the same as
the bytes() operator, or CertificateV2
:param digestAlgorithm: (optional) The digest algorithm. If omitted, use
DigestAlgorithm.SHA256.
:param WireFormat wireFormat: (optional) A WireFormat object used to
encode the Interest packet. If omitted, use
WireFormat.getDefaultWireFormat().
:raises: ValueError for an invalid public key type or digestAlgorithm.
"""
arg3 = digestAlgorithm
arg4 = wireFormat
if type(arg3) is int:
digestAlgorithm = arg3
else:
digestAlgorithm = None
if isinstance(arg3, WireFormat):
wireFormat = arg3
elif isinstance(arg4, WireFormat):
wireFormat = arg4
else:
wireFormat = None
if isinstance(publicKeyOrCertificate, CertificateV2):
try:
publicKey = publicKeyOrCertificate.getPublicKey()
except:
return False
else:
publicKey = publicKeyOrCertificate;
if wireFormat == None:
wireFormat = WireFormat.getDefaultWireFormat()
signature = VerificationHelpers._extractSignature(interest, wireFormat)
if signature == None:
return False
encoding = interest.wireEncode(wireFormat)
return VerificationHelpers.verifySignature(
encoding.toSignedBytes(), signature.getSignature(), publicKey,
digestAlgorithm)
开发者ID:named-data,项目名称:PyNDN2,代码行数:54,代码来源:verification_helpers.py
示例9: wireEncodeV2
def wireEncodeV2(self, wireFormat = None):
"""
Encode this to an EncryptedContent v2 for a particular wire format.
:param wireFormat: (optional) A WireFormat object used to encode this
EncryptedContent. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
:return: The encoded buffer.
:rtype: Blob
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
return wireFormat.encodeEncryptedContentV2(self)
开发者ID:named-data,项目名称:PyNDN2,代码行数:15,代码来源:encrypted_content.py
示例10: wireEncode
def wireEncode(self, wireFormat = None):
"""
Encode this ControlResponse for a particular wire format.
:param wireFormat: (optional) A WireFormat object used to encode this
ControlParameters. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
:return: The encoded buffer.
:rtype: Blob
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
return wireFormat.encodeControlResponse(self)
开发者ID:MAHIS,项目名称:PyNDN2,代码行数:15,代码来源:control_response.py
示例11: generate
def generate(self, interest, keyChain, certificateName, wireFormat = None):
"""
Append a timestamp component and a random value component to interest's
name. This ensures that the timestamp is greater than the timestamp used
in the previous call. Then use keyChain to sign the interest which
appends a SignatureInfo component and a component with the signature
bits. If the interest lifetime is not set, this sets it.
:param Interest interest: The interest whose name is append with
components.
:param KeyChain keyChain: The KeyChain for calling sign.
:param Name certificateName: The certificate name of the key to use for
signing.
:param wireFormat: (optional) A WireFormat object used to encode the
SignatureInfo and to encode interest name for signing. If omitted, use
WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
timestamp = round(Common.getNowMilliseconds())
while timestamp <= self._lastTimestamp:
timestamp += 1.0
# The timestamp is encoded as a TLV nonNegativeInteger.
encoder = TlvEncoder(8)
encoder.writeNonNegativeInteger(int(timestamp))
interest.getName().append(Blob(encoder.getOutput(), False))
# The random value is a TLV nonNegativeInteger too, but we know it is 8
# bytes, so we don't need to call the nonNegativeInteger encoder.
randomBuffer = bytearray(8)
for i in range(len(randomBuffer)):
randomBuffer[i] = _systemRandom.randint(0, 0xff)
interest.getName().append(Blob(randomBuffer, False))
keyChain.sign(interest, certificateName, wireFormat)
if (interest.getInterestLifetimeMilliseconds() == None or
interest.getInterestLifetimeMilliseconds()< 0):
# The caller has not set the interest lifetime, so set it here.
interest.setInterestLifetimeMilliseconds(1000.0)
# We successfully signed the interest, so update the timestamp.
self._lastTimestamp = timestamp
开发者ID:sanchitgupta05,项目名称:PyNDN2,代码行数:47,代码来源:command_interest_generator.py
示例12: checkVerificationPolicy
def checkVerificationPolicy(self, dataOrInterest, stepCount, onVerified, onVerifyFailed, wireFormat=None):
"""
Look in the IdentityStorage for the public key with the name in the
KeyLocator (if available) and use it to verify the data packet or
signed interest. If the public key can't be found, call onVerifyFailed.
:param dataOrInterest: The Data object or interest with the signature to
check.
:type dataOrInterest: Data or Interest
:param int stepCount: The number of verification steps that have been
done, used to track the verification progress.
:param onVerified: If the signature is verified, this calls
onVerified(dataOrInterest).
:type onVerified: function object
:param onVerifyFailed: If the signature check fails, this calls
onVerifyFailed(dataOrInterest).
:type onVerifyFailed: function object
:return: None for no further step for looking up a certificate chain.
:rtype: ValidationRequest
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
if isinstance(dataOrInterest, Data):
data = dataOrInterest
# wireEncode returns the cached encoding if available.
if self._verify(data.getSignature(), data.wireEncode()):
onVerified(data)
else:
onVerifyFailed(data)
elif isinstance(dataOrInterest, Interest):
interest = dataOrInterest
# Decode the last two name components of the signed interest
signature = wireFormat.decodeSignatureInfoAndValue(
interest.getName().get(-2).getValue().buf(), interest.getName().get(-1).getValue().buf()
)
# wireEncode returns the cached encoding if available.
if self._verify(signature, interest.wireEncode()):
onVerified(interest)
else:
onVerifyFailed(interest)
else:
raise RuntimeError("checkVerificationPolicy: unrecognized type for dataOrInterest")
# No more steps, so return a None.
return None
开发者ID:mjycom,项目名称:PyNDN2,代码行数:48,代码来源:self_verify_policy_manager.py
示例13: putData
def putData(self, data, wireFormat = None):
"""
The OnInterest callback calls this to put a Data packet which satisfies
an Interest.
:param Data data: The Data packet which satisfies the interest.
:param WireFormat wireFormat: (optional) A WireFormat object used to
encode the Data packet. If omitted, use
WireFormat.getDefaultWireFormat().
:throws: RuntimeError If the encoded Data packet size exceeds
getMaxNdnPacketSize().
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
self._node.putData(data, wireFormat)
开发者ID:named-data,项目名称:PyNDN2,代码行数:17,代码来源:face.py
示例14: _registerPrefixHelper
def _registerPrefixHelper(
self, registeredPrefixId, prefixCopy, onInterest, onRegisterFailed,
flags = None, wireFormat = None):
"""
This is a protected helper method to do the work of registerPrefix to
resolve the different overloaded forms. The registeredPrefixId is from
getNextEntryId(). This has no return value and can be used in a callback.
"""
if flags == None:
flags = ForwardingFlags()
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
return self._node.registerPrefix(
registeredPrefixId, prefixCopy, onInterest, onRegisterFailed, flags,
wireFormat, self._commandKeyChain, self._commandCertificateName, self)
开发者ID:mjycom,项目名称:PyNDN2,代码行数:17,代码来源:face.py
示例15: wireDecode
def wireDecode(self, input, wireFormat = None):
"""
Decode the input using a particular wire format and update this
ControlResponse.
:param input: The array with the bytes to decode.
:type input: An array type with int elements
:param wireFormat: (optional) A WireFormat object used to decode this
ControlParameters. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
# If input is a blob, get its buf().
decodeBuffer = input.buf() if isinstance(input, Blob) else input
wireFormat.decodeControlResponse(self, decodeBuffer)
开发者ID:MAHIS,项目名称:PyNDN2,代码行数:18,代码来源:control_response.py
示例16: _registerPrefixHelper
def _registerPrefixHelper(
self, registeredPrefixId, prefixCopy, onInterest, onRegisterFailed,
arg5 = None, arg6 = None, arg7 = None):
"""
This is a protected helper method to do the work of registerPrefix to
resolve the different overloaded forms. The registeredPrefixId is from
getNextEntryId(). This has no return value and can be used in a callback.
"""
# arg5, arg6, arg7 may be:
# OnRegisterSuccess, RegistrationOptions, WireFormat
# OnRegisterSuccess, RegistrationOptions, None
# OnRegisterSuccess, WireFormat, None
# OnRegisterSuccess, None, None
# RegistrationOptions, WireFormat, None
# RegistrationOptions, None, None
# WireFormat, None, None
# None, None, None
if isinstance(arg5, collections.Callable):
onRegisterSuccess = arg5
else:
onRegisterSuccess = None
if isinstance(arg5, RegistrationOptions):
registrationOptions = arg5
elif isinstance(arg6, RegistrationOptions):
registrationOptions = arg6
else:
registrationOptions = RegistrationOptions()
if isinstance(arg5, WireFormat):
wireFormat = arg5
elif isinstance(arg6, WireFormat):
wireFormat = arg6
elif isinstance(arg7, WireFormat):
wireFormat = arg7
else:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
return self._node.registerPrefix(
registeredPrefixId, prefixCopy, onInterest, onRegisterFailed,
onRegisterSuccess, registrationOptions, wireFormat, self._commandKeyChain,
self._commandCertificateName, self)
开发者ID:named-data,项目名称:PyNDN2,代码行数:43,代码来源:face.py
示例17: registerPrefix
def registerPrefix(
self, prefix, onInterest, onRegisterFailed, flags = None,
wireFormat = None):
"""
Register prefix with the connected NDN hub and call onInterest when a
matching interest is received. If you have not called
setCommandSigningInfo, this assumes you are connecting to NDNx. If you
have called setCommandSigningInfo, this first sends an NFD registration
request, and if that times out then this sends an NDNx registration
request. If need to register a prefix with NFD, you must first call
setCommandSigningInfo.
:param Name prefix: The Name for the prefix to register which is NOT
copied for this internal Node method. The Face registerPrefix is
reponsible for making a copy for Node to use..
:param onInterest: When an interest is received which matches the name
prefix, this calls
onInterest(prefix, interest, transport, registeredPrefixId). NOTE:
You must not change the prefix object - if you need to change it then
make a copy.
:type onInterest: function object
:param onRegisterFailed: If register prefix fails for any reason, this
calls onRegisterFailed(prefix).
:type onRegisterFailed: function object
:param ForwardingFlags flags: The flags for finer control of which
interests are forwardedto the application.
:param wireFormat: (optional) A WireFormat object used to encode this
ControlParameters. If omitted, use WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
:raises: This raises an exception if setCommandSigningInfo has not been
called to set the KeyChain, etc. for signing the command interest.
"""
if flags == None:
flags = ForwardingFlags()
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
# Node.expressInterest requires a copy of the prefix.
self._node.registerPrefix(
prefix, onInterest, onRegisterFailed, flags, wireFormat,
self._commandKeyChain, self._commandCertificateName)
开发者ID:priestd09,项目名称:PyNDN2,代码行数:42,代码来源:face.py
示例18: makeCommandInterest
def makeCommandInterest(self, interest, wireFormat = None):
"""
Append a timestamp component and a random value component to interest's
name. Then use the keyChain and certificateName from
setCommandSigningInfo to sign the interest. If the interest lifetime is
not set, this sets it.
:param Interest interest: The interest whose name is append with
components.
:param wireFormat: (optional) A WireFormat object used to encode the
SignatureInfo and to encode interest name for signing. If omitted, use
WireFormat.getDefaultWireFormat().
:type wireFormat: A subclass of WireFormat
"""
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
self._node.makeCommandInterest(
interest, self._commandKeyChain, self._commandCertificateName,
wireFormat)
开发者ID:priestd09,项目名称:PyNDN2,代码行数:20,代码来源:face.py
示例19: __init__
def __init__(self, arg1, privateKeyBag = None,
publicKeyEncoding = None, password = None,
digestAlgorithm = DigestAlgorithm.SHA256, wireFormat = None):
if isinstance(arg1, Name):
keyName = arg1
if wireFormat == None:
# Don't use a default argument since getDefaultWireFormat can change.
wireFormat = WireFormat.getDefaultWireFormat()
self._certificate = SafeBag._makeSelfSignedCertificate(
keyName, privateKeyBag, publicKeyEncoding, password,
digestAlgorithm, wireFormat)
self._privateKeyBag = privateKeyBag
elif isinstance(arg1, Data):
# The certificate is supplied.
self._certificate = Data(arg1)
self._privateKeyBag = privateKeyBag
else:
# Assume the first argument is the encoded SafeBag.
self.wireDecode(arg1)
开发者ID:named-data,项目名称:PyNDN2,代码行数:20,代码来源:safe_bag.py
注:本文中的pyndn.encoding.wire_format.WireFormat类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论