summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJimmy Bergman <jimmy@sigint.se>2011-06-23 13:34:01 +0200
committerJimmy Bergman <jimmy@sigint.se>2011-06-23 13:34:01 +0200
commit3d1c8463d80932ddbe677ea1b8aee357642018a8 (patch)
tree15948de511002332e24128573db7b09f0b1b52ba
parent51c20f6f85d76bc14f394221a8836d2aac9a1aea (diff)
Change so that the flash socket policy server is using eventlet instead of twisted and is running in the same process as the main vnx proxy
-rwxr-xr-xbin/nova-vncproxy32
-rw-r--r--nova/wsgi.py18
2 files changed, 31 insertions, 19 deletions
diff --git a/bin/nova-vncproxy b/bin/nova-vncproxy
index 467d1eba3..60e01e7f8 100755
--- a/bin/nova-vncproxy
+++ b/bin/nova-vncproxy
@@ -39,8 +39,6 @@ from nova import wsgi
from nova import version
from nova.vnc import auth
from nova.vnc import proxy
-from twisted.internet import protocol, reactor
-from twisted.protocols import basic
LOG = logging.getLogger('nova.vnc-proxy')
@@ -64,16 +62,16 @@ flags.DEFINE_flag(flags.HelpFlag())
flags.DEFINE_flag(flags.HelpshortFlag())
flags.DEFINE_flag(flags.HelpXMLFlag())
-class FlashSocketPolicyProtocol(basic.LineReceiver):
- delimiter = "\0"
+def handle_flash_socket_policy(socket):
+ LOG.info(_("Received connection on flash socket policy port"))
- def lineReceived(self, request):
- if '<policy-file-request/>' in request:
- self.transport.write('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="%d" /></cross-domain-policy>' % (FLAGS.vncproxy_port))
- self.transport.loseConnection()
-
-class FlashSocketPolicyFactory(protocol.ServerFactory):
- protocol = FlashSocketPolicyProtocol
+ fd = socket.makefile('rw')
+ expected_command = "<policy-file-request/>"
+ if expected_command in fd.read(len(expected_command)+1):
+ LOG.info(_("Received valid flash socket policy request"))
+ fd.write('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="%d" /></cross-domain-policy>' % (FLAGS.vncproxy_port))
+ fd.flush()
+ socket.close()
if __name__ == "__main__":
utils.default_flagfile()
@@ -108,11 +106,7 @@ if __name__ == "__main__":
service.serve()
- flash_socket_policy_pid = os.fork()
- if flash_socket_policy_pid == 0:
- reactor.listenTCP(843, FlashSocketPolicyFactory())
- reactor.run()
- else:
- server = wsgi.Server()
- server.start(with_auth, FLAGS.vncproxy_port, host=FLAGS.vncproxy_host)
- server.wait()
+ server = wsgi.Server()
+ server.start(with_auth, FLAGS.vncproxy_port, host=FLAGS.vncproxy_host)
+ server.start_tcp(handle_flash_socket_policy, 843, host=FLAGS.vncproxy_host)
+ server.wait()
diff --git a/nova/wsgi.py b/nova/wsgi.py
index 33ba852bc..700142f42 100644
--- a/nova/wsgi.py
+++ b/nova/wsgi.py
@@ -70,6 +70,15 @@ class Server(object):
if key:
self.socket_info[key] = socket.getsockname()
+ def start_tcp(self, listener, port, host='0.0.0.0', key=None, backlog=128):
+ """Run a raw TCP server with the given application."""
+ arg0 = sys.argv[0]
+ logging.audit(_('Starting TCP server %(arg0)s on %(host)s:%(port)s') % locals())
+ socket = eventlet.listen((host, port), backlog=backlog)
+ self.pool.spawn_n(self._run_tcp, listener, socket)
+ if key:
+ self.socket_info[key] = socket.getsockname()
+
def wait(self):
"""Wait until all servers have completed running."""
try:
@@ -83,6 +92,15 @@ class Server(object):
eventlet.wsgi.server(socket, application, custom_pool=self.pool,
log=WritableLogger(logger))
+ def _run_tcp(self, listener, socket):
+ """Start a raw TCP server in a new green thread."""
+ while True:
+ try:
+ new_sock, address = socket.accept()
+ self.pool.spawn_n(listener, new_sock)
+ except (SystemExit, KeyboardInterrupt):
+ pass
+
class Request(webob.Request):
pass