Index: main.c =================================================================== RCS file: /cvsroot/bluez/utils/rfcomm/main.c,v retrieving revision 1.19 diff -u -r1.19 main.c --- main.c 6 Jul 2006 09:31:03 -0000 1.19 +++ main.c 10 Aug 2006 13:07:51 -0000 @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -252,6 +253,52 @@ return 0; } +static void run_cmdline(struct pollfd *p, char *devname, int argc, char ** argv) +{ + int i = 0; + pid_t pid, child; + int status = 0; + char** cmdargv = malloc((argc+1)*sizeof(char*)); + + if(!cmdargv) + return; + + for(i=0; irevents = 0; + if (poll(p, 1, 200) || __io_canceled) { + kill(pid, SIGTERM); + waitpid(pid, &status, 0); + break; + } + + usleep(10*1000); + } + break; + } + + free(cmdargv); +} + static void cmd_connect(int ctl, int dev, bdaddr_t *bdaddr, int argc, char **argv) { struct sockaddr_rc laddr, raddr; @@ -499,10 +546,14 @@ p.fd = fd; p.events = POLLERR | POLLHUP; - while (!__io_canceled) { - p.revents = 0; - if (poll(&p, 1, 100)) - break; + if(argc <= 2) { + while (!__io_canceled) { + p.revents = 0; + if (poll(&p, 1, 100)) + break; + } + } else { + run_cmdline(&p, devname, argc-2, argv+2); } printf("Disconnected\n"); @@ -510,6 +561,20 @@ close(fd); } +static void cmd_watch(int ctl, int dev, bdaddr_t *bdaddr, int argc, char **argv) +{ + struct sigaction sa; + + sa.sa_handler = sig_term; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + + while(!__io_canceled) { + cmd_listen(ctl, dev, bdaddr, argc, argv); + usleep(10*1000); + } +} + static void cmd_create(int ctl, int dev, bdaddr_t *bdaddr, int argc, char **argv) { if (strcmp(argv[0], "all") == 0) @@ -552,7 +617,8 @@ { "release", "unbind", cmd_release, "", "Release device" }, { "show", "info", cmd_show, "", "Show device" }, { "connect", "conn", cmd_connect, " [channel]", "Connect device" }, - { "listen", "server", cmd_listen, " [channel]", "Listen" }, + { "listen", "server", cmd_listen, " [channel [cmd]]", "Listen" }, + { "watch", "watch", cmd_watch, " [channel [cmd]]", "Watch" }, { NULL, NULL, NULL, 0, 0 } };