[libvirt] [libvirt-php PATCH 12/13] Split up the bindings for libvirt NWFilter API

Dawid Zamirski dzrudy at gmail.com
Tue Aug 1 21:46:13 UTC 2017


---
 src/Makefile.am        |   3 +-
 src/libvirt-nwfilter.c | 414 +++++++++++++++++++++++++++++++++++++++++++++
 src/libvirt-nwfilter.h |  66 ++++++++
 src/libvirt-php.c      | 445 +------------------------------------------------
 src/libvirt-php.h      |  28 ----
 5 files changed, 486 insertions(+), 470 deletions(-)
 create mode 100644 src/libvirt-nwfilter.c
 create mode 100644 src/libvirt-nwfilter.h

diff --git a/src/Makefile.am b/src/Makefile.am
index 30bebad..707a1e8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,7 +29,8 @@ libvirt_php_la_SOURCES = \
 	libvirt-snapshot.c libvirt-snapshot.h \
 	libvirt-storage.c libvirt-storage.h \
 	libvirt-network.c libvirt-network.h \
-	libvirt-nodedev.c libvirt-nodedev.h
+	libvirt-nodedev.c libvirt-nodedev.h \
+	libvirt-nwfilter.c libvirt-nwfilter.h
 libvirt_php_la_CFLAGS = \
 	$(AM_CFLAGS) \
 	-DCOMPILE_DL_LIBVIRT=1
diff --git a/src/libvirt-nwfilter.c b/src/libvirt-nwfilter.c
new file mode 100644
index 0000000..f610f40
--- /dev/null
+++ b/src/libvirt-nwfilter.c
@@ -0,0 +1,414 @@
+/*
+ * libvirt-nwfilter.c: The PHP bindings to libvirt NWFilter API
+ *
+ * See COPYING for the license of this software
+ */
+
+#include <libvirt/libvirt.h>
+
+#include "libvirt-nwfilter.h"
+
+DEBUG_INIT("nwfilter");
+
+void
+php_libvirt_nwfilter_dtor(virt_resource *rsrc TSRMLS_DC)
+{
+    php_libvirt_nwfilter *nwfilter = (php_libvirt_nwfilter *) rsrc->ptr;
+    int rv = 0;
+
+    if (nwfilter != NULL) {
+        if (nwfilter->nwfilter != NULL) {
+            if (!check_resource_allocation(NULL, INT_RESOURCE_NWFILTER, nwfilter->nwfilter TSRMLS_CC)) {
+                nwfilter->nwfilter = NULL;
+                efree(nwfilter);
+
+                return;
+            }
+            rv = virNWFilterFree(nwfilter->nwfilter);
+            if (rv != 0) {
+                DPRINTF("%s: virNWFilterFree(%p) returned %d\n", __FUNCTION__, nwfilter->nwfilter, rv);
+                php_error_docref(NULL TSRMLS_CC, E_WARNING, "virNWFilterFree failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
+            } else {
+                DPRINTF("%s: virNWFilterFee(%p) completed successfully\n", __FUNCTION__, nwfilter->nwfilter);
+                resource_change_counter(INT_RESOURCE_NWFILTER, nwfilter->conn->conn, nwfilter->nwfilter, 0 TSRMLS_CC);
+            }
+            nwfilter->nwfilter = NULL;
+        }
+        efree(nwfilter);
+    }
+}
+
+/*
+ * Function name:   libvirt_nwfilter_define_xml
+ * Since version:   0.5.4
+ * Description:     Function is used to define a new nwfilter based on the XML description
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @xml [string]: XML string definition of nwfilter to be defined
+ * Returns:         libvirt nwfilter resource of newly defined nwfilter
+ */
+PHP_FUNCTION(libvirt_nwfilter_define_xml)
+{
+    php_libvirt_connection *conn = NULL;
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    virNWFilter *nwfilter;
+    zval *zconn;
+    char *xml = NULL;
+    strsize_t xml_len;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &xml, &xml_len);
+
+    if ((nwfilter = virNWFilterDefineXML(conn->conn, xml)) == NULL) {
+        set_error_if_unset("Cannot define a new NWFilter" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->nwfilter = nwfilter;
+    res_nwfilter->conn = conn;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_undefine
+ * Since version:   0.5.4
+ * Description:     Function is used to undefine already defined nwfilter
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         TRUE for success, FALSE on error
+ */
+PHP_FUNCTION(libvirt_nwfilter_undefine)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    if (virNWFilterUndefine(nwfilter->nwfilter) != 0)
+        RETURN_FALSE;
+
+    RETURN_TRUE;
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_xml_desc
+ * Since version:   0.5.4
+ * Description:     Function is used to get the XML description for the nwfilter
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ *                  @xpath [string]: optional xPath expression string to get just this entry, can be NULL
+ * Returns:         nwfilter XML string or result of xPath expression
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_xml_desc)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *xml = NULL;
+    char *xpath = NULL;
+    char *tmp;
+    strsize_t xpath_len;
+    int retval = -1;
+
+    GET_NWFILTER_FROM_ARGS("r|s", &znwfilter, &xpath, &xpath_len);
+
+    if (xpath_len < 1)
+        xpath = NULL;
+
+    xml = virNWFilterGetXMLDesc(nwfilter->nwfilter, 0);
+
+    if (xml == NULL) {
+        set_error_if_unset("Cannot get nwfilter XML" TSRMLS_CC);
+        RETURN_FALSE;
+    }
+
+    tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
+
+    if (tmp == NULL || retval < 0)
+        VIRT_RETVAL_STRING(xml);
+    else
+        VIRT_RETVAL_STRING(tmp);
+
+    free(xml);
+    free(tmp);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_uuid_string
+ * Since version:   0.5.4
+ * Description:     Function is used to get nwfilter's UUID in string format
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         nwfilter UUID string or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_uuid_string)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *uuid = NULL;
+    int ret = -1;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    uuid = (char *) emalloc(VIR_UUID_STRING_BUFLEN);
+    ret = virNWFilterGetUUIDString(nwfilter->nwfilter, uuid);
+
+    DPRINTF("%s: virNWFilterGetUUIDString(%p) returned %d (%s)\n", PHPFUNC,
+            nwfilter->nwfilter, ret, uuid);
+
+    if (ret != 0)
+        RETURN_FALSE;
+
+    VIRT_RETURN_STRING(uuid);
+    efree(uuid);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_uuid
+ * Since version:   0.5.3
+ * Descirption:     Function is used to get nwfilter's UUID in binary format
+ * Arguments:       @res [resource]: libvirt netowrk resource
+ * Returns:         nwfilter UUID in binary format or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_uuid)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    char *uuid = NULL;
+    int ret = -1;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+
+    uuid = (char *) emalloc(VIR_UUID_BUFLEN);
+    ret = virNWFilterGetUUID(nwfilter->nwfilter, (unsigned char *) uuid);
+
+    DPRINTF("%s: virNWFilterUUID(%p, %p) returned %d\n", PHPFUNC,
+            nwfilter->nwfilter, uuid, ret);
+
+    if (ret != 0)
+        RETURN_FALSE;
+
+    VIRT_RETVAL_STRING(uuid);
+    efree(uuid);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_get_name
+ * Since version:   0.5.4
+ * Description:     Function is used to get nwfilter's name
+ * Arguments:       @res [resource]: libvirt nwfilter resource
+ * Returns:         nwfilter name string or FALSE on failure
+ */
+PHP_FUNCTION(libvirt_nwfilter_get_name)
+{
+    php_libvirt_nwfilter *nwfilter = NULL;
+    zval *znwfilter;
+    const char *name = NULL;
+
+    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
+    name = virNWFilterGetName(nwfilter->nwfilter);
+
+    DPRINTF("%s: virNWFilterGetName(%p) returned %s\n", PHPFUNC,
+            nwfilter->nwfilter, name);
+
+    if (name == NULL)
+        RETURN_FALSE;
+
+    /* name should not be freed as its lifetime is the same as nwfilter resource */
+    VIRT_RETURN_STRING(name);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_name
+ * Since version:   0.5.4
+ * Description:     This functions is used to lookup for the nwfilter by it's name
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @name [string]: name of the nwfilter to get the resource
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_name)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    strsize_t name_len;
+    char *name = NULL;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
+
+    if (name == NULL || name_len < 1)
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByName(conn->conn, name);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_uuid_string
+ * Since version:   0.5.4
+ * Description:     Function is used to lookup for nwfilter identified by UUID string
+ * Arguments:       @res [resource]: libvirt connection resource
+ *                  @uuid [string]: UUID string to look for nwfilter
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    char *uuid = NULL;
+    strsize_t uuid_len;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
+
+    if (uuid == NULL || uuid_len < 1)
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByUUIDString(conn->conn, uuid);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_nwfilter_lookup_by_uuid
+ * Since version:   0.5.4
+ * Description:     Function is used to lookup for nwfilter by it's UUID in the binary format
+ * Arguments:       @res [resource]: libvirt connection resource from libvirt_connect()
+ *                  @uuid [string]: binary defined UUID to look for
+ * Returns:         libvirt nwfilter resource
+ */
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid)
+{
+    php_libvirt_nwfilter *res_nwfilter = NULL;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    strsize_t uuid_len;
+    unsigned char *uuid = NULL;
+
+    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
+
+    if ((uuid == NULL) || (uuid_len < 1))
+        RETURN_FALSE;
+
+    nwfilter = virNWFilterLookupByUUID(conn->conn, uuid);
+
+    if (nwfilter == NULL)
+        RETURN_FALSE;
+
+    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+    res_nwfilter->conn = conn;
+    res_nwfilter->nwfilter = nwfilter;
+
+    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
+
+    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
+}
+
+/*
+ * Function name:   libvirt_list_all_nwfilters
+ * Since version:   0.5.4
+ * Description:     Function is used to list nwfilters on the connection
+ * Arguments:       @res [resource]: libvirt connection resource
+ * Returns:         libvirt nwfilter resources array for the connection
+ */
+PHP_FUNCTION(libvirt_list_all_nwfilters)
+{
+    php_libvirt_nwfilter *res_nwfilter;
+    php_libvirt_connection *conn = NULL;
+    virNWFilterPtr *filters = NULL;
+    virNWFilterPtr nwfilter = NULL;
+    zval *zconn;
+    int count = -1;
+    size_t i = 0;
+
+    GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+    /* in current libvirt version, flags are not used for this, so passing 0 */
+    if ((count = virConnectListAllNWFilters(conn->conn, &filters, 0)) < 0)
+        RETURN_FALSE;
+
+    DPRINTF("%s: Found %d nwfilters\n", PHPFUNC, count);
+
+    array_init(return_value);
+
+    for (i = 0; i < count; i++) {
+        nwfilter = filters[i];
+        res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
+        res_nwfilter->nwfilter = nwfilter;
+        res_nwfilter->conn = conn;
+
+        resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
+                                res_nwfilter->nwfilter, 1 TSRMLS_CC);
+        VIRT_REGISTER_LIST_RESOURCE(nwfilter);
+    }
+}
+
+/*
+ * Function name:   libvirt_list_nwfilters
+ * Since version:   0.5.4
+ * Description:     Function is used to list nwfilters on the connection
+ * Arguments:       @res [resource]: libvirt connection resource
+ * Returns:         libvirt nwfilter names array for the connection
+ */
+PHP_FUNCTION(libvirt_list_nwfilters)
+{
+    php_libvirt_connection *conn = NULL;
+    zval *zconn;
+    int count = -1;
+    int expectedcount = -1;
+    char **names;
+    int i, done = 0;
+
+    GET_CONNECTION_FROM_ARGS("r", &zconn);
+
+    array_init(return_value);
+
+    if ((expectedcount = virConnectNumOfNWFilters(conn->conn)) < 0)
+        RETURN_FALSE;
+
+    names = (char **) emalloc(expectedcount * sizeof(char *));
+    count = virConnectListNWFilters(conn->conn, names, expectedcount);
+
+    if (count != expectedcount || count < 0) {
+        efree(names);
+        DPRINTF("%s: virConnectListNWFilters returned %d filters, while %d was "
+                "expected\n", PHPFUNC, count, expectedcount);
+        RETURN_FALSE;
+    }
+
+    for (i = 0; i < count; i++) {
+        VIRT_ADD_NEXT_INDEX_STRING(return_value,  names[i]);
+        free(names[i]);
+    }
+
+    efree(names);
+    done++;
+
+
+    if (!done)
+        RETURN_FALSE;
+}
diff --git a/src/libvirt-nwfilter.h b/src/libvirt-nwfilter.h
new file mode 100644
index 0000000..c0cebb3
--- /dev/null
+++ b/src/libvirt-nwfilter.h
@@ -0,0 +1,66 @@
+/*
+ * libvirt-nwfilter.h: libvirt PHP binding for the NWFilter driver
+ *
+ * See COPYING for the license of this software
+ */
+
+#ifndef __LIBVIRT_NWFILTER_H__
+# define __LIBVIRT_NWFILTER_H__
+
+# include "libvirt-connection.h"
+
+# define PHP_LIBVIRT_NWFILTER_RES_NAME "Libvirt nwfilter"
+# define INT_RESOURCE_NWFILTER 0x60
+
+# define PHP_FE_LIBVIRT_NWFILTER                                               \
+    PHP_FE(libvirt_nwfilter_define_xml,            arginfo_libvirt_conn_xml)   \
+    PHP_FE(libvirt_nwfilter_undefine,              arginfo_libvirt_conn)       \
+    PHP_FE(libvirt_nwfilter_get_xml_desc,          arginfo_libvirt_conn_xpath) \
+    PHP_FE(libvirt_nwfilter_get_uuid_string,       arginfo_libvirt_conn)       \
+    PHP_FE(libvirt_nwfilter_get_uuid,              arginfo_libvirt_conn)       \
+    PHP_FE(libvirt_nwfilter_get_name,              arginfo_libvirt_conn)       \
+    PHP_FE(libvirt_nwfilter_lookup_by_name,        arginfo_libvirt_conn_name)  \
+    PHP_FE(libvirt_nwfilter_lookup_by_uuid_string, arginfo_libvirt_conn_uuid)  \
+    PHP_FE(libvirt_nwfilter_lookup_by_uuid,        arginfo_libvirt_conn_uuid)  \
+    PHP_FE(libvirt_list_all_nwfilters,             arginfo_libvirt_conn)       \
+    PHP_FE(libvirt_list_nwfilters,                 arginfo_libvirt_conn)
+
+# define GET_NWFILTER_FROM_ARGS(args, ...)                                     \
+    do {                                                                       \
+        reset_error(TSRMLS_C);                                                 \
+        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,                   \
+                                  args,                                        \
+                                  __VA_ARGS__) == FAILURE) {                   \
+            set_error("Invalid arguments" TSRMLS_CC);                          \
+            RETURN_FALSE;                                                      \
+        }                                                                      \
+                                                                               \
+        VIRT_FETCH_RESOURCE(nwfilter, php_libvirt_nwfilter *, &znwfilter,      \
+                            PHP_LIBVIRT_NWFILTER_RES_NAME,                     \
+                            le_libvirt_nwfilter);                              \
+        if ((nwfilter == NULL) || (nwfilter->nwfilter == NULL))                \
+            RETURN_FALSE;                                                      \
+    } while (0)                                                                \
+
+int le_libvirt_nwfilter;
+
+typedef struct _php_libvirt_nwfilter {
+    virNWFilterPtr nwfilter;
+    php_libvirt_connection* conn;
+} php_libvirt_nwfilter;
+
+void php_libvirt_nwfilter_dtor(virt_resource *rsrc TSRMLS_DC);
+
+PHP_FUNCTION(libvirt_nwfilter_define_xml);
+PHP_FUNCTION(libvirt_nwfilter_undefine);
+PHP_FUNCTION(libvirt_nwfilter_get_xml_desc);
+PHP_FUNCTION(libvirt_nwfilter_get_name);
+PHP_FUNCTION(libvirt_nwfilter_get_uuid_string);
+PHP_FUNCTION(libvirt_nwfilter_get_uuid);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_name);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string);
+PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid);
+PHP_FUNCTION(libvirt_list_all_nwfilters);
+PHP_FUNCTION(libvirt_list_nwfilters);
+
+#endif
diff --git a/src/libvirt-php.c b/src/libvirt-php.c
index b62bcac..4ef06b2 100644
--- a/src/libvirt-php.c
+++ b/src/libvirt-php.c
@@ -28,6 +28,7 @@
 #include "libvirt-storage.h"
 #include "libvirt-network.h"
 #include "libvirt-nodedev.h"
+#include "libvirt-nwfilter.h"
 
 DEBUG_INIT("core");
 
@@ -40,9 +41,6 @@ const char *features[] = { NULL };
 const char *features_binaries[] = { NULL };
 #endif
 
-/* ZEND thread safe per request globals definition */
-int le_libvirt_nwfilter;
-
 ZEND_BEGIN_ARG_INFO_EX(arginfo_libvirt_connect, 0, 0, 0)
 ZEND_ARG_INFO(0, url)
 ZEND_ARG_INFO(0, readonly)
@@ -472,8 +470,6 @@ ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO()
 
 static zend_function_entry libvirt_functions[] = {
-    /* Common functions */
-    PHP_FE(libvirt_get_last_error,               arginfo_libvirt_void)
     PHP_FE_LIBVIRT_CONNECTION
     PHP_FE_LIBVIRT_STREAM
     PHP_FE_LIBVIRT_DOMAIN
@@ -482,19 +478,9 @@ static zend_function_entry libvirt_functions[] = {
     PHP_FE_LIBVIRT_NETWORK
     PHP_FE_LIBVIRT_NODE
     PHP_FE_LIBVIRT_NODEDEV
-    /* NWFilter functions */
-    PHP_FE(libvirt_nwfilter_define_xml,          arginfo_libvirt_conn_xml)
-    PHP_FE(libvirt_nwfilter_undefine,            arginfo_libvirt_conn)
-    PHP_FE(libvirt_nwfilter_get_xml_desc,        arginfo_libvirt_conn_xpath)
-    PHP_FE(libvirt_nwfilter_get_uuid_string,     arginfo_libvirt_conn)
-    PHP_FE(libvirt_nwfilter_get_uuid,            arginfo_libvirt_conn)
-    PHP_FE(libvirt_nwfilter_get_name,            arginfo_libvirt_conn)
-    PHP_FE(libvirt_nwfilter_lookup_by_name,      arginfo_libvirt_conn_name)
-    PHP_FE(libvirt_nwfilter_lookup_by_uuid_string, arginfo_libvirt_conn_uuid)
-    PHP_FE(libvirt_nwfilter_lookup_by_uuid,      arginfo_libvirt_conn_uuid)
-    /* List functions */
-    PHP_FE(libvirt_list_all_nwfilters,           arginfo_libvirt_conn)
-    PHP_FE(libvirt_list_nwfilters,               arginfo_libvirt_conn)
+    PHP_FE_LIBVIRT_NWFILTER
+    /* Common functions */
+    PHP_FE(libvirt_get_last_error,               arginfo_libvirt_void)
     /* Version information and common function */
     PHP_FE(libvirt_version,                      arginfo_libvirt_opttype)
     PHP_FE(libvirt_check_version,                arginfo_libvirt_check_version)
@@ -1174,34 +1160,6 @@ int is_local_connection(virConnectPtr conn)
 #endif
 }
 
-/* Destructor for nwfilter resource */
-static void php_libvirt_nwfilter_dtor(virt_resource *rsrc TSRMLS_DC)
-{
-    php_libvirt_nwfilter *nwfilter = (php_libvirt_nwfilter *) rsrc->ptr;
-    int rv = 0;
-
-    if (nwfilter != NULL) {
-        if (nwfilter->nwfilter != NULL) {
-            if (!check_resource_allocation(NULL, INT_RESOURCE_NWFILTER, nwfilter->nwfilter TSRMLS_CC)) {
-                nwfilter->nwfilter = NULL;
-                efree(nwfilter);
-
-                return;
-            }
-            rv = virNWFilterFree(nwfilter->nwfilter);
-            if (rv != 0) {
-                DPRINTF("%s: virNWFilterFree(%p) returned %d\n", __FUNCTION__, nwfilter->nwfilter, rv);
-                php_error_docref(NULL TSRMLS_CC, E_WARNING, "virNWFilterFree failed with %i on destructor: %s", rv, LIBVIRT_G(last_error));
-            } else {
-                DPRINTF("%s: virNWFilterFee(%p) completed successfully\n", __FUNCTION__, nwfilter->nwfilter);
-                resource_change_counter(INT_RESOURCE_NWFILTER, nwfilter->conn->conn, nwfilter->nwfilter, 0 TSRMLS_CC);
-            }
-            nwfilter->nwfilter = NULL;
-        }
-        efree(nwfilter);
-    }
-}
-
 /* ZEND Module inicialization function */
 PHP_MINIT_FUNCTION(libvirt)
 {
@@ -1526,22 +1484,6 @@ PHP_MSHUTDOWN_FUNCTION(libvirt)
     return SUCCESS;
 }
 
-/* Macros for obtaining resources from arguments */
-#define GET_NWFILTER_FROM_ARGS(args, ...)                                                       \
-    do {                                                                                        \
-        reset_error(TSRMLS_C);                                                                  \
-        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, args, __VA_ARGS__) == FAILURE) {   \
-            set_error("Invalid arguments" TSRMLS_CC);                                           \
-            RETURN_FALSE;                                                                       \
-        }                                                                                       \
-                                                                                                \
-        VIRT_FETCH_RESOURCE(nwfilter, php_libvirt_nwfilter *, &znwfilter,                       \
-                            PHP_LIBVIRT_NWFILTER_RES_NAME, le_libvirt_nwfilter);                \
-        if ((nwfilter == NULL) || (nwfilter->nwfilter == NULL))                                 \
-            RETURN_FALSE;                                                                       \
-    } while (0)                                                                                 \
-
-
 /* Common functions */
 
 /*
@@ -2514,385 +2456,6 @@ void parse_array(zval *arr, tVMDisk *disk, tVMNetwork *network)
     } VIRT_FOREACH_END();
 }
 
-/* Listing functions */
-
-/*
- * Function name:   libvirt_list_all_nwfilters
- * Since version:   0.5.4
- * Description:     Function is used to list nwfilters on the connection
- * Arguments:       @res [resource]: libvirt connection resource
- * Returns:         libvirt nwfilter resources array for the connection
- */
-PHP_FUNCTION(libvirt_list_all_nwfilters)
-{
-    php_libvirt_nwfilter *res_nwfilter;
-    php_libvirt_connection *conn = NULL;
-    virNWFilterPtr *filters = NULL;
-    virNWFilterPtr nwfilter = NULL;
-    zval *zconn;
-    int count = -1;
-    size_t i = 0;
-
-    GET_CONNECTION_FROM_ARGS("r", &zconn);
-
-    /* in current libvirt version, flags are not used for this, so passing 0 */
-    if ((count = virConnectListAllNWFilters(conn->conn, &filters, 0)) < 0)
-        RETURN_FALSE;
-
-    DPRINTF("%s: Found %d nwfilters\n", PHPFUNC, count);
-
-    array_init(return_value);
-
-    for (i = 0; i < count; i++) {
-        nwfilter = filters[i];
-        res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
-        res_nwfilter->nwfilter = nwfilter;
-        res_nwfilter->conn = conn;
-
-        resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
-                                res_nwfilter->nwfilter, 1 TSRMLS_CC);
-        VIRT_REGISTER_LIST_RESOURCE(nwfilter);
-    }
-}
-
-/*
- * Function name:   libvirt_list_nwfilters
- * Since version:   0.5.4
- * Description:     Function is used to list nwfilters on the connection
- * Arguments:       @res [resource]: libvirt connection resource
- * Returns:         libvirt nwfilter names array for the connection
- */
-PHP_FUNCTION(libvirt_list_nwfilters)
-{
-    php_libvirt_connection *conn = NULL;
-    zval *zconn;
-    int count = -1;
-    int expectedcount = -1;
-    char **names;
-    int i, done = 0;
-
-    GET_CONNECTION_FROM_ARGS("r", &zconn);
-
-    array_init(return_value);
-
-    if ((expectedcount = virConnectNumOfNWFilters(conn->conn)) < 0)
-        RETURN_FALSE;
-
-    names = (char **) emalloc(expectedcount * sizeof(char *));
-    count = virConnectListNWFilters(conn->conn, names, expectedcount);
-
-    if (count != expectedcount || count < 0) {
-        efree(names);
-        DPRINTF("%s: virConnectListNWFilters returned %d filters, while %d was "
-                "expected\n", PHPFUNC, count, expectedcount);
-        RETURN_FALSE;
-    }
-
-    for (i = 0; i < count; i++) {
-        VIRT_ADD_NEXT_INDEX_STRING(return_value,  names[i]);
-        free(names[i]);
-    }
-
-    efree(names);
-    done++;
-
-
-    if (!done)
-        RETURN_FALSE;
-}
-
-/* NWFilter functions */
-
-/*
- * Function name:   libvirt_nwfilter_define_xml
- * Since version:   0.5.4
- * Description:     Function is used to define a new nwfilter based on the XML description
- * Arguments:       @res [resource]: libvirt connection resource
- *                  @xml [string]: XML string definition of nwfilter to be defined
- * Returns:         libvirt nwfilter resource of newly defined nwfilter
- */
-PHP_FUNCTION(libvirt_nwfilter_define_xml)
-{
-    php_libvirt_connection *conn = NULL;
-    php_libvirt_nwfilter *res_nwfilter = NULL;
-    virNWFilter *nwfilter;
-    zval *zconn;
-    char *xml = NULL;
-    strsize_t xml_len;
-
-    GET_CONNECTION_FROM_ARGS("rs", &zconn, &xml, &xml_len);
-
-    if ((nwfilter = virNWFilterDefineXML(conn->conn, xml)) == NULL) {
-        set_error_if_unset("Cannot define a new NWFilter" TSRMLS_CC);
-        RETURN_FALSE;
-    }
-
-    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
-    res_nwfilter->nwfilter = nwfilter;
-    res_nwfilter->conn = conn;
-
-    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
-                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
-
-    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
-}
-
-/*
- * Function name:   libvirt_nwfilter_undefine
- * Since version:   0.5.4
- * Description:     Function is used to undefine already defined nwfilter
- * Arguments:       @res [resource]: libvirt nwfilter resource
- * Returns:         TRUE for success, FALSE on error
- */
-PHP_FUNCTION(libvirt_nwfilter_undefine)
-{
-    php_libvirt_nwfilter *nwfilter = NULL;
-    zval *znwfilter;
-
-    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
-
-    if (virNWFilterUndefine(nwfilter->nwfilter) != 0)
-        RETURN_FALSE;
-
-    RETURN_TRUE;
-}
-
-/*
- * Function name:   libvirt_nwfilter_get_xml_desc
- * Since version:   0.5.4
- * Description:     Function is used to get the XML description for the nwfilter
- * Arguments:       @res [resource]: libvirt nwfilter resource
- *                  @xpath [string]: optional xPath expression string to get just this entry, can be NULL
- * Returns:         nwfilter XML string or result of xPath expression
- */
-PHP_FUNCTION(libvirt_nwfilter_get_xml_desc)
-{
-    php_libvirt_nwfilter *nwfilter = NULL;
-    zval *znwfilter;
-    char *xml = NULL;
-    char *xpath = NULL;
-    char *tmp;
-    strsize_t xpath_len;
-    int retval = -1;
-
-    GET_NWFILTER_FROM_ARGS("r|s", &znwfilter, &xpath, &xpath_len);
-
-    if (xpath_len < 1)
-        xpath = NULL;
-
-    xml = virNWFilterGetXMLDesc(nwfilter->nwfilter, 0);
-
-    if (xml == NULL) {
-        set_error_if_unset("Cannot get nwfilter XML" TSRMLS_CC);
-        RETURN_FALSE;
-    }
-
-    tmp = get_string_from_xpath(xml, xpath, NULL, &retval);
-
-    if (tmp == NULL || retval < 0)
-        VIRT_RETVAL_STRING(xml);
-    else
-        VIRT_RETVAL_STRING(tmp);
-
-    free(xml);
-    free(tmp);
-}
-
-/*
- * Function name:   libvirt_nwfilter_get_uuid_string
- * Since version:   0.5.4
- * Description:     Function is used to get nwfilter's UUID in string format
- * Arguments:       @res [resource]: libvirt nwfilter resource
- * Returns:         nwfilter UUID string or FALSE on failure
- */
-PHP_FUNCTION(libvirt_nwfilter_get_uuid_string)
-{
-    php_libvirt_nwfilter *nwfilter = NULL;
-    zval *znwfilter;
-    char *uuid = NULL;
-    int ret = -1;
-
-    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
-
-    uuid = (char *) emalloc(VIR_UUID_STRING_BUFLEN);
-    ret = virNWFilterGetUUIDString(nwfilter->nwfilter, uuid);
-
-    DPRINTF("%s: virNWFilterGetUUIDString(%p) returned %d (%s)\n", PHPFUNC,
-            nwfilter->nwfilter, ret, uuid);
-
-    if (ret != 0)
-        RETURN_FALSE;
-
-    VIRT_RETURN_STRING(uuid);
-    efree(uuid);
-}
-
-/*
- * Function name:   libvirt_nwfilter_get_uuid
- * Since version:   0.5.3
- * Descirption:     Function is used to get nwfilter's UUID in binary format
- * Arguments:       @res [resource]: libvirt netowrk resource
- * Returns:         nwfilter UUID in binary format or FALSE on failure
- */
-PHP_FUNCTION(libvirt_nwfilter_get_uuid)
-{
-    php_libvirt_nwfilter *nwfilter = NULL;
-    zval *znwfilter;
-    char *uuid = NULL;
-    int ret = -1;
-
-    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
-
-    uuid = (char *) emalloc(VIR_UUID_BUFLEN);
-    ret = virNWFilterGetUUID(nwfilter->nwfilter, (unsigned char *) uuid);
-
-    DPRINTF("%s: virNWFilterUUID(%p, %p) returned %d\n", PHPFUNC,
-            nwfilter->nwfilter, uuid, ret);
-
-    if (ret != 0)
-        RETURN_FALSE;
-
-    VIRT_RETVAL_STRING(uuid);
-    efree(uuid);
-}
-
-/*
- * Function name:   libvirt_nwfilter_get_name
- * Since version:   0.5.4
- * Description:     Function is used to get nwfilter's name
- * Arguments:       @res [resource]: libvirt nwfilter resource
- * Returns:         nwfilter name string or FALSE on failure
- */
-PHP_FUNCTION(libvirt_nwfilter_get_name)
-{
-    php_libvirt_nwfilter *nwfilter = NULL;
-    zval *znwfilter;
-    const char *name = NULL;
-
-    GET_NWFILTER_FROM_ARGS("r", &znwfilter);
-    name = virNWFilterGetName(nwfilter->nwfilter);
-
-    DPRINTF("%s: virNWFilterGetName(%p) returned %s\n", PHPFUNC,
-            nwfilter->nwfilter, name);
-
-    if (name == NULL)
-        RETURN_FALSE;
-
-    /* name should not be freed as its lifetime is the same as nwfilter resource */
-    VIRT_RETURN_STRING(name);
-}
-
-/*
- * Function name:   libvirt_nwfilter_lookup_by_name
- * Since version:   0.5.4
- * Description:     This functions is used to lookup for the nwfilter by it's name
- * Arguments:       @res [resource]: libvirt connection resource
- *                  @name [string]: name of the nwfilter to get the resource
- * Returns:         libvirt nwfilter resource
- */
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_name)
-{
-    php_libvirt_nwfilter *res_nwfilter = NULL;
-    php_libvirt_connection *conn = NULL;
-    virNWFilterPtr nwfilter = NULL;
-    zval *zconn;
-    strsize_t name_len;
-    char *name = NULL;
-
-    GET_CONNECTION_FROM_ARGS("rs", &zconn, &name, &name_len);
-
-    if (name == NULL || name_len < 1)
-        RETURN_FALSE;
-
-    nwfilter = virNWFilterLookupByName(conn->conn, name);
-
-    if (nwfilter == NULL)
-        RETURN_FALSE;
-
-    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
-    res_nwfilter->conn = conn;
-    res_nwfilter->nwfilter = nwfilter;
-
-    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
-                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
-
-    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
-}
-
-/*
- * Function name:   libvirt_nwfilter_lookup_by_uuid_string
- * Since version:   0.5.4
- * Description:     Function is used to lookup for nwfilter identified by UUID string
- * Arguments:       @res [resource]: libvirt connection resource
- *                  @uuid [string]: UUID string to look for nwfilter
- * Returns:         libvirt nwfilter resource
- */
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string)
-{
-    php_libvirt_nwfilter *res_nwfilter = NULL;
-    php_libvirt_connection *conn = NULL;
-    virNWFilterPtr nwfilter = NULL;
-    zval *zconn;
-    char *uuid = NULL;
-    strsize_t uuid_len;
-
-    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
-
-    if (uuid == NULL || uuid_len < 1)
-        RETURN_FALSE;
-
-    nwfilter = virNWFilterLookupByUUIDString(conn->conn, uuid);
-
-    if (nwfilter == NULL)
-        RETURN_FALSE;
-
-    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
-    res_nwfilter->conn = conn;
-    res_nwfilter->nwfilter = nwfilter;
-
-    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
-                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
-
-    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
-}
-
-/*
- * Function name:   libvirt_nwfilter_lookup_by_uuid
- * Since version:   0.5.4
- * Description:     Function is used to lookup for nwfilter by it's UUID in the binary format
- * Arguments:       @res [resource]: libvirt connection resource from libvirt_connect()
- *                  @uuid [string]: binary defined UUID to look for
- * Returns:         libvirt nwfilter resource
- */
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid)
-{
-    php_libvirt_nwfilter *res_nwfilter = NULL;
-    php_libvirt_connection *conn = NULL;
-    virNWFilterPtr nwfilter = NULL;
-    zval *zconn;
-    strsize_t uuid_len;
-    unsigned char *uuid = NULL;
-
-    GET_CONNECTION_FROM_ARGS("rs", &zconn, &uuid, &uuid_len);
-
-    if ((uuid == NULL) || (uuid_len < 1))
-        RETURN_FALSE;
-
-    nwfilter = virNWFilterLookupByUUID(conn->conn, uuid);
-
-    if (nwfilter == NULL)
-        RETURN_FALSE;
-
-    res_nwfilter = (php_libvirt_nwfilter *) emalloc(sizeof(php_libvirt_nwfilter));
-    res_nwfilter->conn = conn;
-    res_nwfilter->nwfilter = nwfilter;
-
-    resource_change_counter(INT_RESOURCE_NWFILTER, conn->conn,
-                            res_nwfilter->nwfilter, 1 TSRMLS_CC);
-
-    VIRT_REGISTER_RESOURCE(res_nwfilter, le_libvirt_nwfilter);
-}
-
 /*
  * Function name:   libvirt_version
  * Since version:   0.4.1(-1)
diff --git a/src/libvirt-php.h b/src/libvirt-php.h
index 676b29e..82b70dc 100644
--- a/src/libvirt-php.h
+++ b/src/libvirt-php.h
@@ -127,9 +127,6 @@ typedef uint64_t arch_uint;
 #define PHP_LIBVIRT_WORLD_VERSION VERSION
 #define PHP_LIBVIRT_WORLD_EXTNAME "libvirt"
 
-/* Internal resource identifier objects */
-#define INT_RESOURCE_NWFILTER       0x60
-
 typedef struct tTokenizer {
     char **tokens;
     int numTokens;
@@ -157,15 +154,6 @@ typedef struct tVMNetwork {
     char *model;
 } tVMNetwork;
 
-/* TODO: temporary forward declaration until other parts are "modularized" */
-typedef struct _php_libvirt_connection php_libvirt_connection;
-
-/* Libvirt-php types */
-typedef struct _php_libvirt_nwfilter {
-    virNWFilterPtr nwfilter;
-    php_libvirt_connection* conn;
-} php_libvirt_nwfilter;
-
 typedef struct _php_libvirt_hash_key_info {
     char *name;
     unsigned int length;
@@ -218,8 +206,6 @@ const char *get_feature_binary(const char *name);
 long get_next_free_numeric_value(virDomainPtr domain, char *xpath);
 int get_subnet_bits(char *ip);
 
-#define PHP_LIBVIRT_NWFILTER_RES_NAME "Libvirt nwfilter"
-
 PHP_MINIT_FUNCTION(libvirt);
 PHP_MSHUTDOWN_FUNCTION(libvirt);
 PHP_RINIT_FUNCTION(libvirt);
@@ -228,20 +214,6 @@ PHP_MINFO_FUNCTION(libvirt);
 
 /* Common functions */
 PHP_FUNCTION(libvirt_get_last_error);
-/* NWFilter functions */
-PHP_FUNCTION(libvirt_nwfilter_define_xml);
-PHP_FUNCTION(libvirt_nwfilter_undefine);
-PHP_FUNCTION(libvirt_nwfilter_get_xml_desc);
-PHP_FUNCTION(libvirt_nwfilter_get_name);
-PHP_FUNCTION(libvirt_nwfilter_get_uuid_string);
-PHP_FUNCTION(libvirt_nwfilter_get_uuid);
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_name);
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid_string);
-PHP_FUNCTION(libvirt_nwfilter_lookup_by_uuid);
-/* Listing functions */
-PHP_FUNCTION(libvirt_list_all_nwfilters);
-PHP_FUNCTION(libvirt_list_nwfilters);
-/* Common functions */
 PHP_FUNCTION(libvirt_version);
 PHP_FUNCTION(libvirt_check_version);
 PHP_FUNCTION(libvirt_has_feature);
-- 
2.13.3




More information about the libvir-list mailing list