summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/telepathy-glib-sections.txt1
-rw-r--r--telepathy-glib/connection-manager.c22
-rw-r--r--telepathy-glib/connection-manager.h3
-rw-r--r--telepathy-glib/protocol.c9
4 files changed, 35 insertions, 0 deletions
diff --git a/docs/reference/telepathy-glib-sections.txt b/docs/reference/telepathy-glib-sections.txt
index 2e9d5eb3d..3940cba44 100644
--- a/docs/reference/telepathy-glib-sections.txt
+++ b/docs/reference/telepathy-glib-sections.txt
@@ -4849,6 +4849,7 @@ tp_connection_manager_protocol_get_param
TpConnectionManagerParam
tp_connection_manager_param_get_name
tp_connection_manager_param_get_dbus_signature
+tp_connection_manager_param_dup_variant_type
tp_connection_manager_param_is_required
tp_connection_manager_param_is_required_for_registration
tp_connection_manager_param_is_secret
diff --git a/telepathy-glib/connection-manager.c b/telepathy-glib/connection-manager.c
index 406467159..c93d43a57 100644
--- a/telepathy-glib/connection-manager.c
+++ b/telepathy-glib/connection-manager.c
@@ -2601,6 +2601,28 @@ tp_connection_manager_param_get_dbus_signature (
}
/**
+ * tp_connection_manager_param_dup_variant_type:
+ * @param: a parameter supported by a #TpConnectionManager
+ *
+ * <!-- -->
+ *
+ * Returns: (transfer full): the #GVariantType of the parameter
+ * Since: 0.UNRELEASED
+ */
+GVariantType *
+tp_connection_manager_param_dup_variant_type (
+ const TpConnectionManagerParam *param)
+{
+ g_return_val_if_fail (param != NULL, NULL);
+
+ /* this should have been checked when we created it */
+ g_return_val_if_fail (g_variant_type_string_is_valid (param->dbus_signature),
+ NULL);
+
+ return g_variant_type_new (param->dbus_signature);
+}
+
+/**
* tp_connection_manager_param_is_required:
* @param: a parameter supported by a #TpConnectionManager
*
diff --git a/telepathy-glib/connection-manager.h b/telepathy-glib/connection-manager.h
index ac89341c3..6dd467ef3 100644
--- a/telepathy-glib/connection-manager.h
+++ b/telepathy-glib/connection-manager.h
@@ -204,6 +204,9 @@ gboolean tp_connection_manager_param_get_default (
_TP_AVAILABLE_IN_0_20
GVariant *tp_connection_manager_param_dup_default_variant (
const TpConnectionManagerParam *param);
+_TP_AVAILABLE_IN_UNRELEASED
+GVariantType *tp_connection_manager_param_dup_variant_type (
+ const TpConnectionManagerParam *param);
void tp_connection_manager_init_known_interfaces (void);
diff --git a/telepathy-glib/protocol.c b/telepathy-glib/protocol.c
index 867db25f1..ee9b7e282 100644
--- a/telepathy-glib/protocol.c
+++ b/telepathy-glib/protocol.c
@@ -215,6 +215,15 @@ tp_protocol_params_from_param_specs (const GPtrArray *parameters,
continue;
}
+ if (!g_variant_type_string_is_valid (param->dbus_signature))
+ {
+ DEBUG ("Parameter #%d for %s has type '%s' which is not a "
+ "single complete type, ignoring", i, protocol,
+ param->dbus_signature);
+ g_array_set_size (output, output->len - 1);
+ continue;
+ }
+
g_value_init (&param->default_value,
G_VALUE_TYPE (tmp));
g_value_copy (tmp, &param->default_value);