Beispiel #1
0
        /// <summary>
        ///     The stat timer_ tick.
        /// </summary>
        /// <param name="sender">
        ///     The sender.
        /// </param>
        /// <param name="e">
        ///     The e.
        /// </param>
        private void StatTimerTick(object sender, EventArgs e)
        {
            if (this.listener == null)
            {
                return;
            }

            this.downloadSpeed = (this.listener.AverageReceivingSpeed + this.downloadSpeed) / 2;
            this.uploadSpeed   = (this.listener.AverageSendingSpeed + this.uploadSpeed) / 2;
            if (this.listener != null && this.listener.Status.HasFlag(ProxyController.ControllerStatus.Proxy))
            {
                Program.Notify.Text = string.Format(
                    "Z A Я A\r\nCurrent Transfer Rate: {0}/s",
                    Common.FormatFileSizeAsString(this.downloadSpeed + this.uploadSpeed));
            }

            this.downloadPoints.Enqueue(new ChartPoint(this.downloadSpeed));
            this.uploadPoints.Enqueue(new ChartPoint(this.uploadSpeed));

            if (!this.Visible)
            {
                return;
            }

            this.lbl_stat_acceptingthreads.Text =
                this.listener.AcceptingConnections.ToString(CultureInfo.InvariantCulture);
            this.lbl_stat_activeconnections.Text =
                this.listener.RoutingConnections.ToString(CultureInfo.InvariantCulture);
            SplitBySpace(
                Common.FormatFileSizeAsString(this.listener.ReceivedBytes),
                this.lbl_stat_downloaded,
                this.lbl_stat_downloaded_v);
            SplitBySpace(
                Common.FormatFileSizeAsString(this.listener.SentBytes),
                this.lbl_stat_uploaded,
                this.lbl_stat_uploaded_v);
            SplitBySpace(Common.FormatFileSizeAsString(this.downloadSpeed), this.cpb_stat_downloadrate);
            SplitBySpace(Common.FormatFileSizeAsString(this.uploadSpeed), this.cpb_stat_uploadrate);
            TimeSpan last5Min = new TimeSpan(Environment.TickCount - (4 * 60 * 1000));

            this.cpb_stat_downloadrate.Value = this.downloadSpeed
                                               / Math.Max(
                (float)
                this.downloadPoints.Where(t => t.Time > last5Min).Max(t => t.Data),
                1) * 100;

            this.cpb_stat_uploadrate.Value = this.uploadSpeed
                                             / Math.Max(
                (float)this.uploadPoints.Where(t => t.Time > last5Min).Max(t => t.Data),
                1) * 100;
        }
Beispiel #2
0
        /// <summary>
        ///     The start server.
        /// </summary>
        /// <returns>
        ///     The <see cref="bool" />.
        /// </returns>
        /// <exception cref="ArgumentException">
        ///     Username is null or empty
        /// </exception>
        /// <exception cref="Exception">
        ///     Failed to start server
        /// </exception>
        public bool StartServer(bool compatibility = false)
        {
            try
            {
                if (string.IsNullOrEmpty(Settings.Default.UserAndPassword_User))
                {
                    // ReSharper disable once NotResolvedInText
                    throw new ArgumentException(@"Invalid value.", "UserName");
                }

                if (this.listener != null)
                {
                    this.StopServer();
                }
                else
                {
                    this.listener = new ProxyController(null, null, 0);
                    this.listener.AutoDisconnectedDueToFailureNotify += this.FailDisconnected;
                }

                this.Enabled = false;

                this.listener.Ip   = IPAddress.Loopback;
                this.listener.Port = 0;
                this.listener.IsAutoConfigEnable = false;
                this.listener.IsHttpSupported    = false;
                this.listener.IsHttpsSupported   = false;
                this.listener.IsSocksSupported   = true;
                this.listener.SendPacketSize     = Settings.Default.Connection_SendPacketSize;
                this.listener.ReceivePacketSize  = Settings.Default.Connection_RecPacketSize;
                this.listener.AutoDisconnect     = Settings.Default.Connection_StopOnInterrupt;

                this.listener.ErrorRenderer.EnableOnHttp    = false;
                this.listener.ErrorRenderer.EnableOnPort80  = false;
                this.listener.ErrorRenderer.EnableOnPort443 = false;

                this.listener.DnsResolver.DnsResolverSupported        =
                    this.listener.DnsResolver.DnsResolverUdpSupported = false;
                this.listener.DnsResolver.DnsResolverServerIp         = IPAddress.Parse(Settings.Default.DNS_IPAddress);

                this.listener.SmartPear.DetectorTreatPort80AsHttp   = false;
                this.listener.SmartPear.ForwarderHttpEnable         = false;
                this.listener.SmartPear.DetectorHttpCheckEnable     = false;
                this.listener.SmartPear.DetectorHttpPattern         = string.Empty;
                this.listener.SmartPear.DetectorDnsPoisoningPattern = string.Empty;
                this.listener.SmartPear.DetectorDnsPoisoningEnable  = false;
                this.listener.SmartPear.ForwarderHttpsEnable        = false;
                this.listener.SmartPear.DetectorTimeoutEnable       = false;
                this.listener.SmartPear.DetectorTimeout             = 0;
                this.listener.SmartPear.ForwarderTreatPort80AsHttp  = false;
                this.listener.SmartPear.ForwarderSocksEnable        = false;
                this.listener.SmartPear.ForwarderHttpList.Clear();
                this.listener.SmartPear.ForwarderDirectList.Clear();

                string serverAddress = Settings.Default.ServerAddress;
                ushort serverPort    = Settings.Default.ServerPort;
                int    pIndex        = serverAddress.IndexOf(":", StringComparison.Ordinal);
                if (pIndex > 0)
                {
                    if (!ushort.TryParse(serverAddress.Substring(pIndex + 1), out serverPort))
                    {
                        serverPort = Settings.Default.ServerPort;
                    }
                    serverAddress = serverAddress.Substring(0, pIndex);
                }

                ServerType ser = new PeaRoxy(
                    serverAddress,
                    serverPort,
                    string.Empty,
                    Settings.Default.UserAndPassword_User,
                    Settings.Default.UserAndPassword_Pass,
                    Common.EncryptionTypes.SimpleXor)
                {
                    ForgerCompatibility = compatibility
                };

                ser.NoDataTimeout          = Settings.Default.Connection_NoDataTimeout;
                this.listener.ActiveServer = ser;

                this.listener.TestServerAsyc(
                    (suc, mes) => this.Invoke(
                        (SimpleVoidDelegate) delegate
                {
                    try
                    {
                        if (suc)
                        {
                            this.listener.Start();

                            // Grabber Pro-Listen Settings
                            if ((GrabberType)Settings.Default.Grabber == GrabberType.Tap)
                            {
                                List <IPAddress> hostIps = new List <IPAddress>();
                                if (Common.IsIpAddress(serverAddress))
                                {
                                    hostIps.Add(IPAddress.Parse(serverAddress));
                                }
                                else
                                {
                                    hostIps.AddRange(Dns.GetHostEntry(serverAddress).AddressList);
                                }
                                TapTunnelModule.ExceptionIPs = hostIps.ToArray();
                            }

                            this.ReConfig(false);

                            Program.Notify.ShowBalloonTip(
                                2000,
                                "Z A Я A",
                                "Connected to the server\r\n" + ser.ToString(),
                                ToolTipIcon.Info);
                            Program.Notify.Text = @"Z A Я A - Working";
                            this.Status         = CurrentStatus.Connected;
                            this.RefreshStatus();
                        }
                        else
                        {
                            throw new Exception(mes);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (this.listener != null)
                        {
                            this.listener.Stop();
                        }

                        if (this.listener != null && this.listener.ActiveServer is PeaRoxy && !compatibility)
                        {
                            this.StartServer(true);
                            return;
                        }

                        this.ShowDialog(
                            "Error: " + ex.Message + ex.StackTrace,
                            "Start Error",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Error);

                        this.RefreshStatus();
                        if (!this.updaterWorker.IsBusy)
                        {
                            this.updaterWorker.RunWorkerAsync();
                        }
                    }
                },
                        new object[] { }));

                return(true);
            }
            catch (Exception ex)
            {
                this.ShowDialog("Error: " + ex.Message, "Start Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                if (this.listener != null)
                {
                    this.listener.Stop();
                }

                this.RefreshStatus();
            }

            return(false);
        }