Beispiel #1
0
        public void CancelSelectedCitiesList()
        {
            StringBuilder strConfig = new StringBuilder();
            int           nStart;

            strConfig.Append(Tor.ReadTorrc());
            if (!String.IsNullOrWhiteSpace(strConfig.ToString()))
            {
                nStart = strConfig.ToString().IndexOf("StrictNodes");
                if (nStart != -1)
                {
                    strConfig.Remove(nStart, 13);
                }

                nStart = strConfig.ToString().IndexOf("ExitNodes");
                if (nStart != -1)
                {
                    int nEnd = strConfig.ToString().IndexOf("\r\n", nStart + 1);
                    if (nEnd < 0)
                    {
                        strConfig.Remove(nStart, strConfig.Length - nStart);
                    }
                    else
                    {
                        strConfig.Remove(nStart, nEnd - nStart);
                    }
                }
                string strResult = strConfig.ToString();

                Tor.WriteTorrc(strResult);

                Task t = Task.Run(() =>
                {
                    bool bResult;
                    bResult = Tor.SendSimpleSignal("SIGNAL RELOAD\r\n");
                    bResult = Tor.SendSimpleSignal("SIGNAL NEWNYM\r\n");
                });
            }
            Settings.Remove("Selected countries list");
            Settings.Remove("Selected cities list");
            Settings.Remove("Selected regions list");

            CountriesViewModel cvm = MSProApp.Locator.CountriesVM;
            StatusViewModel    svm = MSProApp.Locator.StatusVM;

            Device.BeginInvokeOnMainThread(() =>
            {
                if (cvm.SelectedCountriesList.Count > 0)
                {
                    cvm.SelectedCountriesList.Clear();
                }
                if (svm.SelectedRegionsList.Count > 0)
                {
                    svm.SelectedRegionsList.Clear();
                }
                if (SelectedCitiesList.Count > 0)
                {
                    SelectedCitiesList.Clear();
                }
            });

            /*
             * StatusViewModel svm = ((MSProApp)Application.Current).StatusVM;
             * if (svm != null)
             * {
             *  svm.SelectedRegionsList.Clear();
             * }
             * CountriesViewModel cvm = ((MSProApp)Application.Current).CountriesVM;
             * if (cvm != null)
             * {
             *  cvm.SelectedCountriesList.Clear();
             * }
             */
        }
Beispiel #2
0
        public bool ApplySelectedCitiesList()
        {
            if (SelectedCitiesList.Count <= 0)
            {
                return(false);
            }

            //удаление серверов предыдущей страны
            StringBuilder strConfig           = new StringBuilder();
            StringBuilder ExcludedCodesResult = new StringBuilder();
            int           nStart;

            strConfig.Append(Tor.ReadTorrc());
            if (!String.IsNullOrWhiteSpace(strConfig.ToString()))
            {
                nStart = strConfig.ToString().IndexOf("StrictNodes");
                if (nStart != -1)
                {
                    strConfig.Remove(nStart, 13);
                }

                nStart = strConfig.ToString().IndexOf("ExitNodes");
                if (nStart != -1)
                {
                    int nEnd = strConfig.ToString().IndexOf(Environment.NewLine, nStart + 1);
                    if (nEnd < 0)
                    {
                        strConfig.Remove(nStart, strConfig.Length - nStart);
                    }
                    else
                    {
                        strConfig.Remove(nStart, nEnd - nStart);
                    }
                }
                //string strResult = strConfig.ToString();
                //strResult += "\r\n";
            }
            StringBuilder SelectedRoutersFingerprints = new StringBuilder();

            foreach (string SelectedCity in SelectedCitiesList)
            {
                var SelectedCitiesGroup = from SelectedGroup in AllCitiesList
                                          where SelectedGroup.Name == SelectedCity
                                          select SelectedGroup;

                foreach (City curcity in SelectedCitiesGroup)
                {
                    string reply = "";
                    Task   ts    = Task.Run(() =>
                    {
                        //desc/name/
                        reply = Tor.SendSignal("GETINFO desc/name/" + curcity.RouterName + Environment.NewLine);
                    });
                    ts.Wait();
                    if (String.IsNullOrEmpty(reply))
                    {
                        continue;
                    }
                    int    end         = reply.IndexOf("uptime");
                    int    start       = reply.IndexOf("fingerprint ");
                    string fingerprint = reply.Substring(start + 12, end - start - 12);
                    fingerprint = fingerprint.Replace(" ", String.Empty);
                    SelectedRoutersFingerprints.Append(fingerprint);
                    SelectedRoutersFingerprints.Append(",");
                }
            }
            if (SelectedRoutersFingerprints.Length > 0)
            {
                SelectedRoutersFingerprints.Remove(SelectedRoutersFingerprints.Length - 1, 1);
                SelectedRoutersFingerprints.Append(Environment.NewLine);
            }

            //write country codes

            if (!String.IsNullOrEmpty(SelectedRoutersFingerprints.ToString()))
            {
                nStart = strConfig.ToString().IndexOf("StrictNodes");
                if (nStart != -1)
                {
                    strConfig.Remove(nStart, 13);
                }
                nStart = strConfig.ToString().IndexOf("ExitNodes");
                if (nStart != -1)
                {
                    int nEnd = strConfig.ToString().IndexOf(Environment.NewLine, nStart + 1);
                    if (nEnd < 0)
                    {
                        strConfig.Remove(nStart, strConfig.Length - nStart);
                    }
                    else
                    {
                        strConfig.Remove(nStart, nEnd - nStart);
                    }
                }
                strConfig.Append("StrictNodes 1\r\n");
                strConfig.Append("ExitNodes ");
                strConfig.Append(SelectedRoutersFingerprints.ToString());
                Tor.WriteTorrc(strConfig.ToString());
            }
            else
            {
                return(false);
            }

            //смена цепи и перезагрузка настроек tor
            bool bResult;

            Task t = Task.Run(() =>
            {
                bResult = Tor.SendSimpleSignal("SIGNAL RELOAD\r\n");
                bResult = Tor.SendSimpleSignal("SIGNAL NEWNYM\r\n");
            });

            StatusViewModel    svm = MSProApp.Locator.StatusVM;
            CountriesViewModel cvm = MSProApp.Locator.CountriesVM;

            Device.BeginInvokeOnMainThread(() =>
            {
                svm.SelectedRegionsList.ReplaceRange(SelectedCitiesList);
                if (cvm.SelectedCountriesList.Count > 0)
                {
                    cvm.SelectedCountriesList.Clear();
                }
            });

            Settings.SetStringCollection("Selected cities list", SelectedCitiesList);
            Settings.Remove("Selected countries list");
            Settings.SetStringCollection("Selected regions list", SelectedCitiesList);

            return(true);
        }