---
 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 b0b97d6..26a6443 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.3


------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Openobex-users mailing list
Openobex-users@lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/openobex-users

Reply via email to