From 2debf1e61fd32c40487a8f3c719c670900b33dba Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 1 Apr 2025 18:20:48 +0300 Subject: [PATCH 1/3] gh-85302: Add support for BTPROTO_SCO on FreeBSD BTPROTO_SCO has been supported on FreeBSD since 2008. --- Doc/library/socket.rst | 6 ++++-- Lib/test/test_socket.py | 7 ++----- ...2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst | 1 + Modules/socketmodule.c | 16 ++++++++-------- 4 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2025-04-01-18-24-58.gh-issue-85302.7knfUf.rst 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 cd3497f0274cd6..5019ce58cee50a 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -2619,9 +2619,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: @@ -2637,8 +2635,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 6e44a7ebfd10ae..1145eb189fe115 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1536,15 +1536,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, @@ -2149,7 +2149,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; @@ -2168,8 +2169,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); @@ -2719,11 +2719,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: " From a62570a8439f8918441a872a02cc799adaafab53 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 4 Apr 2025 17:28:12 +0300 Subject: [PATCH 2/3] Define BTPROTO_SCO. --- Modules/socketmodule.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index e24309e3bfdacf..c1f25e7a4f1525 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 From 10ee7ae7f3769fbf328a1dccd08d4b5a33d4dfa0 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Fri, 4 Apr 2025 18:18:27 +0300 Subject: [PATCH 3/3] Define _BT_SCO_MEMB on FreeBSD. --- Modules/socketmodule.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index c1f25e7a4f1525..22a3a2effe2962 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -475,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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy