summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-03-11 23:45:25 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-03-11 23:45:25 +0100
commitaee3ce108157d7776420cecca4690c597d2cee8f (patch)
tree454b1d87fdb8487616138ebaa27c115be220d1fe /src
parent18b98a772b0ddad66b79b958b271a20879e4f225 (diff)
downloadconnman-aee3ce108157d7776420cecca4690c597d2cee8f.tar.gz
connman-aee3ce108157d7776420cecca4690c597d2cee8f.tar.bz2
connman-aee3ce108157d7776420cecca4690c597d2cee8f.zip
Add fully dynamic property storage capabilities
Diffstat (limited to 'src')
-rw-r--r--src/connection.c9
-rw-r--r--src/device.c7
-rw-r--r--src/element.c120
-rw-r--r--src/network.c23
4 files changed, 127 insertions, 32 deletions
diff --git a/src/connection.c b/src/connection.c
index d102380c..79890dc3 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -300,9 +300,9 @@ static DBusMessage *get_properties(DBusConnection *conn,
struct connman_element *element = data;
DBusMessage *reply;
DBusMessageIter array, dict;
- connman_uint8_t strength = 0;
+ connman_uint8_t strength;
const char *device, *network;
- const char *type = NULL;
+ const char *type;
DBG("conn %p", conn);
@@ -321,13 +321,12 @@ static DBusMessage *get_properties(DBusConnection *conn,
DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
- connman_element_get_static_property(element, "Type", &type);
-
+ type = connman_element_get_string(element, "Type");
if (type != NULL)
connman_dbus_dict_append_variant(&dict, "Type",
DBUS_TYPE_STRING, &type);
- connman_element_get_static_property(element, "Strength", &strength);
+ strength = connman_element_get_uint8(element, "Strength");
if (strength > 0)
connman_dbus_dict_append_variant(&dict, "Strength",
DBUS_TYPE_BYTE, &strength);
diff --git a/src/device.c b/src/device.c
index 30940385..010a1159 100644
--- a/src/device.c
+++ b/src/device.c
@@ -845,8 +845,7 @@ struct connman_device *connman_device_create(const char *node,
str = type2string(type);
if (str != NULL)
- connman_element_set_static_property(&device->element,
- "Type", DBUS_TYPE_STRING, &str);
+ connman_element_set_string(&device->element, "Type", str);
device->element.ipv4.method = CONNMAN_IPV4_METHOD_DHCP;
@@ -1386,7 +1385,7 @@ int connman_device_set_string(struct connman_device *device,
device->node = g_strdup(value);
}
- return 0;
+ return connman_element_set_string(&device->element, key, value);
}
/**
@@ -1406,7 +1405,7 @@ const char *connman_device_get_string(struct connman_device *device,
else if (g_str_equal(key, "Node") == TRUE)
return device->node;
- return NULL;
+ return connman_element_get_string(&device->element, key);
}
static void set_offlinemode(struct connman_element *element, gpointer user_data)
diff --git a/src/element.c b/src/element.c
index 9a2ec3b6..614c875b 100644
--- a/src/element.c
+++ b/src/element.c
@@ -510,7 +510,7 @@ void connman_element_unref(struct connman_element *element)
}
}
-int connman_element_set_static_property(struct connman_element *element,
+static int set_static_property(struct connman_element *element,
const char *name, int type, const void *value)
{
struct connman_property *property;
@@ -549,7 +549,7 @@ int connman_element_set_static_property(struct connman_element *element,
return 0;
}
-int connman_element_set_static_array_property(struct connman_element *element,
+static int set_static_array_property(struct connman_element *element,
const char *name, int type, const void *value, int len)
{
struct connman_property *property;
@@ -589,7 +589,8 @@ int connman_element_set_static_array_property(struct connman_element *element,
return 0;
}
-int connman_element_set_property(struct connman_element *element,
+#if 0
+static int set_property(struct connman_element *element,
enum connman_property_id id, const void *value)
{
switch (id) {
@@ -629,6 +630,7 @@ int connman_element_set_property(struct connman_element *element,
return 0;
}
+#endif
int connman_element_get_value(struct connman_element *element,
enum connman_property_id id, void *value)
@@ -692,7 +694,7 @@ int connman_element_get_value(struct connman_element *element,
return 0;
}
-gboolean connman_element_get_static_property(struct connman_element *element,
+static gboolean get_static_property(struct connman_element *element,
const char *name, void *value)
{
struct connman_property *property;
@@ -719,14 +721,13 @@ gboolean connman_element_get_static_property(struct connman_element *element,
__connman_element_unlock(element);
if (found == FALSE && element->parent != NULL)
- return connman_element_get_static_property(element->parent,
- name, value);
+ return get_static_property(element->parent, name, value);
return found;
}
-gboolean connman_element_get_static_array_property(struct connman_element *element,
- const char *name, void *value, int *len)
+static gboolean get_static_array_property(struct connman_element *element,
+ const char *name, void *value, unsigned int *len)
{
struct connman_property *property;
gboolean found = FALSE;
@@ -747,7 +748,8 @@ gboolean connman_element_get_static_array_property(struct connman_element *eleme
return found;
}
-gboolean connman_element_match_static_property(struct connman_element *element,
+#if 0
+static gboolean match_static_property(struct connman_element *element,
const char *name, const void *value)
{
struct connman_property *property;
@@ -768,6 +770,106 @@ gboolean connman_element_match_static_property(struct connman_element *element,
return result;
}
+#endif
+
+/**
+ * connman_element_set_string:
+ * @element: element structure
+ * @key: unique identifier
+ * @value: string value
+ *
+ * Set string value for specific key
+ */
+int connman_element_set_string(struct connman_element *element,
+ const char *key, const char *value)
+{
+ return set_static_property(element, key, DBUS_TYPE_STRING, &value);
+}
+
+/**
+ * connman_element_get_string:
+ * @element: element structure
+ * @key: unique identifier
+ *
+ * Get string value for specific key
+ */
+const char *connman_element_get_string(struct connman_element *element,
+ const char *key)
+{
+ const char *value;
+
+ if (get_static_property(element, key, &value) == FALSE)
+ return NULL;
+
+ return value;
+}
+
+/**
+ * connman_element_set_uint8:
+ * @element: element structure
+ * @key: unique identifier
+ * @value: integer value
+ *
+ * Set integer value for specific key
+ */
+int connman_element_set_uint8(struct connman_element *element,
+ const char *key, connman_uint8_t value)
+{
+ return set_static_property(element, key, DBUS_TYPE_BYTE, &value);
+}
+
+/**
+ * connman_element_get_uint8:
+ * @element: element structure
+ * @key: unique identifier
+ *
+ * Get integer value for specific key
+ */
+connman_uint8_t connman_element_get_uint8(struct connman_element *element,
+ const char *key)
+{
+ connman_uint8_t value;
+
+ if (get_static_property(element, key, &value) == FALSE)
+ return 0;
+
+ return value;
+}
+
+/**
+ * connman_element_set_blob:
+ * @element: element structure
+ * @key: unique identifier
+ * @data: blob data
+ * @size: blob size
+ *
+ * Set binary blob value for specific key
+ */
+int connman_element_set_blob(struct connman_element *element,
+ const char *key, const void *data, unsigned int size)
+{
+ return set_static_array_property(element, key,
+ DBUS_TYPE_BYTE, data, size);
+}
+
+/**
+ * connman_element_get_blob:
+ * @element: element structure
+ * @key: unique identifier
+ * @size: pointer to blob size
+ *
+ * Get binary blob value for specific key
+ */
+const void *connman_element_get_blob(struct connman_element *element,
+ const char *key, unsigned int *size)
+{
+ void *value;
+
+ if (get_static_array_property(element, key, &value, size) == FALSE)
+ return NULL;
+
+ return value;
+}
int __connman_element_append_ipv4(struct connman_element *element,
DBusMessageIter *dict)
diff --git a/src/network.c b/src/network.c
index 2618dad9..1ef7486c 100644
--- a/src/network.c
+++ b/src/network.c
@@ -481,11 +481,9 @@ struct connman_network *connman_network_create(const char *identifier,
str = type2string(type);
if (str != NULL)
- connman_element_set_static_property(&network->element,
- "Type", DBUS_TYPE_STRING, &str);
+ connman_element_set_string(&network->element, "Type", str);
- connman_element_set_static_property(&network->element,
- "Strength", DBUS_TYPE_BYTE, &strength);
+ connman_element_set_uint8(&network->element, "Strength", strength);
network->type = type;
network->identifier = g_strdup(identifier);
@@ -855,7 +853,7 @@ int connman_network_set_string(struct connman_network *network,
network->wifi.passphrase = g_strdup(value);
}
- return 0;
+ return connman_element_set_string(&network->element, key, value);
}
/**
@@ -881,7 +879,7 @@ const char *connman_network_get_string(struct connman_network *network,
else if (g_str_equal(key, "WiFi.Passphrase") == TRUE)
return network->wifi.passphrase;
- return NULL;
+ return connman_element_get_string(&network->element, key);
}
/**
@@ -899,13 +897,10 @@ int connman_network_set_uint8(struct connman_network *network,
if (g_str_equal(key, "Priority") == TRUE)
network->priority = value;
- else if (g_str_equal(key, "Strength") == TRUE) {
+ else if (g_str_equal(key, "Strength") == TRUE)
network->strength = value;
- connman_element_set_static_property(&network->element,
- "Strength", DBUS_TYPE_BYTE, &value);
- }
- return 0;
+ return connman_element_set_uint8(&network->element, key, value);
}
/**
@@ -925,7 +920,7 @@ connman_uint8_t connman_network_get_uint8(struct connman_network *network,
else if (g_str_equal(key, "Strength") == TRUE)
return network->strength;
- return 0;
+ return connman_element_get_uint8(&network->element, key);
}
/**
@@ -952,7 +947,7 @@ int connman_network_set_blob(struct connman_network *network,
network->wifi.ssid_len = 0;
}
- return 0;
+ return connman_element_set_blob(&network->element, key, data, size);
}
/**
@@ -974,7 +969,7 @@ const void *connman_network_get_blob(struct connman_network *network,
return network->wifi.ssid;
}
- return NULL;
+ return connman_element_get_blob(&network->element, key, size);
}
void __connman_network_set_device(struct connman_network *network,