You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.9 KiB

#include <pEp/message.h>
#include <pEp/sync.h>
#include "registry.hh"
#include "context.hh"
class JsonAdapter : public Context
// creates an instance of the JSON adapter. It tries to bind the first available port in the given range
// if chatty==true there is some debug output on stderr, if chatty==false the server is silent.
// only if do_sync== true the keysync thread is stared and the keysync callbacks are registered.
// throws std::runtime_error if no port cannot be bound.
JsonAdapter(const std::string& address, unsigned start_port, unsigned end_port, bool chatty, bool do_sync);
// calls shutdown() on the instance if it is still running().
virtual ~JsonAdapter();
// don't allow copies
JsonAdapter(const JsonAdapter&) = delete;
void operator=(const JsonAdapter&) = delete;
void registerEventListener(const std::string& address, unsigned port, const std::string& securityContext);
void unregisterEventListener(const std::string& address, unsigned port, const std::string& securityContext);
// run the server in another thread and returns immediately.
void run();
// exits gracefully after the given number of seconds.
// if "tv" is NULL it means: exits immediately after _all_ currently processed events have been finished.
void shutdown(struct timeval* tv);
// exit immediately or after the currently processed event has been finished.
//void abort();
// returns "true" after run() was called, until shutdown() or abort() is called.
bool running() const;
unsigned port() const;
const std::string& address() const;
unsigned request_count() const;
// returns 'true' if 's' is the security token created by the function above.
virtual bool verify_security_token(const std::string& s) const override;
virtual void augment(json_spirit::Object& returnObject) override;
unsigned apiVersion();
// returns a version name
std::string version();
static PEP_STATUS messageToSend(void* obj, message* msg);
static PEP_STATUS notifyHandshake(void* obj, pEp_identity* self, pEp_identity* partner, sync_handshake_signal signal);
// BEWARE: msg is 1st parameter, obj is second!!!
static int injectSyncMsg(void* msg, void* obj);
static void* retrieveNextSyncMsg(void* obj, time_t* timeout);
static void* syncThreadRoutine(void* arg);
void startSync();
void stopSync();
static void startKeyserverLookup();
static void stopKeyserverLookup();
static int examineIdentity(pEp_identity*, void* obj);
static pEp_identity* retrieveNextIdentity(void* obj);
static void* keyserverLookupThreadRoutine(void* arg);
// returns the associated log stream (either std::cerr or nulllogger)
std::ostream& Log() const;
struct Internal;
Internal* i; // pimpl for stable interface.
// just for debug:
// returns a string with a pretty-printed JSON array containing the session registry
std::string getSessions();