[oe-commits] org.oe.dev connman: Connection manager from moblin. Recipe from OM git.

stefan commit oe at amethyst.openembedded.net
Mon Sep 1 18:30:39 UTC 2008


connman: Connection manager from moblin. Recipe from OM git.

Author: stefan at openembedded.org
Branch: org.openembedded.dev
Revision: 0287baabf37e8439fbd696b905d7ab0a4af584a5
ViewMTN: http://monotone.openembedded.org/revision/info/0287baabf37e8439fbd696b905d7ab0a4af584a5
Files:
1
packages/connman
packages/connman/files
packages/connman/connman_git.bb
packages/connman/files/connman
packages/connman/files/connman-build-and-work.patch
mtn:execute
true
Diffs:

#
# mt diff -r0d5cc8d1aa0124d36b96b251c6f95f7e715337ba -r0287baabf37e8439fbd696b905d7ab0a4af584a5
#
#
#
# add_dir "packages/connman"
# 
# add_dir "packages/connman/files"
# 
# add_file "packages/connman/connman_git.bb"
#  content [fe2b617d4df6b1e48a42ee79dee4e69bf3e64b64]
# 
# add_file "packages/connman/files/connman"
#  content [ce5b97e075f3ca3fd83d7714d09894c1cb513759]
# 
# add_file "packages/connman/files/connman-build-and-work.patch"
#  content [f12f1c6066c8489ab6a6f78ac2800091fc532443]
# 
#   set "packages/connman/files/connman"
#  attr "mtn:execute"
# value "true"
#
============================================================
--- packages/connman/connman_git.bb	fe2b617d4df6b1e48a42ee79dee4e69bf3e64b64
+++ packages/connman/connman_git.bb	fe2b617d4df6b1e48a42ee79dee4e69bf3e64b64
@@ -0,0 +1,49 @@
+HOMEPAGE = "http://www.moblin.org/projects/projects_connman.php"
+SUMMARY  = "Moblin Connection Manager"
+PV       = "0.0+git${SRCREV}"
+PR       = "r4"
+S        = "${WORKDIR}/git"
+LICENSE  = "GPL"
+
+DEPENDS  = "libgdbus dbus glib-2.0 hal"
+RDEPENDS = "dhcp-client wpa-supplicant resolvconf"
+
+EXTRA_OECONF += " \
+    ac_cv_path_WPASUPPLICANT=/usr/sbin/wpa_supplicant \
+    ac_cv_path_DHCLIENT=/sbin/dhclient "
+
+SRC_URI  = "git://moblin.org/repos/projects/connman.git;proto=http \
+            file://connman-build-and-work.patch;patch=1 \
+            file://connman "
+
+INITSCRIPT_NAME = "connman"
+INITSCRIPT_PARAMS = "defaults 22"
+
+inherit autotools pkgconfig update-rc.d
+
+do_install_append() {
+    install -m 0755 ${WORKDIR}/connman ${D}${sysconfdir}/init.d/connman
+}
+
+PACKAGES_DYNAMIC = "${PN}-plugin-*"
+PACKAGES += "${PN}-script-dhclient"
+FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \
+            ${sysconfdir} ${sharedstatedir} ${localstatedir} \
+            ${base_bindir}/* ${base_sbindir}/* ${base_libdir}/*.so* ${datadir}/${PN} \
+            ${datadir}/pixmaps ${datadir}/applications \
+            ${datadir}/idl ${datadir}/omf ${datadir}/sounds \
+            ${libdir}/bonobo/servers \
+            ${datadir}/dbus-1/system-services/*"
+FILES_${PN}-script-dhclient += "${libdir}/connman/scripts/dhclient*"
+FILES_${PN}-dbg += "${libdir}/connman/plugins/.debug \
+                    ${libdir}/connman/scripts/.debug"
+
+python populate_packages_prepend() {
+	plugin_dir = bb.data.expand('${libdir}/connman/plugins/', d)
+	plugin_name = bb.data.expand('${PN}-plugin-%s', d)
+	do_split_packages(d, plugin_dir, '^lib(.*).so$', plugin_name, '${PN} plugin for %s', extra_depends='' )
+}
+
+do_stage() {
+    autotools_stage_all
+}
============================================================
--- packages/connman/files/connman	ce5b97e075f3ca3fd83d7714d09894c1cb513759
+++ packages/connman/files/connman	ce5b97e075f3ca3fd83d7714d09894c1cb513759
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+DAEMON=/usr/sbin/connmand
+PIDFILE=/var/run/connmand.pid
+DESC="Connection Manager"
+
+if [ -f /etc/default/connman ] ; then
+	. /etc/default/connman
+fi
+
+set -e
+
+do_start() {
+	connmand 
+}
+
+do_stop() {
+	start-stop-daemon --stop --name connmand --quiet
+}
+
+case "$1" in
+  start)
+	echo "Starting $DESC"
+	do_start
+	;;
+  stop)
+	echo "Stopping $DESC"
+	do_stop
+	;;
+  restart|force-reload)
+	echo "Restarting $DESC"
+	do_stop
+	sleep 1
+	do_start
+	;;
+  *)
+	echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+	exit 1
+	;;
+esac
+
+exit 0
============================================================
--- packages/connman/files/connman-build-and-work.patch	f12f1c6066c8489ab6a6f78ac2800091fc532443
+++ packages/connman/files/connman-build-and-work.patch	f12f1c6066c8489ab6a6f78ac2800091fc532443
@@ -0,0 +1,286 @@
+diff --git a/include/iface.h b/include/iface.h
+index 3530f23..24f0a9a 100644
+--- a/include/iface.h
++++ b/include/iface.h
+@@ -161,7 +161,7 @@ extern void connman_iface_indicate_carrier_off(struct connman_iface *iface);
+ extern void connman_iface_indicate_configured(struct connman_iface *iface);
+ 
+ extern void connman_iface_indicate_station(struct connman_iface *iface,
+-				const char *name, int strength, int security);
++				const char *bssid, const char *name, int strength, int security);
+ 
+ extern int connman_iface_get_ipv4(struct connman_iface *iface,
+ 						struct connman_ipv4 *ipv4);
+diff --git a/plugins/supplicant.c b/plugins/supplicant.c
+index cba93cd..a8a46ed 100644
+--- a/plugins/supplicant.c
++++ b/plugins/supplicant.c
+@@ -66,7 +66,9 @@ static GSList *tasks = NULL;
+ 
+ struct supplicant_ap {
+ 	gchar *identifier;
++	gchar *bssid;
+ 	GByteArray *ssid;
++	guint quality;
+ 	guint capabilities;
+ 	gboolean has_wep;
+ 	gboolean has_wpa;
+@@ -618,6 +620,24 @@ static void extract_ssid(struct supplicant_ap *ap, DBusMessageIter *value)
+ 	ap->identifier = g_strdup((char *) ssid);
+ }
+ 
++static void extract_bssid(struct supplicant_ap *ap, DBusMessageIter *value)
++{
++	DBusMessageIter array;
++	unsigned char *bssid;
++	int bssid_len;
++	char buf[20];
++
++	dbus_message_iter_recurse(value, &array);
++	dbus_message_iter_get_fixed_array(&array, &bssid, &bssid_len);
++	if (bssid_len >= 6) {
++		g_snprintf((char *)buf, sizeof(buf),
++			   "%02x:%02x:%02x:%02x:%02x:%02x",
++			   (int)bssid[0], (int)bssid[1], (int)bssid[2], 
++			   (int)bssid[3], (int)bssid[4], (int)bssid[5]);
++		ap->bssid = g_strdup((char *) buf);
++	}
++}
++
+ static void extract_wpaie(struct supplicant_ap *ap, DBusMessageIter *value)
+ {
+ 	DBusMessageIter array;
+@@ -657,6 +677,16 @@ static void extract_capabilites(struct supplicant_ap *ap,
+ 		ap->has_wep = TRUE;
+ }
+ 
++static void extract_quality(struct supplicant_ap *ap,
++						DBusMessageIter *value)
++{
++	guint quality;
++
++	dbus_message_iter_get_basic(value, &quality);
++
++	ap->quality = quality;
++}
++
+ static int parse_network_properties(struct supplicant_task *task,
+ 							DBusMessage *message)
+ {
+@@ -688,12 +718,16 @@ static int parse_network_properties(struct supplicant_task *task,
+ 
+ 		if (g_str_equal(key, "ssid") == TRUE)
+ 			extract_ssid(ap, &value);
++		else if (g_str_equal(key, "bssid") == TRUE)
++			extract_bssid(ap, &value);
+ 		else if (g_str_equal(key, "wpaie") == TRUE)
+ 			extract_wpaie(ap, &value);
+ 		else if (g_str_equal(key, "rsnie") == TRUE)
+ 			extract_rsnie(ap, &value);
+ 		else if (g_str_equal(key, "capabilities") == TRUE)
+ 			extract_capabilites(ap, &value);
++		else if (g_str_equal(key, "quality") == TRUE)
++			extract_quality(ap, &value);
+ 
+ 		dbus_message_iter_next(&dict);
+ 	}
+@@ -706,7 +740,8 @@ static int parse_network_properties(struct supplicant_task *task,
+ 		security |= 0x04;
+ 
+ 	connman_iface_indicate_station(task->iface,
+-					ap->identifier, 25, security);
++				       ap->bssid, ap->identifier, ap->quality, 
++				       security);
+ 
+ 	g_free(ap);
+ 
+diff --git a/src/iface-inet.c b/src/iface-inet.c
+index 82a1e8c..f780452 100644
+--- a/src/iface-inet.c
++++ b/src/iface-inet.c
+@@ -275,6 +275,10 @@ int __connman_iface_connect(struct connman_iface *iface,
+ 
+ 	iface->flags |= CONNMAN_IFACE_FLAG_RUNNING;
+ 
++	/* This actually makes it do a dhcp request properly when connections
++	 * are estabished - it doesnt seem to otherwise */
++	iface->state = CONNMAN_IFACE_STATE_ENABLED;
++
+ 	return 0;
+ }
+ 
+diff --git a/src/iface.c b/src/iface.c
+index b2fd6d1..c70b25c 100644
+--- a/src/iface.c
++++ b/src/iface.c
+@@ -332,11 +332,13 @@ void connman_iface_indicate_configured(struct connman_iface *iface)
+ 	}
+ }
+ 
+-static void append_station(DBusMessage *reply, const char *name,
++static void append_station(DBusMessage *reply, const char *bssid, const char *name,
+ 						int signal, int security)
+ {
+ 	DBusMessageIter array, dict;
++	const char *wep = "WEP";
+ 	const char *wpa = "WPA";
++	const char *rsn = "RSN";
+ 
+ 	dbus_message_iter_init_append(reply, &array);
+ 
+@@ -345,25 +347,36 @@ static void append_station(DBusMessage *reply, const char *name,
+ 			DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING
+ 			DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict);
+ 
+-	append_entry(&dict, "ESSID", DBUS_TYPE_STRING, &name);
++	if (bssid) append_entry(&dict, "BSSID", DBUS_TYPE_STRING, &bssid);
++	if (name) append_entry(&dict, "ESSID", DBUS_TYPE_STRING, &name);
+ 	append_entry(&dict, "Signal", DBUS_TYPE_UINT16, &signal);
+ 
+-	if (security > 0)
+-		append_entry(&dict, "Security", DBUS_TYPE_STRING, &wpa);
++	if (security > 0) {
++		const char *sec = NULL;
++	   
++		if (security & 0x4)
++			sec = rsn;
++		else if (security & 0x2)
++			sec = wpa;
++		else if (security & 0x1)
++			sec = wep;
++		if (sec)
++			append_entry(&dict, "Security", DBUS_TYPE_STRING, &sec);
++	}
+ 
+ 	dbus_message_iter_close_container(&array, &dict);
+ }
+ 
+ void connman_iface_indicate_station(struct connman_iface *iface,
+-				const char *name, int strength, int security)
++				const char *bssid, const char *name, int strength, int security)
+ {
+ 	DBusMessage *signal;
+-	char *ssid, *passphrase;
++	char *ssid = NULL, *passphrase;
+ 	int len;
+ 
+-	DBG("iface %p security %d name %s", iface, security, name);
++	DBG("iface %p security %d name %s bssid %s", iface, security, name, bssid);
+ 
+-	if (name == NULL || strlen(name) == 0)
++	if (bssid == NULL || strlen(bssid) == 0)
+ 		return;
+ 
+ 	signal = dbus_message_new_signal(iface->path,
+@@ -371,7 +384,7 @@ void connman_iface_indicate_station(struct connman_iface *iface,
+ 	if (signal == NULL)
+ 		return;
+ 
+-	append_station(signal, name, strength, security);
++	append_station(signal, bssid, name, strength, security);
+ 
+ 	dbus_connection_send(connection, signal, NULL);
+ 	dbus_message_unref(signal);
+@@ -386,17 +399,21 @@ void connman_iface_indicate_station(struct connman_iface *iface,
+ 	default:
+ 		break;
+ 	}
+-
+-	len = strlen(name);
+-	ssid = strdup(name);
+-	if (ssid == NULL)
++   
++	passphrase = __connman_iface_find_passphrase(iface, bssid);
++
++	if (!passphrase && name) {
++		len = strlen(name);
++		ssid = strdup(name);
++		/* The D-Link access points return a 0x05 at the end of the SSID */
++		if (len > 0 && ssid[len - 1] == '\05')
++			ssid[len - 1] = '\0';
++	}
++   
++	if (!passphrase && ssid == NULL)
+ 		return;
+-
+-	/* The D-Link access points return a 0x05 at the end of the SSID */
+-	if (ssid[len - 1] == '\05')
+-		ssid[len - 1] = '\0';
+-
+-	passphrase = __connman_iface_find_passphrase(iface, ssid);
++	if (!passphrase)
++		passphrase = __connman_iface_find_passphrase(iface, ssid);
+ 	if (passphrase != NULL) {
+ 		DBG("network %s passphrase %s", ssid, passphrase);
+ 
+@@ -1154,7 +1171,7 @@ static GDBusMethodTable iface_methods[] = {
+ 	{ "GetNetwork",    "",      "a{sv}", get_network    },
+ 	{ "SetNetwork",    "a{sv}", "",      set_network    },
+ 	{ "ListNetworks",  "",      "ao",    list_networks  },
+-	{ "CreateNetwork", "a{av}", "o",     create_network },
++	{ "CreateNetwork", "a{sv}", "o",     create_network },
+ 	{ "RemoveNetwork", "o",     "",      remove_network },
+ 	{ "SelectNetwork", "o",     "",      select_network },
+ 	{ "GetIPv4",       "",      "a{sv}", get_ipv4       },
+@@ -1301,7 +1318,7 @@ static int probe_device(LibHalContext *ctx,
+ 
+ 	conn = libhal_ctx_get_dbus_connection(ctx);
+ 
+-	g_dbus_register_object(conn, iface->path, iface, device_free);
++	g_dbus_register_object(conn, iface->path);
+ 
+ 	interfaces = g_slist_append(interfaces, iface);
+ 
+@@ -1313,7 +1330,7 @@ static int probe_device(LibHalContext *ctx,
+ 
+ 	g_dbus_register_interface(conn, iface->path,
+ 					CONNMAN_IFACE_INTERFACE,
+-					iface_methods, iface_signals, NULL);
++					iface_methods, iface_signals, NULL, iface, device_free);
+ 
+ 	DBG("iface %p identifier %s", iface, iface->identifier);
+ 
+diff --git a/src/manager.c b/src/manager.c
+index 9d14cd7..78b017f 100644
+--- a/src/manager.c
++++ b/src/manager.c
+@@ -218,18 +218,18 @@ int __connman_manager_init(DBusConnection *conn, gboolean compat)
+ 	if (connection == NULL)
+ 		return -1;
+ 
+-	g_dbus_register_object(connection, CONNMAN_MANAGER_PATH, NULL, NULL);
++	g_dbus_register_object(connection, CONNMAN_MANAGER_PATH);
+ 
+ 	g_dbus_register_interface(connection, CONNMAN_MANAGER_PATH,
+ 						CONNMAN_MANAGER_INTERFACE,
+ 						manager_methods,
+-						manager_signals, NULL);
++						manager_signals, NULL, NULL, NULL);
+ 
+ 	if (compat == TRUE) {
+-		g_dbus_register_object(connection, NM_PATH, NULL, NULL);
++		g_dbus_register_object(connection, NM_PATH);
+ 
+ 		g_dbus_register_interface(connection, NM_PATH, NM_INTERFACE,
+-						nm_methods, NULL, NULL);
++						nm_methods, NULL, NULL, NULL, NULL);
+ 
+ 		nm_compat = TRUE;
+ 	}
+diff --git a/src/network.c b/src/network.c
+index 9da8fea..a5ec2b9 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -157,10 +157,10 @@ const char *__connman_iface_add_network(struct connman_iface *iface,
+ 
+ 	networks = g_slist_append(networks, network);
+ 
+-	g_dbus_register_object(connection, path, network, network_free);
++	g_dbus_register_object(connection, path);
+ 
+ 	g_dbus_register_interface(connection, path, CONNMAN_NETWORK_INTERFACE,
+-						network_methods, NULL, NULL);
++						network_methods, NULL, NULL, network, network_free);
+ 
+ 	return path;
+ }






More information about the Openembedded-commits mailing list