/// <summary> /// Create BATCHED_OFFER_MESSAGE package. /// </summary> /// <param name="connectionInfoPort"> /// A 16-bit unsigned integer that MUST be set by the client to the port /// on which it is listening as a server-role peer, for use with the retrieval protocol. /// </param> /// <param name="contentInfo">A Content Information V2 data structure.</param> /// <returns>Return the BATCHED_OFFER_MESSAGE.</returns> public BATCHED_OFFER_MESSAGE CreateBatchedOfferMessage( int connectionInfoPort, Content_Information_Data_Structure_V2 contentInfo) { MESSAGE_HEADER messageHeader; messageHeader.MajorVersion = 2; messageHeader.MinorVersion = 0; messageHeader.MsgType = PCHC_MESSAGE_TYPE.BATCHED_OFFER_MESSAGE; messageHeader.Padding = new byte[4]; CONNECTION_INFORMATION connectionInfo; connectionInfo.Padding = new byte[6]; connectionInfo.Port = (ushort)connectionInfoPort; BATCHED_OFFER_MESSAGE batchedOfferMessage; batchedOfferMessage.MessageHeader = messageHeader; batchedOfferMessage.ConnectionInfo = connectionInfo; List <SegmentDescriptor> segmentDescriptors = new List <SegmentDescriptor>(); for (int i = 0; i < contentInfo.chunks.Length; i++) { var chunk = contentInfo.chunks[i]; for (int j = 0; j < chunk.chunkData.Length; j++) { var segment = chunk.chunkData[j]; SegmentDescriptor segmentDescriptor = new SegmentDescriptor(); segmentDescriptor.BlockSize = segment.cbSegment; segmentDescriptor.SegmentSize = segment.cbSegment; segmentDescriptor.SizeOfContentTag = 16; segmentDescriptor.ContentTag = new byte[16]; segmentDescriptor.HashAlgorithm = (byte)contentInfo.dwHashAlgo; segmentDescriptor.SegmentHoHoDk = contentInfo.GetSegmentId(i, j); segmentDescriptors.Add(segmentDescriptor); } } batchedOfferMessage.SegmentDescriptors = segmentDescriptors.ToArray(); return(batchedOfferMessage); }
/// <summary> /// Create BATCHED_OFFER_MESSAGE package. /// </summary> /// <param name="connectionInfoPort"> /// A 16-bit unsigned integer that MUST be set by the client to the port /// on which it is listening as a server-role peer, for use with the retrieval protocol. /// </param> /// <param name="contentInfo">A Content Information V2 data structure.</param> /// <returns>Return the BATCHED_OFFER_MESSAGE.</returns> public BATCHED_OFFER_MESSAGE CreateBatchedOfferMessage( int connectionInfoPort, Content_Information_Data_Structure_V2 contentInfo) { MESSAGE_HEADER messageHeader; messageHeader.MajorVersion = 2; messageHeader.MinorVersion = 0; messageHeader.MsgType = PCHC_MESSAGE_TYPE.BATCHED_OFFER_MESSAGE; messageHeader.Padding = new byte[4]; CONNECTION_INFORMATION connectionInfo; connectionInfo.Padding = new byte[6]; connectionInfo.Port = (ushort)connectionInfoPort; BATCHED_OFFER_MESSAGE batchedOfferMessage; batchedOfferMessage.MessageHeader = messageHeader; batchedOfferMessage.ConnectionInfo = connectionInfo; List<SegmentDescriptor> segmentDescriptors = new List<SegmentDescriptor>(); for (int i = 0; i < contentInfo.chunks.Length; i++) { var chunk = contentInfo.chunks[i]; for (int j = 0; j < chunk.chunkData.Length; j++) { var segment = chunk.chunkData[j]; SegmentDescriptor segmentDescriptor = new SegmentDescriptor(); segmentDescriptor.BlockSize = segment.cbSegment; segmentDescriptor.SegmentSize = segment.cbSegment; segmentDescriptor.SizeOfContentTag = 16; segmentDescriptor.ContentTag = new byte[16]; segmentDescriptor.HashAlgorithm = (byte)contentInfo.dwHashAlgo; segmentDescriptor.SegmentHoHoDk = contentInfo.GetSegmentId(i, j); segmentDescriptors.Add(segmentDescriptor); } } batchedOfferMessage.SegmentDescriptors = segmentDescriptors.ToArray(); return batchedOfferMessage; }