patch.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package updater
  2. import (
  3. "fmt"
  4. "github.com/metacubex/mihomo/component/geodata"
  5. "github.com/metacubex/mihomo/component/mmdb"
  6. C "github.com/metacubex/mihomo/constant"
  7. "github.com/oschwald/maxminddb-golang"
  8. )
  9. func UpdateMMDB(path string) (err error) {
  10. defer mmdb.ReloadIP()
  11. data, err := downloadForBytes(C.MmdbUrl)
  12. if err != nil {
  13. return fmt.Errorf("can't download MMDB database file: %w", err)
  14. }
  15. instance, err := maxminddb.FromBytes(data)
  16. if err != nil {
  17. return fmt.Errorf("invalid MMDB database file: %s", err)
  18. }
  19. _ = instance.Close()
  20. mmdb.IPInstance().Reader.Close()
  21. if err = saveFile(data, path); err != nil {
  22. return fmt.Errorf("can't save MMDB database file: %w", err)
  23. }
  24. return nil
  25. }
  26. func UpdateASN(path string) (err error) {
  27. defer mmdb.ReloadASN()
  28. data, err := downloadForBytes(C.ASNUrl)
  29. if err != nil {
  30. return fmt.Errorf("can't download ASN database file: %w", err)
  31. }
  32. instance, err := maxminddb.FromBytes(data)
  33. if err != nil {
  34. return fmt.Errorf("invalid ASN database file: %s", err)
  35. }
  36. _ = instance.Close()
  37. mmdb.ASNInstance().Reader.Close()
  38. if err = saveFile(data, path); err != nil {
  39. return fmt.Errorf("can't save ASN database file: %w", err)
  40. }
  41. return nil
  42. }
  43. func UpdateGeoIp(path string) (err error) {
  44. geoLoader, err := geodata.GetGeoDataLoader("standard")
  45. data, err := downloadForBytes(C.GeoIpUrl)
  46. if err != nil {
  47. return fmt.Errorf("can't download GeoIP database file: %w", err)
  48. }
  49. if _, err = geoLoader.LoadIPByBytes(data, "cn"); err != nil {
  50. return fmt.Errorf("invalid GeoIP database file: %s", err)
  51. }
  52. if err = saveFile(data, path); err != nil {
  53. return fmt.Errorf("can't save GeoIP database file: %w", err)
  54. }
  55. return nil
  56. }
  57. func UpdateGeoSite(path string) (err error) {
  58. geoLoader, err := geodata.GetGeoDataLoader("standard")
  59. data, err := downloadForBytes(C.GeoSiteUrl)
  60. if err != nil {
  61. return fmt.Errorf("can't download GeoSite database file: %w", err)
  62. }
  63. if _, err = geoLoader.LoadSiteByBytes(data, "cn"); err != nil {
  64. return fmt.Errorf("invalid GeoSite database file: %s", err)
  65. }
  66. if err = saveFile(data, path); err != nil {
  67. return fmt.Errorf("can't save GeoSite database file: %w", err)
  68. }
  69. return nil
  70. }