# define SOCKETCLOSE close
#endif
-#if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__)
-#define USE_BLUETOOTH 1
-#if defined(__FreeBSD__)
-#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
-#define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
-#define BTPROTO_HCI BLUETOOTH_PROTO_HCI
-#define SOL_HCI SOL_HCI_RAW
-#define HCI_FILTER SO_HCI_RAW_FILTER
-#define sockaddr_l2 sockaddr_l2cap
-#define sockaddr_rc sockaddr_rfcomm
-#define hci_dev hci_node
-#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
-#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
-#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
-#elif defined(__NetBSD__) || defined(__DragonFly__)
-#define sockaddr_l2 sockaddr_bt
-#define sockaddr_rc sockaddr_bt
-#define sockaddr_hci sockaddr_bt
-#define sockaddr_sco sockaddr_bt
-#define SOL_HCI BTPROTO_HCI
-#define HCI_DATA_DIR SO_HCI_DIRECTION
-#define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
-#define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
-#define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb)
-#define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb)
-#else
-#define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
-#define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
-#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
-#define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
-#endif
+#if defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+# define USE_BLUETOOTH 1
+# if defined(HAVE_BLUETOOTH_BLUETOOTH_H) // Linux
+# define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
+# define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
+# define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
+# define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
+# elif defined(__FreeBSD__)
+# define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
+# define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
+# define BTPROTO_HCI BLUETOOTH_PROTO_HCI
+# define SOL_HCI SOL_HCI_RAW
+# define HCI_FILTER SO_HCI_RAW_FILTER
+# define sockaddr_l2 sockaddr_l2cap
+# define sockaddr_rc sockaddr_rfcomm
+# define hci_dev hci_node
+# define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
+# define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
+# define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
+# else // NetBSD, DragonFly BSD
+# define sockaddr_l2 sockaddr_bt
+# define sockaddr_rc sockaddr_bt
+# define sockaddr_hci sockaddr_bt
+# define sockaddr_sco sockaddr_bt
+# define bt_l2 bt
+# define bt_rc bt
+# define bt_sco bt
+# define bt_hci bt
+# define bt_cid bt_channel
+# define SOL_HCI BTPROTO_HCI
+# define HCI_DATA_DIR SO_HCI_DIRECTION
+# define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
+# define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
+# define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb)
+# define _BT_SCO_MEMB(sa, memb) ((sa)->bt_##memb)
+# endif
#endif
#ifdef MS_WINDOWS_DESKTOP
case BTPROTO_HCI:
{
struct sockaddr_hci *a = (struct sockaddr_hci *) addr;
-#if defined(__NetBSD__) || defined(__DragonFly__)
- return makebdaddr(&_BT_HCI_MEMB(a, bdaddr));
+#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+ PyObject *ret = NULL;
+ ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev));
+ return ret;
#elif defined(__FreeBSD__)
- char *node = _BT_HCI_MEMB(a, node);
+ const char *node = _BT_HCI_MEMB(a, node);
size_t len = strnlen(node, sizeof(_BT_HCI_MEMB(a, node)));
return PyBytes_FromStringAndSize(node, (Py_ssize_t)len);
#else
- PyObject *ret = NULL;
- ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev));
- return ret;
+ return makebdaddr(&_BT_HCI_MEMB(a, bdaddr));
#endif
}
{
struct sockaddr_hci *addr = &addrbuf->bt_hci;
memset(addr, 0, sizeof(struct sockaddr_hci));
-#if defined(__NetBSD__) || defined(__DragonFly__)
- const char *straddr;
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
- if (!PyBytes_Check(args)) {
- PyErr_Format(PyExc_OSError, "%s: "
- "wrong format", caller);
+#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+ unsigned short dev = _BT_HCI_MEMB(addr, dev);
+ if (!PyArg_ParseTuple(args, "H", &dev)) {
+ PyErr_Format(PyExc_OSError,
+ "%s(): wrong format", caller);
return 0;
}
- straddr = PyBytes_AS_STRING(args);
- if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0)
- return 0;
+ _BT_HCI_MEMB(addr, dev) = dev;
#elif defined(__FreeBSD__)
- _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyBytes_Check(args)) {
PyErr_Format(PyExc_OSError, "%s: "
"wrong node format", caller);
strncpy(_BT_HCI_MEMB(addr, node), straddr,
sizeof(_BT_HCI_MEMB(addr, node)));
#else
- _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
- unsigned short dev = _BT_HCI_MEMB(addr, dev);
- if (!PyArg_ParseTuple(args, "H", &dev)) {
- PyErr_Format(PyExc_OSError,
- "%s(): wrong format", caller);
+ const char *straddr;
+ if (!PyBytes_Check(args)) {
+ PyErr_Format(PyExc_OSError, "%s: "
+ "wrong format", caller);
return 0;
}
- _BT_HCI_MEMB(addr, dev) = dev;
+ straddr = PyBytes_AS_STRING(args);
+ if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0)
+ return 0;
#endif
*len_ret = sizeof *addr;
return 1;
case BTPROTO_HCI:
*len_ret = sizeof (struct sockaddr_hci);
return 1;
-#if !defined(__FreeBSD__)
+#endif /* BTPROTO_HCI */
+#ifdef BTPROTO_SCO
case BTPROTO_SCO:
*len_ret = sizeof (struct sockaddr_sco);
return 1;
-#endif /* !__FreeBSD__ */
-#endif /* BTPROTO_HCI */
+#endif /* BTPROTO_SCO */
default:
PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
"unknown BT protocol");
#ifdef BTPROTO_HCI
ADD_INT_MACRO(m, BTPROTO_HCI);
ADD_INT_MACRO(m, SOL_HCI);
-#if !defined(__NetBSD__) && !defined(__DragonFly__)
+#if defined(HCI_FILTER)
ADD_INT_MACRO(m, HCI_FILTER);
-#if !defined(__FreeBSD__)
+#endif
+#if defined(HCI_TIME_STAMP)
ADD_INT_MACRO(m, HCI_TIME_STAMP);
ADD_INT_MACRO(m, HCI_DATA_DIR);
-#endif /* !__FreeBSD__ */
-#endif /* !__NetBSD__ && !__DragonFly__ */
+#endif
#endif /* BTPROTO_HCI */
#ifdef BTPROTO_RFCOMM
ADD_INT_MACRO(m, BTPROTO_RFCOMM);