@@ -473,37 +473,42 @@ remove_unusable_flags(PyObject *m)
473473# define SOCKETCLOSE close
474474#endif
475475
476- #if (defined(HAVE_BLUETOOTH_H ) || defined(HAVE_BLUETOOTH_BLUETOOTH_H )) && !defined(__NetBSD__ ) && !defined(__DragonFly__ )
477- #define USE_BLUETOOTH 1
478- #if defined(__FreeBSD__ )
479- #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
480- #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
481- #define BTPROTO_HCI BLUETOOTH_PROTO_HCI
482- #define SOL_HCI SOL_HCI_RAW
483- #define HCI_FILTER SO_HCI_RAW_FILTER
484- #define sockaddr_l2 sockaddr_l2cap
485- #define sockaddr_rc sockaddr_rfcomm
486- #define hci_dev hci_node
487- #define _BT_L2_MEMB (sa , memb ) ((sa)->l2cap_##memb)
488- #define _BT_RC_MEMB (sa , memb ) ((sa)->rfcomm_##memb)
489- #define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
490- #elif defined(__NetBSD__ ) || defined(__DragonFly__ )
491- #define sockaddr_l2 sockaddr_bt
492- #define sockaddr_rc sockaddr_bt
493- #define sockaddr_hci sockaddr_bt
494- #define sockaddr_sco sockaddr_bt
495- #define SOL_HCI BTPROTO_HCI
496- #define HCI_DATA_DIR SO_HCI_DIRECTION
497- #define _BT_L2_MEMB (sa , memb ) ((sa)->bt_##memb)
498- #define _BT_RC_MEMB (sa , memb ) ((sa)->bt_##memb)
499- #define _BT_HCI_MEMB (sa , memb ) ((sa)->bt_##memb)
500- #define _BT_SCO_MEMB (sa , memb ) ((sa)->bt_##memb)
501- #else
502- #define _BT_L2_MEMB (sa , memb ) ((sa)->l2_##memb)
503- #define _BT_RC_MEMB (sa , memb ) ((sa)->rc_##memb)
504- #define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
505- #define _BT_SCO_MEMB (sa , memb ) ((sa)->sco_##memb)
506- #endif
476+ #if defined(HAVE_BLUETOOTH_H ) || defined(HAVE_BLUETOOTH_BLUETOOTH_H )
477+ # define USE_BLUETOOTH 1
478+ # if defined(HAVE_BLUETOOTH_BLUETOOTH_H ) // Linux
479+ # define _BT_L2_MEMB (sa , memb ) ((sa)->l2_##memb)
480+ # define _BT_RC_MEMB (sa , memb ) ((sa)->rc_##memb)
481+ # define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
482+ # define _BT_SCO_MEMB (sa , memb ) ((sa)->sco_##memb)
483+ # elif defined(__FreeBSD__ )
484+ # define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
485+ # define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
486+ # define BTPROTO_HCI BLUETOOTH_PROTO_HCI
487+ # define SOL_HCI SOL_HCI_RAW
488+ # define HCI_FILTER SO_HCI_RAW_FILTER
489+ # define sockaddr_l2 sockaddr_l2cap
490+ # define sockaddr_rc sockaddr_rfcomm
491+ # define hci_dev hci_node
492+ # define _BT_L2_MEMB (sa , memb ) ((sa)->l2cap_##memb)
493+ # define _BT_RC_MEMB (sa , memb ) ((sa)->rfcomm_##memb)
494+ # define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
495+ # else // NetBSD, DragonFly BSD
496+ # define sockaddr_l2 sockaddr_bt
497+ # define sockaddr_rc sockaddr_bt
498+ # define sockaddr_hci sockaddr_bt
499+ # define sockaddr_sco sockaddr_bt
500+ # define bt_l2 bt
501+ # define bt_rc bt
502+ # define bt_sco bt
503+ # define bt_hci bt
504+ # define bt_cid bt_channel
505+ # define SOL_HCI BTPROTO_HCI
506+ # define HCI_DATA_DIR SO_HCI_DIRECTION
507+ # define _BT_L2_MEMB (sa , memb ) ((sa)->bt_##memb)
508+ # define _BT_RC_MEMB (sa , memb ) ((sa)->bt_##memb)
509+ # define _BT_HCI_MEMB (sa , memb ) ((sa)->bt_##memb)
510+ # define _BT_SCO_MEMB (sa , memb ) ((sa)->bt_##memb)
511+ # endif
507512#endif
508513
509514#ifdef MS_WINDOWS_DESKTOP
@@ -1483,16 +1488,16 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
14831488 case BTPROTO_HCI :
14841489 {
14851490 struct sockaddr_hci * a = (struct sockaddr_hci * ) addr ;
1486- #if defined(__NetBSD__ ) || defined(__DragonFly__ )
1487- return makebdaddr (& _BT_HCI_MEMB (a , bdaddr ));
1491+ #if defined(HAVE_BLUETOOTH_BLUETOOTH_H )
1492+ PyObject * ret = NULL ;
1493+ ret = Py_BuildValue ("i" , _BT_HCI_MEMB (a , dev ));
1494+ return ret ;
14881495#elif defined(__FreeBSD__ )
1489- char * node = _BT_HCI_MEMB (a , node );
1496+ const char * node = _BT_HCI_MEMB (a , node );
14901497 size_t len = strnlen (node , sizeof (_BT_HCI_MEMB (a , node )));
14911498 return PyBytes_FromStringAndSize (node , (Py_ssize_t )len );
14921499#else
1493- PyObject * ret = NULL ;
1494- ret = Py_BuildValue ("i" , _BT_HCI_MEMB (a , dev ));
1495- return ret ;
1500+ return makebdaddr (& _BT_HCI_MEMB (a , bdaddr ));
14961501#endif
14971502 }
14981503
@@ -2061,19 +2066,16 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20612066 {
20622067 struct sockaddr_hci * addr = & addrbuf -> bt_hci ;
20632068 memset (addr , 0 , sizeof (struct sockaddr_hci ));
2064- #if defined(__NetBSD__ ) || defined(__DragonFly__ )
2065- const char * straddr ;
20662069 _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
2067- if (!PyBytes_Check (args )) {
2068- PyErr_Format (PyExc_OSError , "%s: "
2069- "wrong format" , caller );
2070+ #if defined(HAVE_BLUETOOTH_BLUETOOTH_H )
2071+ unsigned short dev = _BT_HCI_MEMB (addr , dev );
2072+ if (!PyArg_ParseTuple (args , "H" , & dev )) {
2073+ PyErr_Format (PyExc_OSError ,
2074+ "%s(): wrong format" , caller );
20702075 return 0 ;
20712076 }
2072- straddr = PyBytes_AS_STRING (args );
2073- if (setbdaddr (straddr , & _BT_HCI_MEMB (addr , bdaddr )) < 0 )
2074- return 0 ;
2077+ _BT_HCI_MEMB (addr , dev ) = dev ;
20752078#elif defined(__FreeBSD__ )
2076- _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
20772079 if (!PyBytes_Check (args )) {
20782080 PyErr_Format (PyExc_OSError , "%s: "
20792081 "wrong node format" , caller );
@@ -2094,14 +2096,15 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
20942096 strncpy (_BT_HCI_MEMB (addr , node ), straddr ,
20952097 sizeof (_BT_HCI_MEMB (addr , node )));
20962098#else
2097- _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
2098- unsigned short dev = _BT_HCI_MEMB (addr , dev );
2099- if (!PyArg_ParseTuple (args , "H" , & dev )) {
2100- PyErr_Format (PyExc_OSError ,
2101- "%s(): wrong format" , caller );
2099+ const char * straddr ;
2100+ if (!PyBytes_Check (args )) {
2101+ PyErr_Format (PyExc_OSError , "%s: "
2102+ "wrong format" , caller );
21022103 return 0 ;
21032104 }
2104- _BT_HCI_MEMB (addr , dev ) = dev ;
2105+ straddr = PyBytes_AS_STRING (args );
2106+ if (setbdaddr (straddr , & _BT_HCI_MEMB (addr , bdaddr )) < 0 )
2107+ return 0 ;
21052108#endif
21062109 * len_ret = sizeof * addr ;
21072110 return 1 ;
@@ -2679,12 +2682,12 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
26792682 case BTPROTO_HCI :
26802683 * len_ret = sizeof (struct sockaddr_hci );
26812684 return 1 ;
2682- #if !defined(__FreeBSD__ )
2685+ #endif /* BTPROTO_HCI */
2686+ #ifdef BTPROTO_SCO
26832687 case BTPROTO_SCO :
26842688 * len_ret = sizeof (struct sockaddr_sco );
26852689 return 1 ;
2686- #endif /* !__FreeBSD__ */
2687- #endif /* BTPROTO_HCI */
2690+ #endif /* BTPROTO_SCO */
26882691 default :
26892692 PyErr_SetString (PyExc_OSError , "getsockaddrlen: "
26902693 "unknown BT protocol" );
@@ -7724,13 +7727,13 @@ socket_exec(PyObject *m)
77247727#ifdef BTPROTO_HCI
77257728 ADD_INT_MACRO (m , BTPROTO_HCI );
77267729 ADD_INT_MACRO (m , SOL_HCI );
7727- #if ! defined(__NetBSD__ ) && !defined( __DragonFly__ )
7730+ #if defined(HCI_FILTER )
77287731 ADD_INT_MACRO (m , HCI_FILTER );
7729- #if !defined(__FreeBSD__ )
7732+ #endif
7733+ #if defined(HCI_TIME_STAMP )
77307734 ADD_INT_MACRO (m , HCI_TIME_STAMP );
77317735 ADD_INT_MACRO (m , HCI_DATA_DIR );
7732- #endif /* !__FreeBSD__ */
7733- #endif /* !__NetBSD__ && !__DragonFly__ */
7736+ #endif
77347737#endif /* BTPROTO_HCI */
77357738#ifdef BTPROTO_RFCOMM
77367739 ADD_INT_MACRO (m , BTPROTO_RFCOMM );
0 commit comments