예제 #1
0
        /// <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());
            }
        }
예제 #3
0
 /// <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);
 }
예제 #4
0
 /// <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);
 }
예제 #5
0
        /// <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);
                }
            }
        }
예제 #7
0
 internal static void SetSentTime(this SendHeaders headers, DateTimeOffset time)
 {
     headers.Set(SentTimeHeader, time);
 }