def add_provider(self, name, Provider, **config):
assert issubclass(Provider, IProvider), '<STR_LIT>'<EOL>assert isinstance(name, str), '<STR_LIT>'<EOL>provider = Provider(self, name, **config)<EOL>assert name not in self._providers, '<STR_LIT>'<EOL>self._providers[name] = provider<EOL>if self.default_provider is None:<EOL><INDENT>self.default_provider = name<EOL><DEDENT>return provider<EOL>
Register a provider on the gateway

            The first provider defined becomes the default one: used in case the routing function has no better idea.

            :type name: str
            :param name: Provider name that will be used to uniquely identify it
            :type Provider: type
            :param Provider: Provider class that inherits from `smsframework.IProvider`
            :param config: Provider configuration. Please refer to the Provider documentation.
            :rtype: IProvider
            :returns: The created provider