// GetAllBrokersForDevAddr returns all brokers that can handle the given DevAddr func (c *DefaultClient) GetAllBrokersForDevAddr(devAddr types.DevAddr) (announcements []*Announcement, err error) { brokers, err := c.GetAll("broker") if err != nil { return nil, err } next: for _, broker := range brokers { for _, prefix := range broker.DevAddrPrefixes() { if devAddr.HasPrefix(prefix) { announcements = append(announcements, broker) continue next } } } return }
func (n *networkServer) getDevAddr(constraints ...string) (types.DevAddr, error) { // Generate random DevAddr bytes var devAddr types.DevAddr copy(devAddr[:], random.Bytes(4)) // Get a random prefix that matches the constraints prefixes := n.GetPrefixesFor(constraints...) if len(prefixes) == 0 { return types.DevAddr{}, errors.NewErrNotFound(fmt.Sprintf("DevAddr prefix with constraints %v", constraints)) } // Select a prefix prefix := prefixes[random.Intn(len(prefixes))] // Apply the prefix devAddr = devAddr.WithPrefix(prefix) return devAddr, nil }
// ListForAddress lists all devices for a specific DevAddr func (s *RedisDeviceStore) ListForAddress(devAddr types.DevAddr) ([]*Device, error) { deviceKeys, err := s.devAddrIndex.Get(devAddr.String()) if errors.GetErrType(err) == errors.NotFound { return nil, nil } if err != nil { return nil, err } devicesI, err := s.store.GetAll(deviceKeys, nil) if err != nil { return nil, err } devices := make([]*Device, 0, len(devicesI)) for _, deviceI := range devicesI { if device, ok := deviceI.(Device); ok { devices = append(devices, &device) } } return devices, nil }