// This file is under GNU Affero General Public License 3.0 // see LICENSE.txt #include "user_interface.hh" #include #include "adapter.hh" namespace pEp { namespace PythonAdapter { Adapter::Adapter(bool unregister_this) : flag_unregister(unregister_this) { session(init); } Adapter::~Adapter() { session(release); } PEP_SESSION Adapter::session(session_action action) { lock_guard lock(mtx()); thread_local static PEP_SESSION _session = nullptr; thread_local int booked = 0; PEP_STATUS status = PEP_STATUS_OK; switch (action) { case release: if (booked) --booked; if (!booked && _session) { ::release(_session); _session = nullptr; } break; case none: if (_session) break; case init: ++booked; if (!_session) // status = ::init(&_session, _messageToSend, _inject_sync_event, _ensure_passphrase); // status = ::init(&_session, _messageToSend, _inject_sync_event); break; default: status = PEP_ILLEGAL_VALUE; } if (status) _throw_status(status); return _session; } ::utility::locked_queue< SYNC_EVENT > * Adapter::q = nullptr; bool Adapter::flag_sync_enabled = false; void Adapter::shutdown_sync() { if (queue_active()) queue().push_front(nullptr); flag_sync_enabled = false; } PyObject *Adapter::ui_object(PyObject *value) { lock_guard lock(mtx()); static PyObject *obj = nullptr; if (value) obj = value; return obj; } // int Adapter::_inject_sync_event(SYNC_EVENT ev, void *management) // { // if (!flag_sync_enabled) // return 1; // // if (is_sync_thread(adapter.session())) { // PEP_STATUS status = do_sync_protocol_step(adapter.session(), adapter.ui_object(), ev); // return status == PEP_STATUS_OK ? 0 : 1; // } // // try { // queue().push_back(ev); // } // catch (exception&) { // return 1; // } // return 0; // } } }