Hi,
Unfortunately your patch has all its lines ending in ^M and has hard
line wrappings in places. Also a few nitpicks below. Could you simply
send out the patch with 'git send-email ....' ?
On Fri, 2014-10-24 at 11:46 -0500, David Lechner wrote:
> Bluetooth PAN specifies three different roles for different types of
> network connections, PANU, NAP and GN. ConnMan currently supports NAP
> but ignores the other roles. This patch adds support for the GN and
> PANU roles so that we can connect to devices that don't offer NAP.
>
> In the case that a device provides more than one role, we prefer NAP
> over GN and GN over PANU. ConnMan will only use the most preferred role
> and ignore the others so that we don't have duplicate services in
> ConnMan.
> ---
> plugins/bluetooth.c | 50
> +++++++++++++++++++++++++++++++++-----------------
> 1 file changed, 33 insertions(+), 17 deletions(-)
>
> diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
> index 82217d0..6902dd7 100644
> --- a/plugins/bluetooth.c
> +++ b/plugins/bluetooth.c
> @@ -36,7 +36,9 @@
> #define BLUEZ_SERVICE "org.bluez"
> #define BLUEZ_PATH "/org/bluez"
> +#define BLUETOOTH_PAN_PANU
> "00001115-0000-1000-8000-00805f9b34fb"
> #define BLUETOOTH_PAN_NAP
> "00001116-0000-1000-8000-00805f9b34fb"
> +#define BLUETOOTH_PAN_GN
> "00001117-0000-1000-8000-00805f9b34fb"
> #define BLUETOOTH_ADDR_LEN 6
> @@ -50,6 +52,7 @@ struct bluetooth_pan {
> struct connman_network *network;
> GDBusProxy *btdevice_proxy;
> GDBusProxy *btnetwork_proxy;
> + const char *pan_role;
> };
> static void address2ident(const char *address, char *ident)
> @@ -85,28 +88,36 @@ static bool proxy_get_bool(GDBusProxy *proxy, const
> char *property)
> return value;
> }
> -static bool proxy_get_nap(GDBusProxy *proxy)
> +static const char* proxy_get_role(GDBusProxy *proxy)
> {
> DBusMessageIter iter, value;
> if (!proxy)
> - return false;
> + return NULL;
> if (!g_dbus_proxy_get_property(proxy, "UUIDs", &iter))
> - return false;
> + return NULL;
> dbus_message_iter_recurse(&iter, &value);
> while (dbus_message_iter_get_arg_type(&value) ==
> DBUS_TYPE_STRING) {
> const char *uuid;
> - dbus_message_iter_get_basic(&value, &uuid);
> - if (strcmp(uuid, BLUETOOTH_PAN_NAP) == 0)
> - return true;
> + dbus_message_iter_get_basic(&value, &uuid);
> + /*
> + * Order matters here. If a device offers more than one role,
> + * we prefer NAP, then GN, then PANU.
> + */
> + if (strcmp(uuid, BLUETOOTH_PAN_NAP) == 0)
Here and below we'd prefer to use !strcmp(...
> + return "nap";
> + if (strcmp(uuid, BLUETOOTH_PAN_GN) == 0)
> + return "gn";
> + if (strcmp(uuid, BLUETOOTH_PAN_PANU) == 0)
> + return "panu";
> dbus_message_iter_next(&value);
> }
> - return false;
> + return NULL;
> }
> static int bluetooth_pan_probe(struct connman_network *network)
> @@ -225,9 +236,11 @@ static void pan_connect_cb(DBusMessage *message,
> void *user_data)
> static void pan_connect_append(DBusMessageIter *iter,
> void *user_data)
> {
> - const char *role = BLUETOOTH_PAN_NAP;
> + const char *path = user_data;
> + struct bluetooth_pan *pan;
> - dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &role);
> + pan = g_hash_table_lookup(networks, path);
> + dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &pan->pan_role);
> }
> static int bluetooth_pan_connect(struct connman_network *network)
> @@ -322,8 +335,10 @@ static void btnetwork_property_change(GDBusProxy
> *proxy, const char *name,
> static void pan_create_nap(struct bluetooth_pan *pan)
> {
> struct connman_device *device;
> + const char* role;
> - if (!proxy_get_nap(pan->btdevice_proxy)) {
> + role = proxy_get_role(pan->btdevice_proxy);
> + if (!role) {
> pan_remove_nap(pan);
> return;
> }
> @@ -366,6 +381,7 @@ static void pan_create_nap(struct bluetooth_pan *pan)
> connman_network_set_group(pan->network, ident);
> }
> + pan->pan_role = role;
> connman_device_add_network(device, pan->network);
> if (pan_connect(pan, NULL))
> @@ -376,7 +392,7 @@ static void btdevice_property_change(GDBusProxy
> *proxy, const char *name,
> DBusMessageIter *iter, void *user_data)
> {
> struct bluetooth_pan *pan;
> - bool pan_nap = false;
> + const char* pan_role = NULL;
> if (strcmp(name, "UUIDs") != 0)
same here...
> return;
> @@ -387,12 +403,12 @@ static void btdevice_property_change(GDBusProxy
> *proxy, const char *name,
> if (pan->network &&
> connman_network_get_device(pan->network))
> - pan_nap = true;
> + pan_role = pan->pan_role;
> - DBG("network %p network nap %d proxy nap %d", pan->network, pan_nap,
> - proxy_get_nap(pan->btdevice_proxy));
> + DBG("network %p network role %s proxy role %s", pan->network, pan_role,
> + proxy_get_role(pan->btdevice_proxy));
> - if (proxy_get_nap(pan->btdevice_proxy) == pan_nap)
> + if (strcmp(proxy_get_role(pan->btdevice_proxy), pan_role) == 0)
> return;
> pan_create_nap(pan);
> @@ -447,7 +463,7 @@ static void pan_create(GDBusProxy *network_proxy)
> g_dbus_proxy_set_property_watch(pan->btdevice_proxy,
> btdevice_property_change, NULL);
> - DBG("pan %p %s nap %d", pan, path, proxy_get_nap(pan->btdevice_proxy));
> + DBG("pan %p %s role %s", pan, path,
> proxy_get_role(pan->btdevice_proxy));
> pan_create_nap(pan);
> }
> @@ -756,7 +772,7 @@ static void device_create(GDBusProxy *proxy)
> powered = proxy_get_bool(proxy, "Powered");
> connman_device_set_powered(device, powered);
> - if (proxy_get_nap(proxy) && !bluetooth_tethering)
> + if (proxy_get_role(proxy) != NULL && !bluetooth_tethering)
and here just 'if (proxy_get_role(proxy) && ...'
> tethering_create(path, NULL, NULL, false);
> }
> -- 1.9.1
The last line is also mysteriously off, use git send-email.
Cheers,
Patrik
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman