Browse Source

Add extra fields to json config to support remote crawlers

master
Lyndsay Roger 9 years ago
parent
commit
ec1cbdfe60
  1. 36
      network.go
  2. 18
      seeder.go

36
network.go

@ -14,6 +14,9 @@ import (
type JNetwork struct { type JNetwork struct {
Name string Name string
Desc string Desc string
SeederType string
Secret string
Remote string
Id string Id string
Port uint16 Port uint16
Pver uint32 Pver uint32
@ -36,6 +39,9 @@ func createNetFile() {
DNSName: "seeder.example.com", DNSName: "seeder.example.com",
Name: "SeederNet", Name: "SeederNet",
Desc: "Description of SeederNet", Desc: "Description of SeederNet",
SeederType: "Combined",
Secret: "32bYTesoFSECretThAtiSASecrET!!",
Remote: "ipofdnsserver.example.com:1234",
Seeder1: "seeder1.example.com", Seeder1: "seeder1.example.com",
Seeder2: "seed1.bob.com", Seeder2: "seed1.bob.com",
Seeder3: "seed2.example.com", Seeder3: "seed2.example.com",
@ -72,10 +78,10 @@ func loadNetwork(fName string) (*dnsseeder, error) {
return nil, errors.New(fmt.Sprintf("Error decoding network file: %v", err)) return nil, errors.New(fmt.Sprintf("Error decoding network file: %v", err))
} }
return initNetwork(jnw, jnw.Name) return initNetwork(jnw)
} }
func initNetwork(jnw JNetwork, name string) (*dnsseeder, error) { func initNetwork(jnw JNetwork) (*dnsseeder, error) {
if jnw.Port == 0 { if jnw.Port == 0 {
return nil, errors.New(fmt.Sprintf("Invalid port supplied: %v", jnw.Port)) return nil, errors.New(fmt.Sprintf("Invalid port supplied: %v", jnw.Port))
@ -85,6 +91,10 @@ func initNetwork(jnw JNetwork, name string) (*dnsseeder, error) {
return nil, errors.New(fmt.Sprintf("No DNS Hostname supplied")) return nil, errors.New(fmt.Sprintf("No DNS Hostname supplied"))
} }
if ok := checkBlockSize(jnw.Secret); ok != true {
return nil, errors.New(fmt.Sprintf("shared secret must be either 16, 24 or 32 bytes long. currently: %v", len(jnw.Secret)))
}
if _, ok := config.seeders[jnw.Name]; ok { if _, ok := config.seeders[jnw.Name]; ok {
return nil, errors.New(fmt.Sprintf("Name already exists from previous file - %s", jnw.Name)) return nil, errors.New(fmt.Sprintf("Name already exists from previous file - %s", jnw.Name))
} }
@ -98,6 +108,9 @@ func initNetwork(jnw JNetwork, name string) (*dnsseeder, error) {
seeder.name = jnw.Name seeder.name = jnw.Name
seeder.desc = jnw.Desc seeder.desc = jnw.Desc
seeder.dnsHost = jnw.DNSName seeder.dnsHost = jnw.DNSName
seeder.seederType = convertSeederType(jnw.SeederType)
seeder.secret = jnw.Secret
seeder.remote = jnw.Remote
// conver the network magic number to a Uint32 // conver the network magic number to a Uint32
t1, err := strconv.ParseUint(jnw.Id, 0, 32) t1, err := strconv.ParseUint(jnw.Id, 0, 32)
@ -139,6 +152,25 @@ func initNetwork(jnw JNetwork, name string) (*dnsseeder, error) {
return seeder, nil return seeder, nil
} }
func convertSeederType(seederType string) uint32 {
switch seederType {
case "Crawl":
return typeCrawl
case "DNS":
return typeDNS
default:
return typeCombined
}
}
func checkBlockSize(secret string) bool {
s := len(secret)
if s == 16 || s == 24 || s == 32 {
return true
}
return false
}
/* /*
*/ */

18
seeder.go

@ -45,14 +45,13 @@ const (
maxStatusTypes // used in main to allocate slice maxStatusTypes // used in main to allocate slice
) )
/* NdCounts holds various statistics about the running system const (
type NdCounts struct { // seederType
NdStatus []uint32 typeCombined = iota // This seeder both crawls and provides dns responses
NdStarts []uint32 typeCrawl // this seeder just crawls the network and sends ip info to a remote dns server
DNSCounts []uint32 typeDNS // this seeder just provides dns data to clients and does no crawling itself
mtx sync.RWMutex )
}
*/
type dnsseeder struct { type dnsseeder struct {
id wire.BitcoinNet // Magic number - Unique ID for this network. Sent in header of all messages id wire.BitcoinNet // Magic number - Unique ID for this network. Sent in header of all messages
theList map[string]*node // the list of current nodes theList map[string]*node // the list of current nodes
@ -64,6 +63,9 @@ type dnsseeder struct {
dnsHost string // dns host we will serve results for this domain dnsHost string // dns host we will serve results for this domain
name string // Short name for the network name string // Short name for the network
desc string // Long description for the network desc string // Long description for the network
seederType uint32 // Combined, crawl or DNS only
secret string // Shared secret with remote seeder to encrypt messages
remote string // Remote host and port to send dns info if we are a crawler
seeders []string // slice of seeders to pull ip addresses when starting this seeder seeders []string // slice of seeders to pull ip addresses when starting this seeder
maxStart []uint32 // max number of goroutines to start each run for each status type maxStart []uint32 // max number of goroutines to start each run for each status type
delay []int64 // number of seconds to wait before we connect to a known client for each status delay []int64 // number of seconds to wait before we connect to a known client for each status

Loading…
Cancel
Save