You've already forked linux-packaging-mono
Imported Upstream version 4.3.2.467
Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d
This commit is contained in:
68
external/referencesource/System.Web/Util/TlsTokenBindingHandle.cs
vendored
Normal file
68
external/referencesource/System.Web/Util/TlsTokenBindingHandle.cs
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="TlsTokenBindingHandle.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.Util {
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Web.Hosting;
|
||||
|
||||
internal sealed class TlsTokenBindingHandle : HeapAllocHandle {
|
||||
[SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Justification = @"Pointer is valid while this SafeHandle is valid.")]
|
||||
private readonly IntPtr _providedTokenBlob;
|
||||
private readonly uint _providedTokenBlobSize;
|
||||
[SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Justification = @"Pointer is valid while this SafeHandle is valid.")]
|
||||
private readonly IntPtr _referredTokenBlob;
|
||||
private readonly uint _referredtokenBlobSize;
|
||||
|
||||
internal TlsTokenBindingHandle(IntPtr mgdContext) {
|
||||
int hr = UnsafeIISMethods.MgdGetTlsTokenBindingIdentifiers(
|
||||
mgdContext,
|
||||
ref handle,
|
||||
out _providedTokenBlob,
|
||||
out _providedTokenBlobSize,
|
||||
out _referredTokenBlob,
|
||||
out _referredtokenBlobSize);
|
||||
Misc.ThrowIfFailedHr(hr);
|
||||
}
|
||||
|
||||
public byte[] GetProvidedToken() {
|
||||
return GetTokenImpl(_providedTokenBlob, _providedTokenBlobSize);
|
||||
}
|
||||
|
||||
public byte[] GetReferredToken() {
|
||||
return GetTokenImpl(_referredTokenBlob, _referredtokenBlobSize);
|
||||
}
|
||||
|
||||
private byte[] GetTokenImpl(IntPtr blob, uint blobSize) {
|
||||
if (blob == IntPtr.Zero || blobSize == 0) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
byte[] retVal = new byte[blobSize];
|
||||
int length = retVal.Length; // checks for overflow
|
||||
bool refAdded = false;
|
||||
|
||||
RuntimeHelpers.PrepareConstrainedRegions();
|
||||
try
|
||||
{
|
||||
DangerousAddRef(ref refAdded);
|
||||
Marshal.Copy(blob, retVal, 0, length);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (refAdded)
|
||||
{
|
||||
DangerousRelease();
|
||||
}
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user