public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw Error.ArgumentNull("message"); } if (bufferManager == null) { throw Error.ArgumentNull("bufferManager"); } if (maxMessageSize < 0) { throw Error.ArgumentOutOfRange("maxMessageSize", maxMessageSize, SRResources.NonnegativeNumberRequired); } if (messageOffset < 0) { throw Error.ArgumentOutOfRange("messageOffset", messageOffset, SRResources.NonnegativeNumberRequired); } if (messageOffset > maxMessageSize) { throw Error.Argument(String.Empty, SRResources.ParameterMustBeLessThanOrEqualSecondParameter, "messageOffset", "maxMessageSize"); } // TODO: DevDiv2 bug #378887 -- find out how to eliminate this middle buffer using (BufferManagerOutputStream stream = new BufferManagerOutputStream(MaxSentMessageSizeExceededResourceStringName, 0, maxMessageSize, bufferManager)) { int num; stream.Skip(messageOffset); WriteMessage(message, stream); byte[] buffer = stream.ToArray(out num); ArraySegment <byte> messageData = new ArraySegment <byte>(buffer, 0, num - messageOffset); // ToArray transfers full ownership of buffer to us, meaning we are responsible for returning it to BufferManager. // But we must delay that release until WCF has finished with the buffer we are returning from this method. HttpMessageEncodingRequestContext requestContext = HttpMessageEncodingRequestContext.GetContextFromMessage(message); Contract.Assert(requestContext != null); requestContext.BufferManager = bufferManager; requestContext.BufferToReturn = buffer; return(messageData); } }
public void WriteBodyToSignWithFragments(Stream stream, bool includeComments, string[] inclusivePrefixes, XmlDictionaryWriter writer) { IFragmentCapableXmlDictionaryWriter writer2 = (IFragmentCapableXmlDictionaryWriter)writer; this.SetBodyId(); BufferedOutputStream stream2 = new BufferManagerOutputStream("XmlBufferQuotaExceeded", 0x400, 0x7fffffff, BufferManager.CreateBufferManager(0L, 0x7fffffff)); writer.StartCanonicalization(stream, includeComments, inclusivePrefixes); writer2.StartFragment(stream2, false); this.WriteStartInnerMessageWithId(writer); base.InnerMessage.WriteBodyContents(writer); writer.WriteEndElement(); writer2.EndFragment(); writer.EndCanonicalization(); this.fullBodyFragment = stream2.ToArray(out this.fullBodyFragmentLength); this.state = BodyState.Signed; }
public void WriteBodyToSignWithFragments(Stream stream, bool includeComments, string[] inclusivePrefixes, XmlDictionaryWriter writer) { IFragmentCapableXmlDictionaryWriter fragmentingWriter = (IFragmentCapableXmlDictionaryWriter)writer; SetBodyId(); BufferedOutputStream fullBodyFragment = new BufferManagerOutputStream(SR.XmlBufferQuotaExceeded, 1024, int.MaxValue, this.securityHeader.StreamBufferManager); writer.StartCanonicalization(stream, includeComments, inclusivePrefixes); fragmentingWriter.StartFragment(fullBodyFragment, false); WriteStartInnerMessageWithId(writer); this.InnerMessage.WriteBodyContents(writer); writer.WriteEndElement(); fragmentingWriter.EndFragment(); writer.EndCanonicalization(); this.fullBodyFragment = fullBodyFragment.ToArray(out this.fullBodyFragmentLength); this.state = BodyState.Signed; }
public void WriteBodyToSignThenEncryptWithFragments( Stream stream, bool includeComments, string[] inclusivePrefixes, EncryptedData encryptedData, SymmetricAlgorithm algorithm, XmlDictionaryWriter writer) { IFragmentCapableXmlDictionaryWriter fragmentingWriter = (IFragmentCapableXmlDictionaryWriter)writer; SetBodyId(); encryptedData.Id = this.securityHeader.GenerateId(); this.startBodyFragment = new MemoryStream(); BufferedOutputStream bodyContentFragment = new BufferManagerOutputStream(SR.XmlBufferQuotaExceeded, 1024, int.MaxValue, this.securityHeader.StreamBufferManager); this.endBodyFragment = new MemoryStream(); writer.StartCanonicalization(stream, includeComments, inclusivePrefixes); fragmentingWriter.StartFragment(this.startBodyFragment, false); WriteStartInnerMessageWithId(writer); fragmentingWriter.EndFragment(); fragmentingWriter.StartFragment(bodyContentFragment, true); this.InnerMessage.WriteBodyContents(writer); fragmentingWriter.EndFragment(); fragmentingWriter.StartFragment(this.endBodyFragment, false); writer.WriteEndElement(); fragmentingWriter.EndFragment(); writer.EndCanonicalization(); int bodyLength; byte[] bodyBuffer = bodyContentFragment.ToArray(out bodyLength); encryptedData.SetUpEncryption(algorithm, new ArraySegment <byte>(bodyBuffer, 0, bodyLength)); this.encryptedBodyContent = encryptedData; this.state = BodyState.SignedThenEncrypted; }
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw Error.ArgumentNull("message"); } if (bufferManager == null) { throw Error.ArgumentNull("bufferManager"); } if (maxMessageSize < 0) { throw Error.ArgumentOutOfRange("maxMessageSize", maxMessageSize, SRResources.NonnegativeNumberRequired); } if (messageOffset < 0) { throw Error.ArgumentOutOfRange("messageOffset", messageOffset, SRResources.NonnegativeNumberRequired); } if (messageOffset > maxMessageSize) { throw Error.Argument(String.Empty, SRResources.ParameterMustBeLessThanOrEqualSecondParameter, "messageOffset", "maxMessageSize"); } // TODO: DevDiv2 bug #378887 -- find out how to eliminate this middle buffer using (BufferManagerOutputStream stream = new BufferManagerOutputStream(MaxSentMessageSizeExceededResourceStringName, 0, maxMessageSize, bufferManager)) { int num; stream.Skip(messageOffset); WriteMessage(message, stream); byte[] buffer = stream.ToArray(out num); ArraySegment<byte> messageData = new ArraySegment<byte>(buffer, 0, num - messageOffset); // ToArray transfers full ownership of buffer to us, meaning we are responsible for returning it to BufferManager. // But we must delay that release until WCF has finished with the buffer we are returning from this method. HttpMessageEncodingRequestContext requestContext = HttpMessageEncodingRequestContext.GetContextFromMessage(message); Contract.Assert(requestContext != null); requestContext.BufferManager = bufferManager; requestContext.BufferToReturn = buffer; return messageData; } }
public void WriteBodyToSignWithFragments(Stream stream, bool includeComments, string[] inclusivePrefixes, XmlDictionaryWriter writer) { IFragmentCapableXmlDictionaryWriter writer2 = (IFragmentCapableXmlDictionaryWriter) writer; this.SetBodyId(); BufferedOutputStream stream2 = new BufferManagerOutputStream("XmlBufferQuotaExceeded", 0x400, 0x7fffffff, BufferManager.CreateBufferManager(0L, 0x7fffffff)); writer.StartCanonicalization(stream, includeComments, inclusivePrefixes); writer2.StartFragment(stream2, false); this.WriteStartInnerMessageWithId(writer); base.InnerMessage.WriteBodyContents(writer); writer.WriteEndElement(); writer2.EndFragment(); writer.EndCanonicalization(); this.fullBodyFragment = stream2.ToArray(out this.fullBodyFragmentLength); this.state = BodyState.Signed; }
public void WriteBodyToSignThenEncryptWithFragments(Stream stream, bool includeComments, string[] inclusivePrefixes, EncryptedData encryptedData, SymmetricAlgorithm algorithm, XmlDictionaryWriter writer) { int num; IFragmentCapableXmlDictionaryWriter writer2 = (IFragmentCapableXmlDictionaryWriter) writer; this.SetBodyId(); encryptedData.Id = this.securityHeader.GenerateId(); this.startBodyFragment = new MemoryStream(); BufferedOutputStream stream2 = new BufferManagerOutputStream("XmlBufferQuotaExceeded", 0x400, 0x7fffffff, BufferManager.CreateBufferManager(0L, 0x7fffffff)); this.endBodyFragment = new MemoryStream(); writer.StartCanonicalization(stream, includeComments, inclusivePrefixes); writer2.StartFragment(this.startBodyFragment, false); this.WriteStartInnerMessageWithId(writer); writer2.EndFragment(); writer2.StartFragment(stream2, true); base.InnerMessage.WriteBodyContents(writer); writer2.EndFragment(); writer2.StartFragment(this.endBodyFragment, false); writer.WriteEndElement(); writer2.EndFragment(); writer.EndCanonicalization(); byte[] array = stream2.ToArray(out num); encryptedData.SetUpEncryption(algorithm, new ArraySegment<byte>(array, 0, num)); this.encryptedBodyContent = encryptedData; this.state = BodyState.SignedThenEncrypted; }
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { if (message == null) { throw Fx.Exception.ArgumentNull("message"); } if (bufferManager == null) { throw Fx.Exception.ArgumentNull("bufferManager"); } if (maxMessageSize < 0) { throw Fx.Exception.AsError(new ArgumentOutOfRangeException("maxMessageSize")); } if (messageOffset < 0) { throw Fx.Exception.AsError(new ArgumentOutOfRangeException("messageOffset")); } if (messageOffset > maxMessageSize) { throw Fx.Exception.Argument( string.Empty, SR.ParameterMustBeLessThanOrEqualSecondParameter("messageOffset", "maxMessageSize")); } // TODO: CSDMAIN 205175 -- reactivate when tracing and logging are available: //// EventTraceActivity eventTraceActivity = null; //// if (WebTD.HttpMessagEncodingStartIsEnabled()) //// { //// eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message); //// WebTD.HttpMessagEncodingStart(eventTraceActivity); //// } using (BufferManagerOutputStream stream = new BufferManagerOutputStream(MaxSentMessageSizeExceededResourceStringName, 0, maxMessageSize, bufferManager)) { int num; stream.Skip(messageOffset); this.WriteMessage(message, stream); ArraySegment<byte> messageData = new ArraySegment<byte>(stream.ToArray(out num), 0, num - messageOffset); // TODO: CSDMAIN 205175 -- reactivate when tracing and logging are available: //// if (SMTD.MessageWrittenByEncoderIsEnabled() && messageData != null) //// { //// SMTD.MessageWrittenByEncoder( //// eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity(message), //// messageData.Count, //// this); //// } return messageData; } }