private void CheckFlags(WsATv1LogEntryFlags flags)
 {
     if (((byte)(flags | (WsATv1LogEntryFlags.OptimizedEndpointRepresentation | WsATv1LogEntryFlags.UsesDefaultPort | WsATv1LogEntryFlags.UsesStandardCoordinatorAddressPath | WsATv1LogEntryFlags.UsesStandardParticipantAddressPath))) != 15)
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Invalid WsATv1LogEntryFlags");
     }
     if ((((byte)(flags & WsATv1LogEntryFlags.OptimizedEndpointRepresentation)) == 0) && (((int)flags) != 0))
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("If OptimizedEndpointRepresentation is not set, no other flag should be set");
     }
     if (((byte)(flags & (WsATv1LogEntryFlags.UsesStandardCoordinatorAddressPath | WsATv1LogEntryFlags.UsesStandardParticipantAddressPath))) == 12)
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Both address flags cannot be set at once");
     }
 }
 private void CheckFlags(WsATv1LogEntryFlags flags)
 {
     if (((byte) (flags | (WsATv1LogEntryFlags.OptimizedEndpointRepresentation | WsATv1LogEntryFlags.UsesDefaultPort | WsATv1LogEntryFlags.UsesStandardCoordinatorAddressPath | WsATv1LogEntryFlags.UsesStandardParticipantAddressPath))) != 15)
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Invalid WsATv1LogEntryFlags");
     }
     if ((((byte) (flags & WsATv1LogEntryFlags.OptimizedEndpointRepresentation)) == 0) && (((int) flags) != 0))
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("If OptimizedEndpointRepresentation is not set, no other flag should be set");
     }
     if (((byte) (flags & (WsATv1LogEntryFlags.UsesStandardCoordinatorAddressPath | WsATv1LogEntryFlags.UsesStandardParticipantAddressPath))) == 12)
     {
         Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Both address flags cannot be set at once");
     }
 }
Example #3
0
        protected override void SerializeExtended()
        {
            Guid guid;

            DebugTrace.TraceEnter(this, "SerializeExtended");
            WsATv1LogEntryFlags flags     = 0;
            WsATv1LogEntryFlags pathFlags = 0;
            EndpointAddress     endpoint  = base.logEntry.Endpoint;
            Uri uri = endpoint.Uri;

            if (GetRemoteEnlistmentId(endpoint, out guid))
            {
                flags = (WsATv1LogEntryFlags)((byte)(flags | WsATv1LogEntryFlags.OptimizedEndpointRepresentation));
                if (string.Compare(uri.Scheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) != 0)
                {
                    Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Endpoints must use the HTTPS scheme");
                }
                if (0x944 == uri.Port)
                {
                    flags = (WsATv1LogEntryFlags)((byte)(flags | WsATv1LogEntryFlags.UsesDefaultPort));
                }
                pathFlags = GetPathFlags(endpoint, this.protocolVersion);
                flags     = (WsATv1LogEntryFlags)((byte)(flags | pathFlags));
            }
            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "SerializeExtended flags: {0}", flags);
            }
            byte num = 0;

            ProtocolVersionHelper.AssertProtocolVersion(this.protocolVersion, base.GetType(), "SerializeExtended");
            switch (this.protocolVersion)
            {
            case ProtocolVersion.Version10:
                num = 1;
                break;

            case ProtocolVersion.Version11:
                num = 2;
                break;
            }
            base.mem.WriteByte(num);
            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "Wrote version: {0} bytes", base.mem.Length);
            }
            base.mem.WriteByte((byte)flags);
            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "Wrote flags: {0} bytes", base.mem.Length);
            }
            if (((byte)(flags & WsATv1LogEntryFlags.OptimizedEndpointRepresentation)) == 0)
            {
                SerializationUtils.WriteEndpointAddress(base.mem, endpoint, this.protocolVersion);
            }
            else
            {
                SerializationUtils.WriteGuid(base.mem, ref guid);
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "Wrote enlistmentId: {0} bytes", base.mem.Length);
                }
                SerializationUtils.WriteString(base.mem, uri.Host);
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "Wrote hostName: {0} bytes", base.mem.Length);
                }
                if (((byte)(flags & WsATv1LogEntryFlags.UsesDefaultPort)) == 0)
                {
                    if ((uri.Port < 0) || (uri.Port > 0xffff))
                    {
                        Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("TCP port must be valid");
                    }
                    SerializationUtils.WriteInt(base.mem, uri.Port);
                    if (DebugTrace.Verbose)
                    {
                        DebugTrace.Trace(TraceLevel.Verbose, "Wrote port: {0} bytes", base.mem.Length);
                    }
                }
                if (((int)pathFlags) == 0)
                {
                    SerializationUtils.WriteString(base.mem, uri.AbsolutePath);
                    if (DebugTrace.Verbose)
                    {
                        DebugTrace.Trace(TraceLevel.Verbose, "Wrote address path: {0} bytes", base.mem.Length);
                    }
                }
            }
            DebugTrace.TraceLeave(this, "DeserializeExtended");
        }
        protected override void DeserializeExtended()
        {
            DebugTrace.TraceEnter(this, "DeserializeExtended");
            WsATv1LogEntryVersion version = (WsATv1LogEntryVersion)SerializationUtils.ReadByte(base.mem);

            if (!Enum.IsDefined(typeof(WsATv1LogEntryVersion), version))
            {
                Microsoft.Transactions.Bridge.DiagnosticUtility.FailFast("Unsupported WsATv1LogEntryVersion");
            }
            WsATv1LogEntryFlags flags = (WsATv1LogEntryFlags)SerializationUtils.ReadByte(base.mem);

            if (DebugTrace.Verbose)
            {
                DebugTrace.Trace(TraceLevel.Verbose, "DeserializeExtended flags: {0}", flags);
            }
            this.CheckFlags(flags);
            if (((byte)(flags & WsATv1LogEntryFlags.OptimizedEndpointRepresentation)) == 0)
            {
                base.entry.Endpoint = SerializationUtils.ReadEndpointAddress(base.mem, this.protocolVersion);
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "Read endpoint address: {0}", base.entry.Endpoint.Uri);
                }
            }
            else
            {
                int    num;
                string str2;
                Guid   guid = SerializationUtils.ReadGuid(base.mem);
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "Read remote EnlistmentId: {0}", guid);
                }
                string str = SerializationUtils.ReadString(base.mem);
                if (DebugTrace.Verbose)
                {
                    DebugTrace.Trace(TraceLevel.Verbose, "Read hostName: {0}", str);
                }
                if (((byte)(flags & WsATv1LogEntryFlags.UsesDefaultPort)) != 0)
                {
                    num = 0x944;
                }
                else
                {
                    num = SerializationUtils.ReadInt(base.mem);
                    if (DebugTrace.Verbose)
                    {
                        DebugTrace.Trace(TraceLevel.Verbose, "Read port: {0}", num);
                    }
                }
                if (((byte)(flags & WsATv1LogEntryFlags.UsesStandardCoordinatorAddressPath)) != 0)
                {
                    str2 = WsATv1LogEntrySerializer.StandardCoordinatorAddressPath(this.protocolVersion);
                }
                else if (((byte)(flags & WsATv1LogEntryFlags.UsesStandardParticipantAddressPath)) != 0)
                {
                    str2 = WsATv1LogEntrySerializer.StandardParticipantAddressPath(this.protocolVersion);
                }
                else
                {
                    str2 = SerializationUtils.ReadString(base.mem);
                    if (DebugTrace.Verbose)
                    {
                        DebugTrace.Trace(TraceLevel.Verbose, "Read address path: {0}", str2);
                    }
                }
                UriBuilder       builder = new UriBuilder(Uri.UriSchemeHttps, str, num, str2);
                EnlistmentHeader header  = new EnlistmentHeader(guid, ControlProtocol.Durable2PC);
                base.entry.Endpoint = new EndpointAddress(builder.Uri, new AddressHeader[] { header });
            }
            DebugTrace.TraceLeave(this, "DeserializeExtended");
        }