(self)
| 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") |
nothing calls this directly
no test coverage detected