add version flag for source ip editor
This commit is contained in:
parent
33beaf96c9
commit
9cbcca588a
|
|
@ -202,6 +202,7 @@ func genDb() {
|
||||||
return
|
return
|
||||||
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||||
slog.Error("failed to parse version name", "error", err)
|
slog.Error("failed to parse version name", "error", err)
|
||||||
|
return
|
||||||
} else {
|
} else {
|
||||||
version = v
|
version = v
|
||||||
}
|
}
|
||||||
|
|
@ -412,6 +413,7 @@ func testBench() {
|
||||||
return
|
return
|
||||||
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||||
slog.Error("failed to parse version name", "error", err)
|
slog.Error("failed to parse version name", "error", err)
|
||||||
|
return
|
||||||
} else {
|
} else {
|
||||||
version = v
|
version = v
|
||||||
}
|
}
|
||||||
|
|
@ -476,11 +478,13 @@ func testBench() {
|
||||||
|
|
||||||
func edit() {
|
func edit() {
|
||||||
var err error
|
var err error
|
||||||
var srcFile = ""
|
var srcFile, ipVersion = "", ""
|
||||||
var fErr = iterateFlags(func(key string, val string) error {
|
var fErr = iterateFlags(func(key string, val string) error {
|
||||||
switch key {
|
switch key {
|
||||||
case "src":
|
case "src":
|
||||||
srcFile = val
|
srcFile = val
|
||||||
|
case "version":
|
||||||
|
ipVersion = val
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("undefined option '%s=%s'\n", key, val)
|
return fmt.Errorf("undefined option '%s=%s'\n", key, val)
|
||||||
}
|
}
|
||||||
|
|
@ -495,9 +499,22 @@ func edit() {
|
||||||
fmt.Printf("%s edit [command options]\n", os.Args[0])
|
fmt.Printf("%s edit [command options]\n", os.Args[0])
|
||||||
fmt.Printf("options:\n")
|
fmt.Printf("options:\n")
|
||||||
fmt.Printf(" --src string source ip text file path\n")
|
fmt.Printf(" --src string source ip text file path\n")
|
||||||
|
fmt.Printf(" --version string IP version, options: ipv4/ipv6, specify this flag so you don't get confused \n")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check and define the IP version
|
||||||
|
var version *xdb.Version = nil
|
||||||
|
if len(ipVersion) < 2 {
|
||||||
|
slog.Error("please specify the ip version with flag --version, ipv4 or ipv6 ?")
|
||||||
|
return
|
||||||
|
} else if v, err := xdb.VersionFromName(ipVersion); err != nil {
|
||||||
|
slog.Error("failed to parse version name", "error", err)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
version = v
|
||||||
|
}
|
||||||
|
|
||||||
rExp, err := regexp.Compile("\\s+")
|
rExp, err := regexp.Compile("\\s+")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed to compile regexp: %s\n", err)
|
fmt.Printf("failed to compile regexp: %s\n", err)
|
||||||
|
|
@ -506,7 +523,7 @@ func edit() {
|
||||||
|
|
||||||
fmt.Printf("init the editor from source @ `%s` ... \n", srcFile)
|
fmt.Printf("init the editor from source @ `%s` ... \n", srcFile)
|
||||||
var tStart = time.Now()
|
var tStart = time.Now()
|
||||||
editor, err := xdb.NewEditor(srcFile)
|
editor, err := xdb.NewEditor(version, srcFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("failed to init editor: %s", err)
|
fmt.Printf("failed to init editor: %s", err)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Editor struct {
|
type Editor struct {
|
||||||
|
verison *Version
|
||||||
|
|
||||||
// source ip file
|
// source ip file
|
||||||
srcPath string
|
srcPath string
|
||||||
srcHandle *os.File
|
srcHandle *os.File
|
||||||
|
|
@ -23,7 +25,7 @@ type Editor struct {
|
||||||
segments *list.List
|
segments *list.List
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewEditor(srcFile string) (*Editor, error) {
|
func NewEditor(version *Version, srcFile string) (*Editor, error) {
|
||||||
// check the src and dst file
|
// check the src and dst file
|
||||||
srcPath, err := filepath.Abs(srcFile)
|
srcPath, err := filepath.Abs(srcFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -36,6 +38,7 @@ func NewEditor(srcFile string) (*Editor, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
e := &Editor{
|
e := &Editor{
|
||||||
|
verison: version,
|
||||||
srcPath: srcPath,
|
srcPath: srcPath,
|
||||||
srcHandle: srcHandle,
|
srcHandle: srcHandle,
|
||||||
toSave: false,
|
toSave: false,
|
||||||
|
|
@ -57,6 +60,11 @@ func (e *Editor) loadSegments() error {
|
||||||
var iErr = IterateSegments(e.srcHandle, func(l string) {
|
var iErr = IterateSegments(e.srcHandle, func(l string) {
|
||||||
// do nothing here
|
// do nothing here
|
||||||
}, func(seg *Segment) error {
|
}, func(seg *Segment) error {
|
||||||
|
// version check
|
||||||
|
if len(seg.StartIP) != e.verison.Bytes {
|
||||||
|
return fmt.Errorf("invalid ip segment(%s expected)", e.verison.Name)
|
||||||
|
}
|
||||||
|
|
||||||
// check the continuity of the data segment
|
// check the continuity of the data segment
|
||||||
if err := seg.AfterCheck(last); err != nil {
|
if err := seg.AfterCheck(last); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -270,8 +278,9 @@ func (e *Editor) Save() error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var l = s.String()
|
// var l = s.String()
|
||||||
_, err = dstHandle.WriteString(fmt.Sprintf("%s\n", l))
|
// _, err = dstHandle.WriteString(fmt.Sprintf("%s\n", l))
|
||||||
|
_, err = fmt.Fprintln(dstHandle, s.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue