#define CONNMAN_CONNECTION_INTERFACE CONNMAN_SERVICE ".Connection"
#define CONNMAN_PROVIDER_INTERFACE CONNMAN_SERVICE ".Provider"
+typedef void (* connman_dbus_append_cb_t) (DBusMessageIter *iter);
+
DBusConnection *connman_dbus_get_connection(void);
void connman_dbus_property_append_variant(DBusMessageIter *property,
const char *key, int type, void *val);
-void connman_dbus_dict_append_array(DBusMessageIter *dict,
- const char *key, int type, void *val, int len);
-void connman_dbus_dict_append_variant(DBusMessageIter *dict,
- const char *key, int type, void *val);
-
static inline void connman_dbus_dict_open(DBusMessageIter *iter,
DBusMessageIter *dict)
{
dbus_message_iter_close_container(iter, dict);
}
+void connman_dbus_dict_append_variant(DBusMessageIter *dict,
+ const char *key, int type, void *val);
+
+void connman_dbus_dict_append_fixed_array(DBusMessageIter *dict,
+ const char *key, int type, void *val, int len);
+void connman_dbus_dict_append_variable_array(DBusMessageIter *dict,
+ const char *key, int type, connman_dbus_append_cb_t function);
+
dbus_bool_t connman_dbus_validate_ident(const char *ident);
char *connman_dbus_encode_string(const char *value);
DBUS_TYPE_UINT32, &scan_ssid);
if (network)
- connman_dbus_dict_append_array(&dict, "ssid",
+ connman_dbus_dict_append_fixed_array(&dict, "ssid",
DBUS_TYPE_BYTE, &network, len);
else if (address)
connman_dbus_dict_append_variant(&dict, "bssid",
key[i] = (unsigned char) strtol(tmp,
NULL, 16);
}
- connman_dbus_dict_append_array(&dict,
+ connman_dbus_dict_append_fixed_array(&dict,
"wep_key0", DBUS_TYPE_BYTE,
&key, size / 2);
free(key);
dbus_message_iter_close_container(iter, &value);
}
-void connman_dbus_dict_append_array(DBusMessageIter *dict,
+void connman_dbus_dict_append_variant(DBusMessageIter *dict,
+ const char *key, int type, void *val)
+{
+ DBusMessageIter entry;
+
+ dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY,
+ NULL, &entry);
+
+ connman_dbus_property_append_variant(&entry, key, type, val);
+
+ dbus_message_iter_close_container(dict, &entry);
+}
+
+void connman_dbus_dict_append_fixed_array(DBusMessageIter *dict,
const char *key, int type, void *val, int len)
{
DBusMessageIter entry, value, array;
dbus_message_iter_close_container(dict, &entry);
}
-void connman_dbus_dict_append_variant(DBusMessageIter *dict,
- const char *key, int type, void *val)
+void connman_dbus_dict_append_variable_array(DBusMessageIter *dict,
+ const char *key, int type, connman_dbus_append_cb_t function)
{
- DBusMessageIter entry;
+ DBusMessageIter entry, value, array;
+ const char *variant_sig, *array_sig;
+
+ switch (type) {
+ case DBUS_TYPE_STRING:
+ variant_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING;
+ array_sig = DBUS_TYPE_STRING_AS_STRING;
+ break;
+ case DBUS_TYPE_OBJECT_PATH:
+ variant_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING;
+ array_sig = DBUS_TYPE_OBJECT_PATH_AS_STRING;
+ break;
+ default:
+ return;
+ }
dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY,
NULL, &entry);
- connman_dbus_property_append_variant(&entry, key, type, val);
+ dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key);
+
+ dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT,
+ variant_sig, &value);
+
+ dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY,
+ array_sig, &array);
+ if (function)
+ function(&array);
+ dbus_message_iter_close_container(&value, &array);
+
+ dbus_message_iter_close_container(&entry, &value);
dbus_message_iter_close_container(dict, &entry);
}
DBUS_TYPE_UINT16, &network->frequency);
if (network->wifi.ssid != NULL && network->wifi.ssid_len > 0)
- connman_dbus_dict_append_array(&dict, "WiFi.SSID",
+ connman_dbus_dict_append_fixed_array(&dict, "WiFi.SSID",
DBUS_TYPE_BYTE, &network->wifi.ssid,
network->wifi.ssid_len);