Merge: * dnsfilter: windows: store rules in memory
Close #1088 * commit '6ba1d857ac7961ed5a97a85a328398296c520273': * dnsfilter: windows: store rules in memory * minor
This commit is contained in:
commit
15e6311c63
|
@ -13,6 +13,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
@ -772,18 +773,31 @@ func (d *Dnsfilter) initFiltering(filters map[int]string) error {
|
||||||
list = &urlfilter.StringRuleList{
|
list = &urlfilter.StringRuleList{
|
||||||
ID: 0,
|
ID: 0,
|
||||||
RulesText: dataOrFilePath,
|
RulesText: dataOrFilePath,
|
||||||
IgnoreCosmetic: false,
|
IgnoreCosmetic: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if !fileExists(dataOrFilePath) {
|
} else if !fileExists(dataOrFilePath) {
|
||||||
list = &urlfilter.StringRuleList{
|
list = &urlfilter.StringRuleList{
|
||||||
ID: id,
|
ID: id,
|
||||||
IgnoreCosmetic: false,
|
IgnoreCosmetic: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if runtime.GOOS == "windows" {
|
||||||
|
// On Windows we don't pass a file to urlfilter because
|
||||||
|
// it's difficult to update this file while it's being used.
|
||||||
|
data, err := ioutil.ReadFile(dataOrFilePath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("ioutil.ReadFile(): %s: %s", dataOrFilePath, err)
|
||||||
|
}
|
||||||
|
list = &urlfilter.StringRuleList{
|
||||||
|
ID: id,
|
||||||
|
RulesText: string(data),
|
||||||
|
IgnoreCosmetic: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
var err error
|
var err error
|
||||||
list, err = urlfilter.NewFileRuleList(id, dataOrFilePath, false)
|
list, err = urlfilter.NewFileRuleList(id, dataOrFilePath, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("urlfilter.NewFileRuleList(): %s: %s", dataOrFilePath, err)
|
return fmt.Errorf("urlfilter.NewFileRuleList(): %s: %s", dataOrFilePath, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,8 +217,12 @@ func refreshFilters() (int, error) {
|
||||||
// . For each filter run the download and checksum check operation
|
// . For each filter run the download and checksum check operation
|
||||||
// . For each filter:
|
// . For each filter:
|
||||||
// . If filter data hasn't changed, just set new update time on file
|
// . If filter data hasn't changed, just set new update time on file
|
||||||
// . If filter data has changed: rename the old file, store the new data on disk
|
// . If filter data has changed:
|
||||||
// . Pass new filters to dnsfilter object
|
// . rename the old file (1.txt -> 1.txt.old)
|
||||||
|
// . store the new data on disk (1.txt)
|
||||||
|
// . Pass new filters to dnsfilter object - it analyzes new data while the old filters are still active
|
||||||
|
// . dnsfilter activates new filters
|
||||||
|
// . Remove the old filter files (1.txt.old)
|
||||||
func refreshFiltersIfNecessary(force bool) int {
|
func refreshFiltersIfNecessary(force bool) int {
|
||||||
var updateFilters []filter
|
var updateFilters []filter
|
||||||
var updateFlags []bool // 'true' if filter data has changed
|
var updateFlags []bool // 'true' if filter data has changed
|
||||||
|
@ -431,7 +435,10 @@ func (filter *filter) save() error {
|
||||||
|
|
||||||
func (filter *filter) saveAndBackupOld() error {
|
func (filter *filter) saveAndBackupOld() error {
|
||||||
filterFilePath := filter.Path()
|
filterFilePath := filter.Path()
|
||||||
_ = os.Rename(filterFilePath, filterFilePath+".old")
|
err := os.Rename(filterFilePath, filterFilePath+".old")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return filter.save()
|
return filter.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue