Skip to content

Commit

Permalink
[System Browser] Refactor passing SeviceBundle in requestContext + te…
Browse files Browse the repository at this point in the history
…st fixes
  • Loading branch information
bgavrilMS committed May 15, 2019
1 parent d45d732 commit 1c9147e
Show file tree
Hide file tree
Showing 58 changed files with 365 additions and 371 deletions.
77 changes: 75 additions & 2 deletions LibsUnix.sln → LibsNetCore.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2020
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.352
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{9B0B5396-4D95-4C15-82ED-DC22B5A3123F}"
EndProject
Expand All @@ -28,6 +28,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "all", "all", "{2918FEF4-675
build\SolutionWideAnalyzerConfig.ruleset = build\SolutionWideAnalyzerConfig.ruleset
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Identity.Test.Unit.netcore", "tests\Microsoft.Identity.Test.Unit.netcore\Microsoft.Identity.Test.Unit.netcore.csproj", "{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
Expand Down Expand Up @@ -347,6 +349,76 @@ Global
{81DAEEBC-698C-48E8-BD7D-7BE33CE57177}.Release|x64.Build.0 = Release|Any CPU
{81DAEEBC-698C-48E8-BD7D-7BE33CE57177}.Release|x86.ActiveCfg = Release|Any CPU
{81DAEEBC-698C-48E8-BD7D-7BE33CE57177}.Release|x86.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|ARM.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|ARM64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|ARM64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|iPhone.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|x64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|x64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|x86.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.AppStore|x86.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|Any CPU.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|Any CPU.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|ARM.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|ARM.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|ARM64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|ARM64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|iPhone.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|iPhone.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|iPhoneSimulator.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|x64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|x64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|x86.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Appveyor|x86.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|ARM.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|ARM64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|iPhone.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|x64.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|x64.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|x86.ActiveCfg = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Debug|x86.Build.0 = Debug|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|Any CPU.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|ARM.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|ARM.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|ARM64.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|ARM64.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|iPhone.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|iPhone.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|x64.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|x64.Build.0 = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|x86.ActiveCfg = Release|Any CPU
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -357,6 +429,7 @@ Global
{81DAEEBC-698C-48E8-BD7D-7BE33CE57177} = {34BE693E-3496-45A4-B1D2-D3A0E068EEDB}
{A55E8D37-0DFA-48B6-B08D-AFE5947BBBAB} = {E19B0572-BBD7-424E-81D5-E59E6884EB3A}
{2918FEF4-675D-4C4C-9118-F31148CCF11A} = {E19B0572-BBD7-424E-81D5-E59E6884EB3A}
{5F6E69C1-5E78-4A8D-91F2-EF990CE3B2F7} = {9B0B5396-4D95-4C15-82ED-DC22B5A3123F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {020399A9-DC27-4B82-9CAA-EF488665AC27}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System;
using System.Globalization;
using Microsoft.Identity.Client.Core;
using Microsoft.Identity.Client.Internal;
using Microsoft.Identity.Client.Utils;

namespace Microsoft.Identity.Client.ApiConfig.Executors
Expand All @@ -23,10 +22,7 @@ protected AbstractExecutor(IServiceBundle serviceBundle, ClientApplicationBase c

protected RequestContext CreateRequestContextAndLogVersionInfo(Guid telemetryCorrelationId)
{
var requestContext = new RequestContext(
_clientApplicationBase.AppConfig.ClientId,
MsalLogger.Create(telemetryCorrelationId, ServiceBundle.Config),
telemetryCorrelationId);
var requestContext = new RequestContext(ServiceBundle, telemetryCorrelationId);

requestContext.Logger.Info(
string.Format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,7 @@ public PublicClientExecutor(IServiceBundle serviceBundle, PublicClientApplicatio
#endif
return ServiceBundle.PlatformProxy.GetWebUiFactory().CreateAuthenticationDialog(
coreUiParent,
requestContext,
ServiceBundle.PlatformProxy);
requestContext);
}

}
Expand Down
2 changes: 1 addition & 1 deletion src/Microsoft.Identity.Client/ClientApplicationBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ internal static Authority GetAuthority(IServiceBundle serviceBundle, IAccount ac
// For service calls, the request context should be created in the **Executor classes as part of request execution.
private RequestContext CreateRequestContext(Guid telemetryCorrelationId)
{
return new RequestContext(AppConfig.ClientId, MsalLogger.Create(telemetryCorrelationId, ServiceBundle.Config), telemetryCorrelationId);
return new RequestContext(ServiceBundle, telemetryCorrelationId);
}

/// <summary>
Expand Down
25 changes: 6 additions & 19 deletions src/Microsoft.Identity.Client/Core/RequestContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,15 @@ namespace Microsoft.Identity.Client.Core
{
internal class RequestContext
{
public RequestContext(string clientId, ICoreLogger logger, Guid telemetryCorrelationId)
{
ClientId = string.IsNullOrWhiteSpace(clientId) ? "unset_client_id" : clientId;
Logger = logger;
TelemetryCorrelationId = telemetryCorrelationId.AsMatsCorrelationId();
}

public string TelemetryCorrelationId { get; }
public string ClientId { get; set; }
public ICoreLogger Logger { get; }
public IServiceBundle ServiceBundle { get; }

public ICoreLogger Logger { get; set; }

public static RequestContext CreateForTest(IServiceBundle serviceBundle = null)
public RequestContext(IServiceBundle serviceBundle, Guid telemetryCorrelationId)
{
var telemetryCorrelationId = Guid.NewGuid();

var logger = serviceBundle?.DefaultLogger ?? MsalLogger.Create(
telemetryCorrelationId,
null,
isDefaultPlatformLoggingEnabled: true);

return new RequestContext(null, logger, telemetryCorrelationId);
ServiceBundle = serviceBundle ?? throw new ArgumentNullException(nameof(serviceBundle));
Logger = MsalLogger.Create(telemetryCorrelationId, ServiceBundle.Config);
TelemetryCorrelationId = telemetryCorrelationId.AsMatsCorrelationId();
}
}
}
30 changes: 15 additions & 15 deletions src/Microsoft.Identity.Client/Http/HttpManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,41 +38,41 @@ protected virtual HttpClient GetHttpClient()
Uri endpoint,
IDictionary<string, string> headers,
IDictionary<string, string> bodyParameters,
RequestContext requestContext)
ICoreLogger logger)
{
HttpContent body = bodyParameters == null ? null : new FormUrlEncodedContent(bodyParameters);
return await SendPostAsync(endpoint, headers, body, requestContext).ConfigureAwait(false);
return await SendPostAsync(endpoint, headers, body, logger).ConfigureAwait(false);
}

public async Task<HttpResponse> SendPostAsync(
Uri endpoint,
IDictionary<string, string> headers,
HttpContent body,
RequestContext requestContext)
ICoreLogger logger)
{
return await ExecuteWithRetryAsync(endpoint, headers, body, HttpMethod.Post, requestContext).ConfigureAwait(false);
return await ExecuteWithRetryAsync(endpoint, headers, body, HttpMethod.Post, logger).ConfigureAwait(false);
}

public async Task<HttpResponse> SendGetAsync(
Uri endpoint,
IDictionary<string, string> headers,
RequestContext requestContext)
ICoreLogger logger)
{
return await ExecuteWithRetryAsync(endpoint, headers, null, HttpMethod.Get, requestContext).ConfigureAwait(false);
return await ExecuteWithRetryAsync(endpoint, headers, null, HttpMethod.Get, logger).ConfigureAwait(false);
}

/// <summary>
/// Performs the POST request just like <see cref="SendPostAsync(Uri, IDictionary{string, string}, HttpContent, RequestContext)"/>
/// Performs the POST request just like <see cref="SendPostAsync(Uri, IDictionary{string, string}, HttpContent, ICoreLogger)"/>
/// but does not throw a ServiceUnavailable service exception. Instead, it returns the <see cref="HttpResponse"/> associated
/// with the request.
/// </summary>
public async Task<HttpResponse> SendPostForceResponseAsync(
Uri uri,
Dictionary<string, string> headers,
StringContent body,
RequestContext requestContext)
ICoreLogger logger)
{
return await ExecuteWithRetryAsync(uri, headers, body, HttpMethod.Post, requestContext, doNotThrow: true).ConfigureAwait(false);
return await ExecuteWithRetryAsync(uri, headers, body, HttpMethod.Post, logger, doNotThrow: true).ConfigureAwait(false);
}

private HttpRequestMessage CreateRequestMessage(Uri endpoint, IDictionary<string, string> headers)
Expand All @@ -95,7 +95,7 @@ private HttpRequestMessage CreateRequestMessage(Uri endpoint, IDictionary<string
IDictionary<string, string> headers,
HttpContent body,
HttpMethod method,
RequestContext requestContext,
ICoreLogger logger,
bool doNotThrow = false,
bool retry = true)
{
Expand All @@ -120,7 +120,7 @@ private HttpRequestMessage CreateRequestMessage(Uri endpoint, IDictionary<string
return response;
}

requestContext.Logger.Info(string.Format(CultureInfo.InvariantCulture,
logger.Info(string.Format(CultureInfo.InvariantCulture,
MsalErrorMessage.HttpRequestUnsuccessful,
(int)response.StatusCode, response.StatusCode));

Expand All @@ -131,7 +131,7 @@ private HttpRequestMessage CreateRequestMessage(Uri endpoint, IDictionary<string
}
catch (TaskCanceledException exception)
{
requestContext.Logger.Error("The HTTP request failed or it was canceled. " + exception.Message);
logger.Error("The HTTP request failed or it was canceled. " + exception.Message);
isRetryable = true;
timeoutException = exception;
}
Expand All @@ -140,19 +140,19 @@ private HttpRequestMessage CreateRequestMessage(Uri endpoint, IDictionary<string
{
if (retry)
{
requestContext.Logger.Info("Retrying one more time..");
logger.Info("Retrying one more time..");
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
return await ExecuteWithRetryAsync(
endpoint,
headers,
body,
method,
requestContext,
logger,
doNotThrow,
retry: false).ConfigureAwait(false);
}

requestContext.Logger.Error("Request retry failed.");
logger.Error("Request retry failed.");
if (timeoutException != null)
{
throw new MsalServiceException(
Expand Down
8 changes: 4 additions & 4 deletions src/Microsoft.Identity.Client/Http/IHttpManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@ internal interface IHttpManager
Uri endpoint,
IDictionary<string, string> headers,
IDictionary<string, string> bodyParameters,
RequestContext requestContext);
ICoreLogger logger);

Task<HttpResponse> SendPostAsync(
Uri endpoint,
IDictionary<string, string> headers,
HttpContent body,
RequestContext requestContext);
ICoreLogger logger);

Task<HttpResponse> SendGetAsync(
Uri endpoint,
IDictionary<string, string> headers,
RequestContext requestContext);
ICoreLogger logger);

Task<HttpResponse> SendPostForceResponseAsync(
Uri uri,
Dictionary<string, string> headers,
StringContent body,
RequestContext requestContext);
ICoreLogger logger);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public AdfsOpenIdConfigurationEndpointManager(IServiceBundle serviceBundle)
drsResponse.IdentityProviderService.PassiveAuthEndpoint.Host,
resource);

var httpResponse = await _serviceBundle.HttpManager.SendGetAsync(new Uri(webFingerUrl), null, requestContext)
var httpResponse = await _serviceBundle.HttpManager.SendGetAsync(new Uri(webFingerUrl), null, requestContext.Logger)
.ConfigureAwait(false);

if (httpResponse.StatusCode != HttpStatusCode.OK)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ private void VerifyAuthorizationResult()

if (_authorizationResult.Status != AuthorizationStatus.Success)
{
throw new MsalServiceException(_authorizationResult.Error, _authorizationResult.ErrorDescription);
throw new MsalClientException(_authorizationResult.Error, _authorizationResult.ErrorDescription ?? "Unkown error.");
}
}
}
Expand Down
9 changes: 6 additions & 3 deletions src/Microsoft.Identity.Client/OAuth2/OAuth2Client.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,12 @@ internal async Task<T> ExecuteRequestAsync<T>(Uri endPoint, HttpMethod method, R
{
if (method == HttpMethod.Post)
{
response = await _httpManager.SendPostAsync(endpointUri, _headers, _bodyParameters, requestContext)
response = await _httpManager.SendPostAsync(endpointUri, _headers, _bodyParameters, requestContext.Logger)
.ConfigureAwait(false);
}
else
{
response = await _httpManager.SendGetAsync(endpointUri, _headers, requestContext).ConfigureAwait(false);
response = await _httpManager.SendGetAsync(endpointUri, _headers, requestContext.Logger).ConfigureAwait(false);
}

httpEvent.HttpResponseStatus = (int)response.StatusCode;
Expand All @@ -109,7 +109,10 @@ internal async Task<T> ExecuteRequestAsync<T>(Uri endPoint, HttpMethod method, R
if (headersAsDictionary.ContainsKey("x-ms-clitelem") &&
headersAsDictionary["x-ms-clitelem"] != null)
{
XmsCliTelemInfo xmsCliTeleminfo = new XmsCliTelemInfoParser().ParseXMsTelemHeader(headersAsDictionary["x-ms-clitelem"], requestContext);
XmsCliTelemInfo xmsCliTeleminfo = new XmsCliTelemInfoParser().ParseXMsTelemHeader(
headersAsDictionary["x-ms-clitelem"],
requestContext.Logger);

if (xmsCliTeleminfo != null)
{
httpEvent.TokenAge = xmsCliTeleminfo.TokenAge;
Expand Down
Loading

0 comments on commit 1c9147e

Please sign in to comment.