2.2.4.2 MSG_GETBLKLIST

The MSG_GETBLKLIST (GetBlockList) message contains a request for a download block list. It is used when retrieving a set of blocks defined by one or more BLOCK_RANGE_ARRAY items.


0


1


2


3


4


5


6


7


8


9

1
0


1


2


3


4


5


6


7


8


9

2
0


1


2


3


4


5


6


7


8


9

3
0


1

SizeOfSegmentID

SegmentID (variable)

...

ZeroPad (variable)

...

NeededBlocksRangeCount

NeededBlockRanges (variable)

...

SizeOfSegmentID (4 bytes): Size, in bytes. of the subsequent SegmentID field. The syntactic range of this field is from 0x00000000 to 0xFFFFFFFF. The actual value of this field depends on the hashing algorithm used as defined in [MS-PCCRC]. Implementations SHOULD support all allowed SegmentID lengths and MUST support content with 32-byte SegmentIDs.<3>

SegmentID (variable): Public Segment Identifier for the target segment of content (also known as HoHoDk). See [MS-PCCRC] for a description of contents, segments, blocks, and identifiers.

ZeroPad (variable): Sequence of bytes added (as needed) to restore 4-byte alignment, relative to the beginning of this message. The value of each byte MUST be set to zero. This field is 0 to 3 bytes in length, as required.

NeededBlocksRangeCount (4 bytes): Number of items in the subsequent block range array. The syntactic range of this field is from 0x00000000 to 0xFFFFFFFF. The effective range of this field MUST be between 1 and 256 inclusive because there cannot be more than 256 non-overlapping and non-contiguous ranges in a maximum segment size of 512 blocks.

NeededBlockRanges (variable): Block range array listing the block hashes of the blocks within the target segment that the client-role peer is interested in. The server-role peer will reply with a block range array representing the intersection between the list of block hashes in the NeededBlockRanges array and the block range array set of blocks within the target segment currently available for sharing in the local cache of the server-role peer.<4>