Microsoft.Protocols.TestTools.StackSdk.BranchCache.Pchc.EncodeMessage.EncodeSegmentInfoMessage C# (CSharp) Method

EncodeSegmentInfoMessage() public static method

Transform the SEGMENT_INFO_MESSAGE to a byte array
public static EncodeSegmentInfoMessage ( SEGMENT_INFO_MESSAGE segmentInfoMsg ) : byte[]
segmentInfoMsg SEGMENT_INFO_MESSAGE The SEGMENT_INFO_MESSAGE message
return byte[]
        public static byte[] EncodeSegmentInfoMessage(SEGMENT_INFO_MESSAGE segmentInfoMsg)
        {
            List<byte> list = new List<byte>();

            // Encode MESSAGE_HEADER
            list.Add(segmentInfoMsg.MsgHeader.MinorVersion);
            list.Add(segmentInfoMsg.MsgHeader.MajorVersion);
            list.AddRange(GetBytesFromUshort((ushort)segmentInfoMsg.MsgHeader.MsgType, false));
            if (segmentInfoMsg.MsgHeader.Padding == null)
            {
                segmentInfoMsg.MsgHeader.Padding = new byte[4];
            }

            list.AddRange(segmentInfoMsg.MsgHeader.Padding);

            // Encode CONNECTION_INFORMATION
            list.AddRange(GetBytesFromUint16(segmentInfoMsg.ConnectionInfo.Port, false));
            if (segmentInfoMsg.ConnectionInfo.Padding == null)
            {
                segmentInfoMsg.ConnectionInfo.Padding = new byte[6];
            }

            list.AddRange(segmentInfoMsg.ConnectionInfo.Padding);

            // Encode CONTENT_TAG
            list.AddRange(segmentInfoMsg.ContentTag);

            // Encode segment infomation.
            list.AddRange(GetBytesFromUshort(segmentInfoMsg.SegmentInfo.Version, true));
            list.AddRange(GetBytesFromUint((uint)segmentInfoMsg.SegmentInfo.dwHashAlgo, true));
            list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.dwOffsetInFirstSegment, true));
            list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.dwOffsetInFirstSegment, true));
            list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.cSegments, true));

            for (int i = 0; i < segmentInfoMsg.SegmentInfo.segments.Length; i++)
            {
                list.AddRange(GetBytesFromUlong(segmentInfoMsg.SegmentInfo.segments[i].ullOffsetInContent, true));
                list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.segments[i].cbSegment, true));
                list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.segments[i].cbBlockSize, true));
                list.AddRange(segmentInfoMsg.SegmentInfo.segments[i].SegmentHashOfData);
                list.AddRange(segmentInfoMsg.SegmentInfo.segments[i].SegmentSecret);
            }

            for (int j = 0; j < segmentInfoMsg.SegmentInfo.blocks.Length; j++)
            {
                list.AddRange(GetBytesFromUint(segmentInfoMsg.SegmentInfo.blocks[j].cBlocks, true));
                list.AddRange(segmentInfoMsg.SegmentInfo.blocks[j].BlockHashes);
            }

            return list.ToArray();
        }

Usage Example

 /// <summary>
 /// Send the SEGMENT_INFO_MESSAGE request.
 /// </summary>
 /// <param name="segmentInfoMessage">The SEGMENT_INFO_MESSAGE message.</param>
 /// <returns>The repsonse message RESPONSE_MESSAGE from the hosted cache.</returns>
 public RESPONSE_MESSAGE SendSegmentInfoMessage(SEGMENT_INFO_MESSAGE segmentInfoMessage)
 {
     return(this.responseMessage = this.SendByte(EncodeMessage.EncodeSegmentInfoMessage(segmentInfoMessage)));
 }