diff options
| -rw-r--r-- | hcid/dbus.c | 111 | ||||
| -rw-r--r-- | hcid/dbus.h | 57 | 
2 files changed, 46 insertions, 122 deletions
diff --git a/hcid/dbus.c b/hcid/dbus.c index d6b75e47..f123a993 100644 --- a/hcid/dbus.c +++ b/hcid/dbus.c @@ -163,24 +163,6 @@ typedef struct  {  	const char *str;  } bluez_error_t; -typedef struct { -	char *str; -	unsigned int val; -} hci_map; - -static hci_map dev_flags_map[] = { -	{ "INIT",	HCI_INIT	}, -	{ "RUNNING",	HCI_RUNNING	}, -	{ "RAW",	HCI_RAW		}, -	{ "PSCAN",	HCI_PSCAN	}, -	{ "ISCAN",	HCI_ISCAN	}, -	{ "INQUIRY",	HCI_INQUIRY	}, -	{ "AUTH",	HCI_AUTH	}, -	{ "ENCRYPT",	HCI_ENCRYPT	}, -	{ "SECMGR",	HCI_SECMGR	}, -	{ NULL } -}; -  static const bluez_error_t dbus_error_array[] = {  	{ BLUEZ_EDBUS_UNKNOWN_METHOD,	"Method not found"		},  	{ BLUEZ_EDBUS_WRONG_SIGNATURE,	"Wrong method signature"	}, @@ -979,7 +961,7 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, bdaddr_t *peer, uint8_t reason)   *  Section reserved to D-Bus watch functions   *   *****************************************************************/ -gboolean watch_func(GIOChannel *chan, GIOCondition cond, gpointer data) +static gboolean watch_func(GIOChannel *chan, GIOCondition cond, gpointer data)  {  	DBusWatch *watch = (DBusWatch *) data;  	int flags = 0; @@ -1001,7 +983,7 @@ gboolean watch_func(GIOChannel *chan, GIOCondition cond, gpointer data)  	return TRUE;  } -dbus_bool_t add_watch(DBusWatch *watch, void *data) +static dbus_bool_t add_watch(DBusWatch *watch, void *data)  {  	GIOCondition cond = G_IO_HUP | G_IO_ERR;  	GIOChannel *io; @@ -2201,26 +2183,22 @@ static DBusMessage* handle_mgr_device_list_req(DBusMessage *msg, void *data)  {  	DBusMessageIter iter;  	DBusMessageIter array_iter; -	DBusMessage *reply = NULL; +	DBusMessage *reply;  	struct hci_dev_list_req *dl = NULL;  	struct hci_dev_req *dr      = NULL; -	int sk = -1; -	int i; -	const char array_sig[] = MGR_REPLY_DEVICE_LIST_STRUCT_SIGNATURE; +	int i, sk = -1; -	/* Create and bind HCI socket */  	sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);  	if (sk < 0) {  		syslog(LOG_ERR, "Can't open HCI socket: %s (%d)", strerror(errno), errno); -		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno); -		goto failed; +		return bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_OFFSET + errno);  	}  	dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));  	if (!dl) {  		syslog(LOG_ERR, "Can't allocate memory"); -		reply = bluez_new_failure_msg(msg, BLUEZ_EDBUS_NO_MEM); -		goto failed; +		close(sk); +		return bluez_new_failure_msg(msg, BLUEZ_EDBUS_NO_MEM);  	}  	dl->dev_num = HCI_MAX_DEV; @@ -2231,7 +2209,8 @@ static DBusMessage* handle_mgr_device_list_req(DBusMessage *msg, void *data)  		goto failed;  	} -	/* active bluetooth adapter found */ +	dr = dl->dev_req; +  	reply = dbus_message_new_method_return(msg);  	if (reply == NULL) {  		syslog(LOG_ERR, "Out of memory while calling dbus_message_new_method_return"); @@ -2239,92 +2218,54 @@ static DBusMessage* handle_mgr_device_list_req(DBusMessage *msg, void *data)  	}  	dbus_message_iter_init_append(reply, &iter); -	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, array_sig, &array_iter); -	dr = dl->dev_req; + +	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, +				DBUS_TYPE_STRING_AS_STRING, &array_iter);  	for (i = 0; i < dl->dev_num; i++, dr++) { -		char apath[MAX_PATH_LENGTH]; -		char aaddr[18]; -		char *paddr = aaddr; -		char *ppath = apath; -		char *ptype; -		const char *flag; -		DBusMessageIter flag_array_iter, struct_iter; +		char path[MAX_PATH_LENGTH], *path_ptr = path;  		struct hci_dev_info di; -		hci_map *mp; -		mp = dev_flags_map;  		memset(&di, 0 , sizeof(struct hci_dev_info));  		di.dev_id = dr->dev_id;  		if (ioctl(sk, HCIGETDEVINFO, &di) < 0)  			continue; -		snprintf(apath, sizeof(apath), "%s/%s", DEVICE_PATH, di.name); - -		ba2str(&di.bdaddr, aaddr); -		ptype = hci_dtypetostr(di.type); - -		dbus_message_iter_open_container(&array_iter, -				DBUS_TYPE_STRUCT, NULL, &struct_iter); - -		dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &ppath); -		dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &paddr); -		dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &ptype); - -		if (hci_test_bit(HCI_UP, &dr->dev_opt)) -			flag = "UP"; -		else -			flag = "DOWN"; - -		dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING, &flag); +		snprintf(path, sizeof(path), "%s/%s", DEVICE_PATH, di.name); -		dbus_message_iter_open_container(&struct_iter, -					DBUS_TYPE_ARRAY, DBUS_TYPE_STRING_AS_STRING, &flag_array_iter); - -		while (mp->str) { -			if (hci_test_bit(mp->val, &dr->dev_opt)) -				dbus_message_iter_append_basic(&flag_array_iter, DBUS_TYPE_STRING, &mp->str); -			mp++; -		} -		dbus_message_iter_close_container(&struct_iter, &flag_array_iter); -		dbus_message_iter_close_container(&array_iter, &struct_iter); +		dbus_message_iter_append_basic(&array_iter, +						DBUS_TYPE_STRING, &path_ptr);  	}  	dbus_message_iter_close_container(&iter, &array_iter);  failed: -	if (sk >= 0) -		close(sk); +	free(dl); -	if (dl) -		free(dl); +	close(sk);  	return reply;  }  static DBusMessage* handle_mgr_default_device_req(DBusMessage *msg, void *data)  { -	char path[MAX_PATH_LENGTH]; -	char *pptr = path; -	DBusMessage *reply = NULL; +	DBusMessage *reply; +	char path[MAX_PATH_LENGTH], *path_ptr = path; -	if (default_dev < 0) { -		reply = bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV); -		goto failed; -	} +	if (default_dev < 0) +		return bluez_new_failure_msg(msg, BLUEZ_ESYSTEM_ENODEV);  	reply = dbus_message_new_method_return(msg); -	if (reply == NULL) { +	if (!reply) {  		syslog(LOG_ERR, "Out of memory while calling dbus_message_new_method_return"); -		goto failed; +		return reply;  	}  	snprintf(path, sizeof(path), "%s/hci%d", DEVICE_PATH, default_dev); -	dbus_message_append_args(reply, -					DBUS_TYPE_STRING, &pptr, + +	dbus_message_append_args(reply, DBUS_TYPE_STRING, &path_ptr,  					DBUS_TYPE_INVALID); -failed:  	return reply;  } diff --git a/hcid/dbus.h b/hcid/dbus.h index 2e92a3bd..668302c3 100644 --- a/hcid/dbus.h +++ b/hcid/dbus.h @@ -67,25 +67,9 @@  #define MGR_DEVICE_LIST_SIGNATURE		__END_SIG__  #define MGR_DEFAULT_DEVICE_SIGNATURE		__END_SIG__ - -/*FIXME: should it be moved to a internal header file? */ -/* DeviceList Reply: a(devname, addr, type, up/down, a(flags)) - all types strings */ -#define MGR_REPLY_DEVICE_LIST_STRUCT_SIGNATURE	DBUS_STRUCT_BEGIN_CHAR_AS_STRING \ -						DBUS_TYPE_STRING_AS_STRING \ -						DBUS_TYPE_STRING_AS_STRING \ -						DBUS_TYPE_STRING_AS_STRING \ -						DBUS_TYPE_STRING_AS_STRING \ -						DBUS_TYPE_ARRAY_AS_STRING \ -						DBUS_TYPE_STRING_AS_STRING \ -						DBUS_STRUCT_END_CHAR_AS_STRING \ -						__END_SIG__ -  #define MGR_REPLY_DEVICE_LIST_SIGNATURE		DBUS_TYPE_ARRAY_AS_STRING \ -						MGR_REPLY_DEVICE_LIST_STRUCT_SIGNATURE \  						__END_SIG__ - -  /*========================================================================       BlueZ D-Bus Device path definitions "/org/bluez/Device"   *========================================================================*/ @@ -125,7 +109,7 @@  /*FIXME: maybe this section can be moved to a internal header file */  /* Device service signature */  #define DEV_GET_ADDRESS_SIGNATURE			__END_SIG__ -#define DEV_GET_ALIAS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ +#define DEV_GET_ALIAS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__  #define DEV_GET_COMPANY_SIGNATURE			__END_SIG__  #define DEV_GET_DISCOVERABLE_TO_SIGNATURE		__END_SIG__ @@ -136,44 +120,44 @@  #define DEV_GET_REVISION_SIGNATURE			__END_SIG__  #define DEV_GET_VERSION_SIGNATURE			__END_SIG__  #define DEV_IS_CONNECTABLE_SIGNATURE			__END_SIG__ -#define DEV_IS_DISCOVERABLE_SIGNATURE			__END_SIG__	 -#define DEV_SET_ALIAS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ -							DBUS_TYPE_STRING_AS_STRING\ +#define DEV_IS_DISCOVERABLE_SIGNATURE			__END_SIG__ +#define DEV_SET_ALIAS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \ +							DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_SET_CLASS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ -							DBUS_TYPE_STRING_AS_STRING\ +#define DEV_SET_CLASS_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \ +							DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_SET_DISCOVERABLE_TO_SIGNATURE		DBUS_TYPE_UINT32_AS_STRING\ +#define DEV_SET_DISCOVERABLE_TO_SIGNATURE		DBUS_TYPE_UINT32_AS_STRING \  							__END_SIG__ -#define DEV_SET_MODE_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ +#define DEV_SET_MODE_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_SET_NAME_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ +#define DEV_SET_NAME_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__  #define DEV_DISCOVER_SIGNATURE				__END_SIG__  #define DEV_DISCOVER_CACHE_SIGNATURE			__END_SIG__  #define DEV_DISCOVER_CANCEL_SIGNATURE			__END_SIG__ -#define DEV_DISCOVER_SERVICE_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_DISCOVER_SERVICE_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_LAST_SEEN_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ +#define DEV_LAST_SEEN_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_LAST_USED_SIGNATURE				DBUS_TYPE_STRING_AS_STRING\ +#define DEV_LAST_USED_SIGNATURE				DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_REMOTE_ALIAS_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_REMOTE_ALIAS_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_REMOTE_NAME_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_REMOTE_NAME_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_REMOTE_VERSION_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_REMOTE_VERSION_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_CREATE_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_CREATE_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__  #define DEV_LIST_BONDINGS_SIGNATURE			__END_SIG__ -#define DEV_HAS_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_HAS_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_REMOVE_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_REMOVE_BONDING_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_PIN_CODE_LENGTH_SIGNATURE			DBUS_TYPE_STRING_AS_STRING\ +#define DEV_PIN_CODE_LENGTH_SIGNATURE			DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ -#define DEV_ENCRYPTION_KEY_SIZE_SIGNATURE		DBUS_TYPE_STRING_AS_STRING\ +#define DEV_ENCRYPTION_KEY_SIZE_SIGNATURE		DBUS_TYPE_STRING_AS_STRING \  							__END_SIG__ @@ -233,4 +217,3 @@  #define BLUEZ_DBUS_ERR_NO_MEMORY_STR	"No memory"  #endif /* __H_BLUEZ_DBUS_H__ */ -  | 
