1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package fakeip
- import (
- "net/netip"
- "github.com/metacubex/mihomo/component/profile/cachefile"
- )
- type cachefileStore struct {
- cache *cachefile.CacheFile
- }
- // GetByHost implements store.GetByHost
- func (c *cachefileStore) GetByHost(host string) (netip.Addr, bool) {
- 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
- }
- }
- // PutByHost implements store.PutByHost
- func (c *cachefileStore) PutByHost(host string, ip netip.Addr) {
- c.cache.PutFakeip([]byte(host), ip.AsSlice())
- }
- // GetByIP implements store.GetByIP
- func (c *cachefileStore) GetByIP(ip netip.Addr) (string, bool) {
- elm := c.cache.GetFakeip(ip.AsSlice())
- 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))
- }
- // DelByIP implements store.DelByIP
- func (c *cachefileStore) DelByIP(ip netip.Addr) {
- addr := ip.AsSlice()
- c.cache.DelFakeipPair(addr, c.cache.GetFakeip(addr))
- }
- // Exist implements store.Exist
- func (c *cachefileStore) Exist(ip netip.Addr) bool {
- _, exist := c.GetByIP(ip)
- return exist
- }
- // CloneTo implements store.CloneTo
- // already persistence
- func (c *cachefileStore) CloneTo(store store) {}
- // FlushFakeIP implements store.FlushFakeIP
- func (c *cachefileStore) FlushFakeIP() error {
- return c.cache.FlushFakeIP()
- }
|