Ejemplo n.º 1
0
        private static List <byte[]> GetMultiPartParts(byte[] rawBody, string multipPartBoundary)
        {
            if (rawBody == null)
            {
                throw new ArgumentNullException("rawBody");
            }
            List <byte[]> messageBodies = new List <byte[]>();

            using (MemoryStream stream = new MemoryStream(rawBody))
            {
                bool lastMultipartBoundaryEncountered;
                int  startLocation = MessagePart.FindPositionOfNextMultiPartBoundary(stream, multipPartBoundary, out lastMultipartBoundaryEncountered) + ("--" + multipPartBoundary + "\r\n").Length;
                while (!lastMultipartBoundaryEncountered)
                {
                    int stopLocation = MessagePart.FindPositionOfNextMultiPartBoundary(stream, multipPartBoundary, out lastMultipartBoundaryEncountered) - "\r\n".Length;
                    if (stopLocation <= -1)
                    {
                        stopLocation = (int)stream.Length - "\r\n".Length;
                        lastMultipartBoundaryEncountered = true;
                        if (startLocation >= stopLocation)
                        {
                            break;
                        }
                    }
                    int    length      = stopLocation - startLocation;
                    byte[] messageBody = new byte[length];
                    Array.Copy(rawBody, startLocation, messageBody, 0, length);
                    messageBodies.Add(messageBody);
                    startLocation = stopLocation + ("\r\n--" + multipPartBoundary + "\r\n").Length;
                }
            }
            return(messageBodies);
        }