---
 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


------------------------------------------------------------------------------
AppSumo Presents a FREE Video for the SourceForge Community by Eric 
Ries, the creator of the Lean Startup Methodology on "Lean Startup 
Secrets Revealed." This video shows you how to validate your ideas, 
optimize your ideas and identify your business strategy.
http://p.sf.net/sfu/appsumosfdev2dev
_______________________________________________
Openobex-users mailing list
Openobex-users@lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/openobex-users

Reply via email to