Change ChatroomInfo to contain more information
Change-Id: Ie91ced5dd9be51c8d59a0c5d881967658a58fd15
diff --git a/src/chatroom-discovery-dialog.cpp b/src/chatroom-discovery-dialog.cpp
index 327e4e7..738eb84 100644
--- a/src/chatroom-discovery-dialog.cpp
+++ b/src/chatroom-discovery-dialog.cpp
@@ -3,7 +3,6 @@
namespace chronos {
-using std::vector;
using ndn::Name;
ChatroomDiscoveryDialog::ChatroomDiscoveryDialog(QWidget* parent)
@@ -67,7 +66,7 @@
QString content;
- for (vector<Name>::const_iterator nameIt = it->second.getParticipants().begin();
+ for (std::list<Name>::const_iterator nameIt = it->second.getParticipants().begin();
nameIt != it->second.getParticipants().end(); nameIt++) {
content.append(QString::fromStdString(nameIt->toUri())).append(",");
}
diff --git a/src/chatroom-discovery-logic.cpp b/src/chatroom-discovery-logic.cpp
index 048d121..8d8590b 100644
--- a/src/chatroom-discovery-logic.cpp
+++ b/src/chatroom-discovery-logic.cpp
@@ -151,18 +151,18 @@
const ndn::Data& data,
const bool isRefreshing)
{
- Name::Component chatroomName = data.getName().get(OFFSET_CHATROOM_NAME);
+ // Name::Component chatroomName = data.getName().get(OFFSET_CHATROOM_NAME);
ChatroomInfo chatroom;
chatroom.wireDecode(data.getContent().blockFromValue());
- chatroom.setName(chatroomName);
+ // chatroom.setName(chatroomName);
// Tmp Disabled
// if (chatroom.getTrustModel() == ChatroomInfo::TRUST_MODEL_WEBOFTRUST)
// addContacts(chatroom);
- m_chatrooms[chatroomName] = chatroom;
+ m_chatrooms[chatroom.getName()] = chatroom;
m_onUpdate(chatroom, true); //add
time::milliseconds refreshingTime;
@@ -172,7 +172,8 @@
refreshingTime = DEFAULT_REFRESHING_TIMER;
m_scheduler.scheduleEvent(refreshingTime,
- bind(&ChatroomDiscoveryLogic::refreshChatroom, this, chatroomName));
+ bind(&ChatroomDiscoveryLogic::refreshChatroom, this,
+ chatroom.getName()));
if (!isRefreshing)
sendDiscoveryInterest();
@@ -218,4 +219,4 @@
}
-} //namespace chronos
+} // namespace chronos
diff --git a/src/chatroom-discovery-view-dialog.cpp b/src/chatroom-discovery-view-dialog.cpp
index 7eff07b..ac6c775 100644
--- a/src/chatroom-discovery-view-dialog.cpp
+++ b/src/chatroom-discovery-view-dialog.cpp
@@ -13,7 +13,6 @@
namespace chronos {
-using std::vector;
using ndn::Name;
ChatroomDiscoveryViewDialog::ChatroomDiscoveryViewDialog(QWidget* parent)
@@ -52,10 +51,10 @@
}
void
-ChatroomDiscoveryViewDialog::setChatroomParticipants(const vector<Name>& participants)
+ChatroomDiscoveryViewDialog::setChatroomParticipants(const std::list<Name>& participants)
{
QString content;
- for (vector<Name>::const_iterator it = participants.begin();
+ for (std::list<Name>::const_iterator it = participants.begin();
it != participants.end(); it++) {
content.append(QString::fromStdString(it->toUri())).append("\n");
}
diff --git a/src/chatroom-discovery-view-dialog.hpp b/src/chatroom-discovery-view-dialog.hpp
index d074e71..bb29b7a 100644
--- a/src/chatroom-discovery-view-dialog.hpp
+++ b/src/chatroom-discovery-view-dialog.hpp
@@ -39,7 +39,7 @@
setChatroomTrustModel(QString chatroomTrustModel);
void
- setChatroomParticipants(const std::vector<ndn::Name>& chatroomParticipants);
+ setChatroomParticipants(const std::list<ndn::Name>& chatroomParticipants);
private slots:
diff --git a/src/chatroom-info.cpp b/src/chatroom-info.cpp
index 2b23719..f6b81e3 100644
--- a/src/chatroom-info.cpp
+++ b/src/chatroom-info.cpp
@@ -27,27 +27,62 @@
{
size_t totalLength = 0;
- //Chatroom := CHATROOM-TYPE TLV-LENGTH
- // TrustModel
- // Participant+
+ // ChatroomInfo := CHATROOM-INFO-TYPE TLV-LENGTH
+ // ChatroomName
+ // TrustModel
+ // ChatroomPrefix
+ // ManagerPrefix
+ // Participants
+ //
+ // ChatroomName := CHATROOM-NAME-TYPE TLV-LENGTH
+ // NameComponent
+ //
+ // TrustModel := TRUST-MODEL-TYPE TLV-LENGTH
+ // nonNegativeInteger
+ //
+ // ChatroomPrefix := CHATROOM-PREFIX-TYPE TLV-LENGTH
+ // Name
+ //
+ // ManagerPrefix := MANAGER-PREFIX-TYPE TLV-LENGTH
+ // Name
+ //
+ // Participants := PARTICIPANTS-TYPE TLV-LENGTH
+ // Name+
- //Participants
- for (std::vector<Name>::const_reverse_iterator it = m_participants.rbegin();
+ // Participants
+ size_t participantsLength = 0;
+ for (std::list<Name>::const_reverse_iterator it = m_participants.rbegin();
it != m_participants.rend(); ++it) {
- size_t entryLength = 0;
-
- entryLength += it->wireEncode(block);
- entryLength += block.prependVarNumber(entryLength);
- entryLength += block.prependVarNumber(tlv::PARTICIPANT);
- totalLength += entryLength;
+ participantsLength += it->wireEncode(block);
}
+ participantsLength += block.prependVarNumber(participantsLength);
+ participantsLength += block.prependVarNumber(tlv::Participants);
+ totalLength += participantsLength;
- //TrustModel
- totalLength += prependNonNegativeIntegerBlock(block, tlv::TRUSTMODEL, m_trustModel);
+ // Manager Prefix
+ size_t managerLength = m_manager.wireEncode(block);
+ totalLength += managerLength;
+ totalLength += block.prependVarNumber(managerLength);
+ totalLength += block.prependVarNumber(tlv::ManagerPrefix);
- //type = TYPE_CHATROOM;
+ // Chatroom Sync Prefix
+ size_t chatroomSyncPrefixLength = m_syncPrefix.wireEncode(block);
+ totalLength += chatroomSyncPrefixLength;
+ totalLength += block.prependVarNumber(chatroomSyncPrefixLength);
+ totalLength += block.prependVarNumber(tlv::ChatroomPrefix);
+
+ // Trust Model
+ totalLength += prependNonNegativeIntegerBlock(block, tlv::TrustModel, m_trustModel);
+
+ // Chatroom Name
+ size_t chatroomNameLength = m_chatroomName.wireEncode(block);
+ totalLength += chatroomNameLength;
+ totalLength += block.prependVarNumber(chatroomNameLength);
+ totalLength += block.prependVarNumber(tlv::ChatroomName);
+
+ // Chatroom Info
totalLength += block.prependVarNumber(totalLength);
- totalLength += block.prependVarNumber(tlv::CHATROOM);
+ totalLength += block.prependVarNumber(tlv::ChatroomInfo);
return totalLength;
}
@@ -75,37 +110,102 @@
m_participants.clear();
- //Chatroom := CHATROOM-TYPE TLV-LENGTH
- // TrustModel
- // Participant+
+ // ChatroomInfo := CHATROOM-INFO-TYPE TLV-LENGTH
+ // ChatroomName
+ // TrustModel
+ // ChatroomPrefix
+ // ManagerPrefix
+ // Participants
+ //
+ // ChatroomName := CHATROOM-NAME-TYPE TLV-LENGTH
+ // NameComponent
+ //
+ // TrustModel := TRUST-MODEL-TYPE TLV-LENGTH
+ // nonNegativeInteger
+ //
+ // ChatroomPrefix := CHATROOM-PREFIX-TYPE TLV-LENGTH
+ // Name
+ //
+ // ManagerPrefix := MANAGER-PREFIX-TYPE TLV-LENGTH
+ // Name
+ //
+ // Participants := PARTICIPANTS-TYPE TLV-LENGTH
+ // Name+
- if (m_wire.type() != tlv::CHATROOM)
+ if (m_wire.type() != tlv::ChatroomInfo)
throw Error("Unexpected TLV number when decoding chatroom packet");
+ // Chatroom Info
Block::element_const_iterator i = m_wire.elements_begin();
- //TrustModel
- if (i == m_wire.elements_end() || i->type() != tlv::TRUSTMODEL)
+ if (i == m_wire.elements_end() || i->type() != tlv::ChatroomName)
+ throw Error("Missing Chatroom Name Info");
+ m_chatroomName.wireDecode(i->blockFromValue());
+
+ ++i;
+
+ // Trust Model
+ if (i == m_wire.elements_end() || i->type() != tlv::TrustModel)
throw Error("Missing TrustModel");
m_trustModel =
static_cast<TrustModel>(readNonNegativeInteger(*i));
++i;
- //Participants
- for (; i != m_wire.elements_end() && i->type() == tlv::PARTICIPANT; ++i) {
- Name name;
- name.wireDecode(i->blockFromValue());
- m_participants.push_back(name);
+ // Chatroom Sync Prefix
+ if (i == m_wire.elements_end() || i->type() != tlv::ChatroomPrefix)
+ throw Error("Missing Chatroom Prefix");
+ m_syncPrefix.wireDecode(i->blockFromValue());
+
+ ++i;
+
+ // Manager Prefix
+ if (i == m_wire.elements_end() || i->type() != tlv::ManagerPrefix)
+ throw Error("Missing Manager Prefix");
+ m_manager.wireDecode(i->blockFromValue());
+ ++i;
+
+ // Participants
+ if (i == m_wire.elements_end() || i->type() != tlv::Participants)
+ throw Error("Missing Participant");
+
+ Block temp = *i;
+ temp.parse();
+
+ Block::element_const_iterator j = temp.elements_begin();
+
+ while (j != temp.elements_end() && j->type() == tlv::Name) {
+ m_participants.push_back(Name(*j));
+ ++j;
}
+ if (j != temp.elements_end())
+ throw Error("Unexpected element");
+
if (m_participants.empty())
throw Error("Missing Participant");
+
+ ++i;
+
if (i != m_wire.elements_end()) {
throw Error("Unexpected element");
}
}
void
+ChatroomInfo::setName(const Name::Component& name)
+{
+ m_wire.reset();
+ m_chatroomName = name;
+}
+
+void
+ChatroomInfo::setTrustModel(const TrustModel trustModel)
+{
+ m_wire.reset();
+ m_trustModel = trustModel;
+}
+
+void
ChatroomInfo::addParticipant(const Name& participant)
{
m_wire.reset();
@@ -113,24 +213,24 @@
}
void
-ChatroomInfo::addContact(const Name& contact)
+ChatroomInfo::removeParticipant(const Name& participant)
{
m_wire.reset();
- m_contacts.push_back(contact);
+ m_participants.remove(participant);
}
void
-ChatroomInfo::setName(const Name::Component& name)
+ChatroomInfo::setSyncPrefix(const Name& prefix)
{
m_wire.reset();
- m_name = name;
+ m_syncPrefix = prefix;
}
void
-ChatroomInfo::setTrustModel(const TrustModel trustModel)
+ChatroomInfo::setManager(const Name& manager)
{
m_wire.reset();
- m_trustModel = trustModel;
+ m_manager = manager;
}
-} //namespace chronos
+} // namespace chronos
diff --git a/src/chatroom-info.hpp b/src/chatroom-info.hpp
index e182713..fc7c707 100644
--- a/src/chatroom-info.hpp
+++ b/src/chatroom-info.hpp
@@ -22,6 +22,7 @@
#include <ndn-cxx/encoding/encoding-buffer.hpp>
#include <ndn-cxx/exclude.hpp>
#include <boost/concept_check.hpp>
+#include <list>
namespace chronos {
@@ -44,7 +45,6 @@
}
};
-
enum TrustModel {
TRUST_MODEL_HIERARCHICAL = 2,
TRUST_MODEL_WEBOFTRUST = 1,
@@ -67,26 +67,35 @@
const Name::Component&
getName() const;
+ const TrustModel
+ getTrustModel() const;
+
+ const Name&
+ getSyncPrefix() const;
+
+ const Name&
+ getManagerPrefix() const;
+
+ const std::list<Name>&
+ getParticipants() const;
+
void
setName(const Name::Component& name);
- const std::vector<Name>&
- getParticipants() const;
+ void
+ setTrustModel(const TrustModel trustModel);
void
addParticipant(const Name& participant);
- const std::vector<Name>&
- getContacts() const;
+ void
+ removeParticipant(const Name& participant);
void
- addContact(const Name& contact);
-
- const TrustModel
- getTrustModel() const;
+ setSyncPrefix(const Name& prefix);
void
- setTrustModel(const TrustModel trustModel);
+ setManager(const Name& manager);
private:
template<bool T>
@@ -95,29 +104,18 @@
private:
mutable Block m_wire;
- Name::Component m_name;
- std::vector<Name> m_participants;
+ Name::Component m_chatroomName;
+ std::list<Name> m_participants;
+ Name m_manager;
+ Name m_syncPrefix;
TrustModel m_trustModel;
- std::vector<Name> m_contacts;
};
inline const Name::Component&
ChatroomInfo::getName() const
{
- return m_name;
-}
-
-inline const std::vector<Name>&
-ChatroomInfo::getParticipants() const
-{
- return m_participants;
-}
-
-inline const std::vector<Name>&
-ChatroomInfo::getContacts() const
-{
- return m_contacts;
+ return m_chatroomName;
}
inline const ChatroomInfo::TrustModel
@@ -126,6 +124,25 @@
return m_trustModel;
}
+
+inline const Name&
+ChatroomInfo::getManagerPrefix() const
+{
+ return m_manager;
+}
+
+inline const Name&
+ChatroomInfo::getSyncPrefix() const
+{
+ return m_syncPrefix;
+}
+
+inline const std::list<Name>&
+ChatroomInfo::getParticipants() const
+{
+ return m_participants;
+}
+
BOOST_CONCEPT_ASSERT((ndn::WireEncodable<ChatroomInfo>));
BOOST_CONCEPT_ASSERT((ndn::WireDecodable<ChatroomInfo>));
diff --git a/src/chatroom-tlv.hpp b/src/chatroom-tlv.hpp
index 954fbb5..c69c639 100644
--- a/src/chatroom-tlv.hpp
+++ b/src/chatroom-tlv.hpp
@@ -6,13 +6,16 @@
namespace tlv {
enum {
- PARTICIPANT = 128,
- CHATROOM = 129,
- TRUSTMODEL = 130
+ ChatroomInfo = 128,
+ ChatroomName = 129,
+ TrustModel = 130,
+ ChatroomPrefix = 131,
+ ManagerPrefix = 132,
+ Participants = 133,
};
-} //namespace tlv
+} // namespace tlv
-} //namespace chronos
+} // namespace chronos
-#endif //CHRONOCHAT_CHATROOM_TLV_HPP
+#endif // CHRONOCHAT_CHATROOM_TLV_HPP