Esempio n. 1
0
        int ReadBinaryContent(byte[] buffer, int offset, int count, bool isBase64)
        {
            CryptoHelper.ValidateBufferBounds(buffer, offset, count);

            //
            // Concatentate text nodes to get entire element value before attempting to convert
            // XmlDictionaryReader.CreateDictionaryReader( XmlReader ) creates a reader that returns base64 in a single text node
            // XmlDictionaryReader.CreateTextReader( Stream ) creates a reader that produces multiple text and whitespace nodes
            // Attribute nodes consist of only a single value
            //
            if (this.contentStream == null)
            {
                string encodedValue;
                if (NodeType == XmlNodeType.Attribute)
                {
                    encodedValue = Value;
                }
                else
                {
                    StringBuilder fullText = new StringBuilder(1000);
                    while (NodeType != XmlNodeType.Element && NodeType != XmlNodeType.EndElement)
                    {
                        switch (NodeType)
                        {
                        // concatenate text nodes
                        case XmlNodeType.Text:
                            fullText.Append(Value);
                            break;

                        // skip whitespace
                        case XmlNodeType.Whitespace:
                            break;
                        }

                        Read();
                    }

                    encodedValue = fullText.ToString();
                }

                byte[] value = isBase64 ? Convert.FromBase64String(encodedValue) : HexBinary.Parse(encodedValue).Value;
                this.contentStream = new MemoryStream(value);
            }

            int read = this.contentStream.Read(buffer, offset, count);

            if (read == 0)
            {
                this.contentStream.Close();
                this.contentStream = null;
            }

            return(read);
        }
Esempio n. 2
0
        private int ReadBinaryContent(byte[] buffer, int offset, int count, bool isBase64)
        {
            CryptoHelper.ValidateBufferBounds(buffer, offset, count);
            int num = 0;

            while (((count > 0) && (this.NodeType != XmlNodeType.Element)) && (this.NodeType != XmlNodeType.EndElement))
            {
                if (this.contentStream == null)
                {
                    byte[] buffer2 = isBase64 ? Convert.FromBase64String(this.Value) : SoapHexBinary.Parse(this.Value).Value;
                    this.contentStream = new MemoryStream(buffer2);
                }
                int num2 = this.contentStream.Read(buffer, offset, count);
                if ((num2 == 0) && ((this.NodeType == XmlNodeType.Attribute) || !this.Read()))
                {
                    return(num);
                }
                num    += num2;
                offset += num2;
                count  -= num2;
            }
            return(num);
        }