def server_from_config(config=None, server_class=None, additional_kwargs=None):
global global_config<EOL>if not config:<EOL><INDENT>config = global_config<EOL><DEDENT>queue_store_factory = resolve_name(config.get('<STR_LIT>', '<STR_LIT>'))<EOL>subscriber_scheduler_factory = resolve_name(config.get(<EOL>'<STR_LIT>', '<STR_LIT>'))<EOL>queue_scheduler_factory = resolve_name(config.get(<EOL>'<STR_LIT>', '<STR_LIT>'))<EOL>if config.has_option('<STR_LIT>', '<STR_LIT>'):<EOL><INDENT>authenticator_factory = resolve_name(<EOL>config.get('<STR_LIT>', '<STR_LIT>'))<EOL>authenticator = authenticator_factory()<EOL><DEDENT>else:<EOL><INDENT>authenticator = None<EOL><DEDENT>server = ThreadedStompServer((config.get('<STR_LIT>', '<STR_LIT>'), config.getint('<STR_LIT>', '<STR_LIT>')),<EOL>queue_manager=QueueManager(store=queue_store_factory(),<EOL>subscriber_scheduler=subscriber_scheduler_factory(),<EOL>queue_scheduler=queue_scheduler_factory()),<EOL>topic_manager=TopicManager(),<EOL>authenticator=authenticator,<EOL>protocol=STOMP11)<EOL>logger.info("<STR_LIT>" % server)<EOL>return server<EOL>
Gets a configured L{coilmq.server.StompServer} from specified config.

If `config` is None, global L{coilmq.config.config} var will be used instead.

The `server_class` and `additional_kwargs` are primarily hooks for using this method
from a testing environment.

@param config: A C{ConfigParser.ConfigParser} instance with loaded config values.
@type config: C{ConfigParser.ConfigParser}

@param server_class: Which class to use for the server.  (This doesn't come from config currently.)
@type server_class: C{class}

@param additional_kwargs: Any additional args that should be passed to class.
@type additional_kwargs: C{list}

@return: The configured StompServer.
@rtype: L{coilmq.server.StompServer}