blob: 62a0e8b071de771dbab4d89ba68fd4acaf8900bb [file] [log] [blame]
Yingdi Yuede8eaf2013-10-14 14:07:03 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
2/*
3 * Copyright (c) 2013, Regents of the University of California
4 * Yingdi Yu
5 *
6 * BSD license, See the LICENSE file for more information
7 *
8 * Author: Yingdi Yu <yingdi@cs.ucla.edu>
9 */
10
11#ifndef LINKNDN_CONTACT_STORAGE_H
12#define LINKNDN_CONTACT_STORAGE_H
13
14#include <sqlite3.h>
15#include "trusted-contact.h"
16#include "contact-item.h"
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070017#include "profile-data.h"
18#include <ndn.cxx/security/identity/identity-manager.h>
19#include <ndn.cxx/fields/signature-sha256-with-rsa.h>
Yingdi Yuede8eaf2013-10-14 14:07:03 -070020
21class ContactStorage
22{
23public:
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070024 ContactStorage(ndn::Ptr<ndn::security::IdentityManager> identityManager);
Yingdi Yuede8eaf2013-10-14 14:07:03 -070025
26 ~ContactStorage() {}
27
28 void
Yingdi Yu49eea9f2013-10-17 15:07:17 -070029 setSelfProfileEntry(const ndn::Name& identity, const std::string& profileType, const ndn::Blob& profileValue);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070030
31 ndn::Ptr<Profile>
Yingdi Yu49eea9f2013-10-17 15:07:17 -070032 getSelfProfile(const ndn::Name& identity);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070033
34 void
Yingdi Yuede8eaf2013-10-14 14:07:03 -070035 addTrustedContact(const TrustedContact& trustedContact);
36
37 void
38 addNormalContact(const ContactItem& contactItem);
39
40 std::vector<ndn::Ptr<TrustedContact> >
41 getAllTrustedContacts() const;
42
43 std::vector<ndn::Ptr<ContactItem> >
44 getAllNormalContacts() const;
45
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070046 void
Yingdi Yu49eea9f2013-10-17 15:07:17 -070047 updateProfileData(const ndn::Name& identity) const;
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070048
Yingdi Yuede8eaf2013-10-14 14:07:03 -070049private:
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070050 bool
Yingdi Yu49eea9f2013-10-17 15:07:17 -070051 doesSelfEntryExist(const ndn::Name& identity, const std::string& profileType);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070052
Yingdi Yuede8eaf2013-10-14 14:07:03 -070053 inline bool
54 doesTrustedContactExist(const ndn::Name& name)
55 { return doesContactExist(name, false); }
56
57 inline bool
58 doesNormalContactExist(const ndn::Name& name)
59 { return doesContactExist(name, true); }
60
61 bool
62 doesContactExist(const ndn::Name& name, bool normal);
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070063
64 ndn::Ptr<Profile>
Yingdi Yu49eea9f2013-10-17 15:07:17 -070065 getSelfProfile(const ndn::Name& identity) const;
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070066
67 ndn::Ptr<ProfileData>
68 getSignedSelfProfileData(const ndn::Name& identity,
69 const Profile& profile) const;
Yingdi Yuede8eaf2013-10-14 14:07:03 -070070
71private:
Yingdi Yu0a6b6c52013-10-15 17:54:00 -070072 ndn::Ptr<ndn::security::IdentityManager> m_identityManager;
Yingdi Yuede8eaf2013-10-14 14:07:03 -070073 sqlite3 *m_db;
74};
75
76#endif