github.com/sagernet/sing-box@v1.9.0-rc.20/common/geoip/reader.go (about) 1 package geoip 2 3 import ( 4 "net/netip" 5 6 E "github.com/sagernet/sing/common/exceptions" 7 8 "github.com/oschwald/maxminddb-golang" 9 ) 10 11 type Reader struct { 12 reader *maxminddb.Reader 13 } 14 15 func Open(path string) (*Reader, []string, error) { 16 database, err := maxminddb.Open(path) 17 if err != nil { 18 return nil, nil, err 19 } 20 if database.Metadata.DatabaseType != "sing-geoip" { 21 database.Close() 22 return nil, nil, E.New("incorrect database type, expected sing-geoip, got ", database.Metadata.DatabaseType) 23 } 24 return &Reader{database}, database.Metadata.Languages, nil 25 } 26 27 func (r *Reader) Lookup(addr netip.Addr) string { 28 var code string 29 _ = r.reader.Lookup(addr.AsSlice(), &code) 30 if code != "" { 31 return code 32 } 33 return "unknown" 34 } 35 36 func (r *Reader) Close() error { 37 return r.reader.Close() 38 }