diff --git a/mopidy/__main__.py b/mopidy/__main__.py index d6342033..7c62033b 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -21,7 +21,7 @@ def main(): logger.info('-- Starting Mopidy --') get_or_create_folder('~/.mopidy/') core_queue = multiprocessing.Queue() - get_class(settings.SERVER)(core_queue) + get_class(settings.SERVER)(core_queue).start() core = CoreProcess(core_queue) core.start() asyncore.loop() diff --git a/mopidy/mpd/server.py b/mopidy/mpd/server.py index a5ac95bc..073965e5 100644 --- a/mopidy/mpd/server.py +++ b/mopidy/mpd/server.py @@ -6,6 +6,7 @@ import asynchat import asyncore import logging import multiprocessing +import re import socket import sys @@ -27,14 +28,18 @@ class MpdServer(asyncore.dispatcher): def __init__(self, core_queue): asyncore.dispatcher.__init__(self) + self.core_queue = core_queue + + def start(self): try: - self.core_queue = core_queue self.create_socket(socket.AF_INET6, socket.SOCK_STREAM) self.set_reuse_addr() - self.bind((settings.SERVER_HOSTNAME, settings.SERVER_PORT)) + self.bind((self._format_hostname(settings.SERVER_HOSTNAME), + settings.SERVER_PORT)) self.listen(1) logger.info(u'MPD server running at [%s]:%s', - settings.SERVER_HOSTNAME, settings.SERVER_PORT) + self._format_hostname(settings.SERVER_HOSTNAME), + settings.SERVER_PORT) except IOError, e: sys.exit('MPD server startup failed: %s' % e) @@ -47,6 +52,11 @@ class MpdServer(asyncore.dispatcher): def handle_close(self): self.close() + def _format_hostname(self, hostname): + if re.match('\d+.\d+.\d+.\d+', hostname) is not None: + hostname = '::ffff:%s' % hostname + return hostname + class MpdSession(asynchat.async_chat): """ diff --git a/tests/mpd/server_test.py b/tests/mpd/server_test.py index 5407daa1..7c290095 100644 --- a/tests/mpd/server_test.py +++ b/tests/mpd/server_test.py @@ -1,9 +1,16 @@ import unittest -from mopidy.mpd.server import MpdSession +from mopidy.mpd.server import MpdServer, MpdSession class MpdServerTest(unittest.TestCase): - pass # TODO + def setUp(self): + self.server = MpdServer(None) + + def test_format_hostname_prefixes_ipv4_addresses(self): + self.assertEqual(self.server._format_hostname('0.0.0.0'), + '::ffff:0.0.0.0') + self.assertEqual(self.server._format_hostname('127.0.0.1'), + '::ffff:127.0.0.1') class MpdSessionTest(unittest.TestCase): def setUp(self):