https://github.com/python/cpython/commit/e5f8b2c7038cb7e84fd657ed90fedf60ae796d2d commit: e5f8b2c7038cb7e84fd657ed90fedf60ae796d2d branch: main author: Serhiy Storchaka <storch...@gmail.com> committer: serhiy-storchaka <storch...@gmail.com> date: 2025-04-11T19:38:17+03:00 summary:
gh-85302: Add support for BTPROTO_SCO on FreeBSD (GH-131981) BTPROTO_SCO has been supported on FreeBSD since 2008. files: A Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst M Doc/library/socket.rst M Lib/test/test_socket.py M Modules/socketmodule.c diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 1bc7f76b5ba694..970698c5f644a2 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -164,8 +164,10 @@ created. Socket addresses are represented as follows: - :const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a :class:`bytes` object containing the Bluetooth address in a - string format. (ex. ``b'12:23:34:45:56:67'``) This protocol is not - supported under FreeBSD. + string format. (ex. ``b'12:23:34:45:56:67'``) + + .. versionchanged:: next + FreeBSD support added. - :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 diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 41885406ec3409..cf46acbaab4b9e 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -2620,9 +2620,7 @@ def testBluetoothConstants(self): socket.BTPROTO_HCI socket.SOL_HCI socket.BTPROTO_L2CAP - - if not sys.platform.startswith("freebsd"): - socket.BTPROTO_SCO + socket.BTPROTO_SCO def testCreateRfcommSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM) as s: @@ -2638,8 +2636,7 @@ def testCreateHciSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_RAW, socket.BTPROTO_HCI) as s: pass - @unittest.skipIf(sys.platform == "win32" or sys.platform.startswith("freebsd"), - "windows and freebsd do not support SCO sockets") + @unittest.skipIf(sys.platform == "win32", "windows does not support SCO sockets") def testCreateScoSocket(self): with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_SCO) as s: pass diff --git a/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst b/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst new file mode 100644 index 00000000000000..aa5c4dfdc72684 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst @@ -0,0 +1 @@ +Add support for :data:`~socket.BTPROTO_SCO` in sockets on FreeBSD. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8f66573d8629cb..22a3a2effe2962 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -466,6 +466,7 @@ remove_unusable_flags(PyObject *m) #define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP #define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM #define BTPROTO_HCI BLUETOOTH_PROTO_HCI +#define BTPROTO_SCO BLUETOOTH_PROTO_SCO #define SOL_HCI SOL_HCI_RAW #define HCI_FILTER SO_HCI_RAW_FILTER #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_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb) #define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb) +#define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb) #elif defined(__NetBSD__) || defined(__DragonFly__) #define sockaddr_l2 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; #endif } +#endif /* BTPROTO_HCI */ -#if !defined(__FreeBSD__) +#ifdef BTPROTO_SCO case BTPROTO_SCO: { struct sockaddr_sco *a = (struct sockaddr_sco *) addr; return makebdaddr(&_BT_SCO_MEMB(a, bdaddr)); } -#endif /* !__FreeBSD__ */ -#endif /* BTPROTO_HCI */ +#endif /* BTPROTO_SCO */ default: PyErr_SetString(PyExc_ValueError, @@ -2156,7 +2158,8 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, *len_ret = sizeof *addr; return 1; } -#if !defined(__FreeBSD__) +#endif /* BTPROTO_HCI */ +#ifdef BTPROTO_SCO case BTPROTO_SCO: { const char *straddr; @@ -2176,8 +2179,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args, *len_ret = sizeof *addr; return 1; } -#endif /* !__FreeBSD__ */ -#endif /* BTPROTO_HCI */ +#endif /* BTPROTO_SCO */ default: PyErr_Format(PyExc_OSError, "%s(): unknown Bluetooth protocol", caller); @@ -2732,11 +2734,11 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret) 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 */ default: PyErr_SetString(PyExc_OSError, "getsockaddrlen: " _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com