public static void ApplySettings(TLProxyConfigBase proxyConfigBase, bool isEnabled, TLProxyBase proxy)
        {
            var proxyConfig = proxyConfigBase ?? TLProxyConfigBase.Empty;

            var proxyConfig76 = proxyConfig as TLProxyConfig76;

            if (proxyConfig76 == null)
            {
                return;
            }

            proxyConfig.IsEnabled = new TLBool(isEnabled);

            var added = false;

            for (var i = 0; i < proxyConfig76.Items.Count; i++)
            {
                var proxyItem = proxyConfig76.Items[i];
                if (TLProxyBase.ProxyEquals(proxyItem, proxy))
                {
                    proxyConfig76.SelectedIndex = new TLInt(i);
                    added = true;
                    break;
                }
            }
            if (!added)
            {
                proxyConfig76.Items.Insert(0, proxy);
                proxyConfig76.SelectedIndex = new TLInt(0);
            }

            SetReconnect(true, proxyConfig76, proxy);
        }
Esempio n. 2
0
        private void UpdateProxySubtitle(TLProxyConfigBase proxyConfig)
        {
            var proxy = proxyConfig != null && proxyConfig.IsEnabled.Value && !proxyConfig.IsEmpty
                ? proxyConfig.GetProxy()
                : null;

            ProxySubtitle = proxy == null ? AppResources.Disabled : (proxy is TLSocks5Proxy ? AppResources.Socks5 : AppResources.MTProto);
        }
Esempio n. 3
0
        public HttpTransport(string address, MTProtoTransportType mtProtoType, TLProxyConfigBase proxyConfig)
        {
            var host = string.IsNullOrEmpty(address) ? Constants.FirstServerIpAddress : address;

            _host = string.Format("http://{0}:80/api", host);

            MTProtoType = mtProtoType;
            ProxyConfig = proxyConfig;

            MessageIdDict = new Dictionary <long, long>();
        }
Esempio n. 4
0
        public TLProxyConfigBase GetProxyConfig()
        {
            if (_proxyConfig != null)
            {
                return(_proxyConfig);
            }

            _proxyConfig = TLUtils.OpenObjectFromMTProtoFile <TLProxyConfigBase>(_proxyConfigSyncRoot, Constants.ProxyConfigFileName) ?? TLProxyConfigBase.Empty;

            _proxyConfig = _proxyConfig.ToLastProxyConfig();

            return(_proxyConfig);
        }
Esempio n. 5
0
        protected TcpTransportBase(string host, int port, string staticHost, int staticPort, MTProtoTransportType mtProtoType, TLProxyConfigBase proxyConfig)
        {
            MessageIdDict = new Dictionary <long, long>();

            Host        = host;
            Port        = port;
            StaticHost  = staticHost;
            StaticPort  = staticPort;
            MTProtoType = mtProtoType;
            ProxyConfig = proxyConfig;

            var random = new Random();

            Id = random.Next(0, 255);

            _timer = new Timer(OnTimerTick, _timer, Timeout.Infinite, Timeout.Infinite);
        }
Esempio n. 6
0
        public void SetProxyConfig(TLProxyConfigBase proxyConfig)
        {
            _proxyConfig = proxyConfig;

            TLUtils.SaveObjectToMTProtoFile(_proxyConfigSyncRoot, Constants.ProxyConfigFileName, _proxyConfig);
        }
Esempio n. 7
0
 public ProxyChangedEventArgs(TLProxyConfigBase proxyConfig)
 {
     ProxyConfig = proxyConfig;
 }
Esempio n. 8
0
        public TcpTransport(string host, int port, string staticHost, int staticPort, MTProtoTransportType mtProtoType, TLProxyConfigBase proxyConfig)
            : base(host, port, staticHost, staticPort, mtProtoType, proxyConfig)
        {
            // ipv6 support
            _address = proxyConfig != null && !proxyConfig.IsEmpty
                ? IPAddress.Parse(staticHost)
                : IPAddress.Parse(host);

            _socket = new Socket(_address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            _buffer = new byte[BufferSize];
            _listener.SetBuffer(_buffer, 0, _buffer.Length);
            _listener.Completed += OnReceived;
        }
        private static void SetReconnect(bool reconnect, TLProxyConfigBase proxyConfig, TLProxyBase proxy)
        {
            Telegram.Api.Helpers.Execute.ShowDebugMessage(string.Format("SetRecconect recconect={0} proxyConfig={1}", reconnect, proxyConfig));
            if (proxyConfig == null)
            {
                return;
            }

            Set(proxyConfig);

            var transportService = IoC.Get <ITransportService>();
            var mtProtoService   = IoC.Get <IMTProtoService>();
            var cacheService     = IoC.Get <ICacheService>();
            var eventAggregator  = IoC.Get <ITelegramEventAggregator>();

            if (reconnect)
            {
                var promoDialogs = cacheService.GetDialogs().OfType <TLDialog71>().Where(x => x.IsPromo).ToList();
                foreach (var dialog in promoDialogs)
                {
                    cacheService.UpdateDialogPromo(dialog, false);
                }

                cacheService.SyncProxyData(null, result => { });

                transportService.Close();
                mtProtoService.PingAsync(TLLong.Random(),
                                         result => Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
                {
                    if (proxy != null)
                    {
                        var now         = TLUtils.DateToUniversalTimeTLInt(mtProtoService.ClientTicksDelta, DateTime.Now);
                        proxy.CheckTime = now;
                        proxy.Status    = ProxyStatus.Available;
                        proxy.Ping      = mtProtoService.GetActiveTransport().Ping > 0
                                ? new TLInt((int)mtProtoService.GetActiveTransport().Ping)
                                : null;

                        Set(proxyConfig);
                    }

                    var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                    if (isAuthorized)
                    {
                        mtProtoService.GetProxyDataAsync(
                            result2 =>
                        {
                            var proxyDataPromo = result2 as TLProxyDataPromo;
                            if (proxyDataPromo != null)
                            {
                                mtProtoService.GetPromoDialogAsync(mtProtoService.PeerToInputPeer(proxyDataPromo.Peer),
                                                                   result3 =>
                                {
                                    if (result3.Dialogs.Count > 0)
                                    {
                                        eventAggregator.Publish(new ProxyDataChangedEventArgs(proxyDataPromo));
                                    }
                                });
                            }
                            else
                            {
                            }

                            Telegram.Api.Helpers.Execute.ShowDebugMessage(result2.ToString());
                        });
                    }
                }));
            }

            eventAggregator.Publish(new ProxyChangedEventArgs(proxyConfig));
        }
Esempio n. 10
0
        private static void Set(TLProxyConfigBase proxyConfig)
        {
            var transportService = IoC.Get <ITransportService>();

            transportService.SetProxyConfig(proxyConfig);
        }
Esempio n. 11
0
        public NativeTcpTransport(string host, int port, string staticHost, int staticPort, MTProtoTransportType mtProtoType, short protocolDCId, byte[] protocolSecret, TLProxyConfigBase proxyConfig)
            : base(host, port, staticHost, staticPort, mtProtoType, proxyConfig)
        {
//            System.Diagnostics.Debug.WriteLine(
//                "  [NativeTcpTransport] .ctor begin host={0} port={1} static_host={2} static_port={3} type={4} protocol_dcid={5} protocol_secret={6} proxy={7}",
//                host, port, staticHost, staticPort, mtProtoType, protocolDCId, protocolSecret, proxyConfig);

            ActualHost = host;
            ActualPort = port;

            var           ipv4          = true;
            ProxySettings proxySettings = null;

            if (proxyConfig != null && proxyConfig.IsEnabled.Value && !proxyConfig.IsEmpty)
            {
                var socks5Proxy = proxyConfig.GetProxy() as TLSocks5Proxy;
                if (socks5Proxy != null)
                {
                    try
                    {
                        ipv4 = new HostName(socks5Proxy.Server.ToString()).Type == HostNameType.Ipv4;
                    }
                    catch (Exception ex)
                    {
                    }
                    proxySettings = new ProxySettings
                    {
                        Type     = ProxyType.Socks5,
                        Host     = socks5Proxy.Server.ToString(),
                        Port     = socks5Proxy.Port.Value,
                        Username = socks5Proxy.Username.ToString(),
                        Password = socks5Proxy.Password.ToString(),
                        IPv4     = ipv4
                    };

                    ActualHost     = staticHost;
                    ActualPort     = staticPort;
                    protocolSecret = null;
                    protocolDCId   = protocolDCId;
                }
                var mtProtoProxy = proxyConfig.GetProxy() as TLMTProtoProxy;
                if (mtProtoProxy != null)
                {
                    try
                    {
                        ipv4 = new HostName(mtProtoProxy.Server.ToString()).Type == HostNameType.Ipv4;
                    }
                    catch (Exception ex)
                    {
                    }
                    proxySettings = new ProxySettings
                    {
                        Type   = ProxyType.MTProto,
                        Host   = mtProtoProxy.Server.ToString(),
                        Port   = mtProtoProxy.Port.Value,
                        Secret = TLUtils.ParseSecret(mtProtoProxy.Secret),
                        IPv4   = ipv4
                    };

                    ActualHost = staticHost;
                    ActualPort = staticPort;
                }
            }

            try
            {
                ipv4 = new HostName(ActualHost).Type == HostNameType.Ipv4;
            }
            catch (Exception ex)
            {
            }

            var connectionSettings = new ConnectionSettings
            {
                Host           = ActualHost,
                Port           = ActualPort,
                IPv4           = ipv4,
                ProtocolDCId   = protocolDCId,
                ProtocolSecret = protocolSecret
            };

            _proxySettings = proxySettings;

//            var proxyString = proxySettings == null
//                ? "null"
//                : string.Format("[host={0} port={1} ipv4={2} type={3} secret={4} username={5} password={6}]",
//                proxySettings.Host,
//                proxySettings.Port,
//                proxySettings.IPv4,
//                proxySettings.Type,
//                proxySettings.Secret,
//                proxySettings.Username,
//                proxySettings.Password);
//            System.Diagnostics.Debug.WriteLine(
//                "  [NativeTcpTransport] .ctor end host={0} port={1} ipv4={2} protocol_dcid={3} protocol_secret={4} proxy={5}",
//                connectionSettings.Host, connectionSettings.Port, connectionSettings.IPv4, connectionSettings.ProtocolDCId, connectionSettings.ProtocolSecret, proxyString);

            _wrapper                 = new ConnectionSocketWrapper(connectionSettings, proxySettings);
            _wrapper.Closed         += Wrapper_OnClosed;
            _wrapper.PacketReceived += Wrapper_OnPacketReceived;
        }
Esempio n. 12
0
        public TcpTransportWinRT(string host, int port, string staticHost, int staticPort, MTProtoTransportType mtProtoType, TLProxyConfigBase proxyConfig)
            : base(host, port, staticHost, staticPort, mtProtoType, proxyConfig)
        {
            _timeout = 25.0;
            _socket  = new StreamSocket();
            var control = _socket.Control;

            control.QualityOfService = SocketQualityOfService.LowLatency;

            _dataReader = new DataReader(_socket.InputStream)
            {
                InputStreamOptions = InputStreamOptions.Partial
            };
            _dataWriter = new DataWriter(_socket.OutputStream);
        }