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

Method HandleJoin

pkg/joinserver/joinserver.go:235–658  ·  view source on GitHub ↗

HandleJoin handles the given join-request.

(ctx context.Context, req *ttnpb.JoinRequest, authorizer Authorizer)

Source from the content-addressed store, hash-verified

233
234// HandleJoin handles the given join-request.
235func (js *JoinServer) HandleJoin(ctx context.Context, req *ttnpb.JoinRequest, authorizer Authorizer) (res *ttnpb.JoinResponse, err error) {
236 if err := authorizer.RequireAuthorized(ctx); err != nil {
237 return nil, err
238 }
239
240 logger := log.FromContext(ctx)
241 defer func() {
242 if err != nil {
243 registerRejectJoin(ctx, req, err)
244 }
245 }()
246
247 supported := false
248 for _, ver := range supportedMACVersions {
249 if req.SelectedMacVersion == ver {
250 supported = true
251 break
252 }
253 }
254 if !supported {
255 return nil, errUnsupportedMACVersion.WithAttributes("version", req.SelectedMacVersion)
256 }
257
258 req.Payload = &ttnpb.Message{}
259 if err = lorawan.UnmarshalMessage(req.RawPayload, req.Payload); err != nil {
260 return nil, errDecodePayload.WithCause(err)
261 }
262
263 if req.Payload.MHdr.Major != ttnpb.Major_LORAWAN_R1 {
264 return nil, errUnsupportedLoRaWANMajorVersion.WithAttributes("major", req.Payload.MHdr.Major)
265 }
266 if req.Payload.MHdr.MType != ttnpb.MType_JOIN_REQUEST {
267 return nil, errWrongPayloadType.WithAttributes("type", req.Payload.MHdr.MType)
268 }
269
270 pld := req.Payload.GetJoinRequestPayload()
271 if pld == nil {
272 return nil, errNoJoinRequest.New()
273 }
274 devEUI := types.MustEUI64(pld.DevEui).OrZero()
275 if devEUI.IsZero() {
276 return nil, errNoDevEUI.New()
277 }
278 joinEUI := types.MustEUI64(pld.JoinEui).OrZero()
279 logger = logger.WithFields(log.Fields(
280 "join_eui", joinEUI,
281 "dev_eui", devEUI,
282 ))
283
284 var match bool
285 for _, p := range js.euiPrefixes {
286 if p.Matches(joinEUI) {
287 match = true
288 break
289 }
290 }
291 if !match {
292 return nil, errUnknownJoinEUI.New()

Callers

nothing calls this directly

Calls 15

BytesMethod · 0.95
SetFieldsMethod · 0.95
FromContextFunction · 0.92
UnmarshalMessageFunction · 0.92
MustEUI64Function · 0.92
FieldsFunction · 0.92
IsNotFoundFunction · 0.92
MustNetIDFunction · 0.92
IncrementDevNonceFunction · 0.92
AppendMHDRFunction · 0.92
AppendJoinAcceptPayloadFunction · 0.92
UseNwkKeyFunction · 0.92

Tested by

no test coverage detected