Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Log / System / IO / Log / LogLogRecord.cs / 1 / LogLogRecord.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IO.Log { using System; using System.IO; using System.Runtime.InteropServices; class LogLogRecord : LogRecord { RecordStream stream; SequenceNumber sequenceNumber; SequenceNumber previous; SequenceNumber user; unsafe internal LogLogRecord( SequenceNumber sequenceNumber, SequenceNumber user, SequenceNumber previous, byte *data, long length) { this.sequenceNumber = sequenceNumber; this.previous = previous; this.user = user; if (length < LogLogRecordHeader.Size) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.LogCorrupt()); } byte[] headerBits = new byte[LogLogRecordHeader.Size]; Marshal.Copy(new IntPtr(data), headerBits, 0, LogLogRecordHeader.Size); LogLogRecordHeader header = new LogLogRecordHeader(headerBits); if (header.MajorVersion > LogLogRecordHeader.CurrentMajorVersion) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.IncompatibleVersion()); } length -= LogLogRecordHeader.Size; data += LogLogRecordHeader.Size; if (header.Padding) { long paddingSize = LogLogRecordHeader.DecodePaddingSize(data, length); if ((paddingSize < 0) || (paddingSize > length)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.LogCorrupt()); } length -= paddingSize; data += paddingSize; } this.stream = new RecordStream( new UnmanagedMemoryStream(data, length)); } public override Stream Data { get { return this.stream; } } public override SequenceNumber Previous { get { return this.previous; } } public override SequenceNumber SequenceNumber { get { return this.sequenceNumber; } } public override SequenceNumber User { get { return this.user; } } public override void Dispose() { this.stream.Dispose(); } internal void Detach() { this.stream.MakeLocalCopy(); } class RecordStream : Stream { Stream innerStream; object syncRoot; internal RecordStream(Stream innerStream) { this.innerStream = innerStream; this.syncRoot = new object(); } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return false; } } public override long Length { get { lock(this.syncRoot) { CheckDisposed(); return this.innerStream.Length; } } } public override long Position { get { lock(this.syncRoot) { CheckDisposed(); return this.innerStream.Position; } } set { lock(this.syncRoot) { CheckDisposed(); this.innerStream.Position = value; } } } public override void Flush() { lock(this.syncRoot) { if(this.innerStream != null) { this.innerStream.Flush(); } } } public override int Read(byte[] buffer, int offset, int count) { lock(this.syncRoot) { CheckDisposed(); return this.innerStream.Read(buffer, offset, count); } } public override long Seek(long offset, SeekOrigin origin) { lock(this.syncRoot) { CheckDisposed(); return this.innerStream.Seek(offset, origin); } } public override void SetLength(long value) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } public override void Write(byte[] buffer, int offset, int count) { if (this.innerStream == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } } public override void WriteByte(byte value) { if (this.innerStream == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported()); } } internal void MakeLocalCopy() { lock(this.syncRoot) { if (this.innerStream != null) { long originalPosition = this.innerStream.Position; try { try { byte[] newData = new byte[this.innerStream.Length]; this.innerStream.Position = 0; this.innerStream.Read(newData, 0, newData.Length); Stream oldStream = this.innerStream; this.innerStream = new MemoryStream(newData); oldStream.Close(); } finally { this.innerStream.Position = originalPosition; } } catch { // This outer catch block is needed to prevent an exception filter // from running while we're in an inconsistent state before // restoring the inner stream's original position. // See http://msdn2.microsoft.com/en-US/library/8cd7yaws.aspx throw; } } } } protected override void Dispose(bool disposing) { try { if (disposing) { lock (this.syncRoot) { if (this.innerStream != null) { this.innerStream.Close(); this.innerStream = null; } } } } finally { base.Dispose(disposing); } } void CheckDisposed() { if (this.innerStream == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StylusCollection.cs
- ReadOnlyDataSourceView.cs
- PngBitmapDecoder.cs
- DataGridViewCellFormattingEventArgs.cs
- FtpWebResponse.cs
- MessageSecurityProtocolFactory.cs
- ChangeNode.cs
- DynamicDocumentPaginator.cs
- ActivityMarkupSerializer.cs
- BrowserDefinitionCollection.cs
- GroupBoxRenderer.cs
- FreezableOperations.cs
- CacheOutputQuery.cs
- cache.cs
- DataTableNewRowEvent.cs
- CalloutQueueItem.cs
- PostBackOptions.cs
- CollectionBase.cs
- InfoCardSchemas.cs
- QueryRewriter.cs
- EdmConstants.cs
- StreamWriter.cs
- ChangeDirector.cs
- DBConnection.cs
- ClientBuildManager.cs
- CopyNodeSetAction.cs
- BigInt.cs
- DataBindingHandlerAttribute.cs
- RequestStatusBarUpdateEventArgs.cs
- ValueChangedEventManager.cs
- MSAANativeProvider.cs
- FileDialogCustomPlaces.cs
- ListenerSessionConnection.cs
- BasicExpressionVisitor.cs
- StyleHelper.cs
- IsolatedStoragePermission.cs
- MouseButtonEventArgs.cs
- DesignTimeTemplateParser.cs
- DeploymentSection.cs
- SiteMapPath.cs
- BitmapFrame.cs
- SendKeys.cs
- XPathDescendantIterator.cs
- TypeConverterHelper.cs
- GregorianCalendar.cs
- BookmarkResumptionRecord.cs
- DataGrid.cs
- SecurityTokenAttachmentMode.cs
- Rect3DConverter.cs
- UrlMappingsModule.cs
- TableAdapterManagerMethodGenerator.cs
- ScriptBehaviorDescriptor.cs
- ConfigXmlComment.cs
- Console.cs
- MouseOverProperty.cs
- FileUtil.cs
- SqlTriggerAttribute.cs
- SecurityDescriptor.cs
- COM2IDispatchConverter.cs
- UserControlParser.cs
- HttpRequestTraceRecord.cs
- XmlElementAttribute.cs
- Style.cs
- BlobPersonalizationState.cs
- Activator.cs
- Vector3DCollectionConverter.cs
- ElementProxy.cs
- BindingCompleteEventArgs.cs
- DataSourceXmlClassAttribute.cs
- ReliableInputConnection.cs
- TableLayoutStyleCollection.cs
- DateTimeOffset.cs
- BindingBase.cs
- ErrorInfoXmlDocument.cs
- OptimalBreakSession.cs
- PackagingUtilities.cs
- Stream.cs
- TextUtf8RawTextWriter.cs
- OleDbRowUpdatingEvent.cs
- PerformanceCounterManager.cs
- WebPartCatalogCloseVerb.cs
- XmlName.cs
- ECDsaCng.cs
- CodeAttributeDeclaration.cs
- ImageAnimator.cs
- ConcurrentStack.cs
- Vector3DKeyFrameCollection.cs
- diagnosticsswitches.cs
- MailHeaderInfo.cs
- BufferedGraphicsContext.cs
- XmlSerializerAssemblyAttribute.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- TableCellCollection.cs
- BulletedListEventArgs.cs
- TextBox.cs
- dbenumerator.cs
- FunctionImportMapping.cs
- XmlException.cs
- RelationalExpressions.cs
- UserControlBuildProvider.cs