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