ModernHttpClient.Android
Utility.cs
using System;
using System.Globalization;
using System.Net.Http;
namespace ModernHttpClient
{
internal static clast Utility
{
public static bool MatchHostnameToPattern(string hostname, string pattern)
{
// check if this is a pattern
int index = pattern.IndexOf('*');
if (index == -1)
{
// not a pattern, do a direct case-insensitive comparison
return (string.Compare(hostname, pattern, StringComparison.OrdinalIgnoreCase) == 0);
}
// check pattern validity
// A "*" wildcard character MAY be used as the left-most name component in the certificate.
// unless this is the last char (valid)
if (index != pattern.Length - 1)
{
// then the next char must be a dot .'.
if (pattern[index + 1] != '.')
{
return false;
}
}
// only one (A) wildcard is supported
int i2 = pattern.IndexOf('*', index + 1);
if (i2 != -1) return false;
// match the end of the pattern
string end = pattern.Substring(index + 1);
int length = hostname.Length - end.Length;
// no point to check a pattern that is longer than the hostname
if (length