Mailing List Archive

Add support for unix-domain sockets on xend.
ChangeSet 1.1327.2.9, 2005/04/27 15:04:44+01:00, mjw@wray-m-3.hpl.hp.com

Add support for unix-domain sockets on xend.
Remove some dead code.
Signed-off-by: Mike Wray <mike.wray@hp.com>



b/tools/python/xen/web/SrvBase.py | 1
b/tools/python/xen/web/SrvDir.py | 2
b/tools/python/xen/web/httpserver.py | 37 ++-
b/tools/python/xen/web/static.py | 3
b/tools/python/xen/xend/XendClient.py | 127 ++++---------
b/tools/python/xen/xend/XendDomain.py | 36 ---
b/tools/python/xen/xend/XendProtocol.py | 40 +++-
b/tools/python/xen/xend/XendRoot.py | 52 ++++-
b/tools/python/xen/xend/server/SrvConsole.py | 2
b/tools/python/xen/xend/server/SrvDaemon.py | 4
b/tools/python/xen/xend/server/SrvDmesg.py | 2
b/tools/python/xen/xend/server/SrvDomain.py | 64 ++----
b/tools/python/xen/xend/server/SrvDomainDir.py | 2
b/tools/python/xen/xend/server/SrvNode.py | 2
b/tools/python/xen/xend/server/SrvRoot.py | 3
b/tools/python/xen/xend/server/SrvServer.py | 41 ++--
b/tools/python/xen/xend/server/SrvVnetDir.py | 2
b/tools/python/xen/xend/server/SrvXendLog.py | 2
b/tools/python/xen/xend/server/blkif.py | 4
b/tools/python/xen/xend/server/channel.py | 50 +++--
b/tools/python/xen/xend/server/console.py | 4
b/tools/python/xen/xend/server/controller.py | 138 +++++++-------
b/tools/python/xen/xend/server/netif.py | 4
b/tools/python/xen/xend/server/usbif.py | 4
tools/python/xen/web/defer.py | 3
tools/python/xen/xend/XendAsynchProtocol.py | 94 ---------
tools/python/xen/xend/XendDomainConfig.py | 44 ----
tools/python/xen/xend/server/SrvBase.py | 2
tools/python/xen/xend/server/SrvDir.py | 3
tools/python/xen/xend/server/SrvEventDir.py | 41 ----
tools/python/xen/xend/server/SrvUsbif.py | 239 -------------------------
31 files changed, 337 insertions(+), 715 deletions(-)


diff -Nru a/tools/python/xen/web/SrvBase.py b/tools/python/xen/web/SrvBase.py
--- a/tools/python/xen/web/SrvBase.py 2005-05-13 16:04:21 -04:00
+++ b/tools/python/xen/web/SrvBase.py 2005-05-13 16:04:21 -04:00
@@ -12,7 +12,6 @@
import resource
import http
import httpserver
-import defer

def uri_pathlist(p):
"""Split a path into a list.
diff -Nru a/tools/python/xen/web/SrvDir.py b/tools/python/xen/web/SrvDir.py
--- a/tools/python/xen/web/SrvDir.py 2005-05-13 16:04:22 -04:00
+++ b/tools/python/xen/web/SrvDir.py 2005-05-13 16:04:22 -04:00
@@ -20,7 +20,7 @@

def __init__(self, klass):
"""Create a constructor. It is assumed that the class
- should be imported as 'import klass from klass'.
+ should be imported as 'from xen.xend.server.klass import klass'.

klass name of its class
"""
diff -Nru a/tools/python/xen/web/defer.py b/tools/python/xen/web/defer.py
--- a/tools/python/xen/web/defer.py 2005-05-13 16:04:22 -04:00
+++ /dev/null Wed Dec 31 16:00:00 196900
@@ -1,3 +0,0 @@
-
-class Deferred:
- pass
diff -Nru a/tools/python/xen/web/httpserver.py b/tools/python/xen/web/httpserver.py
--- a/tools/python/xen/web/httpserver.py 2005-05-13 16:04:21 -04:00
+++ b/tools/python/xen/web/httpserver.py 2005-05-13 16:04:21 -04:00
@@ -4,6 +4,8 @@
import socket
import types
from urllib import quote, unquote
+import os
+import os.path

from xen.xend import sxp
from xen.xend.Args import ArgError
@@ -184,7 +186,9 @@

@param val: the value
"""
- if isinstance(val, ThreadRequest):
+ if val is None:
+ return val
+ elif isinstance(val, ThreadRequest):
return val
elif self.useSxp():
self.setHeader("Content-Type", sxp.mime_type)
@@ -316,18 +320,23 @@
def getResource(self, req):
return self.root.getRequestResource(req)

+class UnixHttpServer(HttpServer):

-def main():
- root = SrvDir()
- a = root.add("a", SrvDir())
- b = root.add("b", SrvDir())
- server = HttpServer(root=root)
- server.run()
-
-if __name__ == "__main__":
- main()
-
-
+ def __init__(self, path=None, root=None):
+ HttpServer.__init__(self, interface='localhost', root=root)
+ self.path = path

-
-
+ def bind(self):
+ pathdir = os.path.dirname(self.path)
+ if not os.path.exists(pathdir):
+ os.makedirs(pathdir)
+ else:
+ try:
+ os.unlink(self.path)
+ except SystemExit:
+ raise
+ except Exception, ex:
+ pass
+ self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ #self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ self.socket.bind(self.path)
diff -Nru a/tools/python/xen/web/static.py b/tools/python/xen/web/static.py
--- a/tools/python/xen/web/static.py 2005-05-13 16:04:21 -04:00
+++ b/tools/python/xen/web/static.py 2005-05-13 16:04:21 -04:00
@@ -24,7 +24,7 @@
if self.type:
req.setHeader('Content-Type', self.type)
if self.encoding:
- rew.setHeader('Content-Encoding', self.encoding)
+ req.setHeader('Content-Encoding', self.encoding)
req.setHeader('Content-Length', self.getFileSize())
try:
io = file(self.filename, "r")
@@ -40,7 +40,6 @@
io.close()
except:
pass
- return ''



diff -Nru a/tools/python/xen/xend/XendAsynchProtocol.py b/tools/python/xen/xend/XendAsynchProtocol.py
--- a/tools/python/xen/xend/XendAsynchProtocol.py 2005-05-13 16:04:22 -04:00
+++ /dev/null Wed Dec 31 16:00:00 196900
@@ -1,94 +0,0 @@
-# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
-
-from twisted.protocols import http
-from twisted.internet.protocol import ClientCreator
-from twisted.internet.defer import Deferred
-from twisted.internet import reactor
-
-from XendProtocol import XendClientProtocol, XendRequest
-
-class AsynchXendClient(http.HTTPClient):
- """A subclass of twisted's HTTPClient to deal with a connection to xend.
- Makes the request when connected, and delegates handling responses etc.
- to its protocol (usually an AsynchXendClientProtocol instance).
- """
- def __init__(self, protocol, request):
- self.protocol = protocol
- self.request = request
-
- def connectionMade(self):
- request = self.request
- url = self.request.url
- self.sendCommand(request.method, url.fullpath())
- self.sendHeader('Host', url.location())
- for (k, v) in request.headers.items():
- self.sendHeader(k, v)
- if request.data:
- self.sendHeader('Content-Length', len(request.data))
- self.endHeaders()
- if request.data:
- self.transport.write(request.data)
-
- def handleStatus(self, version, status, message):
- return self.protocol.handleStatus(version, status, message)
-
- def handleHeader(self, key, val):
- return self.protocol.handleHeader(key, val)
-
- def handleResponse(self, data):
- return self.protocol.handleResponse(data)
-
-class AsynchXendClientProtocol(XendClientProtocol):
- """An asynchronous xend client. Uses twisted to connect to xend
- and make the request. It does not block waiting for the result,
- but sets up a deferred that is called when the result becomes available.
-
- Uses AsynchXendClient to manage the connection.
- """
- def __init__(self):
- self.err = None
- self.headers = {}
-
- def xendRequest(self, url, method, args=None):
- """Make a request to xend. The returned deferred is called when
- the result is available.
-
- @param url: xend request url
- @param method: http method: POST or GET
- @param args: request arguments (dict)
- @return: deferred
- """
- request = XendRequest(url, method, args)
- self.deferred = Deferred()
- clientCreator = ClientCreator(reactor, AsynchXendClient, self, request)
- clientCreator.connectTCP(url.host, url.port)
- return self.deferred
-
- def callErrback(self, err):
- if not self.deferred.called:
- self.err = err
- self.deferred.errback(err)
- return err
-
- def callCallback(self, val):
- if not self.deferred.called:
- self.deferred.callback(val)
- return val
-
- def handleException(self, err):
- return self.callErrback(err)
-
- def handleHeader(self, key, val):
- self.headers[key.lower()] = val
-
- def getHeader(self, key):
- return self.headers.get(key.lower())
-
- def handleResponse(self, data):
- if self.err: return self.err
- val = XendClientProtocol.handleResponse(self, data)
- if isinstance(val, Exception):
- self.callErrback(val)
- else:
- self.callCallback(val)
- return val
diff -Nru a/tools/python/xen/xend/XendClient.py b/tools/python/xen/xend/XendClient.py
--- a/tools/python/xen/xend/XendClient.py 2005-05-13 16:04:21 -04:00
+++ b/tools/python/xen/xend/XendClient.py 2005-05-13 16:04:21 -04:00
@@ -2,7 +2,7 @@
# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
"""Client API for the HTTP interface on xend.
Callable as a script - see main().
-Supports synchronous or asynchronous connection to xend.
+Supports inet or unix connection to xend.

This API is the 'control-plane' for xend.
The 'data-plane' is done separately. For example, consoles
@@ -15,7 +15,9 @@

import sxp
import PrettyPrint
-from XendProtocol import XendClientProtocol, SynchXendClientProtocol, XendError
+from XendProtocol import HttpXendClientProtocol, \
+ UnixXendClientProtocol, \
+ XendError

DEBUG = 0

@@ -32,15 +34,6 @@
return val
raise XendError('cannot convert value')

-# todo: need to sort of what urls/paths are using for objects.
-# e.g. for domains at the moment return '0'.
-# should probably return abs path w.r.t. server, e.g. /xend/domain/0.
-# As an arg, assume abs path is obj uri, otherwise just id.
-
-# Function to convert to full url: Xend.uri(path), e.g.
-# maps /xend/domain/0 to http://wray-m-3.hpl.hp.com:8000/xend/domain/0
-# And should accept urls for ids?
-
class URL:
"""A URL.
"""
@@ -115,7 +108,7 @@
@param root: xend root path on the server
"""

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog