diff options
author | Giampaolo Rodola <g.rodola@gmail.com> | 2019-03-28 14:20:30 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-28 14:20:30 (GMT) |
commit | 3eca28c61363a03b81b9fb12775490d6e42d8ecf (patch) | |
tree | c1f4488531517a141f47bb5bc688494bee69b61e | |
parent | 8abd7c7e37714ce0c42f871f81e52f14c155d1bd (diff) | |
download | cpython-3eca28c61363a03b81b9fb12775490d6e42d8ecf.zip cpython-3eca28c61363a03b81b9fb12775490d6e42d8ecf.tar.gz cpython-3eca28c61363a03b81b9fb12775490d6e42d8ecf.tar.bz2 |
bpo-29515: add missing socket.IPPROTO_* constants on Windows (GH-12183)
-rw-r--r-- | Lib/test/test_socket.py | 19 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst | 27 | ||||
-rw-r--r-- | Modules/socketmodule.c | 47 |
3 files changed, 92 insertions, 1 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 08c7cde..8a990ea 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -867,6 +867,8 @@ class GeneralModuleTests(unittest.TestCase): def testCrucialConstants(self): # Testing for mission critical constants socket.AF_INET + if socket.has_ipv6: + socket.AF_INET6 socket.SOCK_STREAM socket.SOCK_DGRAM socket.SOCK_RAW @@ -875,6 +877,23 @@ class GeneralModuleTests(unittest.TestCase): socket.SOL_SOCKET socket.SO_REUSEADDR + def testCrucialIpProtoConstants(self): + socket.IPPROTO_TCP + socket.IPPROTO_UDP + if socket.has_ipv6: + socket.IPPROTO_IPV6 + + @unittest.skipUnless(os.name == "nt", "Windows specific") + def testWindowsSpecificConstants(self): + socket.IPPROTO_ICLFXBM + socket.IPPROTO_ST + socket.IPPROTO_CBT + socket.IPPROTO_IGP + socket.IPPROTO_RDP + socket.IPPROTO_PGM + socket.IPPROTO_L2TP + socket.IPPROTO_SCTP + def testHostnameRes(self): # Testing hostname resolution mechanisms hostname = socket.gethostname() diff --git a/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst b/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst new file mode 100644 index 0000000..2f3f099 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2019-03-05-18-09-43.bpo-29515.vwUTv0.rst @@ -0,0 +1,27 @@ +Add the following socket module constants on Windows: +IPPROTO_AH +IPPROTO_CBT +IPPROTO_DSTOPTS +IPPROTO_EGP +IPPROTO_ESP +IPPROTO_FRAGMENT +IPPROTO_GGP +IPPROTO_HOPOPTS +IPPROTO_ICLFXBM +IPPROTO_ICMPV6 +IPPROTO_IDP +IPPROTO_IGMP +IPPROTO_IGP +IPPROTO_IPV4 +IPPROTO_IPV6 +IPPROTO_L2TP +IPPROTO_MAX +IPPROTO_ND +IPPROTO_NONE +IPPROTO_PGM +IPPROTO_PIM +IPPROTO_PUP +IPPROTO_RDP +IPPROTO_ROUTING +IPPROTO_SCTP +IPPROTO_ST diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index b48f8a9..c024542 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -309,6 +309,40 @@ http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82& # include <fcntl.h> # endif +/* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */ +#ifdef MS_WINDOWS +#define IPPROTO_ICMP IPPROTO_ICMP +#define IPPROTO_IGMP IPPROTO_IGMP +#define IPPROTO_GGP IPPROTO_GGP +#define IPPROTO_TCP IPPROTO_TCP +#define IPPROTO_PUP IPPROTO_PUP +#define IPPROTO_UDP IPPROTO_UDP +#define IPPROTO_IDP IPPROTO_IDP +#define IPPROTO_ND IPPROTO_ND +#define IPPROTO_RAW IPPROTO_RAW +#define IPPROTO_MAX IPPROTO_MAX +#define IPPROTO_HOPOPTS IPPROTO_HOPOPTS +#define IPPROTO_IPV4 IPPROTO_IPV4 +#define IPPROTO_IPV6 IPPROTO_IPV6 +#define IPPROTO_ROUTING IPPROTO_ROUTING +#define IPPROTO_FRAGMENT IPPROTO_FRAGMENT +#define IPPROTO_ESP IPPROTO_ESP +#define IPPROTO_AH IPPROTO_AH +#define IPPROTO_ICMPV6 IPPROTO_ICMPV6 +#define IPPROTO_NONE IPPROTO_NONE +#define IPPROTO_DSTOPTS IPPROTO_DSTOPTS +#define IPPROTO_EGP IPPROTO_EGP +#define IPPROTO_PIM IPPROTO_PIM +#define IPPROTO_ICLFXBM IPPROTO_ICLFXBM // WinSock2 only +#define IPPROTO_ST IPPROTO_ST // WinSock2 only +#define IPPROTO_CBT IPPROTO_CBT // WinSock2 only +#define IPPROTO_IGP IPPROTO_IGP // WinSock2 only +#define IPPROTO_RDP IPPROTO_RDP // WinSock2 only +#define IPPROTO_PGM IPPROTO_PGM // WinSock2 only +#define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only +#define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only +#endif /* MS_WINDOWS */ + /* Provides the IsWindows7SP1OrGreater() function */ #include <versionhelpers.h> @@ -356,7 +390,7 @@ remove_unusable_flags(PyObject *m) for (int i=0; i<sizeof(win_runtime_flags)/sizeof(FlagRuntimeInfo); i++) { info.dwBuildNumber = win_runtime_flags[i].build_number; - /* greater than or equal to the specified version? + /* greater than or equal to the specified version? Compatibility Mode will not cheat VerifyVersionInfo(...) */ if (VerifyVersionInfo( &info, @@ -7659,6 +7693,17 @@ PyInit__socket(void) PyModule_AddIntMacro(m, IPPROTO_MAX); #endif +#ifdef MS_WINDOWS + PyModule_AddIntMacro(m, IPPROTO_ICLFXBM); + PyModule_AddIntMacro(m, IPPROTO_ST); + PyModule_AddIntMacro(m, IPPROTO_CBT); + PyModule_AddIntMacro(m, IPPROTO_IGP); + PyModule_AddIntMacro(m, IPPROTO_RDP); + PyModule_AddIntMacro(m, IPPROTO_PGM); + PyModule_AddIntMacro(m, IPPROTO_L2TP); + PyModule_AddIntMacro(m, IPPROTO_SCTP); +#endif + #ifdef SYSPROTO_CONTROL PyModule_AddIntMacro(m, SYSPROTO_CONTROL); #endif |