Skip to contentSkip to conversation

Proposal: patch for pand

Bluez-devel Olivier Dole 2 participants 4 messages Nov 2, 2006 – Feb 26, 2007 Bluetooth drivers

lore
Share & tools
lore
#0 lore raw

Hi everyone,

For my work I need a similar mechanism to "devup" script in pand when a PAN disconnection occurs.
That's why I've done the following patch (see attachment for source code) which allows PAN daemon to run a "devdown" script either when a disconnection is spotted i.e. remote device closes the connection or when you explicitly do the disconnection. To use it, simply add the following option to your command line:
pand --options --devdown /path/to/devdown-script
or
pand -options -o /path/to/devdown-script
or you can also read the pand man page ;)
The behaviour is the same as for "devup" script. I mean when the script is run the following arguments are supplied to the script:
$1 <-> device interface e.g. "bnep0"
$2 <-> bluetooth address of the disconnected device e.g. "00:45:78:AE:B4:01"
and of course your script must have the correct permissions to run.

Any feedback about this patch is of course welcome ;) Hope you will find this patch usefull.

Regards,
Olivier DOLE

main.c +83 -53
diff -Naur pand.orig/main.c pand.new/main.c
@@ -73,6 +73,7 @@
 static char netdev[16] = "bnep%d";
 static char *pidfile = NULL;
 static char *devupcmd = NULL;
+static char *devdowncmd = NULL;
 
 static bdaddr_t src_addr = *BDADDR_ANY;
 static int src_dev = -1;
@@ -89,15 +90,22 @@
 	KILL
 } modes;
 
-static void run_devup(char *dev, char *dst, int sk, int nsk)
+struct script_arg {
+	char	dev[20];
+	char	dst[20];
+	int		sk;
+	int		nsk;
+};
+	
+static void run_script(char *script, char *dev, char *dst, int sk, int nsk)
 {
 	char *argv[4];
 	struct sigaction sa;
 
-	if (!devupcmd)
+	if (!script)
 		return;
-
-	if (access(devupcmd, R_OK | X_OK))
+		
+	if (access(script, R_OK | X_OK))
 		return;
 
 	if (fork())
@@ -114,16 +122,57 @@
 	sigaction(SIGCHLD, &sa, NULL);
 	sigaction(SIGPIPE, &sa, NULL);
 
-	argv[0] = devupcmd;
+	argv[0] = script;
 	argv[1] = dev;
 	argv[2] = dst;
 	argv[3] = NULL;
 
-	execv(devupcmd, argv);
+	execv(script, argv);
 
 	exit(1);
 }
 
+/* Wait for disconnect or error condition on the socket */
+static int w4_hup(int sk, struct script_arg *down_cmd)
+{
+	struct pollfd pf;
+	sigset_t sigs;
+	int n;
+
+	sigfillset(&sigs);
+	sigdelset(&sigs, SIGCHLD);
+	sigdelset(&sigs, SIGPIPE);
+	sigdelset(&sigs, SIGTERM);
+	sigdelset(&sigs, SIGINT);
+	sigdelset(&sigs, SIGHUP);
+
+	while (!terminate) {
+		pf.fd = sk;
+		pf.events = POLLERR | POLLHUP;
+		n = ppoll(&pf, 1, NULL, &sigs);
+		if (n < 0) {
+			if (errno == EINTR || errno == EAGAIN)
+				continue;
+			syslog(LOG_ERR, "Poll failed. %s(%d)",
+						strerror(errno), errno);
+			return 1;
+		}
+
+		if (n) {
+			int err = 0;
+			socklen_t olen = sizeof(err);
+			getsockopt(sk, SOL_SOCKET, SO_ERROR, &err, &olen);
+			syslog(LOG_INFO, "%s disconnected%s%s", netdev,
+				err ? " : " : "", err ? strerror(err) : "");
+			if (down_cmd) 
+				run_script(devdowncmd, down_cmd->dev, down_cmd->dst, down_cmd->sk, down_cmd->nsk);
+			close(sk);
+			return 0;
+		}
+	}
+	return 0;
+}
+
 static int do_listen(void)
 {
 	struct l2cap_options l2o;
@@ -207,12 +256,21 @@
 
 		if (!bnep_accept_connection(nsk, role, devname)) {
 			char str[40];
+			struct script_arg down_cmd;
+
 			ba2str(&l2a.l2_bdaddr, str);
 
 			syslog(LOG_INFO, "New connection from %s %s",
-								str, devname);
+								str, netdev);
 
-			run_devup(devname, str, sk, nsk);
+			run_script(devupcmd, devname, str, sk, nsk);
+	
+			memset(&down_cmd, 0, sizeof(struct script_arg));
+			strncpy(down_cmd.dev, devname, strlen(devname) + 1);
+			strncpy(down_cmd.dst, str, strlen(str) + 1);
+			down_cmd.sk = sk;
+			down_cmd.nsk = nsk;
+			w4_hup(nsk, &down_cmd);
 		} else {
 			syslog(LOG_ERR, "Connection failed. %s(%d)",
 						strerror(errno), errno);
@@ -227,46 +285,6 @@
 	return 0;
 }
 
-/* Wait for disconnect or error condition on the socket */
-static int w4_hup(int sk)
-{
-	struct pollfd pf;
-	sigset_t sigs;
-	int n;
-
-	sigfillset(&sigs);
-	sigdelset(&sigs, SIGCHLD);
-	sigdelset(&sigs, SIGPIPE);
-	sigdelset(&sigs, SIGTERM);
-	sigdelset(&sigs, SIGINT);
-	sigdelset(&sigs, SIGHUP);
-
-	while (!terminate) {
-		pf.fd = sk;
-		pf.events = POLLERR | POLLHUP;
-		n = ppoll(&pf, 1, NULL, &sigs);
-		if (n < 0) {
-			if (errno == EINTR || errno == EAGAIN)
-				continue;
-			syslog(LOG_ERR, "Poll failed. %s(%d)",
-						strerror(errno), errno);
-			return 1;
-		}
-
-		if (n) {
-			int err = 0;
-			socklen_t olen = sizeof(err);
-			getsockopt(sk, SOL_SOCKET, SO_ERROR, &err, &olen);
-			syslog(LOG_INFO, "%s disconnected%s%s", netdev,
-				err ? " : " : "", err ? strerror(err) : "");
-
-			close(sk);
-			return 0;
-		}
-	}
-	return 0;
-}
-
 /* Connect and initiate BNEP session
  * Returns:
  *   -1 - critical error (exit persist mode)
@@ -279,6 +297,7 @@
 	struct sockaddr_l2 l2a;
 	socklen_t olen;
 	int sk, r = 0;
+	struct script_arg down_cmd;
 
 	syslog(LOG_INFO, "Connecting to %s", dst);
 
@@ -314,10 +333,15 @@
 
 		syslog(LOG_INFO, "%s connected", netdev);
 
-		run_devup(netdev, dst, sk, -1);
+		run_script(devupcmd, netdev, dst, sk, -1);
 
-		if (persist) {
-			w4_hup(sk);
+		if (persist || devdowncmd) {
+				memset(&down_cmd, 0, sizeof(struct script_arg));
+				strncpy(down_cmd.dev, netdev, strlen(netdev) + 1);
+				strncpy(down_cmd.dst, dst, strlen(dst) + 1);
+				down_cmd.sk = sk;
+				down_cmd.nsk = -1;
+				w4_hup(sk, &down_cmd);
 
 			if (terminate && cleanup) {
 				syslog(LOG_INFO, "Disconnecting from %s.", dst);
@@ -525,11 +549,12 @@
 	{ "cache",    0, 0, 'C' },
 	{ "pidfile",  1, 0, 'P' },
 	{ "devup",    1, 0, 'u' },
+	{ "devdown",  1, 0, 'o' },
 	{ "autozap",  0, 0, 'z' },
 	{ 0, 0, 0, 0 }
 };
 
-static char main_sopts[] = "hsc:k:Kr:d:e:i:lnp::DQ::AESMC::P:u:z";
+static char main_sopts[] = "hsc:k:Kr:d:e:i:lnp::DQ::AESMC::P:u:o:z";
 
 static char main_help[] = 
 	"Bluetooth PAN daemon version " VERSION " \n"
@@ -556,7 +581,8 @@
 	"\t--persist -p[interval]    Persist mode\n"
 	"\t--cache -C[valid]         Cache addresses\n"
 	"\t--pidfile -P <pidfile>    Create PID file\n"
-	"\t--devup -u <script>       Script to run when interface comes up\n";
+	"\t--devup -u <script>       Script to run when interface comes up\n"
+	"\t--devdown -o <script>	 Script to run when interface comes down\n";
 
 int main(int argc, char *argv[])
 {
@@ -661,6 +687,10 @@
 			devupcmd = strdup(optarg);
 			break;
 
+		case 'o':
+			devdowncmd = strdup(optarg);
+			break;
+
 		case 'z':
 			cleanup = 1;
 			break;
.main.c.swp +70 -0

71 lines not on this page · raw message

pand.1 +3 -0
diff -Naur pand.orig/pand.1 pand.new/pand.1
@@ -66,6 +66,9 @@
 \fB\-\-devup\fR \fB\-u <script>\fR
 Script to run when interface comes up
 .TP
+\fB\-\-devdown\fR \fB\-o <script>\fR
+Script to run when interface comes down. The script is executed with \fIdevice\fR \fIdestination\fR as arguments.
+.TP
 \fB\-\-autozap\fR \fB\-z\fR
 Disconnect automatically on exit
 

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#1 lore raw

Sorry tiny error in my patch... a vim swap file was included. Sorry for this mistake :p
so Here is a cleaner patch.

Regards,
Olivier DOLE

Quoted 23 lines · Olivier Dole

Hi everyone,

For my work I need a similar mechanism to "devup" script in pand when a PAN disconnection occurs.
That's why I've done the following patch (see attachment for source code) which allows PAN daemon to run a "devdown" script either when a disconnection is spotted i.e. remote device closes the connection or when you explicitly do the disconnection. To use it, simply add the following option to your command line:
pand --options --devdown /path/to/devdown-script
or
pand -options -o /path/to/devdown-script
or you can also read the pand man page ;)
The behaviour is the same as for "devup" script. I mean when the script is run the following arguments are supplied to the script:
$1 <-> device interface e.g. "bnep0"
$2 <-> bluetooth address of the disconnected device e.g. "00:45:78:AE:B4:01"
and of course your script must have the correct permissions to run.

Any feedback about this patch is of course welcome ;) Hope you will find this patch usefull.

Quoted 8 lines

Regards,
Olivier DOLE
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Bluez-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bluez-devel

main.c +83 -53
diff -Naur pand.orig/main.c pand.new/main.c
@@ -73,6 +73,7 @@
 static char netdev[16] = "bnep%d";
 static char *pidfile = NULL;
 static char *devupcmd = NULL;
+static char *devdowncmd = NULL;
 
 static bdaddr_t src_addr = *BDADDR_ANY;
 static int src_dev = -1;
@@ -89,15 +90,22 @@
 	KILL
 } modes;
 
-static void run_devup(char *dev, char *dst, int sk, int nsk)
+struct script_arg {
+	char	dev[20];
+	char	dst[20];
+	int		sk;
+	int		nsk;
+};
+	
+static void run_script(char *script, char *dev, char *dst, int sk, int nsk)
 {
 	char *argv[4];
 	struct sigaction sa;
 
-	if (!devupcmd)
+	if (!script)
 		return;
-
-	if (access(devupcmd, R_OK | X_OK))
+		
+	if (access(script, R_OK | X_OK))
 		return;
 
 	if (fork())
@@ -114,16 +122,57 @@
 	sigaction(SIGCHLD, &sa, NULL);
 	sigaction(SIGPIPE, &sa, NULL);
 
-	argv[0] = devupcmd;
+	argv[0] = script;
 	argv[1] = dev;
 	argv[2] = dst;
 	argv[3] = NULL;
 
-	execv(devupcmd, argv);
+	execv(script, argv);
 
 	exit(1);
 }
 
+/* Wait for disconnect or error condition on the socket */
+static int w4_hup(int sk, struct script_arg *down_cmd)
+{
+	struct pollfd pf;
+	sigset_t sigs;
+	int n;
+
+	sigfillset(&sigs);
+	sigdelset(&sigs, SIGCHLD);
+	sigdelset(&sigs, SIGPIPE);
+	sigdelset(&sigs, SIGTERM);
+	sigdelset(&sigs, SIGINT);
+	sigdelset(&sigs, SIGHUP);
+
+	while (!terminate) {
+		pf.fd = sk;
+		pf.events = POLLERR | POLLHUP;
+		n = ppoll(&pf, 1, NULL, &sigs);
+		if (n < 0) {
+			if (errno == EINTR || errno == EAGAIN)
+				continue;
+			syslog(LOG_ERR, "Poll failed. %s(%d)",
+						strerror(errno), errno);
+			return 1;
+		}
+
+		if (n) {
+			int err = 0;
+			socklen_t olen = sizeof(err);
+			getsockopt(sk, SOL_SOCKET, SO_ERROR, &err, &olen);
+			syslog(LOG_INFO, "%s disconnected%s%s", netdev,
+				err ? " : " : "", err ? strerror(err) : "");
+			if (down_cmd) 
+				run_script(devdowncmd, down_cmd->dev, down_cmd->dst, down_cmd->sk, down_cmd->nsk);
+			close(sk);
+			return 0;
+		}
+	}
+	return 0;
+}
+
 static int do_listen(void)
 {
 	struct l2cap_options l2o;
@@ -207,12 +256,21 @@
 
 		if (!bnep_accept_connection(nsk, role, devname)) {
 			char str[40];
+			struct script_arg down_cmd;
+
 			ba2str(&l2a.l2_bdaddr, str);
 
 			syslog(LOG_INFO, "New connection from %s %s",
-								str, devname);
+								str, netdev);
 
-			run_devup(devname, str, sk, nsk);
+			run_script(devupcmd, devname, str, sk, nsk);
+	
+			memset(&down_cmd, 0, sizeof(struct script_arg));
+			strncpy(down_cmd.dev, devname, strlen(devname) + 1);
+			strncpy(down_cmd.dst, str, strlen(str) + 1);
+			down_cmd.sk = sk;
+			down_cmd.nsk = nsk;
+			w4_hup(nsk, &down_cmd);
 		} else {
 			syslog(LOG_ERR, "Connection failed. %s(%d)",
 						strerror(errno), errno);
@@ -227,46 +285,6 @@
 	return 0;
 }
 
-/* Wait for disconnect or error condition on the socket */
-static int w4_hup(int sk)
-{
-	struct pollfd pf;
-	sigset_t sigs;
-	int n;
-
-	sigfillset(&sigs);
-	sigdelset(&sigs, SIGCHLD);
-	sigdelset(&sigs, SIGPIPE);
-	sigdelset(&sigs, SIGTERM);
-	sigdelset(&sigs, SIGINT);
-	sigdelset(&sigs, SIGHUP);
-
-	while (!terminate) {
-		pf.fd = sk;
-		pf.events = POLLERR | POLLHUP;
-		n = ppoll(&pf, 1, NULL, &sigs);
-		if (n < 0) {
-			if (errno == EINTR || errno == EAGAIN)
-				continue;
-			syslog(LOG_ERR, "Poll failed. %s(%d)",
-						strerror(errno), errno);
-			return 1;
-		}
-
-		if (n) {
-			int err = 0;
-			socklen_t olen = sizeof(err);
-			getsockopt(sk, SOL_SOCKET, SO_ERROR, &err, &olen);
-			syslog(LOG_INFO, "%s disconnected%s%s", netdev,
-				err ? " : " : "", err ? strerror(err) : "");
-
-			close(sk);
-			return 0;
-		}
-	}
-	return 0;
-}
-
 /* Connect and initiate BNEP session
  * Returns:
  *   -1 - critical error (exit persist mode)
@@ -279,6 +297,7 @@
 	struct sockaddr_l2 l2a;
 	socklen_t olen;
 	int sk, r = 0;
+	struct script_arg down_cmd;
 
 	syslog(LOG_INFO, "Connecting to %s", dst);
 
@@ -314,10 +333,15 @@
 
 		syslog(LOG_INFO, "%s connected", netdev);
 
-		run_devup(netdev, dst, sk, -1);
+		run_script(devupcmd, netdev, dst, sk, -1);
 
-		if (persist) {
-			w4_hup(sk);
+		if (persist || devdowncmd) {
+				memset(&down_cmd, 0, sizeof(struct script_arg));
+				strncpy(down_cmd.dev, netdev, strlen(netdev) + 1);
+				strncpy(down_cmd.dst, dst, strlen(dst) + 1);
+				down_cmd.sk = sk;
+				down_cmd.nsk = -1;
+				w4_hup(sk, &down_cmd);
 
 			if (terminate && cleanup) {
 				syslog(LOG_INFO, "Disconnecting from %s.", dst);
@@ -525,11 +549,12 @@
 	{ "cache",    0, 0, 'C' },
 	{ "pidfile",  1, 0, 'P' },
 	{ "devup",    1, 0, 'u' },
+	{ "devdown",  1, 0, 'o' },
 	{ "autozap",  0, 0, 'z' },
 	{ 0, 0, 0, 0 }
 };
 
-static char main_sopts[] = "hsc:k:Kr:d:e:i:lnp::DQ::AESMC::P:u:z";
+static char main_sopts[] = "hsc:k:Kr:d:e:i:lnp::DQ::AESMC::P:u:o:z";
 
 static char main_help[] = 
 	"Bluetooth PAN daemon version " VERSION " \n"
@@ -556,7 +581,8 @@
 	"\t--persist -p[interval]    Persist mode\n"
 	"\t--cache -C[valid]         Cache addresses\n"
 	"\t--pidfile -P <pidfile>    Create PID file\n"
-	"\t--devup -u <script>       Script to run when interface comes up\n";
+	"\t--devup -u <script>       Script to run when interface comes up\n"
+	"\t--devdown -o <script>	 Script to run when interface comes down\n";
 
 int main(int argc, char *argv[])
 {
@@ -661,6 +687,10 @@
 			devupcmd = strdup(optarg);
 			break;
 
+		case 'o':
+			devdowncmd = strdup(optarg);
+			break;
+
 		case 'z':
 			cleanup = 1;
 			break;
pand.1 +3 -0
diff -Naur pand.orig/pand.1 pand.new/pand.1
@@ -66,6 +66,9 @@
 \fB\-\-devup\fR \fB\-u <script>\fR
 Script to run when interface comes up
 .TP
+\fB\-\-devdown\fR \fB\-o <script>\fR
+Script to run when interface comes down. The script is executed with \fIdevice\fR \fIdestination\fR as arguments.
+.TP
 \fB\-\-autozap\fR \fB\-z\fR
 Disconnect automatically on exit
 

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel

#2 lore raw

SGVsbG8sCgpyZWFsbHkgbm9ib2R5IGlzIGludGVyZXN0ZWQgYnkgdGhpcyBmZWF0dXJlIGFuZCBz byBieSB0aGlzIHBhdGNoID8Kd2hhdCBhIHNoYW1lIDooCgpSZWdhcmRzLApPbGl2aWVyIERPTEUK CkxlIGpldWRpIDAyIG5vdmVtYnJlIDIwMDYgw6AgMTE6MzggKzAxMDAsIE9saXZpZXIgRG9sZSBh IMOpY3JpdCA6Cj4gU29ycnkgdGlueSBlcnJvciBpbiBteSBwYXRjaC4uLiBhIHZpbSBzd2FwIGZp bGUgd2FzIGluY2x1ZGVkLiBTb3JyeSBmb3IKPiB0aGlzIG1pc3Rha2UgOnAKPiBzbyBIZXJlIGlz IGEgY2xlYW5lciBwYXRjaC4KPiAKPiBSZWdhcmRzLAo+IE9saXZpZXIgRE9MRQo+IAo+IExlIGpl dWRpIDAyIG5vdmVtYnJlIDIwMDYgw6AgMTE6MzQgKzAxMDAsIE9saXZpZXIgRG9sZSBhIMOpY3Jp dCA6Cj4gPiBIaSBldmVyeW9uZSwKPiA+IAo+ID4gRm9yIG15IHdvcmsgSSBuZWVkIGEgc2ltaWxh ciBtZWNoYW5pc20gdG8gImRldnVwIiBzY3JpcHQgaW4gcGFuZCB3aGVuIGEKPiA+IFBBTiBkaXNj b25uZWN0aW9uIG9jY3Vycy4KPiA+IFRoYXQncyB3aHkgSSd2ZSBkb25lIHRoZSBmb2xsb3dpbmcg cGF0Y2ggKHNlZSBhdHRhY2htZW50IGZvciBzb3VyY2UKPiA+IGNvZGUpIHdoaWNoIGFsbG93cyBQ QU4gZGFlbW9uIHRvIHJ1biBhICJkZXZkb3duIiBzY3JpcHQgZWl0aGVyIHdoZW4gYQo+ID4gZGlz Y29ubmVjdGlvbiBpcyBzcG90dGVkIGkuZS4gcmVtb3RlIGRldmljZSBjbG9zZXMgdGhlIGNvbm5l Y3Rpb24gb3IKPiA+IHdoZW4geW91IGV4cGxpY2l0bHkgZG8gdGhlIGRpc2Nvbm5lY3Rpb24uIFRv IHVzZSBpdCwgc2ltcGx5IGFkZCB0aGUKPiA+IGZvbGxvd2luZyBvcHRpb24gdG8geW91ciBjb21t YW5kIGxpbmU6Cj4gPiBwYW5kIC0tb3B0aW9ucyAtLWRldmRvd24gL3BhdGgvdG8vZGV2ZG93bi1z Y3JpcHQKPiA+IG9yCj4gPiBwYW5kIC1vcHRpb25zIC1vIC9wYXRoL3RvL2RldmRvd24tc2NyaXB0 Cj4gPiBvciB5b3UgY2FuIGFsc28gcmVhZCB0aGUgcGFuZCBtYW4gcGFnZSA7KQo+ID4gVGhlIGJl aGF2aW91ciBpcyB0aGUgc2FtZSBhcyBmb3IgImRldnVwIiBzY3JpcHQuIEkgbWVhbiB3aGVuIHRo ZSBzY3JpcHQKPiA+IGlzIHJ1biB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQg dG8gdGhlIHNjcmlwdDoKPiA+ICQxIDwtPiBkZXZpY2UgaW50ZXJmYWNlIGUuZy4gImJuZXAwIgo+ ID4gJDIgPC0+IGJsdWV0b290aCBhZGRyZXNzIG9mIHRoZSBkaXNjb25uZWN0ZWQgZGV2aWNlIGUu Zy4KPiA+ICIwMDo0NTo3ODpBRTpCNDowMSIKPiA+IGFuZCBvZiBjb3Vyc2UgeW91ciBzY3JpcHQg bXVzdCBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zIHRvIHJ1bi4KPiA+IAo+ID4gQW55IGZl ZWRiYWNrIGFib3V0IHRoaXMgcGF0Y2ggaXMgb2YgY291cnNlIHdlbGNvbWUgOykKPiA+IEhvcGUg eW91IHdpbGwgZmluZCB0aGlzIHBhdGNoIHVzZWZ1bGwuCj4gPiAKPiA+IFJlZ2FyZHMsCj4gPiBP bGl2aWVyIERPTEUKPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+IFVzaW5nIFRvbWNhdCBidXQgbmVl ZCB0byBkbyBtb3JlPyBOZWVkIHRvIHN1cHBvcnQgd2ViIHNlcnZpY2VzLCBzZWN1cml0eT8KPiA+ IEdldCBzdHVmZiBkb25lIHF1aWNrbHkgd2l0aCBwcmUtaW50ZWdyYXRlZCB0ZWNobm9sb2d5IHRv IG1ha2UgeW91ciBqb2IgZWFzaWVyCj4gPiBEb3dubG9hZCBJQk0gV2ViU3BoZXJlIEFwcGxpY2F0 aW9uIFNlcnZlciB2LjEuMC4xIGJhc2VkIG9uIEFwYWNoZSBHZXJvbmltbwo+ID4gaHR0cDovL3Nl bC5hcy11cy5mYWxrYWcubmV0L3NlbD9jbWQ9bG5rJmtpZD0xMjA3MDkmYmlkPTI2MzA1NyZkYXQ9 MTIxNjQyCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XyBCbHVlei1kZXZlbCBtYWlsaW5nIGxpc3QgQmx1ZXotZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2Uu bmV0IGh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2JsdWV6LWRl dmVsCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFVzaW5nIFRvbWNhdCBidXQgbmVlZCB0byBkbyBtb3Jl PyBOZWVkIHRvIHN1cHBvcnQgd2ViIHNlcnZpY2VzLCBzZWN1cml0eT8KPiBHZXQgc3R1ZmYgZG9u ZSBxdWlja2x5IHdpdGggcHJlLWludGVncmF0ZWQgdGVjaG5vbG9neSB0byBtYWtlIHlvdXIgam9i IGVhc2llcgo+IERvd25sb2FkIElCTSBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyIHYuMS4w LjEgYmFzZWQgb24gQXBhY2hlIEdlcm9uaW1vCj4gaHR0cDovL3NlbC5hcy11cy5mYWxrYWcubmV0 L3NlbD9jbWQ9bG5rJmtpZD0xMjA3MDkmYmlkPTI2MzA1NyZkYXQ9MTIxNjQyCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gQmx1ZXotZGV2ZWwgbWFpbGlu ZyBsaXN0IEJsdWV6LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCBodHRwczovL2xpc3RzLnNv dXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9ibHVlei1kZXZlbAoKCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KVXNpbmcgVG9tY2F0IGJ1dCBuZWVkIHRvIGRvIG1vcmU/IE5lZWQgdG8gc3VwcG9ydCB3ZWIg c2VydmljZXMsIHNlY3VyaXR5PwpHZXQgc3R1ZmYgZG9uZSBxdWlja2x5IHdpdGggcHJlLWludGVn cmF0ZWQgdGVjaG5vbG9neSB0byBtYWtlIHlvdXIgam9iIGVhc2llcgpEb3dubG9hZCBJQk0gV2Vi U3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciB2LjEuMC4xIGJhc2VkIG9uIEFwYWNoZSBHZXJvbmlt bwpodHRwOi8vc2VsLmFzLXVzLmZhbGthZy5uZXQvc2VsP2NtZD1sbmsma2lkPTEyMDcwOSZiaWQ9 MjYzMDU3JmRhdD0xMjE2NDIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KQmx1ZXotZGV2ZWwgbWFpbGluZyBsaXN0CkJsdWV6LWRldmVsQGxpc3RzLnNvdXJj ZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9i bHVlei1kZXZlbAo=

maintainer
#3 lore raw

Hi Olivier,

Quoted 2 lines

really nobody is interested by this feature and so by this patch ? what a shame :(

I totally overlooked that one. If you don't get an accept or reject reply from me, then post it again. I must have been simply busy. Anyhow, the patch has been committed to the CVS now.

Regards

Marcel

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel