Exemplo n.º 1
0
        private byte[] ReadNextPart(Stream targetStream, Func <byte[], Encoding, byte[]> decoder, Encoding useEncoding, byte[] boundaryMarker)
        {
            var addNewLine = false;

            while (true)
            {
                byte[] buffer;
                var    chunkStop = ReadChunkOrLine(out buffer, BUFFER_SIZE);

                if (boundaryMarker != null && BufferStartsWith(buffer, boundaryMarker))
                {
                    return(buffer);
                }

                if (boundaryMarker != null && chunkStop == ChunkStop.EndOfStream)
                {
                    throw XRoadException.MultipartManusegaSõnumiOotamatuLõpp();
                }

                if (decoder != null)
                {
                    buffer = decoder(buffer, useEncoding);
                }

                if (decoder == null && addNewLine)
                {
                    targetStream.Write(newLine, 0, newLine.Length);
                }

                targetStream.Write(buffer, 0, buffer.Length);

                if (chunkStop == ChunkStop.EndOfStream)
                {
                    return(buffer);
                }

                addNewLine = chunkStop == ChunkStop.NewLine;
            }
        }