---
lib/bluez_compat.h | 2 +-
lib/btobex.c | 45 +++++++++++++++++++++++++++------------------
lib/btobex.h | 6 +++++-
lib/obex_transport.h | 2 +-
4 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/lib/bluez_compat.h b/lib/bluez_compat.h
index 3f36cd7..c8b046c 100644
--- a/lib/bluez_compat.h
+++ b/lib/bluez_compat.h
@@ -36,7 +36,7 @@
#define rc_bdaddr btAddr
#define rc_channel port
#define PF_BLUETOOTH PF_BTH
-#define AF_BLUETOOTH PF_BLUETOOTH
+#define AF_BLUETOOTH AF_BTH
#define BTPROTO_RFCOMM BTHPROTO_RFCOMM
/* TODO: should be const */
extern bdaddr_t bluez_compat_bdaddr_any;
diff --git a/lib/btobex.c b/lib/btobex.c
index 749fefb..810ce91 100644
--- a/lib/btobex.c
+++ b/lib/btobex.c
@@ -32,10 +32,7 @@
/* Linux/FreeBSD/NetBSD case */
#include <string.h>
-#include <unistd.h>
-#include <stdio.h> /* perror */
#include <errno.h> /* errno and EADDRNOTAVAIL */
-#include <netinet/in.h>
#include <sys/socket.h>
#endif /* _WIN32 */
@@ -80,7 +77,7 @@ static void btobex_cleanup (obex_t *self)
static int btobex_set_local_addr(obex_t *self, struct sockaddr *addr,
size_t len)
{
- struct btobex_data *data = &self->trans.data.rfcomm;
+ struct btobex_rfcomm_data *data = &self->trans.data.bt.rfcomm;
const struct sockaddr_rc *local = (struct sockaddr_rc *) addr;
if (len == sizeof(*local) && local->rc_family == AF_BLUETOOTH) {
@@ -93,7 +90,7 @@ static int btobex_set_local_addr(obex_t *self, struct
sockaddr *addr,
static int btobex_set_remote_addr(obex_t *self, struct sockaddr *addr, size_t
len)
{
- struct btobex_data *data = &self->trans.data.rfcomm;
+ struct btobex_rfcomm_data *data = &self->trans.data.bt.rfcomm;
const struct sockaddr_rc *remote = (struct sockaddr_rc *)addr;
if (len == sizeof(*remote) && remote->rc_family == AF_BLUETOOTH) {
@@ -113,14 +110,20 @@ static int btobex_set_remote_addr(obex_t *self, struct
sockaddr *addr, size_t le
void btobex_prepare_connect(obex_t *self, const bdaddr_t *src,
const bdaddr_t *dst, uint8_t channel)
{
- struct sockaddr_rc addr;
+ struct obex_transport *trans = &self->trans;
btobex_prepare_listen(self, src, 0);
- addr.rc_family = AF_BLUETOOTH;
- bacpy(&addr.rc_bdaddr, dst);
- addr.rc_channel = channel;
- btobex_set_remote_addr(self, (struct sockaddr *) &addr, sizeof(addr));
+ if (trans->type == OBEX_TRANS_BLUETOOTH) {
+ struct sockaddr_rc addr;
+
+ memset(&addr, 0, sizeof(addr));
+ addr.rc_family = AF_BLUETOOTH;
+ bacpy(&addr.rc_bdaddr, dst);
+ addr.rc_channel = (uint8_t)(channel & 0xFF);
+ obex_transport_set_remote_addr(self, (struct sockaddr *) &addr,
+ sizeof(addr));
+ }
}
/*
@@ -131,12 +134,18 @@ void btobex_prepare_connect(obex_t *self, const bdaddr_t
*src,
*/
void btobex_prepare_listen(obex_t *self, const bdaddr_t *src, uint8_t channel)
{
- struct sockaddr_rc addr;
+ struct obex_transport *trans = &self->trans;
+
+ if (trans->type == OBEX_TRANS_BLUETOOTH) {
+ struct sockaddr_rc addr;
- addr.rc_family = AF_BLUETOOTH;
- bacpy(&addr.rc_bdaddr, src);
- addr.rc_channel = channel;
- btobex_set_local_addr(self, (struct sockaddr *) &addr, sizeof(addr));
+ memset(&addr, 0, sizeof(addr));
+ addr.rc_family = AF_BLUETOOTH;
+ bacpy(&addr.rc_bdaddr, src);
+ addr.rc_channel = (uint8_t)(channel & 0xFF);
+ obex_transport_set_local_addr(self, (struct sockaddr *) &addr,
+ sizeof(addr));
+ }
}
/*
@@ -148,7 +157,7 @@ void btobex_prepare_listen(obex_t *self, const bdaddr_t
*src, uint8_t channel)
static int btobex_listen(obex_t *self)
{
struct obex_transport *trans = &self->trans;
- struct btobex_data *data = &self->trans.data.rfcomm;
+ struct btobex_rfcomm_data *data = &self->trans.data.bt.rfcomm;
DEBUG(3, "\n");
@@ -190,7 +199,7 @@ out_freesock:
static int btobex_accept(obex_t *self)
{
struct obex_transport *trans = &self->trans;
- struct btobex_data *data = &self->trans.data.rfcomm;
+ struct btobex_rfcomm_data *data = &self->trans.data.bt.rfcomm;
struct sockaddr *addr = (struct sockaddr *) &data->peer;
socklen_t addrlen = sizeof(data->peer);
@@ -217,7 +226,7 @@ static int btobex_accept(obex_t *self)
static int btobex_connect_request(obex_t *self)
{
struct obex_transport *trans = &self->trans;
- struct btobex_data *data = &self->trans.data.rfcomm;
+ struct btobex_rfcomm_data *data = &self->trans.data.bt.rfcomm;
int ret;
int mtu = 0;
diff --git a/lib/btobex.h b/lib/btobex.h
index d863ecb..4375881 100644
--- a/lib/btobex.h
+++ b/lib/btobex.h
@@ -30,8 +30,12 @@ void btobex_prepare_connect(obex_t *self, const bdaddr_t
*src,
const bdaddr_t *dst, uint8_t channel);
void btobex_prepare_listen(obex_t *self, const bdaddr_t *src, uint8_t channel);
-struct btobex_data {
+struct btobex_rfcomm_data {
struct sockaddr_rc self;
struct sockaddr_rc peer;
};
+
+union btobex_data {
+ struct btobex_rfcomm_data rfcomm;
+};
#endif
diff --git a/lib/obex_transport.h b/lib/obex_transport.h
index a39f563..b7a4423 100644
--- a/lib/obex_transport.h
+++ b/lib/obex_transport.h
@@ -93,7 +93,7 @@ union obex_transport_data {
#endif /*HAVE_IRDA*/
struct inobex_data inet;
#ifdef HAVE_BLUETOOTH
- struct btobex_data rfcomm;
+ union btobex_data bt;
#endif /*HAVE_BLUETOOTH*/
obex_ctrans_t custom;
#ifdef HAVE_USB
--
1.7.5.4
------------------------------------------------------------------------------
Got Input? Slashdot Needs You.
Take our quick survey online. Come on, we don't ask for help often.
Plus, you'll get a chance to win $100 to spend on ThinkGeek.
http://p.sf.net/sfu/slashdot-survey
_______________________________________________
Openobex-users mailing list
[email protected]
http://lists.sourceforge.net/lists/listinfo/openobex-users