diff --git a/callback_dispatcher.cc b/callback_dispatcher.cc index ec9470c..e5d4b27 100644 --- a/callback_dispatcher.cc +++ b/callback_dispatcher.cc @@ -23,11 +23,19 @@ namespace pEp { proc shutdown ) { + assert(messageToSend); + if (!messageToSend) + throw std::invalid_argument("messageToSend must be set"); + targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown}); } void CallbackDispatcher::remove(::messageToSend_t messageToSend) { + assert(messageToSend); + if (!messageToSend) + throw std::invalid_argument("messageToSend argument needed"); + for (auto target = targets.begin(); target != targets.end(); ++target) { if (target->messageToSend == messageToSend) { targets.erase(target); @@ -40,14 +48,18 @@ namespace pEp { void CallbackDispatcher::on_startup() { - for (auto target : targets) - target.on_startup(); + for (auto target : targets) { + if (target.on_startup) + target.on_startup(); + } } void CallbackDispatcher::on_shutdown() { - for (auto target : targets) - target.on_shutdown(); + for (auto target : targets) { + if (target.on_shutdown) + target.on_shutdown(); + } } void CallbackDispatcher::start_sync() @@ -57,16 +69,20 @@ namespace pEp { &CallbackDispatcher::on_startup, &CallbackDispatcher::on_shutdown); - for (auto target : callback_dispatcher.targets) - target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START); + for (auto target : callback_dispatcher.targets) { + if (target.notifyHandshake) + target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_START); + } } void CallbackDispatcher::stop_sync() { pEp::Adapter::shutdown(); - for (auto target : callback_dispatcher.targets) - target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP); + for (auto target : callback_dispatcher.targets) { + if (target.notifyHandshake) + target.notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP); + } } PEP_STATUS CallbackDispatcher::_messageToSend(::message *msg) @@ -76,6 +92,7 @@ namespace pEp { if (!_msg) return PEP_OUT_OF_MEMORY; + assert(target.messageToSend); target.messageToSend(_msg); } @@ -86,17 +103,19 @@ namespace pEp { ::pEp_identity *partner, ::sync_handshake_signal signal) { for (auto target : targets) { - auto _me = ::identity_dup(me); - if (!_me) - return PEP_OUT_OF_MEMORY; - - auto _partner = ::identity_dup(partner); - if (!_partner) { - free_identity(_me); - return PEP_OUT_OF_MEMORY; + if (target.notifyHandshake) { + auto _me = ::identity_dup(me); + if (!_me) + return PEP_OUT_OF_MEMORY; + + auto _partner = ::identity_dup(partner); + if (!_partner) { + free_identity(_me); + return PEP_OUT_OF_MEMORY; + } + + target.notifyHandshake(_me, _partner, signal); } - - target.notifyHandshake(_me, _partner, signal); } return PEP_STATUS_OK;