Index: configure =================================================================== --- configure (revision 50628) +++ configure (working copy) @@ -4574,7 +4574,7 @@ sys/param.h sys/poll.h sys/select.h sys/socket.h sys/statvfs.h sys/time.h \ sys/times.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \ sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ -bluetooth/bluetooth.h +bluetooth/bluetooth.h linux/irda.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then Index: configure.in =================================================================== --- configure.in (revision 50628) +++ configure.in (working copy) @@ -993,7 +993,7 @@ sys/param.h sys/poll.h sys/select.h sys/socket.h sys/statvfs.h sys/time.h \ sys/times.h sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \ sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ -bluetooth/bluetooth.h) +bluetooth/bluetooth.h linux/irda.h) AC_HEADER_DIRENT AC_HEADER_MAJOR Index: Modules/socketmodule.c =================================================================== --- Modules/socketmodule.c (revision 50628) +++ Modules/socketmodule.c (working copy) @@ -1271,6 +1271,33 @@ } #endif +#ifdef HAVE_IRDA_H + case AF_IRDA: + { + struct sockaddr_irda* addr; + int daddr = 0; + char *service = NULL; + addr=&(s->sock_addr).ir; + if (!PyArg_ParseTuple(args, "is", &daddr, &service)) { + PyErr_SetString(socket_error, "getsockaddrarg: IrDA error"); + return 0; + } +#ifdef HAVE_LINUX_IRDA_H + addr->sir_family = AF_IRDA; + strncpy(addr->sir_name, service, 25); + addr->sir_addr = daddr; + addr->sir_lsap_sel = LSAP_ANY; +#else + addr->irdaAddressFamily = AF_IRDA; + strncpy(addr->irdaServiceName, service, 25); + memcpy(addr->irdaDeviceID, &daddr, 4); +#endif + *addr_ret = (struct sockaddr *) addr; + *len_ret = sizeof *addr; + return 1; + } +#endif + /* More cases here... */ default: @@ -1346,6 +1373,14 @@ } #endif +#ifdef HAVE_IRDA_H + case AF_IRDA: + { + *len_ret = sizeof (struct sockaddr_irda); + return 1; + } +#endif + /* More cases here... */ default: @@ -4041,6 +4076,13 @@ PyModule_AddIntConstant(m, "PACKET_FASTROUTE", PACKET_FASTROUTE); #endif +#ifdef HAVE_IRDA_H + PyModule_AddIntConstant(m, "SOL_IRLMP", SOL_IRLMP); + PyModule_AddIntConstant(m, "IRLMP_ENUMDEVICES", IRLMP_ENUMDEVICES); + PyModule_AddIntConstant(m, "IRLMP_IAS_SET", IRLMP_IAS_SET); + PyModule_AddIntConstant(m, "IRLMP_IAS_QUERY", IRLMP_IAS_QUERY); +#endif + /* Socket types */ PyModule_AddIntConstant(m, "SOCK_STREAM", SOCK_STREAM); PyModule_AddIntConstant(m, "SOCK_DGRAM", SOCK_DGRAM); Index: Modules/socketmodule.h =================================================================== --- Modules/socketmodule.h (revision 50628) +++ Modules/socketmodule.h (working copy) @@ -49,6 +49,17 @@ # include #endif +#if (defined(MS_WINDOWS) || defined(HAVE_LINUX_IRDA_H)) +#define HAVE_IRDA_H +#ifdef HAVE_LINUX_IRDA_H +#include +#include +#else +#include +#define sockaddr_irda _SOCKADDR_IRDA +#endif +#endif + #ifndef Py__SOCKET_H #define Py__SOCKET_H #ifdef __cplusplus @@ -90,6 +101,9 @@ #ifdef HAVE_NETPACKET_PACKET_H struct sockaddr_ll ll; #endif +#ifdef HAVE_IRDA_H + struct sockaddr_irda ir; +#endif } sock_addr_t; /* The object holding a socket. It holds some extra information, Index: pyconfig.h.in =================================================================== --- pyconfig.h.in (revision 50628) +++ pyconfig.h.in (working copy) @@ -46,6 +46,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_BLUETOOTH_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_IRDA_H + /* Define if nice() returns success/failure instead of the new priority. */ #undef HAVE_BROKEN_NICE