bug+codestyle: Fix compile bugs and adjust code style
Change-Id: I008bb538441c099fa25b8b967fbf23ffce13a220
diff --git a/src/contact-storage.hpp b/src/contact-storage.hpp
new file mode 100644
index 0000000..da13d4b
--- /dev/null
+++ b/src/contact-storage.hpp
@@ -0,0 +1,124 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ * Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
+#ifndef CHRONOS_CONTACT_STORAGE_HPP
+#define CHRONOS_CONTACT_STORAGE_HPP
+
+#include "contact.hpp"
+#include "endorse-collection.pb.h"
+#include <sqlite3.h>
+
+namespace chronos{
+
+class ContactStorage
+{
+
+public:
+ class Error : public std::runtime_error
+ {
+ public:
+ Error(const std::string &what)
+ : std::runtime_error(what)
+ {
+ }
+ };
+
+ ContactStorage(const Name& identity);
+
+ ~ContactStorage()
+ {
+ sqlite3_close(m_db);
+ }
+
+ shared_ptr<Profile>
+ getSelfProfile();
+
+ void
+ addSelfEndorseCertificate(const EndorseCertificate& endorseCertificate);
+
+ void
+ addEndorseCertificate(const EndorseCertificate& endorseCertificate, const Name& identity);
+
+ void
+ updateCollectEndorse(const EndorseCertificate& endorseCertificate);
+
+ void
+ getCollectEndorse(EndorseCollection& endorseCollection);
+
+ void
+ getEndorseList(const Name& identity, std::vector<std::string>& endorseList);
+
+ void
+ removeContact(const Name& identity);
+
+ void
+ addContact(const Contact& contact);
+
+ shared_ptr<Contact>
+ getContact(const Name& identity) const;
+
+ void
+ updateIsIntroducer(const Name& identity, bool isIntroducer);
+
+ void
+ updateAlias(const Name& identity, const std::string& alias);
+
+ void
+ getAllContacts(std::vector<shared_ptr<Contact> >& contacts) const;
+
+ void
+ updateDnsSelfProfileData(const Data& data)
+ {
+ updateDnsData(data.wireEncode(), "N/A", "PROFILE", data.getName().toUri());
+ }
+
+ void
+ updateDnsEndorseOthers(const Data& data, const std::string& endorsee)
+ {
+ updateDnsData(data.wireEncode(), endorsee, "ENDORSEE", data.getName().toUri());
+ }
+
+ void
+ updateDnsOthersEndorse(const Data& data)
+ {
+ updateDnsData(data.wireEncode(), "N/A", "ENDORSED", data.getName().toUri());
+ }
+
+ shared_ptr<Data>
+ getDnsData(const Name& name);
+
+ shared_ptr<Data>
+ getDnsData(const std::string& name, const std::string& type);
+
+private:
+ std::string
+ getDBName();
+
+ void
+ initializeTable(const std::string& tableName, const std::string& sqlCreateStmt);
+
+ bool
+ doesContactExist(const Name& name);
+
+ void
+ updateDnsData(const Block& data,
+ const std::string& name,
+ const std::string& type,
+ const std::string& dataName);
+
+private:
+ Name m_identity;
+
+ sqlite3 *m_db;
+};
+
+}//chronos
+
+#endif // CHRONOS_CONTACT_STORAGE_HPP