gh-85302: Add support for BTPROTO_SCO on FreeBSD (GH-131981)
BTPROTO_SCO has been supported on FreeBSD since 2008.
This commit is contained in:
parent
26ae05e95c
commit
e5f8b2c703
@ -164,8 +164,10 @@ created. Socket addresses are represented as follows:
|
|||||||
|
|
||||||
- :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a
|
- :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a
|
||||||
:class:`bytes` object containing the Bluetooth address in a
|
:class:`bytes` object containing the Bluetooth address in a
|
||||||
string format. (ex. ``b'12:23:34:45:56:67'``) This protocol is not
|
string format. (ex. ``b'12:23:34:45:56:67'``)
|
||||||
supported under FreeBSD.
|
|
||||||
|
.. versionchanged:: next
|
||||||
|
FreeBSD support added.
|
||||||
|
|
||||||
- :const:`AF_ALG` is a Linux-only socket based interface to Kernel
|
- :const:`AF_ALG` is a Linux-only socket based interface to Kernel
|
||||||
cryptography. An algorithm socket is configured with a tuple of two to four
|
cryptography. An algorithm socket is configured with a tuple of two to four
|
||||||
|
@ -2620,9 +2620,7 @@ class BasicBluetoothTest(unittest.TestCase):
|
|||||||
socket.BTPROTO_HCI
|
socket.BTPROTO_HCI
|
||||||
socket.SOL_HCI
|
socket.SOL_HCI
|
||||||
socket.BTPROTO_L2CAP
|
socket.BTPROTO_L2CAP
|
||||||
|
socket.BTPROTO_SCO
|
||||||
if not sys.platform.startswith("freebsd"):
|
|
||||||
socket.BTPROTO_SCO
|
|
||||||
|
|
||||||
def testCreateRfcommSocket(self):
|
def testCreateRfcommSocket(self):
|
||||||
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) as s:
|
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) as s:
|
||||||
@ -2638,8 +2636,7 @@ class BasicBluetoothTest(unittest.TestCase):
|
|||||||
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI) as s:
|
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI) as s:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform == "win32" or sys.platform.startswith("freebsd"),
|
@unittest.skipIf(sys.platform == "win32", "windows does not support SCO sockets")
|
||||||
"windows and freebsd do not support SCO sockets")
|
|
||||||
def testCreateScoSocket(self):
|
def testCreateScoSocket(self):
|
||||||
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_SCO) as s:
|
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_SCO) as s:
|
||||||
pass
|
pass
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
Add support for :data:`~socket.BTPROTO_SCO` in sockets on FreeBSD.
|
@ -466,6 +466,7 @@ remove_unusable_flags(PyObject *m)
|
|||||||
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
|
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
|
||||||
#define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
|
#define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
|
||||||
#define BTPROTO_HCI BLUETOOTH_PROTO_HCI
|
#define BTPROTO_HCI BLUETOOTH_PROTO_HCI
|
||||||
|
#define BTPROTO_SCO BLUETOOTH_PROTO_SCO
|
||||||
#define SOL_HCI SOL_HCI_RAW
|
#define SOL_HCI SOL_HCI_RAW
|
||||||
#define HCI_FILTER SO_HCI_RAW_FILTER
|
#define HCI_FILTER SO_HCI_RAW_FILTER
|
||||||
#define sockaddr_l2 sockaddr_l2cap
|
#define sockaddr_l2 sockaddr_l2cap
|
||||||
@ -474,6 +475,7 @@ remove_unusable_flags(PyObject *m)
|
|||||||
#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
|
#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
|
||||||
#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
|
#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
|
||||||
#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
|
#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
|
||||||
|
#define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
|
||||||
#elif defined(__NetBSD__) || defined(__DragonFly__)
|
#elif defined(__NetBSD__) || defined(__DragonFly__)
|
||||||
#define sockaddr_l2 sockaddr_bt
|
#define sockaddr_l2 sockaddr_bt
|
||||||
#define sockaddr_rc sockaddr_bt
|
#define sockaddr_rc sockaddr_bt
|
||||||
@ -1536,15 +1538,15 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
|
|||||||
return ret;
|
return ret;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif /* BTPROTO_HCI */
|
||||||
|
|
||||||
#if !defined(__FreeBSD__)
|
#ifdef BTPROTO_SCO
|
||||||
case BTPROTO_SCO:
|
case BTPROTO_SCO:
|
||||||
{
|
{
|
||||||
struct sockaddr_sco *a = (struct sockaddr_sco *) addr;
|
struct sockaddr_sco *a = (struct sockaddr_sco *) addr;
|
||||||
return makebdaddr(&_BT_SCO_MEMB(a, bdaddr));
|
return makebdaddr(&_BT_SCO_MEMB(a, bdaddr));
|
||||||
}
|
}
|
||||||
#endif /* !__FreeBSD__ */
|
#endif /* BTPROTO_SCO */
|
||||||
#endif /* BTPROTO_HCI */
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
@ -2156,7 +2158,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
|||||||
*len_ret = sizeof *addr;
|
*len_ret = sizeof *addr;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#if !defined(__FreeBSD__)
|
#endif /* BTPROTO_HCI */
|
||||||
|
#ifdef BTPROTO_SCO
|
||||||
case BTPROTO_SCO:
|
case BTPROTO_SCO:
|
||||||
{
|
{
|
||||||
const char *straddr;
|
const char *straddr;
|
||||||
@ -2176,8 +2179,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
|||||||
*len_ret = sizeof *addr;
|
*len_ret = sizeof *addr;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif /* !__FreeBSD__ */
|
#endif /* BTPROTO_SCO */
|
||||||
#endif /* BTPROTO_HCI */
|
|
||||||
default:
|
default:
|
||||||
PyErr_Format(PyExc_OSError,
|
PyErr_Format(PyExc_OSError,
|
||||||
"%s(): unknown Bluetooth protocol", caller);
|
"%s(): unknown Bluetooth protocol", caller);
|
||||||
@ -2732,11 +2734,11 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
|
|||||||
case BTPROTO_HCI:
|
case BTPROTO_HCI:
|
||||||
*len_ret = sizeof (struct sockaddr_hci);
|
*len_ret = sizeof (struct sockaddr_hci);
|
||||||
return 1;
|
return 1;
|
||||||
#if !defined(__FreeBSD__)
|
#endif /* BTPROTO_HCI */
|
||||||
|
#ifdef BTPROTO_SCO
|
||||||
case BTPROTO_SCO:
|
case BTPROTO_SCO:
|
||||||
*len_ret = sizeof (struct sockaddr_sco);
|
*len_ret = sizeof (struct sockaddr_sco);
|
||||||
return 1;
|
return 1;
|
||||||
#endif /* !__FreeBSD__ */
|
|
||||||
#endif /* BTPROTO_HCI */
|
#endif /* BTPROTO_HCI */
|
||||||
default:
|
default:
|
||||||
PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
|
PyErr_SetString(PyExc_OSError, "getsockaddrlen: "
|
||||||
|
Loading…
x
Reference in New Issue
Block a user