From b5edb3c0a92674b27a95f7968e18bb51150c52f6 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 14 Oct 2002 20:46:47 +0000 Subject: Move testing programs from tools directory into the test directory --- test/scotest.c | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 test/scotest.c (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c new file mode 100644 index 00000000..dcb1acdf --- /dev/null +++ b/test/scotest.c @@ -0,0 +1,358 @@ +/* + BlueZ - Bluetooth protocol stack for Linux + Copyright (C) 2000-2001 Qualcomm Incorporated + + Written 2000,2001 by Maxim Krasnyansky + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation; + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. + IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY CLAIM, + OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE + USE OR PERFORMANCE OF THIS SOFTWARE. + + ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS SOFTWARE IS DISCLAIMED. +*/ + +/* + * $Id$ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +/* Test modes */ +enum { + SEND, + RECV, + RECONNECT, + MULTY, + DUMP +}; + +unsigned char *buf; + +/* Default data size */ +long data_size = 672; + +bdaddr_t bdaddr; + +float tv2fl(struct timeval tv) +{ + return (float)tv.tv_sec + (float)(tv.tv_usec/1000000.0); +} + +int do_connect(char *svr) +{ + struct sockaddr_sco rem_addr, loc_addr; + int s; + + if( (s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0 ) { + syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); + return -1; + } + + memset(&loc_addr, 0, sizeof(loc_addr)); + loc_addr.sco_family = AF_BLUETOOTH; + loc_addr.sco_bdaddr = bdaddr; + if( bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0 ) { + syslog(LOG_ERR, "Can't bind socket. %s(%d)", strerror(errno), errno); + exit(1); + } + + memset(&rem_addr, 0, sizeof(rem_addr)); + rem_addr.sco_family = AF_BLUETOOTH; + baswap(&rem_addr.sco_bdaddr, strtoba(svr)); + if( connect(s, (struct sockaddr *)&rem_addr, sizeof(rem_addr)) < 0 ){ + syslog(LOG_ERR, "Can't connect. %s(%d)", strerror(errno), errno); + return -1; + } + + syslog(LOG_INFO, "Connected\n"); + + return s; +} + +void do_listen( void (*handler)(int sk) ) +{ + struct sockaddr_sco loc_addr, rem_addr; + int s, s1, opt; + bdaddr_t ba; + + if( (s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0 ) { + syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); + exit(1); + } + + loc_addr.sco_family = AF_BLUETOOTH; + loc_addr.sco_bdaddr = bdaddr; + if( bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0 ) { + syslog(LOG_ERR, "Can't bind socket. %s(%d)", strerror(errno), errno); + exit(1); + } + + if( listen(s, 10) ) { + syslog(LOG_ERR,"Can not listen on the socket. %s(%d)", strerror(errno), errno); + exit(1); + } + + syslog(LOG_INFO,"Waiting for connection ..."); + + while(1) { + opt = sizeof(rem_addr); + if( (s1 = accept(s, (struct sockaddr *)&rem_addr, &opt)) < 0 ) { + syslog(LOG_ERR,"Accept failed. %s(%d)", strerror(errno), errno); + exit(1); + } + if( fork() ) { + /* Parent */ + close(s1); + continue; + } + /* Child */ + + close(s); + + baswap(&ba, &rem_addr.sco_bdaddr); + syslog(LOG_INFO, "Connect from %s\n", batostr(&ba)); + + handler(s1); + + syslog(LOG_INFO, "Disconnect\n"); + exit(0); + } +} + +void dump_mode(int s) +{ + int len; + + syslog(LOG_INFO,"Receiving ..."); + while ((len = read(s, buf, data_size)) > 0) + syslog(LOG_INFO, "Recevied %d bytes\n", len); +} + +void recv_mode(int s) +{ + struct timeval tv_beg,tv_end,tv_diff; + long total; + uint32_t seq; + + syslog(LOG_INFO, "Receiving ..."); + + seq = 0; + while (1) { + gettimeofday(&tv_beg,NULL); + total = 0; + while (total < data_size) { + int r; + if ((r = recv(s, buf, data_size, 0)) <= 0) { + if (r < 0) + syslog(LOG_ERR, "Read failed. %s(%d)", + strerror(errno), errno); + return; + } + total += r; + } + gettimeofday(&tv_end,NULL); + + timersub(&tv_end,&tv_beg,&tv_diff); + + syslog(LOG_INFO,"%ld bytes in %.2fm speed %.2f kb",total, + tv2fl(tv_diff) / 60.0, + (float)( total / tv2fl(tv_diff) ) / 1024.0 ); + } +} + +void send_mode(char *svr) +{ + struct sco_options so; + uint32_t seq; + int s, i, opt; + + if ((s = do_connect(svr)) < 0) { + syslog(LOG_ERR, "Can't connect to the server. %s(%d)", + strerror(errno), errno); + exit(1); + } + + opt = sizeof(so); + if (getsockopt(s, SOL_SCO, SCO_OPTIONS, &so, &opt) < 0) { + syslog(LOG_ERR, "Can't get SCO options. %s(%d)", + strerror(errno), errno); + exit(1); + } + + + syslog(LOG_INFO,"Sending ..."); + + for (i=6; i < so.mtu; i++) + buf[i]=0x7f; + + seq = 0; + while (1) { + *(uint32_t *)buf = htobl(seq++); + *(uint16_t *)(buf+4) = htobs(data_size); + + if (send(s, buf, so.mtu, 0) <= 0) { + syslog(LOG_ERR, "Send failed. %s(%d)", + strerror(errno), errno); + exit(1); + } + usleep(1); + } +} + +void reconnect_mode(char *svr) +{ + while(1){ + int s; + if( (s = do_connect(svr)) < 0 ){ + syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); + exit(1); + } + close(s); + + sleep(5); + } +} + +void multy_connect_mode(char *svr) +{ + while(1){ + int i, s; + for(i=0; i<10; i++){ + if( fork() ) continue; + + /* Child */ + if( (s = do_connect(svr)) < 0 ){ + syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); + } + close(s); + exit(0); + } + sleep(19); + } +} + +void usage(void) +{ + printf("scotest - SCO testing\n" + "Usage:\n"); + printf("\tscotest [-b bytes] [bd_addr]\n"); + printf("Modes:\n" + "\t-d dump (server)\n" + "\t-c reconnect (client)\n" + "\t-m multiple connects (client)\n" + "\t-r receive (server)\n" + "\t-s send (client)\n"); +} + +extern int optind,opterr,optopt; +extern char *optarg; + +int main(int argc ,char *argv[]) +{ + struct sigaction sa; + int opt, mode = RECV; + + while ((opt=getopt(argc,argv,"rdscmb:")) != EOF) { + switch(opt) { + case 'r': + mode = RECV; + break; + + case 's': + mode = SEND; + break; + + case 'd': + mode = DUMP; + break; + + case 'c': + mode = RECONNECT; + break; + + case 'm': + mode = MULTY; + break; + + case 'b': + data_size = atoi(optarg); + break; + + default: + usage(); + exit(1); + } + } + + if (!(argc - optind) && (mode!=RECV && mode !=DUMP)) { + usage(); + exit(1); + } + + if (!(buf = malloc(data_size))) { + perror("Can't allocate data buffer"); + exit(1); + } + + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = SIG_IGN; + sa.sa_flags = SA_NOCLDSTOP; + sigaction(SIGCHLD, &sa, NULL); + + openlog("scotest", LOG_PERROR | LOG_PID, LOG_LOCAL0); + + switch( mode ){ + case RECV: + do_listen(recv_mode); + break; + + case DUMP: + do_listen(dump_mode); + break; + + case SEND: + send_mode(argv[optind]); + break; + + case RECONNECT: + reconnect_mode(argv[optind]); + break; + + case MULTY: + multy_connect_mode(argv[optind]); + break; + } + syslog(LOG_INFO, "Exit"); + + closelog(); + + return 0; +} -- cgit From b2d7fd8c8e1c7948169726639675d462bd83e50e Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 17 Feb 2004 18:29:02 +0000 Subject: Fix sequence increment --- test/scotest.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index dcb1acdf..0c8d8da3 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -215,8 +215,9 @@ void send_mode(char *svr) seq = 0; while (1) { - *(uint32_t *)buf = htobl(seq++); + *(uint32_t *)buf = htobl(seq); *(uint16_t *)(buf+4) = htobs(data_size); + seq++; if (send(s, buf, so.mtu, 0) <= 0) { syslog(LOG_ERR, "Send failed. %s(%d)", -- cgit From b8707600fd45e0cda31654fc7b2932f29b28d1a1 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 28 Apr 2004 12:44:32 +0000 Subject: Unify copyright and license information --- test/scotest.c | 54 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 0c8d8da3..d245b9c0 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -1,30 +1,36 @@ -/* - BlueZ - Bluetooth protocol stack for Linux - Copyright (C) 2000-2001 Qualcomm Incorporated - - Written 2000,2001 by Maxim Krasnyansky - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation; - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. - IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY CLAIM, - OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER - RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE - USE OR PERFORMANCE OF THIS SOFTWARE. - - ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, COPYRIGHTS, - TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS SOFTWARE IS DISCLAIMED. -*/ - /* - * $Id$ + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2002-2003 Maxim Krasnyansky + * Copyright (C) 2002-2004 Marcel Holtmann + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY + * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, + * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS + * SOFTWARE IS DISCLAIMED. + * + * + * $Id$ */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include -- cgit From 9e6e37723b8d8798ed9ba58734fd3022fdf49dc2 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 26 Dec 2004 14:10:24 +0000 Subject: Update for connection information --- test/scotest.c | 66 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 27 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index d245b9c0..0c1ec130 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -60,22 +60,23 @@ enum { DUMP }; -unsigned char *buf; +static unsigned char *buf; /* Default data size */ -long data_size = 672; +static long data_size = 672; -bdaddr_t bdaddr; +static bdaddr_t bdaddr; -float tv2fl(struct timeval tv) +static float tv2fl(struct timeval tv) { return (float)tv.tv_sec + (float)(tv.tv_usec/1000000.0); } -int do_connect(char *svr) +static int do_connect(char *svr) { struct sockaddr_sco rem_addr, loc_addr; - int s; + struct sco_conninfo conn; + int s, opt; if( (s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0 ) { syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); @@ -98,43 +99,53 @@ int do_connect(char *svr) return -1; } - syslog(LOG_INFO, "Connected\n"); + memset(&conn, 0, sizeof(conn)); + opt = sizeof(conn); + if (getsockopt(s, SOL_L2CAP, SCO_CONNINFO, &conn, &opt) < 0) { + syslog(LOG_ERR, "Can't get SCO connection information. %s(%d)", strerror(errno), errno); + close(s); + return -1; + } + + syslog(LOG_INFO, "Connected [handle %d, class 0x%02x%02x%02x]", + conn.hci_handle, + conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]); return s; } -void do_listen( void (*handler)(int sk) ) +static void do_listen(void (*handler)(int sk)) { struct sockaddr_sco loc_addr, rem_addr; int s, s1, opt; bdaddr_t ba; - if( (s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0 ) { + if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) { syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); exit(1); } loc_addr.sco_family = AF_BLUETOOTH; loc_addr.sco_bdaddr = bdaddr; - if( bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0 ) { + if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) { syslog(LOG_ERR, "Can't bind socket. %s(%d)", strerror(errno), errno); exit(1); } - if( listen(s, 10) ) { + if (listen(s, 10)) { syslog(LOG_ERR,"Can not listen on the socket. %s(%d)", strerror(errno), errno); exit(1); } syslog(LOG_INFO,"Waiting for connection ..."); - while(1) { + while (1) { opt = sizeof(rem_addr); - if( (s1 = accept(s, (struct sockaddr *)&rem_addr, &opt)) < 0 ) { + if ((s1 = accept(s, (struct sockaddr *)&rem_addr, &opt)) < 0) { syslog(LOG_ERR,"Accept failed. %s(%d)", strerror(errno), errno); exit(1); } - if( fork() ) { + if (fork()) { /* Parent */ close(s1); continue; @@ -153,7 +164,7 @@ void do_listen( void (*handler)(int sk) ) } } -void dump_mode(int s) +static void dump_mode(int s) { int len; @@ -162,7 +173,7 @@ void dump_mode(int s) syslog(LOG_INFO, "Recevied %d bytes\n", len); } -void recv_mode(int s) +static void recv_mode(int s) { struct timeval tv_beg,tv_end,tv_diff; long total; @@ -194,7 +205,7 @@ void recv_mode(int s) } } -void send_mode(char *svr) +static void send_mode(char *svr) { struct sco_options so; uint32_t seq; @@ -216,7 +227,7 @@ void send_mode(char *svr) syslog(LOG_INFO,"Sending ..."); - for (i=6; i < so.mtu; i++) + for (i = 6; i < so.mtu; i++) buf[i]=0x7f; seq = 0; @@ -234,11 +245,11 @@ void send_mode(char *svr) } } -void reconnect_mode(char *svr) +static void reconnect_mode(char *svr) { - while(1){ + while (1) { int s; - if( (s = do_connect(svr)) < 0 ){ + if ((s = do_connect(svr)) < 0) { syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); exit(1); } @@ -248,15 +259,16 @@ void reconnect_mode(char *svr) } } -void multy_connect_mode(char *svr) +static void multy_connect_mode(char *svr) { - while(1){ + while (1) { int i, s; - for(i=0; i<10; i++){ - if( fork() ) continue; + for (i = 0; i < 10; i++){ + if (fork()) + continue; /* Child */ - if( (s = do_connect(svr)) < 0 ){ + if ((s = do_connect(svr)) < 0) { syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); } close(s); @@ -266,7 +278,7 @@ void multy_connect_mode(char *svr) } } -void usage(void) +static void usage(void) { printf("scotest - SCO testing\n" "Usage:\n"); -- cgit From 95cd931b918a07fcf12e48dce9665f3c90ab4130 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 29 Dec 2004 19:32:16 +0000 Subject: Fix typos --- test/scotest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 0c1ec130..eddd79af 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -101,7 +101,7 @@ static int do_connect(char *svr) memset(&conn, 0, sizeof(conn)); opt = sizeof(conn); - if (getsockopt(s, SOL_L2CAP, SCO_CONNINFO, &conn, &opt) < 0) { + if (getsockopt(s, SOL_SCO, SCO_CONNINFO, &conn, &opt) < 0) { syslog(LOG_ERR, "Can't get SCO connection information. %s(%d)", strerror(errno), errno); close(s); return -1; -- cgit From 0197e2d62cac9323387d52b5711d3c564303d949 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 12 Jan 2005 20:26:52 +0000 Subject: Whitespace cleanups --- test/scotest.c | 102 ++++++++++++++++++++++++++------------------------------- 1 file changed, 47 insertions(+), 55 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index eddd79af..583310a0 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -3,7 +3,7 @@ * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2002-2003 Maxim Krasnyansky - * Copyright (C) 2002-2004 Marcel Holtmann + * Copyright (C) 2002-2005 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify @@ -32,20 +32,13 @@ #endif #include -#include -#include -#include -#include +#include +#include #include +#include #include -#include -#include #include - -#include -#include -#include -#include +#include #include #include @@ -78,31 +71,31 @@ static int do_connect(char *svr) struct sco_conninfo conn; int s, opt; - if( (s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0 ) { - syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); + if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) { + syslog(LOG_ERR, "Can't create socket: %s (%d)", strerror(errno), errno); return -1; } memset(&loc_addr, 0, sizeof(loc_addr)); loc_addr.sco_family = AF_BLUETOOTH; - loc_addr.sco_bdaddr = bdaddr; - if( bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0 ) { - syslog(LOG_ERR, "Can't bind socket. %s(%d)", strerror(errno), errno); + bacpy(&loc_addr.sco_bdaddr, &bdaddr); + if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) { + syslog(LOG_ERR, "Can't bind socket: %s (%d)", strerror(errno), errno); exit(1); } memset(&rem_addr, 0, sizeof(rem_addr)); rem_addr.sco_family = AF_BLUETOOTH; - baswap(&rem_addr.sco_bdaddr, strtoba(svr)); - if( connect(s, (struct sockaddr *)&rem_addr, sizeof(rem_addr)) < 0 ){ - syslog(LOG_ERR, "Can't connect. %s(%d)", strerror(errno), errno); + str2ba(svr, &rem_addr.sco_bdaddr); + if (connect(s, (struct sockaddr *) &rem_addr, sizeof(rem_addr)) < 0) { + syslog(LOG_ERR, "Can't connect: %s (%d)", strerror(errno), errno); return -1; } memset(&conn, 0, sizeof(conn)); opt = sizeof(conn); if (getsockopt(s, SOL_SCO, SCO_CONNINFO, &conn, &opt) < 0) { - syslog(LOG_ERR, "Can't get SCO connection information. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)", strerror(errno), errno); close(s); return -1; } @@ -118,22 +111,22 @@ static void do_listen(void (*handler)(int sk)) { struct sockaddr_sco loc_addr, rem_addr; int s, s1, opt; - bdaddr_t ba; + char ba[18]; if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) { - syslog(LOG_ERR, "Can't create socket. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR, "Can't create socket: %s (%d)", strerror(errno), errno); exit(1); } loc_addr.sco_family = AF_BLUETOOTH; loc_addr.sco_bdaddr = bdaddr; if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) { - syslog(LOG_ERR, "Can't bind socket. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR, "Can't bind socket: %s (%d)", strerror(errno), errno); exit(1); } if (listen(s, 10)) { - syslog(LOG_ERR,"Can not listen on the socket. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR,"Can not listen on the socket: %s (%d)", strerror(errno), errno); exit(1); } @@ -141,8 +134,8 @@ static void do_listen(void (*handler)(int sk)) while (1) { opt = sizeof(rem_addr); - if ((s1 = accept(s, (struct sockaddr *)&rem_addr, &opt)) < 0) { - syslog(LOG_ERR,"Accept failed. %s(%d)", strerror(errno), errno); + if ((s1 = accept(s, (struct sockaddr *) &rem_addr, &opt)) < 0) { + syslog(LOG_ERR,"Accept failed: %s (%d)", strerror(errno), errno); exit(1); } if (fork()) { @@ -154,12 +147,12 @@ static void do_listen(void (*handler)(int sk)) close(s); - baswap(&ba, &rem_addr.sco_bdaddr); - syslog(LOG_INFO, "Connect from %s\n", batostr(&ba)); + ba2str(&rem_addr.sco_bdaddr, ba); + syslog(LOG_INFO, "Connect from %s", ba); handler(s1); - syslog(LOG_INFO, "Disconnect\n"); + syslog(LOG_INFO, "Disconnect"); exit(0); } } @@ -183,25 +176,25 @@ static void recv_mode(int s) seq = 0; while (1) { - gettimeofday(&tv_beg,NULL); + gettimeofday(&tv_beg, NULL); total = 0; while (total < data_size) { int r; if ((r = recv(s, buf, data_size, 0)) <= 0) { if (r < 0) - syslog(LOG_ERR, "Read failed. %s(%d)", + syslog(LOG_ERR, "Read failed: %s (%d)", strerror(errno), errno); return; } total += r; } - gettimeofday(&tv_end,NULL); + gettimeofday(&tv_end, NULL); - timersub(&tv_end,&tv_beg,&tv_diff); + timersub(&tv_end, &tv_beg, &tv_diff); - syslog(LOG_INFO,"%ld bytes in %.2fm speed %.2f kb",total, - tv2fl(tv_diff) / 60.0, - (float)( total / tv2fl(tv_diff) ) / 1024.0 ); + syslog(LOG_INFO,"%ld bytes in %.2fm speed %.2f kb", total, + tv2fl(tv_diff) / 60.0, + (float)( total / tv2fl(tv_diff) ) / 1024.0 ); } } @@ -212,33 +205,32 @@ static void send_mode(char *svr) int s, i, opt; if ((s = do_connect(svr)) < 0) { - syslog(LOG_ERR, "Can't connect to the server. %s(%d)", - strerror(errno), errno); + syslog(LOG_ERR, "Can't connect to the server: %s (%d)", + strerror(errno), errno); exit(1); } opt = sizeof(so); if (getsockopt(s, SOL_SCO, SCO_OPTIONS, &so, &opt) < 0) { - syslog(LOG_ERR, "Can't get SCO options. %s(%d)", - strerror(errno), errno); + syslog(LOG_ERR, "Can't get SCO options: %s (%d)", + strerror(errno), errno); exit(1); } - syslog(LOG_INFO,"Sending ..."); for (i = 6; i < so.mtu; i++) - buf[i]=0x7f; + buf[i] = 0x7f; seq = 0; while (1) { - *(uint32_t *)buf = htobl(seq); - *(uint16_t *)(buf+4) = htobs(data_size); + *(uint32_t *) buf = htobl(seq); + *(uint16_t *) (buf + 4) = htobs(data_size); seq++; - + if (send(s, buf, so.mtu, 0) <= 0) { - syslog(LOG_ERR, "Send failed. %s(%d)", - strerror(errno), errno); + syslog(LOG_ERR, "Send failed: %s (%d)", + strerror(errno), errno); exit(1); } usleep(1); @@ -250,7 +242,8 @@ static void reconnect_mode(char *svr) while (1) { int s; if ((s = do_connect(svr)) < 0) { - syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR, "Can't connect to the server: %s (%d)", + strerror(errno), errno); exit(1); } close(s); @@ -269,7 +262,8 @@ static void multy_connect_mode(char *svr) /* Child */ if ((s = do_connect(svr)) < 0) { - syslog(LOG_ERR, "Can't connect to the server. %s(%d)", strerror(errno), errno); + syslog(LOG_ERR, "Can't connect to the server: %s (%d)", + strerror(errno), errno); } close(s); exit(0); @@ -291,9 +285,6 @@ static void usage(void) "\t-s send (client)\n"); } -extern int optind,opterr,optopt; -extern char *optarg; - int main(int argc ,char *argv[]) { struct sigaction sa; @@ -304,7 +295,7 @@ int main(int argc ,char *argv[]) case 'r': mode = RECV; break; - + case 's': mode = SEND; break; @@ -331,7 +322,7 @@ int main(int argc ,char *argv[]) } } - if (!(argc - optind) && (mode!=RECV && mode !=DUMP)) { + if (!(argc - optind) && (mode != RECV && mode != DUMP)) { usage(); exit(1); } @@ -369,6 +360,7 @@ int main(int argc ,char *argv[]) multy_connect_mode(argv[optind]); break; } + syslog(LOG_INFO, "Exit"); closelog(); -- cgit From 96bbfb2039b98046fe72c88dc6f737a66ed65fde Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 27 Jan 2005 20:26:31 +0000 Subject: Cleanup the socket handling --- test/scotest.c | 183 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 119 insertions(+), 64 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 583310a0..59278460 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -67,106 +67,155 @@ static float tv2fl(struct timeval tv) static int do_connect(char *svr) { - struct sockaddr_sco rem_addr, loc_addr; + struct sockaddr_sco addr; struct sco_conninfo conn; - int s, opt; + socklen_t optlen; + int sk; - if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) { - syslog(LOG_ERR, "Can't create socket: %s (%d)", strerror(errno), errno); + /* Create socket */ + sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO); + if (sk < 0) { + syslog(LOG_ERR, "Can't create socket: %s (%d)", + strerror(errno), errno); return -1; } - memset(&loc_addr, 0, sizeof(loc_addr)); - loc_addr.sco_family = AF_BLUETOOTH; - bacpy(&loc_addr.sco_bdaddr, &bdaddr); - if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) { - syslog(LOG_ERR, "Can't bind socket: %s (%d)", strerror(errno), errno); - exit(1); + /* Bind to local address */ + memset(&addr, 0, sizeof(addr)); + addr.sco_family = AF_BLUETOOTH; + bacpy(&addr.sco_bdaddr, &bdaddr); + + if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + syslog(LOG_ERR, "Can't bind socket: %s (%d)", + strerror(errno), errno); + goto error; } - memset(&rem_addr, 0, sizeof(rem_addr)); - rem_addr.sco_family = AF_BLUETOOTH; - str2ba(svr, &rem_addr.sco_bdaddr); - if (connect(s, (struct sockaddr *) &rem_addr, sizeof(rem_addr)) < 0) { - syslog(LOG_ERR, "Can't connect: %s (%d)", strerror(errno), errno); - return -1; + /* Connect to remote device */ + memset(&addr, 0, sizeof(addr)); + addr.sco_family = AF_BLUETOOTH; + str2ba(svr, &addr.sco_bdaddr); + + if (connect(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + syslog(LOG_ERR, "Can't connect: %s (%d)", + strerror(errno), errno); + goto error; } + /* Get connection information */ memset(&conn, 0, sizeof(conn)); - opt = sizeof(conn); - if (getsockopt(s, SOL_SCO, SCO_CONNINFO, &conn, &opt) < 0) { - syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)", strerror(errno), errno); - close(s); - return -1; + optlen = sizeof(conn); + + if (getsockopt(sk, SOL_SCO, SCO_CONNINFO, &conn, &optlen) < 0) { + syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)", + strerror(errno), errno); + goto error; } syslog(LOG_INFO, "Connected [handle %d, class 0x%02x%02x%02x]", conn.hci_handle, conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]); - return s; + return sk; + +error: + close(sk); + return -1; } static void do_listen(void (*handler)(int sk)) { - struct sockaddr_sco loc_addr, rem_addr; - int s, s1, opt; + struct sockaddr_sco addr; + struct sco_conninfo conn; + socklen_t optlen; + int sk, nsk; char ba[18]; - if ((s = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO)) < 0) { - syslog(LOG_ERR, "Can't create socket: %s (%d)", strerror(errno), errno); + /* Create socket */ + sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO); + if (sk < 0) { + syslog(LOG_ERR, "Can't create socket: %s (%d)", + strerror(errno), errno); exit(1); } - loc_addr.sco_family = AF_BLUETOOTH; - loc_addr.sco_bdaddr = bdaddr; - if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) { - syslog(LOG_ERR, "Can't bind socket: %s (%d)", strerror(errno), errno); - exit(1); + /* Bind to local address */ + memset(&addr, 0, sizeof(addr)); + addr.sco_family = AF_BLUETOOTH; + bacpy(&addr.sco_bdaddr, &bdaddr); + + if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) { + syslog(LOG_ERR, "Can't bind socket: %s (%d)", + strerror(errno), errno); + goto error; } - if (listen(s, 10)) { - syslog(LOG_ERR,"Can not listen on the socket: %s (%d)", strerror(errno), errno); - exit(1); + /* Listen for connections */ + if (listen(sk, 10)) { + syslog(LOG_ERR,"Can not listen on the socket: %s (%d)", + strerror(errno), errno); + goto error; } syslog(LOG_INFO,"Waiting for connection ..."); while (1) { - opt = sizeof(rem_addr); - if ((s1 = accept(s, (struct sockaddr *) &rem_addr, &opt)) < 0) { - syslog(LOG_ERR,"Accept failed: %s (%d)", strerror(errno), errno); - exit(1); + memset(&addr, 0, sizeof(addr)); + optlen = sizeof(addr); + + nsk = accept(sk, (struct sockaddr *) &addr, &optlen); + if (nsk < 0) { + syslog(LOG_ERR,"Accept failed: %s (%d)", + strerror(errno), errno); + goto error; } if (fork()) { /* Parent */ - close(s1); + close(nsk); continue; } /* Child */ + close(sk); + + /* Get connection information */ + memset(&conn, 0, sizeof(conn)); + optlen = sizeof(conn); - close(s); + if (getsockopt(nsk, SOL_SCO, SCO_CONNINFO, &conn, &optlen) < 0) { + syslog(LOG_ERR, "Can't get SCO connection information: %s (%d)", + strerror(errno), errno); + close(nsk); + goto error; + } - ba2str(&rem_addr.sco_bdaddr, ba); - syslog(LOG_INFO, "Connect from %s", ba); + ba2str(&addr.sco_bdaddr, ba); + syslog(LOG_INFO, "Connect from %s [handle %d, class 0x%02x%02x%02x]", + ba, conn.hci_handle, + conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]); - handler(s1); + handler(nsk); syslog(LOG_INFO, "Disconnect"); exit(0); } + + return; + +error: + close(sk); + exit(1); } -static void dump_mode(int s) +static void dump_mode(int sk) { int len; syslog(LOG_INFO,"Receiving ..."); - while ((len = read(s, buf, data_size)) > 0) - syslog(LOG_INFO, "Recevied %d bytes\n", len); + while ((len = read(sk, buf, data_size)) > 0) + syslog(LOG_INFO, "Recevied %d bytes", len); } -static void recv_mode(int s) +static void recv_mode(int sk) { struct timeval tv_beg,tv_end,tv_diff; long total; @@ -180,7 +229,7 @@ static void recv_mode(int s) total = 0; while (total < data_size) { int r; - if ((r = recv(s, buf, data_size, 0)) <= 0) { + if ((r = recv(sk, buf, data_size, 0)) <= 0) { if (r < 0) syslog(LOG_ERR, "Read failed: %s (%d)", strerror(errno), errno); @@ -202,20 +251,20 @@ static void send_mode(char *svr) { struct sco_options so; uint32_t seq; - int s, i, opt; + int sk, i, opt; - if ((s = do_connect(svr)) < 0) { + if ((sk = do_connect(svr)) < 0) { syslog(LOG_ERR, "Can't connect to the server: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); exit(1); } opt = sizeof(so); - if (getsockopt(s, SOL_SCO, SCO_OPTIONS, &so, &opt) < 0) { + if (getsockopt(sk, SOL_SCO, SCO_OPTIONS, &so, &opt) < 0) { syslog(LOG_ERR, "Can't get SCO options: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); exit(1); - } + } syslog(LOG_INFO,"Sending ..."); @@ -228,11 +277,12 @@ static void send_mode(char *svr) *(uint16_t *) (buf + 4) = htobs(data_size); seq++; - if (send(s, buf, so.mtu, 0) <= 0) { + if (send(sk, buf, so.mtu, 0) <= 0) { syslog(LOG_ERR, "Send failed: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); exit(1); } + usleep(1); } } @@ -240,13 +290,15 @@ static void send_mode(char *svr) static void reconnect_mode(char *svr) { while (1) { - int s; - if ((s = do_connect(svr)) < 0) { + int sk; + + if ((sk = do_connect(svr)) < 0) { syslog(LOG_ERR, "Can't connect to the server: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); exit(1); } - close(s); + + close(sk); sleep(5); } @@ -255,19 +307,22 @@ static void reconnect_mode(char *svr) static void multy_connect_mode(char *svr) { while (1) { - int i, s; + int i, sk; + for (i = 0; i < 10; i++){ if (fork()) continue; /* Child */ - if ((s = do_connect(svr)) < 0) { + sk = do_connect(svr); + if (sk < 0) { syslog(LOG_ERR, "Can't connect to the server: %s (%d)", - strerror(errno), errno); + strerror(errno), errno); } - close(s); + close(sk); exit(0); } + sleep(19); } } -- cgit From 5481f007aa304a6f5f4531a243e146f9075dc17f Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 28 Jan 2005 17:24:40 +0000 Subject: Don't forget to include getopt.h --- test/scotest.c | 1 + 1 file changed, 1 insertion(+) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 59278460..6447eab4 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include -- cgit From 1f422e5f2b343d35a8c77ce4be16f74b2819b2bf Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 5 Jul 2005 21:15:41 +0000 Subject: Fix some GCC 4.0 warnings --- test/scotest.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 6447eab4..22a95fed 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -251,8 +251,9 @@ static void recv_mode(int sk) static void send_mode(char *svr) { struct sco_options so; + socklen_t len; uint32_t seq; - int sk, i, opt; + int i, sk; if ((sk = do_connect(svr)) < 0) { syslog(LOG_ERR, "Can't connect to the server: %s (%d)", @@ -260,8 +261,8 @@ static void send_mode(char *svr) exit(1); } - opt = sizeof(so); - if (getsockopt(sk, SOL_SCO, SCO_OPTIONS, &so, &opt) < 0) { + len = sizeof(so); + if (getsockopt(sk, SOL_SCO, SCO_OPTIONS, &so, &len) < 0) { syslog(LOG_ERR, "Can't get SCO options: %s (%d)", strerror(errno), errno); exit(1); -- cgit From 632a9432774ff3a0c6e556e8f32a565b38890767 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 29 Oct 2005 22:36:31 +0000 Subject: Big cleanup of CVS relics --- test/scotest.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 22a95fed..169f39b7 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -7,24 +7,19 @@ * * * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY - * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, - * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS - * SOFTWARE IS DISCLAIMED. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * - * - * $Id$ */ #ifdef HAVE_CONFIG_H -- cgit From f2e48c44a7e4c9ee31b8ce2e302186f6047cfeab Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 3 Jan 2006 13:28:56 +0000 Subject: Update copyright information --- test/scotest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 169f39b7..281e34cb 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -3,7 +3,7 @@ * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2002-2003 Maxim Krasnyansky - * Copyright (C) 2002-2005 Marcel Holtmann + * Copyright (C) 2002-2006 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify -- cgit From 607695ed109340f4b7a5628420e0a8e8aee34f4e Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 13 Jan 2007 17:48:12 +0000 Subject: Update copyright information --- test/scotest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 281e34cb..22da3497 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -3,7 +3,7 @@ * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2002-2003 Maxim Krasnyansky - * Copyright (C) 2002-2006 Marcel Holtmann + * Copyright (C) 2002-2007 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify -- cgit From 03ebdf91be3d0652e27c2813ee37b43bb29f9411 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 23 Jan 2007 17:12:12 +0000 Subject: Add a connect only mode --- test/scotest.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index 22da3497..f80d63bd 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -46,7 +46,8 @@ enum { RECV, RECONNECT, MULTY, - DUMP + DUMP, + CONNECT }; static unsigned char *buf; @@ -334,15 +335,16 @@ static void usage(void) "\t-c reconnect (client)\n" "\t-m multiple connects (client)\n" "\t-r receive (server)\n" - "\t-s send (client)\n"); + "\t-s connect and send (client)\n" + "\t-n connect and be silent (client)\n"); } int main(int argc ,char *argv[]) { struct sigaction sa; - int opt, mode = RECV; + int opt, sk, mode = RECV; - while ((opt=getopt(argc,argv,"rdscmb:")) != EOF) { + while ((opt=getopt(argc,argv,"rdscmnb:")) != EOF) { switch(opt) { case 'r': mode = RECV; @@ -364,6 +366,10 @@ int main(int argc ,char *argv[]) mode = MULTY; break; + case 'n': + mode = CONNECT; + break; + case 'b': data_size = atoi(optarg); break; @@ -411,6 +417,13 @@ int main(int argc ,char *argv[]) case MULTY: multy_connect_mode(argv[optind]); break; + + case CONNECT: + sk = do_connect(argv[optind]); + if (sk < 0) + exit(1); + dump_mode(sk); + break; } syslog(LOG_INFO, "Exit"); -- cgit From e823c15e43a6f924779e466d434c51157002d9ee Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 2 Feb 2008 03:37:05 +0000 Subject: Update copyright information --- test/scotest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/scotest.c') diff --git a/test/scotest.c b/test/scotest.c index f80d63bd..4c5a310c 100644 --- a/test/scotest.c +++ b/test/scotest.c @@ -3,7 +3,7 @@ * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2002-2003 Maxim Krasnyansky - * Copyright (C) 2002-2007 Marcel Holtmann + * Copyright (C) 2002-2008 Marcel Holtmann * * * This program is free software; you can redistribute it and/or modify -- cgit