memc.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package memconservative
  2. import (
  3. "runtime"
  4. "github.com/v2fly/v2ray-core/v5/app/router/routercommon"
  5. "github.com/v2fly/v2ray-core/v5/infra/conf/geodata"
  6. )
  7. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  8. type memConservativeLoader struct {
  9. geoipcache GeoIPCache
  10. geositecache GeoSiteCache
  11. }
  12. func (m *memConservativeLoader) LoadIP(filename, country string) ([]*routercommon.CIDR, error) {
  13. defer runtime.GC()
  14. geoip, err := m.geoipcache.Unmarshal(filename, country)
  15. if err != nil {
  16. return nil, newError("failed to decode geodata file: ", filename).Base(err)
  17. }
  18. return geoip.Cidr, nil
  19. }
  20. func (m *memConservativeLoader) LoadSite(filename, list string) ([]*routercommon.Domain, error) {
  21. defer runtime.GC()
  22. geosite, err := m.geositecache.Unmarshal(filename, list)
  23. if err != nil {
  24. return nil, newError("failed to decode geodata file: ", filename).Base(err)
  25. }
  26. return geosite.Domain, nil
  27. }
  28. func newMemConservativeLoader() geodata.LoaderImplementation {
  29. return &memConservativeLoader{make(map[string]*routercommon.GeoIP), make(map[string]*routercommon.GeoSite)}
  30. }
  31. func init() {
  32. geodata.RegisterGeoDataLoaderImplementationCreator("memconservative", newMemConservativeLoader)
  33. }