Author: Amaury Forgeot d'Arc <[email protected]>
Branch: stdlib-2.7.9
Changeset: r75519:57cdfe00b84e
Date: 2015-01-25 21:23 +0100
http://bitbucket.org/pypy/pypy/changeset/57cdfe00b84e/
Log: Add SSLSocket.compression()
diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py
--- a/pypy/module/_ssl/interp_ssl.py
+++ b/pypy/module/_ssl/interp_ssl.py
@@ -76,6 +76,7 @@
constants["OP_NO_SSLv2"] = SSL_OP_NO_SSLv2
constants["OP_NO_SSLv3"] = SSL_OP_NO_SSLv3
constants["OP_NO_TLSv1"] = SSL_OP_NO_TLSv1
+constants["OP_NO_COMPRESSION"] = SSL_OP_NO_COMPRESSION
constants["HAS_SNI"] = HAS_SNI
constants["HAS_ECDH"] = True # To break the test suite
constants["HAS_NPN"] = HAS_NPN
@@ -536,6 +537,17 @@
return space.wrap(
rffi.charpsize2str(out_ptr[0], intmask(len_ptr[0])))
+ def compression_w(self, space):
+ if not self.ssl:
+ return space.w_None
+ comp_method = libssl_SSL_get_current_compression(self.ssl)
+ if not comp_method or intmask(comp_method[0].c_type) == NID_undef:
+ return space.w_None
+ short_name = libssl_OBJ_nid2sn(comp_method[0].c_type)
+ if not short_name:
+ return space.w_None
+ return space.wrap(rffi.charp2str(short_name))
+
_SSLSocket.typedef = TypeDef(
"_ssl._SSLSocket",
@@ -547,6 +559,7 @@
cipher=interp2app(_SSLSocket.cipher),
shutdown=interp2app(_SSLSocket.shutdown),
selected_npn_protocol = interp2app(_SSLSocket.selected_npn_protocol),
+ compression = interp2app(_SSLSocket.compression_w),
)
diff --git a/rpython/rlib/ropenssl.py b/rpython/rlib/ropenssl.py
--- a/rpython/rlib/ropenssl.py
+++ b/rpython/rlib/ropenssl.py
@@ -81,6 +81,8 @@
SSL_OP_NO_SSLv2 = rffi_platform.ConstantInteger("SSL_OP_NO_SSLv2")
SSL_OP_NO_SSLv3 = rffi_platform.ConstantInteger("SSL_OP_NO_SSLv3")
SSL_OP_NO_TLSv1 = rffi_platform.ConstantInteger("SSL_OP_NO_TLSv1")
+ SSL_OP_NO_COMPRESSION = rffi_platform.ConstantInteger(
+ "SSL_OP_NO_COMPRESSION")
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = rffi_platform.ConstantInteger(
"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS")
HAS_SNI = rffi_platform.Defined("SSL_CTRL_SET_TLSEXT_HOSTNAME")
@@ -177,6 +179,9 @@
('name', rffi.CCHARP),
])
+ COMP_METHOD_st = rffi_platform.Struct(
+ 'struct comp_method_st',
+ [('type', rffi.INT),])
for k, v in rffi_platform.configure(CConfig).items():
globals()[k] = v
@@ -199,6 +204,7 @@
GENERAL_NAMES = rffi.COpaquePtr('GENERAL_NAMES')
GENERAL_NAME = rffi.CArrayPtr(GENERAL_NAME_st)
OBJ_NAME = rffi.CArrayPtr(OBJ_NAME_st)
+COMP_METHOD = rffi.CArrayPtr(COMP_METHOD_st)
HAVE_OPENSSL_RAND = OPENSSL_VERSION_NUMBER >= 0x0090500f
HAVE_OPENSSL_FINISHED = OPENSSL_VERSION_NUMBER >= 0x0090500f
@@ -276,6 +282,7 @@
ssl_external('SSL_get_shutdown', [SSL], rffi.INT)
ssl_external('SSL_set_read_ahead', [SSL, rffi.INT], lltype.Void)
ssl_external('SSL_set_tlsext_host_name', [SSL, rffi.CCHARP], rffi.INT,
macro=True)
+ssl_external('SSL_get_current_compression', [SSL], COMP_METHOD)
ssl_external('SSL_get_peer_certificate', [SSL], X509)
ssl_external('X509_get_subject_name', [X509], X509_NAME)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit