[Commits] r684 - in trunk/daemon: . extensions lib/pyovcp src

new-commit at lists.openvcp.org new-commit at lists.openvcp.org
Thu Dec 31 13:26:39 UTC 2009


Author: ftx
Date: 2009-12-31 13:26:38 +0000 (Thu, 31 Dec 2009)
New Revision: 684

Modified:
   trunk/daemon/Makefile.in
   trunk/daemon/configure.ac
   trunk/daemon/extensions/testmod.py
   trunk/daemon/lib/pyovcp/pyovcp.c
   trunk/daemon/lib/pyovcp/pyovcprequest.c
   trunk/daemon/src/modules.c
Log:
fixed bugs in python support
extensions in python are now able to access the openvcpd config




Modified: trunk/daemon/Makefile.in
===================================================================
--- trunk/daemon/Makefile.in	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/Makefile.in	2009-12-31 13:26:38 UTC (rev 684)
@@ -55,12 +55,13 @@
 	cd lib/pyovcp; make clean;
 
 install:
-	mkdir -p "$(DESTDIR)/$(datadir)"/openvcpd \
+	mkdir -p "$(DESTDIR)/$(datadir)/openvcpd" \
+		"$(DESTDIR)/$(datadir)/openvcpd/extensions" \
 		"$(DESTDIR)/$(bindir)" \
 		"$(DESTDIR)/$(sysconfdir)"
 	cp openvcpd "$(DESTDIR)/$(bindir)"/openvcpd
+	cp extensions/* "$(DESTDIR)/$(datadir)/openvcpd/extensions/"
 
-
 	@if (test -e "$(DESTDIR)/$(sysconfdir)"/openvcpd.conf); then \
 		echo "Configuration File exists. Please check for updates of the configurationfile"; \
 	else	\

Modified: trunk/daemon/configure.ac
===================================================================
--- trunk/daemon/configure.ac	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/configure.ac	2009-12-31 13:26:38 UTC (rev 684)
@@ -10,6 +10,7 @@
 
 AC_CHECK_PROG([PKGCONFIG], [pkg-config], [yes],  [no])
 AC_CHECK_PROG([RSYNC], [rsync], [yes],  [no])
+AC_CHECK_PROG([PYCONFIG], [python-config], [yes],  [no])
 
 # Checks for libraries.
 AC_CHECK_LIB([vserver], [vc_ctx_migrate], ,[AC_MSG_ERROR([libvserver(util-vserver) not found])])
@@ -17,6 +18,7 @@
 AC_CHECK_LIB([xml2], [xmlTextReaderRead], ,[AC_MSG_ERROR([libxml2 not found])])
 AC_CHECK_LIB([pcap], [pcap_loop], ,[AC_MSG_ERROR([libpcap not found])])
 AC_CHECK_LIB([dl], [dlopen])
+AC_CHECK_LIB([python], [Py_Initialize])
 
 AC_ARG_WITH([gnutls],
         [AS_HELP_STRING([--with-gnutls],
@@ -48,7 +50,6 @@
 			]])
 
 
-
 # Checks for typedefs, structures, and compiler characteristics.
 #AC_TYPE_PID_T
 AC_HEADER_TIME
@@ -75,6 +76,10 @@
   AC_MSG_ERROR([pkg-config is required])
 fi
 
+if test "$PYCONFIG" = "no"; then
+  AC_MSG_ERROR([python-config is required])
+fi
+
 if test "$RSYNC" = "no"; then
   AC_MSG_ERROR([rsync is required])
 fi

Modified: trunk/daemon/extensions/testmod.py
===================================================================
--- trunk/daemon/extensions/testmod.py	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/extensions/testmod.py	2009-12-31 13:26:38 UTC (rev 684)
@@ -2,11 +2,41 @@
 
 def testmethod(req):
 	resp = ovcp.Response()
-	dat=req.getArg(0)
-	print dat.type()
-	print dat.getContent();
+	dat=req.getArg(1)
+	
+	if dat == None:
+		resp.Error(1, "missing parameter")
+		return resp;
+		
+	if dat.type() != "string":
+		resp.Error(2, "wrong parameter")
+		return resp;
+			
+	resp.addString(dat.getContent())
+	
+	rootdir = ovcp.settings['root_dir']
+	confdir = ovcp.settings['config_dir']
+	
 	resp.addInt(22)
+	resp.addString("hello world")
+	resp.addDouble(33.223)	
+	resp.addString(rootdir)
+	resp.addString(confdir)
+	resp.addBool(1)	
+			
+	resp.ArrayNew()
+	resp.ArrayAddString("hi")
+	resp.ArrayAddInt(32)
+	resp.ArrayEnd()
 	
+	resp.StructNew()
+	resp.StructAddBool("test", 1)
+	resp.StructAddString("test2", "works")
+	resp.StructAddDouble("test3", 22.44)
+	resp.StructAddInt("test4", 23)
+	resp.StructEnd()
+
+	
 	return resp
 
 

Modified: trunk/daemon/lib/pyovcp/pyovcp.c
===================================================================
--- trunk/daemon/lib/pyovcp/pyovcp.c	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/lib/pyovcp/pyovcp.c	2009-12-31 13:26:38 UTC (rev 684)
@@ -10,6 +10,7 @@
 
 
 #ifndef SHAREDOBJ
+#include "../../src/main.h"
 #include "../../src/modules.h"
 
 
@@ -17,7 +18,7 @@
 {
 	OVCPResponse *respobj;
 	OVCPRequest *reqobj;
-	struct ovcp_response_st *resp;
+	struct ovcp_response_st *resp = NULL;
 	PyObject *funcargobj;
 		
 	reqobj = (OVCPRequest *)createPythonObject("ovcp", "Request", NULL);
@@ -26,10 +27,21 @@
 	funcargobj = Py_BuildValue("(O)", (PyObject *)reqobj);
 	
 	respobj = (OVCPResponse *) PyObject_CallObject((PyObject *)func, funcargobj);
-	resp = respobj->resp;
-	respobj->resp = NULL;
-	Py_XDECREF(respobj);
 	
+	if(respobj != NULL)
+	{
+		if(strcmp(respobj->ob_type->tp_name, "ovcp.Response") == 0)
+		{
+			resp = respobj->resp;
+			respobj->resp = NULL;
+		}
+		
+		Py_DECREF(respobj);
+	}
+	
+	if(PyErr_Occurred() != NULL)
+		PyErr_Print();
+	
 	return resp;
 }
 
@@ -48,6 +60,27 @@
 	Py_RETURN_TRUE;	
 }
 
+
+PyObject *ovcp_create_settingsdict()
+{
+	PyObject *dict = PyDict_New();
+	
+	PyDict_SetItem(dict, PyString_FromString("ip"), PyString_FromString(global_settings.ip));
+	PyDict_SetItem(dict, PyString_FromString("port"), PyString_FromString(global_settings.port));
+	PyDict_SetItem(dict, PyString_FromString("startxid"), PyString_FromString(global_settings.startxid));
+	PyDict_SetItem(dict, PyString_FromString("root_dir"), PyString_FromString(global_settings.root_dir));
+	PyDict_SetItem(dict, PyString_FromString("config_dir"), PyString_FromString(global_settings.config_dir));
+	PyDict_SetItem(dict, PyString_FromString("backup_dir"), PyString_FromString(global_settings.userbackup_dir));
+	PyDict_SetItem(dict, PyString_FromString("image_dir"), PyString_FromString(global_settings.run_dir));
+	PyDict_SetItem(dict, PyString_FromString("run_dir"), PyString_FromString(global_settings.ip));
+	PyDict_SetItem(dict, PyString_FromString("cache_dir"), PyString_FromString(global_settings.cache_dir));
+	PyDict_SetItem(dict, PyString_FromString("ifaces"), PyString_FromString(global_settings.ifaces));
+	PyDict_SetItem(dict, PyString_FromString("ifbdev"), PyString_FromString(global_settings.ifbdev));
+	PyDict_SetItem(dict, PyString_FromString("adminemail"), PyString_FromString(global_settings.adminemail));	
+	
+	return dict;
+}
+
 #else
 
 
@@ -72,7 +105,7 @@
 
 void init_pyovcp(void)
 {
-	PyObject* m;
+	PyObject *m;
 	
 	if (PyType_Ready(&OVCPRequestType) < 0)
 		return;
@@ -94,6 +127,9 @@
 	PyModule_AddObject(m, "Response", (PyObject *)&OVCPResponseType);
 	PyModule_AddObject(m, "Data", (PyObject *)&OVCPDataType);
 	
+	#ifndef SHAREDOBJ
+	PyModule_AddObject(m, "settings", ovcp_create_settingsdict());
+	#endif
 }
 
 

Modified: trunk/daemon/lib/pyovcp/pyovcprequest.c
===================================================================
--- trunk/daemon/lib/pyovcp/pyovcprequest.c	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/lib/pyovcp/pyovcprequest.c	2009-12-31 13:26:38 UTC (rev 684)
@@ -24,7 +24,7 @@
 
 int OVCPRequest_init(OVCPRequest *self, PyObject *args)
 {
-	char *xmlstr;	
+	char *xmlstr = NULL;	
 	
 	if(!PyArg_ParseTuple(args, "|s", &xmlstr))
 		return -1;

Modified: trunk/daemon/src/modules.c
===================================================================
--- trunk/daemon/src/modules.c	2009-12-29 20:45:59 UTC (rev 683)
+++ trunk/daemon/src/modules.c	2009-12-31 13:26:38 UTC (rev 684)
@@ -30,7 +30,7 @@
 struct ovcp_module *modules = 0;
 static int modulescount = 0;
 
-#define OVCP_EXTENSION_DIR "extensions"
+#define OVCP_EXTENSION_DIR OPENVCP_DATA"/extensions"
 
 int ovcp_add_module(char *name)
 {
@@ -186,7 +186,8 @@
 				sconcat(path, BUF_SIZE, OVCP_EXTENSION_DIR, "/", dir_entry->d_name, NULL);
 
 				fmod = fopen(path,"r");
-				PyRun_SimpleFileEx(fmod, path, 1);
+				PyRun_SimpleFile(fmod, path);
+				fclose(fmod);
 			}
 
 		}



More information about the Commits mailing list