MCPcopy Index your code
hub / github.com/Bitmessage/PyBitmessage / bm_command_object

Method bm_command_object

src/network/bmproto.py:330–371  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

328 return self._command_inv(True)
329
330 def bm_command_object(self):
331 objectOffset = self.payloadOffset
332 nonce, expiresTime, objectType, version, streamNumber = self.decode_payload_content("QQIvv")
333 self.object = BMObject(nonce, expiresTime, objectType, version, streamNumber, self.payload, self.payloadOffset)
334
335 if len(self.payload) - self.payloadOffset > BMProto.maxObjectPayloadSize:
336 logger.info('The payload length of this object is too large (%s bytes). Ignoring it.' % len(self.payload) - self.payloadOffset)
337 raise BMProtoExcessiveDataError()
338
339 try:
340 self.object.checkProofOfWorkSufficient()
341 self.object.checkEOLSanity()
342 self.object.checkAlreadyHave()
343 except (BMObjectExpiredError, BMObjectAlreadyHaveError, BMObjectInsufficientPOWError) as e:
344 BMProto.stopDownloadingObject(self.object.inventoryHash)
345 raise e
346 try:
347 self.object.checkStream()
348 except (BMObjectUnwantedStreamError,) as e:
349 BMProto.stopDownloadingObject(self.object.inventoryHash, BMConfigParser().get("inventory", "acceptmismatch"))
350 if not BMConfigParser().get("inventory", "acceptmismatch"):
351 raise e
352
353 try:
354 self.object.checkObjectByType()
355 objectProcessorQueue.put((self.object.objectType, buffer(self.object.data)))
356 except BMObjectInvalidError as e:
357 BMProto.stopDownloadingObject(self.object.inventoryHash, True)
358 else:
359 try:
360 del state.missingObjects[self.object.inventoryHash]
361 except KeyError:
362 pass
363
364 if self.object.inventoryHash in Inventory() and Dandelion().hasHash(self.object.inventoryHash):
365 Dandelion().removeHash(self.object.inventoryHash, "cycle detection")
366
367 Inventory()[self.object.inventoryHash] = (
368 self.object.objectType, self.object.streamNumber, buffer(self.payload[objectOffset:]), self.object.expiresTime, buffer(self.object.tag))
369 self.handleReceivedObject(self.object.streamNumber, self.object.inventoryHash)
370 invQueue.put((self.object.streamNumber, self.object.inventoryHash, self.destination))
371 return True
372
373 def _decode_addr(self):
374 return self.decode_payload_content("LQIQ16sH")

Callers

nothing calls this directly

Calls 15

BMObjectClass · 0.90
BMConfigParserClass · 0.90
InventoryClass · 0.90
DandelionClass · 0.90
checkEOLSanityMethod · 0.80
checkAlreadyHaveMethod · 0.80
stopDownloadingObjectMethod · 0.80
checkStreamMethod · 0.80
checkObjectByTypeMethod · 0.80

Tested by

no test coverage detected