示例#1
0
        public bool UpdateDomainBlocklist(DomainBlocklist Blocklist)
        {
            List <byte[]> args = new List <byte[]>();

            args.Add(PutBlockEntry(Blocklist));
            List <byte[]> ret = RemoteExec("UpdateDomainBlocklist", args);

            return(ret != null?GetBool(ret[0]) : false);
        }
示例#2
0
 public void AddDefaultLists()
 {
     foreach (var Url in DefaultLists)
     {
         if (!Blocklists.ContainsKey(Url))
         {
             DomainBlocklist blocklist = new DomainBlocklist()
             {
                 Url = Url
             };
             AddDomainBlocklistImpl(blocklist);
         }
     }
 }
示例#3
0
        public bool UpdateDomainBlocklist(DomainBlocklist Blocklist)
        {
            ListLock.EnterWriteLock();
            DomainBlocklist KnownBlocklist;

            if (Blocklists.TryGetValue(Blocklist.Url, out KnownBlocklist))
            {
                KnownBlocklist.Enabled = Blocklist.Enabled;
            }
            else
            {
                AddDomainBlocklistImpl(Blocklist);
            }
            ListLock.ExitWriteLock();

            ReloadBlocklists = MiscFunc.GetUTCTimeMs() + 5 * 1000; // schedule reaload
            return(true);
        }
示例#4
0
        private void LoadList(XmlNode rootNode)
        {
            foreach (XmlNode node in rootNode)
            {
                if (node.Name != "DomainBlocklist")
                {
                    continue;
                }

                DomainBlocklist blocklist = new DomainBlocklist();
                foreach (XmlNode subNode in node)
                {
                    if (subNode.Name == "Url")
                    {
                        blocklist.Url = subNode.InnerText;
                    }
                    else if (subNode.Name == "Enabled")
                    {
                        bool.TryParse(subNode.InnerText, out blocklist.Enabled);
                    }
                    else if (subNode.Name == "LastUpdate")
                    {
                        DateTime dateTime;
                        if (DateTime.TryParse(subNode.InnerText, out dateTime))
                        {
                            blocklist.LastUpdate = dateTime;
                        }
                    }
                    else if (subNode.Name == "EntryCount")
                    {
                        int.TryParse(subNode.InnerText, out blocklist.EntryCount);
                    }
                    else if (subNode.Name == "FileName")
                    {
                        blocklist.FileName = subNode.InnerText;
                    }
                }
                AddDomainBlocklistImpl(blocklist);
            }
        }
示例#5
0
        private bool AddDomainBlocklistImpl(DomainBlocklist Blocklist)
        {
            // WARNING: ListLock must be locked for writing when entering this function.

            if (!Blocklists.ContainsKey(Blocklist.Url))
            {
                if (Blocklist.FileName.Length == 0)
                {
                    Blocklist.FileName = Path.GetFileName(new Uri(Blocklist.Url).LocalPath);
                    //if (Blocklist.FileName.Length == 0)
                    //    Blocklist.FileName = "blocklist";
                }

                if (Blocklist.FileName.Length > 0)
                {
                    string fileName = Blocklist.FileName;
                    for (int i = 0; ;)
                    {
                        bool Found = false;
                        foreach (DomainBlocklist blocklist in Blocklists.Values)
                        {
                            if (blocklist.FileName.Equals(Blocklist.FileName, StringComparison.OrdinalIgnoreCase))
                            {
                                Found = true;
                                break;
                            }
                        }
                        if (!Found)
                        {
                            break;
                        }

                        Blocklist.FileName = fileName + " (" + ++i + ")";
                    }
                }

                Blocklists.Add(Blocklist.Url, Blocklist);
            }
            return(true);
        }
示例#6
0
        public bool RemoveDomainBlocklist(string Url)
        {
            DomainBlocklist Blocklist = null;

            ListLock.EnterWriteLock();
            if (Blocklists.TryGetValue(Url, out Blocklist))
            {
                Blocklists.Remove(Url);
            }
            ListLock.ExitWriteLock();
            if (Blocklist == null)
            {
                return(false);
            }

            string fileName = App.dataPath + @"\DnsBlockLists\" + Blocklist.FileName;

            FileOps.DeleteFile(fileName);

            ReloadBlocklists = MiscFunc.GetUTCTimeMs() + 5 * 1000; // schedule reaload
            return(true);
        }
示例#7
0
 public bool UpdateDomainBlocklist(DomainBlocklist Blocklist)
 {
     return(RemoteExec("UpdateDomainBlocklist", Blocklist, false));
 }
示例#8
0
 protected byte[] PutBlockEntry(DomainBlocklist entry)
 {
     return(PutXmlObj(entry));
 }