Browse Source

dbus: Split wpas_dbus_ctrl_iface_init() into helper functions

Clean up the method/property/signal registration code by using short
helper functions with the argument table near the registration call.
Jouni Malinen 15 years ago
parent
commit
7ae7b192f9

+ 118 - 111
wpa_supplicant/ctrl_iface_dbus_new.c

@@ -914,46 +914,136 @@ static void wpas_dbus_signal_debug_params_changed(struct wpa_global *global)
 }
 
 
-/**
- * wpas_dbus_ctrl_iface_init - Initialize dbus control interface
- * @global: Pointer to global data from wpa_supplicant_init()
- * Returns: Pointer to dbus_new_ctrl_iface date or %NULL on failure
- *
- * Initialize the dbus control interface for wpa_supplicantand and start
- * receiving commands from external programs over the bus.
- */
-static struct ctrl_iface_dbus_new_priv * wpas_dbus_ctrl_iface_init(
-	struct wpa_global *global)
+static void wpas_dbus_meth_reg_create_interface(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
 {
-	struct ctrl_iface_dbus_new_priv *ctrl_iface;
-	struct wpa_dbus_object_desc *obj_desc;
-	/* register methods */
-	struct wpa_dbus_argument margs1[] = {
+	struct wpa_dbus_argument margs[] = {
 		{ "args", "a{sv}", ARG_IN },
 		{ "path", "o", ARG_OUT },
 		END_ARGS
 	};
-	struct wpa_dbus_argument margs2[] = {
+	wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "CreateInterface",
+				 (WPADBusMethodHandler)
+				 &wpas_dbus_handler_create_interface,
+				 global, NULL, margs);
+}
+
+
+static void wpas_dbus_meth_reg_remove_interface(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	struct wpa_dbus_argument margs[] = {
 		{ "path", "o", ARG_IN },
 		END_ARGS
 	};
-	struct wpa_dbus_argument margs3[] = {
+	wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "RemoveInterface",
+				 (WPADBusMethodHandler)
+				 &wpas_dbus_handler_remove_interface,
+				 global, NULL, margs);
+}
+
+
+static void wpas_dbus_meth_reg_get_interface(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	struct wpa_dbus_argument margs[] = {
 		{ "ifname", "s", ARG_IN },
 		{ "path", "o", ARG_OUT },
 		END_ARGS
 	};
-	struct wpa_dbus_argument sargs1[] = {
+	wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "GetInterface",
+				 (WPADBusMethodHandler)
+				 &wpas_dbus_handler_get_interface,
+				 global, NULL, margs);
+}
+
+
+static void wpas_dbus_prop_reg_debug_params(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				   "DebugParams", "(ibb)",
+				   (WPADBusPropertyAccessor)
+				   &wpas_dbus_getter_debug_params,
+				   (WPADBusPropertyAccessor)
+				   &wpas_dbus_setter_debug_params,
+				   global, NULL, RW);
+}
+
+
+static void wpas_dbus_prop_reg_interfaces(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				   "Interfaces", "ao",
+				   (WPADBusPropertyAccessor)
+				   &wpas_dbus_getter_interfaces,
+				   NULL, global, NULL, R);
+}
+
+
+static void wpas_dbus_prop_reg_eap_methods(
+	struct wpa_dbus_object_desc *obj_desc)
+{
+	wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				   "EapMethods", "as",
+				   wpas_dbus_getter_eap_methods,
+				   NULL, NULL, NULL, R);
+}
+
+
+static void wpas_dbus_sign_reg_interface_added(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	struct wpa_dbus_argument sargs[] = {
 		{ "path", "o", ARG_OUT },
 		END_ARGS
 	};
-	struct wpa_dbus_argument sargs2[] = {
+	wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "InterfaceAdded", sargs);
+}
+
+
+static void wpas_dbus_sign_reg_interface_removed(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	struct wpa_dbus_argument sargs[] = {
 		{ "path", "o", ARG_OUT },
 		END_ARGS
 	};
-	struct wpa_dbus_argument sargs3[] = {
+	wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "InterfaceRemoved", sargs);
+}
+
+
+static void wpas_dbus_sign_reg_properties_changed(
+	struct wpa_global *global, struct wpa_dbus_object_desc *obj_desc)
+{
+	struct wpa_dbus_argument sargs[] = {
 		{ "properties", "a{sv}", ARG_OUT },
 		END_ARGS
 	};
+	wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
+				 "PropertiesChanged", sargs);
+}
+
+
+/**
+ * wpas_dbus_ctrl_iface_init - Initialize dbus control interface
+ * @global: Pointer to global data from wpa_supplicant_init()
+ * Returns: Pointer to dbus_new_ctrl_iface date or %NULL on failure
+ *
+ * Initialize the dbus control interface for wpa_supplicantand and start
+ * receiving commands from external programs over the bus.
+ */
+static struct ctrl_iface_dbus_new_priv * wpas_dbus_ctrl_iface_init(
+	struct wpa_global *global)
+{
+	struct ctrl_iface_dbus_new_priv *ctrl_iface;
+	struct wpa_dbus_object_desc *obj_desc;
 
 	obj_desc = os_zalloc(sizeof(struct wpa_dbus_object_desc));
 	if (!obj_desc) {
@@ -962,104 +1052,21 @@ static struct ctrl_iface_dbus_new_priv * wpas_dbus_ctrl_iface_init(
 		return NULL;
 	}
 
-	if (wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				     "CreateInterface",
-				     (WPADBusMethodHandler)
-				     &wpas_dbus_handler_create_interface,
-				     global, NULL, margs1)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus method %s"
-			   "in interface %s", "CreateInterface",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	if (wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-			"RemoveInterface",
-				     (WPADBusMethodHandler)
-				     &wpas_dbus_handler_remove_interface,
-				     global, NULL, margs2)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus method %s"
-			   "in interface %s", "RemoveInterface",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	if (wpa_dbus_method_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				     "GetInterface",
-				     (WPADBusMethodHandler)
-				     &wpas_dbus_handler_get_interface,
-				     global, NULL, margs3)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus method %s"
-			   "in interface %s", "global",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	/* register properties */
-	if (wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				       "DebugParams", "(ibb)",
-				       (WPADBusPropertyAccessor)
-				       &wpas_dbus_getter_debug_params,
-				       (WPADBusPropertyAccessor)
-				       &wpas_dbus_setter_debug_params,
-				       global, NULL, RW)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus property %s"
-			   "in interface %s", "DebugParams",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	if (wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				       "Interfaces", "ao",
-				       (WPADBusPropertyAccessor)
-				       &wpas_dbus_getter_interfaces, NULL,
-				       global, NULL, R)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus property %s"
-			   "in interface %s", "Interfaces",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
+	wpas_dbus_meth_reg_create_interface(global, obj_desc);
+	wpas_dbus_meth_reg_remove_interface(global, obj_desc);
+	wpas_dbus_meth_reg_get_interface(global, obj_desc);
 
-	if (wpa_dbus_property_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				       "EapMethods", "as",
-				       wpas_dbus_getter_eap_methods, NULL,
-				       NULL, NULL, R)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus property %s"
-			   "in interface %s", "EapMethods",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
+	wpas_dbus_prop_reg_debug_params(global, obj_desc);
+	wpas_dbus_prop_reg_interfaces(global, obj_desc);
+	wpas_dbus_prop_reg_eap_methods(obj_desc);
 
-
-	/* register signals */
-	if (wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				     "InterfaceAdded", sargs1)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus signal %s"
-			   "in interface %s", "InterfaceAdded",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	if (wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				     "InterfaceRemoved", sargs2)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus signal %s"
-			   "in interface %s", "InterfaceRemoved",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
-
-	if (wpa_dbus_signal_register(obj_desc, WPAS_DBUS_NEW_INTERFACE,
-				     "PropertiesChanged", sargs3)) {
-		wpa_printf(MSG_ERROR,
-			   "Failed to register dbus signal %s"
-			   "in interface %s", "PropertiesChanged",
-			   WPAS_DBUS_NEW_INTERFACE);
-	}
+	wpas_dbus_sign_reg_interface_added(global, obj_desc);
+	wpas_dbus_sign_reg_interface_removed(global, obj_desc);
+	wpas_dbus_sign_reg_properties_changed(global, obj_desc);
 
 	ctrl_iface = wpa_dbus_ctrl_iface_init(global, WPAS_DBUS_NEW_PATH,
 					      WPAS_DBUS_NEW_SERVICE,
 					      obj_desc);
-
 	if (!ctrl_iface)
 		free_dbus_object_desc(obj_desc);
 

+ 17 - 9
wpa_supplicant/ctrl_iface_dbus_new_helpers.c

@@ -1491,7 +1491,8 @@ int wpa_dbus_unregister_object_per_iface(
  * using this function.
  */
 int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
-			     char *dbus_interface, char *dbus_method,
+			     const char *dbus_interface,
+			     const char *dbus_method,
 			     WPADBusMethodHandler method_handler,
 			     void *handler_argument,
 			     WPADBusArgumentFreeFunction argument_free_func,
@@ -1509,7 +1510,6 @@ int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
 	}
 
 	/* count args */
-
 	if (args) {
 		while (args[args_num].name && args[args_num].type)
 			args_num++;
@@ -1518,7 +1518,7 @@ int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
 	method_dsc = os_zalloc(sizeof(struct wpa_dbus_method_desc) +
 			       args_num * sizeof(struct wpa_dbus_argument));
 	if (!method_dsc)
-		return -1;
+		goto err;
 
 	if (prev_desc == NULL)
 		obj_dsc->methods = method_dsc;
@@ -1572,6 +1572,8 @@ int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
 	return 0;
 
 err:
+	wpa_printf(MSG_WARNING, "Failed to register dbus method %s in "
+		   "interface %s", dbus_method, dbus_interface);
 	if (method_dsc) {
 		os_free(method_dsc->dbus_interface);
 		os_free(method_dsc->dbus_method);
@@ -1607,7 +1609,8 @@ err:
  * using it.
  */
 int wpa_dbus_signal_register(struct wpa_dbus_object_desc *obj_dsc,
-			     char *dbus_interface, char *dbus_signal,
+			     const char *dbus_interface,
+			     const char *dbus_signal,
 			     struct wpa_dbus_argument args[])
 {
 
@@ -1629,9 +1632,9 @@ int wpa_dbus_signal_register(struct wpa_dbus_object_desc *obj_dsc,
 	}
 
 	signal_dsc = os_zalloc(sizeof(struct wpa_dbus_signal_desc) +
-			       args_num*sizeof(struct wpa_dbus_argument));
+			       args_num * sizeof(struct wpa_dbus_argument));
 	if (!signal_dsc)
-		return -1;
+		goto err;
 
 	if (prev_desc == NULL)
 		obj_dsc->signals = signal_dsc;
@@ -1679,6 +1682,8 @@ int wpa_dbus_signal_register(struct wpa_dbus_object_desc *obj_dsc,
 	return 0;
 
 err:
+	wpa_printf(MSG_WARNING, "Failed to register dbus signal %s in "
+		   "interface %s", dbus_signal, dbus_interface);
 	if (signal_dsc) {
 		os_free(signal_dsc->dbus_interface);
 		os_free(signal_dsc->dbus_signal);
@@ -1720,8 +1725,9 @@ err:
  * used.
  */
 int wpa_dbus_property_register(struct wpa_dbus_object_desc *obj_dsc,
-			       char *dbus_interface, char *dbus_property,
-			       char *type,
+			       const char *dbus_interface,
+			       const char *dbus_property,
+			       const char *type,
 			       WPADBusPropertyAccessor getter,
 			       WPADBusPropertyAccessor setter,
 			       void *user_data,
@@ -1740,7 +1746,7 @@ int wpa_dbus_property_register(struct wpa_dbus_object_desc *obj_dsc,
 
 	property_dsc = os_zalloc(sizeof(struct wpa_dbus_property_desc));
 	if (!property_dsc)
-		return -1;
+		goto err;
 
 	if (prev_desc == NULL)
 		obj_dsc->properties = property_dsc;
@@ -1779,6 +1785,8 @@ int wpa_dbus_property_register(struct wpa_dbus_object_desc *obj_dsc,
 	return 0;
 
 err:
+	wpa_printf(MSG_WARNING, "Failed to register dbus property %s in "
+		   "interface %s", dbus_property, dbus_interface);
 	if (property_dsc) {
 		os_free(property_dsc->dbus_interface);
 		os_free(property_dsc->dbus_property);

+ 8 - 6
wpa_supplicant/ctrl_iface_dbus_new_helpers.h

@@ -94,25 +94,27 @@ int wpa_dbus_unregister_object_per_iface(
 	const char *path);
 
 int wpa_dbus_method_register(struct wpa_dbus_object_desc *obj_dsc,
-			     char *dbus_interface, char *dbus_method,
+			     const char *dbus_interface,
+			     const char *dbus_method,
 			     WPADBusMethodHandler method_handler,
 			     void *handler_argument,
 			     WPADBusArgumentFreeFunction argument_free_func,
 			     struct wpa_dbus_argument args[]);
 
 int wpa_dbus_signal_register(struct wpa_dbus_object_desc *obj_dsc,
-			     char *dbus_interface, char *dbus_signal,
+			     const char *dbus_interface,
+			     const char *dbus_signal,
 			     struct wpa_dbus_argument args[]);
 
 int wpa_dbus_property_register(
 	struct wpa_dbus_object_desc *obj_dsc,
-	char *dbus_interface, char *dbus_property,
-	char *type,
+	const char *dbus_interface, const char *dbus_property,
+	const char *type,
 	WPADBusPropertyAccessor getter,
 	WPADBusPropertyAccessor setter,
 	void *user_data,
-	WPADBusArgumentFreeFunction user_datat_free_func,
-	enum dbus_prop_access access);
+	WPADBusArgumentFreeFunction user_data_free_func,
+	enum dbus_prop_access _access);
 
 void wpa_dbus_signal_property_changed(struct ctrl_iface_dbus_new_priv *iface,
 				      WPADBusPropertyAccessor property_getter,