[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/common/src/rpc/drivers/pw_xmlrpc ServerAda...
From: |
Jan Ischebeck |
Subject: |
gnue/common/src/rpc/drivers/pw_xmlrpc ServerAda... |
Date: |
Sat, 05 Apr 2003 07:58:23 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jan Ischebeck <address@hidden> 03/04/05 07:58:23
Modified files:
common/src/rpc/drivers/pw_xmlrpc: ServerAdapter.py
Log message:
minor fixes + server enhancement
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
Patches:
Index: gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py
diff -c gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py:1.9
gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py:1.10
*** gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py:1.9 Thu Apr 3
14:57:20 2003
--- gnue/common/src/rpc/drivers/pw_xmlrpc/ServerAdapter.py Sat Apr 5
07:58:23 2003
***************
*** 41,60 ****
#
SERVER = 1 # ServerAdapter
-
- #from gnue.common.rpc.drivers._helpers.AsyncSocketServer import
AsyncHTTPServer
-
- #from DebugSocketServer import HTTPServer,MyHTTPServer
- import BaseHTTPServer
- import SocketServer
- import socket
from gnue.common.rpc import GComm
from gnue.common.apps import GDebug
from gnue.common.rpc.drivers._helpers import ObjectLibrarian
from gnue.common.rpc.drivers._directory import DirectoryServer
from gnue.common.rpc.drivers import GCommBase
! import string, sys
try:
--- 41,57 ----
#
SERVER = 1 # ServerAdapter
from gnue.common.rpc import GComm
from gnue.common.apps import GDebug
from gnue.common.rpc.drivers._helpers import ObjectLibrarian
from gnue.common.rpc.drivers._directory import DirectoryServer
from gnue.common.rpc.drivers import GCommBase
! from BaseHTTPServer import BaseHTTPRequestHandler;
! from SimpleHTTPServer import SimpleHTTPRequestHandler;
! import SocketServer
!
! import string, sys, os, posixpath, urllib, socket
try:
***************
*** 82,88 ****
'binary': 'base64'
}
! class MyHTTPServer(SocketServer.ThreadingTCPServer):
def setParent(self,parent):
self._parent=parent
--- 79,93 ----
'binary': 'base64'
}
! class MyThreadingHTTPServer(SocketServer.ThreadingTCPServer):
! def setParent(self,parent):
! self._parent=parent
!
! def server_bind(self):
! self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
! self.socket.bind(self.server_address)
!
! class MyForkingHTTPServer(SocketServer.ForkingTCPServer):
def setParent(self,parent):
self._parent=parent
***************
*** 90,95 ****
--- 95,101 ----
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind(self.server_address)
+
# TO BE CHECKED:
# Python 2.1: SocketServer.ThreadingMixIn
#SocketServer.ThreadingMixIn does not work properly
***************
*** 106,111 ****
--- 112,119 ----
#def close_request(self, request):
#pass
+ # an medusa like server
+ # should also be implemented: import asyncore, overwrite asyncore.dispatcher
##############################################################################
***************
*** 121,131 ****
tmsg = _('Required parameter "port" not supplied')
raise GComm.AdapterConfigurationError, tmsg
! if hasattr(params,'loglevel'):
self._loglevel = params['loglevel']
else:
self._loglevel = 1
DirectoryServer.DirectoryServer.__init__(self, rpcdef, bindings, params)
# To make "Object" definitions with w/non-object RPC,
--- 129,163 ----
tmsg = _('Required parameter "port" not supplied')
raise GComm.AdapterConfigurationError, tmsg
! if params.has_key('bindto'):
! self._bindto = params['bindto']
! else:
! self._bindto = '' # bind to all interfaces
!
! if params.has_key('loglevel'):
self._loglevel = params['loglevel']
else:
self._loglevel = 1
+ if params.has_key('httpbind'):
+ self._httpbind = params['httpbind']
+
+ self._httpserver=MyThreadingHTTPServer
+
+ if params.has_key('servertype'):
+ if params['servertype']=='threading':
+ self._httpserver=MyThreadingHTTPServer
+ elif params['servertype']=='forking':
+ self._httpserver=MyForkingHTTPServer
+ # elif params['servertype']=='asyncore':
+ # self._httpserver=MyAsyncoreDispatcher
+ else:
+ raise GComm.AdapterConfigurationError, \
+ _('Value %s for parameter "servertype" is not supported.') \
+ % params['servertype'] + _('Valid values are: threading,'+ \
+ 'forking.') # ',asyncore.')
+
+
DirectoryServer.DirectoryServer.__init__(self, rpcdef, bindings, params)
# To make "Object" definitions with w/non-object RPC,
***************
*** 150,158 ****
# #
##########################################################################
def serve(self):
! self._requestHandler = RequestHandler
! self._tcpserver = MyHTTPServer(('',self._port),
! self._requestHandler)
self._tcpserver.setParent(self)
try:
self._tcpserver.serve_forever()
--- 182,194 ----
# #
##########################################################################
def serve(self):
! if hasattr(self,'_httpbind'):
! self._requestHandler = EnhancedRequestHandler
! else:
! self._requestHandler = RequestHandler
!
! self._tcpserver = self._httpserver((self._bindto,self._port),
! self._requestHandler)
self._tcpserver.setParent(self)
try:
self._tcpserver.serve_forever()
***************
*** 364,373 ****
##############################################################################
#
! # Class to Handle the HTTP Post Request
#
! class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
#
# Handle the HTTP POST command
--- 400,409 ----
##############################################################################
#
! # Class to Handle the HTTP Post Request for XMLRPC only
#
! class RequestHandler(BaseHTTPRequestHandler):
#
# Handle the HTTP POST command
***************
*** 379,386 ****
try:
# get arguments
data = self.rfile.read(int(self.headers["content-length"]))
params, method = xmlrpclib.loads(data)
!
# generate response
try:
--- 415,423 ----
try:
# get arguments
data = self.rfile.read(int(self.headers["content-length"]))
+
params, method = xmlrpclib.loads(data)
!
# generate response
try:
***************
*** 400,405 ****
--- 437,446 ----
response = xmlrpclib.dumps(response,methodresponse=1)
except:
# internal error, report as HTTP server error
+ GDebug.printMesg(1,
+ 'Unexpected Exception in XML-RPC code: %s:%s' % \
+ (sys.exc_type, sys.exc_value))
+ # TODO: try to be a bit more informative (on client side)
self.send_response(500)
self.end_headers()
else:
***************
*** 414,419 ****
--- 455,484 ----
self.wfile.flush()
self.connection.shutdown(1)
+ ##############################################################################
+ #
+ # Enhanced HTTP Request Handler serving XMLRPC Post requests and allows to
+ # access appserver data directory
+ #
+
+ class EnhancedRequestHandler(RequestHandler,SimpleHTTPRequestHandler):
+
+ def translate_path(self, path):
+ path = posixpath.normpath(urllib.unquote(path))
+ words = path.split('/')
+ words = filter(None, words)
+ path = self.server._parent._httpbind
+ ## security check
+ if (type(path)!=type("") or (len(path)<4)):
+ return "/dev/null"
+ for word in words:
+ drive, word = os.path.splitdrive(word)
+ head, word = os.path.split(word)
+ if word in (os.curdir, os.pardir): continue
+ path = os.path.join(path, word)
+
+ return path
+
###########################
# The following part is not used at the moment
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/common/src/rpc/drivers/pw_xmlrpc ServerAda...,
Jan Ischebeck <=