def METHOD_NAME(self):
    if self.bbox:
        params = {
         'lomin': self.bbox[0],
         'lamin': self.bbox[1],
         'lomax': self.bbox[2],
         'lamax': self.bbox[3],
         }
    else:
        params = {}  # Global
    url = urljoin(self.url, "api/states/all")
    time = None
    with requests.Session() as session:
        while True:
            response = session.get(url, params=params)
            response.raise_for_status()
            data = response.json()
            states_and_metadata = []
            for state in data['states']:
                if state[8]:  # On ground
                    continue
                # Must have position (lon, lat, geo-alt)
                if not all(state[index] for index in (5, 6, 13)):
                    continue
                timestamp = datetime.datetime.utcfromtimestamp(state[3])
                # Skip old detections
                if time is not None and timestamp <= time:
                    continue
                states_and_metadata.append((
                    State([[state[5]], [state[6]], [state[13]]], timestamp=timestamp),
                    {
                        'icao24': state[0],
                        'callsign': state[1],
                        'orign_country': state[2],
                        'sensors': state[12],
                        'squawk': state[14],
                        'spi': state[15],
                        'source': self.sources[state[16]],
                    }
                ))
            time = datetime.datetime.utcfromtimestamp(data['time'])
            yield time, states_and_metadata
            while time + self.timestep > datetime.datetime.utcnow():
                sleep(0.1)