Fix support for IPv4 addresses in SERVER_HOSTNAME which was broken by new IPv6 support

This commit is contained in:
Stein Magnus Jodal 2010-06-20 23:00:52 +02:00
parent 3c3d2728ad
commit 11b8ab89c9
3 changed files with 23 additions and 6 deletions

View File

@ -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()

View File

@ -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):
"""

View File

@ -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):