#ifndef _MDSSESSION_H_
#define _MDSSESSION_H_ 1
#include <Security/DatabaseSession.h>
#include <Security/handleobject.h>
#include <Security/mds.h>
#include <map>
#include <sys/stat.h>
#include <list>
typedef list<class PluginInfo *> PluginInfoList;
class MDSSession: public DatabaseSession, public HandleObject
{
NOCOPY(MDSSession)
public:
MDSSession (const Guid *inCallerGuid,
const CSSM_MEMORY_FUNCS &inMemoryFunctions);
virtual ~MDSSession ();
void terminate ();
void install ();
void uninstall ();
void GetDbNames(CSSM_NAME_LIST_PTR &outNameList);
void FreeNameList(CSSM_NAME_LIST &inNameList);
void *malloc(size_t size) { return mCssmMemoryFunctions.malloc(size); };
void free(void *addr) { mCssmMemoryFunctions.free(addr); }
void *realloc(void *addr, size_t size) { return mCssmMemoryFunctions.realloc(addr, size); }
private:
bool obtainLock(int timeout = 0);
void releaseLock();
void initializeDatabases();
void updateDatabases();
void scanPluginDirectory();
void removeOutdatedPlugins(const PluginInfoList &pluginList);
void insertNewPlugins(const PluginInfoList &pluginList);
const CssmMemoryFunctions mCssmMemoryFunctions;
Guid mCallerGuid;
bool mCallerGuidPresent;
struct timespec mLastScanTime;
int mLockFd;
};
#endif //_MDSSESSION_H_