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