OpenSSL.SSL mostly builds cleanly now
diff --git a/OpenSSL/ssl/connection.c b/OpenSSL/ssl/connection.c
index d53f45c..741c130 100755
--- a/OpenSSL/ssl/connection.c
+++ b/OpenSSL/ssl/connection.c
@@ -276,7 +276,7 @@
}
ret = SSL_pending(self->ssl);
- return PyInt_FromLong((long)ret);
+ return PyLong_FromLong((long)ret);
}
static char ssl_Connection_bio_write_doc[] = "\n\
@@ -317,7 +317,7 @@
return NULL;
}
- return PyInt_FromLong((long)ret);
+ return PyLong_FromLong((long)ret);
}
static char ssl_Connection_send_doc[] = "\n\
@@ -352,7 +352,7 @@
err = SSL_get_error(self->ssl, ret);
if (err == SSL_ERROR_NONE)
{
- return PyInt_FromLong((long)ret);
+ return PyLong_FromLong((long)ret);
}
else
{
@@ -429,12 +429,12 @@
if (!PyArg_ParseTuple(args, "i|i:recv", &bufsiz, &flags))
return NULL;
- buf = PyString_FromStringAndSize(NULL, bufsiz);
+ buf = PyBytes_FromStringAndSize(NULL, bufsiz);
if (buf == NULL)
return NULL;
MY_BEGIN_ALLOW_THREADS(self->tstate)
- ret = SSL_read(self->ssl, PyString_AsString(buf), bufsiz);
+ ret = SSL_read(self->ssl, PyBytes_AsString(buf), bufsiz);
MY_END_ALLOW_THREADS(self->tstate)
if (PyErr_Occurred())
@@ -447,7 +447,7 @@
err = SSL_get_error(self->ssl, ret);
if (err == SSL_ERROR_NONE)
{
- if (ret != bufsiz && _PyString_Resize(&buf, ret) < 0)
+ if (ret != bufsiz && _PyBytes_Resize(&buf, ret) < 0)
return NULL;
return buf;
}
@@ -481,11 +481,11 @@
if (!PyArg_ParseTuple(args, "i:bio_read", &bufsiz))
return NULL;
- buf = PyString_FromStringAndSize(NULL, bufsiz);
+ buf = PyBytes_FromStringAndSize(NULL, bufsiz);
if (buf == NULL)
return NULL;
- ret = BIO_read(self->from_ssl, PyString_AsString(buf), bufsiz);
+ ret = BIO_read(self->from_ssl, PyBytes_AsString(buf), bufsiz);
if (PyErr_Occurred())
{
@@ -506,7 +506,7 @@
/*
* Shrink the string to match the number of bytes we actually read.
*/
- if (ret != bufsiz && _PyString_Resize(&buf, ret) < 0)
+ if (ret != bufsiz && _PyBytes_Resize(&buf, ret) < 0)
{
Py_DECREF(buf);
return NULL;
@@ -536,7 +536,7 @@
return NULL;
}
- return PyInt_FromLong((long)ret);
+ return PyLong_FromLong((long)ret);
}
static char ssl_Connection_do_handshake_doc[] = "\n\
@@ -589,7 +589,7 @@
if (!PyArg_ParseTuple(args, ":renegotiate_pending"))
return NULL;
- return PyInt_FromLong((long)SSL_renegotiate_pending(self->ssl));
+ return PyLong_FromLong((long)SSL_renegotiate_pending(self->ssl));
}
#endif
@@ -604,7 +604,7 @@
if (!PyArg_ParseTuple(args, ":total_renegotiations"))
return NULL;
- return PyInt_FromLong(SSL_total_renegotiations(self->ssl));
+ return PyLong_FromLong(SSL_total_renegotiations(self->ssl));
}
static char ssl_Connection_set_accept_state_doc[] = "\n\
@@ -686,11 +686,6 @@
ret = PyEval_CallObject(meth, args);
Py_DECREF(meth);
- if (ret == NULL)
- return NULL;
- if (PyInt_Check(ret) && PyInt_AsLong(ret) != 0)
- return ret;
-
return ret;
}
@@ -820,7 +815,7 @@
lst = PyList_New(0);
while ((ret = SSL_get_cipher_list(self->ssl, idx)) != NULL)
{
- item = PyString_FromString(ret);
+ item = PyText_FromString(ret);
PyList_Append(lst, item);
Py_DECREF(item);
idx++;
@@ -942,7 +937,7 @@
if (!PyArg_ParseTuple(args, ":get_shutdown"))
return NULL;
- return PyInt_FromLong((long)SSL_get_shutdown(self->ssl));
+ return PyLong_FromLong((long)SSL_get_shutdown(self->ssl));
}
static char ssl_Connection_set_shutdown_doc[] = "\n\
@@ -975,7 +970,7 @@
if (!PyArg_ParseTuple(args, ":state_string"))
return NULL;
- return PyString_FromString(SSL_state_string_long(self->ssl));
+ return PyText_FromString(SSL_state_string_long(self->ssl));
}
static char ssl_Connection_client_random_doc[] = "\n\
@@ -993,7 +988,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromStringAndSize( (const char *) self->ssl->s3->client_random, SSL3_RANDOM_SIZE);
+ return PyBytes_FromStringAndSize( (const char *) self->ssl->s3->client_random, SSL3_RANDOM_SIZE);
}
static char ssl_Connection_server_random_doc[] = "\n\
@@ -1011,7 +1006,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromStringAndSize( (const char *) self->ssl->s3->server_random, SSL3_RANDOM_SIZE);
+ return PyBytes_FromStringAndSize( (const char *) self->ssl->s3->server_random, SSL3_RANDOM_SIZE);
}
static char ssl_Connection_master_key_doc[] = "\n\
@@ -1029,7 +1024,7 @@
Py_INCREF(Py_None);
return Py_None;
}
- return PyString_FromStringAndSize( (const char *) self->ssl->session->master_key, self->ssl->session->master_key_length);
+ return PyBytes_FromStringAndSize( (const char *) self->ssl->session->master_key, self->ssl->session->master_key_length);
}
static char ssl_Connection_sock_shutdown_doc[] = "\n\
@@ -1086,7 +1081,7 @@
if (!PyArg_ParseTuple(args, ":want_read"))
return NULL;
- return PyInt_FromLong((long)SSL_want_read(self->ssl));
+ return PyLong_FromLong((long)SSL_want_read(self->ssl));
}
static char ssl_Connection_want_write_doc[] = "\n\
@@ -1101,7 +1096,7 @@
if (!PyArg_ParseTuple(args, ":want_write"))
return NULL;
- return PyInt_FromLong((long)SSL_want_write(self->ssl));
+ return PyLong_FromLong((long)SSL_want_write(self->ssl));
}
/*
@@ -1284,8 +1279,8 @@
ssl_Connection_getattr(ssl_ConnectionObj *self, char *name)
{
PyObject *meth;
-
- meth = Py_FindMethod(ssl_Connection_methods, (PyObject *)self, name);
+
+ meth = ssl_Connection_Type.tp_getattr((PyObject *)self, name);
if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_AttributeError))
{
@@ -1357,8 +1352,7 @@
}
PyTypeObject ssl_Connection_Type = {
- PyObject_HEAD_INIT(NULL)
- 0,
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
"OpenSSL.SSL.Connection",
sizeof(ssl_ConnectionObj),
0,
diff --git a/OpenSSL/ssl/context.c b/OpenSSL/ssl/context.c
index 98cc01c..bfd8ffe 100644
--- a/OpenSSL/ssl/context.c
+++ b/OpenSSL/ssl/context.c
@@ -115,7 +115,7 @@
goto out;
}
- if (!PyString_Check(ret)) {
+ if (!PyBytes_Check(ret)) {
/*
* XXX Returned something that wasn't a string. This is bogus. We'll
* return 0 and OpenSSL will treat it as an error, resulting in an
@@ -125,7 +125,7 @@
goto out;
}
- len = PyString_Size(ret);
+ len = PyBytes_Size(ret);
if (len > maxlen) {
/*
* Returned more than we said they were allowed to return. Just
@@ -135,7 +135,7 @@
len = maxlen;
}
- str = PyString_AsString(ret);
+ str = PyBytes_AsString(ret);
strncpy(buf, str, len);
Py_XDECREF(ret);
@@ -723,7 +723,7 @@
return NULL;
mode = SSL_CTX_get_verify_mode(self->ctx);
- return PyInt_FromLong((long)mode);
+ return PyLong_FromLong((long)mode);
}
static char ssl_Context_get_verify_depth_doc[] = "\n\
@@ -740,7 +740,7 @@
return NULL;
depth = SSL_CTX_get_verify_depth(self->ctx);
- return PyInt_FromLong((long)depth);
+ return PyLong_FromLong((long)depth);
}
static char ssl_Context_load_tmp_dh_doc[] = "\n\
@@ -1042,7 +1042,7 @@
if (!PyArg_ParseTuple(args, "l:set_options", &options))
return NULL;
- return PyInt_FromLong(SSL_CTX_set_options(self->ctx, options));
+ return PyLong_FromLong(SSL_CTX_set_options(self->ctx, options));
}
@@ -1243,8 +1243,7 @@
PyTypeObject ssl_Context_Type = {
- PyObject_HEAD_INIT(NULL)
- 0,
+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
"OpenSSL.SSL.Context",
sizeof(ssl_ContextObj),
0,
diff --git a/OpenSSL/ssl/ssl.c b/OpenSSL/ssl/ssl.c
index 94d4844..00b9617 100644
--- a/OpenSSL/ssl/ssl.c
+++ b/OpenSSL/ssl/ssl.c
@@ -30,7 +30,9 @@
See the file RATIONALE for a short explanation of why this module was written.\n\
";
+#ifndef PY3
void **crypto_API;
+#endif
int _pyOpenSSL_tstate_key;
@@ -48,34 +50,51 @@
{ NULL, NULL }
};
+#ifdef PY3
+static struct PyModuleDef sslmodule = {
+ PyModuleDef_HEAD_INIT,
+ "SSL",
+ ssl_doc,
+ -1,
+ ssl_methods
+};
+#endif
+
/*
* Initialize SSL sub module
*
* Arguments: None
* Returns: None
*/
-void
-initSSL(void)
-{
+PyOpenSSL_MODINIT(SSL) {
+ PyObject *module;
+#ifndef PY3
static void *ssl_API[ssl_API_pointers];
PyObject *ssl_api_object;
- PyObject *module;
+
+ import_crypto();
+#endif
SSL_library_init();
ERR_load_SSL_strings();
- import_crypto();
-
- if ((module = Py_InitModule3("SSL", ssl_methods, ssl_doc)) == NULL) {
- return;
+#ifdef PY3
+ module = PyModule_Create(&sslmodule);
+#else
+ module = Py_InitModule3("SSL", ssl_methods, ssl_doc);
+#endif
+ if (module == NULL) {
+ return NULL;
}
+#ifndef PY3
/* Initialize the C API pointer array */
ssl_API[ssl_Context_New_NUM] = (void *)ssl_Context_New;
ssl_API[ssl_Connection_New_NUM] = (void *)ssl_Connection_New;
ssl_api_object = PyCObject_FromVoidPtr((void *)ssl_API, NULL);
if (ssl_api_object != NULL)
PyModule_AddObject(module, "_C_API", ssl_api_object);
+#endif
/* Exceptions */
/*
@@ -177,6 +196,14 @@
_pyOpenSSL_tstate_key = PyThread_create_key();
#endif
- error:
+#ifdef PY3
+ return module;
+#endif
+
+error:
+#ifdef PY3
+ return NULL;
+#else
;
+#endif
}