nodes_file.go 755 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package dht
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "github.com/anacrolix/dht/v2/krpc"
  6. )
  7. func WriteNodesToFile(ns []krpc.NodeInfo, fileName string) (err error) {
  8. b, err := krpc.CompactIPv6NodeInfo(ns).MarshalBinary()
  9. if err != nil {
  10. return
  11. }
  12. f, err := os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o640)
  13. if err != nil {
  14. return
  15. }
  16. defer func() {
  17. closeErr := f.Close()
  18. if err == nil {
  19. err = closeErr
  20. }
  21. }()
  22. _, err = f.Write(b)
  23. return
  24. }
  25. func ReadNodesFromFile(fileName string) (ns []krpc.NodeInfo, err error) {
  26. f, err := os.Open(fileName)
  27. if err != nil {
  28. return
  29. }
  30. defer f.Close()
  31. b, err := ioutil.ReadAll(f)
  32. if err != nil {
  33. return
  34. }
  35. var cnis krpc.CompactIPv6NodeInfo
  36. err = cnis.UnmarshalBinary(b)
  37. ns = cnis
  38. return
  39. }