in ptp/protocol/protocol.go [416:451]
func DecodePacket(b []byte) (Packet, error) {
r := bytes.NewReader(b)
head := &Header{}
if err := binary.Read(r, binary.BigEndian, head); err != nil {
return nil, err
}
msgType := head.MessageType()
var p Packet
switch msgType {
case MessageSync, MessageDelayReq:
p = &SyncDelayReq{}
case MessagePDelayReq:
p = &PDelayReq{}
case MessagePDelayResp:
p = &PDelayResp{}
case MessageFollowUp:
p = &FollowUp{}
case MessageDelayResp:
p = &DelayResp{}
case MessagePDelayRespFollowUp:
p = &PDelayRespFollowUp{}
case MessageAnnounce:
p = &Announce{}
case MessageSignaling:
p = &Signaling{}
case MessageManagement:
return decodeMgmtPacket(b)
default:
return nil, fmt.Errorf("unsupported type %s", msgType)
}
if err := FromBytes(b, p); err != nil {
return nil, err
}
return p, nil
}