Proper project structure and architecture implementation
This commit is contained in:
parent
de7306b8f0
commit
54ea40d3f1
|
@ -1,8 +1,11 @@
|
||||||
package ppf
|
package ppf
|
||||||
|
|
||||||
import "fyne.io/fyne/v2/widget"
|
import (
|
||||||
|
"fyne.io/fyne/v2/widget"
|
||||||
|
"gitea.mmo.to/ProtocolPacketForger/ppf/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
func CreateView(field Field) *widget.BaseWidget {
|
func CreateView(field protocol.Field) *widget.BaseWidget {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
5
go.mod
5
go.mod
|
@ -2,7 +2,10 @@ module gitea.mmo.to/ProtocolPacketForger/ppf
|
||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require fyne.io/fyne/v2 v2.2.4
|
require (
|
||||||
|
fyne.io/fyne/v2 v2.2.4
|
||||||
|
github.com/spf13/viper v1.10.1
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 // indirect
|
fyne.io/systray v1.10.1-0.20220621085403-9a2652634e93 // indirect
|
||||||
|
|
7
go.work
7
go.work
|
@ -1,3 +1,10 @@
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
use .
|
use .
|
||||||
|
//use protocol
|
||||||
|
//use protocolctl
|
||||||
|
//use packet
|
||||||
|
//use packetctl
|
||||||
|
//use dop
|
||||||
|
//use dopctl
|
||||||
|
|
||||||
|
|
14
go.work.sum
14
go.work.sum
|
@ -1,2 +1,16 @@
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
|
||||||
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
||||||
|
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
|
||||||
|
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
|
||||||
|
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
|
||||||
|
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
||||||
|
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||||
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
|
github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
|
||||||
|
github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU=
|
||||||
|
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||||
|
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c=
|
||||||
|
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
|
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package protocol
|
||||||
|
|
||||||
|
type DefaultFieldValue struct {
|
||||||
|
FieldRef string
|
||||||
|
Value string
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package protocol
|
||||||
|
|
||||||
|
type DefaultValue struct {
|
||||||
|
Desc string
|
||||||
|
FieldValues []DefaultFieldValue
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package protocol
|
||||||
|
|
||||||
|
const DOPVersion string = "1.0"
|
||||||
|
|
||||||
|
type DOPMeta struct {
|
||||||
|
// DOP metadata version 1.0
|
||||||
|
DOPVersion string
|
||||||
|
Name string
|
||||||
|
Version string
|
||||||
|
TCPIPLayer uint
|
||||||
|
OSILayer uint
|
||||||
|
ExtensionTo string
|
||||||
|
Description string
|
||||||
|
RequiredJSFunctions []string
|
||||||
|
LowerLayerIdentification map[string]string
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package protocol
|
||||||
|
|
||||||
|
type Field struct {
|
||||||
|
Name string // Name of the Field
|
||||||
|
Desc string // Lengthy description
|
||||||
|
Regex string // Regex to recognize values
|
||||||
|
Size uint // Size in bits!
|
||||||
|
SubFields []Field // Possible sub-fields
|
||||||
|
Optional bool // Is this field required?
|
||||||
|
Payload bool // Is this field the payload or next protocol level?
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package protocol
|
||||||
|
|
||||||
|
type ProtocolStructure struct {
|
||||||
|
Metadata DOPMeta
|
||||||
|
Structure []Field
|
||||||
|
DefaultValues []DefaultValue
|
||||||
|
JavaScript string
|
||||||
|
}
|
|
@ -0,0 +1,130 @@
|
||||||
|
package protocolctl
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io/fs"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"gitea.mmo.to/ProtocolPacketForger/ppf/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewProtocolStructure() *protocol.ProtocolStructure {
|
||||||
|
p := protocol.ProtocolStructure{}
|
||||||
|
return &p
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateMetaData(
|
||||||
|
prot *protocol.ProtocolStructure,
|
||||||
|
name string,
|
||||||
|
version string,
|
||||||
|
tcpiplayer uint,
|
||||||
|
osilayer uint,
|
||||||
|
extensionTo string,
|
||||||
|
desc string,
|
||||||
|
requiredJSfunctions []string,
|
||||||
|
lowerLayerIdent map[string]string,
|
||||||
|
) {
|
||||||
|
prot.Metadata.Name = name
|
||||||
|
prot.Metadata.Description = desc
|
||||||
|
prot.Metadata.ExtensionTo = extensionTo
|
||||||
|
prot.Metadata.Version = version
|
||||||
|
prot.Metadata.OSILayer = osilayer
|
||||||
|
prot.Metadata.TCPIPLayer = tcpiplayer
|
||||||
|
prot.Metadata.RequiredJSFunctions = requiredJSfunctions
|
||||||
|
prot.Metadata.LowerLayerIdentification = lowerLayerIdent
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewField(
|
||||||
|
name string,
|
||||||
|
desc string,
|
||||||
|
regex string,
|
||||||
|
size uint,
|
||||||
|
subfields []protocol.Field,
|
||||||
|
optional bool,
|
||||||
|
payload bool,
|
||||||
|
) *protocol.Field {
|
||||||
|
f := protocol.Field{
|
||||||
|
Name: name,
|
||||||
|
Desc: desc,
|
||||||
|
Regex: regex,
|
||||||
|
Size: size,
|
||||||
|
SubFields: subfields,
|
||||||
|
Optional: optional,
|
||||||
|
Payload: payload,
|
||||||
|
}
|
||||||
|
return &f
|
||||||
|
}
|
||||||
|
|
||||||
|
func AppendField(prot *protocol.ProtocolStructure, field *protocol.Field) {
|
||||||
|
prot.Structure = append(prot.Structure, *field)
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateFieldByRef(prot *protocol.ProtocolStructure, field *protocol.Field) {
|
||||||
|
for _, f := range prot.Structure {
|
||||||
|
if f.Name == field.Name {
|
||||||
|
f.Desc = field.Desc
|
||||||
|
f.Optional = field.Optional
|
||||||
|
f.Payload = field.Payload
|
||||||
|
f.Regex = field.Regex
|
||||||
|
f.Size = field.Size
|
||||||
|
f.SubFields = field.SubFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateFieldByElement(prot *protocol.ProtocolStructure, element int, field *protocol.Field) {
|
||||||
|
for i, f := range prot.Structure {
|
||||||
|
if i == element {
|
||||||
|
f.Desc = field.Desc
|
||||||
|
f.Optional = field.Optional
|
||||||
|
f.Payload = field.Payload
|
||||||
|
f.Regex = field.Regex
|
||||||
|
f.Size = field.Size
|
||||||
|
f.SubFields = field.SubFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveFieldByRef(prot *protocol.ProtocolStructure, field *protocol.Field) {
|
||||||
|
element := -1
|
||||||
|
for i, f := range prot.Structure {
|
||||||
|
if f.Name == field.Name {
|
||||||
|
element = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if element == -1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
RemoveFieldByElement(prot, element)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveFieldByElement(prot *protocol.ProtocolStructure, field int) {
|
||||||
|
ret := make([]protocol.Field, 0)
|
||||||
|
ret = append(ret, prot.Structure[:field]...)
|
||||||
|
ret = append(ret, prot.Structure[field+1:]...)
|
||||||
|
prot.Structure = ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func Load(prot *protocol.ProtocolStructure, path string) error {
|
||||||
|
data, err := os.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(data, prot)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadNew(path string) (*protocol.ProtocolStructure, error) {
|
||||||
|
prot := NewProtocolStructure()
|
||||||
|
err := Load(prot, path)
|
||||||
|
return prot, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Save(prot *protocol.ProtocolStructure, path string) error {
|
||||||
|
data, err := json.Marshal(*prot)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = os.WriteFile(path, data, fs.ModeAppend)
|
||||||
|
return err
|
||||||
|
}
|
50
structure.go
50
structure.go
|
@ -1,46 +1,8 @@
|
||||||
package ppf
|
package ppf
|
||||||
|
|
||||||
type Field struct {
|
//type DataModel struct {
|
||||||
Name string // Name of the Field
|
// Name string // User defined name of his current work (filename later)
|
||||||
Desc string // Lengthy description
|
// Protocols []ProtocolStructure // List of protocols in order of the stack
|
||||||
Regex string // Regex to recognize values
|
// Data []FieldValue // Data of the fields of all protocols
|
||||||
Size uint // Size in bits!
|
// ProtocolCreation bool
|
||||||
SubFields []Field // Possible sub-fields
|
//}
|
||||||
Optional bool // Is this field required?
|
|
||||||
Payload bool // Is this field the payload or next protocol level?
|
|
||||||
PredefinedValues []PredefinedFieldValue // Collection of predefined field values
|
|
||||||
}
|
|
||||||
|
|
||||||
type PredefinedFieldValue struct {
|
|
||||||
Desc string
|
|
||||||
FieldValues []FieldValue
|
|
||||||
}
|
|
||||||
|
|
||||||
type FieldValue struct {
|
|
||||||
FieldRef *Field
|
|
||||||
Value string
|
|
||||||
}
|
|
||||||
|
|
||||||
type ProtocolStructure struct {
|
|
||||||
Metadata DOPMetadata
|
|
||||||
Structure []Field
|
|
||||||
}
|
|
||||||
|
|
||||||
type DOPMetadata struct {
|
|
||||||
DOPVersion string
|
|
||||||
Name string
|
|
||||||
Version string
|
|
||||||
TCPIPLayer uint
|
|
||||||
OSILayer uint
|
|
||||||
ExtensionTo string
|
|
||||||
Description string
|
|
||||||
RequiredJSFunctions []string
|
|
||||||
LowerLayerIdentification map[string]string
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataModel struct {
|
|
||||||
Name string // User defined name of his current work (filename later)
|
|
||||||
Protocols []ProtocolStructure // List of protocols in order of the stack
|
|
||||||
Data []FieldValue // Data of the fields of all protocols
|
|
||||||
ProtocolCreation bool
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue