@@ -379,7 +379,7 @@ dup_socket(SOCKET handle)
379
379
#define SOCKETCLOSE close
380
380
#endif
381
381
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__ )
383
383
#define USE_BLUETOOTH 1
384
384
#if defined(__FreeBSD__ )
385
385
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
@@ -393,11 +393,13 @@ dup_socket(SOCKET handle)
393
393
#define _BT_L2_MEMB (sa , memb ) ((sa)->l2cap_##memb)
394
394
#define _BT_RC_MEMB (sa , memb ) ((sa)->rfcomm_##memb)
395
395
#define _BT_HCI_MEMB (sa , memb ) ((sa)->hci_##memb)
396
- #elif defined(__NetBSD__ )
396
+ #elif defined(__NetBSD__ ) || defined( __DragonFly__ )
397
397
#define sockaddr_l2 sockaddr_bt
398
398
#define sockaddr_rc sockaddr_bt
399
399
#define sockaddr_hci sockaddr_bt
400
400
#define sockaddr_sco sockaddr_bt
401
+ #define SOL_HCI BTPROTO_HCI
402
+ #define HCI_DATA_DIR SO_HCI_DIRECTION
401
403
#define _BT_L2_MEMB (sa , memb ) ((sa)->bt_##memb)
402
404
#define _BT_RC_MEMB (sa , memb ) ((sa)->bt_##memb)
403
405
#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)
1113
1115
case BTPROTO_HCI :
1114
1116
{
1115
1117
struct sockaddr_hci * a = (struct sockaddr_hci * ) addr ;
1118
+ #if defined(__NetBSD__ ) || defined(__DragonFly__ )
1119
+ return makebdaddr (& _BT_HCI_MEMB (a , bdaddr ));
1120
+ #else
1116
1121
PyObject * ret = NULL ;
1117
1122
ret = Py_BuildValue ("i" , _BT_HCI_MEMB (a , dev ));
1118
1123
return ret ;
1124
+ #endif
1119
1125
}
1120
1126
1121
1127
#if !defined(__FreeBSD__ )
@@ -1399,12 +1405,25 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
1399
1405
case BTPROTO_HCI :
1400
1406
{
1401
1407
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
1402
1420
_BT_HCI_MEMB (addr , family ) = AF_BLUETOOTH ;
1403
1421
if (!PyArg_ParseTuple (args , "i" , & _BT_HCI_MEMB (addr , dev ))) {
1404
1422
PyErr_SetString (socket_error , "getsockaddrarg: "
1405
1423
"wrong format" );
1406
1424
return 0 ;
1407
1425
}
1426
+ #endif
1408
1427
* len_ret = sizeof * addr ;
1409
1428
return 1 ;
1410
1429
}
@@ -4544,9 +4563,13 @@ PyInit__socket(void)
4544
4563
PyModule_AddIntConstant (m , "BTPROTO_L2CAP" , BTPROTO_L2CAP );
4545
4564
PyModule_AddIntConstant (m , "BTPROTO_HCI" , BTPROTO_HCI );
4546
4565
PyModule_AddIntConstant (m , "SOL_HCI" , SOL_HCI );
4566
+ #if !defined(__NetBSD__ ) && !defined(__DragonFly__ )
4547
4567
PyModule_AddIntConstant (m , "HCI_FILTER" , HCI_FILTER );
4568
+ #endif
4548
4569
#if !defined(__FreeBSD__ )
4570
+ #if !defined(__NetBSD__ ) && !defined(__DragonFly__ )
4549
4571
PyModule_AddIntConstant (m , "HCI_TIME_STAMP" , HCI_TIME_STAMP );
4572
+ #endif
4550
4573
PyModule_AddIntConstant (m , "HCI_DATA_DIR" , HCI_DATA_DIR );
4551
4574
PyModule_AddIntConstant (m , "BTPROTO_SCO" , BTPROTO_SCO );
4552
4575
#endif
0 commit comments