+ if (HeaderSize != NULL) {\r
+ *HeaderSize = HeaderLen;\r
+ }\r
+ *BufferSize = Udp6Rx->DataLength - HeaderLen;\r
+\r
+ HeaderCopiedLen = 0;\r
+ BufferCopiedLen = 0;\r
+ for (FragmentIndex = 0; FragmentIndex < Udp6Rx->FragmentCount; FragmentIndex++) {\r
+ FragmentLength = Udp6Rx->FragmentTable[FragmentIndex].FragmentLength;\r
+ FragmentBuffer = Udp6Rx->FragmentTable[FragmentIndex].FragmentBuffer;\r
+ if (HeaderCopiedLen + FragmentLength < HeaderLen) {\r
+ //\r
+ // Copy the header part of received data.\r
+ //\r
+ CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, FragmentLength);\r
+ HeaderCopiedLen += FragmentLength;\r
+ } else if (HeaderCopiedLen < HeaderLen) {\r
+ //\r
+ // Copy the header part of received data.\r
+ //\r
+ CopiedLen = HeaderLen - HeaderCopiedLen;\r
+ CopyMem ((UINT8 *) HeaderPtr + HeaderCopiedLen, FragmentBuffer, CopiedLen);\r
+ HeaderCopiedLen += CopiedLen;\r
+\r
+ //\r
+ // Copy the other part of received data.\r
+ //\r
+ CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer + CopiedLen, FragmentLength - CopiedLen);\r
+ BufferCopiedLen += (FragmentLength - CopiedLen);\r
+ } else {\r
+ //\r
+ // Copy the other part of received data.\r
+ //\r
+ CopyMem ((UINT8 *) BufferPtr + BufferCopiedLen, FragmentBuffer, FragmentLength);\r
+ BufferCopiedLen += FragmentLength;\r
+ }\r
+ }\r