Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Configuration / System / Configuration / updateconfighost.cs / 1 / updateconfighost.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Configuration {
using System.Collections.Specialized;
using System.Configuration.Internal;
using System.IO;
//
// Configuration host that intercepts calls to filename functions
// to support SaveAs to an alternate file stream.
//
internal class UpdateConfigHost : DelegatingConfigHost {
private HybridDictionary _streams; // oldStreamname -> StreamUpdate
internal UpdateConfigHost(IInternalConfigHost host) {
// Delegate to the host provided.
Host = host;
}
// Add a stream to the list of streams to intercept.
//
// Parameters:
// alwaysIntercept - If true, then don't check whether the old stream and the new stream are the same.
// SaveAs() will set this to true if oldStreamname is actually referring to a stream
// on a remote machine.
internal void AddStreamname(string oldStreamname, string newStreamname, bool alwaysIntercept) {
//
Debug.Assert(!String.IsNullOrEmpty(oldStreamname));
if (String.IsNullOrEmpty(oldStreamname)) {
return;
}
if (!alwaysIntercept && StringUtil.EqualsIgnoreCase(oldStreamname, newStreamname)) {
return;
}
if (_streams == null) {
_streams = new HybridDictionary(true);
}
_streams[oldStreamname] = new StreamUpdate(newStreamname);
}
// Get the new stream name for a stream if a new name exists, otherwise
// return the original stream name.
internal string GetNewStreamname(string oldStreamname) {
StreamUpdate streamUpdate = GetStreamUpdate(oldStreamname, false);
if (streamUpdate != null) {
return streamUpdate.NewStreamname;
}
return oldStreamname;
}
//
// Get the StreamUpdate for a stream.
// If alwaysIntercept is true, then the StreamUpdate is
// always returned if it exists.
// If alwaysIntercept is false, then only return the StreamUpdate
// if the new stream has been successfully written to.
//
private StreamUpdate GetStreamUpdate(string oldStreamname, bool alwaysIntercept) {
if (_streams == null)
return null;
StreamUpdate streamUpdate = (StreamUpdate) _streams[oldStreamname];
if (streamUpdate != null && !alwaysIntercept && !streamUpdate.WriteCompleted) {
streamUpdate = null;
}
return streamUpdate;
}
public override object GetStreamVersion(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticGetStreamVersion(streamUpdate.NewStreamname);
}
else {
return Host.GetStreamVersion(streamName);
}
}
public override Stream OpenStreamForRead(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticOpenStreamForRead(streamUpdate.NewStreamname);
}
else {
return Host.OpenStreamForRead(streamName);
}
}
public override Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext) {
// Always attempt to write to the new stream name if it exists.
StreamUpdate streamUpdate = GetStreamUpdate(streamName, true);
if (streamUpdate != null) {
return InternalConfigHost.StaticOpenStreamForWrite(streamUpdate.NewStreamname, templateStreamName, ref writeContext, false);
}
else {
return Host.OpenStreamForWrite(streamName, templateStreamName, ref writeContext);
}
}
public override void WriteCompleted(string streamName, bool success, object writeContext) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, true);
if (streamUpdate != null) {
InternalConfigHost.StaticWriteCompleted(streamUpdate.NewStreamname, success, writeContext, false);
//
// Mark the write as having successfully completed, so that subsequent calls
// to Read() will use the new stream name.
//
if (success) {
streamUpdate.WriteCompleted = true;
}
}
else {
Host.WriteCompleted(streamName, success, writeContext);
}
}
public override bool IsConfigRecordRequired(string configPath) {
return true;
}
public override void DeleteStream(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
InternalConfigHost.StaticDeleteStream(streamUpdate.NewStreamname);
}
else {
Host.DeleteStream(streamName);
}
}
public override bool IsFile(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticIsFile(streamUpdate.NewStreamname);
}
else {
return Host.IsFile(streamName);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Configuration {
using System.Collections.Specialized;
using System.Configuration.Internal;
using System.IO;
//
// Configuration host that intercepts calls to filename functions
// to support SaveAs to an alternate file stream.
//
internal class UpdateConfigHost : DelegatingConfigHost {
private HybridDictionary _streams; // oldStreamname -> StreamUpdate
internal UpdateConfigHost(IInternalConfigHost host) {
// Delegate to the host provided.
Host = host;
}
// Add a stream to the list of streams to intercept.
//
// Parameters:
// alwaysIntercept - If true, then don't check whether the old stream and the new stream are the same.
// SaveAs() will set this to true if oldStreamname is actually referring to a stream
// on a remote machine.
internal void AddStreamname(string oldStreamname, string newStreamname, bool alwaysIntercept) {
//
Debug.Assert(!String.IsNullOrEmpty(oldStreamname));
if (String.IsNullOrEmpty(oldStreamname)) {
return;
}
if (!alwaysIntercept && StringUtil.EqualsIgnoreCase(oldStreamname, newStreamname)) {
return;
}
if (_streams == null) {
_streams = new HybridDictionary(true);
}
_streams[oldStreamname] = new StreamUpdate(newStreamname);
}
// Get the new stream name for a stream if a new name exists, otherwise
// return the original stream name.
internal string GetNewStreamname(string oldStreamname) {
StreamUpdate streamUpdate = GetStreamUpdate(oldStreamname, false);
if (streamUpdate != null) {
return streamUpdate.NewStreamname;
}
return oldStreamname;
}
//
// Get the StreamUpdate for a stream.
// If alwaysIntercept is true, then the StreamUpdate is
// always returned if it exists.
// If alwaysIntercept is false, then only return the StreamUpdate
// if the new stream has been successfully written to.
//
private StreamUpdate GetStreamUpdate(string oldStreamname, bool alwaysIntercept) {
if (_streams == null)
return null;
StreamUpdate streamUpdate = (StreamUpdate) _streams[oldStreamname];
if (streamUpdate != null && !alwaysIntercept && !streamUpdate.WriteCompleted) {
streamUpdate = null;
}
return streamUpdate;
}
public override object GetStreamVersion(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticGetStreamVersion(streamUpdate.NewStreamname);
}
else {
return Host.GetStreamVersion(streamName);
}
}
public override Stream OpenStreamForRead(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticOpenStreamForRead(streamUpdate.NewStreamname);
}
else {
return Host.OpenStreamForRead(streamName);
}
}
public override Stream OpenStreamForWrite(string streamName, string templateStreamName, ref object writeContext) {
// Always attempt to write to the new stream name if it exists.
StreamUpdate streamUpdate = GetStreamUpdate(streamName, true);
if (streamUpdate != null) {
return InternalConfigHost.StaticOpenStreamForWrite(streamUpdate.NewStreamname, templateStreamName, ref writeContext, false);
}
else {
return Host.OpenStreamForWrite(streamName, templateStreamName, ref writeContext);
}
}
public override void WriteCompleted(string streamName, bool success, object writeContext) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, true);
if (streamUpdate != null) {
InternalConfigHost.StaticWriteCompleted(streamUpdate.NewStreamname, success, writeContext, false);
//
// Mark the write as having successfully completed, so that subsequent calls
// to Read() will use the new stream name.
//
if (success) {
streamUpdate.WriteCompleted = true;
}
}
else {
Host.WriteCompleted(streamName, success, writeContext);
}
}
public override bool IsConfigRecordRequired(string configPath) {
return true;
}
public override void DeleteStream(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
InternalConfigHost.StaticDeleteStream(streamUpdate.NewStreamname);
}
else {
Host.DeleteStream(streamName);
}
}
public override bool IsFile(string streamName) {
StreamUpdate streamUpdate = GetStreamUpdate(streamName, false);
if (streamUpdate != null) {
return InternalConfigHost.StaticIsFile(streamUpdate.NewStreamname);
}
else {
return Host.IsFile(streamName);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DateTimeFormat.cs
- WebServiceEnumData.cs
- GrammarBuilderWildcard.cs
- SynchronizedInputAdaptor.cs
- IIS7ConfigurationLoader.cs
- TextServicesHost.cs
- FileLogRecordHeader.cs
- InheritedPropertyDescriptor.cs
- OrderByQueryOptionExpression.cs
- MsmqProcessProtocolHandler.cs
- SoapHeaderException.cs
- AncillaryOps.cs
- ParseHttpDate.cs
- Executor.cs
- codemethodreferenceexpression.cs
- MetadataSerializer.cs
- DbMetaDataColumnNames.cs
- TargetException.cs
- QuotedPairReader.cs
- WebPart.cs
- WindowsClaimSet.cs
- SchemaSetCompiler.cs
- BindingValueChangedEventArgs.cs
- DynamicObjectAccessor.cs
- TextShapeableCharacters.cs
- AutoResizedEvent.cs
- UserNameSecurityToken.cs
- ControlCollection.cs
- ObjectHelper.cs
- TextEditorDragDrop.cs
- ResourceExpressionEditor.cs
- ReaderOutput.cs
- CheckBoxField.cs
- BindValidator.cs
- DocumentViewerHelper.cs
- RuntimeEnvironment.cs
- PointAnimationBase.cs
- DesignerActionMethodItem.cs
- ResourceDisplayNameAttribute.cs
- SHA256.cs
- ColorInterpolationModeValidation.cs
- Style.cs
- CodeConstructor.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- Domain.cs
- FixedDSBuilder.cs
- SecurityListenerSettingsLifetimeManager.cs
- ElapsedEventArgs.cs
- SignatureResourcePool.cs
- AddInActivator.cs
- GlobalProxySelection.cs
- DataSourceProvider.cs
- SafeNativeMethodsCLR.cs
- AmbiguousMatchException.cs
- ObjectPersistData.cs
- ScrollableControl.cs
- ExtendedPropertiesHandler.cs
- EastAsianLunisolarCalendar.cs
- ProxyWebPartConnectionCollection.cs
- RtType.cs
- XmlHierarchicalDataSourceView.cs
- _AutoWebProxyScriptEngine.cs
- WsdlBuildProvider.cs
- cookiecontainer.cs
- SourceInterpreter.cs
- AbsoluteQuery.cs
- UIntPtr.cs
- WebPartExportVerb.cs
- SchemaDeclBase.cs
- ToolStripContainer.cs
- UnsafeNativeMethodsTablet.cs
- HttpPostClientProtocol.cs
- CommentGlyph.cs
- Animatable.cs
- GestureRecognizer.cs
- smtppermission.cs
- AuthenticationSection.cs
- XmlDeclaration.cs
- AstNode.cs
- TextRangeEditLists.cs
- XmlCustomFormatter.cs
- RegexRunner.cs
- TransformerInfo.cs
- ListView.cs
- BoundColumn.cs
- SafeTimerHandle.cs
- BordersPage.cs
- DrawingAttributesDefaultValueFactory.cs
- DataGridViewRowsAddedEventArgs.cs
- ComboBoxDesigner.cs
- HttpStreams.cs
- BaseValidatorDesigner.cs
- QueryGeneratorBase.cs
- ConnectionStringsSection.cs
- ComboBoxAutomationPeer.cs
- ExpressionReplacer.cs
- DataSourceViewSchemaConverter.cs
- UnknownBitmapDecoder.cs
- RectIndependentAnimationStorage.cs
- DynamicDataResources.Designer.cs