Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / TransactionBridge / Microsoft / Transactions / Wsat / Protocol / ProtocolInformationReader.cs / 1 / ProtocolInformationReader.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- // Define the class that knows how to deserialize WS-AT protocol information using System; using System.IO; using System.Net; using Microsoft.Transactions.Wsat.Recovery; using DiagnosticUtility = Microsoft.Transactions.Bridge.DiagnosticUtility; namespace Microsoft.Transactions.Wsat.Protocol { class ProtocolInformationReader { int httpsPort; string hostName; string nodeName; string basePath; TimeSpan maxTimeout; ProtocolInformationFlags flags; public ProtocolInformationReader(MemoryStream mem) { ReadProtocolInformation(mem); } public int HttpsPort { get { return this.httpsPort; } } public string HostName { get { return this.hostName; } } public string NodeName { get { return this.nodeName; } } public string BasePath { get { return this.basePath; } } public TimeSpan MaxTimeout { get { return this.maxTimeout; } } public bool IssuedTokensEnabled { get { return (flags & ProtocolInformationFlags.IssuedTokensEnabled) != 0; } } public bool NetworkInboundAccess { get { return (flags & ProtocolInformationFlags.NetworkInboundAccess) != 0; } } public bool NetworkOutboundAccess { get { return (flags & ProtocolInformationFlags.NetworkOutboundAccess) != 0; } } public bool NetworkClientAccess { get { return (flags & ProtocolInformationFlags.NetworkClientAccess) != 0; } } public bool IsClustered { get { return (flags & ProtocolInformationFlags.IsClustered) != 0; } } bool isV10Enabled = false; public bool IsV10Enabled { get { return this.isV10Enabled; } } bool isV11Enabled = false; public bool IsV11Enabled { get { return this.isV11Enabled; } } void ReadProtocolInformation(MemoryStream mem) { // We assume that all extended whereabouts emitted under the PluggableProtocol guids for versions // 1.0 or 1.1 start with the following set of data (version 1.1) // { version(major,minor), flags, httpsPort, maxTimeout, hostName, basePath, nodeName } // Read major version ProtocolInformationMajorVersion version = (ProtocolInformationMajorVersion)mem.ReadByte(); if (version != ProtocolInformationMajorVersion.v1) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoUnsupportedVersion, version))); } // Read minor version // We don't assert the minor version. In the future, by incrementing the minor version, we will be able // to maintain compatibility while adding new information onto the end of the stream ProtocolInformationMinorVersion minorVersion = (ProtocolInformationMinorVersion)mem.ReadByte(); // Begin reading protocol info version 1.1 // Flags this.flags = (ProtocolInformationFlags)mem.ReadByte(); CheckFlags(this.flags); // Https port this.httpsPort = SerializationUtils.ReadInt(mem); if (this.httpsPort < IPEndPoint.MinPort || this.httpsPort > IPEndPoint.MaxPort) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidHttpsPort, this.httpsPort))); } // Max timeout this.maxTimeout = SerializationUtils.ReadTimeout(mem); if (this.maxTimeout < TimeSpan.Zero) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidMaxTimeout, this.maxTimeout))); } // HostName this.hostName = SerializationUtils.ReadString(mem); if (string.IsNullOrEmpty(this.hostName)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidHostName))); } // BasePath this.basePath = SerializationUtils.ReadString(mem); if (string.IsNullOrEmpty(this.basePath)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidBasePath))); } // NodeName this.nodeName = SerializationUtils.ReadString(mem); if (string.IsNullOrEmpty(this.nodeName)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidNodeName))); } // End of version 1.1 // We assume that all minor versions >= than 2 whereabouts have a short field describing the // supported protocol versions byte minMinorVersion = 2; if((byte)minorVersion >= minMinorVersion) { ProtocolVersion supportedProtocols = (ProtocolVersion)SerializationUtils.ReadUShort(mem); // check if coordinator supports WSAT 1.0 if ((supportedProtocols & ProtocolVersion.Version10) != 0) { this.isV10Enabled = true; } // check if coordinator supports WSAT 1.1 if ((supportedProtocols & ProtocolVersion.Version11) != 0) { this.isV11Enabled = true; } } else { this.isV10Enabled = true; } } void CheckFlags(ProtocolInformationFlags flags) { const ProtocolInformationFlags allFlags = ProtocolInformationFlags.IssuedTokensEnabled | ProtocolInformationFlags.NetworkClientAccess | ProtocolInformationFlags.NetworkInboundAccess | ProtocolInformationFlags.NetworkOutboundAccess | ProtocolInformationFlags.IsClustered; if ((flags | allFlags) != allFlags) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidFlags, flags))); } // Either NetworkInboundAccess or NetworkOutboundAccess must be set const ProtocolInformationFlags inOutFlags = ProtocolInformationFlags.NetworkInboundAccess | ProtocolInformationFlags.NetworkOutboundAccess; if ((flags & inOutFlags) == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new SerializationException(SR.GetString(SR.ProtocolInfoInvalidFlags, flags))); } } } } // 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
- WindowsScrollBar.cs
- TimeIntervalCollection.cs
- NonBatchDirectoryCompiler.cs
- BinaryWriter.cs
- ObjectSpanRewriter.cs
- DispatchChannelSink.cs
- EventListener.cs
- MediaTimeline.cs
- MailSettingsSection.cs
- MessageSmuggler.cs
- OleDbParameterCollection.cs
- QueryOptionExpression.cs
- IdnMapping.cs
- __TransparentProxy.cs
- MailAddressCollection.cs
- WriteableBitmap.cs
- QilFunction.cs
- StorageAssociationSetMapping.cs
- Pkcs7Signer.cs
- SafeSecurityHelper.cs
- CompiledIdentityConstraint.cs
- OleDbParameter.cs
- MultipartContentParser.cs
- ArrangedElementCollection.cs
- SqlNamer.cs
- QuotedPrintableStream.cs
- Directory.cs
- HwndTarget.cs
- DateTimeConverter2.cs
- SuppressMergeCheckAttribute.cs
- SubclassTypeValidatorAttribute.cs
- DisplayMemberTemplateSelector.cs
- ProcessProtocolHandler.cs
- ColorInterpolationModeValidation.cs
- SessionStateUtil.cs
- NavigationEventArgs.cs
- GridViewUpdateEventArgs.cs
- XpsException.cs
- ProgressBarRenderer.cs
- XmlHierarchicalEnumerable.cs
- PartialClassGenerationTaskInternal.cs
- EdmValidator.cs
- SchemaCollectionCompiler.cs
- SecurityTokenAuthenticator.cs
- FixedDocumentSequencePaginator.cs
- TypeUsageBuilder.cs
- DesignerCategoryAttribute.cs
- TaskScheduler.cs
- XmlObjectSerializerWriteContext.cs
- AccessDataSourceWizardForm.cs
- DataGridViewCellParsingEventArgs.cs
- NameSpaceEvent.cs
- ManualResetEventSlim.cs
- glyphs.cs
- ResourcePart.cs
- DataGridViewHitTestInfo.cs
- OutputCacheProfileCollection.cs
- SortQuery.cs
- Cursors.cs
- TextBoxBase.cs
- XamlDesignerSerializationManager.cs
- EmissiveMaterial.cs
- RequestQueryParser.cs
- WorkflowMarkupSerializationException.cs
- InvokeGenerator.cs
- GradientStop.cs
- XmlEntity.cs
- UpdateManifestForBrowserApplication.cs
- XPathNodeList.cs
- ServiceHostingEnvironment.cs
- NodeLabelEditEvent.cs
- GridViewRowEventArgs.cs
- HttpWriter.cs
- ActivityMarkupSerializationProvider.cs
- EntityModelBuildProvider.cs
- OpCopier.cs
- Validator.cs
- HostingPreferredMapPath.cs
- UnaryOperationBinder.cs
- Rules.cs
- BitmapEffectDrawingContent.cs
- PrtCap_Builder.cs
- CustomSignedXml.cs
- MD5HashHelper.cs
- DbXmlEnabledProviderManifest.cs
- EnumerationRangeValidationUtil.cs
- XmlDesignerDataSourceView.cs
- DescriptionAttribute.cs
- IteratorFilter.cs
- Point.cs
- DataServiceConfiguration.cs
- SafeArrayTypeMismatchException.cs
- SQLMoneyStorage.cs
- ToolStripSeparator.cs
- GeometryGroup.cs
- GridEntryCollection.cs
- GetWorkflowTree.cs
- NullableDecimalMinMaxAggregationOperator.cs
- TransactionFlowElement.cs
- ExcCanonicalXml.cs