Add FreeBSD support for bluetooth sockets.
(SF Patch #888148, reviewed by loewis)
This commit is contained in:
parent
e2879c34a1
commit
81268608bf
|
@ -322,6 +322,24 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
|
||||||
#define SEGMENT_SIZE 65535
|
#define SEGMENT_SIZE 65535
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)
|
||||||
|
#define USE_BLUETOOTH 1
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
|
||||||
|
#define BTPROTO_RFCOMM BLUETOOTH_PROTO_RFCOMM
|
||||||
|
#define sockaddr_l2 sockaddr_l2cap
|
||||||
|
#define sockaddr_rc sockaddr_rfcomm
|
||||||
|
#define _BT_SOCKADDR_MEMB(s, proto) &((s)->sock_addr)
|
||||||
|
#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
|
||||||
|
#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
|
||||||
|
#else
|
||||||
|
#define _BT_SOCKADDRMEMB(s, proto) (&((s)->sock_addr).bt_##proto)
|
||||||
|
#define _BT_L2_MEMB(sa, memb) ((sa)->l2_##memb)
|
||||||
|
#define _BT_RC_MEMB(sa, memb) ((sa)->rc_##memb)
|
||||||
|
#define _BT_SCO_MEMB(sa, memb) ((sa)->sco_##memb)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Constants for getnameinfo()
|
* Constants for getnameinfo()
|
||||||
*/
|
*/
|
||||||
|
@ -1012,18 +1030,18 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
#ifdef USE_BLUETOOTH
|
||||||
case AF_BLUETOOTH:
|
case AF_BLUETOOTH:
|
||||||
{
|
{
|
||||||
switch( s->sock_proto )
|
switch( s->sock_proto )
|
||||||
{
|
{
|
||||||
case BTPROTO_L2CAP:
|
case BTPROTO_L2CAP:
|
||||||
{
|
{
|
||||||
struct sockaddr_l2* addr = (struct sockaddr_l2*) &(s->sock_addr).bt_l2;
|
struct sockaddr_l2* addr = (struct sockaddr_l2*)_BT_SOCKADDR_MEMB(s, l2);
|
||||||
bdaddr_t* bdaddr = &(addr->l2_bdaddr);
|
bdaddr_t* bdaddr = &_BT_L2_MEMB(addr, bdaddr);
|
||||||
|
|
||||||
addr->l2_family = AF_BLUETOOTH;
|
_BT_L2_MEMB(addr, family) = AF_BLUETOOTH;
|
||||||
if( !PyArg_ParseTuple(args, "(iiiiii)i", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5], &addr->l2_psm) )
|
if( !PyArg_ParseTuple(args, "(iiiiii)i", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5], &_BT_L2_MEMB(addr, psm)) )
|
||||||
{
|
{
|
||||||
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1035,11 +1053,11 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
}
|
}
|
||||||
case BTPROTO_RFCOMM:
|
case BTPROTO_RFCOMM:
|
||||||
{
|
{
|
||||||
struct sockaddr_rc* addr = (struct sockaddr_rc*) &(s->sock_addr).bt_rc;
|
struct sockaddr_rc* addr = (struct sockaddr_rc*)_BT_SOCKADDR_MEMB(s, rc);
|
||||||
bdaddr_t* bdaddr = &(addr->rc_bdaddr);
|
bdaddr_t* bdaddr = &_BT_RC_MEMB(addr, bdaddr);
|
||||||
|
|
||||||
addr->rc_family = AF_BLUETOOTH;
|
_BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
|
||||||
if( !PyArg_ParseTuple(args, "(iiiiii)i", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5], &addr->rc_channel) )
|
if( !PyArg_ParseTuple(args, "(iiiiii)i", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5], &_BT_RC_MEMB(addr, channel)) )
|
||||||
{
|
{
|
||||||
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1049,12 +1067,13 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
*len_ret = sizeof *addr;
|
*len_ret = sizeof *addr;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#if !defined(__FreeBSD__)
|
||||||
case BTPROTO_SCO:
|
case BTPROTO_SCO:
|
||||||
{
|
{
|
||||||
struct sockaddr_sco* addr = (struct sockaddr_sco*) &(s->sock_addr).bt_sco;
|
struct sockaddr_sco* addr = (struct sockaddr_sco*)_BT_SOCKADDR_MEMB(s, sco);
|
||||||
bdaddr_t* bdaddr = &(addr->sco_bdaddr);
|
bdaddr_t* bdaddr = &_BT_SCO_MEMB(addr, bdaddr);
|
||||||
|
|
||||||
addr->sco_family = AF_BLUETOOTH;
|
_BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
|
||||||
if( !PyArg_ParseTuple(args, "iiiiii", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5]) )
|
if( !PyArg_ParseTuple(args, "iiiiii", &bdaddr->b[0], &bdaddr->b[1], &bdaddr->b[2], &bdaddr->b[3], &bdaddr->b[4], &bdaddr->b[5]) )
|
||||||
{
|
{
|
||||||
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
PyErr_SetString(socket_error, "getsockaddrarg: wrong format");
|
||||||
|
@ -1065,6 +1084,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
*len_ret = sizeof *addr;
|
*len_ret = sizeof *addr;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol");
|
PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol");
|
||||||
|
@ -1147,7 +1167,7 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
#ifdef USE_BLUETOOTH
|
||||||
case AF_BLUETOOTH:
|
case AF_BLUETOOTH:
|
||||||
{
|
{
|
||||||
switch(s->sock_proto)
|
switch(s->sock_proto)
|
||||||
|
@ -1162,11 +1182,13 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
|
||||||
*len_ret = sizeof (struct sockaddr_rc);
|
*len_ret = sizeof (struct sockaddr_rc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#if !defined(__FreeBSD__)
|
||||||
case BTPROTO_SCO:
|
case BTPROTO_SCO:
|
||||||
{
|
{
|
||||||
*len_ret = sizeof (struct sockaddr_sco);
|
*len_ret = sizeof (struct sockaddr_sco);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
PyErr_SetString(socket_error, "getsockaddrlen: unknown BT protocol");
|
PyErr_SetString(socket_error, "getsockaddrlen: unknown BT protocol");
|
||||||
|
@ -3665,10 +3687,12 @@ init_socket(void)
|
||||||
PyModule_AddIntConstant(m, "AF_ROSE", AF_ROSE);
|
PyModule_AddIntConstant(m, "AF_ROSE", AF_ROSE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
#ifdef USE_BLUETOOTH
|
||||||
PyModule_AddIntConstant(m, "AF_BLUETOOTH", AF_BLUETOOTH);
|
PyModule_AddIntConstant(m, "AF_BLUETOOTH", AF_BLUETOOTH);
|
||||||
PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP);
|
PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP);
|
||||||
|
#if !defined(__FreeBSD__)
|
||||||
PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO);
|
PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO);
|
||||||
|
#endif
|
||||||
PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM);
|
PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM);
|
||||||
PyModule_AddObject(m, "BDADDR_ANY", Py_BuildValue( "iiiiii", 0,0,0,0,0,0 ) );
|
PyModule_AddObject(m, "BDADDR_ANY", Py_BuildValue( "iiiiii", 0,0,0,0,0,0 ) );
|
||||||
PyModule_AddObject(m, "BDADDR_LOCAL", Py_BuildValue( "iiiiii", 0,0,0,0xff,0xff,0xff ) );
|
PyModule_AddObject(m, "BDADDR_LOCAL", Py_BuildValue( "iiiiii", 0,0,0,0xff,0xff,0xff ) );
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# From configure.in Revision: 1.447 .
|
# From configure.in Revision: 1.449 .
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.57 for python 2.4.
|
# Generated by GNU Autoconf 2.57 for python 2.4.
|
||||||
#
|
#
|
||||||
|
@ -4348,6 +4348,7 @@ done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for ac_header in dlfcn.h fcntl.h grp.h limits.h langinfo.h \
|
for ac_header in dlfcn.h fcntl.h grp.h limits.h langinfo.h \
|
||||||
|
@ -4357,7 +4358,8 @@ unistd.h utime.h \
|
||||||
sys/audioio.h sys/bsdtty.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
|
sys/audioio.h sys/bsdtty.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
|
||||||
sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
|
sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
|
||||||
sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
|
sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
|
||||||
sys/resource.h netpacket/packet.h sysexits.h bluetooth/bluetooth.h
|
sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
|
||||||
|
bluetooth/bluetooth.h
|
||||||
do
|
do
|
||||||
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
||||||
|
|
|
@ -918,7 +918,8 @@ unistd.h utime.h \
|
||||||
sys/audioio.h sys/bsdtty.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
|
sys/audioio.h sys/bsdtty.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
|
||||||
sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
|
sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
|
||||||
sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
|
sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
|
||||||
sys/resource.h netpacket/packet.h sysexits.h bluetooth/bluetooth.h)
|
sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \
|
||||||
|
bluetooth/bluetooth.h)
|
||||||
AC_HEADER_DIRENT
|
AC_HEADER_DIRENT
|
||||||
AC_HEADER_MAJOR
|
AC_HEADER_MAJOR
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
/* Define to 1 if you have the <bluetooth/bluetooth.h> header file. */
|
/* Define to 1 if you have the <bluetooth/bluetooth.h> header file. */
|
||||||
#undef HAVE_BLUETOOTH_BLUETOOTH_H
|
#undef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <bluetooth.h> header file. */
|
||||||
|
#undef HAVE_BLUETOOTH_H
|
||||||
|
|
||||||
/* Define if nice() returns success/failure instead of the new priority. */
|
/* Define if nice() returns success/failure instead of the new priority. */
|
||||||
#undef HAVE_BROKEN_NICE
|
#undef HAVE_BROKEN_NICE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue