diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-05-07 12:25:15 +0000 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-05-07 12:25:15 +0000 | 
| commit | 0e8b2e702ace40ec86d0f605a9030fccef3a6e5a (patch) | |
| tree | 301d176f5f578a345b937fa41f1af22891982f17 | |
| parent | c6e6e57381cf3347ae911cbf7e97c021552e6add (diff) | |
Use the generic signal sending functions
| -rw-r--r-- | hcid/dbus-adapter.c | 85 | ||||
| -rw-r--r-- | hcid/dbus-hci.c | 335 | ||||
| -rw-r--r-- | hcid/dbus-hci.h | 2 | ||||
| -rw-r--r-- | hcid/dbus-test.c | 13 | 
4 files changed, 158 insertions, 277 deletions
| diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c index 5aeab81c..677463ad 100644 --- a/hcid/dbus-adapter.c +++ b/hcid/dbus-adapter.c @@ -599,7 +599,7 @@ static DBusHandlerResult adapter_set_discoverable_to(DBusConnection *conn,  							void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	uint32_t timeout;  	bdaddr_t bdaddr; @@ -630,12 +630,13 @@ static DBusHandlerResult adapter_set_discoverable_to(DBusConnection *conn,  	str2ba(adapter->address, &bdaddr);  	write_discoverable_timeout(&bdaddr, timeout); -	signal = dev_signal_factory(adapter->dev_id, "DiscoverableTimeoutChanged", -						DBUS_TYPE_UINT32, &timeout, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, +					"DiscoverableTimeoutChanged", +					DBUS_TYPE_UINT32, &timeout, +					DBUS_TYPE_INVALID); -	return send_message_and_unref(conn, reply); +	return DBUS_HANDLER_RESULT_HANDLED;  }  static DBusHandlerResult adapter_is_connectable(DBusConnection *conn, @@ -921,7 +922,7 @@ static DBusHandlerResult adapter_set_minor_class(DBusConnection *conn,  						DBusMessage *msg, void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	bdaddr_t bdaddr;  	const char *minor;  	uint8_t cls[3]; @@ -984,10 +985,10 @@ static DBusHandlerResult adapter_set_minor_class(DBusConnection *conn,  		return error_failed(conn, msg, err);  	} -	signal = dev_signal_factory(adapter->dev_id, "MinorClassChanged", -						DBUS_TYPE_STRING, &minor, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, "MinorClassChanged", +					DBUS_TYPE_STRING, &minor, +					DBUS_TYPE_INVALID);  	reply = dbus_message_new_method_return(msg); @@ -1747,7 +1748,7 @@ static DBusHandlerResult adapter_set_remote_alias(DBusConnection *conn,  						DBusMessage *msg, void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	char *alias, *addr;  	bdaddr_t bdaddr;  	int ecode; @@ -1773,11 +1774,11 @@ static DBusHandlerResult adapter_set_remote_alias(DBusConnection *conn,  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	signal = dev_signal_factory(adapter->dev_id, "RemoteAliasChanged", -						DBUS_TYPE_STRING, &addr, -						DBUS_TYPE_STRING, &alias, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, "RemoteAliasChanged", +					DBUS_TYPE_STRING, &addr, +					DBUS_TYPE_STRING, &alias, +					DBUS_TYPE_INVALID);  	return send_message_and_unref(conn, reply);  } @@ -1786,7 +1787,7 @@ static DBusHandlerResult adapter_clear_remote_alias(DBusConnection *conn,  						DBusMessage *msg, void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	char *addr_ptr;  	bdaddr_t bdaddr;  	int ecode, had_alias = 1; @@ -1815,13 +1816,12 @@ static DBusHandlerResult adapter_clear_remote_alias(DBusConnection *conn,  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; -	if (had_alias) { -		signal = dev_signal_factory(adapter->dev_id, +	if (had_alias) +		dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +						ADAPTER_INTERFACE,  						"RemoteAliasCleared",  						DBUS_TYPE_STRING, &addr_ptr,  						DBUS_TYPE_INVALID); -		send_message_and_unref(conn, signal); -	}  	return send_message_and_unref(conn, reply);  } @@ -1951,10 +1951,8 @@ static DBusHandlerResult adapter_dc_remote_device(DBusConnection *conn,  {  	struct adapter *adapter = data;  	GSList *l = adapter->active_conn; -  	const char *peer_addr;  	bdaddr_t peer_bdaddr; -	DBusMessage *signal;  	if (!adapter->up)  		return error_not_ready(conn, msg); @@ -1995,12 +1993,11 @@ static DBusHandlerResult adapter_dc_remote_device(DBusConnection *conn,  	adapter->pending_dc->conn_handle =  		((struct active_conn_info *) l->data)->handle; -	/* ...and send a signal */ -	signal = dev_signal_factory(adapter->dev_id, "RemoteDeviceDisconnectRequested", -						DBUS_TYPE_STRING, &peer_addr, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); - +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, +					"RemoteDeviceDisconnectRequested", +					DBUS_TYPE_STRING, &peer_addr, +					DBUS_TYPE_INVALID);  	return DBUS_HANDLER_RESULT_HANDLED;  } @@ -2290,7 +2287,6 @@ static DBusHandlerResult adapter_remove_bonding(DBusConnection *conn,  	struct adapter *adapter = data;  	GSList *l;  	DBusMessage *reply; -	DBusMessage *signal;  	char filename[PATH_MAX + 1];  	char *addr_ptr, *str;  	bdaddr_t bdaddr; @@ -2350,11 +2346,10 @@ static DBusHandlerResult adapter_remove_bonding(DBusConnection *conn,  		}  	} -	/* FIXME: which condition must be verified before send the signal */ -	signal = dev_signal_factory(adapter->dev_id, "BondingRemoved", +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, "BondingRemoved",  					DBUS_TYPE_STRING, &addr_ptr,  					DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal);  	reply = dbus_message_new_method_return(msg); @@ -2931,7 +2926,7 @@ static DBusHandlerResult adapter_set_trusted(DBusConnection *conn,  						void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	bdaddr_t local;  	const char *address; @@ -2951,10 +2946,10 @@ static DBusHandlerResult adapter_set_trusted(DBusConnection *conn,  	write_trust(&local, address, GLOBAL_TRUST, TRUE); -	signal = dev_signal_factory(adapter->dev_id, "TrustAdded", -						DBUS_TYPE_STRING, &address, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, "TrustAdded", +					DBUS_TYPE_STRING, &address, +					DBUS_TYPE_INVALID);  	return send_message_and_unref(conn, reply);  } @@ -2997,7 +2992,7 @@ static DBusHandlerResult adapter_remove_trust(DBusConnection *conn,  						void *data)  {  	struct adapter *adapter = data; -	DBusMessage *reply, *signal; +	DBusMessage *reply;  	const char *address;  	bdaddr_t local; @@ -3017,10 +3012,10 @@ static DBusHandlerResult adapter_remove_trust(DBusConnection *conn,  	write_trust(&local, address, GLOBAL_TRUST, FALSE); -	signal = dev_signal_factory(adapter->dev_id, "TrustRemoved", -						DBUS_TYPE_STRING, &address, -						DBUS_TYPE_INVALID); -	send_message_and_unref(conn, signal); +	dbus_connection_emit_signal(conn, dbus_message_get_path(msg), +					ADAPTER_INTERFACE, "TrustRemoved", +					DBUS_TYPE_STRING, &address, +					DBUS_TYPE_INVALID);  	return send_message_and_unref(conn, reply);  } @@ -3238,6 +3233,8 @@ static DBusSignalVTable adapter_signals[] = {  	{ "NameChanged",			"s"	},  	{ "DiscoveryStarted",			""	},  	{ "DiscoveryCompleted",			""	}, +	{ "PeriodicDiscoveryStarted",		""	}, +	{ "PeriodicDiscoveryStopped",		""	},  	{ "RemoteDeviceFound",			"sun"	},  	{ "RemoteDeviceDisappeared",		"s"	},  	{ "RemoteClassUpdated",			"su"	}, diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index 7848b3db..1da7ab31 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -246,63 +246,25 @@ DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status)  	}  } -static inline int dev_append_signal_args(DBusMessage *signal, int first, -						va_list var_args) -{ -	void *value; -	DBusMessageIter iter; -	int type = first; - -	dbus_message_iter_init_append(signal, &iter); - -	while (type != DBUS_TYPE_INVALID) { -		value = va_arg(var_args, void *); - -		if (!dbus_message_iter_append_basic(&iter, type, value)) { -			error("Append property argument error (type %d)", type); -			return -1; -		} - -		type = va_arg(var_args, int); -	} - -	return 0; -} - -DBusMessage *dev_signal_factory(int devid, const char *prop_name, int first, -				...) +static dbus_bool_t send_adapter_signal(DBusConnection *conn, int devid, +					const char *name, int first, ...)  {  	va_list var_args; -	DBusMessage *signal; +	dbus_bool_t ret;  	char path[MAX_PATH_LENGTH];  	snprintf(path, sizeof(path)-1, "%s/hci%d", BASE_PATH, devid); -	signal = dbus_message_new_signal(path, ADAPTER_INTERFACE, prop_name); -	if (!signal) { -		error("Can't allocate D-BUS message"); -		return NULL; -	} -  	va_start(var_args, first); - -	if (dev_append_signal_args(signal, first, var_args) < 0) { -		dbus_message_unref(signal); -		signal = NULL; -	} - +	ret = dbus_connection_emit_signal_valist(conn, path, ADAPTER_INTERFACE, +							name, first, var_args);  	va_end(var_args); -	return signal; +	return ret;  } -/* - * Virtual table that handle the object path hierarchy - */ - -static void adapter_mode_changed(struct adapter *adapter, uint8_t mode) +static void adapter_mode_changed(struct adapter *adapter, const char *path, uint8_t mode)  { -	DBusMessage *message;  	const char *scan_mode;  	adapter->mode = mode; @@ -331,11 +293,10 @@ static void adapter_mode_changed(struct adapter *adapter, uint8_t mode)  		return;  	} -	message = dev_signal_factory(adapter->dev_id, "ModeChanged", +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE, +					"ModeChanged",  					DBUS_TYPE_STRING, &scan_mode,  					DBUS_TYPE_INVALID); - -	send_message_and_unref(connection, message);  }  /* @@ -343,8 +304,6 @@ static void adapter_mode_changed(struct adapter *adapter, uint8_t mode)   */  static void reply_pending_requests(const char *path, struct adapter *adapter)  { -	DBusMessage *message; -  	if (!path || !adapter)  		return; @@ -364,8 +323,9 @@ static void reply_pending_requests(const char *path, struct adapter *adapter)  	/* If there is a pending reply for discovery cancel */  	if (adapter->discovery_cancel) { -		message = dbus_message_new_method_return(adapter->discovery_cancel); -		send_message_and_unref(connection, message); +		DBusMessage *reply; +		reply = dbus_message_new_method_return(adapter->discovery_cancel); +		send_message_and_unref(connection, reply);  		dbus_message_unref(adapter->discovery_cancel);  		adapter->discovery_cancel = NULL;  	} @@ -373,9 +333,10 @@ static void reply_pending_requests(const char *path, struct adapter *adapter)  	if (adapter->discov_active) {  		/* Send discovery completed signal if there isn't name  		 * to resolve */ -		message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -							"DiscoveryCompleted"); -		send_message_and_unref(connection, message); +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"DiscoveryCompleted", +						DBUS_TYPE_INVALID);  		/* Cancel inquiry initiated by D-Bus client */  		if (adapter->discov_requestor) @@ -385,9 +346,10 @@ static void reply_pending_requests(const char *path, struct adapter *adapter)  	if (adapter->pdiscov_active) {  		/* Send periodic discovery stopped signal exit or stop  		 * the device */ -		message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -						"PeriodicDiscoveryStopped"); -		send_message_and_unref(connection, message); +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"PeriodicDiscoveryStopped", +						DBUS_TYPE_INVALID);  		/* Stop periodic inquiry initiated by D-Bus client */  		if (adapter->pdiscov_requestor) @@ -489,7 +451,6 @@ int hcid_dbus_register_device(uint16_t id)  {  	char path[MAX_PATH_LENGTH];  	char *pptr = path; -	DBusMessage *message;  	struct adapter *adapter;  	snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id); @@ -534,19 +495,11 @@ int hcid_dbus_register_device(uint16_t id)  	/*  	 * Send the adapter added signal  	 */ -	message = dbus_message_new_signal(BASE_PATH, MANAGER_INTERFACE, -						"AdapterAdded"); -	if (message == NULL) { -		error("Can't allocate D-Bus message"); -		goto failed; -	} - -	dbus_message_append_args(message, +	dbus_connection_emit_signal(connection, BASE_PATH, MANAGER_INTERFACE, +					"AdapterAdded",  					DBUS_TYPE_STRING, &pptr,  					DBUS_TYPE_INVALID); -	send_message_and_unref(connection, message); -  	return 0;  failed: @@ -558,27 +511,17 @@ failed:  int hcid_dbus_unregister_device(uint16_t id)  { -	DBusMessage *message;  	char path[MAX_PATH_LENGTH];  	char *pptr = path;  	int ret;  	snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id); -	message = dbus_message_new_signal(BASE_PATH, MANAGER_INTERFACE, -						"AdapterRemoved"); -	if (message == NULL) { -		error("Can't allocate D-Bus message"); -		goto failed; -	} - -	dbus_message_append_args(message, +	dbus_connection_emit_signal(connection, BASE_PATH, MANAGER_INTERFACE, +					"AdapterRemoved",  					DBUS_TYPE_STRING, &pptr,  					DBUS_TYPE_INVALID); -	send_message_and_unref(connection, message); - -failed:  	ret = unregister_adapter_path(path);  	if (ret == 0 && get_default_adapter() == id) { @@ -587,20 +530,11 @@ failed:  		if (new_default >= 0) {  			snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH,  					new_default); -			message = dbus_message_new_signal(BASE_PATH, +			dbus_connection_emit_signal(connection, BASE_PATH,  							MANAGER_INTERFACE, -							"DefaultAdapterChanged"); -			if (!message) { -				error("Can't allocate D-Bus message"); -				/* Return success since actual unregistering -				 * succeeded */ -				return ret; -			} - -			dbus_message_append_args(message, -						DBUS_TYPE_STRING, &pptr, -						DBUS_TYPE_INVALID); -			send_message_and_unref(connection, message); +							"DefaultAdapterChanged", +							DBUS_TYPE_STRING, &pptr, +							DBUS_TYPE_INVALID);  		}  	} @@ -658,7 +592,7 @@ int hcid_dbus_start_device(uint16_t id)  	if (err < 0)  		goto failed; -	adapter_mode_changed(adapter, mode); +	adapter_mode_changed(adapter, path, mode);  	/*   	 * retrieve the active connections: address the scenario where @@ -694,19 +628,15 @@ failed:  static void send_dc_signal(struct active_conn_info *dev, const char *path)  { -	DBusMessage *message;  	char addr[18];  	const char *paddr = addr;  	ba2str(&dev->bdaddr, addr); -	message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -					"RemoteDeviceDisconnected"); -	dbus_message_append_args(message, -				DBUS_TYPE_STRING, &paddr, -				DBUS_TYPE_INVALID); - -	send_message_and_unref(connection, message); +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE, +					"RemoteDeviceDisconnected", +					DBUS_TYPE_STRING, &paddr, +					DBUS_TYPE_INVALID);  }  int hcid_dbus_stop_device(uint16_t id) @@ -714,7 +644,6 @@ int hcid_dbus_stop_device(uint16_t id)  	char path[MAX_PATH_LENGTH];  	struct adapter *adapter;  	const char *scan_mode = MODE_OFF; -	DBusMessage *message;  	snprintf(path, sizeof(path), "%s/hci%d", BASE_PATH, id); @@ -777,11 +706,9 @@ int hcid_dbus_stop_device(uint16_t id)  		adapter->active_conn = NULL;  	} -	message = dev_signal_factory(adapter->dev_id, "ModeChanged", -						DBUS_TYPE_STRING, &scan_mode, -						DBUS_TYPE_INVALID); - -	send_message_and_unref(connection, message); +	send_adapter_signal(connection, adapter->dev_id, "ModeChanged", +				DBUS_TYPE_STRING, &scan_mode, +				DBUS_TYPE_INVALID);  	adapter->up = 0;  	adapter->mode = SCAN_DISABLED; @@ -873,7 +800,6 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,  					uint8_t status)  {  	struct adapter *adapter; -	DBusMessage *message;  	char *local_addr, *peer_addr;  	GSList *l;  	bdaddr_t tmp; @@ -908,13 +834,11 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,  		adapter->pin_reqs = g_slist_remove(adapter->pin_reqs, l->data);  		g_free(d); -		if (!status) { -			message = dev_signal_factory(adapter->dev_id, -							"BondingCreated", -							DBUS_TYPE_STRING, &peer_addr, -							DBUS_TYPE_INVALID); -			send_message_and_unref(connection, message); -		} +		if (!status) +			send_adapter_signal(connection, adapter->dev_id, +						"BondingCreated", +						DBUS_TYPE_STRING, &peer_addr, +						DBUS_TYPE_INVALID);  	}  	release_passkey_agents(adapter, peer); @@ -926,10 +850,11 @@ void hcid_dbus_bonding_process_complete(bdaddr_t *local, bdaddr_t *peer,  		/* reply authentication canceled */  		error_authentication_canceled(connection, adapter->bonding->rq);  	} else { +		DBusMessage *reply;  		/* reply authentication success or an error */ -		message = new_authentication_return(adapter->bonding->rq, +		reply = new_authentication_return(adapter->bonding->rq,  							status); -		send_message_and_unref(connection, message); +		send_message_and_unref(connection, reply);  	}  	name_listener_remove(connection, @@ -950,7 +875,6 @@ failed:  void hcid_dbus_inquiry_start(bdaddr_t *local)  {  	struct adapter *adapter; -	DBusMessage *message;  	char path[MAX_PATH_LENGTH];  	char *local_addr;  	bdaddr_t tmp; @@ -981,10 +905,8 @@ void hcid_dbus_inquiry_start(bdaddr_t *local)  			adapter->discov_type &= ~RESOLVE_NAME;  	} -	message = dev_signal_factory(adapter->dev_id, "DiscoveryStarted", -					DBUS_TYPE_INVALID); - -	send_message_and_unref(connection, message); +	send_adapter_signal(connection, adapter->dev_id, "DiscoveryStarted", +				DBUS_TYPE_INVALID);  failed:  	bt_free(local_addr); @@ -1027,7 +949,7 @@ int found_device_req_name(struct adapter *adapter)  	/* send at least one request or return failed if the list is empty */  	do { -		DBusMessage *signal = NULL; +		const char *signal = NULL;  		struct remote_dev_info *dev = l->data;  		char *peer_addr;  		bdaddr_t tmp; @@ -1045,38 +967,28 @@ int found_device_req_name(struct adapter *adapter)  		if (hci_send_req(dd, &rq, 500) < 0) {  			error("Unable to send the HCI remote name request: %s (%d)",  						strerror(errno), errno); -			signal = dev_signal_factory(adapter->dev_id, -						"RemoteNameFailed", -						DBUS_TYPE_STRING, &peer_addr, -						DBUS_TYPE_INVALID); +			signal = "RemoteNameFailed";  		}  		if (rp.status) {  			error("Remote name request failed with status 0x%02x",  					rp.status); -			signal = dev_signal_factory(adapter->dev_id, -						"RemoteNameFailed", -						DBUS_TYPE_STRING, &peer_addr, -						DBUS_TYPE_INVALID); +			signal = "RemoteNameFailed";  		}  		if (!signal) {  			req_sent = 1;  			/* if we are in discovery, inform application of getting name */ -			if (adapter->discov_type & (STD_INQUIRY | PERIODIC_INQUIRY)) { -				signal = dev_signal_factory(adapter->dev_id, -							"RemoteNameRequested", -							DBUS_TYPE_STRING, &peer_addr, -							DBUS_TYPE_INVALID); -			} +			if (adapter->discov_type & (STD_INQUIRY | PERIODIC_INQUIRY)) +				signal = "RemoteNameRequested";  		} -		free(peer_addr); +		if (signal) +			send_adapter_signal(connection, adapter->dev_id, signal, +						DBUS_TYPE_STRING, &peer_addr, +						DBUS_TYPE_INVALID); -		if (signal) { -			send_message_and_unref(connection, signal); -			signal = NULL; -		} +		free(peer_addr);  		if (req_sent)  			break; @@ -1102,26 +1014,20 @@ int found_device_req_name(struct adapter *adapter)  static void send_out_of_range(const char *path, GSList *l)  { -	DBusMessage *message; -	const char *peer_addr; -  	while (l) { -		peer_addr = l->data; - -		message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -						"RemoteDeviceDisappeared"); -		dbus_message_append_args(message, -				DBUS_TYPE_STRING, &peer_addr, -				DBUS_TYPE_INVALID); +		const char *peer_addr = l->data; -		send_message_and_unref(connection, message); +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"RemoteDeviceDisappeared", +						DBUS_TYPE_STRING, &peer_addr, +						DBUS_TYPE_INVALID);  		l = l->next;  	}  }  void hcid_dbus_inquiry_complete(bdaddr_t *local)  { -	DBusMessage *message;  	struct adapter *adapter;  	GSList *l;  	char path[MAX_PATH_LENGTH]; @@ -1190,10 +1096,10 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  		goto done; /* skip - there is name to resolve */  	if (adapter->discov_active) { -		message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -							"DiscoveryCompleted"); -		send_message_and_unref(connection, message); - +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"DiscoveryCompleted", +						DBUS_TYPE_INVALID);  		adapter->discov_active = 0;  	} @@ -1210,8 +1116,9 @@ void hcid_dbus_inquiry_complete(bdaddr_t *local)  		/* If there is a pending reply for discovery cancel */  		if (adapter->discovery_cancel) { -			message = dbus_message_new_method_return(adapter->discovery_cancel); -			send_message_and_unref(connection, message); +			DBusMessage *reply; +			reply = dbus_message_new_method_return(adapter->discovery_cancel); +			send_message_and_unref(connection, reply);  			dbus_message_unref(adapter->discovery_cancel);  			adapter->discovery_cancel = NULL;  		} @@ -1230,7 +1137,6 @@ done:  void hcid_dbus_periodic_inquiry_start(bdaddr_t *local, uint8_t status)  {  	struct adapter *adapter; -	DBusMessage *message;  	char path[MAX_PATH_LENGTH];  	char *local_addr;  	bdaddr_t tmp; @@ -1259,9 +1165,9 @@ void hcid_dbus_periodic_inquiry_start(bdaddr_t *local, uint8_t status)  			adapter->discov_type &= ~RESOLVE_NAME;  	} -	message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -						"PeriodicDiscoveryStarted"); -	send_message_and_unref(connection, message); +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE, +					"PeriodicDiscoveryStarted", +					DBUS_TYPE_INVALID);  failed:  	bt_free(local_addr); @@ -1269,7 +1175,6 @@ failed:  void hcid_dbus_periodic_inquiry_exit(bdaddr_t *local, uint8_t status)  { -	DBusMessage *message;  	struct adapter *adapter;  	char path[MAX_PATH_LENGTH];  	char *local_addr; @@ -1322,17 +1227,17 @@ void hcid_dbus_periodic_inquiry_exit(bdaddr_t *local, uint8_t status)  	 /* workaround: inquiry completed is not sent when exiting from  	  * periodic inquiry */  	if (adapter->discov_active) { -		message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -				"DiscoveryCompleted"); -		send_message_and_unref(connection, message); - +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"DiscoveryCompleted", +						DBUS_TYPE_INVALID);  		adapter->discov_active = 0;  	}  	/* Send discovery completed signal if there isn't name to resolve */ -	message = dbus_message_new_signal(path, ADAPTER_INTERFACE, -						"PeriodicDiscoveryStopped"); -	send_message_and_unref(connection, message); +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE, +					"PeriodicDiscoveryStopped", +					DBUS_TYPE_INVALID);  done:  	bt_free(local_addr);  } @@ -1360,8 +1265,6 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,  				int8_t rssi, uint8_t *data)  {  	char filename[PATH_MAX + 1]; -	DBusMessage *signal_device; -	DBusMessage *signal_name;  	char path[MAX_PATH_LENGTH];  	struct adapter *adapter;  	GSList *l; @@ -1415,13 +1318,12 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,  	}  	/* send the device found signal */ -	signal_device = dev_signal_factory(adapter->dev_id, "RemoteDeviceFound", -						DBUS_TYPE_STRING, &peer_addr, -						DBUS_TYPE_UINT32, &class, -						DBUS_TYPE_INT16, &tmp_rssi, -						DBUS_TYPE_INVALID); - -	send_message_and_unref(connection, signal_device); +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE, +					"RemoteDeviceFound", +					DBUS_TYPE_STRING, &peer_addr, +					DBUS_TYPE_UINT32, &class, +					DBUS_TYPE_INT16, &tmp_rssi, +					DBUS_TYPE_INVALID);  	memset(&match, 0, sizeof(struct remote_dev_info));  	bacpy(&match.bdaddr, peer); @@ -1460,12 +1362,12 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class,  	}  	if (name) { -		signal_name = dev_signal_factory(adapter->dev_id, "RemoteNameUpdated", -							DBUS_TYPE_STRING, &peer_addr, -							DBUS_TYPE_STRING, &name, -							DBUS_TYPE_INVALID); -		send_message_and_unref(connection, signal_name); - +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"RemoteNameUpdated", +						DBUS_TYPE_STRING, &peer_addr, +						DBUS_TYPE_STRING, &name, +						DBUS_TYPE_INVALID);  		g_free(name);  		if (name_type != 0x08) @@ -1482,7 +1384,6 @@ done:  void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)  { -	DBusMessage *message;  	char *local_addr, *peer_addr;  	bdaddr_t tmp;  	uint32_t old_class = 0; @@ -1500,12 +1401,11 @@ void hcid_dbus_remote_class(bdaddr_t *local, bdaddr_t *peer, uint32_t class)  		error("No matching device id for %s", local_addr);  		goto failed;  	} -	message = dev_signal_factory(id, "RemoteClassUpdated", -						DBUS_TYPE_STRING, &peer_addr, -						DBUS_TYPE_UINT32, &class, -						DBUS_TYPE_INVALID); -	send_message_and_unref(connection, message); +	send_adapter_signal(connection, id, "RemoteClassUpdated", +				DBUS_TYPE_STRING, &peer_addr, +				DBUS_TYPE_UINT32, &class, +				DBUS_TYPE_INVALID);  failed:  	bt_free(local_addr); @@ -1516,7 +1416,6 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  				char *name)  {  	struct adapter *adapter; -	DBusMessage *message;  	char path[MAX_PATH_LENGTH];  	char *local_addr, *peer_addr;  	bdaddr_t tmp; @@ -1540,19 +1439,19 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	}  	if (status) -		message = dev_signal_factory(adapter->dev_id, +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE,  						"RemoteNameFailed",  						DBUS_TYPE_STRING, &peer_addr,  						DBUS_TYPE_INVALID);  	else  -		message = dev_signal_factory(adapter->dev_id, +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE,  						"RemoteNameUpdated",  						DBUS_TYPE_STRING, &peer_addr,  						DBUS_TYPE_STRING, &name,  						DBUS_TYPE_INVALID); -	send_message_and_unref(connection, message); -  	/* remove from remote name request list */  	found_device_remove(&adapter->found_devices, peer); @@ -1577,8 +1476,9 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  		/* If there is a pending reply for discovery cancel */  		if (adapter->discovery_cancel) { -			message = dbus_message_new_method_return(adapter->discovery_cancel); -			send_message_and_unref(connection, message); +			DBusMessage *reply; +			reply = dbus_message_new_method_return(adapter->discovery_cancel); +			send_message_and_unref(connection, reply);  			dbus_message_unref(adapter->discovery_cancel);  			adapter->discovery_cancel = NULL;  		} @@ -1589,10 +1489,10 @@ void hcid_dbus_remote_name(bdaddr_t *local, bdaddr_t *peer, uint8_t status,  	}  	if (adapter->discov_active) { -		message = dbus_message_new_signal(path, -				ADAPTER_INTERFACE, "DiscoveryCompleted"); -		send_message_and_unref(connection, message); - +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE, +						"DiscoveryCompleted", +						DBUS_TYPE_INVALID);  		adapter->discov_active = 0;  	} @@ -1605,7 +1505,6 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle,  				bdaddr_t *peer)  {  	char path[MAX_PATH_LENGTH]; -	DBusMessage *message;  	struct adapter *adapter;  	char *local_addr, *peer_addr;  	bdaddr_t tmp; @@ -1646,13 +1545,12 @@ void hcid_dbus_conn_complete(bdaddr_t *local, uint8_t status, uint16_t handle,  			adapter->bonding->hci_status = status;  	} else {  		/* Send the remote device connected signal */ -		message = dev_signal_factory(adapter->dev_id, +		dbus_connection_emit_signal(connection, path, +						ADAPTER_INTERFACE,  						"RemoteDeviceConnected",  						DBUS_TYPE_STRING, &peer_addr,  						DBUS_TYPE_INVALID); -		send_message_and_unref(connection, message); -  		/* add in the active connetions list */  		active_conn_append(&adapter->active_conn, peer, handle);  	} @@ -1665,10 +1563,10 @@ done:  void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  				uint16_t handle, uint8_t reason)  { +	DBusMessage *reply;  	char path[MAX_PATH_LENGTH];  	struct adapter *adapter;  	struct active_conn_info *dev; -	DBusMessage *message;  	GSList *l;  	char *local_addr, *peer_addr = NULL;  	bdaddr_t tmp; @@ -1727,9 +1625,9 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  			error_authentication_canceled(connection,  							adapter->bonding->rq);  		} else { -			message = new_authentication_return(adapter->bonding->rq, +			reply = new_authentication_return(adapter->bonding->rq,  							HCI_AUTHENTICATION_FAILURE); -			send_message_and_unref(connection, message); +			send_message_and_unref(connection, reply);  		}  		name_listener_remove(connection, @@ -1745,8 +1643,6 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  	/* Check if there is a pending RemoteDeviceDisconnect request */  	if (adapter->pending_dc) { -		DBusMessage *reply; -  		reply = dbus_message_new_method_return(adapter->pending_dc->msg);  		if (!reply)  			error("Failed to allocate disconnect reply"); @@ -1758,11 +1654,10 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status,  	}  	/* Send the remote device disconnected signal */ -	message = dev_signal_factory(adapter->dev_id, +	dbus_connection_emit_signal(connection, path, ADAPTER_INTERFACE,  					"RemoteDeviceDisconnected",  					DBUS_TYPE_STRING, &peer_addr,  					DBUS_TYPE_INVALID); -	send_message_and_unref(connection, message);  	adapter->active_conn = g_slist_remove(adapter->active_conn, dev);  	g_free(dev); @@ -1827,7 +1722,6 @@ failed:   *****************************************************************/  void hcid_dbus_setname_complete(bdaddr_t *local)  { -	DBusMessage *signal;  	char *local_addr;  	bdaddr_t tmp;  	int id; @@ -1874,9 +1768,8 @@ void hcid_dbus_setname_complete(bdaddr_t *local)  	name[248] = '\0';  	pname = name; -	signal = dev_signal_factory(id, "NameChanged", +	send_adapter_signal(connection, id, "NameChanged",  				DBUS_TYPE_STRING, &pname, DBUS_TYPE_INVALID); -	send_message_and_unref(connection, signal);  failed:  	if (dd >= 0) @@ -1942,7 +1835,7 @@ void hcid_dbus_setscan_enable_complete(bdaddr_t *local)  	}  	if (adapter->mode != rp.enable) -		adapter_mode_changed(adapter, rp.enable); +		adapter_mode_changed(adapter, path, rp.enable);  failed:  	if (dd >= 0) diff --git a/hcid/dbus-hci.h b/hcid/dbus-hci.h index e80ca0d9..5a7f9628 100644 --- a/hcid/dbus-hci.h +++ b/hcid/dbus-hci.h @@ -53,8 +53,6 @@ void hcid_dbus_pin_code_reply(bdaddr_t *local, void *ptr);  int unregister_adapter_path(const char *path); -DBusMessage *dev_signal_factory(int devid, const char *prop_name, int first, ...); -  DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status);  int get_default_dev_id(void); diff --git a/hcid/dbus-test.c b/hcid/dbus-test.c index 206bc0fe..23d40b4b 100644 --- a/hcid/dbus-test.c +++ b/hcid/dbus-test.c @@ -115,21 +115,14 @@ static void audit_free(struct audit *audit)  static void send_audit_status(struct audit *audit, const char *name)  { -	DBusMessage *signal;  	char addr[18], *addr_ptr = addr; -	signal = dbus_message_new_signal(audit->adapter_path, TEST_INTERFACE, name); -	if (!signal) { -		error("Failed to allocate new D-Bus message"); -		return; -	} -  	ba2str(&audit->peer, addr); -	dbus_message_append_args(signal, DBUS_TYPE_STRING, &addr_ptr, +	dbus_connection_emit_signal(audit->conn, audit->adapter_path, +					TEST_INTERFACE, name, +					DBUS_TYPE_STRING, &addr_ptr,  					DBUS_TYPE_INVALID); - -	send_message_and_unref(audit->conn, signal);  }  static void audit_requestor_exited(const char *name, struct audit *audit) | 
