@ -2,38 +2,13 @@
# include "json-adapter.hh"
# include <thread>
# include <pEp/keymanagement.h>
# include <pEp/call_with_lock.hh>
# include <pEp/status_to_string.hh> // from libpEpAdapter.
# include <pEp/locked_queue.hh>
# include <pEp/Adapter.hh>
# include <pEp/callback_dispatcher.hh>
namespace pEp {
namespace mini {
typedef std : : unique_ptr < std : : thread > ThreadPtr ;
// keyserver lookup
utility : : locked_queue < pEp_identity * , & free_identity > keyserver_lookup_queue ;
PEP_SESSION keyserver_lookup_session = nullptr ; // FIXME: what if another adapter started it already?
ThreadPtr keyserver_lookup_thread ;
int injectIdentity ( pEp_identity * idy )
{
keyserver_lookup_queue . push_back ( idy ) ;
return 0 ;
}
pEp_identity * retrieveNextIdentity ( void * /*userdata*/ )
{
return keyserver_lookup_queue . pop_front ( ) ;
}
struct dummy_t { } ;
dummy_t dummy { } ;
void startSync ( )
{
pEp : : callback_dispatcher . start_sync ( ) ;
@ -46,63 +21,6 @@ void stopSync()
}
void startKeyserverLookup ( )
{
if ( keyserver_lookup_session )
throw std : : runtime_error ( " KeyserverLookup already started. " ) ;
PEP_STATUS status = pEp : : call_with_lock ( & init , & keyserver_lookup_session , pEp : : CallbackDispatcher : : messageToSend , : : pEp : : Adapter : : _inject_sync_event , pEp : : Adapter : : _ensure_passphrase ) ;
if ( status ! = PEP_STATUS_OK | | keyserver_lookup_session = = nullptr )
{
throw std : : runtime_error ( " Cannot create keyserver lookup session! status: " + : : pEp : : status_to_string ( status ) ) ;
}
keyserver_lookup_queue . clear ( ) ;
status = register_examine_function ( keyserver_lookup_session ,
examineIdentity ,
& keyserver_lookup_session // nullptr is not accepted, so any dummy ptr is used here
) ;
if ( status ! = PEP_STATUS_OK )
throw std : : runtime_error ( " Cannot register keyserver lookup callbacks! status: " + : : pEp : : status_to_string ( status ) ) ;
keyserver_lookup_thread . reset ( new std : : thread ( & keyserverLookupThreadRoutine , & keyserver_lookup_session /* just a dummy */ ) ) ;
}
void stopKeyserverLookup ( )
{
// No keyserver lookup session active
if ( keyserver_lookup_session = = nullptr )
return ;
keyserver_lookup_queue . push_front ( NULL ) ;
keyserver_lookup_thread - > join ( ) ;
// there is no unregister_examine_callback() function. hum...
keyserver_lookup_queue . clear ( ) ;
pEp : : call_with_lock ( & release , keyserver_lookup_session ) ;
keyserver_lookup_session = nullptr ;
}
int examineIdentity ( pEp_identity * idy , void * obj )
{
// JsonAdapter* ja = static_cast<JsonAdapter*>(obj);
return injectIdentity ( idy ) ;
}
void * keyserverLookupThreadRoutine ( void * arg )
{
PEP_STATUS status = do_keymanagement (
& retrieveNextIdentity ,
arg ) ; // does the whole work
keyserver_lookup_queue . clear ( ) ;
return ( void * ) status ;
}
Adapter & Adapter : : createInstance ( )
{
return dynamic_cast < Adapter & > ( JsonAdapter : : createInstance ( new Adapter ( ) ) ) ;