clash/component/fakeip/cachefile.go

66 lines
1.5 KiB
Go
Raw Normal View History

2021-10-11 12:48:58 +00:00
package fakeip
import (
"net/netip"
2021-10-11 12:48:58 +00:00
"github.com/Dreamacro/clash/component/profile/cachefile"
)
type cachefileStore struct {
cache *cachefile.CacheFile
}
// GetByHost implements store.GetByHost
func (c *cachefileStore) GetByHost(host string) (netip.Addr, bool) {
2021-10-11 12:48:58 +00:00
elm := c.cache.GetFakeip([]byte(host))
if elm == nil {
return netip.Addr{}, false
}
if len(elm) == 4 {
return netip.AddrFrom4(*(*[4]byte)(elm)), true
} else {
return netip.AddrFrom16(*(*[16]byte)(elm)), true
2021-10-11 12:48:58 +00:00
}
}
// PutByHost implements store.PutByHost
func (c *cachefileStore) PutByHost(host string, ip netip.Addr) {
c.cache.PutFakeip([]byte(host), ip.AsSlice())
2021-10-11 12:48:58 +00:00
}
// GetByIP implements store.GetByIP
func (c *cachefileStore) GetByIP(ip netip.Addr) (string, bool) {
elm := c.cache.GetFakeip(ip.AsSlice())
2021-10-11 12:48:58 +00:00
if elm == nil {
return "", false
}
return string(elm), true
}
// PutByIP implements store.PutByIP
func (c *cachefileStore) PutByIP(ip netip.Addr, host string) {
c.cache.PutFakeip(ip.AsSlice(), []byte(host))
2021-10-11 12:48:58 +00:00
}
2021-11-23 14:01:49 +00:00
// DelByIP implements store.DelByIP
func (c *cachefileStore) DelByIP(ip netip.Addr) {
addr := ip.AsSlice()
c.cache.DelFakeipPair(addr, c.cache.GetFakeip(addr))
2021-11-23 14:01:49 +00:00
}
2021-10-11 12:48:58 +00:00
// Exist implements store.Exist
func (c *cachefileStore) Exist(ip netip.Addr) bool {
2021-10-11 12:48:58 +00:00
_, exist := c.GetByIP(ip)
return exist
}
// CloneTo implements store.CloneTo
// already persistence
func (c *cachefileStore) CloneTo(store store) {}
2022-03-22 17:05:43 +00:00
// FlushFakeIP implements store.FlushFakeIP
func (c *cachefileStore) FlushFakeIP() error {
return c.cache.FlushFakeIP()
}