Fix the handling of MESSAGE_METHOD_UNKNOWN, MESSAGE_PARAMETER_COUNT_MISMATCH,
authorEwan Mellor <ewan@xensource.com>
Sun, 28 Jan 2007 18:37:42 +0000 (18:37 +0000)
committerEwan Mellor <ewan@xensource.com>
Sun, 28 Jan 2007 18:37:42 +0000 (18:37 +0000)
through the AsyncProxy.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/python/xen/xend/XendAPI.py

index b11385036c52592ecc8f7452c1d5c698f2255716..0cc1b9cabeec1a35e218ffb416778760a55253c7 100644 (file)
@@ -2019,19 +2019,22 @@ class XendAPIAsyncProxy:
 
         # Only deal with method names that start with "Async."
         if not method.startswith(self.method_prefix):
-            raise Exception('Method %s not supported' % method)
-
-        # Require 'session' argument to be present.
-        if len(args) < 1:
-            raise Exception('Not enough arguments')
+            return xen_api_error(['MESSAGE_METHOD_UNKNOWN', method])
 
         # Lookup synchronous version of the method
         synchronous_method_name = method[len(self.method_prefix):]
         if synchronous_method_name not in self.method_map:
-            raise Exception('Method %s not supported' % method)
+            return xen_api_error(['MESSAGE_METHOD_UNKNOWN', method])
         
         method = self.method_map[synchronous_method_name]
 
+        # Check that we've got enough arguments before issuing a task ID.
+        needed = argcounts[method.api]
+        if len(args) != needed:
+            return xen_api_error(['MESSAGE_PARAMETER_COUNT_MISMATCH',
+                                  self.method_prefix + method.api, needed,
+                                  len(args)])
+
         # Validate the session before proceeding
         session = args[0]
         if not auth_manager().is_session_valid(session):