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

Method JoinRequest

pkg/joinserver/http_interop.go:40–121  ·  view source on GitHub ↗
(ctx context.Context, in *interop.JoinReq)

Source from the content-addressed store, hash-verified

38}
39
40func (srv interopServer) JoinRequest(ctx context.Context, in *interop.JoinReq) (*interop.JoinAns, error) {
41 ctx = log.NewContextWithField(ctx, "namespace", "joinserver/interop")
42
43 var cfList *ttnpb.CFList
44 if len(in.CFList) > 0 {
45 cfList = new(ttnpb.CFList)
46 if err := lorawan.UnmarshalCFList(in.CFList, cfList); err != nil {
47 return nil, interop.ErrMalformedMessage.WithCause(err)
48 }
49 }
50 dlSettings := &ttnpb.DLSettings{}
51 if err := lorawan.UnmarshalDLSettings(in.DLSettings, dlSettings); err != nil {
52 return nil, interop.ErrMalformedMessage.WithCause(err)
53 }
54
55 req := &ttnpb.JoinRequest{
56 RawPayload: in.PHYPayload,
57 DevAddr: types.DevAddr(in.DevAddr).Bytes(),
58 SelectedMacVersion: ttnpb.MACVersion(in.MACVersion),
59 NetId: types.NetID(in.SenderID).Bytes(),
60 DownlinkSettings: dlSettings,
61 RxDelay: in.RxDelay,
62 CfList: cfList,
63 }
64 if err := req.ValidateFields(
65 "raw_payload",
66 "dev_addr",
67 "selected_mac_version",
68 "net_id",
69 "downlink_settings",
70 "rx_delay",
71 "cf_list",
72 ); err != nil {
73 return nil, interop.ErrMalformedMessage.WithCause(err)
74 }
75
76 res, err := srv.JS.HandleJoin(ctx, req, InteropAuthorizer)
77 if err != nil {
78 switch {
79 case errors.Resemble(err, errDecodePayload),
80 errors.Resemble(err, errWrongPayloadType),
81 errors.Resemble(err, errNoDevEUI),
82 errors.Resemble(err, errNoJoinEUI):
83 return nil, interop.ErrMalformedMessage.WithCause(err)
84 case errors.IsPermissionDenied(err):
85 return nil, interop.ErrActivation.WithCause(err)
86 case errors.Resemble(err, errMICMismatch):
87 return nil, interop.ErrMIC.WithCause(err)
88 case errors.IsNotFound(err):
89 return nil, interop.ErrUnknownDevEUI.WithCause(err)
90 }
91 return nil, interop.ErrJoinReq.WithCause(err)
92 }
93
94 header, err := in.AnswerHeader()
95 if err != nil {
96 return nil, interop.ErrMalformedMessage.WithCause(err)
97 }

Callers 1

TestInteropJoinRequestFunction · 0.95

Calls 15

ValidateFieldsMethod · 0.95
NewContextWithFieldFunction · 0.92
UnmarshalCFListFunction · 0.92
UnmarshalDLSettingsFunction · 0.92
DevAddrTypeAlias · 0.92
MACVersionTypeAlias · 0.92
NetIDTypeAlias · 0.92
ResembleFunction · 0.92
IsPermissionDeniedFunction · 0.92
IsNotFoundFunction · 0.92
BufferTypeAlias · 0.92
StdDurationOrZeroFunction · 0.92

Tested by 1

TestInteropJoinRequestFunction · 0.76