public object ConvertFrom()

in src/log4net/Util/TypeConverters/IPAddressConverter.cs [73:139]


		public object ConvertFrom(object source) 
		{
			string str = source as string;
			if (str != null && str.Length > 0) 
			{
				try
				{
#if NET_2_0 || NETCF_2_0

#if !NETCF_2_0
					// Try an explicit parse of string representation of an IPAddress (v4 or v6)
					IPAddress result;
					if (IPAddress.TryParse(str, out result))
					{
						return result;
					}
#endif

					// Try to resolve via DNS. This is a blocking call. 
					// GetHostEntry works with either an IPAddress string or a host name
					IPHostEntry host = Dns.GetHostEntry(str);
					if (host != null && 
						host.AddressList != null && 
						host.AddressList.Length > 0 &&
						host.AddressList[0] != null)
					{
						return host.AddressList[0];
					}
#else
					// Before .NET 2 we need to try to parse the IPAddress from the string first

					// Check if the string only contains IP address valid chars
					if (str.Trim(validIpAddressChars).Length == 0)
					{
						try
						{
							// try to parse the string as an IP address
							return IPAddress.Parse(str);
						}
						catch(FormatException)
						{
							// Ignore a FormatException, try to resolve via DNS
						}
					}

					// Try to resolve via DNS. This is a blocking call.
#if NETSTANDARD
					IPHostEntry host = Dns.GetHostEntryAsync(str).GetAwaiter().GetResult();
#else
					IPHostEntry host = Dns.GetHostByName(str);
#endif
					if (host != null && 
						host.AddressList != null && 
						host.AddressList.Length > 0 &&
						host.AddressList[0] != null)
					{
						return host.AddressList[0];
					}
#endif
				}
				catch(Exception ex)
				{
					throw ConversionNotSupportedException.Create(typeof(IPAddress), source, ex);
				}
			}
			throw ConversionNotSupportedException.Create(typeof(IPAddress), source);
		}