MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / read

Method read

pkg/encoding/lorawan/mac.go:1476–1524  ·  view source on GitHub ↗
(phy band.Band, r io.Reader, isUplink bool, cmd *ttnpb.MACCommand)

Source from the content-addressed store, hash-verified

1474)
1475
1476func (spec MACCommandSpec) read(phy band.Band, r io.Reader, isUplink bool, cmd *ttnpb.MACCommand) error {
1477 b := make([]byte, 1)
1478 _, err := r.Read(b)
1479 if err != nil {
1480 return err
1481 }
1482
1483 cid := ttnpb.MACCommandIdentifier(b[0])
1484
1485 desc, ok := spec[cid]
1486 if !ok || desc == nil {
1487 b, err := io.ReadAll(r)
1488 if err != nil {
1489 return err
1490 }
1491
1492 payload := &ttnpb.MACCommand_RawPayload{
1493 RawPayload: b,
1494 }
1495 return cmd.SetFields(&ttnpb.MACCommand{Payload: payload, Cid: cid}, ttnpb.MACCommandFieldPathsTopLevel...)
1496 }
1497
1498 var n uint16
1499 var unmarshaler func(phy band.Band, b []byte, cmd *ttnpb.MACCommand) error
1500 if isUplink {
1501 n = desc.UplinkLength
1502 unmarshaler = desc.UnmarshalUplink
1503 } else {
1504 n = desc.DownlinkLength
1505 unmarshaler = desc.UnmarshalDownlink
1506 }
1507 if unmarshaler == nil {
1508 return errNoUnmarshaler.WithAttributes("cid", fmt.Sprintf("0x%X", int32(cid)))
1509 }
1510
1511 if n == 0 {
1512 b = nil
1513 } else {
1514 b = make([]byte, n)
1515 _, err = r.Read(b)
1516 if err != nil {
1517 return err
1518 }
1519 }
1520 if err := unmarshaler(phy, b, cmd); err != nil {
1521 return errDecodingMACCommand.WithAttributes("cid", fmt.Sprintf("0x%X", int32(cid))).WithCause(err)
1522 }
1523 return nil
1524}
1525
1526// ReadUplink reads an uplink MACCommand from r into cmd and returns any errors encountered.
1527func (spec MACCommandSpec) ReadUplink(phy band.Band, r io.Reader, cmd *ttnpb.MACCommand) error {

Callers 2

ReadUplinkMethod · 0.95
ReadDownlinkMethod · 0.95

Calls 5

MACCommandIdentifierTypeAlias · 0.92
ReadMethod · 0.45
SetFieldsMethod · 0.45
WithAttributesMethod · 0.45
WithCauseMethod · 0.45

Tested by

no test coverage detected