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); }
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); }