|
|
|
@ -15,11 +15,10 @@ namespace pEp {
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
|
|
|
// SESSION
|
|
|
|
|
// ---------------------------------------------------------------------------------------
|
|
|
|
|
// the single thread-local instance of class Session
|
|
|
|
|
// the thread-local instance of class Session
|
|
|
|
|
thread_local Session session{};
|
|
|
|
|
|
|
|
|
|
std::mutex mut{};
|
|
|
|
|
SyncModes Session::_cfg_sync_mode{ SyncModes::Async };
|
|
|
|
|
bool Session::_cfg_adapter_manages_sync_thread{ false };
|
|
|
|
|
::messageToSend_t Session::_cfg_cb_messageToSend{ nullptr };
|
|
|
|
|
::notifyHandshake_t Session::_cfg_cb_notifyHandshake{ nullptr };
|
|
|
|
@ -28,13 +27,13 @@ namespace pEp {
|
|
|
|
|
|
|
|
|
|
Session::Session()
|
|
|
|
|
{
|
|
|
|
|
pEpLog("libpEpAdapter Session-manager created");
|
|
|
|
|
pEpLog("libpEpAdapter: Session-Manager created");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Public/Static
|
|
|
|
|
void Session::initialize(SyncModes sync_mode, bool adapter_manages_sync_thread)
|
|
|
|
|
{
|
|
|
|
|
pEpLog("Initializing session with CallbackDispatcher...");
|
|
|
|
|
pEpLog("libpEpAdapter: Initializing Session-Manager with CallbackDispatcher");
|
|
|
|
|
_init(
|
|
|
|
|
pEp::CallbackDispatcher::messageToSend,
|
|
|
|
|
pEp::CallbackDispatcher::notifyHandshake,
|
|
|
|
@ -49,7 +48,7 @@ namespace pEp {
|
|
|
|
|
::messageToSend_t messageToSend,
|
|
|
|
|
::notifyHandshake_t notifyHandshake)
|
|
|
|
|
{
|
|
|
|
|
pEpLog("Initializing session...");
|
|
|
|
|
pEpLog("libpEpAdapter: Initializing Session-Manager with custom callbacks");
|
|
|
|
|
_init(messageToSend, notifyHandshake, sync_mode, adapter_manages_sync_thread);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -60,26 +59,29 @@ namespace pEp {
|
|
|
|
|
SyncModes sync_mode,
|
|
|
|
|
bool adapter_manages_sync_thread)
|
|
|
|
|
{
|
|
|
|
|
// cache the values for sync-thread session creation
|
|
|
|
|
_cfg_cb_messageToSend = messageToSend;
|
|
|
|
|
_cfg_cb_notifyHandshake = notifyHandshake;
|
|
|
|
|
_cfg_sync_mode = sync_mode;
|
|
|
|
|
_cfg_adapter_manages_sync_thread = adapter_manages_sync_thread;
|
|
|
|
|
::adapter_group_init();
|
|
|
|
|
_is_initialized = true;
|
|
|
|
|
if (!_is_initialized) {
|
|
|
|
|
// cache the values for sync-thread session creation
|
|
|
|
|
_cfg_cb_messageToSend = messageToSend;
|
|
|
|
|
_cfg_cb_notifyHandshake = notifyHandshake;
|
|
|
|
|
|
|
|
|
|
if (sync_mode == SyncModes::Sync) {
|
|
|
|
|
_cfg_cb_inject_sync_event = _cb_inject_sync_event_do_sync_protocol_step;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sync_mode == SyncModes::Async) {
|
|
|
|
|
_cfg_cb_inject_sync_event = _cb_inject_sync_event_enqueue_sync_event;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_cfg_adapter_manages_sync_thread = adapter_manages_sync_thread;
|
|
|
|
|
::adapter_group_init();
|
|
|
|
|
_is_initialized = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Session::_new()
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(mut);
|
|
|
|
|
|
|
|
|
|
if (_cfg_sync_mode == SyncModes::Sync) {
|
|
|
|
|
_cfg_cb_inject_sync_event = _cb_inject_sync_event_do_sync_protocol_step;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_cfg_sync_mode == SyncModes::Async) {
|
|
|
|
|
_cfg_cb_inject_sync_event = _cb_inject_sync_event_enqueue_sync_event;
|
|
|
|
|
}
|
|
|
|
|
pEpLog("libpEpAdapter: Creating new session for current thread");
|
|
|
|
|
|
|
|
|
|
// create
|
|
|
|
|
::PEP_SESSION session_{ nullptr };
|
|
|
|
@ -118,6 +120,7 @@ namespace pEp {
|
|
|
|
|
"libpEpAdapter: No session! Before first use, call session::initialize()");
|
|
|
|
|
} else {
|
|
|
|
|
if (!_session.get()) {
|
|
|
|
|
pEpLog("libpEpAdapter: No existing session for current thread");
|
|
|
|
|
_new();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -212,7 +215,7 @@ namespace pEp {
|
|
|
|
|
{
|
|
|
|
|
pEpLog("called");
|
|
|
|
|
if (_sync_thread.joinable()) {
|
|
|
|
|
pEpLog("sync_is_running - injecting null event");
|
|
|
|
|
pEpLog("libpEpAdapter: sync_is_running - injecting null event");
|
|
|
|
|
inject_sync_shutdown();
|
|
|
|
|
_sync_thread.join();
|
|
|
|
|
pEp::CallbackDispatcher::notifyHandshake(nullptr, nullptr, SYNC_NOTIFY_STOP);
|
|
|
|
|