diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-07-10 09:38:39 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-07-10 09:38:39 +0000 |
commit | 06e4d41372a9f005b05cc2f4a09924f18bf6f6d7 (patch) | |
tree | 1c6a3bfd01eb5dcb6944d9b3b4a876df20b355e2 /test/rctest.c | |
parent | c24fa29e216026c41a14a89690002f45d8031e86 (diff) |
Allow link mode settings for outgoing connections
Diffstat (limited to 'test/rctest.c')
-rw-r--r-- | test/rctest.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/test/rctest.c b/test/rctest.c index 612855f3..2da87f71 100644 --- a/test/rctest.c +++ b/test/rctest.c @@ -92,7 +92,7 @@ static int do_connect(char *svr) struct sockaddr_rc addr; struct rfcomm_conninfo conn; socklen_t optlen; - int sk; + int sk, opt; /* Create socket */ sk = socket(PF_BLUETOOTH, socktype, BTPROTO_RFCOMM); @@ -102,6 +102,17 @@ static int do_connect(char *svr) return -1; } + /* Bind to local address */ + memset(&addr, 0, sizeof(addr)); + addr.rc_family = AF_BLUETOOTH; + bacpy(&addr.rc_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 0 /* Enable SO_TIMESTAMP */ if (timestamp) { @@ -126,16 +137,16 @@ static int do_connect(char *svr) } } - /* Bind to local address */ - memset(&addr, 0, sizeof(addr)); - addr.rc_family = AF_BLUETOOTH; - bacpy(&addr.rc_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; - } + /* Set link mode */ + opt = 0; + if (master) + opt |= RFCOMM_LM_MASTER; + if (auth) + opt |= RFCOMM_LM_AUTH; + if (encrypt) + opt |= RFCOMM_LM_ENCRYPT; + if (secure) + opt |= RFCOMM_LM_SECURE; /* Connect to remote device */ memset(&addr, 0, sizeof(addr)); |