// GetCountry_v6 works the same as GetCountry except for IPv6 addresses, be sure to // load a database with IPv6 data to get any results. func (gi *GeoIP) GetCountry_v6(ip string) (cc string, netmask int) { if gi.db == nil { return } gi.mu.Lock() defer gi.mu.Unlock() cip := C.CString(ip) defer C.free(unsafe.Pointer(cip)) ccountry := C.GeoIP_country_code_by_addr_v6(gi.db, cip) if ccountry != nil { cc = C.GoString(ccountry) netmask = int(C.GeoIP_last_netmask(gi.db)) return } return }
// Takes an IPv4 address string and returns the country code for that IP // and the netmask for that IP range. func (gi *GeoIP) GetCountry(ip string) (cc string, netmask int) { if gi.db == nil { return } gi.mu.Lock() // Lock to make sure we get the right result from GeoIP_last_netmask defer gi.mu.Unlock() cip := C.CString(ip) defer C.free(unsafe.Pointer(cip)) ccountry := C.GeoIP_country_code_by_addr(gi.db, cip) if ccountry != nil { cc = C.GoString(ccountry) netmask = int(C.GeoIP_last_netmask(gi.db)) return } return }
// Same as GetName() but for IPv6 addresses. func (gi *GeoIP) GetNameV6(ip string) (name string, netmask int) { if gi.db == nil { return } gi.mu.Lock() defer gi.mu.Unlock() cip := C.CString(ip) defer C.free(unsafe.Pointer(cip)) cname := C.GeoIP_name_by_addr_v6(gi.db, cip) if cname != nil { name = C.GoString(cname) defer C.free(unsafe.Pointer(cname)) netmask = int(C.GeoIP_last_netmask(gi.db)) return } return }