diff --git a/src/sync_mixin.cc b/src/sync_mixin.cc index 602c90b..e9ab9e0 100644 --- a/src/sync_mixin.cc +++ b/src/sync_mixin.cc @@ -10,7 +10,7 @@ namespace pEp { SyncMixIn::SyncMixIn() { PEP_STATUS status = register_sync_callbacks(session, (void *) this, - _messageToSend, _showHandshake); + _messageToSend, _showHandshake, NULL, NULL); assert(status == PEP_STATUS_OK); } @@ -62,6 +62,29 @@ namespace pEp { } #endif + + int SyncMixIn::inject_sync_msg(void *msg, void *management) + { + SyncMixIn *that = (SyncMixIn *) management; + val = 0; + that->_msg = msg; + setjmp(that->env); + if (!that->val) + do_sync_protocol(session, management); + return 0; + } + + void *SyncMixIn::retrieve_next_sync_msg(void *management) + { + static int twice = 1; + twice = !twice; + SyncMixIn *that = (SyncMixIn *) management; + if (!twice) + return (void *) that->_msg; + longjmp(that->env, 1); + return (void *) 23; + } + void SyncMixIn_callback::_messageToSend(Message msg) { call_method< void >(_self, "messageToSend", msg); diff --git a/src/sync_mixin.hh b/src/sync_mixin.hh index 8dff9f4..6ad0add 100644 --- a/src/sync_mixin.hh +++ b/src/sync_mixin.hh @@ -1,6 +1,7 @@ #pragma once #include "pEpmodule.hh" +#include namespace pEp { namespace PythonAdapter { @@ -26,6 +27,12 @@ namespace pEp { static PEP_STATUS _messageToSend(void *obj, message *msg); static PEP_STATUS _showHandshake(void *obj, pEp_identity *me, pEp_identity *partner); + + static jmp_buf env; + static int val; + static void *_msg; + static int inject_sync_msg(void *msg, void *management); + static void *retrieve_next_sync_msg(void *management); }; class SyncMixIn_callback : public SyncMixIn {