diff --git a/motolol/cp/cp.go b/motolol/cp/cp.go index b50e08d..6cb87a1 100644 --- a/motolol/cp/cp.go +++ b/motolol/cp/cp.go @@ -72,133 +72,3 @@ func (r *CPReader) Test() (err error) { } return nil } - -/* -func (r *CPEReader) readFileMetadata() (GMAFileMetadata, error) { - metadata := GMAFileMetadata{} - - // Read the file name - fileName, err := r.gmaStreamReader.ReadString(byte(0)) - if err != nil { - return metadata, err - } - //fmt.Printf("bufio ReadString(byte(0)) = len(%d) data=%x\n", len(fileName), fileName) - - fileName = fileName[:len(fileName)-1] // remove nullbyte that causes go string fuckyness - r.cursorOffset += uint32(len(fileName) + 1) // Add name length + null byte - metadata.FileName = fileName - - // Read the file size - fileSizeBytes := make([]byte, 8) - _, err = io.ReadFull(r.gmaStreamReader, fileSizeBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 8 - //fmt.Printf("bufio Read([]byte(4)]) fileSizeBytes = bytesRead(%d) data=%x\n", bytesRead, fileSizeBytes) - metadata.FileSize = int64(binary.LittleEndian.Uint64(fileSizeBytes)) - - // Read the file crc - crcBytes := make([]byte, 4) - _, err = io.ReadFull(r.gmaStreamReader, crcBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 4 - //fmt.Printf("bufio Read([]byte(4)]) crcBytes = bytesRead(%d) data=%x\n", bytesRead, crcBytes) - metadata.CRC = binary.LittleEndian.Uint32(crcBytes) - - // Read the next type - nextTypeBytes := make([]byte, 4) - _, err = io.ReadFull(r.gmaStreamReader, nextTypeBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 4 - metadata.NextType = binary.LittleEndian.Uint32(nextTypeBytes) - //fmt.Printf("bufio Read([]byte(4)]) nextTypeBytes = bytesRead(%d) data=%x\n", bytesRead, nextTypeBytes) - - return metadata, nil -} -func (r *CPEReader) ReadAddonCRC(lastOffset int64) (crc uint32, err error) { - - limitReader := io.NewSectionReader(r.FileHandle, int64(r.cursorOffset)+lastOffset, int64(4)) - - crcBytes := make([]byte, 4) - _, err = limitReader.Read(crcBytes) - if err != nil { - return 0, err - } - r.cursorOffset += 4 - CRC := binary.LittleEndian.Uint32(crcBytes) - return CRC, nil -} - -func (r *CPEReader) ReadFiles() (firstType int32, files []GMAFileMetadata, err error) { - // read nType 4byte - firstTypeBytes := make([]byte, 4) - _, err = r.gmaStreamReader.Read(firstTypeBytes) - if err != nil { - return 0, files, err - } - r.cursorOffset += 4 - firstType = int32(binary.LittleEndian.Uint32(firstTypeBytes)) - - if firstType == 0 { - return 0, files, nil - } - fileOffset := int64(0) - fileNumber := int32(1) - for { - fileMeta, err := r.readFileMetadata() - if err != nil { - if err == io.EOF { - break - } - return firstType, files, err - } - fileMeta.FileNumber = fileNumber - fileMeta.Offset = fileOffset - //fmt.Printf("%s CRC: %d Offset: %d Size: %d\n", fileMeta.FileName, fileMeta.CRC, fileMeta.Offset, fileMeta.FileSize) - //fmt.Printf("[% x]\n", fileMeta.FileName) - files = append(files, fileMeta) - fileOffset += fileMeta.FileSize - fileNumber++ - if fileMeta.NextType == 0 { - break - } - } - - return firstType, files, nil -} -func (r *CPEReader) GetOffset() (offset uint32) { - return r.cursorOffset -} -func (r *CPEReader) ExtractFileTo(fileMeta GMAFileMetadata, writer io.Writer) (extractMeta GMAExtractionMeta, err error) { - extractMeta.OriginalMeta = fileMeta - // Seek to the specified offset in the reader - limitReader := io.NewSectionReader(r.FileHandle, int64(r.cursorOffset)+fileMeta.Offset, int64(fileMeta.FileSize)) - // Copy the specified length of data from the reader to the output file - buf := bytes.NewBuffer(nil) - _, err = io.CopyN(buf, limitReader, int64(fileMeta.FileSize)) - if err != nil { - return extractMeta, err - } - shaHasher := sha256.New() - - extractMeta.ExtractedCRC = crc32.Checksum(buf.Bytes(), crc32.MakeTable(crc32.IEEE)) - shaHasher.Write(buf.Bytes()) - extractMeta.ExtractedSHA256 = fmt.Sprintf("%x", shaHasher.Sum(nil)) - buf.WriteTo(writer) - - return extractMeta, nil -} -func (r *CPEReader) GetSHA256() (hash string, err error) { - shaHasher := sha256.New() - if _, err := io.Copy(shaHasher, r.FileHandle); err != nil { - return "", err - } - return fmt.Sprintf("%x", shaHasher.Sum(nil)), nil -} - -*/ diff --git a/motolol/cp/table.go b/motolol/cp/table.go index 8edcb77..45564f3 100644 --- a/motolol/cp/table.go +++ b/motolol/cp/table.go @@ -3,6 +3,6 @@ package cp type Table struct { } -func NewTable(fileName string) (_ CPReader, err error) { - return CPReader{}.NewReader(fileName) -} +// func NewTable(fileName string) (_ CPReader, err error) { +// return CPReader{}.NewReader(fileName) +// } diff --git a/motolol/cpe/cpe.go b/motolol/cpe/cpe.go index cb0f0ef..f76eeb4 100644 --- a/motolol/cpe/cpe.go +++ b/motolol/cpe/cpe.go @@ -116,136 +116,5 @@ func (r *CPEReader) ReadData() (err error) { return err } r.Metadata.Segments[nextSegment.Name] = nextSegment - //fmt.Printf("Segment Found: %s (%d bytes)\n", nextSegment.Name, nextSegment.Size) } } - -/* -func (r *CPEReader) readFileMetadata() (GMAFileMetadata, error) { - metadata := GMAFileMetadata{} - - // Read the file name - fileName, err := r.gmaStreamReader.ReadString(byte(0)) - if err != nil { - return metadata, err - } - //fmt.Printf("bufio ReadString(byte(0)) = len(%d) data=%x\n", len(fileName), fileName) - - fileName = fileName[:len(fileName)-1] // remove nullbyte that causes go string fuckyness - r.cursorOffset += uint32(len(fileName) + 1) // Add name length + null byte - metadata.FileName = fileName - - // Read the file size - fileSizeBytes := make([]byte, 8) - _, err = io.ReadFull(r.gmaStreamReader, fileSizeBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 8 - //fmt.Printf("bufio Read([]byte(4)]) fileSizeBytes = bytesRead(%d) data=%x\n", bytesRead, fileSizeBytes) - metadata.FileSize = int64(binary.LittleEndian.Uint64(fileSizeBytes)) - - // Read the file crc - crcBytes := make([]byte, 4) - _, err = io.ReadFull(r.gmaStreamReader, crcBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 4 - //fmt.Printf("bufio Read([]byte(4)]) crcBytes = bytesRead(%d) data=%x\n", bytesRead, crcBytes) - metadata.CRC = binary.LittleEndian.Uint32(crcBytes) - - // Read the next type - nextTypeBytes := make([]byte, 4) - _, err = io.ReadFull(r.gmaStreamReader, nextTypeBytes) - if err != nil { - return metadata, err - } - r.cursorOffset += 4 - metadata.NextType = binary.LittleEndian.Uint32(nextTypeBytes) - //fmt.Printf("bufio Read([]byte(4)]) nextTypeBytes = bytesRead(%d) data=%x\n", bytesRead, nextTypeBytes) - - return metadata, nil -} -func (r *CPEReader) ReadAddonCRC(lastOffset int64) (crc uint32, err error) { - - limitReader := io.NewSectionReader(r.FileHandle, int64(r.cursorOffset)+lastOffset, int64(4)) - - crcBytes := make([]byte, 4) - _, err = limitReader.Read(crcBytes) - if err != nil { - return 0, err - } - r.cursorOffset += 4 - CRC := binary.LittleEndian.Uint32(crcBytes) - return CRC, nil -} - -func (r *CPEReader) ReadFiles() (firstType int32, files []GMAFileMetadata, err error) { - // read nType 4byte - firstTypeBytes := make([]byte, 4) - _, err = r.gmaStreamReader.Read(firstTypeBytes) - if err != nil { - return 0, files, err - } - r.cursorOffset += 4 - firstType = int32(binary.LittleEndian.Uint32(firstTypeBytes)) - - if firstType == 0 { - return 0, files, nil - } - fileOffset := int64(0) - fileNumber := int32(1) - for { - fileMeta, err := r.readFileMetadata() - if err != nil { - if err == io.EOF { - break - } - return firstType, files, err - } - fileMeta.FileNumber = fileNumber - fileMeta.Offset = fileOffset - //fmt.Printf("%s CRC: %d Offset: %d Size: %d\n", fileMeta.FileName, fileMeta.CRC, fileMeta.Offset, fileMeta.FileSize) - //fmt.Printf("[% x]\n", fileMeta.FileName) - files = append(files, fileMeta) - fileOffset += fileMeta.FileSize - fileNumber++ - if fileMeta.NextType == 0 { - break - } - } - - return firstType, files, nil -} -func (r *CPEReader) GetOffset() (offset uint32) { - return r.cursorOffset -} -func (r *CPEReader) ExtractFileTo(fileMeta GMAFileMetadata, writer io.Writer) (extractMeta GMAExtractionMeta, err error) { - extractMeta.OriginalMeta = fileMeta - // Seek to the specified offset in the reader - limitReader := io.NewSectionReader(r.FileHandle, int64(r.cursorOffset)+fileMeta.Offset, int64(fileMeta.FileSize)) - // Copy the specified length of data from the reader to the output file - buf := bytes.NewBuffer(nil) - _, err = io.CopyN(buf, limitReader, int64(fileMeta.FileSize)) - if err != nil { - return extractMeta, err - } - shaHasher := sha256.New() - - extractMeta.ExtractedCRC = crc32.Checksum(buf.Bytes(), crc32.MakeTable(crc32.IEEE)) - shaHasher.Write(buf.Bytes()) - extractMeta.ExtractedSHA256 = fmt.Sprintf("%x", shaHasher.Sum(nil)) - buf.WriteTo(writer) - - return extractMeta, nil -} -func (r *CPEReader) GetSHA256() (hash string, err error) { - shaHasher := sha256.New() - if _, err := io.Copy(shaHasher, r.FileHandle); err != nil { - return "", err - } - return fmt.Sprintf("%x", shaHasher.Sum(nil)), nil -} - -*/ diff --git a/motolol/motolol.go b/motolol/motolol.go new file mode 100644 index 0000000..14704c6 --- /dev/null +++ b/motolol/motolol.go @@ -0,0 +1,41 @@ +package main + +import ( + "fmt" + + "git.cheetah.cat/cheetah/moto-flash-data/motolol/cpe" +) + +func main() { + //, err := cpe.NewReader("../testdata/20230825-2021-dmosck-SN[121TUL1221]_TEI[00016C9C2238810]_ISSI[133705]_CP[1020]_SW[R35.010.9426]_USB1.cpe") + test, err := cpe.NewReader("../testdata/20231023-Transceiver-pei115200_SN[938TSG4891]_TEI[000148231294920]_ISSI[133706]_CP[1511]_SW[R27.000.9840]_USB2.cpe") + if err != nil { + panic(err) + } + defer test.Close() + + err = test.ValidateHeader() + if err != nil { + panic(err) + } + err = test.ReadData() + if err != nil { + panic(err) + } + for _, seg := range test.Metadata.Segments { + fmt.Printf("Segment Found: %s (%d bytes)\n", seg.Name, seg.Size) + } + fmt.Println("all alright") + + // cp, err := cp.NewReader("./output.cpe.test") + // if err != nil { + // panic(err) + // } + // defer cp.Close() + + // err = cp.Test() + // if err != nil { + // panic(err) + // } + +}