mirror of
https://github.com/jwetzell/psn-go.git
synced 2026-08-23 16:09:14 +00:00
cleanup function layout for decoders
This commit is contained in:
@@ -10,24 +10,30 @@ type DataPacketChunkData struct {
|
|||||||
TrackerList *DataTrackerListChunk
|
TrackerList *DataTrackerListChunk
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeDataPacketChunkData(dataPacketChunk Chunk) DataPacketChunkData {
|
type DataPacketChunk struct {
|
||||||
|
Chunk Chunk
|
||||||
|
Data DataPacketChunkData
|
||||||
|
}
|
||||||
|
|
||||||
|
func DecodeDataPacketChunk(bytes []byte) DataPacketChunk {
|
||||||
|
chunk := DecodeChunk(bytes)
|
||||||
data := DataPacketChunkData{}
|
data := DataPacketChunkData{}
|
||||||
|
|
||||||
if dataPacketChunk.Header.HasSubchunks && dataPacketChunk.ChunkData != nil && dataPacketChunk.Header.DataLen > 0 {
|
if chunk.Header.HasSubchunks && chunk.ChunkData != nil && chunk.Header.DataLen > 0 {
|
||||||
offset := 0
|
offset := 0
|
||||||
|
|
||||||
for offset < int(dataPacketChunk.Header.DataLen) {
|
for offset < int(chunk.Header.DataLen) {
|
||||||
|
|
||||||
switch id := binary.LittleEndian.Uint16(dataPacketChunk.ChunkData[offset : offset+2]); id {
|
switch id := binary.LittleEndian.Uint16(chunk.ChunkData[offset : offset+2]); id {
|
||||||
case 0:
|
case 0:
|
||||||
packet_header := DecodePacketHeaderChunk(dataPacketChunk.ChunkData[offset:])
|
packet_header := DecodePacketHeaderChunk(chunk.ChunkData[offset:])
|
||||||
data.PacketHeader = &packet_header
|
data.PacketHeader = &packet_header
|
||||||
offset += 4
|
offset += 4
|
||||||
if packet_header.Chunk.Header.DataLen > 0 {
|
if packet_header.Chunk.Header.DataLen > 0 {
|
||||||
offset = offset + int(packet_header.Chunk.Header.DataLen)
|
offset = offset + int(packet_header.Chunk.Header.DataLen)
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
tracker_list := DecodeDataTrackerListChunk(dataPacketChunk.ChunkData[offset:])
|
tracker_list := DecodeDataTrackerListChunk(chunk.ChunkData[offset:])
|
||||||
data.TrackerList = &tracker_list
|
data.TrackerList = &tracker_list
|
||||||
offset += 4
|
offset += 4
|
||||||
if tracker_list.Chunk.Header.DataLen > 0 {
|
if tracker_list.Chunk.Header.DataLen > 0 {
|
||||||
@@ -39,17 +45,6 @@ func decodeDataPacketChunkData(dataPacketChunk Chunk) DataPacketChunkData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataPacketChunk struct {
|
|
||||||
Chunk Chunk
|
|
||||||
Data DataPacketChunkData
|
|
||||||
}
|
|
||||||
|
|
||||||
func DecodeDataPacketChunk(bytes []byte) DataPacketChunk {
|
|
||||||
chunk := DecodeChunk(bytes)
|
|
||||||
data := decodeDataPacketChunkData(chunk)
|
|
||||||
|
|
||||||
return DataPacketChunk{
|
return DataPacketChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -15,74 +15,6 @@ type DataTrackerChunkData struct {
|
|||||||
Timestamp *DataTrackerTimestampChunk
|
Timestamp *DataTrackerTimestampChunk
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeDataTrackerChunkData(dataTrackerChunk Chunk) DataTrackerChunkData {
|
|
||||||
|
|
||||||
data := DataTrackerChunkData{}
|
|
||||||
|
|
||||||
if dataTrackerChunk.Header.HasSubchunks && dataTrackerChunk.ChunkData != nil && dataTrackerChunk.Header.DataLen > 0 {
|
|
||||||
offset := 0
|
|
||||||
|
|
||||||
for offset < int(dataTrackerChunk.Header.DataLen) {
|
|
||||||
|
|
||||||
switch id := binary.LittleEndian.Uint16(dataTrackerChunk.ChunkData[offset : offset+2]); id {
|
|
||||||
case 0:
|
|
||||||
pos := DecodeDataTrackerXYZChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Pos = &pos
|
|
||||||
offset += 4
|
|
||||||
if data.Pos.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Pos.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 1:
|
|
||||||
speed := DecodeDataTrackerXYZChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Speed = &speed
|
|
||||||
offset += 4
|
|
||||||
if data.Speed.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Speed.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
ori := DecodeDataTrackerXYZChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Ori = &ori
|
|
||||||
offset += 4
|
|
||||||
if data.Ori.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Ori.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 3:
|
|
||||||
status := DecodeDataTrackerStatusChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Status = &status
|
|
||||||
offset += 4
|
|
||||||
if data.Status.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Status.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 4:
|
|
||||||
accel := DecodeDataTrackerXYZChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Accel = &accel
|
|
||||||
offset += 4
|
|
||||||
if data.Accel.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Accel.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 5:
|
|
||||||
trgtpos := DecodeDataTrackerXYZChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.TrgtPos = &trgtpos
|
|
||||||
offset += 4
|
|
||||||
if data.TrgtPos.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.TrgtPos.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
case 6:
|
|
||||||
timestamp := DecodeDataTrackerTimestampChunk(dataTrackerChunk.ChunkData[offset:])
|
|
||||||
data.Timestamp = ×tamp
|
|
||||||
offset += 4
|
|
||||||
if data.Timestamp.Chunk.Header.DataLen > 0 {
|
|
||||||
offset = offset + int(data.Timestamp.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
offset = int(dataTrackerChunk.Header.DataLen)
|
|
||||||
slog.Error("unhandled data tracker packet chunk id", "id", id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataTrackerChunk struct {
|
type DataTrackerChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data DataTrackerChunkData
|
Data DataTrackerChunkData
|
||||||
@@ -90,7 +22,69 @@ type DataTrackerChunk struct {
|
|||||||
|
|
||||||
func DecodeDataTrackerChunk(bytes []byte) DataTrackerChunk {
|
func DecodeDataTrackerChunk(bytes []byte) DataTrackerChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeDataTrackerChunkData(chunk)
|
data := DataTrackerChunkData{}
|
||||||
|
|
||||||
|
if chunk.Header.HasSubchunks && chunk.ChunkData != nil && chunk.Header.DataLen > 0 {
|
||||||
|
offset := 0
|
||||||
|
|
||||||
|
for offset < int(chunk.Header.DataLen) {
|
||||||
|
|
||||||
|
switch id := binary.LittleEndian.Uint16(chunk.ChunkData[offset : offset+2]); id {
|
||||||
|
case 0:
|
||||||
|
pos := DecodeDataTrackerXYZChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Pos = &pos
|
||||||
|
offset += 4
|
||||||
|
if data.Pos.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Pos.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
speed := DecodeDataTrackerXYZChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Speed = &speed
|
||||||
|
offset += 4
|
||||||
|
if data.Speed.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Speed.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
ori := DecodeDataTrackerXYZChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Ori = &ori
|
||||||
|
offset += 4
|
||||||
|
if data.Ori.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Ori.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
status := DecodeDataTrackerStatusChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Status = &status
|
||||||
|
offset += 4
|
||||||
|
if data.Status.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Status.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
accel := DecodeDataTrackerXYZChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Accel = &accel
|
||||||
|
offset += 4
|
||||||
|
if data.Accel.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Accel.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
trgtpos := DecodeDataTrackerXYZChunk(chunk.ChunkData[offset:])
|
||||||
|
data.TrgtPos = &trgtpos
|
||||||
|
offset += 4
|
||||||
|
if data.TrgtPos.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.TrgtPos.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
case 6:
|
||||||
|
timestamp := DecodeDataTrackerTimestampChunk(chunk.ChunkData[offset:])
|
||||||
|
data.Timestamp = ×tamp
|
||||||
|
offset += 4
|
||||||
|
if data.Timestamp.Chunk.Header.DataLen > 0 {
|
||||||
|
offset = offset + int(data.Timestamp.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
offset = int(chunk.Header.DataLen)
|
||||||
|
slog.Error("unhandled data tracker packet chunk id", "id", id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return DataTrackerChunk{
|
return DataTrackerChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -3,13 +3,19 @@ package decoders
|
|||||||
type DataTrackerListChunkData struct {
|
type DataTrackerListChunkData struct {
|
||||||
Trackers []DataTrackerChunk
|
Trackers []DataTrackerChunk
|
||||||
}
|
}
|
||||||
|
type DataTrackerListChunk struct {
|
||||||
|
Chunk Chunk
|
||||||
|
Data DataTrackerListChunkData
|
||||||
|
}
|
||||||
|
|
||||||
func decodeDataTrackerListChunkData(dataTrackerListChunk Chunk) DataTrackerListChunkData {
|
func DecodeDataTrackerListChunk(bytes []byte) DataTrackerListChunk {
|
||||||
var trackers []DataTrackerChunk
|
chunk := DecodeChunk(bytes)
|
||||||
if dataTrackerListChunk.Header.HasSubchunks && dataTrackerListChunk.Header.DataLen > 0 {
|
|
||||||
|
trackers := []DataTrackerChunk{}
|
||||||
|
if chunk.Header.HasSubchunks && chunk.Header.DataLen > 0 {
|
||||||
offset := 0
|
offset := 0
|
||||||
for offset < int(dataTrackerListChunk.Header.DataLen) {
|
for offset < int(chunk.Header.DataLen) {
|
||||||
trackerChunk := DecodeDataTrackerChunk(dataTrackerListChunk.ChunkData[offset:])
|
trackerChunk := DecodeDataTrackerChunk(chunk.ChunkData[offset:])
|
||||||
offset += 4
|
offset += 4
|
||||||
if trackerChunk.Chunk.Header.DataLen > 0 {
|
if trackerChunk.Chunk.Header.DataLen > 0 {
|
||||||
offset += int(trackerChunk.Chunk.Header.DataLen)
|
offset += int(trackerChunk.Chunk.Header.DataLen)
|
||||||
@@ -18,19 +24,9 @@ func decodeDataTrackerListChunkData(dataTrackerListChunk Chunk) DataTrackerListC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return DataTrackerListChunkData{
|
data := DataTrackerListChunkData{
|
||||||
Trackers: trackers,
|
Trackers: trackers,
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
type DataTrackerListChunk struct {
|
|
||||||
Chunk Chunk
|
|
||||||
Data DataTrackerListChunkData
|
|
||||||
}
|
|
||||||
|
|
||||||
func DecodeDataTrackerListChunk(bytes []byte) DataTrackerListChunk {
|
|
||||||
chunk := DecodeChunk(bytes)
|
|
||||||
data := decodeDataTrackerListChunkData(chunk)
|
|
||||||
|
|
||||||
return DataTrackerListChunk{
|
return DataTrackerListChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -9,14 +9,6 @@ type DataTrackerStatusChunkData struct {
|
|||||||
Validity float32
|
Validity float32
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeDataTrackerStatusChunk(dataTrackerStatusChunk Chunk) DataTrackerStatusChunkData {
|
|
||||||
statusBits := binary.LittleEndian.Uint32(dataTrackerStatusChunk.ChunkData[0:4])
|
|
||||||
|
|
||||||
return DataTrackerStatusChunkData{
|
|
||||||
Validity: math.Float32frombits(statusBits),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataTrackerStatusChunk struct {
|
type DataTrackerStatusChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data DataTrackerStatusChunkData
|
Data DataTrackerStatusChunkData
|
||||||
@@ -24,7 +16,12 @@ type DataTrackerStatusChunk struct {
|
|||||||
|
|
||||||
func DecodeDataTrackerStatusChunk(bytes []byte) DataTrackerStatusChunk {
|
func DecodeDataTrackerStatusChunk(bytes []byte) DataTrackerStatusChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeDataTrackerStatusChunk(chunk)
|
|
||||||
|
statusBits := binary.LittleEndian.Uint32(chunk.ChunkData[0:4])
|
||||||
|
|
||||||
|
data := DataTrackerStatusChunkData{
|
||||||
|
Validity: math.Float32frombits(statusBits),
|
||||||
|
}
|
||||||
|
|
||||||
return DataTrackerStatusChunk{
|
return DataTrackerStatusChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -8,14 +8,6 @@ type DataTrackerTimestampChunkData struct {
|
|||||||
Timestamp uint64
|
Timestamp uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeDataTrackerTimestampChunk(dataTrackerTimestampChunk Chunk) DataTrackerTimestampChunkData {
|
|
||||||
timestamp := binary.LittleEndian.Uint64(dataTrackerTimestampChunk.ChunkData[0:8])
|
|
||||||
|
|
||||||
return DataTrackerTimestampChunkData{
|
|
||||||
Timestamp: timestamp,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataTrackerTimestampChunk struct {
|
type DataTrackerTimestampChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data DataTrackerTimestampChunkData
|
Data DataTrackerTimestampChunkData
|
||||||
@@ -23,7 +15,12 @@ type DataTrackerTimestampChunk struct {
|
|||||||
|
|
||||||
func DecodeDataTrackerTimestampChunk(bytes []byte) DataTrackerTimestampChunk {
|
func DecodeDataTrackerTimestampChunk(bytes []byte) DataTrackerTimestampChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeDataTrackerTimestampChunk(chunk)
|
|
||||||
|
timestamp := binary.LittleEndian.Uint64(chunk.ChunkData[0:8])
|
||||||
|
|
||||||
|
data := DataTrackerTimestampChunkData{
|
||||||
|
Timestamp: timestamp,
|
||||||
|
}
|
||||||
|
|
||||||
return DataTrackerTimestampChunk{
|
return DataTrackerTimestampChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -11,18 +11,6 @@ type DataTrackerXYZChunkData struct {
|
|||||||
Z float32
|
Z float32
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeDataTrackerXYZChunk(dataTrackerXYZChunk Chunk) DataTrackerXYZChunkData {
|
|
||||||
xBits := binary.LittleEndian.Uint32(dataTrackerXYZChunk.ChunkData[0:4])
|
|
||||||
yBits := binary.LittleEndian.Uint32(dataTrackerXYZChunk.ChunkData[4:8])
|
|
||||||
zBits := binary.LittleEndian.Uint32(dataTrackerXYZChunk.ChunkData[8:12])
|
|
||||||
|
|
||||||
return DataTrackerXYZChunkData{
|
|
||||||
X: math.Float32frombits(xBits),
|
|
||||||
Y: math.Float32frombits(yBits),
|
|
||||||
Z: math.Float32frombits(zBits),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type DataTrackerXYZChunk struct {
|
type DataTrackerXYZChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data DataTrackerXYZChunkData
|
Data DataTrackerXYZChunkData
|
||||||
@@ -30,7 +18,16 @@ type DataTrackerXYZChunk struct {
|
|||||||
|
|
||||||
func DecodeDataTrackerXYZChunk(bytes []byte) DataTrackerXYZChunk {
|
func DecodeDataTrackerXYZChunk(bytes []byte) DataTrackerXYZChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeDataTrackerXYZChunk(chunk)
|
|
||||||
|
xBits := binary.LittleEndian.Uint32(chunk.ChunkData[0:4])
|
||||||
|
yBits := binary.LittleEndian.Uint32(chunk.ChunkData[4:8])
|
||||||
|
zBits := binary.LittleEndian.Uint32(chunk.ChunkData[8:12])
|
||||||
|
|
||||||
|
data := DataTrackerXYZChunkData{
|
||||||
|
X: math.Float32frombits(xBits),
|
||||||
|
Y: math.Float32frombits(yBits),
|
||||||
|
Z: math.Float32frombits(zBits),
|
||||||
|
}
|
||||||
|
|
||||||
return DataTrackerXYZChunk{
|
return DataTrackerXYZChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -11,31 +11,37 @@ type InfoPacketChunkData struct {
|
|||||||
TrackerList *InfoTrackerListChunk
|
TrackerList *InfoTrackerListChunk
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInfoPacketChunkData(infoPacketChunk Chunk) InfoPacketChunkData {
|
type InfoPacketChunk struct {
|
||||||
|
Chunk Chunk
|
||||||
|
Data InfoPacketChunkData
|
||||||
|
}
|
||||||
|
|
||||||
|
func DecodeInfoPacketChunk(bytes []byte) InfoPacketChunk {
|
||||||
|
chunk := DecodeChunk(bytes)
|
||||||
data := InfoPacketChunkData{}
|
data := InfoPacketChunkData{}
|
||||||
|
|
||||||
if infoPacketChunk.Header.HasSubchunks && infoPacketChunk.ChunkData != nil && infoPacketChunk.Header.DataLen > 0 {
|
if chunk.Header.HasSubchunks && chunk.ChunkData != nil && chunk.Header.DataLen > 0 {
|
||||||
offset := 0
|
offset := 0
|
||||||
|
|
||||||
for offset < int(infoPacketChunk.Header.DataLen) {
|
for offset < int(chunk.Header.DataLen) {
|
||||||
|
|
||||||
switch id := binary.LittleEndian.Uint16(infoPacketChunk.ChunkData[offset : offset+2]); id {
|
switch id := binary.LittleEndian.Uint16(chunk.ChunkData[offset : offset+2]); id {
|
||||||
case 0:
|
case 0:
|
||||||
packet_header := DecodePacketHeaderChunk(infoPacketChunk.ChunkData[offset:])
|
packet_header := DecodePacketHeaderChunk(chunk.ChunkData[offset:])
|
||||||
data.PacketHeader = &packet_header
|
data.PacketHeader = &packet_header
|
||||||
offset += 4
|
offset += 4
|
||||||
if packet_header.Chunk.Header.DataLen > 0 {
|
if packet_header.Chunk.Header.DataLen > 0 {
|
||||||
offset = offset + int(packet_header.Chunk.Header.DataLen)
|
offset = offset + int(packet_header.Chunk.Header.DataLen)
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
system_name := DecodeInfoSystemNameChunk(infoPacketChunk.ChunkData[offset:])
|
system_name := DecodeInfoSystemNameChunk(chunk.ChunkData[offset:])
|
||||||
data.SystemName = &system_name
|
data.SystemName = &system_name
|
||||||
offset += 4
|
offset += 4
|
||||||
if system_name.Chunk.Header.DataLen > 0 {
|
if system_name.Chunk.Header.DataLen > 0 {
|
||||||
offset = offset + int(system_name.Chunk.Header.DataLen)
|
offset = offset + int(system_name.Chunk.Header.DataLen)
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
tracker_list := DecodeInfoTrackerListChunk(infoPacketChunk.ChunkData[offset:])
|
tracker_list := DecodeInfoTrackerListChunk(chunk.ChunkData[offset:])
|
||||||
data.TrackerList = &tracker_list
|
data.TrackerList = &tracker_list
|
||||||
offset += 4
|
offset += 4
|
||||||
if tracker_list.Chunk.Header.DataLen > 0 {
|
if tracker_list.Chunk.Header.DataLen > 0 {
|
||||||
@@ -47,17 +53,6 @@ func decodeInfoPacketChunkData(infoPacketChunk Chunk) InfoPacketChunkData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
type InfoPacketChunk struct {
|
|
||||||
Chunk Chunk
|
|
||||||
Data InfoPacketChunkData
|
|
||||||
}
|
|
||||||
|
|
||||||
func DecodeInfoPacketChunk(bytes []byte) InfoPacketChunk {
|
|
||||||
chunk := DecodeChunk(bytes)
|
|
||||||
data := decodeInfoPacketChunkData(chunk)
|
|
||||||
|
|
||||||
return InfoPacketChunk{
|
return InfoPacketChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -4,14 +4,6 @@ type InfoSystemNameChunkData struct {
|
|||||||
SystemName string
|
SystemName string
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInfoSystemNameChunkData(infoSystemNameChunk Chunk) InfoSystemNameChunkData {
|
|
||||||
system_name := string(infoSystemNameChunk.ChunkData[0:infoSystemNameChunk.Header.DataLen])
|
|
||||||
|
|
||||||
return InfoSystemNameChunkData{
|
|
||||||
SystemName: system_name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type InfoSystemNameChunk struct {
|
type InfoSystemNameChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data InfoSystemNameChunkData
|
Data InfoSystemNameChunkData
|
||||||
@@ -19,7 +11,11 @@ type InfoSystemNameChunk struct {
|
|||||||
|
|
||||||
func DecodeInfoSystemNameChunk(bytes []byte) InfoSystemNameChunk {
|
func DecodeInfoSystemNameChunk(bytes []byte) InfoSystemNameChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeInfoSystemNameChunkData(chunk)
|
system_name := string(chunk.ChunkData[0:chunk.Header.DataLen])
|
||||||
|
|
||||||
|
data := InfoSystemNameChunkData{
|
||||||
|
SystemName: system_name,
|
||||||
|
}
|
||||||
|
|
||||||
return InfoSystemNameChunk{
|
return InfoSystemNameChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -9,17 +9,23 @@ type InfoTrackerChunkData struct {
|
|||||||
TrackerName *InfoTrackerNameChunk
|
TrackerName *InfoTrackerNameChunk
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInfoTrackerChunkData(infoTrackerChunk Chunk) InfoTrackerChunkData {
|
type InfoTrackerChunk struct {
|
||||||
|
Chunk Chunk
|
||||||
|
Data InfoTrackerChunkData
|
||||||
|
}
|
||||||
|
|
||||||
|
func DecodeInfoTrackerChunk(bytes []byte) InfoTrackerChunk {
|
||||||
|
chunk := DecodeChunk(bytes)
|
||||||
data := InfoTrackerChunkData{}
|
data := InfoTrackerChunkData{}
|
||||||
|
|
||||||
if infoTrackerChunk.Header.HasSubchunks && infoTrackerChunk.ChunkData != nil && infoTrackerChunk.Header.DataLen > 0 {
|
if chunk.Header.HasSubchunks && chunk.ChunkData != nil && chunk.Header.DataLen > 0 {
|
||||||
offset := 0
|
offset := 0
|
||||||
|
|
||||||
for offset < int(infoTrackerChunk.Header.DataLen) {
|
for offset < int(chunk.Header.DataLen) {
|
||||||
|
|
||||||
switch id := binary.LittleEndian.Uint16(infoTrackerChunk.ChunkData[offset : offset+2]); id {
|
switch id := binary.LittleEndian.Uint16(chunk.ChunkData[offset : offset+2]); id {
|
||||||
case 0:
|
case 0:
|
||||||
tracker_name := DecodeInfoTrackerNameChunk(infoTrackerChunk.ChunkData[offset:])
|
tracker_name := DecodeInfoTrackerNameChunk(chunk.ChunkData[offset:])
|
||||||
data.TrackerName = &tracker_name
|
data.TrackerName = &tracker_name
|
||||||
offset += 4
|
offset += 4
|
||||||
if tracker_name.Chunk.Header.DataLen > 0 {
|
if tracker_name.Chunk.Header.DataLen > 0 {
|
||||||
@@ -30,17 +36,6 @@ func decodeInfoTrackerChunkData(infoTrackerChunk Chunk) InfoTrackerChunkData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
type InfoTrackerChunk struct {
|
|
||||||
Chunk Chunk
|
|
||||||
Data InfoTrackerChunkData
|
|
||||||
}
|
|
||||||
|
|
||||||
func DecodeInfoTrackerChunk(bytes []byte) InfoTrackerChunk {
|
|
||||||
chunk := DecodeChunk(bytes)
|
|
||||||
data := decodeInfoTrackerChunkData(chunk)
|
|
||||||
|
|
||||||
return InfoTrackerChunk{
|
return InfoTrackerChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -4,25 +4,6 @@ type InfoTrackerListChunkData struct {
|
|||||||
Trackers []InfoTrackerChunk
|
Trackers []InfoTrackerChunk
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInfoTrackerListChunkData(infoTrackerListChunk Chunk) InfoTrackerListChunkData {
|
|
||||||
var trackers []InfoTrackerChunk
|
|
||||||
if infoTrackerListChunk.Header.HasSubchunks && infoTrackerListChunk.Header.DataLen > 0 {
|
|
||||||
offset := 0
|
|
||||||
for offset < int(infoTrackerListChunk.Header.DataLen) {
|
|
||||||
trackerChunk := DecodeInfoTrackerChunk(infoTrackerListChunk.ChunkData[offset:])
|
|
||||||
offset += 4
|
|
||||||
if trackerChunk.Chunk.Header.DataLen > 0 {
|
|
||||||
offset += int(trackerChunk.Chunk.Header.DataLen)
|
|
||||||
}
|
|
||||||
trackers = append(trackers, trackerChunk)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return InfoTrackerListChunkData{
|
|
||||||
Trackers: trackers,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type InfoTrackerListChunk struct {
|
type InfoTrackerListChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data InfoTrackerListChunkData
|
Data InfoTrackerListChunkData
|
||||||
@@ -30,7 +11,23 @@ type InfoTrackerListChunk struct {
|
|||||||
|
|
||||||
func DecodeInfoTrackerListChunk(bytes []byte) InfoTrackerListChunk {
|
func DecodeInfoTrackerListChunk(bytes []byte) InfoTrackerListChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeInfoTrackerListChunkData(chunk)
|
|
||||||
|
trackers := []InfoTrackerChunk{}
|
||||||
|
if chunk.Header.HasSubchunks && chunk.Header.DataLen > 0 {
|
||||||
|
offset := 0
|
||||||
|
for offset < int(chunk.Header.DataLen) {
|
||||||
|
trackerChunk := DecodeInfoTrackerChunk(chunk.ChunkData[offset:])
|
||||||
|
offset += 4
|
||||||
|
if trackerChunk.Chunk.Header.DataLen > 0 {
|
||||||
|
offset += int(trackerChunk.Chunk.Header.DataLen)
|
||||||
|
}
|
||||||
|
trackers = append(trackers, trackerChunk)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data := InfoTrackerListChunkData{
|
||||||
|
Trackers: trackers,
|
||||||
|
}
|
||||||
|
|
||||||
return InfoTrackerListChunk{
|
return InfoTrackerListChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -4,14 +4,6 @@ type InfoTrackerNameChunkData struct {
|
|||||||
TrackerName string
|
TrackerName string
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeInfoTrackerNameChunkData(infoTrackerNameChunk Chunk) InfoTrackerNameChunkData {
|
|
||||||
tracker_name := string(infoTrackerNameChunk.ChunkData[0:infoTrackerNameChunk.Header.DataLen])
|
|
||||||
|
|
||||||
return InfoTrackerNameChunkData{
|
|
||||||
TrackerName: tracker_name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type InfoTrackerNameChunk struct {
|
type InfoTrackerNameChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data InfoTrackerNameChunkData
|
Data InfoTrackerNameChunkData
|
||||||
@@ -19,7 +11,12 @@ type InfoTrackerNameChunk struct {
|
|||||||
|
|
||||||
func DecodeInfoTrackerNameChunk(bytes []byte) InfoTrackerNameChunk {
|
func DecodeInfoTrackerNameChunk(bytes []byte) InfoTrackerNameChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodeInfoTrackerNameChunkData(chunk)
|
|
||||||
|
tracker_name := string(chunk.ChunkData[0:chunk.Header.DataLen])
|
||||||
|
|
||||||
|
data := InfoTrackerNameChunkData{
|
||||||
|
TrackerName: tracker_name,
|
||||||
|
}
|
||||||
|
|
||||||
return InfoTrackerNameChunk{
|
return InfoTrackerNameChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
@@ -10,22 +10,6 @@ type PacketHeaderChunkData struct {
|
|||||||
FramePacketCount uint8
|
FramePacketCount uint8
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodePacketHeaderChunkData(packetHeaderChunk Chunk) PacketHeaderChunkData {
|
|
||||||
packet_timestamp := binary.LittleEndian.Uint64(packetHeaderChunk.ChunkData[0:8])
|
|
||||||
version_high := packetHeaderChunk.ChunkData[8]
|
|
||||||
version_low := packetHeaderChunk.ChunkData[9]
|
|
||||||
frame_id := packetHeaderChunk.ChunkData[10]
|
|
||||||
frame_packet_count := packetHeaderChunk.ChunkData[11]
|
|
||||||
|
|
||||||
return PacketHeaderChunkData{
|
|
||||||
PacketTimestamp: packet_timestamp,
|
|
||||||
VersionHigh: version_high,
|
|
||||||
VersionLow: version_low,
|
|
||||||
FrameId: frame_id,
|
|
||||||
FramePacketCount: frame_packet_count,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type PacketHeaderChunk struct {
|
type PacketHeaderChunk struct {
|
||||||
Chunk Chunk
|
Chunk Chunk
|
||||||
Data PacketHeaderChunkData
|
Data PacketHeaderChunkData
|
||||||
@@ -33,7 +17,20 @@ type PacketHeaderChunk struct {
|
|||||||
|
|
||||||
func DecodePacketHeaderChunk(bytes []byte) PacketHeaderChunk {
|
func DecodePacketHeaderChunk(bytes []byte) PacketHeaderChunk {
|
||||||
chunk := DecodeChunk(bytes)
|
chunk := DecodeChunk(bytes)
|
||||||
data := decodePacketHeaderChunkData(chunk)
|
|
||||||
|
packet_timestamp := binary.LittleEndian.Uint64(chunk.ChunkData[0:8])
|
||||||
|
version_high := chunk.ChunkData[8]
|
||||||
|
version_low := chunk.ChunkData[9]
|
||||||
|
frame_id := chunk.ChunkData[10]
|
||||||
|
frame_packet_count := chunk.ChunkData[11]
|
||||||
|
|
||||||
|
data := PacketHeaderChunkData{
|
||||||
|
PacketTimestamp: packet_timestamp,
|
||||||
|
VersionHigh: version_high,
|
||||||
|
VersionLow: version_low,
|
||||||
|
FrameId: frame_id,
|
||||||
|
FramePacketCount: frame_packet_count,
|
||||||
|
}
|
||||||
|
|
||||||
return PacketHeaderChunk{
|
return PacketHeaderChunk{
|
||||||
Chunk: chunk,
|
Chunk: chunk,
|
||||||
|
|||||||
Reference in New Issue
Block a user