1#include "Python.h" 2#include "../_ssl.h" 3 4#include "openssl/bio.h" 5 6/* BIO_s_mem() to PyBytes 7 */ 8static PyObject * 9_PySSL_BytesFromBIO(_sslmodulestate *state, BIO *bio) 10{ 11 long size; 12 char *data = NULL; 13 size = BIO_get_mem_data(bio, &data); 14 if (data == NULL || size < 0) { 15 PyErr_SetString(PyExc_ValueError, "Not a memory BIO"); 16 return NULL; 17 } 18 return PyBytes_FromStringAndSize(data, size); 19} 20 21/* BIO_s_mem() to PyUnicode 22 */ 23static PyObject * 24_PySSL_UnicodeFromBIO(_sslmodulestate *state, BIO *bio, const char *error) 25{ 26 long size; 27 char *data = NULL; 28 size = BIO_get_mem_data(bio, &data); 29 if (data == NULL || size < 0) { 30 PyErr_SetString(PyExc_ValueError, "Not a memory BIO"); 31 return NULL; 32 } 33 return PyUnicode_DecodeUTF8(data, size, error); 34} 35