AppendMessage appends encoded msg to dst.
(dst []byte, msg *ttnpb.Message)
| 472 | |
| 473 | // AppendMessage appends encoded msg to dst. |
| 474 | func AppendMessage(dst []byte, msg *ttnpb.Message) ([]byte, error) { |
| 475 | if msg.MHdr == nil { |
| 476 | return nil, errMissing("MHDR") |
| 477 | } |
| 478 | dst, err := AppendMHDR(dst, msg.MHdr) |
| 479 | if err != nil { |
| 480 | return nil, errFailedEncoding("MHDR").WithCause(err) |
| 481 | } |
| 482 | switch msg.MHdr.MType { |
| 483 | case ttnpb.MType_CONFIRMED_DOWN, ttnpb.MType_UNCONFIRMED_DOWN: |
| 484 | pld := msg.GetMacPayload() |
| 485 | if pld == nil { |
| 486 | return nil, errMissing("MACPayload") |
| 487 | } |
| 488 | dst, err = AppendMACPayload(dst, pld, false) |
| 489 | if err != nil { |
| 490 | return nil, errFailedEncoding("downlink MACPayload").WithCause(err) |
| 491 | } |
| 492 | case ttnpb.MType_CONFIRMED_UP, ttnpb.MType_UNCONFIRMED_UP: |
| 493 | pld := msg.GetMacPayload() |
| 494 | if pld == nil { |
| 495 | return nil, errMissing("MACPayload") |
| 496 | } |
| 497 | dst, err = AppendMACPayload(dst, pld, true) |
| 498 | if err != nil { |
| 499 | return nil, errFailedEncoding("uplink MACPayload").WithCause(err) |
| 500 | } |
| 501 | case ttnpb.MType_JOIN_REQUEST: |
| 502 | pld := msg.GetJoinRequestPayload() |
| 503 | if pld == nil { |
| 504 | return nil, errMissing("JoinRequestPayload") |
| 505 | } |
| 506 | dst, err = AppendJoinRequestPayload(dst, pld) |
| 507 | if err != nil { |
| 508 | return nil, errFailedEncoding("JoinRequestPayload").WithCause(err) |
| 509 | } |
| 510 | case ttnpb.MType_REJOIN_REQUEST: |
| 511 | pld := msg.GetRejoinRequestPayload() |
| 512 | if pld == nil { |
| 513 | return nil, errMissing("RejoinRequestPayload") |
| 514 | } |
| 515 | dst, err = AppendRejoinRequestPayload(dst, pld) |
| 516 | if err != nil { |
| 517 | return nil, errFailedEncoding("RejoinRequestPayload").WithCause(err) |
| 518 | } |
| 519 | case ttnpb.MType_JOIN_ACCEPT: |
| 520 | pld := msg.GetJoinAcceptPayload() |
| 521 | if pld == nil { |
| 522 | return nil, errMissing("JoinAcceptPayload") |
| 523 | } |
| 524 | n := len(pld.Encrypted) |
| 525 | if n != 16 && n != 32 { |
| 526 | return nil, errEncryptedJoinAcceptPayloadLength(n) |
| 527 | } |
| 528 | dst = append(dst, pld.Encrypted...) |
| 529 | case ttnpb.MType_PROPRIETARY: |
| 530 | return nil, errProprietary.New() |
| 531 | default: |