#ifndef _H_STORAGEMANAGER_
#define _H_STORAGEMANAGER_
#include <list>
#include <Security/multidldb.h>
#include <Security/DLDBListCFPref.h>
#include <Security/Keychains.h>
namespace Security
{
namespace KeychainCore
{
class StorageManager
{
NOCOPY(StorageManager)
public:
StorageManager();
~StorageManager() {}
Keychain make(const char *fullPathName);
void created(const Keychain &keychain);
void lockAll();
void reload(bool force = false);
void add(const Keychain& keychainToAdd);
size_t size();
Keychain at(unsigned int ix);
Keychain operator[](unsigned int ix);
void erase(const Keychain& keychainToRemove);
KCCursor createCursor(const SecKeychainAttributeList *attrList);
KCCursor createCursor(SecItemClass itemClass, const SecKeychainAttributeList *attrList);
Keychain keychain(const DLDbIdentifier &dlDbIdentifier);
Keychain makeKeychain(const DLDbIdentifier &dlDbIdentifier);
void remove(const list<SecKeychainRef>& kcsToRemove); void replace(const list<SecKeychainRef>& newKCList); void convert(const list<SecKeychainRef>& SecKeychainRefList,CssmClient::DLDbList& dldbList);
void login(ConstStringPtr name, ConstStringPtr password);
void login(UInt32 nameLength, const void *name, UInt32 passwordLength, const void *password);
void logout();
void changeLoginPassword(ConstStringPtr oldPassword, ConstStringPtr newPassword);
void changeLoginPassword(UInt32 oldPasswordLength, const void *oldPassword, UInt32 newPasswordLength, const void *newPassword);
private:
typedef map<DLDbIdentifier, Keychain> KeychainMap;
typedef set<KeychainSchema> KeychainSchemaSet;
void addAndNotify(const Keychain& keychainToAdd);
KeychainSchema keychainSchemaFor(const CssmClient::Db &db);
DLDbListCFPref mSavedList;
KeychainMap mKeychains; CssmClient::MultiDLDb mMultiDLDb;
KeychainSchemaSet mKeychainSchemaSet;
};
}
}
#endif