mirror of https://github.com/namecoin/ncdns
Add ncdumpzone tool.
parent
b21fef1b47
commit
217e831b6e
@ -0,0 +1,88 @@
|
||||
package main
|
||||
|
||||
import "gopkg.in/alecthomas/kingpin.v2"
|
||||
import "github.com/hlandau/ncdns/ncdomain"
|
||||
import "github.com/hlandau/ncdns/namecoin"
|
||||
import "github.com/hlandau/ncdns/util"
|
||||
import "github.com/hlandau/xlog"
|
||||
import "strings"
|
||||
import "fmt"
|
||||
|
||||
var log, Log = xlog.New("ncdumpzone")
|
||||
|
||||
var (
|
||||
rpchostFlag = kingpin.Flag("rpchost", "Namecoin RPC host:port").Default("127.0.0.1:8336").String()
|
||||
rpcuserFlag = kingpin.Flag("rpcuser", "Namecoin RPC username").String()
|
||||
rpcpassFlag = kingpin.Flag("rpcpass", "Namecoin RPC password").String()
|
||||
)
|
||||
|
||||
var conn namecoin.Conn
|
||||
|
||||
const perCall = 1000
|
||||
|
||||
func main() {
|
||||
kingpin.Parse()
|
||||
|
||||
conn.Server = *rpchostFlag
|
||||
conn.Username = *rpcuserFlag
|
||||
conn.Password = *rpcpassFlag
|
||||
|
||||
var errors []error
|
||||
errFunc := func(err error, isWarning bool) {
|
||||
errors = append(errors, err)
|
||||
}
|
||||
|
||||
getNameFunc := func(k string) (string, error) {
|
||||
return conn.Query(k)
|
||||
}
|
||||
|
||||
currentName := "d/"
|
||||
continuing := 0
|
||||
|
||||
for {
|
||||
results, err := conn.Scan(currentName, perCall)
|
||||
log.Fatale(err, "scan")
|
||||
|
||||
if len(results) <= continuing {
|
||||
log.Info("out of results, stopping")
|
||||
break
|
||||
}
|
||||
|
||||
// scan is [x,y] not (x,y], so exclude the first result
|
||||
if continuing != 0 {
|
||||
results = results[1:]
|
||||
} else {
|
||||
continuing = 1
|
||||
}
|
||||
|
||||
for i := range results {
|
||||
r := &results[i]
|
||||
|
||||
// The order in which name_scan returns results is seemingly rather
|
||||
// random, so we can't stop when we see a non-d/ name, so just skip it.
|
||||
if !strings.HasPrefix(r.Name, "d/") {
|
||||
continue
|
||||
}
|
||||
|
||||
suffix, err := util.NamecoinKeyToBasename(r.Name)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
errors = errors[0:0]
|
||||
value := ncdomain.ParseValue(r.Name, r.Value, getNameFunc, errFunc)
|
||||
if len(errors) > 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
rrs, err := value.RRsRecursive(nil, suffix+".bit.", "bit.")
|
||||
log.Warne(err, "error generating RRs")
|
||||
|
||||
for _, rr := range rrs {
|
||||
fmt.Print(rr.String(), "\n")
|
||||
}
|
||||
}
|
||||
|
||||
currentName = results[len(results)-1].Name
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue