diff --git a/TLSharp.Core/DataCenterIPVersion.cs b/TLSharp.Core/DataCenterIPVersion.cs index 3eca471..7b8b825 100644 --- a/TLSharp.Core/DataCenterIPVersion.cs +++ b/TLSharp.Core/DataCenterIPVersion.cs @@ -7,24 +7,24 @@ public enum DataCenterIPVersion { /// - /// Prefers IPv6 addresses if any is passed by Telegram + /// Picks the first available address passed by Telegram /// - Default = 0, + Default, /// /// Takes only IPv4 addresses /// - OnlyIPv4 = 1, + OnlyIPv4, /// /// Takes only IPv6 addresses /// - OnlyIPv6 = 2, + OnlyIPv6, /// /// Connection to IPv4 addresses is preferred to IPv6 addresses /// - PreferIPv4 = 3, + PreferIPv4, /// /// Connection to IPv6 addresses is preferred to IPv4 addresses /// - PreferIPv6 = 4, + PreferIPv6, } } diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index ca405bf..f8adc88 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -121,12 +121,18 @@ namespace TLSharp.Core || dcIpVersion == DataCenterIPVersion.PreferIPv4 // we can take both types of address || dcIpVersion == DataCenterIPVersion.PreferIPv6 // we can take both types of address ) - ).OrderBy(d => d.Ipv6); - - if (dcs.Count() == 0) - throw new Exception($"Telegram server didn't provide us with any IPAddress that matches your preferences. If you chose OnlyIPvX, try switch to PreferIPvX instead."); - - var dc = dcIpVersion == DataCenterIPVersion.PreferIPv4 ? dcs.First() : dcs.Last(); // ipv4 addresses are at the beginning of the list because it was ordered + ); + + TLDcOption dc; + if (dcIpVersion != DataCenterIPVersion.Default) + { + if (dcs.Count() == 0) + throw new Exception($"Telegram server didn't provide us with any IPAddress that matches your preferences. If you chose OnlyIPvX, try switch to PreferIPvX instead."); + dcs = dcs.OrderBy(d => d.Ipv6); + dc = dcIpVersion == DataCenterIPVersion.PreferIPv4 ? dcs.First() : dcs.Last(); // ipv4 addresses are at the beginning of the list because it was ordered + } + else + dc = dcs.First(); var dataCenter = new DataCenter (dcId, dc.IpAddress, dc.Port);