Repository : http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
commit 5aa812a3268164c196d9bbc159cddb346605ab14 Author: Thomas Woerner twoerner@redhat.com Date: Wed Jan 28 16:21:01 2015 +0100
New functional fw_client_getServiceSettings and fw_client_getIcmpTypeSettings methods
libfirewall/src/fw_client.c | 168 ++++++++++++++++++++++++++++++++++++++++-- libfirewall/src/fw_client.h | 6 +- 2 files changed, 164 insertions(+), 10 deletions(-)
diff --git a/libfirewall/src/fw_client.c b/libfirewall/src/fw_client.c index 9878231..8daf3c7 100644 --- a/libfirewall/src/fw_client.c +++ b/libfirewall/src/fw_client.c @@ -696,15 +696,116 @@ fw_client_listServices(FWClient *obj) /** * fw_client_getServiceSettings: * - * Returns: (transfer none) (allow-none) (type FWServiceSettings*) + * Returns: (transfer none) (allow-none) (type FWService*) */ -/* -FWServiceSettings * +FWService * fw_client_getServiceSettings(FWClient *obj, const gchar *service) { + FWClientPrivate *fw = FW_CLIENT_GET_PRIVATE(obj); + GVariant *variant; + FWService *srvc = NULL; + GVariant *item; + gchar *str; + GVariantIter iter; + + variant = _fw_client_proxy_call_sync(fw, fw->proxy, + "getServiceSettings", + g_variant_new("(s)", service)); + + if (fw->error != NULL) { + return srvc; + } + + if (strncmp(g_variant_get_type_string(variant), + "((sssa(ss)asa{ss}))", 19) != 0) + { + return srvc; + } + + /* get sssa(ss)asa{ss} from (sssa(ss)asa{ss}) */ + variant = g_variant_get_child_value(variant, 0); + + srvc = fw_service_new(); + + /* 0: version */ + item = g_variant_get_child_value(variant, 0); + g_variant_get(item, "s", &str); + fw_service_setVersion(srvc, str); + g_variant_unref(item); + + /* 1: short */ + item = g_variant_get_child_value(variant, 1); + g_variant_get(item, "s", &str); + fw_service_setShort(srvc, str); + g_variant_unref(item); + + /* 2: description */ + item = g_variant_get_child_value(variant, 2); + g_variant_get(item, "s", &str); + fw_service_setDescription(srvc, str); + g_variant_unref(item); + + /* 3: ports */ + item = g_variant_get_child_value(variant, 3); + if (g_variant_iter_init(&iter, item)) { + GVariant *element; + + while ((element = g_variant_iter_next_value(&iter)) != NULL) { + FWPort *prt = fw_port_new(); + GVariant *item2=NULL; + + item2 = g_variant_get_child_value(element, 0); + g_variant_get(item2, "s", &str); + fw_port_setPort(prt, g_strdup(str)); + g_variant_unref(item2); + + item2 = g_variant_get_child_value(element, 1); + g_variant_get(item2, "s", &str); + fw_port_setProtocol(prt, g_strdup(str)); + g_variant_unref(item2); + + fw_service_addPort(srvc, prt); + g_variant_unref(element); + } + } + g_variant_unref(item); + + /* 4: modules */ + item = g_variant_get_child_value(variant, 4); + if (g_variant_iter_init(&iter, item)) { + while (g_variant_iter_loop(&iter, "s", &str)) { + fw_service_addModule(srvc, g_strdup(str)); + } + } + g_variant_unref(item); + + /* 5: destinations */ + item = g_variant_get_child_value(variant, 5); + if (g_variant_iter_init(&iter, item)) { + GVariant *element; + + while ((element = g_variant_iter_next_value(&iter)) != NULL) { + gchar *key, *value; + GVariant *item2=NULL; + + item2 = g_variant_get_child_value(element, 0); + g_variant_get(item2, "s", &key); + g_variant_unref(item2); + + item2 = g_variant_get_child_value(element, 1); + g_variant_get(item2, "s", &value); + g_variant_unref(item2); + + fw_service_setDestination(srvc, g_strdup(key), g_strdup(value)); + g_variant_unref(element); + } + } + + g_variant_unref(item); + + return srvc; } -*/
/** * fw_client_listIcmpTypes: @@ -723,15 +824,66 @@ fw_client_listIcmpTypes(FWClient *obj) /** * fw_client_getIcmpTypeSettings: * - * Returns: (transfer none) (allow-none) (type FWIcmpTypeSettings*) + * Returns: (transfer none) (allow-none) (type FWIcmpType*) */ -/* -FWIcmpTypeSettings * +FWIcmpType * fw_client_getIcmpTypeSettings(FWClient *obj, const gchar *icmptype) { + FWClientPrivate *fw = FW_CLIENT_GET_PRIVATE(obj); + GVariant *variant; + FWIcmpType *icmp = NULL; + GVariant *item; + gchar *str; + GVariantIter iter; + + variant = _fw_client_proxy_call_sync(fw, fw->proxy, + "getIcmpTypeSettings", + g_variant_new("(s)", icmptype)); + + if (fw->error != NULL) { + return icmp; + } + + if (strncmp(g_variant_get_type_string(variant), "((sssas))", 9) != 0) + { + return icmp; + } + + /* get sssas from (sssas) */ + variant = g_variant_get_child_value(variant, 0); + + icmp = fw_icmptype_new(); + + /* 0: version */ + item = g_variant_get_child_value(variant, 0); + g_variant_get(item, "s", &str); + fw_icmptype_setVersion(icmp, str); + g_variant_unref(item); + + /* 1: short */ + item = g_variant_get_child_value(variant, 1); + g_variant_get(item, "s", &str); + fw_icmptype_setShort(icmp, str); + g_variant_unref(item); + + /* 2: description */ + item = g_variant_get_child_value(variant, 2); + g_variant_get(item, "s", &str); + fw_icmptype_setDescription(icmp, str); + g_variant_unref(item); + + /* 3: destinations */ + item = g_variant_get_child_value(variant, 3); + if (g_variant_iter_init(&iter, item)) { + while (g_variant_iter_loop(&iter, "s", &str)) { + fw_icmptype_addDestination(icmp, g_strdup(str)); + } + } + g_variant_unref(item); + + return icmp; } -*/
/* default zone */
diff --git a/libfirewall/src/fw_client.h b/libfirewall/src/fw_client.h index d792415..412771c 100644 --- a/libfirewall/src/fw_client.h +++ b/libfirewall/src/fw_client.h @@ -26,6 +26,8 @@ #include <gio/gio.h> #include "firewall.h" #include "fw_zone.h" +#include "fw_service.h" +#include "fw_icmptype.h"
#define FW_CLIENT_TYPE (fw_client_get_type()) #define FW_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), FW_CLIENT_TYPE, FWClient)) @@ -80,9 +82,9 @@ gboolean fw_client_queryPanicMode(FWClient *obj);
FWZone *fw_client_getZoneSettings(FWClient *obj, const gchar *zone); GList *fw_client_listServices(FWClient *obj); -/* FWServiceSettings *fw_client_getServiceSettings(FWClient *obj, const gchar *service); */ +FWService *fw_client_getServiceSettings(FWClient *obj, const gchar *service); GList *fw_client_listIcmpTypes(FWClient *obj); -/* FWIcmpTypeSettings *fw_client_getIcmpTypeSettings(FWClient *obj, const gchar *icmptype); */ +FWIcmpType *fw_client_getIcmpTypeSettings(FWClient *obj, const gchar *icmptype);
/* default zone */
firewalld-recode@lists.fedorahosted.org