StorageTelemetryPolicy
using Azure.Core;
using System;
namespace Azure.Storage
{
    internal class StorageTelemetryPolicy
    {
        [Flags]
        private enum AzFeatures
        {
            None = 0,
            CseV1 = 1,
            CseV2 = 2
        }
        private const string CseIdentifierV2 = "azstorage-clientsideencryption/2.0";
        private const string CseIdentifierV1 = "azstorage-clientsideencryption/1.0";
        public static StorageTelemetryPolicy  { get; } = new StorageTelemetryPolicy();
        private StorageTelemetryPolicy()
            : this()
        {
        }
        public override void OnSendingRequest(HttpMessage message)
        {
            AzFeatures azFeatures = AzFeatures.None;
            object obj = default(object);
            if (message.TryGetProperty("Azure.Storage.StorageTelemetryPolicy.ClientSideEncryption.V2", ref obj))
                azFeatures |= AzFeatures.CseV2;
            else if (message.TryGetProperty("Azure.Storage.StorageTelemetryPolicy.ClientSideEncryption.V1", ref obj)) {
                azFeatures |= AzFeatures.CseV1;
            }
            if (azFeatures != 0)
                ApplyAzFeatures(message, azFeatures);
        }
        private static void ApplyAzFeatures(HttpMessage message, AzFeatures azFeatures)
        {
            string text = Serialize(azFeatures);
            RequestHeaders headers = message.get_Request().get_Headers();
            string text2 = default(string);
            if (headers.TryGetValue(Names.get_UserAgent(), ref text2) && !text2.Contains(text)) {
                headers = message.get_Request().get_Headers();
                headers.SetValue(Names.get_UserAgent(), TransformUserAgent(text2, text));
            } else {
                headers = message.get_Request().get_Headers();
                headers.SetValue(Names.get_UserAgent(), text);
            }
        }
        private static string Serialize(AzFeatures azFeatures)
        {
            if ((azFeatures & AzFeatures.CseV2) == AzFeatures.CseV2)
                return "azstorage-clientsideencryption/2.0";
            if ((azFeatures & AzFeatures.CseV1) == AzFeatures.CseV1)
                return "azstorage-clientsideencryption/1.0";
            return "";
        }
        private static string TransformUserAgent(string userAgent, string injection)
        {
            if (string.IsNullOrEmpty(injection))
                return userAgent;
            return string.Join(" ", injection, userAgent);
        }
    }
}