fix peer ip mod
This commit is contained in:
@@ -2,12 +2,12 @@ package reseed
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -23,6 +23,14 @@ type routerInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Peer string
|
type Peer string
|
||||||
|
|
||||||
|
func (p Peer) Hash() int {
|
||||||
|
b := sha256.Sum256([]byte(p))
|
||||||
|
c := make([]byte, len(b))
|
||||||
|
copy(c, b[:])
|
||||||
|
return int(crc32.ChecksumIEEE(c))
|
||||||
|
}
|
||||||
|
|
||||||
type Seeds []routerInfo
|
type Seeds []routerInfo
|
||||||
|
|
||||||
type Reseeder interface {
|
type Reseeder interface {
|
||||||
@@ -96,7 +104,7 @@ func (rs *ReseederImpl) Start() chan bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReseederImpl) rebuild() error {
|
func (rs *ReseederImpl) rebuild() error {
|
||||||
log.Println("Rebuilding SU3s...")
|
log.Println("Rebuilding su3s...")
|
||||||
ris, err := rs.netdb.RouterInfos()
|
ris, err := rs.netdb.RouterInfos()
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return fmt.Errorf("Unable to get routerInfos: %s", err)
|
return fmt.Errorf("Unable to get routerInfos: %s", err)
|
||||||
@@ -133,7 +141,7 @@ func (rs *ReseederImpl) rebuild() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReseederImpl) PeerSu3Bytes(peer Peer) ([]byte, error) {
|
func (rs *ReseederImpl) PeerSu3Bytes(peer Peer) ([]byte, error) {
|
||||||
hashMod := int(crc32.ChecksumIEEE([]byte(peer))) % rs.numSu3
|
hashMod := peer.Hash() % rs.numSu3
|
||||||
|
|
||||||
m := <-rs.su3s
|
m := <-rs.su3s
|
||||||
defer func() { rs.su3s <- m }()
|
defer func() { rs.su3s <- m }()
|
||||||
@@ -151,8 +159,7 @@ func (rs *ReseederImpl) Seeds(p Peer) (Seeds, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReseederImpl) Peer(r *http.Request) Peer {
|
func (rs *ReseederImpl) Peer(r *http.Request) Peer {
|
||||||
ip, _, _ := net.SplitHostPort(r.RemoteAddr)
|
return Peer(r.RemoteAddr)
|
||||||
return Peer(ip)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *ReseederImpl) CreateSu3(seeds Seeds) (*su3.Su3File, error) {
|
func (rs *ReseederImpl) CreateSu3(seeds Seeds) (*su3.Su3File, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user