summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlok Barsode <alok.barsode@azingo.com>2008-09-12 22:06:36 +0530
committerAlok Barsode <alok.barsode@azingo.com>2008-09-12 22:06:36 +0530
commitc3b7fe38db6db71b77ad317d1097c6dc2b99ea34 (patch)
treecaeb6d4e7807883bc18b31ca234ca811f7abe1a1
parent26e1749b1e18fd55ce32e84654e7a9123630bedf (diff)
Storing adapter address as bdaddr_t instead of string.
-rw-r--r--src/adapter.c107
1 files changed, 55 insertions, 52 deletions
diff --git a/src/adapter.c b/src/adapter.c
index 0f64ae59..a635371e 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -97,7 +97,7 @@ struct btd_adapter {
uint16_t dev_id;
int up;
char *path; /* adapter object path */
- char address[18]; /* adapter Bluetooth Address */
+ bdaddr_t bdaddr; /* adapter Bluetooth Address */
guint discov_timeout_id; /* discoverable timeout id */
uint32_t discov_timeout; /* discoverable time(msec) */
uint8_t scan_mode; /* scan mode: SCAN_DISABLED, SCAN_PAGE, SCAN_INQUIRY */
@@ -489,7 +489,6 @@ static DBusMessage *set_mode(DBusConnection *conn, DBusMessage *msg,
struct btd_adapter *adapter = data;
uint8_t scan_enable;
uint8_t current_scan = adapter->scan_mode;
- bdaddr_t local;
gboolean limited;
int err, dd;
const char *mode;
@@ -592,8 +591,7 @@ static DBusMessage *set_mode(DBusConnection *conn, DBusMessage *msg,
}
}
done:
- str2ba(adapter->address, &local);
- write_device_mode(&local, mode);
+ write_device_mode(&adapter->bdaddr, mode);
hci_close_dev(dd);
@@ -754,11 +752,13 @@ static DBusMessage *confirm_mode(DBusConnection *conn, DBusMessage *msg,
struct session_req *req;
int ret;
uint8_t umode;
+ char addr[18];
if (!adapter->agent)
return dbus_message_new_method_return(msg);
- umode = str2mode(adapter->address, mode);
+ ba2str(&adapter->bdaddr, addr);
+ umode = str2mode(addr, mode);
req = create_session(adapter, conn, msg, umode, NULL);
@@ -778,7 +778,6 @@ static DBusMessage *set_discoverable_timeout(DBusConnection *conn,
void *data)
{
struct btd_adapter *adapter = data;
- bdaddr_t bdaddr;
const char *path;
if (adapter->discov_timeout_id) {
@@ -791,8 +790,7 @@ static DBusMessage *set_discoverable_timeout(DBusConnection *conn,
adapter->discov_timeout = timeout;
- str2ba(adapter->address, &bdaddr);
- write_discoverable_timeout(&bdaddr, timeout);
+ write_discoverable_timeout(&adapter->bdaddr, timeout);
path = dbus_message_get_path(msg);
@@ -825,11 +823,8 @@ static int adapter_set_name(struct btd_adapter *adapter, const char *name)
{
struct hci_dev *dev = &adapter->dev;
int dd, err;
- bdaddr_t bdaddr;
-
- str2ba(adapter->address, &bdaddr);
- write_local_name(&bdaddr, (char *) name);
+ write_local_name(&adapter->bdaddr, (char *) name);
if (!adapter->up)
return 0;
@@ -942,20 +937,20 @@ static DBusMessage *remove_bonding(DBusConnection *conn, DBusMessage *msg,
struct btd_adapter *adapter = data;
struct btd_device *device;
char filename[PATH_MAX + 1];
- char *str;
- bdaddr_t src, dst;
+ char *str, srcaddr[18];
+ bdaddr_t dst;
GSList *l;
int dev, err;
gboolean paired;
- str2ba(adapter->address, &src);
str2ba(address, &dst);
+ ba2str(&adapter->bdaddr, srcaddr);
dev = hci_open_dev(adapter->dev_id);
if (dev < 0 && msg)
return no_such_adapter(msg);
- create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
+ create_name(filename, PATH_MAX, STORAGEDIR, srcaddr,
"linkkeys");
/* textfile_del doesn't return an error when the key is not found */
@@ -1026,19 +1021,18 @@ done:
void adapter_remove_device(DBusConnection *conn, struct btd_adapter *adapter,
struct btd_device *device)
{
- bdaddr_t src, dst;
+ bdaddr_t dst;
const gchar *dev_path = device_get_path(device);
struct agent *agent;
- char dst_addr[18];
+ char dstaddr[18];
device_get_address(device, &dst);
- ba2str(&dst, dst_addr);
+ ba2str(&dst, dstaddr);
- str2ba(adapter->address, &src);
- delete_entry(&src, "profiles", dst_addr);
+ delete_entry(&adapter->bdaddr, "profiles", dstaddr);
if (!device_is_temporary(device)) {
- remove_bonding(conn, NULL, dst_addr, adapter);
+ remove_bonding(conn, NULL, dstaddr, adapter);
g_dbus_emit_signal(conn, adapter->path,
ADAPTER_INTERFACE,
@@ -1286,14 +1280,14 @@ static DBusMessage *create_bonding(DBusConnection *conn, DBusMessage *msg,
uint8_t capability, void *data)
{
char filename[PATH_MAX + 1];
- char *str;
+ char *str, srcaddr[18];
struct btd_adapter *adapter = data;
struct bonding_request_info *bonding;
- bdaddr_t src, dst;
+ bdaddr_t dst;
int sk;
str2ba(address, &dst);
- str2ba(adapter->address, &src);
+ ba2str(&adapter->bdaddr, srcaddr);
/* check if there is a pending discover: requested by D-Bus/non clients */
if (adapter->state & STD_INQUIRY)
@@ -1308,7 +1302,7 @@ static DBusMessage *create_bonding(DBusConnection *conn, DBusMessage *msg,
return in_progress(msg, "Bonding in progress");
/* check if a link key already exists */
- create_name(filename, PATH_MAX, STORAGEDIR, adapter->address,
+ create_name(filename, PATH_MAX, STORAGEDIR, srcaddr,
"linkkeys");
str = textfile_caseget(filename, address);
@@ -1319,7 +1313,7 @@ static DBusMessage *create_bonding(DBusConnection *conn, DBusMessage *msg,
"Bonding already exists");
}
- sk = l2raw_connect(&src, &dst);
+ sk = l2raw_connect(&adapter->bdaddr, &dst);
if (sk < 0)
return g_dbus_create_error(msg,
ERROR_INTERFACE ".ConnectionAttemptFailed",
@@ -1518,11 +1512,12 @@ static DBusMessage *get_properties(DBusConnection *conn,
DBusMessage *reply;
DBusMessageIter iter;
DBusMessageIter dict;
- bdaddr_t ba;
- char str[249];
+ char str[249], srcaddr[18];
gboolean discov_active;
- if (check_address(adapter->address) < 0)
+ ba2str(&adapter->bdaddr, srcaddr);
+
+ if (check_address(srcaddr) < 0)
return adapter_not_ready(msg);
reply = dbus_message_new_method_return(msg);
@@ -1537,16 +1532,15 @@ static DBusMessage *get_properties(DBusConnection *conn,
DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
/* Address */
- property = adapter->address;
+ property = srcaddr;
dbus_message_iter_append_dict_entry(&dict, "Address",
DBUS_TYPE_STRING, &property);
/* Name */
memset(str, 0, sizeof(str));
property = str;
- str2ba(adapter->address, &ba);
- if (!read_local_name(&ba, str))
+ if (!read_local_name(&adapter->bdaddr, str))
dbus_message_iter_append_dict_entry(&dict, "Name",
DBUS_TYPE_STRING, &property);
@@ -1581,6 +1575,9 @@ static DBusMessage *set_property(DBusConnection *conn,
DBusMessageIter iter;
DBusMessageIter sub;
const char *property;
+ char srcaddr[18];
+
+ ba2str(&adapter->bdaddr, srcaddr);
if (!dbus_message_iter_init(msg, &iter))
return invalid_args(msg);
@@ -1619,7 +1616,7 @@ static DBusMessage *set_property(DBusConnection *conn,
dbus_message_iter_get_basic(&sub, &mode);
- adapter->global_mode = str2mode(adapter->address, mode);
+ adapter->global_mode = str2mode(srcaddr, mode);
if (adapter->global_mode == adapter->mode)
return dbus_message_new_method_return(msg);
@@ -1627,7 +1624,7 @@ static DBusMessage *set_property(DBusConnection *conn,
if (adapter->mode_sessions && adapter->global_mode < adapter->mode)
return confirm_mode(conn, msg, mode, data);
- return set_mode(conn, msg, str2mode(adapter->address, mode),
+ return set_mode(conn, msg, str2mode(srcaddr, mode),
data);
}
@@ -1642,12 +1639,15 @@ static DBusMessage *request_mode(DBusConnection *conn,
struct session_req *req;
uint8_t new_mode;
int ret;
+ char srcaddr[18];
+
+ ba2str(&adapter->bdaddr, srcaddr);
if (!dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &mode,
DBUS_TYPE_INVALID))
return invalid_args(msg);
- new_mode = str2mode(adapter->address, mode);
+ new_mode = str2mode(srcaddr, mode);
if (new_mode != MODE_CONNECTABLE && new_mode != MODE_DISCOVERABLE)
return invalid_args(msg);
@@ -2056,7 +2056,6 @@ static int adapter_setup(struct btd_adapter *adapter, int dd)
struct hci_dev *dev = &adapter->dev;
uint8_t events[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00 };
uint8_t inqmode;
- bdaddr_t bdaddr;
int err;
char name[249];
@@ -2092,8 +2091,7 @@ static int adapter_setup(struct btd_adapter *adapter, int dd)
sizeof(events), events);
}
- str2ba(adapter->address, &bdaddr);
- if (read_local_name(&bdaddr, name) == 0) {
+ if (read_local_name(&adapter->bdaddr, name) == 0) {
memcpy(dev->name, name, 248);
hci_write_local_name(dd, name, 5000);
}
@@ -2163,10 +2161,11 @@ static void create_stored_device_from_profiles(char *key, char *value,
struct btd_adapter *adapter = user_data;
GSList *uuids = bt_string2list(value);
struct btd_device *device;
- const gchar *src;
struct record_list rec_list;
bdaddr_t dst;
- char dst_addr[18];
+ char srcaddr[18], dstaddr[18];
+
+ ba2str(&adapter->bdaddr, srcaddr);
if (g_slist_find_custom(adapter->devices,
key, (GCompareFunc) device_address_cmp))
@@ -2180,13 +2179,12 @@ static void create_stored_device_from_profiles(char *key, char *value,
adapter->devices = g_slist_append(adapter->devices, device);
device_get_address(device, &dst);
- ba2str(&dst, dst_addr);
+ ba2str(&dst, dstaddr);
- src = adapter->address;
- rec_list.addr = dst_addr;
+ rec_list.addr = dstaddr;
rec_list.recs = NULL;
- create_name(filename, PATH_MAX, STORAGEDIR, src, "sdp");
+ create_name(filename, PATH_MAX, STORAGEDIR, srcaddr, "sdp");
textfile_foreach(filename, create_stored_records_from_keys, &rec_list);
device_probe_drivers(device, uuids, rec_list.recs);
@@ -2217,11 +2215,14 @@ static void create_stored_device_from_linkkeys(char *key, char *value,
static void load_devices(struct btd_adapter *adapter)
{
char filename[PATH_MAX + 1];
+ char srcaddr[18];
+
+ ba2str(&adapter->bdaddr, srcaddr);
- create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "profiles");
+ create_name(filename, PATH_MAX, STORAGEDIR, srcaddr, "profiles");
textfile_foreach(filename, create_stored_device_from_profiles, adapter);
- create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "linkkeys");
+ create_name(filename, PATH_MAX, STORAGEDIR, srcaddr, "linkkeys");
textfile_foreach(filename, create_stored_device_from_linkkeys, adapter);
}
@@ -2252,15 +2253,17 @@ static void adapter_up(struct btd_adapter *adapter, int dd)
struct hci_conn_list_req *cl = NULL;
struct hci_conn_info *ci;
const char *pmode;
- char mode[14];
+ char mode[14], srcaddr[18];
int i;
+ ba2str(&adapter->bdaddr, srcaddr);
+
adapter->up = 1;
- adapter->discov_timeout = get_discoverable_timeout(adapter->address);
+ adapter->discov_timeout = get_discoverable_timeout(srcaddr);
adapter->state = DISCOVER_TYPE_NONE;
/* Set scan mode */
- if (read_device_mode(adapter->address, mode, sizeof(mode)) == 0) {
+ if (read_device_mode(srcaddr, mode, sizeof(mode)) == 0) {
if (!strcmp(mode, "off") && main_opts.offmode == HCID_OFFMODE_NOSCAN) {
adapter->mode = MODE_OFF;
adapter->scan_mode= SCAN_DISABLED;
@@ -2350,7 +2353,7 @@ int adapter_start(struct btd_adapter *adapter)
return err;
}
- ba2str(&di.bdaddr, adapter->address);
+ bacpy(&adapter->bdaddr, &di.bdaddr);
memcpy(dev->features, di.features, 8);
dd = hci_open_dev(adapter->dev_id);
@@ -2674,7 +2677,7 @@ const gchar *adapter_get_path(struct btd_adapter *adapter)
void adapter_get_address(struct btd_adapter *adapter, bdaddr_t *bdaddr)
{
- str2ba(adapter->address, bdaddr);
+ bacpy(bdaddr, &adapter->bdaddr);
}
static gboolean discov_timeout_handler(void *data)