diff --git a/src/identity.cc b/src/identity.cc index c0d8e16..e957323 100644 --- a/src/identity.cc +++ b/src/identity.cc @@ -116,6 +116,20 @@ namespace pEp { return _color(rating()); } + Identity Identity::copy() + { + pEp_identity *dup = ::identity_dup(*this); + if (!dup) + throw bad_alloc(); + + return Identity(dup); + } + + Identity Identity::deepcopy(dict&) + { + return copy(); + } + Identity identity_attr(pEp_identity *&ident) { if (!ident) diff --git a/src/identity.hh b/src/identity.hh index 00aecec..14474e7 100644 --- a/src/identity.hh +++ b/src/identity.hh @@ -56,6 +56,9 @@ namespace pEp { int rating(); int color(); + + Identity copy(); + Identity deepcopy(dict& memo); }; Identity identity_attr(pEp_identity *&ident); diff --git a/src/message.cc b/src/message.cc index c6efac9..47210bd 100644 --- a/src/message.cc +++ b/src/message.cc @@ -164,7 +164,7 @@ namespace pEp { } Message::Message(message *msg) - : _msg(msg) + : _msg(msg, &free_message) { } @@ -312,9 +312,17 @@ namespace pEp { return _color(outgoing_rating()); } - Message Message::deepcopy(dict& memo) + Message Message::copy() { - return Message(_str()); + message *dup = message_dup(*this); + if (!dup) + throw bad_alloc(); + return Message(dup); + } + + Message Message::deepcopy(dict&) + { + return copy(); } Message outgoing_message(Identity me) diff --git a/src/message.hh b/src/message.hh index cecb079..2a9d9ea 100644 --- a/src/message.hh +++ b/src/message.hh @@ -129,7 +129,7 @@ namespace pEp { int outgoing_rating(); int outgoing_color(); Message deepcopy(dict& memo); - Message copy() { return *this; } + Message copy(); }; Message outgoing_message(Identity me); diff --git a/src/message_api.cc b/src/message_api.cc index dc74467..a7b6319 100644 --- a/src/message_api.cc +++ b/src/message_api.cc @@ -23,13 +23,10 @@ namespace pEp { free_stringlist(_extra); _throw_status(status); - if (!_dst || _dst == _src) { - Message dst(src); - return dst; - } + if (!_dst || _dst == _src) + return Message(_src); - Message dst(_dst); - return dst; + return Message(_dst); } boost::python::tuple decrypt_message(Message src) diff --git a/src/pEpmodule.cc b/src/pEpmodule.cc index c51212f..0f4fad2 100644 --- a/src/pEpmodule.cc +++ b/src/pEpmodule.cc @@ -92,7 +92,9 @@ BOOST_PYTHON_MODULE(pEp) (void(Identity::*)(identity_flags_t)) &Identity::flags, "flags (p≡p internal)") .add_property("rating", &Identity::rating, "rating of Identity") - .add_property("color", &Identity::color, "color of Identity"); + .add_property("color", &Identity::color, "color of Identity") + .def("__deepcopy__", &Identity::deepcopy) + .def("__copy__", &Identity::copy); identity_class.attr("PEP_OWN_USERID") = "pEp_own_userId";