@@ -379,7 +379,7 @@ dup_socket(SOCKET handle)
379379#define SOCKETCLOSE close
380380#endif
381381
382- #if (defined(HAVE_BLUETOOTH_H ) || defined(HAVE_BLUETOOTH_BLUETOOTH_H )) && !defined(__NetBSD__ )
382+ #if (defined(HAVE_BLUETOOTH_H ) || defined(HAVE_BLUETOOTH_BLUETOOTH_H )) && !defined(__NetBSD__ ) && !defined( __DragonFly__ )
383383#define USE_BLUETOOTH 1
384384#if defined(__FreeBSD__ )
385385#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
@@ -393,11 +393,13 @@ dup_socket(SOCKET handle)
393393#define _BT_L2_MEMB (sa , memb ) ((sa)->l2cap_##memb)
394394#define _BT_RC_MEMB (sa , memb ) ((sa)->rfcomm_##memb)
395395#define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
396- #elif defined(__NetBSD__ )
396+ #elif defined(__NetBSD__ ) || defined( __DragonFly__ )
397397#define sockaddr_l2 sockaddr_bt
398398#define sockaddr_rc sockaddr_bt
399399#define sockaddr_hci sockaddr_bt
400400#define sockaddr_sco sockaddr_bt
401+ #define SOL_HCI BTPROTO_HCI
402+ #define HCI_DATA_DIR SO_HCI_DIRECTION
401403#define _BT_L2_MEMB (sa , memb ) ((sa)->bt_##memb)
402404#define _BT_RC_MEMB (sa , memb ) ((sa)->bt_##memb)
403405#define _BT_HCI_MEMB (sa , memb ) ((sa)->bt_##memb)
@@ -1113,9 +1115,13 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
11131115 case BTPROTO_HCI :
11141116 {
11151117 struct sockaddr_hci * a = (struct sockaddr_hci * ) addr ;
1118+ #if defined(__NetBSD__ ) || defined(__DragonFly__ )
1119+ return makebdaddr (& _BT_HCI_MEMB (a , bdaddr ));
1120+ #else
11161121 PyObject * ret = NULL ;
11171122 ret = Py_BuildValue ("i" , _BT_HCI_MEMB (a , dev ));
11181123 return ret ;
1124+ #endif
11191125 }
11201126
11211127#if !defined(__FreeBSD__ )
@@ -1399,12 +1405,25 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
13991405 case BTPROTO_HCI :
14001406 {
14011407 struct sockaddr_hci * addr = (struct sockaddr_hci * )addr_ret ;
1408+ #if defined(__NetBSD__ ) || defined(__DragonFly__ )
1409+ char * straddr = PyBytes_AS_STRING (args );
1410+
1411+ _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
1412+ if (straddr == NULL ) {
1413+ PyErr_SetString (socket_error , "getsockaddrarg: "
1414+ "wrong format" );
1415+ return 0 ;
1416+ }
1417+ if (setbdaddr (straddr , & _BT_HCI_MEMB (addr , bdaddr )) < 0 )
1418+ return 0 ;
1419+ #else
14021420 _BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
14031421 if (!PyArg_ParseTuple (args , "i" , & _BT_HCI_MEMB (addr , dev ))) {
14041422 PyErr_SetString (socket_error , "getsockaddrarg: "
14051423 "wrong format" );
14061424 return 0 ;
14071425 }
1426+ #endif
14081427 * len_ret = sizeof * addr ;
14091428 return 1 ;
14101429 }
@@ -4544,9 +4563,13 @@ PyInit__socket(void)
45444563 PyModule_AddIntConstant (m , "BTPROTO_L2CAP" , BTPROTO_L2CAP );
45454564 PyModule_AddIntConstant (m , "BTPROTO_HCI" , BTPROTO_HCI );
45464565 PyModule_AddIntConstant (m , "SOL_HCI" , SOL_HCI );
4566+ #if !defined(__NetBSD__ ) && !defined(__DragonFly__ )
45474567 PyModule_AddIntConstant (m , "HCI_FILTER" , HCI_FILTER );
4568+ #endif
45484569#if !defined(__FreeBSD__ )
4570+ #if !defined(__NetBSD__ ) && !defined(__DragonFly__ )
45494571 PyModule_AddIntConstant (m , "HCI_TIME_STAMP" , HCI_TIME_STAMP );
4572+ #endif
45504573 PyModule_AddIntConstant (m , "HCI_DATA_DIR" , HCI_DATA_DIR );
45514574 PyModule_AddIntConstant (m , "BTPROTO_SCO" , BTPROTO_SCO );
45524575#endif
0 commit comments