UnmarshalMACPayload unmarshals b into msg.
(b []byte, msg *ttnpb.MACPayload, isUplink bool)
| 159 | |
| 160 | // UnmarshalMACPayload unmarshals b into msg. |
| 161 | func UnmarshalMACPayload(b []byte, msg *ttnpb.MACPayload, isUplink bool) error { |
| 162 | n := uint8(len(b)) |
| 163 | if n < 7 { |
| 164 | return errExpectedLengthHigherOrEqual("FHDR", 7)(n) |
| 165 | } |
| 166 | fOptsLen := b[4] & 0xf |
| 167 | fhdrLen := fOptsLen + 7 |
| 168 | if n < fhdrLen { |
| 169 | return errExpectedLengthHigherOrEqual("MACPayload", fhdrLen)(n) |
| 170 | } |
| 171 | msg.FHdr = &ttnpb.FHDR{} |
| 172 | if err := UnmarshalFHDR(b[0:fhdrLen], msg.FHdr, isUplink); err != nil { |
| 173 | return errFailedDecoding("FHDR").WithCause(err) |
| 174 | } |
| 175 | |
| 176 | fPortIdx := fhdrLen |
| 177 | if n > fPortIdx { |
| 178 | msg.FPort = uint32(b[fPortIdx]) |
| 179 | |
| 180 | frmPayloadIdx := fPortIdx + 1 |
| 181 | if n > frmPayloadIdx { |
| 182 | msg.FrmPayload = make([]byte, 0, n-frmPayloadIdx) |
| 183 | msg.FrmPayload = append(msg.FrmPayload, b[frmPayloadIdx:]...) |
| 184 | } |
| 185 | } |
| 186 | return nil |
| 187 | } |
| 188 | |
| 189 | // AppendDLSettings appends encoded msg to dst. |
| 190 | func AppendDLSettings(dst []byte, msg *ttnpb.DLSettings) ([]byte, error) { |
no test coverage detected