bug+codestyle: Fix compile bugs and adjust code style
Change-Id: I008bb538441c099fa25b8b967fbf23ffce13a220
diff --git a/src/contact-manager.hpp b/src/contact-manager.hpp
new file mode 100644
index 0000000..d9254d9
--- /dev/null
+++ b/src/contact-manager.hpp
@@ -0,0 +1,293 @@
+/* -*- 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_MANAGER_HPP
+#define CHRONOS_CONTACT_MANAGER_HPP
+
+#include <QObject>
+
+#ifndef Q_MOC_RUN
+#include "common.hpp"
+#include "contact-storage.hpp"
+#include "endorse-certificate.hpp"
+#include "profile.hpp"
+#include "endorse-info.pb.h"
+#include "endorse-collection.pb.h"
+#include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/security/validator.hpp>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/recursive_mutex.hpp>
+#endif
+
+namespace chronos{
+
+typedef function<void(const Interest&)> TimeoutNotify;
+typedef std::vector<shared_ptr<Contact> > ContactList;
+
+class ContactManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ ContactManager(shared_ptr<ndn::Face> m_face, QObject* parent = 0);
+
+ ~ContactManager();
+
+ shared_ptr<Contact>
+ getContact(const Name& identity)
+ {
+ return m_contactStorage->getContact(identity);
+ }
+
+ void
+ getContactList(ContactList& contactList)
+ {
+ contactList.clear();
+ contactList.insert(contactList.end(), m_contactList.begin(), m_contactList.end());
+ }
+private:
+ shared_ptr<ndn::IdentityCertificate>
+ loadTrustAnchor();
+
+ void
+ initializeSecurity();
+
+ void
+ fetchCollectEndorse(const Name& identity);
+
+ void
+ fetchEndorseCertificateInternal(const Name& identity, int certIndex);
+
+ void
+ prepareEndorseInfo(const Name& identity);
+
+ // PROFILE: self-endorse-certificate
+ void
+ onDnsSelfEndorseCertValidated(const shared_ptr<const Data>& selfEndorseCertificate,
+ const Name& identity);
+
+ void
+ onDnsSelfEndorseCertValidationFailed(const shared_ptr<const Data>& selfEndorseCertificate,
+ const std::string& failInfo,
+ const Name& identity);
+
+ void
+ onDnsSelfEndorseCertTimeoutNotify(const Interest& interest, const Name& identity);
+
+ // ENDORSED: endorse-collection
+ void
+ onDnsCollectEndorseValidated(const shared_ptr<const Data>& data, const Name& identity);
+
+ void
+ onDnsCollectEndorseValidationFailed(const shared_ptr<const Data>& data,
+ const std::string& failInfo,
+ const Name& identity);
+
+ void
+ onDnsCollectEndorseTimeoutNotify(const Interest& interest,
+ const Name& identity);
+
+ // PROFILE-CERT: endorse-certificate
+ void
+ onEndorseCertificateInternal(const Interest& interest, Data& data,
+ const Name& identity, int certIndex, std::string hash);
+
+ void
+ onEndorseCertificateInternalTimeout(const Interest& interest,
+ const Name& identity,
+ int certIndex);
+
+ // Collect endorsement
+ void
+ collectEndorsement();
+
+ void
+ onDnsEndorseeValidated(const shared_ptr<const Data>& data);
+
+ void
+ onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data,
+ const std::string& failInfo);
+
+ void
+ onDnsEndorseeTimeoutNotify(const Interest& interest);
+
+ void
+ decreaseCollectStatus();
+
+ void
+ publishCollectEndorsedDataInDNS();
+
+ // Identity certificate
+ void
+ onIdentityCertValidated(const shared_ptr<const Data>& data);
+
+ void
+ onIdentityCertValidationFailed(const shared_ptr<const Data>& data, const std::string& failInfo);
+
+ void
+ onIdentityCertTimeoutNotify(const Interest& interest);
+
+ void
+ decreaseIdCertCount();
+
+ // Publish self-endorse certificate
+ shared_ptr<EndorseCertificate>
+ getSignedSelfEndorseCertificate(const Profile& profile);
+
+ void
+ publishSelfEndorseCertificateInDNS(const EndorseCertificate& selfEndorseCertificate);
+
+ // Publish endorse certificate
+ shared_ptr<EndorseCertificate>
+ generateEndorseCertificate(const Name& identity);
+
+ void
+ publishEndorseCertificateInDNS(const EndorseCertificate& endorseCertificate);
+
+ // Communication
+ void
+ sendInterest(const Interest& interest,
+ const ndn::OnDataValidated& onValidated,
+ const ndn::OnDataValidationFailed& onValidationFailed,
+ const TimeoutNotify& timeoutNotify,
+ int retry = 1);
+
+ void
+ onTargetData(const Interest& interest,
+ const Data& data,
+ const ndn::OnDataValidated& onValidated,
+ const ndn::OnDataValidationFailed& onValidationFailed);
+
+ void
+ onTargetTimeout(const Interest& interest,
+ int retry,
+ const ndn::OnDataValidated& onValidated,
+ const ndn::OnDataValidationFailed& onValidationFailed,
+ const TimeoutNotify& timeoutNotify);
+
+ // DNS listener
+ void
+ onDnsInterest(const Name& prefix, const Interest& interest);
+
+ void
+ onDnsRegisterFailed(const Name& prefix, const std::string& failInfo);
+
+signals:
+ void
+ contactEndorseInfoReady(const Chronos::EndorseInfo& endorseInfo);
+
+ void
+ contactInfoFetchFailed(const QString& identity);
+
+ void
+ idCertNameListReady(const QStringList& certNameList);
+
+ void
+ nameListReady(const QStringList& certNameList);
+
+ void
+ idCertReady(const ndn::IdentityCertificate& idCert);
+
+ void
+ contactAliasListReady(const QStringList& aliasList);
+
+ void
+ contactIdListReady(const QStringList& idList);
+
+ void
+ contactInfoReady(const QString& identity,
+ const QString& name,
+ const QString& institute,
+ bool isIntro);
+
+ void
+ warning(const QString& msg);
+
+public slots:
+ void
+ onIdentityUpdated(const QString& identity);
+
+ void
+ onFetchContactInfo(const QString& identity);
+
+ void
+ onAddFetchedContact(const QString& identity);
+
+ void
+ onUpdateProfile();
+
+ void
+ onRefreshBrowseContact();
+
+ void
+ onFetchIdCert(const QString& certName);
+
+ void
+ onAddFetchedContactIdCert(const QString& identity);
+
+ void
+ onWaitForContactList();
+
+ void
+ onWaitForContactInfo(const QString& identity);
+
+ void
+ onRemoveContact(const QString& identity);
+
+ void
+ onUpdateAlias(const QString& identity, const QString& alias);
+
+ void
+ onUpdateIsIntroducer(const QString& identity, bool isIntro);
+
+ void
+ onUpdateEndorseCertificate(const QString& identity);
+
+private:
+
+ class FetchedInfo {
+ public:
+ shared_ptr<EndorseCertificate> m_selfEndorseCert;
+ shared_ptr<EndorseCollection> m_endorseCollection;
+ std::vector<shared_ptr<EndorseCertificate> > m_endorseCertList;
+ shared_ptr<Chronos::EndorseInfo> m_endorseInfo;
+ };
+
+ typedef std::map<Name, FetchedInfo> BufferedContacts;
+ typedef std::map<Name, shared_ptr<ndn::IdentityCertificate> > BufferedIdCerts;
+
+ typedef boost::recursive_mutex RecLock;
+ typedef boost::unique_lock<RecLock> UniqueRecLock;
+
+ // Conf
+ shared_ptr<ContactStorage> m_contactStorage;
+ shared_ptr<ndn::Validator> m_validator;
+ shared_ptr<ndn::Face> m_face;
+ ndn::KeyChain m_keyChain;
+ Name m_identity;
+ ContactList m_contactList;
+
+ // Buffer
+ BufferedContacts m_bufferedContacts;
+ BufferedIdCerts m_bufferedIdCerts;
+
+ // Tmp Dns
+ const ndn::RegisteredPrefixId* m_dnsListenerId;
+
+ RecLock m_collectCountMutex;
+ int m_collectCount;
+
+ RecLock m_idCertCountMutex;
+ int m_idCertCount;
+};
+
+} // namespace chronos
+
+#endif //CHRONOS_CONTACT_MANAGER_HPP