/// <summary> /// Set the host headers on the SendContext (for error, dead-letter, etc.) /// </summary> /// <param name="headers"></param> /// <param name="exception"></param> /// <param name="exceptionTimestamp"></param> public static void SetExceptionHeaders(this SendHeaders headers, Exception exception, DateTime exceptionTimestamp) { exception = exception.GetBaseException() ?? exception; var exceptionMessage = ExceptionUtil.GetMessage(exception); headers.Set(MessageHeaders.Reason, "fault"); headers.Set(MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType())); headers.Set(MessageHeaders.FaultMessage, exceptionMessage); headers.Set(MessageHeaders.FaultTimestamp, exceptionTimestamp.ToString("O")); headers.Set(MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception)); }
private async Task <ICryptoTransform> CreateAndSetEncryptionContext(SendHeaders metadata, CancellationToken cancellationToken) { if (metadata == null) { throw new ArgumentNullException(nameof(metadata)); } if (this.encryptionKey == null) { throw new InvalidOperationException("Key is not initialized. Encryption requires it to be initialized."); } using (AesCryptoServiceProvider provider = new AesCryptoServiceProvider()) { var data = new EncryptionData { EncryptionAgent = new EncryptionAgent("1.0", EncryptionAlgorithm.AES_CBC_256) }; var key = this.encryptionKey(); var result = await key.WrapKeyAsync(provider.Key, null, cancellationToken).ConfigureAwait(false); data.WrappedContentKey = new WrappedKey(key.Kid, result.Item1, result.Item2); data.ContentEncryptionIV = provider.IV; metadata.Set(EncryptionHeaderDataKey, JsonConvert.SerializeObject(data)); return(provider.CreateEncryptor()); } }
/// <summary> /// Set the host headers on the SendContext (for error, dead-letter, etc.) /// </summary> /// <param name="headers"></param> public static void SetHostHeaders(this SendHeaders headers) { headers.Set(MessageHeaders.Host.MachineName, HostMetadataCache.Host.MachineName); headers.Set(MessageHeaders.Host.ProcessName, HostMetadataCache.Host.ProcessName); headers.Set(MessageHeaders.Host.ProcessId, HostMetadataCache.Host.ProcessId.ToString("F0")); headers.Set(MessageHeaders.Host.Assembly, HostMetadataCache.Host.Assembly); headers.Set(MessageHeaders.Host.AssemblyVersion, HostMetadataCache.Host.AssemblyVersion); headers.Set(MessageHeaders.Host.MassTransitVersion, HostMetadataCache.Host.MassTransitVersion); headers.Set(MessageHeaders.Host.FrameworkVersion, HostMetadataCache.Host.FrameworkVersion); headers.Set(MessageHeaders.Host.OperatingSystemVersion, HostMetadataCache.Host.OperatingSystemVersion); }
/// <summary> /// Set the host headers on the SendContext (for error, dead-letter, etc.) /// </summary> /// <param name="headers"></param> public static void SetHostHeaders(this SendHeaders headers) { headers.Set("MT-Host-MachineName", HostMetadataCache.Host.MachineName); headers.Set("MT-Host-ProcessName", HostMetadataCache.Host.ProcessName); headers.Set("MT-Host-ProcessId", HostMetadataCache.Host.ProcessId.ToString("F0")); headers.Set("MT-Host-Assembly", HostMetadataCache.Host.Assembly); headers.Set("MT-Host-AssemblyVersion", HostMetadataCache.Host.AssemblyVersion); headers.Set("MT-Host-MassTransitVersion", HostMetadataCache.Host.MassTransitVersion); headers.Set("MT-Host-FrameworkVersion", HostMetadataCache.Host.FrameworkVersion); headers.Set("MT-Host-OperatingSystemVersion", HostMetadataCache.Host.OperatingSystemVersion); }
/// <summary> /// Set the host headers on the SendContext (for error, dead-letter, etc.) /// </summary> /// <param name="headers"></param> /// <param name="exceptionContext"></param> public static void SetExceptionHeaders(this SendHeaders headers, ExceptionReceiveContext exceptionContext) { var exception = exceptionContext.Exception.GetBaseException() ?? exceptionContext.Exception; var exceptionMessage = ExceptionUtil.GetMessage(exception); headers.Set(MessageHeaders.Reason, "fault"); headers.Set(MessageHeaders.FaultExceptionType, TypeMetadataCache.GetShortName(exception.GetType())); headers.Set(MessageHeaders.FaultMessage, exceptionMessage); headers.Set(MessageHeaders.FaultTimestamp, exceptionContext.ExceptionTimestamp.ToString("O")); headers.Set(MessageHeaders.FaultStackTrace, ExceptionUtil.GetStackTrace(exception)); if (exceptionContext.TryGetPayload(out ConsumerFaultInfo info)) { headers.Set(MessageHeaders.FaultConsumerType, info.ConsumerType); headers.Set(MessageHeaders.FaultMessageType, info.MessageType); } }
public static void SetHeaders(this IPrimitiveMap dictionary, SendHeaders headers) { foreach (KeyValuePair <string, object> header in headers.GetAll()) { if (header.Value == null) { if (dictionary.Contains(header.Key)) { dictionary.Remove(header.Key); } continue; } if (dictionary.Contains(header.Key)) { continue; } switch (header.Value) { case DateTimeOffset dateTimeOffset: if (_dateTimeOffsetConverter.TryConvert(dateTimeOffset, out long result)) { dictionary[header.Key] = result; } else if (_dateTimeOffsetConverter.TryConvert(dateTimeOffset, out string text)) { dictionary[header.Key] = text; } break; case DateTime dateTime: if (_dateTimeConverter.TryConvert(dateTime, out result)) { dictionary[header.Key] = result; } else if (_dateTimeConverter.TryConvert(dateTime, out string text)) { dictionary[header.Key] = text; } break; case string s: dictionary[header.Key] = s; break; case bool boolValue when boolValue: dictionary[header.Key] = bool.TrueString; break; case IFormattable formatValue: if (header.Value.GetType().IsValueType) { dictionary[header.Key] = header.Value; } else { dictionary[header.Key] = formatValue.ToString(); } break; } if (header.Key == "AMQ_SCHEDULED_DELAY") { headers.Set(header.Key, null); } } }
internal static void SetSentTime(this SendHeaders headers, DateTimeOffset time) { headers.Set(SentTimeHeader, time); }