From bc645f5da22111ef7f0e723a2e2c7d6f6a59a3a9 Mon Sep 17 00:00:00 2001 From: heck Date: Wed, 23 Jun 2021 18:26:10 +0200 Subject: [PATCH] PYADPT-116: refactor blob.data as setter/getter (getter added) --- src/pEp/_pEp/message.cc | 42 ++++++++++++++++++++++++----------------- src/pEp/_pEp/message.hh | 6 +++++- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/pEp/_pEp/message.cc b/src/pEp/_pEp/message.cc index ffdcca7..11bd51a 100644 --- a/src/pEp/_pEp/message.cc +++ b/src/pEp/_pEp/message.cc @@ -34,24 +34,8 @@ namespace pEp { if (!_bl) throw bad_alloc(); - Py_buffer src; - int result = PyObject_GetBuffer(data.ptr(), &src, PyBUF_CONTIG_RO); - if (result) - throw invalid_argument("need a contiguous buffer to read"); - - char *mem = (char *) malloc(src.len); - if (!mem) { - PyBuffer_Release(&src); - throw bad_alloc(); - } - - memcpy(mem, src.buf, src.len); - free(_bl->value); - _bl->size = src.len; - _bl->value = mem; - - PyBuffer_Release(&src); + this->data(data); this->mime_type(mime_type); this->filename(filename); } @@ -110,6 +94,30 @@ namespace pEp { return PyBuffer_FillInfo(view, self, bl->value, bl->size, 0, flags); } + object Message::Blob::data() { + return object(handle<>(PyBytes_FromString(_bl->value))); + } + + void Message::Blob::data(object data) { + Py_buffer src; + int result = PyObject_GetBuffer(data.ptr(), &src, PyBUF_CONTIG_RO); + if (result) + throw invalid_argument("need a contiguous buffer to read"); + + char *mem = (char *) malloc(src.len); + if (!mem) { + PyBuffer_Release(&src); + throw bad_alloc(); + } + + memcpy(mem, src.buf, src.len); + free(_bl->value); + _bl->size = src.len; + _bl->value = mem; + + PyBuffer_Release(&src); + } + string Message::Blob::decode(string encoding) { if (encoding == "") { string _mime_type = _bl->mime_type ? _bl->mime_type : ""; diff --git a/src/pEp/_pEp/message.hh b/src/pEp/_pEp/message.hh index 5eba845..af6df38 100644 --- a/src/pEp/_pEp/message.hh +++ b/src/pEp/_pEp/message.hh @@ -59,6 +59,10 @@ namespace pEp { size_t size() { return _bl->size; } + object data(); + + void data(object data); + string decode(string encoding); string decode() { return decode(""); } @@ -191,4 +195,4 @@ namespace pEp { } /* namespace PythonAdapter */ } /* namespace pEp */ -#endif /* MESSAGE_HH */ \ No newline at end of file +#endif /* MESSAGE_HH */