diff --git a/utils/packet_logger.go b/utils/packet_logger.go index 87cabd6..fd9b388 100644 --- a/utils/packet_logger.go +++ b/utils/packet_logger.go @@ -54,46 +54,70 @@ var ( dmpLock sync.Mutex ) -func dmpStruct(level int, in any, wType bool) (s string) { +func dmpStruct(level int, inputStruct any, withType bool, isInList bool) (s string) { tBase := strings.Repeat("\t", level) - ii := reflect.Indirect(reflect.ValueOf(in)) - if wType { - typeName := reflect.TypeOf(in).String() - s += typeName + " " - } else { - s += "\t" + ii := reflect.Indirect(reflect.ValueOf(inputStruct)) + typeName := reflect.TypeOf(inputStruct).String() + typeString := "" + if withType { + if slices.Contains([]string{"bool", "string"}, typeName) { + } else { + typeString = typeName + " " + } } if ii.Kind() == reflect.Struct { - s += "{\n" - for i := 0; i < ii.NumField(); i++ { - field := ii.Type().Field(i) - if field.IsExported() { - d := dmpStruct(level+1, ii.Field(i).Interface(), true) - s += tBase + fmt.Sprintf("\t%s = %s\n", field.Name, d) - } else { - s += tBase + "\t" + field.Name + " (unexported)" + if ii.NumField() == 0 { + s += typeName + "{}" + } else { + s += typeName + "{\n" + for i := 0; i < ii.NumField(); i++ { + fieldType := ii.Type().Field(i) + + if fieldType.IsExported() { + field := ii.Field(i).Interface() + d := dmpStruct(level+1, field, true, false) + s += tBase + fmt.Sprintf("\t%s = %s\n", fieldType.Name, d) + } else { + s += tBase + " " + fieldType.Name + " (unexported)" + } } + s += tBase + "}" } - s += tBase + "}\n" } else if ii.Kind() == reflect.Slice { var t reflect.Type + is_elem_struct := false if ii.Len() > 0 { e := ii.Index(0) t = reflect.TypeOf(e.Interface()) + is_elem_struct = t.Kind() == reflect.Struct } + if ii.Len() > 1000 { - s += " []" - } else if ii.Len() == 0 || t.Kind() == reflect.Struct { - s += "\t[\n" - for i := 0; i < ii.Len(); i++ { - s += tBase - s += dmpStruct(level+1, ii.Index(i).Interface(), false) - } - s += tBase + "]\n" + s += "[]" + } else if ii.Len() == 0 { + s += typeString + "[]" } else { - s += fmt.Sprintf("%#v", ii.Interface()) + s += typeString + "[" + if is_elem_struct { + s += "\n" + } + for i := 0; i < ii.Len(); i++ { + if is_elem_struct { + s += tBase + "\t" + } + s += dmpStruct(level+1, ii.Index(i).Interface(), false, true) + if is_elem_struct { + s += "\n" + } else { + s += " " + } + } + if is_elem_struct { + s += tBase + } + s += "]" } } else if ii.Kind() == reflect.Map { j, err := json.MarshalIndent(ii.Interface(), tBase, "\t") @@ -102,7 +126,10 @@ func dmpStruct(level int, in any, wType bool) (s string) { } s += string(j) } else { - s += fmt.Sprintf(" %#v", ii.Interface()) + if !isInList { + s += typeString + } + s += fmt.Sprintf("%#v", ii.Interface()) } return s @@ -131,8 +158,8 @@ func PacketLogger(header packet.Header, payload []byte, src, dst net.Addr) { if FLog != nil { dmpLock.Lock() defer dmpLock.Unlock() - FLog.Write([]byte(dmpStruct(0, pk, true))) - FLog.Write([]byte("\n\n")) + FLog.Write([]byte(dmpStruct(0, pk, true, false))) + FLog.Write([]byte("\n\n\n")) } pkName := reflect.TypeOf(pk).String()[1:] diff --git a/utils/zip.go b/utils/zip.go index cd3d3d7..4d8a3f7 100644 --- a/utils/zip.go +++ b/utils/zip.go @@ -2,14 +2,14 @@ package utils import ( "archive/zip" - "fmt" "io" "io/fs" - "log" "os" "path" "path/filepath" "strings" + + "github.com/sirupsen/logrus" ) func UnpackZip(r io.ReaderAt, size int64, unpackFolder string) { @@ -31,7 +31,7 @@ func UnpackZip(r io.ReaderAt, size int64, unpackFolder string) { func ZipFolder(filename, folder string) error { f, err := os.Create(filename) if err != nil { - log.Fatal(err) + logrus.Fatal(err) } zw := zip.NewWriter(f) err = filepath.WalkDir(folder, func(path string, d fs.DirEntry, err error) error { @@ -40,7 +40,7 @@ func ZipFolder(filename, folder string) error { zwf, _ := zw.Create(rel) data, err := os.ReadFile(path) if err != nil { - fmt.Println(err) + logrus.Error(err) } zwf.Write(data) }