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"); } }
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"); }