VVO Online EFA Stopfinder
    (GET http://efa.vvo-online.de:8080/dvb/XML_STOPFINDER_REQUEST)

    :param search: Stop to find
    :param eduroam: Request from eduroam
    :param raw: Return raw response
    :return: All matching stops

def find(search, eduroam=False, *, raw=False):
    """
    VVO Online EFA Stopfinder
    (GET http://efa.vvo-online.de:8080/dvb/XML_STOPFINDER_REQUEST)

    :param search: Stop to find
    :param eduroam: Request from eduroam
    :param raw: Return raw response
    :return: All matching stops
    """

    url = 'http://efa.faplino.de/dvb/XML_STOPFINDER_REQUEST' if eduroam \
        else 'http://efa.vvo-online.de:8080/dvb/XML_STOPFINDER_REQUEST'

    try:
        r = requests.get(
            url=url,
            params={
                'locationServerActive': '1',
                'outputFormat': 'JSON',
                'type_sf': 'any',
                'name_sf': search,
                'coordOutputFormat': 'WGS84',
                'coordOutputFormatTail': '0',
            },
            timeout=10
        )
        if r.status_code == 200:
            response = json.loads(r.content.decode('utf-8'))
        else:
            raise requests.HTTPError('HTTP Status: {}'.format(r.status_code))
    except requests.Timeout:
        print('Failed to access VVO StopFinder. Connection timed out. Are you connected to eduroam?')
        response = None
    except requests.RequestException as e:
        print('Failed to access VVO StopFinder. Request Exception', e)
        response = None

    if response is None or raw:
        return response

    points = response['stopFinder']['points']
    return [
        # single result
        find_return_results(points['point'])
    ] if 'point' in points else [
        # multiple results
        find_return_results(stop)
        for stop in points
        ]