""" Multicast DNS Service Discovery for Python, v0.14-wmcbrine
    Copyright 2003 Paul Scott-Murphy, 2014 William McBrine

    This module provides a framework for the use of DNS Service Discovery
    using IP multicast.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
    USA
"""


class Error(Exception):
    """Base class for all zeroconf exceptions."""


class IncomingDecodeError(Error):
    """Exception when there is invalid data in an incoming packet."""


class NonUniqueNameException(Error):
    """Exception when the name is already registered."""


class NamePartTooLongException(Error):
    """Exception when the name is too long."""


class AbstractMethodException(Error):
    """Exception when a required method is not implemented."""


class BadTypeInNameException(Error):
    """Exception when the type in a name is invalid."""


class ServiceNameAlreadyRegistered(Error):
    """Exception when a service name is already registered."""


class EventLoopBlocked(Error):
    """Exception when the event loop is blocked.

    This exception is never expected to be thrown
    during normal operation. It should only happen
    when the cpu is maxed out or there is something blocking
    the event loop.
    """


class NotRunningException(Error):
    """Exception when an action is called with a zeroconf instance that is not running.

    The instance may not be running because it was already shutdown
    or startup has failed in some unexpected way.
    """
