From 777a73e52812cede31ca69da756f1848fe9e9f6e Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 3 Feb 2017 12:48:51 +0100 Subject: [PATCH 001/230] added GUI for editing forum messages --- .../src/gui/gxsforums/CreateGxsForumMsg.cpp | 15 +-- .../src/gui/gxsforums/CreateGxsForumMsg.h | 12 +- .../gui/gxsforums/GxsForumThreadWidget.cpp | 115 ++++++++++++++++-- .../src/gui/gxsforums/GxsForumThreadWidget.h | 9 +- 4 files changed, 127 insertions(+), 24 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp index f73aeef91..6e8954272 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp @@ -49,8 +49,8 @@ //#define ENABLE_GENERATE /** Constructor */ -CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId) -: QDialog(NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mForumId(fId), mParentId(pId) +CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId,const RsGxsMessageId& mOId) +: QDialog(NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mForumId(fId), mParentId(pId), mOrigMsgId(mOId) { /* Invoke the Qt Designer generated object setup routine */ ui.setupUi(this); @@ -75,7 +75,7 @@ CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessage mStateHelper->addLoadPlaceholder(CREATEGXSFORUMMSG_PARENTMSG, ui.forumSubject); mStateHelper->addClear(CREATEGXSFORUMMSG_PARENTMSG, ui.forumName); - QString text = pId.isNull() ? tr("Start New Thread") : tr("Post Forum Message"); + QString text = mOId.isNull()?(pId.isNull() ? tr("Start New Thread") : tr("Post Forum Message")):tr("Edit Message"); setWindowTitle(text); ui.headerFrame->setHeaderImage(QPixmap(":/images/konversation64.png")); @@ -103,7 +103,7 @@ CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessage mParentMsgLoaded = false; mForumMetaLoaded = false; - mForumCircleLoaded = false; + mForumCircleLoaded = false; newMsg(); @@ -285,6 +285,7 @@ void CreateGxsForumMsg::createMsg() RsGxsForumMsg msg; msg.mMeta.mGroupId = mForumId; msg.mMeta.mParentId = mParentId; + msg.mMeta.mOrigMsgId = mOrigMsgId; msg.mMeta.mMsgId.clear() ; if (mParentMsgLoaded) { msg.mMeta.mThreadId = mParentMsg.mMeta.mThreadId; @@ -376,9 +377,9 @@ void CreateGxsForumMsg::reject() { if (ui.forumMessage->document()->isModified()) { QMessageBox::StandardButton ret; - ret = QMessageBox::warning(this, tr("Forum Message"), - tr("Forum Message has not been Sent.\n" - "Do you want to reject this message?"), + ret = QMessageBox::warning(this, tr("Cancel Forum Message"), + tr("Forum Message has not been sent yet!\n" + "Please confirm that you want to discard this message?"), QMessageBox::Yes | QMessageBox::No); switch (ret) { case QMessageBox::Yes: diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h index ae06b0b0c..f3be33275 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h @@ -36,7 +36,7 @@ class CreateGxsForumMsg : public QDialog, public TokenResponse Q_OBJECT public: - CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId); + CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId, const RsGxsMessageId &moId); ~CreateGxsForumMsg(); void newMsg(); /* cleanup */ @@ -64,15 +64,17 @@ private: void loadForumCircleInfo(const uint32_t &token); RsGxsGroupId mForumId; - RsGxsCircleId mCircleId ; - RsGxsMessageId mParentId; + RsGxsCircleId mCircleId ; + RsGxsMessageId mParentId; + RsGxsMessageId mOrigMsgId; bool mParentMsgLoaded; bool mForumMetaLoaded; - bool mForumCircleLoaded ; + bool mForumCircleLoaded ; + RsGxsForumMsg mParentMsg; RsGroupMetaData mForumMeta; - RsGxsCircleGroup mForumCircleData ; + RsGxsCircleGroup mForumCircleData ; TokenQueue *mForumQueue; TokenQueue *mCirclesQueue; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index dff2f5546..73453ba7b 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -160,6 +160,7 @@ GxsForumThreadWidget::GxsForumThreadWidget(const RsGxsGroupId &forumId, QWidget mTokenTypeNegativeAuthor = nextTokenType(); mTokenTypeNeutralAuthor = nextTokenType(); mTokenTypePositiveAuthor = nextTokenType(); + mTokenTypeEditForumMessage = nextTokenType(); setUpdateWhenInvisible(true); @@ -478,11 +479,14 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) QMenu contextMnu(this); + QAction *editAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Edit"), &contextMnu); + connect(editAct, SIGNAL(triggered()), this, SLOT(editforummessage())); + QAction *replyAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Reply"), &contextMnu); connect(replyAct, SIGNAL(triggered()), this, SLOT(replytoforummessage())); QAction *replyauthorAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Reply to author with private message"), &contextMnu); - connect(replyauthorAct, SIGNAL(triggered()), this, SLOT(replytomessage())); + connect(replyauthorAct, SIGNAL(triggered()), this, SLOT(reply_with_private_message())); QAction *flagaspositiveAct = new QAction(QIcon(IMAGE_POSITIVE_OPINION), tr("Give positive opinion"), &contextMnu); flagaspositiveAct->setToolTip(tr("This will block/hide messages from this person, and notify friend nodes.")) ; @@ -567,6 +571,18 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) replyauthorAct->setDisabled (true); } + QList selectedItems = ui->threadTreeWidget->selectedItems(); + + if(selectedItems.size() == 1) + { + QTreeWidgetItem *item = *selectedItems.begin(); + GxsIdRSTreeWidgetItem *gxsIdItem = dynamic_cast(item); + + RsGxsId author_id; + if(gxsIdItem && gxsIdItem->getId(author_id) && rsIdentity->isOwnId(author_id)) + contextMnu.addAction(editAct); + } + contextMnu.addAction(replyAct); contextMnu.addAction(newthreadAct); QAction* action = contextMnu.addAction(QIcon(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyMessageLink())); @@ -580,8 +596,6 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) contextMnu.addAction(expandAll); contextMnu.addAction(collapseAll); - QList selectedItems = ui->threadTreeWidget->selectedItems(); - if(selectedItems.size() == 1) { QTreeWidgetItem *item = *selectedItems.begin(); @@ -1952,7 +1966,7 @@ void GxsForumThreadWidget::createmessage() return; } - CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId); + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId,RsGxsMessageId()); cfm->show(); /* window will destroy itself! */ @@ -1965,7 +1979,7 @@ void GxsForumThreadWidget::createthread() return; } - CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), RsGxsMessageId()); + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), RsGxsMessageId(),RsGxsMessageId()); cfm->show(); /* window will destroy itself! */ @@ -2019,7 +2033,7 @@ void GxsForumThreadWidget::flagperson() mTokenQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, token_type); } -void GxsForumThreadWidget::replytomessage() +void GxsForumThreadWidget::reply_with_private_message() { if (groupId().isNull() || mThreadId.isNull()) { QMessageBox::information(this, tr("RetroShare"),tr("You cant reply to a non-existant Message")); @@ -2028,9 +2042,19 @@ void GxsForumThreadWidget::replytomessage() // Get Message ... then complete replyMessageData(). RsGxsGrpMsgIdPair postId = std::make_pair(groupId(), mThreadId); - requestMsgData_ReplyMessage(postId); + requestMsgData_ReplyWithPrivateMessage(postId); } +void GxsForumThreadWidget::editforummessage() +{ + if (groupId().isNull() || mThreadId.isNull()) { + QMessageBox::information(this, tr("RetroShare"),tr("You cant reply to a non-existant Message")); + return; + } + // Get Message ... then complete replyMessageData(). + RsGxsGrpMsgIdPair postId = std::make_pair(groupId(), mThreadId); + requestMsgData_EditForumMessage(postId); +} void GxsForumThreadWidget::replytoforummessage() { if (groupId().isNull() || mThreadId.isNull()) { @@ -2083,6 +2107,29 @@ void GxsForumThreadWidget::showAuthorInPeople(const RsGxsForumMsg& msg) requestMsgData_ShowAuthorInPeople(postId); } +void GxsForumThreadWidget::editForumMessageData(const RsGxsForumMsg& msg) +{ + if ((msg.mMeta.mGroupId != groupId()) || (msg.mMeta.mMsgId != mThreadId)) + { + std::cerr << "GxsForumThreadWidget::replyMessageData() ERROR Message Ids have changed!"; + std::cerr << std::endl; + return; + } + + if (!msg.mMeta.mAuthorId.isNull()) + { + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId, msg.mMeta.mMsgId); + + cfm->insertPastedText(QString::fromUtf8(msg.mMsg.c_str())) ; + cfm->show(); + + /* window will destroy itself! */ + } + else + { + QMessageBox::information(this, tr("RetroShare"),tr("You cant reply to an Anonymous Author")); + } +} void GxsForumThreadWidget::replyForumMessageData(const RsGxsForumMsg &msg) { if ((msg.mMeta.mGroupId != groupId()) || (msg.mMeta.mMsgId != mThreadId)) @@ -2094,10 +2141,12 @@ void GxsForumThreadWidget::replyForumMessageData(const RsGxsForumMsg &msg) if (!msg.mMeta.mAuthorId.isNull()) { - CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId); - QTextDocument doc ; + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId,RsGxsMessageId()); + +// QTextDocument doc ; // doc.setHtml(QString::fromUtf8(msg.mMsg.c_str()) ); // std::string cited_text(doc.toPlainText().toStdString()) ; + RsHtml::makeQuotedText(ui->postText); cfm->insertPastedText(RsHtml::makeQuotedText(ui->postText)) ; @@ -2318,7 +2367,8 @@ void GxsForumThreadWidget::loadMessageData(const uint32_t &token) /*********************** **** **** **** ***********************/ /*********************** **** **** **** ***********************/ -void GxsForumThreadWidget::requestMsgData_ReplyMessage(const RsGxsGrpMsgIdPair &msgId) + +void GxsForumThreadWidget::requestMsgData_ReplyWithPrivateMessage(const RsGxsGrpMsgIdPair &msgId) { RsTokReqOptions opts; opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; @@ -2353,7 +2403,23 @@ void GxsForumThreadWidget::requestMsgData_ShowAuthorInPeople(const RsGxsGrpMsgId uint32_t token; mTokenQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, mTokenTypeShowAuthorInPeople); } +void GxsForumThreadWidget::requestMsgData_EditForumMessage(const RsGxsGrpMsgIdPair &msgId) +{ + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; +#ifdef DEBUG_FORUMS + std::cerr << "GxsForumThreadWidget::requestMsgData_ReplyMessage(" << msgId.first << "," << msgId.second << ")"; + std::cerr << std::endl; +#endif + + GxsMsgReq msgIds; + std::vector &vect = msgIds[msgId.first]; + vect.push_back(msgId.second); + + uint32_t token; + mTokenQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, mTokenTypeEditForumMessage); +} void GxsForumThreadWidget::requestMsgData_ReplyForumMessage(const RsGxsGrpMsgIdPair &msgId) { RsTokReqOptions opts; @@ -2397,6 +2463,31 @@ void GxsForumThreadWidget::loadMsgData_ReplyMessage(const uint32_t &token) } } +void GxsForumThreadWidget::loadMsgData_EditForumMessage(const uint32_t &token) +{ +#ifdef DEBUG_FORUMS + std::cerr << "GxsForumThreadWidget::loadMsgData_EditMessage()"; + std::cerr << std::endl; +#endif + + std::vector msgs; + if (rsGxsForums->getMsgData(token, msgs)) + { + if (msgs.size() != 1) + { + std::cerr << "GxsForumThreadWidget::loadMsgData_EditMessage() ERROR Wrong number of answers"; + std::cerr << std::endl; + return; + } + + editForumMessageData(msgs[0]); + } + else + { + std::cerr << "GxsForumThreadWidget::loadMsgData_ReplyMessage() ERROR Missing Message Data..."; + std::cerr << std::endl; + } +} void GxsForumThreadWidget::loadMsgData_ReplyForumMessage(const uint32_t &token) { #ifdef DEBUG_FORUMS @@ -2524,6 +2615,10 @@ void GxsForumThreadWidget::loadRequest(const TokenQueue *queue, const TokenReque return; } + if (req.mUserType == mTokenTypeEditForumMessage) { + loadMsgData_EditForumMessage(req.mToken); + return; + } if (req.mUserType == mTokenTypeShowAuthorInPeople) { loadMsgData_ShowAuthorInPeople(req.mToken); return; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index a2a6eecee..d06ccae45 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -75,10 +75,12 @@ private slots: void changedThread(); void clickedThread (QTreeWidgetItem *item, int column); - void replytomessage(); + void reply_with_private_message(); void replytoforummessage(); + void editforummessage(); void replyMessageData(const RsGxsForumMsg &msg); + void editForumMessageData(const RsGxsForumMsg &msg); void replyForumMessageData(const RsGxsForumMsg &msg); void showAuthorInPeople(const RsGxsForumMsg& msg); @@ -147,13 +149,15 @@ private: static void loadAuthorIdCallback(GxsIdDetailsType type, const RsIdentityDetails &details, QObject *object, const QVariant &/*data*/); void requestMessageData(const RsGxsGrpMsgIdPair &msgId); - void requestMsgData_ReplyMessage(const RsGxsGrpMsgIdPair &msgId); + void requestMsgData_ReplyWithPrivateMessage(const RsGxsGrpMsgIdPair &msgId); void requestMsgData_ShowAuthorInPeople(const RsGxsGrpMsgIdPair &msgId); void requestMsgData_ReplyForumMessage(const RsGxsGrpMsgIdPair &msgId); + void requestMsgData_EditForumMessage(const RsGxsGrpMsgIdPair &msgId); void loadMessageData(const uint32_t &token); void loadMsgData_ReplyMessage(const uint32_t &token); void loadMsgData_ReplyForumMessage(const uint32_t &token); + void loadMsgData_EditForumMessage(const uint32_t &token); void loadMsgData_ShowAuthorInPeople(const uint32_t &token); void loadMsgData_SetAuthorOpinion(const uint32_t &token, RsReputations::Opinion opinion); @@ -177,6 +181,7 @@ private: uint32_t mTokenTypeMessageData; uint32_t mTokenTypeReplyMessage; uint32_t mTokenTypeReplyForumMessage; + uint32_t mTokenTypeEditForumMessage; uint32_t mTokenTypeShowAuthorInPeople; uint32_t mTokenTypeNegativeAuthor; uint32_t mTokenTypePositiveAuthor; From dfcb66db8cf6e2087a25cba94aa5fee207c903af Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 3 Feb 2017 13:02:53 +0100 Subject: [PATCH 002/230] added spinbox to show older versions --- .../src/gui/gxsforums/CreateGxsForumMsg.cpp | 15 ++++++++------- .../src/gui/gxsforums/GxsForumThreadWidget.ui | 13 ++++++++----- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp index 6e8954272..c3098b0ae 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp @@ -212,14 +212,19 @@ void CreateGxsForumMsg::loadFormInformation() //std::cerr << "CreateGxsForumMsg::loadMsgInformation() using signFlags=" << std::hex << mForumMeta.mSignFlags << std::dec << std::endl; - if( (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG) || (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG_KNOWN)) + if( (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG) || (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG_KNOWN)) ui.idChooser->setFlags(IDCHOOSER_ID_REQUIRED | IDCHOOSER_NON_ANONYMOUS) ; - else + else ui.idChooser->setFlags(IDCHOOSER_ID_REQUIRED) ; QString name = QString::fromUtf8(mForumMeta.mGroupName.c_str()); QString subj; - if (!mParentId.isNull()) + + if(!mOrigMsgId.isNull()) + { + subj = QString::fromUtf8(mParentMsg.mMeta.mMsgName.c_str()); + } + else if (!mParentId.isNull()) { QString title = QString::fromUtf8(mParentMsg.mMeta.mMsgName.c_str()); name += " " + tr("In Reply to") + ": "; @@ -228,13 +233,9 @@ void CreateGxsForumMsg::loadFormInformation() QString text = title; if (text.startsWith("Re:", Qt::CaseInsensitive)) - { subj = title; - } else - { subj = "Re: " + title; - } } ui.forumName->setText(misc::removeNewLine(name)); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui index 3a93e9973..8304dd0a9 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui @@ -296,7 +296,7 @@ - + @@ -332,7 +332,7 @@ - + @@ -372,7 +372,7 @@ - + Qt::Horizontal @@ -464,20 +464,23 @@ - + - + By + + + From f8056e5751ad4946f2778dc78d8fb2c8c4c23814 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Feb 2017 14:49:43 +0100 Subject: [PATCH 003/230] added collection of older posts versions. --- .../gui/gxsforums/GxsForumThreadWidget.cpp | 25 ++++++ .../src/gui/gxsforums/GxsForumThreadWidget.h | 4 + .../src/gui/gxsforums/GxsForumThreadWidget.ui | 4 +- .../src/gui/gxsforums/GxsForumsFillThread.cpp | 80 ++++++++++++++++++- .../src/gui/gxsforums/GxsForumsFillThread.h | 3 + 5 files changed, 112 insertions(+), 4 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index d2d6c2cc6..d143a70ba 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -200,6 +200,7 @@ GxsForumThreadWidget::GxsForumThreadWidget(const RsGxsGroupId &forumId, QWidget ui->threadTreeWidget->setItemDelegateForColumn(COLUMN_THREAD_DISTRIBUTION,new DistributionItemDelegate()) ; + connect(ui->versions_CB, SIGNAL(currentItemChanged(int)), this, SLOT(updateCurrentPostVersion(int))); connect(ui->threadTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(threadListCustomPopupMenu(QPoint))); connect(ui->postText, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuTextBrowser(QPoint))); @@ -1029,6 +1030,8 @@ void GxsForumThreadWidget::fillThreadFinished() } else { fillThreads(thread->mItems, thread->mExpandNewMessages, thread->mItemToExpand); + mPostVersions = thread->mPostVersions; + // cleanup list cleanupItems(thread->mItems); } @@ -1516,6 +1519,8 @@ void GxsForumThreadWidget::insertMessage() mStateHelper->setActive(mTokenTypeMessageData, false); mStateHelper->clear(mTokenTypeMessageData); + ui->versions_CB->hide(); + ui->postText->clear(); //ui->threadTitle->clear(); return; @@ -1526,6 +1531,8 @@ void GxsForumThreadWidget::insertMessage() mStateHelper->setActive(mTokenTypeMessageData, false); mStateHelper->clear(mTokenTypeMessageData); + ui->versions_CB->hide(); + //ui->threadTitle->setText(tr("Forum Description")); ui->postText->setText(mForumDescription); return; @@ -1544,6 +1551,7 @@ void GxsForumThreadWidget::insertMessage() // there is something wrong mStateHelper->setWidgetEnabled(ui->previousButton, false); mStateHelper->setWidgetEnabled(ui->nextButton, false); + ui->versions_CB->hide(); return; } @@ -1558,6 +1566,23 @@ void GxsForumThreadWidget::insertMessage() ui->by_text_label->hide(); ui->by_label->hide(); + // add/show combobox for versions, if applicable, and enable it. If no older versions of the post available, hide the combobox. + + QMap > >::const_iterator it = mPostVersions.find(mThreadId) ; + ui->versions_CB->clear(); + + if(it != mPostVersions.end()) + { + ui->versions_CB->setVisible(true) ; + + for(uint32_t i=0;i<(*it).size();++i) + ui->versions_CB->insertItem(i,QDateTime::fromTime_t( (*it)[i].first).toString()) ; + } + else + { + ui->versions_CB->hide(); + } + /* request Post */ RsGxsGrpMsgIdPair msgId = std::make_pair(groupId(), mThreadId); requestMessageData(msgId); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index d320324db..f6eaeb208 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -1,6 +1,8 @@ #ifndef GXSFORUMTHREADWIDGET_H #define GXSFORUMTHREADWIDGET_H +#include + #include "gui/gxs/GxsMessageFrameWidget.h" #include #include "gui/gxs/GxsIdDetails.h" @@ -197,6 +199,8 @@ private: RsGxsMessageId mNavigatePendingMsgId; QList mIgnoredMsgId; + QMap > > mPostVersions ; // holds older versions of posts + Ui::GxsForumThreadWidget *ui; }; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui index 8304dd0a9..bd0d92e9e 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui @@ -479,7 +479,7 @@ - + @@ -565,8 +565,8 @@ - + diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp index 4c381ce42..9b8e0d6b0 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp @@ -31,7 +31,7 @@ #include #include -//#define DEBUG_FORUMS +#define DEBUG_FORUMS #define PROGRESSBAR_MAX 100 @@ -171,7 +171,7 @@ void GxsForumsFillThread::run() int pos = 0; int steps = count / PROGRESSBAR_MAX; int step = 0; - + // ThreadList contains the list of parent threads. The algorithm below iterates through all messages // and tries to establish parenthood relationships between them, given that we only know the // immediate parent of a message and now its children. Some messages have a missing parent and for them @@ -185,6 +185,77 @@ void GxsForumsFillThread::run() std::map > kids_array ; std::set missing_parents; + // First of all, remove all older versions of posts. This is done by first adding all posts into a hierarchy structure + // and then removing all posts which have a new versions available. The older versions are kept appart. + +#ifdef DEBUG_FORUMS + std::cerr << "GxsForumsFillThread::run() Collecting post versions" << std::endl; +#endif + mPostVersions.clear(); + std::list msg_stack ; + + for ( std::map::iterator msgIt = msgs.begin(); msgIt != msgs.end();++msgIt) + if(!msgIt->second.mMeta.mOrigMsgId.isNull() && msgIt->second.mMeta.mOrigMsgId != msgIt->second.mMeta.mMsgId) + { +#ifdef DEBUG_FORUMS + std::cerr << " Post " << msgIt->second.mMeta.mMsgId << " is a new version of " << msgIt->second.mMeta.mOrigMsgId << std::endl; +#endif + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; + } + + for(QMap > >::iterator it(mPostVersions.begin());it!=mPostVersions.end();++it) + { + QVector >& v(*it) ; + + for(int32_t i=0;i tmp(v[0]) ; + v[0] = v[i] ; + v[i] = tmp ; + } + + QMap > >::iterator it2 = mPostVersions.find(sub_msg_id); + + if(it2 != mPostVersions.end()) + { + for(uint32_t j=0;j<(*it2).size();++j) + v.append((*it2)[j]) ; + + mPostVersions.erase(it2) ; // it2 is never equal to it + } + } + } + + // Now remove from msg ids, all posts except the most recent one. + +#ifdef DEBUG_FORUMS + std::cerr << "Final post versions: " << std::endl; +#endif + for(QMap > >::iterator it(mPostVersions.begin());it!=mPostVersions.end();++it) + { +#ifdef DEBUG_FORUMS + std::cerr << "Original post: " << it.key() << std::endl; +#endif + if(!(*it).empty()) + msgs.erase(it.key()) ; + + for(uint32_t i=0;i<(*it).size();++i) + { + if(i > 0) + msgs.erase((*it)[i].second) ; + +#ifdef DEBUG_FORUMS + std::cerr << " new version " << (*it)[i].first << " " << (*it)[i].second << std::endl; +#endif + } + } + // The first step is to find the top level thread messages. These are defined as the messages without // any parent message ID. @@ -194,6 +265,8 @@ void GxsForumsFillThread::run() std::map kept_msgs; for ( std::map::iterator msgIt = msgs.begin(); msgIt != msgs.end();++msgIt) + { + if(mFlatView || msgIt->second.mMeta.mParentId.isNull()) { @@ -234,9 +307,12 @@ void GxsForumsFillThread::run() kids_array[msgIt->second.mMeta.mParentId].push_back(msgIt->first) ; kept_msgs.insert(*msgIt) ; } + } msgs = kept_msgs; + // Also create a list of posts by time, when they are new versions of existing posts. Only the last one will have an item created. + // Add a fake toplevel item for the parent IDs that we dont actually have. for(std::set::const_iterator it(missing_parents.begin());it!=missing_parents.end();++it) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.h b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.h index 58a461607..2b5974855 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.h @@ -2,6 +2,8 @@ #define GXSFORUMSFILLTHREAD_H #include +#include +#include #include "retroshare/rsgxsifacetypes.h" class GxsForumThreadWidget; @@ -39,6 +41,7 @@ public: QList mItems; QList mItemToExpand; + QMap > > mPostVersions ; private: void calculateExpand(const RsGxsForumMsg &msg, QTreeWidgetItem *item); From b93130ac77415ae292a445e3e8f5b8f3c7980cad Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Feb 2017 16:15:35 +0100 Subject: [PATCH 004/230] fixed a few bugs in post version collecting --- .../gui/gxsforums/GxsForumThreadWidget.cpp | 35 +++++++-- .../src/gui/gxsforums/GxsForumsFillThread.cpp | 72 +++++++++++-------- 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index d143a70ba..9e731a0c7 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -200,7 +200,7 @@ GxsForumThreadWidget::GxsForumThreadWidget(const RsGxsGroupId &forumId, QWidget ui->threadTreeWidget->setItemDelegateForColumn(COLUMN_THREAD_DISTRIBUTION,new DistributionItemDelegate()) ; - connect(ui->versions_CB, SIGNAL(currentItemChanged(int)), this, SLOT(updateCurrentPostVersion(int))); + connect(ui->versions_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changedThread())); connect(ui->threadTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(threadListCustomPopupMenu(QPoint))); connect(ui->postText, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuTextBrowser(QPoint))); @@ -698,7 +698,13 @@ void GxsForumThreadWidget::changedThread() if (!item || !item->isSelected()) { mThreadId.clear(); } else { - mThreadId = RsGxsMessageId(item->data(COLUMN_THREAD_MSGID, Qt::DisplayRole).toString().toStdString()); + mThreadId.clear(); + + if(ui->versions_CB->count() > 0) + mThreadId = RsGxsMessageId(ui->versions_CB->itemData(ui->versions_CB->currentIndex()).toString().toStdString()) ; + + if(mThreadId.isNull()) + mThreadId = RsGxsMessageId(item->data(COLUMN_THREAD_MSGID, Qt::DisplayRole).toString().toStdString()); } if (mFillThread) { @@ -1024,13 +1030,13 @@ void GxsForumThreadWidget::fillThreadFinished() mLastViewType = thread->mViewType; mLastForumID = groupId(); ui->threadTreeWidget->insertTopLevelItems(0, thread->mItems); + mPostVersions = thread->mPostVersions; // clear list thread->mItems.clear(); } else { - fillThreads(thread->mItems, thread->mExpandNewMessages, thread->mItemToExpand); - mPostVersions = thread->mPostVersions; + fillThreads(thread->mItems, thread->mExpandNewMessages, thread->mItemToExpand); // cleanup list cleanupItems(thread->mItems); @@ -1520,6 +1526,7 @@ void GxsForumThreadWidget::insertMessage() mStateHelper->clear(mTokenTypeMessageData); ui->versions_CB->hide(); + ui->time_label->show(); ui->postText->clear(); //ui->threadTitle->clear(); @@ -1532,6 +1539,7 @@ void GxsForumThreadWidget::insertMessage() mStateHelper->clear(mTokenTypeMessageData); ui->versions_CB->hide(); + ui->time_label->show(); //ui->threadTitle->setText(tr("Forum Description")); ui->postText->setText(mForumDescription); @@ -1552,6 +1560,7 @@ void GxsForumThreadWidget::insertMessage() mStateHelper->setWidgetEnabled(ui->previousButton, false); mStateHelper->setWidgetEnabled(ui->nextButton, false); ui->versions_CB->hide(); + ui->time_label->show(); return; } @@ -1568,19 +1577,33 @@ void GxsForumThreadWidget::insertMessage() // add/show combobox for versions, if applicable, and enable it. If no older versions of the post available, hide the combobox. + std::cerr << "Looking into existing versions for post " << mThreadId << ", thread history: " << mPostVersions.size() << std::endl; + QMap > >::const_iterator it = mPostVersions.find(mThreadId) ; ui->versions_CB->clear(); if(it != mPostVersions.end()) { + std::cerr << (*it).size() << " versions found " << std::endl; + ui->versions_CB->setVisible(true) ; + ui->time_label->hide(); + + ui->versions_CB->blockSignals(true) ; for(uint32_t i=0;i<(*it).size();++i) - ui->versions_CB->insertItem(i,QDateTime::fromTime_t( (*it)[i].first).toString()) ; + { + ui->versions_CB->insertItem(i,DateTime::formatLongDateTime( (*it)[i].first)); + ui->versions_CB->setItemData(i,QString::fromStdString((*it)[i].second.toStdString())); + + std::cerr << " added new post version " << (*it)[i].first << " " << (*it)[i].second << std::endl; + } + ui->versions_CB->blockSignals(false) ; } else { ui->versions_CB->hide(); + ui->time_label->show(); } /* request Post */ @@ -2137,7 +2160,7 @@ void GxsForumThreadWidget::editForumMessageData(const RsGxsForumMsg& msg) if (!msg.mMeta.mAuthorId.isNull()) { - CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), mThreadId, msg.mMeta.mMsgId); + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), msg.mMeta.mParentId, msg.mMeta.mMsgId); cfm->insertPastedText(QString::fromUtf8(msg.mMsg.c_str())) ; cfm->show(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp index 9b8e0d6b0..fee9ff5f5 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp @@ -89,6 +89,8 @@ void GxsForumsFillThread::calculateExpand(const RsGxsForumMsg &msg, QTreeWidgetI } } +static bool decreasing_time_comp(const QPair& e1,const QPair& e2) { return e2.first < e1.first ; } + void GxsForumsFillThread::run() { RsTokenService *service = rsGxsForums->getTokenService(); @@ -200,61 +202,75 @@ void GxsForumsFillThread::run() #ifdef DEBUG_FORUMS std::cerr << " Post " << msgIt->second.mMeta.mMsgId << " is a new version of " << msgIt->second.mMeta.mOrigMsgId << std::endl; #endif - mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; + std::map::iterator msgIt2 = msgs.find(msgIt->second.mMeta.mOrigMsgId); + + // always add the post a a self version + + if(msgIt2 != msgs.end()) + { + // Ensuring that the post exists allows to only collect the existing data. + + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt2->second.mMeta.mPublishTs,msgIt2->second.mMeta.mMsgId)) ; + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; + } } + // The following code assembles all new versions of a given post into the same array, indexed by the oldest version of the post. + for(QMap > >::iterator it(mPostVersions.begin());it!=mPostVersions.end();++it) { QVector >& v(*it) ; for(int32_t i=0;i > >::iterator it2 = mPostVersions.find(sub_msg_id); - if(v[0].first < v[i].first) // works if i==0 - { - QPair tmp(v[0]) ; - v[0] = v[i] ; - v[i] = tmp ; - } + if(it2 != mPostVersions.end()) + { + for(uint32_t j=0;j<(*it2).size();++j) + if((*it2)[j].second != sub_msg_id) // dont copy it, since it is already present at slot i + v.append((*it2)[j]) ; - QMap > >::iterator it2 = mPostVersions.find(sub_msg_id); - - if(it2 != mPostVersions.end()) - { - for(uint32_t j=0;j<(*it2).size();++j) - v.append((*it2)[j]) ; - - mPostVersions.erase(it2) ; // it2 is never equal to it - } - } + mPostVersions.erase(it2) ; // it2 is never equal to it + } + } } - // Now remove from msg ids, all posts except the most recent one. + // Now remove from msg ids, all posts except the most recent one. And make the mPostVersion be indexed by the most recent version of the post, + // which corresponds to the item in the tree widget. #ifdef DEBUG_FORUMS std::cerr << "Final post versions: " << std::endl; #endif + QMap > > mTmp; + for(QMap > >::iterator it(mPostVersions.begin());it!=mPostVersions.end();++it) { #ifdef DEBUG_FORUMS std::cerr << "Original post: " << it.key() << std::endl; #endif - if(!(*it).empty()) - msgs.erase(it.key()) ; + // Finally, sort the posts from newer to older - for(uint32_t i=0;i<(*it).size();++i) - { - if(i > 0) - msgs.erase((*it)[i].second) ; + qSort((*it).begin(),(*it).end(),decreasing_time_comp) ; #ifdef DEBUG_FORUMS - std::cerr << " new version " << (*it)[i].first << " " << (*it)[i].second << std::endl; + std::cerr << " most recent version " << (*it)[0].first << " " << (*it)[0].second << std::endl; +#endif + for(uint32_t i=1;i<(*it).size();++i) + { + msgs.erase((*it)[i].second) ; + +#ifdef DEBUG_FORUMS + std::cerr << " older version " << (*it)[i].first << " " << (*it)[i].second << std::endl; #endif } + + mTmp[(*it)[0].second] = *it ; // index the versions map by the ID of the most recent post. } + mPostVersions = mTmp ; // The first step is to find the top level thread messages. These are defined as the messages without // any parent message ID. From 8deeec61c51fc648eccd95f9ce3b39e60ab693b3 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Feb 2017 18:45:55 +0100 Subject: [PATCH 005/230] fixed UI for post versions --- .../gui/gxsforums/GxsForumThreadWidget.cpp | 24 +++++++++++++++---- .../src/gui/gxsforums/GxsForumThreadWidget.h | 1 + .../src/gui/gxsforums/GxsForumThreadWidget.ui | 14 +++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index 9e731a0c7..b99af03f4 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -701,10 +701,16 @@ void GxsForumThreadWidget::changedThread() mThreadId.clear(); if(ui->versions_CB->count() > 0) + { mThreadId = RsGxsMessageId(ui->versions_CB->itemData(ui->versions_CB->currentIndex()).toString().toStdString()) ; + mOrigThreadId = RsGxsMessageId(ui->versions_CB->itemData(0).toString().toStdString()) ; + } if(mThreadId.isNull()) + { mThreadId = RsGxsMessageId(item->data(COLUMN_THREAD_MSGID, Qt::DisplayRole).toString().toStdString()); + mOrigThreadId = mThreadId ; + } } if (mFillThread) { @@ -1579,8 +1585,12 @@ void GxsForumThreadWidget::insertMessage() std::cerr << "Looking into existing versions for post " << mThreadId << ", thread history: " << mPostVersions.size() << std::endl; - QMap > >::const_iterator it = mPostVersions.find(mThreadId) ; - ui->versions_CB->clear(); + QMap > >::const_iterator it = mPostVersions.find(mOrigThreadId) ; + + ui->versions_CB->blockSignals(true) ; + + while(ui->versions_CB->count() > 0) + ui->versions_CB->removeItem(0); if(it != mPostVersions.end()) { @@ -1589,7 +1599,7 @@ void GxsForumThreadWidget::insertMessage() ui->versions_CB->setVisible(true) ; ui->time_label->hide(); - ui->versions_CB->blockSignals(true) ; + int current_index = 0 ; for(uint32_t i=0;i<(*it).size();++i) { @@ -1597,8 +1607,12 @@ void GxsForumThreadWidget::insertMessage() ui->versions_CB->setItemData(i,QString::fromStdString((*it)[i].second.toStdString())); std::cerr << " added new post version " << (*it)[i].first << " " << (*it)[i].second << std::endl; + + if(mThreadId == (*it)[i].second) + current_index = i ; } - ui->versions_CB->blockSignals(false) ; + + ui->versions_CB->setCurrentIndex(current_index) ; } else { @@ -1606,6 +1620,8 @@ void GxsForumThreadWidget::insertMessage() ui->time_label->show(); } + ui->versions_CB->blockSignals(false) ; + /* request Post */ RsGxsGrpMsgIdPair msgId = std::make_pair(groupId(), mThreadId); requestMessageData(msgId); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index f6eaeb208..456408fae 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -166,6 +166,7 @@ private: private: RsGxsGroupId mLastForumID; RsGxsMessageId mThreadId; + RsGxsMessageId mOrigThreadId; RsGxsForumGroup mForumGroup; QString mForumDescription; int mSubscribeFlags; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui index bd0d92e9e..789616228 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.ui @@ -289,13 +289,6 @@ - - - - - - - @@ -481,6 +474,13 @@ + + + + + + + From 5bf8376dd18735c349a71db9c4d94344d8336a01 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Feb 2017 21:49:24 +0100 Subject: [PATCH 006/230] fixed a few more bugs in post version UI --- .../src/gui/gxsforums/CreateGxsForumMsg.cpp | 123 ++++++++++++++++-- .../src/gui/gxsforums/CreateGxsForumMsg.h | 6 +- .../gui/gxsforums/GxsForumThreadWidget.cpp | 31 ++--- .../src/gui/gxsforums/GxsForumThreadWidget.h | 1 + .../src/gui/gxsforums/GxsForumsFillThread.cpp | 4 +- 5 files changed, 137 insertions(+), 28 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp index e8923d400..bf8423532 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp @@ -45,12 +45,13 @@ #define CREATEGXSFORUMMSG_FORUMINFO 1 #define CREATEGXSFORUMMSG_PARENTMSG 2 #define CREATEGXSFORUMMSG_CIRCLENFO 3 +#define CREATEGXSFORUMMSG_ORIGMSG 4 //#define ENABLE_GENERATE /** Constructor */ -CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId,const RsGxsMessageId& mOId) -: QDialog(NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mForumId(fId), mParentId(pId), mOrigMsgId(mOId) +CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId,const RsGxsMessageId& mOId,const RsGxsId& posterId) +: QDialog(NULL, Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), mForumId(fId), mParentId(pId), mOrigMsgId(mOId),mPosterId(posterId) { /* Invoke the Qt Designer generated object setup routine */ ui.setupUi(this); @@ -75,6 +76,13 @@ CreateGxsForumMsg::CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessage mStateHelper->addLoadPlaceholder(CREATEGXSFORUMMSG_PARENTMSG, ui.forumSubject); mStateHelper->addClear(CREATEGXSFORUMMSG_PARENTMSG, ui.forumName); + mStateHelper->addWidget(CREATEGXSFORUMMSG_ORIGMSG, ui.buttonBox->button(QDialogButtonBox::Ok)); + mStateHelper->addWidget(CREATEGXSFORUMMSG_ORIGMSG, ui.innerFrame); + mStateHelper->addLoadPlaceholder(CREATEGXSFORUMMSG_ORIGMSG, ui.forumName); + mStateHelper->addLoadPlaceholder(CREATEGXSFORUMMSG_ORIGMSG, ui.forumSubject); + mStateHelper->addClear(CREATEGXSFORUMMSG_ORIGMSG, ui.forumName); + + QString text = mOId.isNull()?(pId.isNull() ? tr("Start New Thread") : tr("Post Forum Message")):tr("Edit Message"); setWindowTitle(text); @@ -129,13 +137,24 @@ void CreateGxsForumMsg::newMsg() //std::cerr << "Initing ID chooser. Sign flags = " << std::hex << mForumMeta.mSignFlags << std::dec << std::endl; - ui.idChooser->loadIds(IDCHOOSER_ID_REQUIRED, RsGxsId()); + if(!mPosterId.isNull()) + { + std::set id_set ; + id_set.insert(mPosterId) ; + + ui.idChooser->loadIds(IDCHOOSER_ID_REQUIRED | IDCHOOSER_NO_CREATE, mPosterId); + ui.idChooser->setIdConstraintSet(id_set); + } + else + ui.idChooser->loadIds(IDCHOOSER_ID_REQUIRED, mPosterId); if (mForumId.isNull()) { mStateHelper->setActive(CREATEGXSFORUMMSG_FORUMINFO, false); mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, false); + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, false); mStateHelper->clear(CREATEGXSFORUMMSG_FORUMINFO); mStateHelper->clear(CREATEGXSFORUMMSG_PARENTMSG); + mStateHelper->clear(CREATEGXSFORUMMSG_ORIGMSG); ui.forumName->setText(tr("No Forum")); return; }//if ( mForumId.isNull()) @@ -174,11 +193,53 @@ void CreateGxsForumMsg::newMsg() uint32_t token; mForumQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, CREATEGXSFORUMMSG_PARENTMSG); }//if (mParentId.isNull()) + + if (mOrigMsgId.isNull()) { + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, true); + mOrigMsgLoaded = true; + } else { + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, true); + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; + + GxsMsgReq msgIds; + std::vector &vect = msgIds[mForumId]; + vect.push_back(mOrigMsgId); + + //std::cerr << "ForumsV2Dialog::newMsg() Requesting Parent Summary(" << mParentId << ")"; + //std::cerr << std::endl; + + uint32_t token; + mForumQueue->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, msgIds, CREATEGXSFORUMMSG_ORIGMSG); + }//if (mParentId.isNull()) } void CreateGxsForumMsg::loadFormInformation() { - if (!mParentId.isNull()) { + if (!mOrigMsgId.isNull()) + { + if (mOrigMsgLoaded) { + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, true); + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, false); + } else { + //std::cerr << "CreateGxsForumMsg::loadMsgInformation() ParentMsg not Loaded Yet"; + //std::cerr << std::endl; + + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, false); + + return; + } + } + else + { + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, true); + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, false); + } + + + if (!mParentId.isNull()) + { if (mParentMsgLoaded) { mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, true); mStateHelper->setLoading(CREATEGXSFORUMMSG_PARENTMSG, false); @@ -190,7 +251,9 @@ void CreateGxsForumMsg::loadFormInformation() return; } - } else { + } + else + { mStateHelper->setActive(CREATEGXSFORUMMSG_PARENTMSG, true); mStateHelper->setLoading(CREATEGXSFORUMMSG_PARENTMSG, false); } @@ -212,17 +275,22 @@ void CreateGxsForumMsg::loadFormInformation() //std::cerr << "CreateGxsForumMsg::loadMsgInformation() using signFlags=" << std::hex << mForumMeta.mSignFlags << std::dec << std::endl; + uint32_t fl = IDCHOOSER_ID_REQUIRED ; + if( (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG) || (mForumMeta.mSignFlags & GXS_SERV::FLAG_AUTHOR_AUTHENTICATION_GPG_KNOWN)) - ui.idChooser->setFlags(IDCHOOSER_ID_REQUIRED | IDCHOOSER_NON_ANONYMOUS) ; - else - ui.idChooser->setFlags(IDCHOOSER_ID_REQUIRED) ; - + fl |= IDCHOOSER_NON_ANONYMOUS ; + + if(!mPosterId.isNull()) + fl |= IDCHOOSER_NO_CREATE; + + ui.idChooser->setFlags(fl) ; + QString name = QString::fromUtf8(mForumMeta.mGroupName.c_str()); QString subj; if(!mOrigMsgId.isNull()) { - subj = QString::fromUtf8(mParentMsg.mMeta.mMsgName.c_str()); + subj = QString::fromUtf8(mOrigMsg.mMeta.mMsgName.c_str()); } else if (!mParentId.isNull()) { @@ -240,6 +308,7 @@ void CreateGxsForumMsg::loadFormInformation() ui.forumName->setText(misc::removeNewLine(name)); ui.forumSubject->setText(misc::removeNewLine(subj)); + ui.forumSubject->setReadOnly(!mOrigMsgId.isNull()); if (ui.forumSubject->text().isEmpty()) { @@ -380,7 +449,7 @@ void CreateGxsForumMsg::reject() QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr("Cancel Forum Message"), tr("Forum Message has not been sent yet!\n" - "Please confirm that you want to discard this message?"), + "Do you want to discard this message?"), QMessageBox::Yes | QMessageBox::No); switch (ret) { case QMessageBox::Yes: @@ -522,6 +591,35 @@ void CreateGxsForumMsg::loadForumCircleInfo(const uint32_t& token) } } +void CreateGxsForumMsg::loadOrigMsg(const uint32_t &token) +{ + //std::cerr << "CreateGxsForumMsg::loadParentMsg()"; + //std::cerr << std::endl; + + // Only grab one.... ignore more (shouldn't be any). + std::vector msgs; + if (rsGxsForums->getMsgData(token, msgs)) + { + if (msgs.size() != 1) + { + /* error */ + std::cerr << "CreateGxsForumMsg::loadOrigMsg() ERROR wrong number of msgs"; + std::cerr << std::endl; + + mStateHelper->setActive(CREATEGXSFORUMMSG_ORIGMSG, false); + mStateHelper->setLoading(CREATEGXSFORUMMSG_ORIGMSG, false); + + return; + } + + mOrigMsg = msgs[0]; + mOrigMsgLoaded = true; + + loadFormInformation(); + } +} + + void CreateGxsForumMsg::loadParentMsg(const uint32_t &token) { //std::cerr << "CreateGxsForumMsg::loadParentMsg()"; @@ -563,6 +661,9 @@ void CreateGxsForumMsg::loadRequest(const TokenQueue *queue, const TokenRequest case CREATEGXSFORUMMSG_FORUMINFO: loadForumInfo(req.mToken); break; + case CREATEGXSFORUMMSG_ORIGMSG: + loadOrigMsg(req.mToken); + break; case CREATEGXSFORUMMSG_PARENTMSG: loadParentMsg(req.mToken); break; diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h index f3be33275..7f84a434b 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.h @@ -36,7 +36,7 @@ class CreateGxsForumMsg : public QDialog, public TokenResponse Q_OBJECT public: - CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId, const RsGxsMessageId &moId); + CreateGxsForumMsg(const RsGxsGroupId &fId, const RsGxsMessageId &pId, const RsGxsMessageId &moId, const RsGxsId &posterId = RsGxsId()); ~CreateGxsForumMsg(); void newMsg(); /* cleanup */ @@ -61,18 +61,22 @@ private: void loadForumInfo(const uint32_t &token); void loadParentMsg(const uint32_t &token); + void loadOrigMsg(const uint32_t &token); void loadForumCircleInfo(const uint32_t &token); RsGxsGroupId mForumId; RsGxsCircleId mCircleId ; RsGxsMessageId mParentId; RsGxsMessageId mOrigMsgId; + RsGxsId mPosterId; bool mParentMsgLoaded; + bool mOrigMsgLoaded; bool mForumMetaLoaded; bool mForumCircleLoaded ; RsGxsForumMsg mParentMsg; + RsGxsForumMsg mOrigMsg; RsGroupMetaData mForumMeta; RsGxsCircleGroup mForumCircleData ; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index b99af03f4..ed25b4512 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -200,7 +200,7 @@ GxsForumThreadWidget::GxsForumThreadWidget(const RsGxsGroupId &forumId, QWidget ui->threadTreeWidget->setItemDelegateForColumn(COLUMN_THREAD_DISTRIBUTION,new DistributionItemDelegate()) ; - connect(ui->versions_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changedThread())); + connect(ui->versions_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(changedVersion())); connect(ui->threadTreeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(threadListCustomPopupMenu(QPoint))); connect(ui->postText, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuTextBrowser(QPoint))); @@ -690,6 +690,17 @@ void GxsForumThreadWidget::togglethreadview_internal() } } +void GxsForumThreadWidget::changedVersion() +{ + mThreadId = RsGxsMessageId(ui->versions_CB->itemData(ui->versions_CB->currentIndex()).toString().toStdString()) ; + + if (mFillThread) { + return; + } + ui->postText->resetImagesStatus(Settings->getForumLoadEmbeddedImages()) ; + insertMessage(); +} + void GxsForumThreadWidget::changedThread() { /* just grab the ids of the current item */ @@ -697,20 +708,10 @@ void GxsForumThreadWidget::changedThread() if (!item || !item->isSelected()) { mThreadId.clear(); + mOrigThreadId.clear(); } else { - mThreadId.clear(); - if(ui->versions_CB->count() > 0) - { - mThreadId = RsGxsMessageId(ui->versions_CB->itemData(ui->versions_CB->currentIndex()).toString().toStdString()) ; - mOrigThreadId = RsGxsMessageId(ui->versions_CB->itemData(0).toString().toStdString()) ; - } - - if(mThreadId.isNull()) - { - mThreadId = RsGxsMessageId(item->data(COLUMN_THREAD_MSGID, Qt::DisplayRole).toString().toStdString()); - mOrigThreadId = mThreadId ; - } + mThreadId = mOrigThreadId = RsGxsMessageId(item->data(COLUMN_THREAD_MSGID, Qt::DisplayRole).toString().toStdString()); } if (mFillThread) { @@ -1603,7 +1604,7 @@ void GxsForumThreadWidget::insertMessage() for(uint32_t i=0;i<(*it).size();++i) { - ui->versions_CB->insertItem(i,DateTime::formatLongDateTime( (*it)[i].first)); + ui->versions_CB->insertItem(i, ((i==0)?tr("(Latest) "):tr("(Old) "))+" "+DateTime::formatLongDateTime( (*it)[i].first)); ui->versions_CB->setItemData(i,QString::fromStdString((*it)[i].second.toStdString())); std::cerr << " added new post version " << (*it)[i].first << " " << (*it)[i].second << std::endl; @@ -2176,7 +2177,7 @@ void GxsForumThreadWidget::editForumMessageData(const RsGxsForumMsg& msg) if (!msg.mMeta.mAuthorId.isNull()) { - CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), msg.mMeta.mParentId, msg.mMeta.mMsgId); + CreateGxsForumMsg *cfm = new CreateGxsForumMsg(groupId(), msg.mMeta.mParentId, msg.mMeta.mMsgId, msg.mMeta.mAuthorId); cfm->insertPastedText(QString::fromUtf8(msg.mMsg.c_str())) ; cfm->show(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h index 456408fae..71103507e 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.h @@ -75,6 +75,7 @@ private slots: void contextMenuTextBrowser(QPoint point); void changedThread(); + void changedVersion(); void clickedThread (QTreeWidgetItem *item, int column); void reply_with_private_message(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp index fee9ff5f5..c974986d0 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp @@ -210,7 +210,9 @@ void GxsForumsFillThread::run() { // Ensuring that the post exists allows to only collect the existing data. - mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt2->second.mMeta.mPublishTs,msgIt2->second.mMeta.mMsgId)) ; + if(mPostVersions[msgIt->second.mMeta.mOrigMsgId].empty()) + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt2->second.mMeta.mPublishTs,msgIt2->second.mMeta.mMsgId)) ; + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; } } From ea82d26b756f9c3f959c214b3c350740c9b0fdc6 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 9 Feb 2017 23:35:59 +0100 Subject: [PATCH 007/230] fixed signature verification bug for versionned messages --- libretroshare/src/gxs/gxssecurity.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/gxs/gxssecurity.cc b/libretroshare/src/gxs/gxssecurity.cc index 20ddc1462..8a5bb5851 100644 --- a/libretroshare/src/gxs/gxssecurity.cc +++ b/libretroshare/src/gxs/gxssecurity.cc @@ -436,8 +436,12 @@ bool GxsSecurity::validateNxsMsg(const RsNxsMsg& msg, const RsTlvKeySignature& s msgMeta.signSet.TlvClear(); RsGxsMessageId msgId = msgMeta.mMsgId, origMsgId = msgMeta.mOrigMsgId; - msgMeta.mOrigMsgId.clear(); + + if(msgMeta.mOrigMsgId == msgMeta.mMsgId) // message is not versionned, then the signature was made with mOrigMsgId==NULL + msgMeta.mOrigMsgId.clear(); + msgMeta.mMsgId.clear(); + int signOk = 0 ; { From 22f2edb5ad374516e21dcee2a1bb03545c2679a9 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Feb 2017 10:45:30 +0100 Subject: [PATCH 008/230] removed debug info and added comment --- libretroshare/src/gxs/rsgenexchange.cc | 4 +++- retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index aa098a1dc..d2e7bac83 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -2138,7 +2138,9 @@ void RsGenExchange::publishMsgs() if(createOk && validSize) { // empty orig msg id means this is the original - // msg + // msg. + // (csoler) Why are we doing this??? + if(msg->metaData->mOrigMsgId.isNull()) { msg->metaData->mOrigMsgId = msg->metaData->mMsgId; diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp index c974986d0..0b7991027 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp @@ -31,7 +31,7 @@ #include #include -#define DEBUG_FORUMS +//#define DEBUG_FORUMS #define PROGRESSBAR_MAX 100 @@ -232,7 +232,7 @@ void GxsForumsFillThread::run() if(it2 != mPostVersions.end()) { - for(uint32_t j=0;j<(*it2).size();++j) + for(int32_t j=0;j<(*it2).size();++j) if((*it2)[j].second != sub_msg_id) // dont copy it, since it is already present at slot i v.append((*it2)[j]) ; @@ -261,7 +261,7 @@ void GxsForumsFillThread::run() #ifdef DEBUG_FORUMS std::cerr << " most recent version " << (*it)[0].first << " " << (*it)[0].second << std::endl; #endif - for(uint32_t i=1;i<(*it).size();++i) + for(int32_t i=1;i<(*it).size();++i) { msgs.erase((*it)[i].second) ; From bd8189ccdf93b6707417f5e3768a0c7799ff79ec Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 28 Feb 2017 18:05:44 +0100 Subject: [PATCH 009/230] added test to prevent msgs with a different name to be used as different version --- .../src/gui/gxsforums/GxsForumsFillThread.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp index 0b7991027..199748346 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumsFillThread.cpp @@ -198,24 +198,30 @@ void GxsForumsFillThread::run() for ( std::map::iterator msgIt = msgs.begin(); msgIt != msgs.end();++msgIt) if(!msgIt->second.mMeta.mOrigMsgId.isNull() && msgIt->second.mMeta.mOrigMsgId != msgIt->second.mMeta.mMsgId) - { + { #ifdef DEBUG_FORUMS std::cerr << " Post " << msgIt->second.mMeta.mMsgId << " is a new version of " << msgIt->second.mMeta.mOrigMsgId << std::endl; #endif std::map::iterator msgIt2 = msgs.find(msgIt->second.mMeta.mOrigMsgId); - // always add the post a a self version + // Ensuring that the post exists allows to only collect the existing data. - if(msgIt2 != msgs.end()) - { - // Ensuring that the post exists allows to only collect the existing data. + if(msgIt2 == msgs.end()) + continue ; - if(mPostVersions[msgIt->second.mMeta.mOrigMsgId].empty()) - mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt2->second.mMeta.mPublishTs,msgIt2->second.mMeta.mMsgId)) ; + // Make sure that the author is the same than the original message. This should always happen, but nothing can prevent someone to + // craft a new version of a message with his own signature. - mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; - } - } + if(msgIt2->second.mMeta.mAuthorId != msgIt->second.mMeta.mAuthorId) + continue ; + + // always add the post a self version + + if(mPostVersions[msgIt->second.mMeta.mOrigMsgId].empty()) + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt2->second.mMeta.mPublishTs,msgIt2->second.mMeta.mMsgId)) ; + + mPostVersions[msgIt->second.mMeta.mOrigMsgId].push_back(QPair(msgIt->second.mMeta.mPublishTs,msgIt->second.mMeta.mMsgId)) ; + } // The following code assembles all new versions of a given post into the same array, indexed by the oldest version of the post. From fdab4808d40eac3334cc4b36821360b5f3d45022 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Mar 2017 18:10:14 +0100 Subject: [PATCH 010/230] added minimum version number for debian stretch --- build_scripts/Debian+Ubuntu/control.stretch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_scripts/Debian+Ubuntu/control.stretch b/build_scripts/Debian+Ubuntu/control.stretch index 9b557e3b8..6968c9964 100644 --- a/build_scripts/Debian+Ubuntu/control.stretch +++ b/build_scripts/Debian+Ubuntu/control.stretch @@ -2,7 +2,7 @@ Source: retroshare06 Section: devel Priority: standard Maintainer: Cyril Soler -Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.6, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev, qtmultimedia5-dev, qttools5-dev, libqt5x11extras5-dev, qt5-default +Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.6, libsqlcipher-dev (>= 3.4.0), libmicrohttpd-dev, libavcodec-dev, qtmultimedia5-dev, qttools5-dev, libqt5x11extras5-dev, qt5-default Standards-Version: 3.9.6 Homepage: http://retroshare.sourceforge.net From a0d1089559c5cfb6219e0bddd814c96bd48f83ae Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 11 Mar 2017 18:15:35 +0100 Subject: [PATCH 011/230] added branch parameter to makeSourcePackage script --- build_scripts/Debian+Ubuntu/makeSourcePackage.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh index 45c4ffc33..5cbb59f24 100755 --- a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh +++ b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh @@ -4,6 +4,7 @@ version="0.6.2" gitpath="https://github.com/RetroShare/RetroShare.git" workdir=retroshare06-${version} +branch="v0.6.2-official_release" #bubba3="Y" # comment out to compile for bubba3 ###################################################### @@ -66,6 +67,7 @@ echo " "Commit count : ${ccount} echo " "Date : ${date} echo " "Time : ${time} echo " "Hash : ${hhsh} +echo " "Using branch : ${branch} echo " "Using revision : ${rev} echo Done. @@ -80,7 +82,7 @@ echo Extracting base archive... mkdir -p ${workdir}/src echo Checking out latest snapshot... cd ${workdir}/src -git clone --depth 1 https://github.com/RetroShare/RetroShare.git . +git clone --depth 1 https://github.com/RetroShare/RetroShare.git --single-branch --branch $branch . cd - if ! test -d ${workdir}/src/libretroshare/; then From 21143742fd7acdc04dd6b51739f12a7cad3300b6 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 15 Mar 2017 19:26:07 +0100 Subject: [PATCH 012/230] fixed update of Tor proxy address in hidden nodes server page --- libretroshare/src/rsserver/p3peers.cc | 3 +++ retroshare-gui/src/gui/settings/ServerPage.cpp | 8 +++++++- retroshare-gui/src/gui/settings/ServerPage.h | 1 + retroshare-gui/src/gui/settings/ServerPage.ui | 4 ++-- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/rsserver/p3peers.cc b/libretroshare/src/rsserver/p3peers.cc index 73a5801fd..f43dfb485 100644 --- a/libretroshare/src/rsserver/p3peers.cc +++ b/libretroshare/src/rsserver/p3peers.cc @@ -1037,6 +1037,9 @@ bool p3Peers::setProxyServer(const uint32_t type, const std::string &addr_str, c std::cerr << "(EE) attempt to set proxy server address to something not allowed: " << addr_str << ":" << port << std::endl; return false ; } + + std::cerr << "Settign proxy server address to " << addr_str << ":" << port << std::endl; + struct sockaddr_storage addr; struct sockaddr_in *addrv4p = (struct sockaddr_in *) &addr; addrv4p->sin_family = AF_INET; diff --git a/retroshare-gui/src/gui/settings/ServerPage.cpp b/retroshare-gui/src/gui/settings/ServerPage.cpp index 4357f0d2c..d9dd900fb 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.cpp +++ b/retroshare-gui/src/gui/settings/ServerPage.cpp @@ -109,7 +109,7 @@ ServerPage::ServerPage(QWidget * parent, Qt::WindowFlags flags) connect( ui.netModeComboBox, SIGNAL( activated ( int ) ), this, SLOT( toggleUPnP( ) ) ); connect( ui.allowIpDeterminationCB, SIGNAL( toggled( bool ) ), this, SLOT( toggleIpDetermination(bool) ) ); connect( ui.cleanKnownIPs_PB, SIGNAL( clicked( ) ), this, SLOT( clearKnownAddressList() ) ); - connect( ui.testIncoming_PB, SIGNAL( clicked( ) ), this, SLOT( updateInProxyIndicator() ) ); + connect( ui.testIncoming_PB, SIGNAL( clicked( ) ), this, SLOT( saveAndTestInProxy() ) ); connect( ui.showDiscStatusBar,SIGNAL(toggled(bool)),this,SLOT(updateShowDiscStatusBar())) ; #ifdef SERVER_DEBUG @@ -132,6 +132,12 @@ ServerPage::ServerPage(QWidget * parent, Qt::WindowFlags flags) connect(ui.totalUploadRate, SIGNAL(valueChanged(int)),this,SLOT(saveRates())); } +void ServerPage::saveAndTestInProxy() +{ + saveAddresses(); + updateInProxyIndicator() ; +} + void ServerPage::checkIpRange(const QString& ipstr) { QColor color; diff --git a/retroshare-gui/src/gui/settings/ServerPage.h b/retroshare-gui/src/gui/settings/ServerPage.h index 02685bfc0..5b300e084 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.h +++ b/retroshare-gui/src/gui/settings/ServerPage.h @@ -61,6 +61,7 @@ private slots: // ban list void updateSelectedBlackListIP(int row, int, int, int); void updateSelectedWhiteListIP(int row,int,int,int); + void saveAndTestInProxy(); void addIpRangeToBlackList(); void addIpRangeToWhiteList(); void moveToWhiteList0(); diff --git a/retroshare-gui/src/gui/settings/ServerPage.ui b/retroshare-gui/src/gui/settings/ServerPage.ui index 3755b0536..a0f16a62b 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.ui +++ b/retroshare-gui/src/gui/settings/ServerPage.ui @@ -26,7 +26,7 @@ - 0 + 2 @@ -985,7 +985,7 @@ You can connect to Hidden Nodes, even if you are running a standard Node, so why <html><head/><body><p>This button simulates a SSL connection to your hidden address using the corresponding proxy. If your hidden node is reachable, it should cause a SSL handshake error, which RS will interpret as a valid connection state. This operation might also cause several &quot;security warning&quot; about connections from your local host IP (127.0.0.1) in the News Feed if you enabled it, which you should interpret as a sign of good communication.</p></body></html> - Test + Apply From e4fad4530d7101937e80cc8540ec78bdda0bb2ec Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 15 Mar 2017 20:51:40 +0100 Subject: [PATCH 013/230] fixed layout in ConfCertDialog, removed overnumerous tabs --- .../src/gui/connect/ConfCertDialog.cpp | 4 +- .../src/gui/connect/ConfCertDialog.ui | 280 +++++++----------- 2 files changed, 114 insertions(+), 170 deletions(-) diff --git a/retroshare-gui/src/gui/connect/ConfCertDialog.cpp b/retroshare-gui/src/gui/connect/ConfCertDialog.cpp index 958b2be54..bf66ce5ce 100644 --- a/retroshare-gui/src/gui/connect/ConfCertDialog.cpp +++ b/retroshare-gui/src/gui/connect/ConfCertDialog.cpp @@ -239,9 +239,9 @@ void ConfCertDialog::load() ui.version->show(); ui.label_version->show(); - ui.groupBox->show(); + //ui.groupBox->show(); ui.groupBox_4->show(); - ui.tabWidget->show(); + //ui.tabWidget->show(); //ui.rsid->hide(); //ui.label_rsid->hide(); ui.pgpfingerprint->show(); diff --git a/retroshare-gui/src/gui/connect/ConfCertDialog.ui b/retroshare-gui/src/gui/connect/ConfCertDialog.ui index 469bae218..fec736831 100644 --- a/retroshare-gui/src/gui/connect/ConfCertDialog.ui +++ b/retroshare-gui/src/gui/connect/ConfCertDialog.ui @@ -6,8 +6,8 @@ 0 0 - 722 - 651 + 1104 + 1086 @@ -69,7 +69,7 @@ - 1 + 0 @@ -85,7 +85,7 @@ - Friend info + Node info: @@ -249,6 +249,114 @@ + + + + Current address: + + + + + + + + 0 + + + 65535 + + + 7812 + + + + + + + + + + 0 + + + 65535 + + + 7812 + + + + + + + Dynamic DNS + + + + + + + + + + External Address + + + + + + + + + + Port + + + + + + + Port + + + + + + + Qt::LeftToRight + + + Local Address + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + List of known addresses: + + + + + + Qt::DefaultContextMenu + + + QAbstractItemView::MultiSelection + + + + + + @@ -264,170 +372,6 @@ - - - - :/images/kcmsystem24.png:/images/kcmsystem24.png - - - Connectivity - - - - - - 1 - - - - Peer Addresses - - - - - - Peer Address - - - - - - Qt::Vertical - - - - 20 - 47 - - - - - - - - Qt::Vertical - - - - 20 - 47 - - - - - - - - - - Qt::LeftToRight - - - Local Address - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - External Address - - - - - - - - - - Dynamic DNS - - - - - - - - - - Port - - - - - - - Port - - - - - - - 0 - - - 65535 - - - 7812 - - - - - - - 0 - - - 65535 - - - 7812 - - - - - - - - - - - - - Addresses list - - - - - - Addresses list - - - - - - - Qt::DefaultContextMenu - - - QAbstractItemView::MultiSelection - - - - - - - - - Retroshare Certificate From 107d48f1b8152bde58c0ecfaa2c632c6c4259f7d Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 15 Mar 2017 22:50:51 +0100 Subject: [PATCH 014/230] Fix windows height at first start. --- retroshare-gui/src/gui/common/rwindow.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/retroshare-gui/src/gui/common/rwindow.cpp b/retroshare-gui/src/gui/common/rwindow.cpp index 32cfba943..e86be7fa2 100644 --- a/retroshare-gui/src/gui/common/rwindow.cpp +++ b/retroshare-gui/src/gui/common/rwindow.cpp @@ -76,11 +76,20 @@ RWindow::restoreWindowState() m_bSaveStateOnClose = true; // now we save the window state on close #if QT_VERSION >= 0x040200 - QByteArray geometry = getSetting("Geometry", QByteArray()).toByteArray(); - if (geometry.isEmpty()) + QByteArray geo = getSetting("Geometry", QByteArray()).toByteArray(); + if (geo.isEmpty()) + { adjustSize(); + QRect rect = geometry(); + int h = fontMetrics().height()*40; + if (rect.height() Date: Thu, 16 Mar 2017 21:01:27 +0100 Subject: [PATCH 015/230] allowed to edit subject hen editing forum posts. Only the latest subject is visible --- retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp index 788490e40..aaab89231 100644 --- a/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp +++ b/retroshare-gui/src/gui/gxsforums/CreateGxsForumMsg.cpp @@ -308,7 +308,7 @@ void CreateGxsForumMsg::loadFormInformation() ui.forumName->setText(misc::removeNewLine(name)); ui.forumSubject->setText(misc::removeNewLine(subj)); - ui.forumSubject->setReadOnly(!mOrigMsgId.isNull()); + //ui.forumSubject->setReadOnly(!mOrigMsgId.isNull()); if (ui.forumSubject->text().isEmpty()) { From 5efa8e3f3f9f4c177150e254e28dc5c430ac2fdf Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 17 Mar 2017 22:14:14 +0100 Subject: [PATCH 016/230] Fix Windows Compilation with CONFIG+=no_sqlcipher --- libretroshare/src/libretroshare.pro | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 551fbf335..03c50d954 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -279,7 +279,12 @@ win32 { CONFIG += upnp_miniupnpc - LIBS += -lsqlcipher + no_sqlcipher { + PKGCONFIG *= sqlite3 + LIBS += -lsqlite3 + } else { + LIBS += -lsqlcipher + } DEPENDPATH += . $$INC_DIR INCLUDEPATH += . $$INC_DIR From 4f24b95b163ddc0c276c5ea308e477affbf2f54b Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 19 Mar 2017 21:28:28 +0100 Subject: [PATCH 017/230] added new serialization code test example --- .../src/serialization/serial_test.cc | 78 +++++ libretroshare/src/serialization/serializer.h | 299 ++++++++++++++++++ 2 files changed, 377 insertions(+) create mode 100644 libretroshare/src/serialization/serial_test.cc create mode 100644 libretroshare/src/serialization/serializer.h diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc new file mode 100644 index 000000000..a0409aaed --- /dev/null +++ b/libretroshare/src/serialization/serial_test.cc @@ -0,0 +1,78 @@ +// COMPILE_LINE: g++ -g serial_test.cc -I.. -o serial_test ../lib/libretroshare.a -lssl -lcrypto -lstdc++ -lpthread +// +// + +#include "serializer.h" +#include "util/rsmemory.h" +#include "util/rsprint.h" +#include "serialiser/rsserial.h" + +static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; +static const uint8_t RS_ITEM_SUBTYPE_TEST1 = 0x01 ; + +class RsTestItem: public RsSerializable +{ + public: + RsTestItem() : RsSerializable(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) {} + + virtual void serial_process(RsSerializable::SerializeJob j, SerializeContext& ctx) + { + RsTypeSerializer ().serial_process(j,ctx,ts) ; + RsTypeSerializer().serial_process(j,ctx,str) ; + } + + // derived from RsItem + // + virtual void clear() {} + virtual std::ostream& print(std::ostream&,uint16_t indent) {} + + + private: + std::string str ; + uint64_t ts ; +}; + +class RsTestSerializer: public RsSerializer +{ + public: + + virtual RsSerializable *create_item(uint16_t service,uint8_t subtype) + { + switch(subtype) + { + case RS_ITEM_SUBTYPE_TEST1: return new RsTestItem(); + + default: + return NULL ; + } + } +}; + +int main(int argc,char *argv[]) +{ + try + { + RsTestItem t1 ; + + uint32_t size = RsTestSerializer().size_item(&t1); + + std::cerr << "t1.serial_size() = " << size << std::endl; + + RsTemporaryMemory mem1(size); + + RsTestSerializer().serialize_item(&t1,mem1,mem1.size()) ; + + RsSerializable *t2 = RsTestSerializer().deserialize_item(mem1,mem1.size()) ; + + std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; + + return 0; + } + catch(std::exception& e) + { + std::cerr << "Exception caught: " << e.what() << std::endl; + return 1; + } +} + + diff --git a/libretroshare/src/serialization/serializer.h b/libretroshare/src/serialization/serializer.h new file mode 100644 index 000000000..65ce10269 --- /dev/null +++ b/libretroshare/src/serialization/serializer.h @@ -0,0 +1,299 @@ +#pragma once + +#include +#include +#include +#include +#include "arpa/inet.h" +#include "serialiser/rsserial.h" + +class RsItem ; + +class SerializeContext; + +class RsSerializable: public RsItem +{ +public: + typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; + + RsSerializable(uint8_t version,uint16_t service,uint8_t id) + : RsItem(version,service,id) + { + } + + /** + * @brief serialize this object to the given buffer + * @param Job to do: serialise or deserialize. + * @param data Chunk of memory were to dump the serialized data + * @param size Size of memory chunk + * @param offset Readed to determine at witch offset start writing data, + * written to inform caller were written data ends, the updated value + * is usually passed by the caller to serialize of another + * RsSerializable so it can write on the same chunk of memory just + * after where this RsSerializable has been serialized. + * @return true if serialization successed, false otherwise + */ + + virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; +}; + +class SerializeContext +{ + public: + + SerializeContext(uint8_t *data,uint32_t size) + : mData(data),mSize(size),mOffset(0),mOk(true) {} + + unsigned char *mData ; + uint32_t mSize ; + uint32_t mOffset ; + bool mOk ; +}; +template T ntoh(T t) +{ + if(sizeof(T) == 4) return ntohl(t) ; + if(sizeof(T) == 2) return ntohs(t) ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; + return t; +} +template T hton(T t) +{ + if(sizeof(T) == 4) return htonl(t) ; + if(sizeof(T) == 2) return htons(t) ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; + return t; +} + +template class RsTypeSerializerBase +{ + public: + void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) + { + switch(j) + { + case RsSerializable::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; + break ; + + case RsSerializable::DESERIALIZE: deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + break ; + + case RsSerializable::SERIALIZE: serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + break ; + + default: + throw std::runtime_error("Unknown serial job") ; + } + } + + protected: + virtual bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member)const=0; + virtual bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member) const=0; + virtual uint32_t serial_size(const T& /* member */)const=0; +}; + +/// Templates to generate RsSerializer for standard integral types +template class t_SerializerNType : public RsTypeSerializerBase +{ +protected: + bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member)const + { + if (size <= offset || size - offset < SIZE) + return false; + + N tmp = hton(member); + memcpy(data+offset, &tmp, SIZE); + offset += SIZE; + return true; + } + bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member)const + { + if (size <= offset || size - offset < SIZE) + return false; + + N tmp ; + memcpy(&tmp, data+offset, SIZE); + member = ntoh(tmp); + offset += SIZE; + return true; + } + + inline uint32_t serial_size(const N& /* member */)const + { + return SIZE; + } +}; + +template class RsTypeSerializer +{ +// public: +// virtual void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,const T& member)=0; +// +// protected: +// virtual bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member)const=0; +// virtual bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member)=0; +// virtual uint32_t serial_size(const T& /* member */)const=0; +}; + +template<> class RsTypeSerializer : public t_SerializerNType{}; +template<> class RsTypeSerializer : public t_SerializerNType{}; +template<> class RsTypeSerializer : public t_SerializerNType{}; +template<> class RsTypeSerializer : public t_SerializerNType{}; +template<> class RsTypeSerializer : public t_SerializerNType{}; + +/// Serializer for non negative float +template<> class RsTypeSerializer : public RsTypeSerializerBase +{ +protected: + bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const float& f)const + { + uint32_t sz = serial_size(f); + if ( !data || size <= offset || size - offset < sz ) + return false; + + const float tmp = f; + if(tmp < 0.0f) + { + std::cerr << "(EE) Cannot serialise invalid negative float value " + << tmp << " in " << __PRETTY_FUNCTION__ << std::endl; + return false; + } + + /* This serialisation is quite accurate. The max relative error is approx. + * 0.01% and most of the time less than 1e-05% The error is well distributed + * over numbers also. */ + uint32_t n; + if(tmp < 1e-7) n = (~(uint32_t)0); + else n = ((uint32_t)( (1.0f/(1.0f+tmp) * (~(uint32_t)0)))); + n = hton(n); + memcpy(data+offset, &n, sz); + offset += sz; + return true; + } + + bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f)const + { + uint32_t sz = serial_size(f); + if ( !data || size <= offset || + size - offset < sz ) + return false; + + uint32_t n; + memcpy(&n, data+offset, sz); + n = ntoh(n); + f = 1.0f/ ( n/(float)(~(uint32_t)0)) - 1.0f; + return true; + } + inline uint32_t serial_size(const float&)const { return 4; } +}; + +/// Serializer for std::string +template<> class RsTypeSerializer : public RsTypeSerializerBase +{ + protected: + bool serialize(uint8_t data[], uint32_t size, uint32_t &offset,const std::string& s)const + { + if ( !data || size <= offset || size - offset < serial_size(s)) + return false; + + uint32_t charsLen = s.length(); + uint32_t netLen = hton(charsLen); + memcpy(data+offset, &netLen, 4); offset += 4; + memcpy(data+offset, s.c_str(), charsLen); offset += charsLen; + return true; + } + bool deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,std::string& s)const + { + if ( !data || size <= offset || size - offset < 4 ) return false; + uint32_t charsLen; + memcpy(&charsLen, data+offset, 4); offset += 4; + charsLen = ntoh(charsLen); + + if ( size <= offset || size - offset < charsLen ) return false; + s.clear(); + s.insert(0, (char*)data+offset, charsLen); + offset += charsLen; + return true; + } + inline uint32_t serial_size(const std::string& s)const + { + return s.length() + 4; + } +}; + + + +class RsSerializer +{ + public: + /*! create_item + * should be overloaded to create the correct type of item depending on the data + */ + virtual RsSerializable *create_item(uint16_t service, uint8_t item_sub_id) + { + return NULL ; + } + + RsSerializable *deserialize_item(const uint8_t *data,uint32_t size) + { + uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; + + RsSerializable *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; + + if(!item) + { + std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + return NULL ; + } + + SerializeContext ctx(const_cast(data),size); + item->serial_process(RsSerializable::DESERIALIZE, ctx) ; + + if(ctx.mOk) + return item ; + + delete item ; + return NULL ; + } + + bool serialize_item(const RsSerializable *item,uint8_t *const data,uint32_t size) + { + SerializeContext ctx(data,0); + + uint32_t tlvsize = size_item(item) ; + + if(tlvsize > size) + throw std::runtime_error("Cannot serialise: not enough room.") ; + + if(!setRsItemHeader(data, tlvsize, const_cast(item)->PacketId(), tlvsize)) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; + return false ; + } + ctx.mOffset = 8; + ctx.mSize = tlvsize; + + const_cast(item)->serial_process(RsSerializable::SERIALIZE,ctx) ; + + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; + return false ; + } + return true ; + } + + uint32_t size_item(const RsSerializable *item) + { + SerializeContext ctx(NULL,0); + + ctx.mSize = 8 ; // header size + const_cast(item)->serial_process(RsSerializable::SIZE_ESTIMATE, ctx) ; + + return ctx.mSize ; + } +}; + + + From 369621f4a40c77aae7fb0d1aed2e30ada0b6dad1 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 20 Mar 2017 23:31:04 +0100 Subject: [PATCH 018/230] simplified new serialization prototype --- .../src/serialization/serial_test.cc | 74 ++++++++++- libretroshare/src/serialization/serializer.h | 117 +++++++++++------- 2 files changed, 144 insertions(+), 47 deletions(-) diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index a0409aaed..08c53b6db 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -2,6 +2,8 @@ // // +#include + #include "serializer.h" #include "util/rsmemory.h" #include "util/rsprint.h" @@ -10,18 +12,79 @@ static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; static const uint8_t RS_ITEM_SUBTYPE_TEST1 = 0x01 ; +// Template serialization of RsTypeSerialiser::serial_process() for unknown/new types +// +// +template<> uint32_t RsTypeSerializer::serial_size(const std::set& s) +{ + return s.size() * 4 + 4 ; +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const std::set& member) +{ + uint32_t tlvsize = serial_size(member) ; + bool ok = true ; + uint32_t offset_save = offset ; + + if(tlvsize + offset >= size) + return false ; + + ok = ok && RsTypeSerializer::serialize(data,size,offset,member.size()) ; + + for(std::set::const_iterator it(member.begin());it!=member.end();++it) + ok = ok && RsTypeSerializer::serialize(data,size,offset,*it) ; + + if(!ok) + { + std::cerr << "(EE) Cannot serialize std::set" << std::endl; + offset = offset_save ; // return the data in the same condition + } + return ok ; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, std::set& member) +{ + bool ok = true ; + uint32_t n = 0 ; + uint32_t offset_save = offset ; + member.clear(); + + ok = ok && RsTypeSerializer::deserialize(data,size,offset,n); + + for(uint32_t i=0;i" << std::endl; + offset = offset_save ; // return the data in the same condition + } + return ok; +} + +// New item class. This class needs to define: +// - a serial_process method that tells which members to serialize +// - overload the clear() and print() methods of RsItem +// class RsTestItem: public RsSerializable { public: RsTestItem() : RsSerializable(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) {} + // Derived from RsSerializable + // virtual void serial_process(RsSerializable::SerializeJob j, SerializeContext& ctx) { - RsTypeSerializer ().serial_process(j,ctx,ts) ; - RsTypeSerializer().serial_process(j,ctx,str) ; + RsTypeSerializer::serial_process(j,ctx,ts ) ; + RsTypeSerializer::serial_process(j,ctx,str) ; + RsTypeSerializer::serial_process(j,ctx,int_set ) ; } - // derived from RsItem + // Derived from RsItem // virtual void clear() {} virtual std::ostream& print(std::ostream&,uint16_t indent) {} @@ -30,8 +93,13 @@ class RsTestItem: public RsSerializable private: std::string str ; uint64_t ts ; + std::set int_set ; }; +// New user-defined serializer class. +// The only required member is the create_item() method, which creates the correct RsSerializable +// that corresponds to a specific (service,subtype) couple. +// class RsTestSerializer: public RsSerializer { public: diff --git a/libretroshare/src/serialization/serializer.h b/libretroshare/src/serialization/serializer.h index 65ce10269..462206c42 100644 --- a/libretroshare/src/serialization/serializer.h +++ b/libretroshare/src/serialization/serializer.h @@ -51,6 +51,7 @@ class SerializeContext }; template T ntoh(T t) { + if(sizeof(T) == 8) return t; if(sizeof(T) == 4) return ntohl(t) ; if(sizeof(T) == 2) return ntohs(t) ; @@ -59,6 +60,7 @@ template T ntoh(T t) } template T hton(T t) { + if(sizeof(T) == 8) return t; if(sizeof(T) == 4) return htonl(t) ; if(sizeof(T) == 2) return htons(t) ; @@ -66,10 +68,11 @@ template T hton(T t) return t; } -template class RsTypeSerializerBase +class RsTypeSerializer { public: - void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) + template + static void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) { switch(j) { @@ -88,16 +91,22 @@ template class RsTypeSerializerBase } protected: - virtual bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member)const=0; - virtual bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member) const=0; - virtual uint32_t serial_size(const T& /* member */)const=0; + template + static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member); + + template + static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); + + template + static uint32_t serial_size(const T& /* member */); }; /// Templates to generate RsSerializer for standard integral types -template class t_SerializerNType : public RsTypeSerializerBase +// +template class t_SerializerNType { -protected: - bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member)const +public: + static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member) { if (size <= offset || size - offset < SIZE) return false; @@ -107,7 +116,7 @@ protected: offset += SIZE; return true; } - bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member)const + static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member) { if (size <= offset || size - offset < SIZE) return false; @@ -119,34 +128,56 @@ protected: return true; } - inline uint32_t serial_size(const N& /* member */)const + static uint32_t serial_size(const N& /* member */) { return SIZE; } }; -template class RsTypeSerializer -{ -// public: -// virtual void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,const T& member)=0; +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint64_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint64_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& member) +{ + return t_SerializerNType::serial_size(member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& member) +{ + return t_SerializerNType::serial_size(member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint64_t& member) +{ + return t_SerializerNType::serial_size(member); +} +//// Float // -// protected: -// virtual bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member)const=0; -// virtual bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member)=0; -// virtual uint32_t serial_size(const T& /* member */)const=0; -}; +template<> + uint32_t RsTypeSerializer::serial_size(const float&){ return 4; } -template<> class RsTypeSerializer : public t_SerializerNType{}; -template<> class RsTypeSerializer : public t_SerializerNType{}; -template<> class RsTypeSerializer : public t_SerializerNType{}; -template<> class RsTypeSerializer : public t_SerializerNType{}; -template<> class RsTypeSerializer : public t_SerializerNType{}; -/// Serializer for non negative float -template<> class RsTypeSerializer : public RsTypeSerializerBase -{ -protected: - bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const float& f)const +template<> +bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const float& f) { uint32_t sz = serial_size(f); if ( !data || size <= offset || size - offset < sz ) @@ -172,7 +203,14 @@ protected: return true; } - bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f)const +template<> uint32_t RsTypeSerializer::serial_size(const std::string& s) +{ + return s.length() + 4; +} + + +template<> + bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f) { uint32_t sz = serial_size(f); if ( !data || size <= offset || @@ -185,14 +223,11 @@ protected: f = 1.0f/ ( n/(float)(~(uint32_t)0)) - 1.0f; return true; } - inline uint32_t serial_size(const float&)const { return 4; } -}; + /// Serializer for std::string -template<> class RsTypeSerializer : public RsTypeSerializerBase -{ - protected: - bool serialize(uint8_t data[], uint32_t size, uint32_t &offset,const std::string& s)const + template<> + bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const std::string& s) { if ( !data || size <= offset || size - offset < serial_size(s)) return false; @@ -203,7 +238,8 @@ template<> class RsTypeSerializer : public RsTypeSerializerBase + bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,std::string& s) { if ( !data || size <= offset || size - offset < 4 ) return false; uint32_t charsLen; @@ -216,13 +252,6 @@ template<> class RsTypeSerializer : public RsTypeSerializerBase Date: Tue, 21 Mar 2017 14:57:06 +0300 Subject: [PATCH 019/230] searchdialog - mark current downloads green --- .../src/gui/FileTransfer/SearchDialog.cpp | 18 ++++++++++++++++++ .../src/gui/FileTransfer/SearchDialog.h | 4 ++++ .../src/gui/qss/stylesheet/qss.default | 1 + 3 files changed, 23 insertions(+) diff --git a/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp b/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp index 851679931..4728dde14 100644 --- a/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp @@ -407,6 +407,13 @@ void SearchDialog::download() for(std::list::const_iterator it(srcIds.begin()); it!=srcIds.end(); ++it) { std::cout << *it << "-" << std::endl; }//for(std::list::const_iterator + //QColor foreground = QColor(0, 128, 0); // green + QColor foreground = textColorDownloading(); + QBrush brush(foreground); + for (int i = 0; i < item->columnCount(); ++i) + { + item->setForeground(i, brush); + } }//if(!rsFiles -> FileRequest( }//if (item->text(SR_HASH_COL).isEmpty()) }//for (int i = 0 @@ -1189,6 +1196,11 @@ void SearchDialog::insertFile(qulonglong searchId, const FileDetail& file, int s found = true ; if (!item->data(SR_DATA_COL, SR_ROLE_LOCAL).toBool()) { + + FileInfo fi; + if (rsFiles->FileDetails(file.hash, RS_FILE_HINTS_DOWNLOAD, fi)) + break; + QColor foreground; int sources = friendSource + anonymousSource ; @@ -1281,6 +1293,12 @@ void SearchDialog::insertFile(qulonglong searchId, const FileDetail& file, int s setForeground = true; } } + if (rsFiles->FileDetails(file.hash, RS_FILE_HINTS_DOWNLOAD, fi)) + { + //foreground = QColor(0, 128, 0); // green + foreground = textColorDownloading(); + setForeground = true; + } if (setForeground) { QBrush brush(foreground); diff --git a/retroshare-gui/src/gui/FileTransfer/SearchDialog.h b/retroshare-gui/src/gui/FileTransfer/SearchDialog.h index bfc5892cc..57846692c 100644 --- a/retroshare-gui/src/gui/FileTransfer/SearchDialog.h +++ b/retroshare-gui/src/gui/FileTransfer/SearchDialog.h @@ -38,6 +38,7 @@ class SearchDialog : public MainPage Q_OBJECT Q_PROPERTY(QColor textColorLocal READ textColorLocal WRITE setTextColorLocal) + Q_PROPERTY(QColor textColorDownloading READ textColorDownloading WRITE setTextColorDownloading) Q_PROPERTY(QColor textColorNoSources READ textColorNoSources WRITE setTextColorNoSources) Q_PROPERTY(QColor textColorLowSources READ textColorLowSources WRITE setTextColorLowSources) Q_PROPERTY(QColor textColorHighSources READ textColorHighSources WRITE setTextColorHighSources) @@ -51,11 +52,13 @@ public: void searchKeywords(const QString& keywords); QColor textColorLocal() const { return mTextColorLocal; } + QColor textColorDownloading() const { return mTextColorDownloading; } QColor textColorNoSources() const { return mTextColorNoSources; } QColor textColorLowSources() const { return mTextColorLowSources; } QColor textColorHighSources() const { return mTextColorHighSources; } void setTextColorLocal(QColor color) { mTextColorLocal = color; } + void setTextColorDownloading(QColor color) { mTextColorDownloading = color; } void setTextColorNoSources(QColor color) { mTextColorNoSources = color; } void setTextColorLowSources(QColor color) { mTextColorLowSources = color; } void setTextColorHighSources(QColor color) { mTextColorHighSources = color; } @@ -154,6 +157,7 @@ private: /* Color definitions (for standard see qss.default) */ QColor mTextColorLocal; + QColor mTextColorDownloading; QColor mTextColorNoSources; QColor mTextColorLowSources; QColor mTextColorHighSources; diff --git a/retroshare-gui/src/gui/qss/stylesheet/qss.default b/retroshare-gui/src/gui/qss/stylesheet/qss.default index b762d626a..db24fd45e 100644 --- a/retroshare-gui/src/gui/qss/stylesheet/qss.default +++ b/retroshare-gui/src/gui/qss/stylesheet/qss.default @@ -174,6 +174,7 @@ FriendList SearchDialog { qproperty-textColorLocal: red; + qproperty-textColorDownloading: green; qproperty-textColorNoSources: rgb(0, 0, 19); qproperty-textColorLowSources: rgb(0, 0, 38); qproperty-textColorHighSources: rgb(0, 0, 228); From 000dabfaedf733347147aa9de55ac457c4c3f6dc Mon Sep 17 00:00:00 2001 From: RetroPooh Date: Tue, 21 Mar 2017 15:02:46 +0300 Subject: [PATCH 020/230] chat lobby list - add tree item counters --- retroshare-gui/src/gui/ChatLobbyWidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/retroshare-gui/src/gui/ChatLobbyWidget.cpp b/retroshare-gui/src/gui/ChatLobbyWidget.cpp index 07d5112be..ac197991b 100644 --- a/retroshare-gui/src/gui/ChatLobbyWidget.cpp +++ b/retroshare-gui/src/gui/ChatLobbyWidget.cpp @@ -653,7 +653,9 @@ void ChatLobbyWidget::updateDisplay() updateItem(ui.lobbyTreeWidget, item, lobby.lobby_id, lobby.lobby_name,lobby.lobby_topic, lobby.gxs_ids.size(), true, autoSubscribe,lobby_flags); } publicSubLobbyItem->setHidden(publicSubLobbyItem->childCount()==0); + publicSubLobbyItem->setText(COLUMN_NAME, tr("Public Subscribed chat rooms")+ QString(" (") + QString::number(publicSubLobbyItem->childCount())+QString(")")); privateSubLobbyItem->setHidden(privateSubLobbyItem->childCount()==0); + publicLobbyItem->setText(COLUMN_NAME, tr("Public chat rooms")+ " (" + QString::number(publicLobbyItem->childCount())+QString(")")); } void ChatLobbyWidget::createChatLobby() From 50c81d7142aa3502065025b914b180571d08522b Mon Sep 17 00:00:00 2001 From: RetroPooh Date: Tue, 21 Mar 2017 16:41:39 +0300 Subject: [PATCH 021/230] chat lobby list - mark signed lobbies with color --- retroshare-gui/src/gui/ChatLobbyWidget.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/ChatLobbyWidget.cpp b/retroshare-gui/src/gui/ChatLobbyWidget.cpp index ac197991b..dadf04939 100644 --- a/retroshare-gui/src/gui/ChatLobbyWidget.cpp +++ b/retroshare-gui/src/gui/ChatLobbyWidget.cpp @@ -378,8 +378,12 @@ static void updateItem(QTreeWidget *treeWidget, QTreeWidgetItem *item, ChatLobby +QObject::tr("Id:")+" "+QString::number(id,16) ; if(lobby_flags & RS_CHAT_LOBBY_FLAGS_PGP_SIGNED) + { tooltipstr += QObject::tr("\nSecurity: no anonymous IDs") ; - + QColor foreground = QColor(0, 128, 0); // green + for (int column = 0; column < COLUMN_COUNT; ++column) + item->setTextColor(column, foreground); + } item->setToolTip(0,tooltipstr) ; } From 85cfda196313bd12d0b92c3ac7d155faa640bd84 Mon Sep 17 00:00:00 2001 From: RetroPooh Date: Tue, 21 Mar 2017 16:52:40 +0300 Subject: [PATCH 022/230] add tree item counters for channels,forums,posted --- retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp index 2bfdb6c0d..6ab4ca165 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupFrameDialog.cpp @@ -841,8 +841,11 @@ void GxsGroupFrameDialog::insertGroupsData(const std::list &gro /* now we can add them in as a tree! */ ui->groupTreeWidget->fillGroupItems(mYourGroups, adminList); ui->groupTreeWidget->fillGroupItems(mSubscribedGroups, subList); + mSubscribedGroups->setText(2, QString::number(mSubscribedGroups->childCount())); // 1 COLUMN_UNREAD 2 COLUMN_POPULARITY ui->groupTreeWidget->fillGroupItems(mPopularGroups, popList); + mPopularGroups->setText(2, QString::number(mPopularGroups->childCount())); ui->groupTreeWidget->fillGroupItems(mOtherGroups, otherList); + mOtherGroups->setText(2, QString::number(mOtherGroups->childCount())); mInFill = false; From f5e7217bb4e81c4bfe8b6233f047449ef7f3cd8e Mon Sep 17 00:00:00 2001 From: RetroPooh Date: Tue, 21 Mar 2017 17:24:59 +0300 Subject: [PATCH 023/230] statistics - router - fix bold marking for tunnel speeds over 1mbs --- retroshare-gui/src/gui/statistics/TurtleRouterDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/statistics/TurtleRouterDialog.cpp b/retroshare-gui/src/gui/statistics/TurtleRouterDialog.cpp index 6d8a46e32..a76b5b5c3 100644 --- a/retroshare-gui/src/gui/statistics/TurtleRouterDialog.cpp +++ b/retroshare-gui/src/gui/statistics/TurtleRouterDialog.cpp @@ -153,7 +153,7 @@ void TurtleRouterDialog::updateTunnelRequests( const std::vectorsetFont(0,font); } - if(strtol(tunnels_info[i][5].c_str(), NULL, 0)>1000) // fast + if(strtof(tunnels_info[i][5].c_str(), NULL)>1000) // fast { font.setBold(true); item->setFont(0,font); From b0d2249ebcec3f7794b3204f217eced4bf957ade Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:12:39 +0100 Subject: [PATCH 024/230] Added Windows support to retroshare-android-service --- .../src/retroshare-android-service.pro | 31 ++++++++++++++++++- retroshare-android-service/src/service.cpp | 10 +++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/retroshare-android-service/src/retroshare-android-service.pro b/retroshare-android-service/src/retroshare-android-service.pro index c2caa12a0..e45067f81 100644 --- a/retroshare-android-service/src/retroshare-android-service.pro +++ b/retroshare-android-service/src/retroshare-android-service.pro @@ -6,11 +6,40 @@ QT += core network QT -= gui CONFIG += c++11 -CONFIG += dll +android-g++:CONFIG += dll android-g++:TEMPLATE = lib !android-g++:TEMPLATE = app +win32 { + OBJECTS_DIR = temp/obj + + LIBS_DIR = $$PWD/../../libs/lib + LIBS += $$OUT_PWD/../../libretroshare/src/lib/libretroshare.a + LIBS += $$OUT_PWD/../../openpgpsdk/src/lib/libops.a + + for(lib, LIB_DIR):LIBS += -L"$$lib" + for(bin, BIN_DIR):LIBS += -L"$$bin" + + + LIBS += -lssl -lcrypto -lpthread -lminiupnpc -lz -lws2_32 + LIBS += -luuid -lole32 -liphlpapi -lcrypt32 -lgdi32 + LIBS += -lwinmm + + DEFINES *= WINDOWS_SYS WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T + + DEPENDPATH += . $$INC_DIR + INCLUDEPATH += . $$INC_DIR + + greaterThan(QT_MAJOR_VERSION, 4) { + # Qt 5 + RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src + } else { + # Qt 4 + QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src + } +} + SOURCES += service.cpp DEPENDPATH *= ../../libresapi/src diff --git a/retroshare-android-service/src/service.cpp b/retroshare-android-service/src/service.cpp index d3759dc61..afe73bfc3 100644 --- a/retroshare-android-service/src/service.cpp +++ b/retroshare-android-service/src/service.cpp @@ -39,11 +39,19 @@ int main(int argc, char *argv[]) #endif QCoreApplication a(argc, argv); + + RsInit::InitRsConfig(); + ApiServer api; RsControlModule ctrl_mod(argc, argv, api.getStateTokenServer(), &api, true); api.addResourceHandler("control", dynamic_cast(&ctrl_mod), &resource_api::RsControlModule::handleRequest); - QString sockPath = QString::fromStdString(RsAccounts::ConfigDirectory()); +#ifdef QT_DEBUG + QString sockPath = "RS/"; +#else + QString sockPath = QCoreApplication::applicationDirPath(); +#endif + sockPath.append("/libresapi.sock"); qDebug() << "Listening on:" << sockPath; ApiServerLocal apiServerLocal(&api, sockPath); (void) apiServerLocal; From cb041341143edaf6d5b9321d2f9208cfb857a7eb Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:15:47 +0100 Subject: [PATCH 025/230] Added Windows support to libresapi when working with retroshare_android_service --- libresapi/src/libresapi.pro | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/libresapi/src/libresapi.pro b/libresapi/src/libresapi.pro index f310198fb..f1a3aa8d5 100644 --- a/libresapi/src/libresapi.pro +++ b/libresapi/src/libresapi.pro @@ -10,6 +10,40 @@ DESTDIR = lib INCLUDEPATH += ../../libretroshare/src +retroshare_android_service { + win32 { + OBJECTS_DIR = temp/obj + + LIBS_DIR = $$PWD/../../libs/lib + LIBS += $$OUT_PWD/../../libretroshare/src/lib/libretroshare.a + LIBS += $$OUT_PWD/../../openpgpsdk/src/lib/libops.a + + for(lib, LIB_DIR):LIBS += -L"$$lib" + for(bin, BIN_DIR):LIBS += -L"$$bin" + + + LIBS += -lssl -lcrypto -lpthread -lminiupnpc -lz -lws2_32 + LIBS += -luuid -lole32 -liphlpapi -lcrypt32 -lgdi32 + LIBS += -lwinmm + + DEFINES *= WINDOWS_SYS WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T + + DEPENDPATH += . $$INC_DIR + INCLUDEPATH += . $$INC_DIR + + greaterThan(QT_MAJOR_VERSION, 4) { + # Qt 5 + RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src + } else { + # Qt 4 + QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src + } + } + + DEPENDPATH += . ../../libretroshare/src/ + INCLUDEPATH += ../../libretroshare/src/ +} + libresapihttpserver { CONFIG += libmicrohttpd From ae95b49f8a1a235f8fe64632915c48b99f5d6849 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:20:53 +0100 Subject: [PATCH 026/230] Added SettingsHandler to handle response to settings requests --- libresapi/src/api/ApiServer.cpp | 10 +- libresapi/src/api/SettingsHandler.cpp | 182 ++++++++++++++++++++++++++ libresapi/src/api/SettingsHandler.h | 59 +++++++++ libresapi/src/libresapi.pro | 6 +- 4 files changed, 253 insertions(+), 4 deletions(-) create mode 100644 libresapi/src/api/SettingsHandler.cpp create mode 100644 libresapi/src/api/SettingsHandler.h diff --git a/libresapi/src/api/ApiServer.cpp b/libresapi/src/api/ApiServer.cpp index b9606a003..593e9386a 100644 --- a/libresapi/src/api/ApiServer.cpp +++ b/libresapi/src/api/ApiServer.cpp @@ -17,6 +17,8 @@ #include "ChannelsHandler.h" #include "StatsHandler.h" +#include "SettingsHandler.h" + /* data types in json http://json.org/ string (utf-8 unicode) @@ -236,7 +238,8 @@ public: mChatHandler(sts, ifaces.mNotify, ifaces.mMsgs, ifaces.mPeers, ifaces.mIdentity, &mPeersHandler), mApiPluginHandler(sts, ifaces), mChannelsHandler(ifaces.mGxsChannels), - mStatsHandler() + mStatsHandler(), + mSettingsHandler(sts) { // the dynamic cast is to not confuse the addResourceHandler template like this: // addResourceHandler(derived class, parent class) @@ -262,7 +265,9 @@ public: &ChannelsHandler::handleRequest); router.addResourceHandler("stats", dynamic_cast(&mStatsHandler), &StatsHandler::handleRequest); - } + router.addResourceHandler("settings", dynamic_cast(&mSettingsHandler), + &SettingsHandler::handleRequest); + } PeersHandler mPeersHandler; IdentityHandler mIdentityHandler; @@ -274,6 +279,7 @@ public: ApiPluginHandler mApiPluginHandler; ChannelsHandler mChannelsHandler; StatsHandler mStatsHandler; + SettingsHandler mSettingsHandler; }; ApiServer::ApiServer(): diff --git a/libresapi/src/api/SettingsHandler.cpp b/libresapi/src/api/SettingsHandler.cpp new file mode 100644 index 000000000..6e1aa75da --- /dev/null +++ b/libresapi/src/api/SettingsHandler.cpp @@ -0,0 +1,182 @@ +#include "SettingsHandler.h" + +#include + +#include + +namespace resource_api +{ + #define SETTINGS_FILE (QString::fromUtf8(RsAccounts::AccountDirectory().c_str()) + "/Sonet.conf") + + SettingsHandler::SettingsHandler(StateTokenServer *sts, const QString settingsGroup) : + QSettings(SETTINGS_FILE, QSettings::IniFormat), + mStateTokenServer(sts), + mMtx("SettingsHandler Mutex"), + mStateToken(sts->getNewToken()) + { + RsPeerId sPreferedId; + m_bValid = RsAccounts::GetPreferredAccountId(sPreferedId); + + if (!settingsGroup.isEmpty()) + beginGroup(settingsGroup); + + addResourceHandler("*", this, &SettingsHandler::handleSettingsRequest); + addResourceHandler("get_advanced_mode", this, &SettingsHandler::handleGetAdvancedMode); + addResourceHandler("set_advanced_mode", this, &SettingsHandler::handleSetAdvancedMode); + addResourceHandler("get_flickable_grid_mode", this, &SettingsHandler::handleGetFlickableGridMode); + addResourceHandler("set_flickable_grid_mode", this, &SettingsHandler::handleSetFlickableGridMode); + addResourceHandler("get_auto_login", this, &SettingsHandler::handleGetAutoLogin); + addResourceHandler("set_auto_login", this, &SettingsHandler::handleSetAutoLogin); + } + + SettingsHandler::~SettingsHandler() + { + sync(); + } + + void SettingsHandler::handleSettingsRequest(Request &/*req*/, Response &resp) + { + + } + + void SettingsHandler::handleGetAdvancedMode(Request &/*req*/, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool advanced_mode = valueFromGroup("General", "Advanced", false).toBool(); + resp.mDataStream << makeKeyValueReference("advanced_mode", advanced_mode); + resp.setOk(); + sync(); + } + + void SettingsHandler::handleSetAdvancedMode(Request &req, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool advanced_mode; + req.mStream << makeKeyValueReference("advanced_mode", advanced_mode); + setValueToGroup("General", "Advanced", advanced_mode); + resp.setOk(); + sync(); + } + + void SettingsHandler::handleGetFlickableGridMode(Request &/*req*/, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool flickable_grid_mode = valueFromGroup("General", "FlickableGrid", false).toBool(); + resp.mDataStream << makeKeyValueReference("flickable_grid_mode", flickable_grid_mode); + resp.setOk(); + sync(); + } + + void SettingsHandler::handleSetFlickableGridMode(Request &req, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool flickable_grid_mode; + req.mStream << makeKeyValueReference("flickable_grid_mode", flickable_grid_mode); + setValueToGroup("General", "FlickableGrid", flickable_grid_mode); + + resp.setOk(); + sync(); + } + + void SettingsHandler::handleGetAutoLogin(Request &/*req*/, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool autoLogin = RsInit::getAutoLogin();; + resp.mDataStream << makeKeyValueReference("auto_login", autoLogin); + resp.setOk(); + sync(); + } + + void SettingsHandler::handleSetAutoLogin(Request &req, Response &resp) + { + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + bool autoLogin; + req.mStream << makeKeyValueReference("auto_login", autoLogin); + RsInit::setAutoLogin(autoLogin); + + resp.setOk(); + sync(); + } + + QVariant SettingsHandler::value(const QString &key, const QVariant &defaultVal) const + { + if (m_bValid == false) + { + return defaultVal.isNull() ? defaultValue(key) : defaultVal; + } + return QSettings::value(key, defaultVal.isNull() ? defaultValue(key) : defaultVal); + } + + void SettingsHandler::setValue(const QString &key, const QVariant &val) + { + if (m_bValid == false) + { + std::cerr << "RSettings::setValue() Calling on invalid object, key = " << key.toStdString() << std::endl; + return; + } + if (val == defaultValue(key)) + QSettings::remove(key); + else if (val != value(key)) + QSettings::setValue(key, val); + } + + QVariant SettingsHandler::valueFromGroup(const QString &group, const QString &key, const QVariant &defaultVal) + { + beginGroup(group); + QVariant val = value(key, defaultVal); + endGroup(); + + return val; + } + + void SettingsHandler::setValueToGroup(const QString &group, const QString &key, const QVariant &val) + { + beginGroup(group); + setValue(key, val); + endGroup(); + } + + void SettingsHandler::setDefault(const QString &key, const QVariant &val) + { + _defaults.insert(key, val); + } + + QVariant SettingsHandler::defaultValue(const QString &key) const + { + if (_defaults.contains(key)) + return _defaults.value(key); + return QVariant(); + } + + void SettingsHandler::reset() + { + /* Static method, so we have to create a QSettings object. */ + QSettings settings(SETTINGS_FILE, QSettings::IniFormat); + settings.clear(); + } +} // namespace resource_api + diff --git a/libresapi/src/api/SettingsHandler.h b/libresapi/src/api/SettingsHandler.h new file mode 100644 index 000000000..b4c21fae2 --- /dev/null +++ b/libresapi/src/api/SettingsHandler.h @@ -0,0 +1,59 @@ +#ifndef SETTINGSHANDLER_H +#define SETTINGSHANDLER_H + +#include + +#include + +#include "ResourceRouter.h" +#include "StateTokenServer.h" + +/* Reimplemented class RSettings*/ +namespace resource_api +{ + class SettingsHandler : public ResourceRouter, public QSettings + { + public: + SettingsHandler(StateTokenServer* sts, const QString group = QString()); + ~SettingsHandler(); + + static void reset(); + + QVariant value(const QString &key, + const QVariant &defaultVal = QVariant()) const; + + void setValue(const QString &key, const QVariant &val); + + QVariant valueFromGroup(const QString &group, const QString &key, + const QVariant &defaultVal = QVariant()); + void setValueToGroup(const QString &group, const QString &key, + const QVariant &val); + + protected: + void setDefault(const QString &key, const QVariant &val); + QVariant defaultValue(const QString &key) const; + + bool m_bValid; + + private: + void handleSettingsRequest(Request& req, Response& resp); + + void handleGetAdvancedMode(Request& req, Response& resp); + void handleSetAdvancedMode(Request& req, Response& resp); + + void handleGetFlickableGridMode(Request& req, Response& resp); + void handleSetFlickableGridMode(Request& req, Response& resp); + + void handleGetAutoLogin(Request& req, Response& resp); + void handleSetAutoLogin(Request& req, Response& resp); + + QHash _defaults; + + StateTokenServer* mStateTokenServer; + + RsMutex mMtx; + StateToken mStateToken; // mutex protected + }; +} // namespace resource_api + +#endif // SETTINGSHANDLER_H diff --git a/libresapi/src/libresapi.pro b/libresapi/src/libresapi.pro index f1a3aa8d5..31de982b3 100644 --- a/libresapi/src/libresapi.pro +++ b/libresapi/src/libresapi.pro @@ -182,7 +182,8 @@ SOURCES += \ util/ContentTypes.cpp \ api/ApiPluginHandler.cpp \ api/ChannelsHandler.cpp \ - api/StatsHandler.cpp + api/StatsHandler.cpp \ + api/SettingsHandler.cpp HEADERS += \ api/ApiServer.h \ @@ -209,7 +210,8 @@ HEADERS += \ util/ContentTypes.h \ api/ApiPluginHandler.h \ api/ChannelsHandler.h \ - api/StatsHandler.h + api/StatsHandler.h \ + api/SettingsHandler.h libresapilocalserver { CONFIG *= qt From 39967b7ce7e62b0acaf17b96d5a32d3b91506df4 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:23:28 +0100 Subject: [PATCH 027/230] Added name of requests to be used by GUI --- libresapi/src/api/ApiServer.cpp | 3 +++ libresapi/src/api/ApiTypes.h | 3 +++ libresapi/src/api/ResourceRouter.cpp | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/libresapi/src/api/ApiServer.cpp b/libresapi/src/api/ApiServer.cpp index 593e9386a..6efadeaf6 100644 --- a/libresapi/src/api/ApiServer.cpp +++ b/libresapi/src/api/ApiServer.cpp @@ -368,6 +368,9 @@ std::string ApiServer::handleRequest(Request &request) if(data.isRawData()) return data.getRawData(); + if(!resp.mCallbackName.empty()) + outstream << resource_api::makeKeyValueReference("callback_name", resp.mCallbackName); + outstream << resource_api::makeKeyValue("debug_msg", debugString.str()); outstream << resource_api::makeKeyValueReference("returncode", returncode); if(!resp.mStateToken.isNull()) diff --git a/libresapi/src/api/ApiTypes.h b/libresapi/src/api/ApiTypes.h index c443eb170..6d6d5c746 100644 --- a/libresapi/src/api/ApiTypes.h +++ b/libresapi/src/api/ApiTypes.h @@ -252,6 +252,9 @@ public: StateToken mStateToken; + //Just for GUI benefit + std::string mCallbackName; + // the result StreamBase& mDataStream; diff --git a/libresapi/src/api/ResourceRouter.cpp b/libresapi/src/api/ResourceRouter.cpp index a13201a27..48050cdb6 100644 --- a/libresapi/src/api/ResourceRouter.cpp +++ b/libresapi/src/api/ResourceRouter.cpp @@ -37,6 +37,13 @@ ResponseTask* ResourceRouter::handleRequest(Request& req, Response& resp) if(vit->first == req.mPath.top()) { req.mPath.pop(); + + //Just for GUI benefit + std::string callbackName; + req.mStream << makeKeyValueReference("callback_name", callbackName); + resp.mCallbackName = callbackName; + // + return vit->second->handleRequest(req, resp); } } From 28d37c2968b305a2163a11d3efd1690a3ad495d0 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:25:26 +0100 Subject: [PATCH 028/230] Added password storing to RsControlModule for GUI benefits --- libresapi/src/api/RsControlModule.cpp | 135 ++++++++++++++++++++++++-- libresapi/src/api/RsControlModule.h | 10 +- 2 files changed, 135 insertions(+), 10 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index 9430df170..228bb691a 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -6,6 +6,7 @@ #include #include +#include #include "api/ApiServer.h" #include "api/Operators.h" @@ -301,6 +302,7 @@ void RsControlModule::handlePassword(Request &req, Response &resp) mPassword = passwd; mWantPassword = false; mStateTokenServer->replaceToken(mStateToken); + mFixedPassword = passwd; } resp.mDataStream @@ -425,17 +427,17 @@ void RsControlModule::handleCreateLocation(Request &req, Response &resp) RsPeerId ssl_id; std::string err_string; // give the password to the password callback - { - RsStackMutex stack(mDataMtx); // ********** LOCKED ********** - mFixedPassword = pgp_password; - } + { + RsStackMutex stack(mDataMtx); // ********** LOCKED ********** + mFixedPassword = pgp_password; + } bool ssl_ok = RsAccounts::GenerateSSLCertificate(pgp_id, "", ssl_name, "", hidden_port!=0, ssl_password, ssl_id, err_string); // clear fixed password to restore normal password operation - { - RsStackMutex stack(mDataMtx); // ********** LOCKED ********** - mFixedPassword = ""; - } +// { +// RsStackMutex stack(mDataMtx); // ********** LOCKED ********** +// mFixedPassword = ""; +// } if (ssl_ok) { @@ -456,6 +458,123 @@ void RsControlModule::handleCreateLocation(Request &req, Response &resp) resp.setFail("could not create a new location. Error: "+err_string); } +class SignatureEventData +{ + public: + SignatureEventData(const void *_data,int32_t _len,unsigned int _signlen, std::string _reason) + { + // We need a new memory chnk because there's no guarranty _sign nor _signlen are not in the stack + + sign = (unsigned char *)rs_malloc(_signlen); + + if(!sign) + { + signlen = NULL; + signature_result = SELF_SIGNATURE_RESULT_FAILED; + return; + } + + signlen = new unsigned int; + *signlen = _signlen; + signature_result = SELF_SIGNATURE_RESULT_PENDING; + data = rs_malloc(_len); + + if(!data) + { + len = 0; + return; + } + len = _len; + memcpy(data,_data,len); + reason = _reason; + } + + ~SignatureEventData() + { + free(sign); + delete signlen; + free(data); + } + + void performSignature() + { + if(rsPeers->gpgSignData(data,len,sign,signlen,reason)) + signature_result = SELF_SIGNATURE_RESULT_SUCCESS; + else + signature_result = SELF_SIGNATURE_RESULT_FAILED; + } + + void *data; + uint32_t len; + unsigned char *sign; + unsigned int *signlen; + int signature_result; // 0=pending, 1=done, 2=failed/cancelled. + std::string reason; +}; + +bool RsControlModule::askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason /*=""*/) +{ + + { + RsStackMutex stack(mDataMtx); + std::cerr << "NotifyTxt:: deferred signature event requeted. " << std::endl; + + // Look into the queue + + Sha1CheckSum chksum = RsDirUtil::sha1sum((uint8_t*)data,len); + + std::map::iterator it = _deferred_signature_queue.find(chksum.toStdString()); + signature_result = SELF_SIGNATURE_RESULT_PENDING; + + if(it != _deferred_signature_queue.end()) + { + signature_result = it->second->signature_result; + + if(it->second->signature_result != SELF_SIGNATURE_RESULT_PENDING) // found it. Copy the result, and remove from the queue. + { + // We should check for the exact data match, for the sake of being totally secure. + // + std::cerr << "Found into queue: returning it" << std::endl; + + memcpy(sign,it->second->sign,*it->second->signlen); + *signlen = *(it->second->signlen); + + delete it->second; + _deferred_signature_queue.erase(it); + } + + return true; // already registered, but not done yet. + } + + // Not found. Store in the queue and emit a signal. + // + std::cerr << "NotifyTxt:: deferred signature event requeted. Pushing into queue" << std::endl; + + SignatureEventData *edta = new SignatureEventData(data,len,*signlen, reason); + + _deferred_signature_queue[chksum.toStdString()] = edta; + } + handleSignatureEvent(); + return true; +} + +void RsControlModule::handleSignatureEvent() +{ + std::cerr << "NotifyTxt:: performing a deferred signature in the main GUI thread." << std::endl; + + static bool working = false ; + + if(!working) + { + working = true ; + + for(std::map::const_iterator it(_deferred_signature_queue.begin());it!=_deferred_signature_queue.end();++it) + it->second->performSignature() ; + + working = false ; + } +} + void RsControlModule::setRunState(RunState s, std::string errstr) { RsStackMutex stack(mDataMtx); // ********** LOCKED ********** diff --git a/libresapi/src/api/RsControlModule.h b/libresapi/src/api/RsControlModule.h index d3c8ad18b..338027e15 100644 --- a/libresapi/src/api/RsControlModule.h +++ b/libresapi/src/api/RsControlModule.h @@ -9,6 +9,8 @@ namespace resource_api{ class StateTokenServer; class ApiServer; +class SignatureEventData; + // resource api module to control accounts, startup and shutdown of retroshare // - this module handles everything, no things are required from outside // - exception: users of this module have to create an api server and register this module @@ -31,8 +33,9 @@ public: // returns true if the process should terminate bool processShouldExit(); - // from NotifyClient - virtual bool askForPassword(const std::string &title, const std::string& key_details, bool prev_is_bad , std::string& password,bool& canceled); + // from NotifyClient + virtual bool askForPassword(const std::string &title, const std::string& key_details, bool prev_is_bad , std::string& password,bool& canceled) override; + virtual bool askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason = "") override; protected: // from RsThread @@ -84,6 +87,9 @@ private: // we store the password in this variable, it has higher priority than the normal password variable // it is also to avoid a lock, when we make a synchronous call into librs, like in ssl cert generation std::string mFixedPassword; + + void handleSignatureEvent(); + std::map _deferred_signature_queue ; }; } // namespace resource_api From cb32f304a98e9ca953b4ec5c478730fb905d042a Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:28:31 +0100 Subject: [PATCH 029/230] Added states handling to PeersHandler --- libresapi/src/api/PeersHandler.cpp | 226 ++++++++++++++++++++++++++++- libresapi/src/api/PeersHandler.h | 6 + 2 files changed, 228 insertions(+), 4 deletions(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 0f35e59e9..d77a39651 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include @@ -12,6 +13,12 @@ namespace resource_api { +#define PEER_STATE_ONLINE 1 +#define PEER_STATE_BUSY 2 +#define PEER_STATE_AWAY 3 +#define PEER_STATE_AVAILABLE 4 +#define PEER_STATE_INACTIVE 5 +#define PEER_STATE_OFFLINE 6 // todo: groups, add friend, remove friend, permissions void peerDetailsToStream(StreamBase& stream, RsPeerDetails& details) @@ -21,7 +28,50 @@ void peerDetailsToStream(StreamBase& stream, RsPeerDetails& details) << makeKeyValueReference("name", details.name) << makeKeyValueReference("location", details.location) << makeKeyValueReference("pgp_id", details.gpg_id) - ; + << makeKeyValueReference("pgp_id", details.gpg_id); + + if(details.state & RS_PEER_STATE_CONNECTED) + { + std::list statusInfo; + rsStatus->getStatusList(statusInfo); + + std::string state_string; + std::list::iterator it; + for (it = statusInfo.begin(); it != statusInfo.end(); ++it) + { + if (it->id == details.id) + { + switch (it->status) + { + case RS_STATUS_INACTIVE: + state_string = "inactive"; + break; + + case RS_STATUS_ONLINE: + state_string = "online"; + break; + + case RS_STATUS_AWAY: + state_string = "away"; + break; + + case RS_STATUS_BUSY: + state_string = "busy"; + break; + default: + state_string = "undefined"; + break; + } + break; + } + } + stream << makeKeyValueReference("state_string", state_string); + } + else + { + std::string state_string = "undefined"; + stream << makeKeyValueReference("state_string", state_string); + } } bool peerInfoToStream(StreamBase& stream, RsPeerDetails& details, RsPeers* peers, std::list& grpInfo, bool have_avatar) @@ -29,7 +79,9 @@ bool peerInfoToStream(StreamBase& stream, RsPeerDetails& details, RsPeers* peers bool ok = true; peerDetailsToStream(stream, details); stream << makeKeyValue("is_online", peers->isOnline(details.id)) - << makeKeyValue("chat_id", ChatId(details.id).toStdString()); + << makeKeyValue("chat_id", ChatId(details.id).toStdString()) + << makeKeyValue("custom_state_string", rsMsgs->getCustomStateString(details.id)); + std::string avatar_address = "/"+details.id.toStdString()+"/avatar_image"; @@ -63,7 +115,11 @@ PeersHandler::PeersHandler(StateTokenServer* sts, RsNotify* notify, RsPeers *pee mNotify->registerNotifyClient(this); mStateTokenServer->registerTickClient(this); addResourceHandler("*", this, &PeersHandler::handleWildcard); - addResourceHandler("examine_cert", this, &PeersHandler::handleExamineCert); + addResourceHandler("get_state_string", this, &PeersHandler::handleGetStateString); + addResourceHandler("set_state_string", this, &PeersHandler::handleSetStateString); + addResourceHandler("get_custom_state_string", this, &PeersHandler::handleGetCustomStateString); + addResourceHandler("set_custom_state_string", this, &PeersHandler::handleSetCustomStateString); + addResourceHandler("examine_cert", this, &PeersHandler::handleExamineCert); } PeersHandler::~PeersHandler() @@ -121,6 +177,83 @@ static bool have_avatar(RsMsgs* msgs, const RsPeerId& id) return size != 0; } +void PeersHandler::handleGetStateString(Request& req, Response& resp) +{ + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + std::string state_string; + StatusInfo statusInfo; + if (rsStatus->getOwnStatus(statusInfo)) + { + if(statusInfo.status == RS_STATUS_ONLINE) + state_string = "online"; + else if(statusInfo.status == RS_STATUS_BUSY) + state_string = "busy"; + else if(statusInfo.status == RS_STATUS_AWAY) + state_string = "away"; + else if(statusInfo.status == RS_STATUS_INACTIVE) + state_string = "inactive"; + else + state_string = "undefined"; + } + else + state_string = "undefined"; + + resp.mDataStream << makeKeyValueReference("state_string", state_string); + resp.setOk(); +} + +void PeersHandler::handleSetStateString(Request& req, Response& resp) +{ + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + std::string state_string; + req.mStream << makeKeyValueReference("state_string", state_string); + + uint32_t status; + if(state_string == "online") + status = RS_STATUS_ONLINE; + else if(state_string == "busy") + status = RS_STATUS_BUSY; + else if(state_string == "away") + status = RS_STATUS_AWAY; + + rsStatus->sendStatus(RsPeerId(), status); + resp.setOk(); +} + +void PeersHandler::handleGetCustomStateString(Request& req, Response& resp) +{ + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + std::string custom_state_string = rsMsgs->getCustomStateString(); + resp.mDataStream << makeKeyValueReference("custom_state_string", custom_state_string); + resp.setOk(); +} + +void PeersHandler::handleSetCustomStateString(Request& req, Response& resp) +{ + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + + std::string custom_state_string; + req.mStream << makeKeyValueReference("custom_state_string", custom_state_string); + + rsMsgs->setCustomStateString(custom_state_string); + resp.setOk(); +} + void PeersHandler::handleWildcard(Request &req, Response &resp) { bool ok = false; @@ -176,6 +309,9 @@ void PeersHandler::handleWildcard(Request &req, Response &resp) RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ unread_msgs = mUnreadMsgsCounts; } + std::list statusInfo; + rsStatus->getStatusList(statusInfo); + // list all peers ok = true; std::list identities; @@ -216,6 +352,11 @@ void PeersHandler::handleWildcard(Request &req, Response &resp) StreamBase& locationStream = itemStream.getStreamToMember("locations"); // mark as list (in case list is empty) locationStream.getStreamToMember(); + + int bestPeerState = 0; + unsigned int bestRSState = 0; + std::string bestCustomStateString; + for(std::vector::iterator vit = detailsVec.begin(); vit != detailsVec.end(); ++vit) { if(vit->gpg_id == *lit) @@ -226,8 +367,85 @@ void PeersHandler::handleWildcard(Request &req, Response &resp) unread = unread_msgs.find(vit->id)->second; stream << makeKeyValueReference("unread_msgs", unread); peerInfoToStream(stream,*vit, mRsPeers, grpInfo, have_avatar(mRsMsgs, vit->id)); - } + + + /* Custom state string */ + std::string customStateString; + if (vit->state & RS_PEER_STATE_CONNECTED) + { + customStateString = rsMsgs->getCustomStateString(vit->id); + } + + int peerState = 0; + + if (vit->state & RS_PEER_STATE_CONNECTED) + { + // get the status info for this ssl id + int rsState = 0; + std::list::iterator it; + for (it = statusInfo.begin(); it != statusInfo.end(); ++it) + { + if (it->id == vit->id) + { + rsState = it->status; + switch (rsState) + { + case RS_STATUS_INACTIVE: + peerState = PEER_STATE_INACTIVE; + break; + + case RS_STATUS_ONLINE: + peerState = PEER_STATE_ONLINE; + break; + + case RS_STATUS_AWAY: + peerState = PEER_STATE_AWAY; + break; + + case RS_STATUS_BUSY: + peerState = PEER_STATE_BUSY; + break; + } + + /* find the best ssl contact for the gpg item */ + if (bestPeerState == 0 || peerState < bestPeerState) + { + bestPeerState = peerState; + bestRSState = rsState; + bestCustomStateString = customStateString; + } + else if (peerState == bestPeerState) + { + /* equal state */ + if (bestCustomStateString.empty() && !customStateString.empty()) + { + bestPeerState = peerState; + bestRSState = rsState; + bestCustomStateString = customStateString; + } + } + break; + } + } + } + } } + itemStream << makeKeyValue("custom_state_string", bestCustomStateString); + + std::string state_string; + + if(bestRSState == RS_STATUS_ONLINE) + state_string = "online"; + else if(bestRSState == RS_STATUS_BUSY) + state_string = "busy"; + else if(bestRSState == RS_STATUS_AWAY) + state_string = "away"; + else if(bestRSState == RS_STATUS_INACTIVE) + state_string = "inactive"; + else + state_string = "undefined"; + + itemStream << makeKeyValue("state_string", state_string); } resp.mStateToken = getCurrentStateToken(); } diff --git a/libresapi/src/api/PeersHandler.h b/libresapi/src/api/PeersHandler.h index dfcc9e10c..a2eab706b 100644 --- a/libresapi/src/api/PeersHandler.h +++ b/libresapi/src/api/PeersHandler.h @@ -35,6 +35,12 @@ private: void handleWildcard(Request& req, Response& resp); void handleExamineCert(Request& req, Response& resp); + void handleGetStateString(Request& req, Response& resp); + void handleSetStateString(Request& req, Response& resp); + + void handleGetCustomStateString(Request& req, Response& resp); + void handleSetCustomStateString(Request& req, Response& resp); + // a helper which ensures proper mutex locking StateToken getCurrentStateToken(); From 194878a3585bda4c53862269e7862c39bd901945 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:31:13 +0100 Subject: [PATCH 030/230] Added functions for handling own and not own identities to IdentityHandler --- libresapi/src/api/IdentityHandler.cpp | 115 +++++++++++++++++++++++++- libresapi/src/api/IdentityHandler.h | 3 + 2 files changed, 115 insertions(+), 3 deletions(-) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 4d3f0ff80..9f01442df 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -101,9 +101,12 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden { mNotify->registerNotifyClient(this); - addResourceHandler("*", this, &IdentityHandler::handleWildcard); - addResourceHandler("own", this, &IdentityHandler::handleOwn); - addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); + addResourceHandler("*", this, &IdentityHandler::handleWildcard); + //addResourceHandler("own", this, &IdentityHandler::handleOwn); + addResourceHandler("own", this, &IdentityHandler::handleOwnIdsRequest); + addResourceHandler("notown", this, &IdentityHandler::handleNotOwnIdsRequest); + + addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); } IdentityHandler::~IdentityHandler() @@ -172,6 +175,112 @@ void IdentityHandler::handleWildcard(Request & /*req*/, Response &resp) else resp.setFail(); } + +void IdentityHandler::handleNotOwnIdsRequest(Request & /*req*/, Response &resp) +{ + bool ok = true; + + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; + uint32_t token; + mRsIdentity->getTokenService()->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts); + + time_t start = time(NULL); + while((mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE) + &&(mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED) + &&((time(NULL) < (start+10))) + ) + { +#ifdef WINDOWS_SYS + Sleep(500); +#else + usleep(500*1000); +#endif + } + + if(mRsIdentity->getTokenService()->requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE) + { + std::vector grps; + ok &= mRsIdentity->getGroupData(token, grps); + for(std::vector::iterator vit = grps.begin(); vit != grps.end(); vit++) + { + RsGxsIdGroup& grp = *vit; + //electron: not very happy about this, i think the flags should stay hidden in rsidentities + if(!(grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN) && grp.mIsAContact) + { + bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility ) ; + resp.mDataStream.getStreamToMember() + << makeKeyValueReference("id", grp.mMeta.mGroupId) /// @deprecated using "id" as key can cause problems in some JS based languages like Qml @see gxs_id instead + << makeKeyValueReference("gxs_id", grp.mMeta.mGroupId) + << makeKeyValueReference("pgp_id",grp.mPgpId ) + << makeKeyValueReference("name", grp.mMeta.mGroupName) + << makeKeyValueReference("pgp_linked", pgp_linked); + } + } + } + else ok = false; + + if(ok) resp.setOk(); + else resp.setFail(); +} + +void IdentityHandler::handleOwnIdsRequest(Request & /*req*/, Response &resp) +{ + bool ok = true; + + { + RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStateToken; + } + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; + uint32_t token; + mRsIdentity->getTokenService()->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts); + + time_t start = time(NULL); + while((mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE) + &&(mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED) + &&((time(NULL) < (start+10))) + ) + { +#ifdef WINDOWS_SYS + Sleep(500); +#else + usleep(500*1000); +#endif + } + + if(mRsIdentity->getTokenService()->requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE) + { + std::vector grps; + ok &= mRsIdentity->getGroupData(token, grps); + for(std::vector::iterator vit = grps.begin(); vit != grps.end(); vit++) + { + RsGxsIdGroup& grp = *vit; + //electron: not very happy about this, i think the flags should stay hidden in rsidentities + if(vit->mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN) + { + bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility ) ; + resp.mDataStream.getStreamToMember() + << makeKeyValueReference("own_gxs_id", grp.mMeta.mGroupId) + << makeKeyValueReference("pgp_id",grp.mPgpId ) + << makeKeyValueReference("name", grp.mMeta.mGroupName) + << makeKeyValueReference("pgp_linked", pgp_linked); + } + } + + } + else + ok = false; + + if(ok) resp.setOk(); + else resp.setFail(); +} + ResponseTask* IdentityHandler::handleOwn(Request & /* req */, Response &resp) { StateToken state; diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index 5e5d67f13..1b54f5438 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -23,6 +23,9 @@ public: private: void handleWildcard(Request& req, Response& resp); + void handleNotOwnIdsRequest(Request& req, Response& resp); + void handleOwnIdsRequest(Request& req, Response& resp); + ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); From 8624c9374de788394df09b5acb8913019302adf0 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 25 Mar 2017 18:33:35 +0100 Subject: [PATCH 031/230] Added functions for hadling particular lobbies types to ChatHandler --- libresapi/src/api/ChatHandler.cpp | 107 ++++++++++++++++++++++++++++-- libresapi/src/api/ChatHandler.h | 4 ++ 2 files changed, 106 insertions(+), 5 deletions(-) diff --git a/libresapi/src/api/ChatHandler.cpp b/libresapi/src/api/ChatHandler.cpp index 4335389df..f50eaae9e 100644 --- a/libresapi/src/api/ChatHandler.cpp +++ b/libresapi/src/api/ChatHandler.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -158,6 +159,10 @@ ChatHandler::ChatHandler(StateTokenServer *sts, RsNotify *notify, RsMsgs *msgs, addResourceHandler("initiate_distant_chat", this, &ChatHandler::handleInitiateDistantChatConnexion); addResourceHandler("distant_chat_status", this, &ChatHandler::handleDistantChatStatus); addResourceHandler("close_distant_chat", this, &ChatHandler::handleCloseDistantChatConnexion); + + addResourceHandler("private_lobbies", this, &ChatHandler::handlePrivateLobbies); + addResourceHandler("subscribed_public_lobbies", this, &ChatHandler::handleSubscribedPublicLobbies); + addResourceHandler("unsubscribed_public_lobbies", this, &ChatHandler::handleUnsubscribedPublicLobbies); } ChatHandler::~ChatHandler() @@ -928,15 +933,19 @@ void ChatHandler::handleMessages(Request &req, Response &resp) * doing it? */ tick(); + std::string chat_id; + req.mStream << makeKeyValueReference("chat_id", chat_id); + ChatId id(chat_id); + { RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - ChatId id(req.mPath.top()); + // make response a list resp.mDataStream.getStreamToMember(); if(id.isNotSet()) { - resp.setFail("\""+req.mPath.top()+"\" is not a valid chat id"); - return; + resp.setFail("\""+chat_id+"\" is not a valid chat id"); + return; } std::map >::iterator mit = mMsgs.find(id); if(mit == mMsgs.end()) @@ -973,10 +982,14 @@ void ChatHandler::handleSendMessage(Request &req, Response &resp) void ChatHandler::handleMarkChatAsRead(Request &req, Response &resp) { RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - ChatId id(req.mPath.top()); + + std::string chat_id; + req.mStream << makeKeyValueReference("chat_id", chat_id); + ChatId id(chat_id); + if(id.isNotSet()) { - resp.setFail("\""+req.mPath.top()+"\" is not a valid chat id"); + resp.setFail("\""+chat_id+"\" is not a valid chat id"); return; } std::map >::iterator mit = mMsgs.find(id); @@ -1197,4 +1210,88 @@ void ChatHandler::handleCloseDistantChatConnexion(Request& req, Response& resp) else resp.setFail("Failed to close distant chat"); } +void ChatHandler::handlePrivateLobbies(Request &req, Response &resp) +{ + tick(); + + { + RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ + resp.mDataStream.getStreamToMember(); + for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) + { + if(!vit->is_private) + continue; + uint32_t unread_msgs = 0; + ChatId chat_id(vit->id); + std::map >::iterator mit = mMsgs.find(chat_id); + if(mit != mMsgs.end()) + { + std::list& msgs = mit->second; + for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) + if(!lit->read) + unread_msgs++; + } + resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); + } + resp.mStateToken = mLobbiesStateToken; + } + resp.setOk(); +} + +void ChatHandler::handleSubscribedPublicLobbies(Request &req, Response &resp) +{ + tick(); + + { + RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ + resp.mDataStream.getStreamToMember(); + for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) + { + if(!vit->subscribed || vit->is_private || vit->is_broadcast) + continue; + uint32_t unread_msgs = 0; + ChatId chat_id(vit->id); + std::map >::iterator mit = mMsgs.find(chat_id); + if(mit != mMsgs.end()) + { + std::list& msgs = mit->second; + for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) + if(!lit->read) + unread_msgs++; + } + resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); + } + resp.mStateToken = mLobbiesStateToken; + } + resp.setOk(); +} + +void ChatHandler::handleUnsubscribedPublicLobbies(Request &req, Response &resp) +{ + tick(); + + { + RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ + resp.mDataStream.getStreamToMember(); + for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) + { + if(vit->subscribed || vit->is_private) + continue; + uint32_t unread_msgs = 0; + ChatId chat_id(vit->id); + std::map >::iterator mit = mMsgs.find(chat_id); + if(mit != mMsgs.end()) + { + std::list& msgs = mit->second; + for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) + if(!lit->read) + unread_msgs++; + } + resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); + } + resp.mStateToken = mLobbiesStateToken; + } + resp.setOk(); +} + } // namespace resource_api diff --git a/libresapi/src/api/ChatHandler.h b/libresapi/src/api/ChatHandler.h index dc075c77f..056629c06 100644 --- a/libresapi/src/api/ChatHandler.h +++ b/libresapi/src/api/ChatHandler.h @@ -133,6 +133,10 @@ private: void handleDistantChatStatus(Request& req, Response& resp); void handleCloseDistantChatConnexion(Request& req, Response& resp); + void handlePrivateLobbies(Request &req, Response &resp); + void handleSubscribedPublicLobbies(Request &req, Response &resp); + void handleUnsubscribedPublicLobbies(Request &req, Response &resp); + void getPlainText(const std::string& in, std::string &out, std::vector &links); // last parameter is only used for lobbies! void locked_storeTypingInfo(const ChatId& chat_id, std::string status, RsGxsId lobby_gxs_id = RsGxsId()); From 1bc4fe5f28c33d0f86cac1599abfc4aa354fc03e Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 25 Mar 2017 19:01:32 +0100 Subject: [PATCH 032/230] polished serialisation prototype --- .../src/serialization/rsserializable.h | 35 ++ .../src/serialization/rsserializer.h | 97 ++++++ .../src/serialization/rstypeserializer.h | 195 +++++++++++ .../src/serialization/serial_test.cc | 54 ++- libretroshare/src/serialization/serializer.h | 328 ------------------ 5 files changed, 371 insertions(+), 338 deletions(-) create mode 100644 libretroshare/src/serialization/rsserializable.h create mode 100644 libretroshare/src/serialization/rsserializer.h create mode 100644 libretroshare/src/serialization/rstypeserializer.h delete mode 100644 libretroshare/src/serialization/serializer.h diff --git a/libretroshare/src/serialization/rsserializable.h b/libretroshare/src/serialization/rsserializable.h new file mode 100644 index 000000000..3351e0147 --- /dev/null +++ b/libretroshare/src/serialization/rsserializable.h @@ -0,0 +1,35 @@ +#pragma once + +#include "serialiser/rsserial.h" + +class RsItem ; +class SerializeContext; + +#define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " + +class RsSerializable: public RsItem +{ +public: + typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; + + RsSerializable(uint8_t version,uint16_t service,uint8_t id) + : RsItem(version,service,id) + { + } + + /** + * @brief serialize this object to the given buffer + * @param Job to do: serialise or deserialize. + * @param data Chunk of memory were to dump the serialized data + * @param size Size of memory chunk + * @param offset Readed to determine at witch offset start writing data, + * written to inform caller were written data ends, the updated value + * is usually passed by the caller to serialize of another + * RsSerializable so it can write on the same chunk of memory just + * after where this RsSerializable has been serialized. + * @return true if serialization successed, false otherwise + */ + + virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; +}; + diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h new file mode 100644 index 000000000..706ee3be4 --- /dev/null +++ b/libretroshare/src/serialization/rsserializer.h @@ -0,0 +1,97 @@ +#pragma once + +#include +#include +#include +#include + +#include "rsserializable.h" + +class SerializeContext +{ + public: + + SerializeContext(uint8_t *data,uint32_t size) + : mData(data),mSize(size),mOffset(0),mOk(true) {} + + unsigned char *mData ; + uint32_t mSize ; + uint32_t mOffset ; + bool mOk ; +}; + +class RsSerializer +{ + public: + /*! create_item + * should be overloaded to create the correct type of item depending on the data + */ + virtual RsSerializable *create_item(uint16_t service, uint8_t item_sub_id) + { + return NULL ; + } + + RsSerializable *deserialize_item(const uint8_t *data,uint32_t size) + { + uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; + + RsSerializable *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; + + if(!item) + { + std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + return NULL ; + } + + SerializeContext ctx(const_cast(data),size); + ctx.mOffset = 8 ; + + item->serial_process(RsSerializable::DESERIALIZE, ctx) ; + + if(ctx.mOk) + return item ; + + delete item ; + return NULL ; + } + + bool serialize_item(const RsSerializable *item,uint8_t *const data,uint32_t size) + { + SerializeContext ctx(data,0); + + uint32_t tlvsize = size_item(item) ; + + if(tlvsize > size) + throw std::runtime_error("Cannot serialise: not enough room.") ; + + if(!setRsItemHeader(data, tlvsize, const_cast(item)->PacketId(), tlvsize)) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; + return false ; + } + ctx.mOffset = 8; + ctx.mSize = tlvsize; + + const_cast(item)->serial_process(RsSerializable::SERIALIZE,ctx) ; + + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; + return false ; + } + return true ; + } + + uint32_t size_item(const RsSerializable *item) + { + SerializeContext ctx(NULL,0); + + ctx.mSize = 8 ; // header size + const_cast(item)->serial_process(RsSerializable::SIZE_ESTIMATE, ctx) ; + + return ctx.mSize ; + } +}; + + + diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h new file mode 100644 index 000000000..a713832b3 --- /dev/null +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -0,0 +1,195 @@ +#include "serialiser/rstlvbase.h" + +template T ntoh(T t) +{ + if(sizeof(T) == 8) return t; + if(sizeof(T) == 4) return ntohl(t) ; + if(sizeof(T) == 2) return ntohs(t) ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; + return t; +} +template T hton(T t) +{ + if(sizeof(T) == 8) return t; + if(sizeof(T) == 4) return htonl(t) ; + if(sizeof(T) == 2) return htons(t) ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; + return t; +} + +class RsTypeSerializer +{ + public: + template + static void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) + { + switch(j) + { + case RsSerializable::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; + break ; + + case RsSerializable::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + break ; + + case RsSerializable::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + break ; + + default: + ctx.mOk = false ; + throw std::runtime_error("Unknown serial job") ; + } + } + + protected: + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); + template static uint32_t serial_size(const T& /* member */); +}; + +/// Templates to generate RsSerializer for standard integral types +// +template class t_SerializerNType +{ +public: + static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member) + { + if (size <= offset || size < SIZE + offset) + { + SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << SIZE+offset << " and size is only " << size << std::endl; + return false; + } + + N tmp = hton(member); + memcpy(data+offset, &tmp, SIZE); + offset += SIZE; + return true; + } + static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member) + { + if (size <= offset || size < offset + SIZE) + { + SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << SIZE+offset << " and size is only " << size << std::endl; + return false; + } + + N tmp ; + memcpy(&tmp, data+offset, SIZE); + member = ntoh(tmp); + offset += SIZE; + return true; + } + + static uint32_t serial_size(const N& /* member */) + { + return SIZE; + } +}; + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint64_t& member) +{ + return t_SerializerNType::serialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint64_t& member) +{ + return t_SerializerNType::deserialize(data,size,offset,member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& member) +{ + return t_SerializerNType::serial_size(member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& member) +{ + return t_SerializerNType::serial_size(member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint64_t& member) +{ + return t_SerializerNType::serial_size(member); +} +//// Float +// +template<> uint32_t RsTypeSerializer::serial_size(const float&){ return 4; } + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t& offset, const float& f) +{ + uint32_t sz = serial_size(f); + + if ( !data || size <= offset || size < sz + offset ) + { + SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << sz+offset << " and size is only " << size << std::endl; + return false; + } + + const float tmp = f; + if(tmp < 0.0f) + { + SERIALIZE_ERROR() << "Cannot serialise invalid negative float value " << tmp << std::endl; + return false; + } + + /* This serialisation is quite accurate. The max relative error is approx. + * 0.01% and most of the time less than 1e-05% The error is well distributed + * over numbers also. */ + + uint32_t n; + if(tmp < 1e-7) n = (~(uint32_t)0); + else n = ((uint32_t)( (1.0f/(1.0f+tmp) * (~(uint32_t)0)))); + n = hton(n); + memcpy(data+offset, &n, sz); + offset += sz; + return true; +} + + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f) +{ + uint32_t sz = serial_size(f); + + if ( !data || size <= offset || size < offset + sz ) + { + SERIALIZE_ERROR() << "Cannot deserialise float value. Not enough room. size=" << size << ", offset=" << offset << std::endl; + return false; + } + + uint32_t n; + memcpy(&n, data+offset, sz); + n = ntoh(n); + f = 1.0f/ ( n/(float)(~(uint32_t)0)) - 1.0f; + return true; +} + +typedef std::pair TlvString; + +/// Serializer for std::string +template<> uint32_t RsTypeSerializer::serial_size(const TlvString& s) +{ + return GetTlvStringSize(s.first) ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const TlvString& s) +{ + return SetTlvString(data,size,&offset,s.second,s.first) ; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,TlvString& s) +{ + return GetTlvString((void*)data,size,&offset,s.second,s.first) ; +} + diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index 08c53b6db..9b5745b4b 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -4,16 +4,18 @@ #include -#include "serializer.h" #include "util/rsmemory.h" #include "util/rsprint.h" #include "serialiser/rsserial.h" +#include "serializer.h" +#include "rstypeserializer.h" + static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; static const uint8_t RS_ITEM_SUBTYPE_TEST1 = 0x01 ; // Template serialization of RsTypeSerialiser::serial_process() for unknown/new types -// +// Here we do it for std::set as an example. // template<> uint32_t RsTypeSerializer::serial_size(const std::set& s) { @@ -25,13 +27,16 @@ template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint3 bool ok = true ; uint32_t offset_save = offset ; - if(tlvsize + offset >= size) + if(tlvsize + offset > size) + { + std::cerr << "RsTypeSerializer::serialize: error. tlvsize+offset > size, where tlvsize=" << tlvsize << ", offset=" << offset << ", size=" << size << std::endl; return false ; + } - ok = ok && RsTypeSerializer::serialize(data,size,offset,member.size()) ; + ok = ok && RsTypeSerializer::serialize(data,size,offset,member.size()) ; for(std::set::const_iterator it(member.begin());it!=member.end();++it) - ok = ok && RsTypeSerializer::serialize(data,size,offset,*it) ; + ok = ok && RsTypeSerializer::serialize(data,size,offset,*it) ; if(!ok) { @@ -50,7 +55,7 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz ok = ok && RsTypeSerializer::deserialize(data,size,offset,n); - for(uint32_t i=0;i bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz class RsTestItem: public RsSerializable { public: - RsTestItem() : RsSerializable(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) {} + RsTestItem() : RsSerializable(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) + { + str = "test string"; + ts = time(NULL) ; + + int_set.insert(lrand48()) ; + int_set.insert(lrand48()) ; + int_set.insert(lrand48()) ; + } // Derived from RsSerializable // virtual void serial_process(RsSerializable::SerializeJob j, SerializeContext& ctx) { + TlvString tt(str,TLV_TYPE_STR_DESCR) ; + RsTypeSerializer::serial_process(j,ctx,ts ) ; - RsTypeSerializer::serial_process(j,ctx,str) ; + RsTypeSerializer::serial_process(j,ctx,tt ) ; RsTypeSerializer::serial_process(j,ctx,int_set ) ; } @@ -89,11 +104,12 @@ class RsTestItem: public RsSerializable virtual void clear() {} virtual std::ostream& print(std::ostream&,uint16_t indent) {} - private: std::string str ; uint64_t ts ; std::set int_set ; + + friend int main(int argc,char *argv[]); }; // New user-defined serializer class. @@ -116,6 +132,12 @@ class RsTestSerializer: public RsSerializer } }; +// Methods to check the equality of items. +// +void check(const std::string& s1,const std::string& s2) { assert(s1 == s2) ; } +void check(const uint64_t& s1,const uint64_t& s2) { assert(s1 == s2) ; } +void check(const std::set& s1,const std::set& s2) { assert(s1 == s2) ; } + int main(int argc,char *argv[]) { try @@ -126,13 +148,25 @@ int main(int argc,char *argv[]) std::cerr << "t1.serial_size() = " << size << std::endl; + // Allocate some memory to serialise to + // RsTemporaryMemory mem1(size); RsTestSerializer().serialize_item(&t1,mem1,mem1.size()) ; + std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; + + // Now deserialise into a new item + // RsSerializable *t2 = RsTestSerializer().deserialize_item(mem1,mem1.size()) ; - std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; + // make sure t1 is equal to t2 + // + check(t1.str,dynamic_cast(t2)->str) ; + check(t1.ts,dynamic_cast(t2)->ts) ; + check(t1.int_set,dynamic_cast(t2)->int_set) ; + + delete t2; return 0; } diff --git a/libretroshare/src/serialization/serializer.h b/libretroshare/src/serialization/serializer.h deleted file mode 100644 index 462206c42..000000000 --- a/libretroshare/src/serialization/serializer.h +++ /dev/null @@ -1,328 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include "arpa/inet.h" -#include "serialiser/rsserial.h" - -class RsItem ; - -class SerializeContext; - -class RsSerializable: public RsItem -{ -public: - typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; - - RsSerializable(uint8_t version,uint16_t service,uint8_t id) - : RsItem(version,service,id) - { - } - - /** - * @brief serialize this object to the given buffer - * @param Job to do: serialise or deserialize. - * @param data Chunk of memory were to dump the serialized data - * @param size Size of memory chunk - * @param offset Readed to determine at witch offset start writing data, - * written to inform caller were written data ends, the updated value - * is usually passed by the caller to serialize of another - * RsSerializable so it can write on the same chunk of memory just - * after where this RsSerializable has been serialized. - * @return true if serialization successed, false otherwise - */ - - virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; -}; - -class SerializeContext -{ - public: - - SerializeContext(uint8_t *data,uint32_t size) - : mData(data),mSize(size),mOffset(0),mOk(true) {} - - unsigned char *mData ; - uint32_t mSize ; - uint32_t mOffset ; - bool mOk ; -}; -template T ntoh(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return ntohl(t) ; - if(sizeof(T) == 2) return ntohs(t) ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; - return t; -} -template T hton(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return htonl(t) ; - if(sizeof(T) == 2) return htons(t) ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; - return t; -} - -class RsTypeSerializer -{ - public: - template - static void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) - { - switch(j) - { - case RsSerializable::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; - break ; - - case RsSerializable::DESERIALIZE: deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; - break ; - - case RsSerializable::SERIALIZE: serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; - break ; - - default: - throw std::runtime_error("Unknown serial job") ; - } - } - - protected: - template - static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const T& member); - - template - static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); - - template - static uint32_t serial_size(const T& /* member */); -}; - -/// Templates to generate RsSerializer for standard integral types -// -template class t_SerializerNType -{ -public: - static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member) - { - if (size <= offset || size - offset < SIZE) - return false; - - N tmp = hton(member); - memcpy(data+offset, &tmp, SIZE); - offset += SIZE; - return true; - } - static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member) - { - if (size <= offset || size - offset < SIZE) - return false; - - N tmp ; - memcpy(&tmp, data+offset, SIZE); - member = ntoh(tmp); - offset += SIZE; - return true; - } - - static uint32_t serial_size(const N& /* member */) - { - return SIZE; - } -}; - -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint64_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint64_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& member) -{ - return t_SerializerNType::serial_size(member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& member) -{ - return t_SerializerNType::serial_size(member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint64_t& member) -{ - return t_SerializerNType::serial_size(member); -} -//// Float -// -template<> - uint32_t RsTypeSerializer::serial_size(const float&){ return 4; } - - -template<> -bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const float& f) - { - uint32_t sz = serial_size(f); - if ( !data || size <= offset || size - offset < sz ) - return false; - - const float tmp = f; - if(tmp < 0.0f) - { - std::cerr << "(EE) Cannot serialise invalid negative float value " - << tmp << " in " << __PRETTY_FUNCTION__ << std::endl; - return false; - } - - /* This serialisation is quite accurate. The max relative error is approx. - * 0.01% and most of the time less than 1e-05% The error is well distributed - * over numbers also. */ - uint32_t n; - if(tmp < 1e-7) n = (~(uint32_t)0); - else n = ((uint32_t)( (1.0f/(1.0f+tmp) * (~(uint32_t)0)))); - n = hton(n); - memcpy(data+offset, &n, sz); - offset += sz; - return true; - } - -template<> uint32_t RsTypeSerializer::serial_size(const std::string& s) -{ - return s.length() + 4; -} - - -template<> - bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f) - { - uint32_t sz = serial_size(f); - if ( !data || size <= offset || - size - offset < sz ) - return false; - - uint32_t n; - memcpy(&n, data+offset, sz); - n = ntoh(n); - f = 1.0f/ ( n/(float)(~(uint32_t)0)) - 1.0f; - return true; - } - - -/// Serializer for std::string - template<> - bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const std::string& s) - { - if ( !data || size <= offset || size - offset < serial_size(s)) - return false; - - uint32_t charsLen = s.length(); - uint32_t netLen = hton(charsLen); - memcpy(data+offset, &netLen, 4); offset += 4; - memcpy(data+offset, s.c_str(), charsLen); offset += charsLen; - return true; - } -template<> - bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,std::string& s) - { - if ( !data || size <= offset || size - offset < 4 ) return false; - uint32_t charsLen; - memcpy(&charsLen, data+offset, 4); offset += 4; - charsLen = ntoh(charsLen); - - if ( size <= offset || size - offset < charsLen ) return false; - s.clear(); - s.insert(0, (char*)data+offset, charsLen); - offset += charsLen; - return true; - } - -class RsSerializer -{ - public: - /*! create_item - * should be overloaded to create the correct type of item depending on the data - */ - virtual RsSerializable *create_item(uint16_t service, uint8_t item_sub_id) - { - return NULL ; - } - - RsSerializable *deserialize_item(const uint8_t *data,uint32_t size) - { - uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; - - RsSerializable *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; - - if(!item) - { - std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; - return NULL ; - } - - SerializeContext ctx(const_cast(data),size); - item->serial_process(RsSerializable::DESERIALIZE, ctx) ; - - if(ctx.mOk) - return item ; - - delete item ; - return NULL ; - } - - bool serialize_item(const RsSerializable *item,uint8_t *const data,uint32_t size) - { - SerializeContext ctx(data,0); - - uint32_t tlvsize = size_item(item) ; - - if(tlvsize > size) - throw std::runtime_error("Cannot serialise: not enough room.") ; - - if(!setRsItemHeader(data, tlvsize, const_cast(item)->PacketId(), tlvsize)) - { - std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; - return false ; - } - ctx.mOffset = 8; - ctx.mSize = tlvsize; - - const_cast(item)->serial_process(RsSerializable::SERIALIZE,ctx) ; - - if(ctx.mSize != ctx.mOffset) - { - std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; - return false ; - } - return true ; - } - - uint32_t size_item(const RsSerializable *item) - { - SerializeContext ctx(NULL,0); - - ctx.mSize = 8 ; // header size - const_cast(item)->serial_process(RsSerializable::SIZE_ESTIMATE, ctx) ; - - return ctx.mSize ; - } -}; - - - From bef75408da0d4c58e996f02b6ac34daca0672110 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sun, 26 Mar 2017 15:11:07 +0200 Subject: [PATCH 033/230] Fixed building on Travis CI --- libresapi/src/libresapi.pro | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libresapi/src/libresapi.pro b/libresapi/src/libresapi.pro index 31de982b3..33c4f726c 100644 --- a/libresapi/src/libresapi.pro +++ b/libresapi/src/libresapi.pro @@ -3,7 +3,8 @@ TEMPLATE = lib CONFIG += staticlib CONFIG += create_prl -CONFIG -= qt +CONFIG += qt +QT += core TARGET = resapi TARGET_PRL = libresapi DESTDIR = lib From c33107c1cc4bc17cf154c33039690e6047eff72a Mon Sep 17 00:00:00 2001 From: Konrad Date: Sun, 26 Mar 2017 19:12:04 +0200 Subject: [PATCH 034/230] Fixed: backward comptiblity --- libresapi/src/api/ChatHandler.cpp | 14 ++++---------- libresapi/src/api/IdentityHandler.cpp | 7 ++++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/libresapi/src/api/ChatHandler.cpp b/libresapi/src/api/ChatHandler.cpp index f50eaae9e..68f0bd356 100644 --- a/libresapi/src/api/ChatHandler.cpp +++ b/libresapi/src/api/ChatHandler.cpp @@ -933,18 +933,15 @@ void ChatHandler::handleMessages(Request &req, Response &resp) * doing it? */ tick(); - std::string chat_id; - req.mStream << makeKeyValueReference("chat_id", chat_id); - ChatId id(chat_id); - { RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ + ChatId id(req.mPath.top()); // make response a list resp.mDataStream.getStreamToMember(); if(id.isNotSet()) { - resp.setFail("\""+chat_id+"\" is not a valid chat id"); + resp.setFail("\""+req.mPath.top()+"\" is not a valid chat id"); return; } std::map >::iterator mit = mMsgs.find(id); @@ -982,14 +979,11 @@ void ChatHandler::handleSendMessage(Request &req, Response &resp) void ChatHandler::handleMarkChatAsRead(Request &req, Response &resp) { RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - - std::string chat_id; - req.mStream << makeKeyValueReference("chat_id", chat_id); - ChatId id(chat_id); + ChatId id(req.mPath.top()); if(id.isNotSet()) { - resp.setFail("\""+chat_id+"\" is not a valid chat id"); + resp.setFail("\""+req.mPath.top()+"\" is not a valid chat id"); return; } std::map >::iterator mit = mMsgs.find(id); diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 9f01442df..1a43211ea 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -102,9 +102,10 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden mNotify->registerNotifyClient(this); addResourceHandler("*", this, &IdentityHandler::handleWildcard); - //addResourceHandler("own", this, &IdentityHandler::handleOwn); - addResourceHandler("own", this, &IdentityHandler::handleOwnIdsRequest); - addResourceHandler("notown", this, &IdentityHandler::handleNotOwnIdsRequest); + addResourceHandler("own", this, &IdentityHandler::handleOwn); + + addResourceHandler("own_ids", this, &IdentityHandler::handleOwnIdsRequest); + addResourceHandler("notown_ids", this, &IdentityHandler::handleNotOwnIdsRequest); addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); } From 4031e493fba5c275e3b9d7c89630e5bdc3da56bd Mon Sep 17 00:00:00 2001 From: Konrad Date: Mon, 27 Mar 2017 16:11:04 +0200 Subject: [PATCH 035/230] Deleted: unused stateTokens --- libresapi/src/api/PeersHandler.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index d77a39651..b8fdc913d 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -181,7 +181,6 @@ void PeersHandler::handleGetStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); - resp.mStateToken = mStateToken; } std::string state_string; @@ -210,7 +209,6 @@ void PeersHandler::handleSetStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); - resp.mStateToken = mStateToken; } std::string state_string; @@ -232,7 +230,6 @@ void PeersHandler::handleGetCustomStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); - resp.mStateToken = mStateToken; } std::string custom_state_string = rsMsgs->getCustomStateString(); @@ -244,7 +241,6 @@ void PeersHandler::handleSetCustomStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); - resp.mStateToken = mStateToken; } std::string custom_state_string; From 569458a1c1847f42dca8556e92a9275af1a13a4b Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 28 Mar 2017 11:18:27 +0200 Subject: [PATCH 036/230] Changed: Qt dependecies are optional --- libresapi/src/api/ApiServer.cpp | 15 +++++++-- libresapi/src/libresapi.pro | 55 ++++++++++++++++++--------------- retroshare.pri | 6 ++++ 3 files changed, 48 insertions(+), 28 deletions(-) diff --git a/libresapi/src/api/ApiServer.cpp b/libresapi/src/api/ApiServer.cpp index 6efadeaf6..327dd6260 100644 --- a/libresapi/src/api/ApiServer.cpp +++ b/libresapi/src/api/ApiServer.cpp @@ -17,7 +17,9 @@ #include "ChannelsHandler.h" #include "StatsHandler.h" -#include "SettingsHandler.h" +#ifdef LIBRESAPI_QT + #include "SettingsHandler.h" +#endif /* data types in json http://json.org/ @@ -238,8 +240,10 @@ public: mChatHandler(sts, ifaces.mNotify, ifaces.mMsgs, ifaces.mPeers, ifaces.mIdentity, &mPeersHandler), mApiPluginHandler(sts, ifaces), mChannelsHandler(ifaces.mGxsChannels), - mStatsHandler(), - mSettingsHandler(sts) + mStatsHandler() +#ifdef LIBRESAPI_QT + ,mSettingsHandler(sts) +#endif { // the dynamic cast is to not confuse the addResourceHandler template like this: // addResourceHandler(derived class, parent class) @@ -265,8 +269,10 @@ public: &ChannelsHandler::handleRequest); router.addResourceHandler("stats", dynamic_cast(&mStatsHandler), &StatsHandler::handleRequest); +#ifdef LIBRESAPI_QT router.addResourceHandler("settings", dynamic_cast(&mSettingsHandler), &SettingsHandler::handleRequest); +#endif } PeersHandler mPeersHandler; @@ -279,7 +285,10 @@ public: ApiPluginHandler mApiPluginHandler; ChannelsHandler mChannelsHandler; StatsHandler mStatsHandler; + +#ifdef LIBRESAPI_QT SettingsHandler mSettingsHandler; +#endif }; ApiServer::ApiServer(): diff --git a/libresapi/src/libresapi.pro b/libresapi/src/libresapi.pro index 33c4f726c..e548ea9d0 100644 --- a/libresapi/src/libresapi.pro +++ b/libresapi/src/libresapi.pro @@ -3,8 +3,7 @@ TEMPLATE = lib CONFIG += staticlib CONFIG += create_prl -CONFIG += qt -QT += core +CONFIG -= qt TARGET = resapi TARGET_PRL = libresapi DESTDIR = lib @@ -13,32 +12,32 @@ INCLUDEPATH += ../../libretroshare/src retroshare_android_service { win32 { - OBJECTS_DIR = temp/obj + OBJECTS_DIR = temp/obj - LIBS_DIR = $$PWD/../../libs/lib - LIBS += $$OUT_PWD/../../libretroshare/src/lib/libretroshare.a - LIBS += $$OUT_PWD/../../openpgpsdk/src/lib/libops.a + LIBS_DIR = $$PWD/../../libs/lib + LIBS += $$OUT_PWD/../../libretroshare/src/lib/libretroshare.a + LIBS += $$OUT_PWD/../../openpgpsdk/src/lib/libops.a - for(lib, LIB_DIR):LIBS += -L"$$lib" - for(bin, BIN_DIR):LIBS += -L"$$bin" + for(lib, LIB_DIR):LIBS += -L"$$lib" + for(bin, BIN_DIR):LIBS += -L"$$bin" - LIBS += -lssl -lcrypto -lpthread -lminiupnpc -lz -lws2_32 - LIBS += -luuid -lole32 -liphlpapi -lcrypt32 -lgdi32 - LIBS += -lwinmm + LIBS += -lssl -lcrypto -lpthread -lminiupnpc -lz -lws2_32 + LIBS += -luuid -lole32 -liphlpapi -lcrypt32 -lgdi32 + LIBS += -lwinmm - DEFINES *= WINDOWS_SYS WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T + DEFINES *= WINDOWS_SYS WIN32_LEAN_AND_MEAN _USE_32BIT_TIME_T - DEPENDPATH += . $$INC_DIR - INCLUDEPATH += . $$INC_DIR + DEPENDPATH += . $$INC_DIR + INCLUDEPATH += . $$INC_DIR - greaterThan(QT_MAJOR_VERSION, 4) { - # Qt 5 - RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src - } else { - # Qt 4 - QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src - } + greaterThan(QT_MAJOR_VERSION, 4) { + # Qt 5 + RC_INCLUDEPATH += $$_PRO_FILE_PWD_/../../libretroshare/src + } else { + # Qt 4 + QMAKE_RC += --include-dir=$$_PRO_FILE_PWD_/../../libretroshare/src + } } DEPENDPATH += . ../../libretroshare/src/ @@ -183,8 +182,7 @@ SOURCES += \ util/ContentTypes.cpp \ api/ApiPluginHandler.cpp \ api/ChannelsHandler.cpp \ - api/StatsHandler.cpp \ - api/SettingsHandler.cpp + api/StatsHandler.cpp HEADERS += \ api/ApiServer.h \ @@ -211,8 +209,7 @@ HEADERS += \ util/ContentTypes.h \ api/ApiPluginHandler.h \ api/ChannelsHandler.h \ - api/StatsHandler.h \ - api/SettingsHandler.h + api/StatsHandler.h libresapilocalserver { CONFIG *= qt @@ -220,3 +217,11 @@ libresapilocalserver { SOURCES *= api/ApiServerLocal.cpp HEADERS *= api/ApiServerLocal.h } + +qt_dependencies { + CONFIG *= qt + QT *= core + + SOURCES += api/SettingsHandler.cpp + HEADERS += api/SettingsHandler.h +} diff --git a/retroshare.pri b/retroshare.pri index 498131aea..e27348311 100644 --- a/retroshare.pri +++ b/retroshare.pri @@ -29,6 +29,11 @@ retroshare_qml_app:CONFIG -= no_retroshare_qml_app CONFIG *= no_libresapilocalserver libresapilocalserver:CONFIG -= no_libresapilocalserver +# To enable Qt dependencies in libresapi append the following +# assignation to qmake command line "CONFIG+=qt_dependencies" +CONFIG *= no_qt_dependencies +qt_dependencies:CONFIG -= no_qt_dependencies + # To disable libresapi via HTTP (based on libmicrohttpd) append the following # assignation to qmake command line "CONFIG+=no_libresapihttpserver" CONFIG *= libresapihttpserver @@ -155,6 +160,7 @@ unfinished { wikipoos:DEFINES *= RS_USE_WIKI rs_gxs:DEFINES *= RS_ENABLE_GXS libresapilocalserver:DEFINES *= LIBRESAPI_LOCAL_SERVER +qt_dependencies:DEFINES *= LIBRESAPI_QT libresapihttpserver:DEFINES *= ENABLE_WEBUI sqlcipher:DEFINES -= NO_SQLCIPHER no_sqlcipher:DEFINES *= NO_SQLCIPHER From efd6ce3ed518af7462689ed467fda66cdf6c0831 Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 28 Mar 2017 11:19:50 +0200 Subject: [PATCH 037/230] Changed: Simplified asking for deferred self signature --- libresapi/src/api/RsControlModule.cpp | 115 ++------------------------ libresapi/src/api/RsControlModule.h | 5 -- 2 files changed, 6 insertions(+), 114 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index 228bb691a..595509f09 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -458,120 +458,17 @@ void RsControlModule::handleCreateLocation(Request &req, Response &resp) resp.setFail("could not create a new location. Error: "+err_string); } -class SignatureEventData -{ - public: - SignatureEventData(const void *_data,int32_t _len,unsigned int _signlen, std::string _reason) - { - // We need a new memory chnk because there's no guarranty _sign nor _signlen are not in the stack - - sign = (unsigned char *)rs_malloc(_signlen); - - if(!sign) - { - signlen = NULL; - signature_result = SELF_SIGNATURE_RESULT_FAILED; - return; - } - - signlen = new unsigned int; - *signlen = _signlen; - signature_result = SELF_SIGNATURE_RESULT_PENDING; - data = rs_malloc(_len); - - if(!data) - { - len = 0; - return; - } - len = _len; - memcpy(data,_data,len); - reason = _reason; - } - - ~SignatureEventData() - { - free(sign); - delete signlen; - free(data); - } - - void performSignature() - { - if(rsPeers->gpgSignData(data,len,sign,signlen,reason)) - signature_result = SELF_SIGNATURE_RESULT_SUCCESS; - else - signature_result = SELF_SIGNATURE_RESULT_FAILED; - } - - void *data; - uint32_t len; - unsigned char *sign; - unsigned int *signlen; - int signature_result; // 0=pending, 1=done, 2=failed/cancelled. - std::string reason; -}; - bool RsControlModule::askForDeferredSelfSignature(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen,int& signature_result, std::string reason /*=""*/) { - + if(rsPeers->gpgSignData(data,len,sign,signlen,reason)) { - RsStackMutex stack(mDataMtx); - std::cerr << "NotifyTxt:: deferred signature event requeted. " << std::endl; - - // Look into the queue - - Sha1CheckSum chksum = RsDirUtil::sha1sum((uint8_t*)data,len); - - std::map::iterator it = _deferred_signature_queue.find(chksum.toStdString()); - signature_result = SELF_SIGNATURE_RESULT_PENDING; - - if(it != _deferred_signature_queue.end()) - { - signature_result = it->second->signature_result; - - if(it->second->signature_result != SELF_SIGNATURE_RESULT_PENDING) // found it. Copy the result, and remove from the queue. - { - // We should check for the exact data match, for the sake of being totally secure. - // - std::cerr << "Found into queue: returning it" << std::endl; - - memcpy(sign,it->second->sign,*it->second->signlen); - *signlen = *(it->second->signlen); - - delete it->second; - _deferred_signature_queue.erase(it); - } - - return true; // already registered, but not done yet. - } - - // Not found. Store in the queue and emit a signal. - // - std::cerr << "NotifyTxt:: deferred signature event requeted. Pushing into queue" << std::endl; - - SignatureEventData *edta = new SignatureEventData(data,len,*signlen, reason); - - _deferred_signature_queue[chksum.toStdString()] = edta; + signature_result = SELF_SIGNATURE_RESULT_SUCCESS; + return true; } - handleSignatureEvent(); - return true; -} - -void RsControlModule::handleSignatureEvent() -{ - std::cerr << "NotifyTxt:: performing a deferred signature in the main GUI thread." << std::endl; - - static bool working = false ; - - if(!working) + else { - working = true ; - - for(std::map::const_iterator it(_deferred_signature_queue.begin());it!=_deferred_signature_queue.end();++it) - it->second->performSignature() ; - - working = false ; + signature_result = SELF_SIGNATURE_RESULT_FAILED; + return false; } } diff --git a/libresapi/src/api/RsControlModule.h b/libresapi/src/api/RsControlModule.h index 338027e15..1323651fc 100644 --- a/libresapi/src/api/RsControlModule.h +++ b/libresapi/src/api/RsControlModule.h @@ -9,8 +9,6 @@ namespace resource_api{ class StateTokenServer; class ApiServer; -class SignatureEventData; - // resource api module to control accounts, startup and shutdown of retroshare // - this module handles everything, no things are required from outside // - exception: users of this module have to create an api server and register this module @@ -87,9 +85,6 @@ private: // we store the password in this variable, it has higher priority than the normal password variable // it is also to avoid a lock, when we make a synchronous call into librs, like in ssl cert generation std::string mFixedPassword; - - void handleSignatureEvent(); - std::map _deferred_signature_queue ; }; } // namespace resource_api From 6e530027f8fec09479446316a1bbce92ac749e9d Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 28 Mar 2017 11:20:51 +0200 Subject: [PATCH 038/230] Added: tokens in PeersHandler --- libresapi/src/api/PeersHandler.cpp | 37 +++++++++++++++++++++--------- libresapi/src/api/PeersHandler.h | 5 ++++ 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index b8fdc913d..f48beb2f6 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -116,9 +116,9 @@ PeersHandler::PeersHandler(StateTokenServer* sts, RsNotify* notify, RsPeers *pee mStateTokenServer->registerTickClient(this); addResourceHandler("*", this, &PeersHandler::handleWildcard); addResourceHandler("get_state_string", this, &PeersHandler::handleGetStateString); - addResourceHandler("set_state_string", this, &PeersHandler::handleSetStateString); - addResourceHandler("get_custom_state_string", this, &PeersHandler::handleGetCustomStateString); - addResourceHandler("set_custom_state_string", this, &PeersHandler::handleSetCustomStateString); + addResourceHandler("set_state_string", this, &PeersHandler::handleSetStateString); + addResourceHandler("get_custom_state_string", this, &PeersHandler::handleGetCustomStateString); + addResourceHandler("set_custom_state_string", this, &PeersHandler::handleSetCustomStateString); addResourceHandler("examine_cert", this, &PeersHandler::handleExamineCert); } @@ -156,6 +156,27 @@ void PeersHandler::tick() mStateTokenServer->discardToken(mStateToken); mStateToken = mStateTokenServer->getNewToken(); } + + StatusInfo statusInfo; + rsStatus->getOwnStatus(statusInfo); + if(statusInfo.status != status) + { + status = statusInfo.status; + + RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ + mStateTokenServer->discardToken(mStringStateToken); + mStringStateToken = mStateTokenServer->getNewToken(); + } + + std::string custom_state = rsMsgs->getCustomStateString(); + if(custom_state != custom_state_string) + { + custom_state_string = custom_state; + + RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ + mStateTokenServer->discardToken(mCustomStateToken); + mCustomStateToken = mStateTokenServer->getNewToken(); + } } void PeersHandler::notifyUnreadMsgCountChanged(const RsPeerId &peer, uint32_t count) @@ -181,6 +202,7 @@ void PeersHandler::handleGetStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); + resp.mStateToken = mStringStateToken; } std::string state_string; @@ -207,10 +229,6 @@ void PeersHandler::handleGetStateString(Request& req, Response& resp) void PeersHandler::handleSetStateString(Request& req, Response& resp) { - { - RS_STACK_MUTEX(mMtx); - } - std::string state_string; req.mStream << makeKeyValueReference("state_string", state_string); @@ -230,6 +248,7 @@ void PeersHandler::handleGetCustomStateString(Request& req, Response& resp) { { RS_STACK_MUTEX(mMtx); + resp.mStateToken = mCustomStateToken; } std::string custom_state_string = rsMsgs->getCustomStateString(); @@ -239,10 +258,6 @@ void PeersHandler::handleGetCustomStateString(Request& req, Response& resp) void PeersHandler::handleSetCustomStateString(Request& req, Response& resp) { - { - RS_STACK_MUTEX(mMtx); - } - std::string custom_state_string; req.mStream << makeKeyValueReference("custom_state_string", custom_state_string); diff --git a/libresapi/src/api/PeersHandler.h b/libresapi/src/api/PeersHandler.h index a2eab706b..15d231c10 100644 --- a/libresapi/src/api/PeersHandler.h +++ b/libresapi/src/api/PeersHandler.h @@ -50,9 +50,14 @@ private: RsMsgs* mRsMsgs; // required for avatar data std::list mOnlinePeers; + uint32_t status; + std::string custom_state_string; RsMutex mMtx; StateToken mStateToken; // mutex protected + StateToken mStringStateToken; // mutex protected + StateToken mCustomStateToken; // mutex protected + std::map mUnreadMsgsCounts; }; } // namespace resource_api From 22956be00f1fd9a79dd6b95295eeda762847df51 Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 28 Mar 2017 11:24:16 +0200 Subject: [PATCH 039/230] Deleted: functions for hadling particular lobbies types in ChatHandler --- libresapi/src/api/ChatHandler.cpp | 88 ------------------------------- libresapi/src/api/ChatHandler.h | 4 -- 2 files changed, 92 deletions(-) diff --git a/libresapi/src/api/ChatHandler.cpp b/libresapi/src/api/ChatHandler.cpp index 68f0bd356..511993a29 100644 --- a/libresapi/src/api/ChatHandler.cpp +++ b/libresapi/src/api/ChatHandler.cpp @@ -159,10 +159,6 @@ ChatHandler::ChatHandler(StateTokenServer *sts, RsNotify *notify, RsMsgs *msgs, addResourceHandler("initiate_distant_chat", this, &ChatHandler::handleInitiateDistantChatConnexion); addResourceHandler("distant_chat_status", this, &ChatHandler::handleDistantChatStatus); addResourceHandler("close_distant_chat", this, &ChatHandler::handleCloseDistantChatConnexion); - - addResourceHandler("private_lobbies", this, &ChatHandler::handlePrivateLobbies); - addResourceHandler("subscribed_public_lobbies", this, &ChatHandler::handleSubscribedPublicLobbies); - addResourceHandler("unsubscribed_public_lobbies", this, &ChatHandler::handleUnsubscribedPublicLobbies); } ChatHandler::~ChatHandler() @@ -1204,88 +1200,4 @@ void ChatHandler::handleCloseDistantChatConnexion(Request& req, Response& resp) else resp.setFail("Failed to close distant chat"); } -void ChatHandler::handlePrivateLobbies(Request &req, Response &resp) -{ - tick(); - - { - RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - resp.mDataStream.getStreamToMember(); - for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) - { - if(!vit->is_private) - continue; - uint32_t unread_msgs = 0; - ChatId chat_id(vit->id); - std::map >::iterator mit = mMsgs.find(chat_id); - if(mit != mMsgs.end()) - { - std::list& msgs = mit->second; - for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) - if(!lit->read) - unread_msgs++; - } - resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); - } - resp.mStateToken = mLobbiesStateToken; - } - resp.setOk(); -} - -void ChatHandler::handleSubscribedPublicLobbies(Request &req, Response &resp) -{ - tick(); - - { - RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - resp.mDataStream.getStreamToMember(); - for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) - { - if(!vit->subscribed || vit->is_private || vit->is_broadcast) - continue; - uint32_t unread_msgs = 0; - ChatId chat_id(vit->id); - std::map >::iterator mit = mMsgs.find(chat_id); - if(mit != mMsgs.end()) - { - std::list& msgs = mit->second; - for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) - if(!lit->read) - unread_msgs++; - } - resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); - } - resp.mStateToken = mLobbiesStateToken; - } - resp.setOk(); -} - -void ChatHandler::handleUnsubscribedPublicLobbies(Request &req, Response &resp) -{ - tick(); - - { - RS_STACK_MUTEX(mMtx); /********** LOCKED **********/ - resp.mDataStream.getStreamToMember(); - for(std::vector::iterator vit = mLobbies.begin(); vit != mLobbies.end(); ++vit) - { - if(vit->subscribed || vit->is_private) - continue; - uint32_t unread_msgs = 0; - ChatId chat_id(vit->id); - std::map >::iterator mit = mMsgs.find(chat_id); - if(mit != mMsgs.end()) - { - std::list& msgs = mit->second; - for(std::list::iterator lit = msgs.begin(); lit != msgs.end(); ++lit) - if(!lit->read) - unread_msgs++; - } - resp.mDataStream.getStreamToMember() << *vit << makeKeyValueReference("unread_msg_count", unread_msgs); - } - resp.mStateToken = mLobbiesStateToken; - } - resp.setOk(); -} - } // namespace resource_api diff --git a/libresapi/src/api/ChatHandler.h b/libresapi/src/api/ChatHandler.h index 056629c06..dc075c77f 100644 --- a/libresapi/src/api/ChatHandler.h +++ b/libresapi/src/api/ChatHandler.h @@ -133,10 +133,6 @@ private: void handleDistantChatStatus(Request& req, Response& resp); void handleCloseDistantChatConnexion(Request& req, Response& resp); - void handlePrivateLobbies(Request &req, Response &resp); - void handleSubscribedPublicLobbies(Request &req, Response &resp); - void handleUnsubscribedPublicLobbies(Request &req, Response &resp); - void getPlainText(const std::string& in, std::string &out, std::vector &links); // last parameter is only used for lobbies! void locked_storeTypingInfo(const ChatId& chat_id, std::string status, RsGxsId lobby_gxs_id = RsGxsId()); From fbc1bb4e823209ad534f75552f06264fd4b69a9d Mon Sep 17 00:00:00 2001 From: Konrad Date: Wed, 29 Mar 2017 16:06:39 +0200 Subject: [PATCH 040/230] Added: function for handling autosubscribing lobbies --- libresapi/src/api/ChatHandler.cpp | 10 ++++++++++ libresapi/src/api/ChatHandler.h | 1 + 2 files changed, 11 insertions(+) diff --git a/libresapi/src/api/ChatHandler.cpp b/libresapi/src/api/ChatHandler.cpp index 511993a29..f576f8601 100644 --- a/libresapi/src/api/ChatHandler.cpp +++ b/libresapi/src/api/ChatHandler.cpp @@ -147,6 +147,7 @@ ChatHandler::ChatHandler(StateTokenServer *sts, RsNotify *notify, RsMsgs *msgs, addResourceHandler("lobbies", this, &ChatHandler::handleLobbies); addResourceHandler("subscribe_lobby", this, &ChatHandler::handleSubscribeLobby); addResourceHandler("unsubscribe_lobby", this, &ChatHandler::handleUnsubscribeLobby); + addResourceHandler("autosubscribe_lobby", this, &ChatHandler::handleAutoSubsribeLobby); addResourceHandler("clear_lobby", this, &ChatHandler::handleClearLobby); addResourceHandler("lobby_participants", this, &ChatHandler::handleLobbyParticipants); addResourceHandler("messages", this, &ChatHandler::handleMessages); @@ -890,6 +891,15 @@ void ChatHandler::handleUnsubscribeLobby(Request &req, Response &resp) resp.setOk(); } +void ChatHandler::handleAutoSubsribeLobby(Request& req, Response& resp) +{ + ChatLobbyId chatId = 0; + bool autosubsribe; + req.mStream << makeKeyValueReference("chatid", chatId) << makeKeyValueReference("autosubsribe", autosubsribe); + mRsMsgs->setLobbyAutoSubscribe(chatId, autosubsribe); + resp.setOk(); +} + void ChatHandler::handleClearLobby(Request &req, Response &resp) { ChatLobbyId id = 0; diff --git a/libresapi/src/api/ChatHandler.h b/libresapi/src/api/ChatHandler.h index dc075c77f..3463cee57 100644 --- a/libresapi/src/api/ChatHandler.h +++ b/libresapi/src/api/ChatHandler.h @@ -120,6 +120,7 @@ private: void handleLobbies(Request& req, Response& resp); void handleSubscribeLobby(Request& req, Response& resp); void handleUnsubscribeLobby(Request& req, Response& resp); + void handleAutoSubsribeLobby(Request& req, Response& resp); void handleClearLobby(Request& req, Response& resp); ResponseTask* handleLobbyParticipants(Request& req, Response& resp); void handleMessages(Request& req, Response& resp); From 8543525c77f6c54f44ef58221c0f07b3c6cee69c Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 1 Apr 2017 14:28:55 +0200 Subject: [PATCH 041/230] Fixed: Linker problem --- .../src/retroshare-android-service.pro | 20 +++++++++---------- retroshare-android-service/src/service.cpp | 2 -- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/retroshare-android-service/src/retroshare-android-service.pro b/retroshare-android-service/src/retroshare-android-service.pro index e45067f81..54843d34f 100644 --- a/retroshare-android-service/src/retroshare-android-service.pro +++ b/retroshare-android-service/src/retroshare-android-service.pro @@ -11,6 +11,16 @@ android-g++:CONFIG += dll android-g++:TEMPLATE = lib !android-g++:TEMPLATE = app +DEPENDPATH *= ../../libresapi/src +INCLUDEPATH *= ../../libresapi/src +PRE_TARGETDEPS *= ../../libresapi/src/lib/libresapi.a +LIBS *= ../../libresapi/src/lib/libresapi.a + +DEPENDPATH *= ../../libretroshare/src +INCLUDEPATH *= ../../libretroshare/src +PRE_TARGETDEPS *= ../../libretroshare/src/lib/libretroshare.a +LIBS *= ../../libretroshare/src/lib/libretroshare.a + win32 { OBJECTS_DIR = temp/obj @@ -41,13 +51,3 @@ win32 { } SOURCES += service.cpp - -DEPENDPATH *= ../../libresapi/src -INCLUDEPATH *= ../../libresapi/src -PRE_TARGETDEPS *= ../../libresapi/src/lib/libresapi.a -LIBS *= ../../libresapi/src/lib/libresapi.a - -DEPENDPATH *= ../../libretroshare/src -INCLUDEPATH *= ../../libretroshare/src -PRE_TARGETDEPS *= ../../libretroshare/src/lib/libretroshare.a -LIBS *= ../../libretroshare/src/lib/libretroshare.a diff --git a/retroshare-android-service/src/service.cpp b/retroshare-android-service/src/service.cpp index afe73bfc3..c822e8718 100644 --- a/retroshare-android-service/src/service.cpp +++ b/retroshare-android-service/src/service.cpp @@ -40,8 +40,6 @@ int main(int argc, char *argv[]) QCoreApplication a(argc, argv); - RsInit::InitRsConfig(); - ApiServer api; RsControlModule ctrl_mod(argc, argv, api.getStateTokenServer(), &api, true); api.addResourceHandler("control", dynamic_cast(&ctrl_mod), &resource_api::RsControlModule::handleRequest); From 6e65fcd6acf95e32a2ecde450abe67248888a660 Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 1 Apr 2017 14:32:49 +0200 Subject: [PATCH 042/230] Removed: Unused #include statement --- retroshare-android-service/src/service.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/retroshare-android-service/src/service.cpp b/retroshare-android-service/src/service.cpp index c822e8718..84ec62301 100644 --- a/retroshare-android-service/src/service.cpp +++ b/retroshare-android-service/src/service.cpp @@ -24,12 +24,10 @@ # include "util/androiddebug.h" #endif -#include "retroshare/rsinit.h" #include "api/ApiServer.h" #include "api/ApiServerLocal.h" #include "api/RsControlModule.h" - using namespace resource_api; int main(int argc, char *argv[]) From b52071d0c9e63477e2a60a701a6a73c235d74bf4 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 1 Apr 2017 18:05:53 +0200 Subject: [PATCH 043/230] removed RsSerializable and merged it into RsItem --- libretroshare/src/serialiser/rsserial.h | 19 ++++++++++++- .../src/serialization/rsserializer.h | 28 +++++++++++-------- .../src/serialization/rstypeserializer.h | 8 +++--- .../src/serialization/serial_test.cc | 21 +++++++------- 4 files changed, 49 insertions(+), 27 deletions(-) diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index bb8b84d8c..ad735abe5 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -70,6 +70,7 @@ const uint8_t RS_PKT_CLASS_CONFIG = 0x02; const uint8_t RS_PKT_SUBTYPE_DEFAULT = 0x01; /* if only one subtype */ +class SerializeContext ; class RsItem: public RsMemoryManagement::SmallObject { @@ -105,7 +106,23 @@ class RsItem: public RsMemoryManagement::SmallObject void setPacketService(uint16_t service); inline uint8_t priority_level() const { return _priority_level ;} - inline void setPriorityLevel(uint8_t l) { _priority_level = l ;} + inline void setPriorityLevel(uint8_t l) { _priority_level = l ;} + + /** + * @brief serialize this object to the given buffer + * @param Job to do: serialise or deserialize. + * @param data Chunk of memory were to dump the serialized data + * @param size Size of memory chunk + * @param offset Readed to determine at witch offset start writing data, + * written to inform caller were written data ends, the updated value + * is usually passed by the caller to serialize of another + * RsSerializable so it can write on the same chunk of memory just + * after where this RsSerializable has been serialized. + * @return true if serialization successed, false otherwise + */ + typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; + + virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; private: uint32_t type; diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 706ee3be4..e7725b955 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -5,7 +5,9 @@ #include #include -#include "rsserializable.h" +#include "serialiser/rsserial.h" + +#define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " class SerializeContext { @@ -20,22 +22,24 @@ class SerializeContext bool mOk ; }; -class RsSerializer +class RsSerializer: public RsSerialType { public: + RsSerializer(uint16_t service_id) : RsSerialType(service_id) {} + /*! create_item * should be overloaded to create the correct type of item depending on the data */ - virtual RsSerializable *create_item(uint16_t service, uint8_t item_sub_id) + virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) { return NULL ; } - RsSerializable *deserialize_item(const uint8_t *data,uint32_t size) + RsItem *deserialise(const uint8_t *data,uint32_t size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; - RsSerializable *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; + RsItem *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; if(!item) { @@ -46,7 +50,7 @@ class RsSerializer SerializeContext ctx(const_cast(data),size); ctx.mOffset = 8 ; - item->serial_process(RsSerializable::DESERIALIZE, ctx) ; + item->serial_process(RsItem::DESERIALIZE, ctx) ; if(ctx.mOk) return item ; @@ -55,16 +59,16 @@ class RsSerializer return NULL ; } - bool serialize_item(const RsSerializable *item,uint8_t *const data,uint32_t size) + bool serialise(RsItem *item,uint8_t *const data,uint32_t size) { SerializeContext ctx(data,0); - uint32_t tlvsize = size_item(item) ; + uint32_t tlvsize = this->size(item) ; if(tlvsize > size) throw std::runtime_error("Cannot serialise: not enough room.") ; - if(!setRsItemHeader(data, tlvsize, const_cast(item)->PacketId(), tlvsize)) + if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) { std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; return false ; @@ -72,7 +76,7 @@ class RsSerializer ctx.mOffset = 8; ctx.mSize = tlvsize; - const_cast(item)->serial_process(RsSerializable::SERIALIZE,ctx) ; + item->serial_process(RsItem::SERIALIZE,ctx) ; if(ctx.mSize != ctx.mOffset) { @@ -82,12 +86,12 @@ class RsSerializer return true ; } - uint32_t size_item(const RsSerializable *item) + uint32_t size(RsItem *item) { SerializeContext ctx(NULL,0); ctx.mSize = 8 ; // header size - const_cast(item)->serial_process(RsSerializable::SIZE_ESTIMATE, ctx) ; + item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; return ctx.mSize ; } diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index a713832b3..4661ecc61 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -23,17 +23,17 @@ class RsTypeSerializer { public: template - static void serial_process(RsSerializable::SerializeJob j,SerializeContext& ctx,T& member) + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member) { switch(j) { - case RsSerializable::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; + case RsItem::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; break ; - case RsSerializable::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + case RsItem::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; break ; - case RsSerializable::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + case RsItem::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; break ; default: diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index 9b5745b4b..f1698ad0c 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -8,7 +8,7 @@ #include "util/rsprint.h" #include "serialiser/rsserial.h" -#include "serializer.h" +#include "rsserializer.h" #include "rstypeserializer.h" static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; @@ -75,10 +75,10 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz // - a serial_process method that tells which members to serialize // - overload the clear() and print() methods of RsItem // -class RsTestItem: public RsSerializable +class RsTestItem: public RsItem { public: - RsTestItem() : RsSerializable(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) + RsTestItem() : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) { str = "test string"; ts = time(NULL) ; @@ -88,9 +88,9 @@ class RsTestItem: public RsSerializable int_set.insert(lrand48()) ; } - // Derived from RsSerializable + // Derived from RsItem // - virtual void serial_process(RsSerializable::SerializeJob j, SerializeContext& ctx) + virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx) { TlvString tt(str,TLV_TYPE_STR_DESCR) ; @@ -113,14 +113,15 @@ class RsTestItem: public RsSerializable }; // New user-defined serializer class. -// The only required member is the create_item() method, which creates the correct RsSerializable +// The only required member is the create_item() method, which creates the correct RsItem // that corresponds to a specific (service,subtype) couple. // class RsTestSerializer: public RsSerializer { public: + RsTestSerializer() : RsSerializer(RS_SERVICE_TYPE_TEST) {} - virtual RsSerializable *create_item(uint16_t service,uint8_t subtype) + virtual RsItem *create_item(uint8_t subtype) { switch(subtype) { @@ -144,7 +145,7 @@ int main(int argc,char *argv[]) { RsTestItem t1 ; - uint32_t size = RsTestSerializer().size_item(&t1); + uint32_t size = RsTestSerializer().size(&t1); std::cerr << "t1.serial_size() = " << size << std::endl; @@ -152,13 +153,13 @@ int main(int argc,char *argv[]) // RsTemporaryMemory mem1(size); - RsTestSerializer().serialize_item(&t1,mem1,mem1.size()) ; + RsTestSerializer().serialise(&t1,mem1,mem1.size()) ; std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; // Now deserialise into a new item // - RsSerializable *t2 = RsTestSerializer().deserialize_item(mem1,mem1.size()) ; + RsItem *t2 = RsTestSerializer().deserialise(mem1,mem1.size()) ; // make sure t1 is equal to t2 // From ddbe2ef9a19b374c9350ea0476fe86c535f90f1a Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 2 Apr 2017 14:48:17 +0200 Subject: [PATCH 044/230] created .cc files for serialization --- libretroshare/src/libretroshare.pro | 7 + libretroshare/src/serialiser/rsserial.h | 5 +- .../src/serialization/rsserializable.h | 35 ---- .../src/serialization/rsserializer.cc | 67 +++++++ .../src/serialization/rsserializer.h | 63 +------ .../src/serialization/rstypeserializer.h | 164 +----------------- 6 files changed, 82 insertions(+), 259 deletions(-) delete mode 100644 libretroshare/src/serialization/rsserializable.h create mode 100644 libretroshare/src/serialization/rsserializer.cc diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 551fbf335..1b437282c 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -771,6 +771,13 @@ HEADERS += gxstunnel/p3gxstunnel.h \ SOURCES += gxstunnel/p3gxstunnel.cc \ gxstunnel/rsgxstunnelitems.cc +# new serialization code +HEADERS += serialization/rsserializer.h \ + serialization/rstypeserializer.h + +SOURCES += serialization/rsserializer.cc \ + serialization/rstypeserializer.cc + # Identity Service HEADERS += retroshare/rsidentity.h \ gxs/rsgixs.h \ diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index ad735abe5..2b4aa304d 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -122,7 +122,10 @@ class RsItem: public RsMemoryManagement::SmallObject */ typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; - virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; + virtual void serial_process(SerializeJob j,SerializeContext& ctx) + { + std::cerr << "(EE) RsItem::serial_process() called by an item using new serialization classes, but not derived! " << std::endl; + } private: uint32_t type; diff --git a/libretroshare/src/serialization/rsserializable.h b/libretroshare/src/serialization/rsserializable.h deleted file mode 100644 index 3351e0147..000000000 --- a/libretroshare/src/serialization/rsserializable.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include "serialiser/rsserial.h" - -class RsItem ; -class SerializeContext; - -#define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " - -class RsSerializable: public RsItem -{ -public: - typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; - - RsSerializable(uint8_t version,uint16_t service,uint8_t id) - : RsItem(version,service,id) - { - } - - /** - * @brief serialize this object to the given buffer - * @param Job to do: serialise or deserialize. - * @param data Chunk of memory were to dump the serialized data - * @param size Size of memory chunk - * @param offset Readed to determine at witch offset start writing data, - * written to inform caller were written data ends, the updated value - * is usually passed by the caller to serialize of another - * RsSerializable so it can write on the same chunk of memory just - * after where this RsSerializable has been serialized. - * @return true if serialization successed, false otherwise - */ - - virtual void serial_process(SerializeJob j,SerializeContext& ctx) = 0; -}; - diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc new file mode 100644 index 000000000..cf8976fc1 --- /dev/null +++ b/libretroshare/src/serialization/rsserializer.cc @@ -0,0 +1,67 @@ +#pragma once + +#include "serialization/rsserializer.h" + +RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) +{ + uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; + + RsItem *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; + + if(!item) + { + std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + return NULL ; + } + + SerializeContext ctx(const_cast(data),size); + ctx.mOffset = 8 ; + + item->serial_process(RsItem::DESERIALIZE, ctx) ; + + if(ctx.mOk) + return item ; + + delete item ; + return NULL ; +} + +bool RsSerializer::serialise(RsItem *item,uint8_t *const data,uint32_t size) +{ + SerializeContext ctx(data,0); + + uint32_t tlvsize = this->size(item) ; + + if(tlvsize > size) + throw std::runtime_error("Cannot serialise: not enough room.") ; + + if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; + return false ; + } + ctx.mOffset = 8; + ctx.mSize = tlvsize; + + item->serial_process(RsItem::SERIALIZE,ctx) ; + + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; + return false ; + } + return true ; +} + +uint32_t RsSerializer::size(RsItem *item) +{ + SerializeContext ctx(NULL,0); + + ctx.mSize = 8 ; // header size + item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; + + return ctx.mSize ; +} + + + diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index e7725b955..102bc4dce 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -35,66 +35,9 @@ class RsSerializer: public RsSerialType return NULL ; } - RsItem *deserialise(const uint8_t *data,uint32_t size) - { - uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; - - RsItem *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; - - if(!item) - { - std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; - return NULL ; - } - - SerializeContext ctx(const_cast(data),size); - ctx.mOffset = 8 ; - - item->serial_process(RsItem::DESERIALIZE, ctx) ; - - if(ctx.mOk) - return item ; - - delete item ; - return NULL ; - } - - bool serialise(RsItem *item,uint8_t *const data,uint32_t size) - { - SerializeContext ctx(data,0); - - uint32_t tlvsize = this->size(item) ; - - if(tlvsize > size) - throw std::runtime_error("Cannot serialise: not enough room.") ; - - if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) - { - std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; - return false ; - } - ctx.mOffset = 8; - ctx.mSize = tlvsize; - - item->serial_process(RsItem::SERIALIZE,ctx) ; - - if(ctx.mSize != ctx.mOffset) - { - std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; - return false ; - } - return true ; - } - - uint32_t size(RsItem *item) - { - SerializeContext ctx(NULL,0); - - ctx.mSize = 8 ; // header size - item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; - - return ctx.mSize ; - } + RsItem *deserialise(const uint8_t *data,uint32_t size) ; + bool serialise(RsItem *item,uint8_t *const data,uint32_t size) ; + uint32_t size(RsItem *item) ; }; diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 4661ecc61..5c49d928c 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -1,24 +1,6 @@ +#include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" -template T ntoh(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return ntohl(t) ; - if(sizeof(T) == 2) return ntohs(t) ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; - return t; -} -template T hton(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return htonl(t) ; - if(sizeof(T) == 2) return htons(t) ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; - return t; -} - class RsTypeSerializer { public: @@ -48,148 +30,4 @@ class RsTypeSerializer template static uint32_t serial_size(const T& /* member */); }; -/// Templates to generate RsSerializer for standard integral types -// -template class t_SerializerNType -{ -public: - static bool serialize(uint8_t data[], uint32_t size, uint32_t &offset, const N& member) - { - if (size <= offset || size < SIZE + offset) - { - SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << SIZE+offset << " and size is only " << size << std::endl; - return false; - } - - N tmp = hton(member); - memcpy(data+offset, &tmp, SIZE); - offset += SIZE; - return true; - } - static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, N& member) - { - if (size <= offset || size < offset + SIZE) - { - SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << SIZE+offset << " and size is only " << size << std::endl; - return false; - } - - N tmp ; - memcpy(&tmp, data+offset, SIZE); - member = ntoh(tmp); - offset += SIZE; - return true; - } - - static uint32_t serial_size(const N& /* member */) - { - return SIZE; - } -}; - -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint64_t& member) -{ - return t_SerializerNType::serialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint64_t& member) -{ - return t_SerializerNType::deserialize(data,size,offset,member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& member) -{ - return t_SerializerNType::serial_size(member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& member) -{ - return t_SerializerNType::serial_size(member); -} -template<> uint32_t RsTypeSerializer::serial_size(const uint64_t& member) -{ - return t_SerializerNType::serial_size(member); -} -//// Float -// -template<> uint32_t RsTypeSerializer::serial_size(const float&){ return 4; } - -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t& offset, const float& f) -{ - uint32_t sz = serial_size(f); - - if ( !data || size <= offset || size < sz + offset ) - { - SERIALIZE_ERROR() << ": not enough room. SIZE+offset=" << sz+offset << " and size is only " << size << std::endl; - return false; - } - - const float tmp = f; - if(tmp < 0.0f) - { - SERIALIZE_ERROR() << "Cannot serialise invalid negative float value " << tmp << std::endl; - return false; - } - - /* This serialisation is quite accurate. The max relative error is approx. - * 0.01% and most of the time less than 1e-05% The error is well distributed - * over numbers also. */ - - uint32_t n; - if(tmp < 1e-7) n = (~(uint32_t)0); - else n = ((uint32_t)( (1.0f/(1.0f+tmp) * (~(uint32_t)0)))); - n = hton(n); - memcpy(data+offset, &n, sz); - offset += sz; - return true; -} - - -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f) -{ - uint32_t sz = serial_size(f); - - if ( !data || size <= offset || size < offset + sz ) - { - SERIALIZE_ERROR() << "Cannot deserialise float value. Not enough room. size=" << size << ", offset=" << offset << std::endl; - return false; - } - - uint32_t n; - memcpy(&n, data+offset, sz); - n = ntoh(n); - f = 1.0f/ ( n/(float)(~(uint32_t)0)) - 1.0f; - return true; -} - -typedef std::pair TlvString; - -/// Serializer for std::string -template<> uint32_t RsTypeSerializer::serial_size(const TlvString& s) -{ - return GetTlvStringSize(s.first) ; -} - -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const TlvString& s) -{ - return SetTlvString(data,size,&offset,s.second,s.first) ; -} - -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,TlvString& s) -{ - return GetTlvString((void*)data,size,&offset,s.second,s.first) ; -} From 75a3cf0f3b9e0cdd746311d30b6d0cdb2c6a7312 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 2 Apr 2017 15:04:03 +0200 Subject: [PATCH 045/230] fixed compilation in new serialization test code --- libretroshare/src/serialization/rsserializer.cc | 2 ++ libretroshare/src/serialization/rstypeserializer.h | 8 ++++++-- libretroshare/src/serialization/serial_test.cc | 7 +++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index cf8976fc1..e12878b1d 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -1,5 +1,6 @@ #pragma once +#include "util/rsprint.h" #include "serialization/rsserializer.h" RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) @@ -11,6 +12,7 @@ RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) if(!item) { std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + std::cerr << "(EE) Data is: " << RsUtil::BinToHex(data,std::min(50u,size)) << ((size>50)?"...":"") << std::endl; return NULL ; } diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 5c49d928c..25c4d45b2 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -4,8 +4,12 @@ class RsTypeSerializer { public: - template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member) + // This type should be used to pass a parameter to drive the serialisation if needed. + + typedef std::pair TlvString; + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member) { switch(j) { diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index f1698ad0c..24822284e 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -92,7 +92,7 @@ class RsTestItem: public RsItem // virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx) { - TlvString tt(str,TLV_TYPE_STR_DESCR) ; + RsTypeSerializer::TlvString tt(str,TLV_TYPE_STR_DESCR) ; RsTypeSerializer::serial_process(j,ctx,ts ) ; RsTypeSerializer::serial_process(j,ctx,tt ) ; @@ -121,8 +121,11 @@ class RsTestSerializer: public RsSerializer public: RsTestSerializer() : RsSerializer(RS_SERVICE_TYPE_TEST) {} - virtual RsItem *create_item(uint8_t subtype) + virtual RsItem *create_item(uint16_t service_id,uint8_t subtype) { + if(service_id != RS_SERVICE_TYPE_TEST) + return NULL ; + switch(subtype) { case RS_ITEM_SUBTYPE_TEST1: return new RsTestItem(); From 059dfcff47956dd9182f378a377414fec05bb640 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 4 Apr 2017 14:00:17 +0200 Subject: [PATCH 046/230] added hability to print in the serialization process --- libretroshare/src/serialiser/rsserial.h | 2 +- .../src/serialization/rsserializer.cc | 8 ++++++++ .../src/serialization/rstypeserializer.h | 6 +++++- .../src/serialization/serial_test.cc | 20 ++++++++++++++----- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 2b4aa304d..0abc63af6 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -120,7 +120,7 @@ class RsItem: public RsMemoryManagement::SmallObject * after where this RsSerializable has been serialized. * @return true if serialization successed, false otherwise */ - typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03} SerializeJob ; + typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03, PRINT=0x04 } SerializeJob ; virtual void serial_process(SerializeJob j,SerializeContext& ctx) { diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index e12878b1d..f7926f8e2 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -65,5 +65,13 @@ uint32_t RsSerializer::size(RsItem *item) return ctx.mSize ; } +void RsSerializer::print(RsItem *item) +{ + SerializeContext ctx(NULL,0); + + std::cerr << "***** RsItem class: \"" << typeid(*item).name() << "\" *****" << std::endl; + item->serial_process(RsItem::PRINT, ctx) ; + std::cerr << "******************************" << std::endl; +} diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 25c4d45b2..37c1f9dc7 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -9,7 +9,7 @@ class RsTypeSerializer typedef std::pair TlvString; template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member) + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member,const std::string& member_name) { switch(j) { @@ -22,6 +22,9 @@ class RsTypeSerializer case RsItem::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; break ; + case RsItem::PRINT: + print_data(member_name,member); + break; default: ctx.mOk = false ; throw std::runtime_error("Unknown serial job") ; @@ -32,6 +35,7 @@ class RsTypeSerializer template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); template static uint32_t serial_size(const T& /* member */); + template static void print_data(const std::string& name,const T& /* member */); }; diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index 24822284e..786fd1d88 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -11,6 +11,8 @@ #include "rsserializer.h" #include "rstypeserializer.h" +#define GET_VARIABLE_NAME(str) #str + static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; static const uint8_t RS_ITEM_SUBTYPE_TEST1 = 0x01 ; @@ -71,6 +73,11 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz return ok; } +template<> void RsTypeSerializer::print_data(const std::string& s,const std::set& set) +{ + std::cerr << " [set] " << s << " : set of size " << set.size() << std::endl; +} + // New item class. This class needs to define: // - a serial_process method that tells which members to serialize // - overload the clear() and print() methods of RsItem @@ -94,15 +101,15 @@ class RsTestItem: public RsItem { RsTypeSerializer::TlvString tt(str,TLV_TYPE_STR_DESCR) ; - RsTypeSerializer::serial_process(j,ctx,ts ) ; - RsTypeSerializer::serial_process(j,ctx,tt ) ; - RsTypeSerializer::serial_process(j,ctx,int_set ) ; + RsTypeSerializer::serial_process(j,ctx,ts ,GET_VARIABLE_NAME(ts) ) ; + RsTypeSerializer::serial_process(j,ctx,tt ,GET_VARIABLE_NAME(str) ) ; + RsTypeSerializer::serial_process(j,ctx,int_set,GET_VARIABLE_NAME(int_set) ) ; } - // Derived from RsItem + // Derived from RsItem, because they are pure virtuals. Normally print() should disappear soon. // virtual void clear() {} - virtual std::ostream& print(std::ostream&,uint16_t indent) {} + virtual std::ostream& print(std::ostream&,uint16_t) {} private: std::string str ; @@ -156,6 +163,9 @@ int main(int argc,char *argv[]) // RsTemporaryMemory mem1(size); + std::cerr << "Item to be serialized:" << std::endl; + + RsTestSerializer().print(&t1) ; RsTestSerializer().serialise(&t1,mem1,mem1.size()) ; std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; From f7e396856e0e044bc1e35bced8f0e9de6f6c48e3 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 4 Apr 2017 14:01:33 +0200 Subject: [PATCH 047/230] added hability to print in the serialization process --- libretroshare/src/serialization/rsserializer.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 102bc4dce..ea20845b7 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -35,9 +35,13 @@ class RsSerializer: public RsSerialType return NULL ; } + // The following functions *should not* be overloaded. + // They are kept public in order to allow them to be called if needed. + RsItem *deserialise(const uint8_t *data,uint32_t size) ; bool serialise(RsItem *item,uint8_t *const data,uint32_t size) ; uint32_t size(RsItem *item) ; + void print(RsItem *item) ; }; From 32ce9aea3a2990425c62305731480998d793b50b Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 4 Apr 2017 15:33:59 +0200 Subject: [PATCH 048/230] started converting rschatitems to new serialization --- libretroshare/src/chat/distantchat.cc | 2 +- libretroshare/src/chat/rschatitems.cc | 139 ++++++++++++------ libretroshare/src/chat/rschatitems.h | 33 ++--- .../src/serialization/rsserializer.cc | 4 +- .../src/serialization/rstypeserializer.h | 2 +- 5 files changed, 106 insertions(+), 74 deletions(-) diff --git a/libretroshare/src/chat/distantchat.cc b/libretroshare/src/chat/distantchat.cc index 70fb88d8c..3f0e26b83 100644 --- a/libretroshare/src/chat/distantchat.cc +++ b/libretroshare/src/chat/distantchat.cc @@ -218,7 +218,7 @@ void DistantChatService::receiveData(const RsGxsTunnelService::RsGxsTunnelId &tu contact.from_id = tinfo.source_gxs_id ; } - RsItem *item = RsChatSerialiser().deserialise(data,&data_size) ; + RsItem *item = RsChatSerialiser().deserialise(data,data_size) ; if(item != NULL) { diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 90cf78fa6..3e2bd7d5a 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -29,10 +29,13 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" +#include "serialization/rstypeserializer.h" + #include "chat/rschatitems.h" //#define CHAT_DEBUG 1 +#ifdef TO_BE_REMOVED std::ostream& RsChatMsgItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsChatMsgItem", indent); @@ -220,57 +223,44 @@ std::ostream& RsChatAvatarItem::print(std::ostream &out, uint16_t indent) return out; } -RsItem *RsChatSerialiser::deserialise(void *data, uint32_t *pktsize) +#endif + +RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) { - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); + if(service_id != RS_SERVICE_TYPE_CHAT) + return NULL ; -#ifdef CHAT_DEBUG - std::cerr << "deserializing packet..."<< std::endl ; -#endif - // look what we have... - if (*pktsize < rssize) /* check size */ + switch(item_sub_id) { -#ifdef CHAT_DEBUG - std::cerr << "chat deserialisation: not enough size: pktsize=" << *pktsize << ", rssize=" << rssize << std::endl ; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - /* ready to load */ - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_CHAT != getRsItemService(rstype))) - { -#ifdef CHAT_DEBUG - std::cerr << "chat deserialisation: wrong type !" << std::endl ; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_DEFAULT: return new RsChatMsgItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG: return new RsPrivateChatMsgConfigItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_DISTANT_INVITE_CONFIG: return new RsPrivateChatDistantInviteConfigItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_STATUS: return new RsChatStatusItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_AVATAR: return new RsChatAvatarItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG: return new RsChatLobbyMsgItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: return new RsChatLobbyInviteItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: return new RsChatLobbyConnectChallengeItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: return new RsChatLobbyUnsubscribeItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT: return new RsChatLobbyEventItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST: return new RsChatLobbyListRequestItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: return new RsChatLobbyListItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG: return new RsChatLobbyConfigItem(data,*pktsize) ; + case RS_PKT_SUBTYPE_DEFAULT: return new RsChatMsgItem() ; + case RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG: return new RsPrivateChatMsgConfigItem() ; + case RS_PKT_SUBTYPE_DISTANT_INVITE_CONFIG: return new RsPrivateChatDistantInviteConfigItem() ; + case RS_PKT_SUBTYPE_CHAT_STATUS: return new RsChatStatusItem() ; + case RS_PKT_SUBTYPE_CHAT_AVATAR: return new RsChatAvatarItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG: return new RsChatLobbyMsgItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: return new RsChatLobbyInviteItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: return new RsChatLobbyConnectChallengeItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: return new RsChatLobbyUnsubscribeItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT:return new RsChatLobbyEventItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST:return new RsChatLobbyListRequestItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: return new RsChatLobbyListItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG: return new RsChatLobbyConfigItem() ; default: std::cerr << "Unknown packet type in chat!" << std::endl ; return NULL ; } } +void RsChatMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::TlvString tt(str,TLV_TYPE_STR_MSG) ; + + RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatflags") ; + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + RsTypeSerializer::serial_process(j,ctx,tt,"message") ; +} + +#ifdef TO_BE_REMOVED uint32_t RsChatMsgItem::serial_size() { uint32_t s = 8; /* header */ @@ -423,6 +413,7 @@ uint32_t RsChatLobbyConfigItem::serial_size() return s; } +#endif /*************************************************************************/ @@ -435,6 +426,7 @@ RsChatAvatarItem::~RsChatAvatarItem() } } +#ifdef TO_BE_REMOVED /* serialise the data to the buffer */ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) { @@ -481,21 +473,40 @@ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) #endif return ok ; } +#endif -bool RsChatLobbyBouncingObject::serialise_to_memory(void *data,uint32_t tlvsize,uint32_t& offset,bool include_signature) +bool RsChatLobbyBouncingObject::serialise_to_memory(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature) { - bool ok = true ; + TlvString tt(nick,TLV_TYPE_STR_NAME) ; - ok &= setRawUInt64(data, tlvsize, &offset, lobby_id); - ok &= setRawUInt64(data, tlvsize, &offset, msg_id); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, nick); + RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; + RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; + RsTypeSerializer::serial_process(j,ctx,tt ,"nick") ; if(include_signature) - ok &= signature.SetTlv(data, tlvsize, &offset); + RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; - return ok ; + return true ; } +void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsChatMsgItem::serial_process(j,ctx) ; + + if(j == RsItem::SERIALIZE) + { + SerializeContext ctx2 ; + serial_process(RsItem::SIZE_ESTIMATE,ctx2); + + setRsItemHeader(ctx.mData, ctx.mSize, PacketId(), ctx2.mOffset); // correct header! + } + + RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; + + ctx.mOk &= RsChatLobbyBouncingObject::serialise_to_memory(j,ctx,true) ; +} + +#ifdef TO_BE_REMOVED /* serialise the data to the buffer */ bool RsChatLobbyMsgItem::serialise(void *data, uint32_t& pktsize) { @@ -528,6 +539,8 @@ bool RsChatLobbyMsgItem::serialise(void *data, uint32_t& pktsize) #endif return ok ; } +#endif + /* serialise the data to the buffer */ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize) { @@ -562,7 +575,12 @@ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize) return ok ; } +void RsChatLobbyListRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + // nothing to do. This is an empty item. +} +#ifdef TO_BE_REMOVED bool RsChatLobbyListRequestItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -575,6 +593,27 @@ bool RsChatLobbyListRequestItem::serialise(void *data, uint32_t& pktsize) pktsize = tlvsize ; return ok ; } +#endif + +template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info) +{ + RsTypeSerializer::serial_process(info.id) ; + + TlvString tt1(info.name ,TLV_TYPE_STR_NAME) ; + TlvString tt2(info.topic,TLV_TYPE_STR_NAME) ; + + RsTypeSerializer::serial_process(info.name) ; + RsTypeSerializer::serial_process(info.topic) ; + RsTypeSerializer::serial_process(info.count) ; + RsTypeSerializer::serial_process(info.flags.toUInt32()) ; +} + +void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,lobbies,"lobbies") ; +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyListItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -604,6 +643,8 @@ bool RsChatLobbyListItem::serialise(void *data, uint32_t& pktsize) } return ok ; } +#endif + bool RsChatLobbyEventItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 13b42c18f..2ce127196 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -27,6 +27,7 @@ #include "openssl/bn.h" #include "retroshare/rstypes.h" +#include "serialization/rsserializer.h" #include "serialiser/rstlvkeys.h" #include "serialiser/rsserviceids.h" #include "serialiser/rsserial.h" @@ -90,11 +91,9 @@ class RsChatItem: public RsItem } virtual ~RsChatItem() {} - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0 ; + virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) {} // derived from RsItem, but should be removed - virtual bool serialise(void *data,uint32_t& size) = 0 ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() = 0 ; // deserialise is handled using a constructor + virtual void clear() {} }; /*! @@ -107,14 +106,14 @@ public: RsChatMsgItem() :RsChatItem(RS_PKT_SUBTYPE_DEFAULT) {} RsChatMsgItem(uint8_t subtype) :RsChatItem(subtype) {} - RsChatMsgItem(void *data,uint32_t size,uint8_t subtype = RS_PKT_SUBTYPE_DEFAULT) ; // deserialization + //RsChatMsgItem() {} virtual ~RsChatMsgItem() {} - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + // derived from RsItem + + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void clear() {} uint32_t chatFlags; uint32_t sendTime; @@ -150,7 +149,7 @@ protected: // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. uint32_t serialized_size(bool include_signature) ; - bool serialise_to_memory(void *data,uint32_t tlvsize,uint32_t& offset,bool include_signature) ; + bool serialise_to_memory(RsItem::SerializeJob j, SerializeContext &ctx, bool include_signature) ; bool deserialise_from_memory(void *data,uint32_t rssize,uint32_t& offset) ; }; @@ -413,19 +412,11 @@ class RsChatDHPublicKeyItem: public RsChatItem const RsChatDHPublicKeyItem& operator=(const RsChatDHPublicKeyItem&) { return *this ;} }; -class RsChatSerialiser: public RsSerialType +class RsChatSerialiser: public RsSerializer { public: - RsChatSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_CHAT) {} + RsChatSerialiser() :RsSerializer(RS_SERVICE_TYPE_CHAT) {} - virtual uint32_t size (RsItem *item) - { - return static_cast(item)->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - return static_cast(item)->serialise(data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) ; + virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) ; }; diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index f7926f8e2..b17785038 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -59,10 +59,10 @@ uint32_t RsSerializer::size(RsItem *item) { SerializeContext ctx(NULL,0); - ctx.mSize = 8 ; // header size + ctx.mOffset = 8 ; // header size item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; - return ctx.mSize ; + return ctx.mOffset ; } void RsSerializer::print(RsItem *item) diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 37c1f9dc7..1e4d5b20b 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -13,7 +13,7 @@ class RsTypeSerializer { switch(j) { - case RsItem::SIZE_ESTIMATE: ctx.mSize += serial_size(member) ; + case RsItem::SIZE_ESTIMATE: ctx.mOffset += serial_size(member) ; break ; case RsItem::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; From f2fa70e39562a0d80d85df0abf7ab52ad7f4472a Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 4 Apr 2017 16:37:57 +0200 Subject: [PATCH 049/230] progress in converting Chat items to new serialization model --- libretroshare/src/chat/distantchat.cc | 8 +- libretroshare/src/chat/distributedchat.cc | 2 +- libretroshare/src/chat/rschatitems.cc | 91 ++++++++++++-- libretroshare/src/chat/rschatitems.h | 113 ++++-------------- .../src/serialization/rsserializer.h | 13 -- .../src/serialization/rstypeserializer.h | 25 ++++ 6 files changed, 136 insertions(+), 116 deletions(-) diff --git a/libretroshare/src/chat/distantchat.cc b/libretroshare/src/chat/distantchat.cc index 3f0e26b83..576e97efe 100644 --- a/libretroshare/src/chat/distantchat.cc +++ b/libretroshare/src/chat/distantchat.cc @@ -89,10 +89,10 @@ bool DistantChatService::handleOutgoingItem(RsChatItem *item) std::cerr << "p3ChatService::handleOutgoingItem(): sending to " << item->PeerId() << ": interpreted as a distant chat virtual peer id." << std::endl; #endif - uint32_t size = item->serial_size() ; + uint32_t size = RsChatSerialiser().size(item) ; RsTemporaryMemory mem(size) ; - if(!item->serialise(mem,size)) + if(!RsChatSerialiser().serialise(item,mem,size)) { std::cerr << "(EE) serialisation error. Something's really wrong!" << std::endl; return false; @@ -149,10 +149,10 @@ bool DistantChatService::acceptDataFromPeer(const RsGxsId& gxs_id,const RsGxsTun // we do not use handleOutGoingItem() because there's no distant chat contact, as the chat is refused. - uint32_t size = item->serial_size() ; + uint32_t size = RsChatSerialiser().size(item) ; RsTemporaryMemory mem(size) ; - if(!item->serialise(mem,size)) + if(!RsChatSerialiser().serialise(item,mem,size)) { std::cerr << "(EE) serialisation error. Something's really wrong!" << std::endl; return false; diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 05312e1a9..52c9e6ffb 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -415,7 +415,7 @@ void DistributedChatService::checkSizeAndSendLobbyMessage(RsChatItem *msg) // static const uint32_t MAX_ITEM_SIZE = 32000 ; - if(msg->serial_size() > MAX_ITEM_SIZE) + if(RsChatSerialiser().size(msg) > MAX_ITEM_SIZE) { std::cerr << "(EE) Chat item exceeds maximum serial size. It will be dropped." << std::endl; delete msg ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 3e2bd7d5a..aa0a19cda 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -234,7 +234,6 @@ RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) { case RS_PKT_SUBTYPE_DEFAULT: return new RsChatMsgItem() ; case RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG: return new RsPrivateChatMsgConfigItem() ; - case RS_PKT_SUBTYPE_DISTANT_INVITE_CONFIG: return new RsPrivateChatDistantInviteConfigItem() ; case RS_PKT_SUBTYPE_CHAT_STATUS: return new RsChatStatusItem() ; case RS_PKT_SUBTYPE_CHAT_AVATAR: return new RsChatAvatarItem() ; case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG: return new RsChatLobbyMsgItem() ; @@ -253,7 +252,7 @@ RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) void RsChatMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString tt(str,TLV_TYPE_STR_MSG) ; + RsTypeSerializer::TlvString tt(message,TLV_TYPE_STR_MSG) ; RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatflags") ; RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; @@ -475,9 +474,9 @@ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) } #endif -bool RsChatLobbyBouncingObject::serialise_to_memory(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature) +void RsChatLobbyBouncingObject::serial_process_special(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature) { - TlvString tt(nick,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::TlvString tt(nick,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; @@ -485,8 +484,6 @@ bool RsChatLobbyBouncingObject::serialise_to_memory(RsItem::SerializeJob j,Seria if(include_signature) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; - - return true ; } void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) @@ -495,7 +492,7 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& if(j == RsItem::SERIALIZE) { - SerializeContext ctx2 ; + SerializeContext ctx2(NULL,0) ; serial_process(RsItem::SIZE_ESTIMATE,ctx2); setRsItemHeader(ctx.mData, ctx.mSize, PacketId(), ctx2.mOffset); // correct header! @@ -503,7 +500,7 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - ctx.mOk &= RsChatLobbyBouncingObject::serialise_to_memory(j,ctx,true) ; + RsChatLobbyBouncingObject::serial_process_special(j,ctx,true) ; } #ifdef TO_BE_REMOVED @@ -561,7 +558,7 @@ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize) // The signature is at the end of the serialised data, so that the signed data is *before* the signature. - ok &= RsChatLobbyBouncingObject::serialise_to_memory(data,tlvsize,offset,false) ; + ok &= RsChatLobbyBouncingObject::serial_process_special(data,tlvsize,offset,false) ; /* add mandatory parts first */ if (offset != tlvsize) @@ -706,6 +703,12 @@ bool RsChatLobbyEventItem::serialise_signed_part(void *data, uint32_t& pktsize) return ok ; } +void RsChatLobbyUnsubscribeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyUnsubscribeItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -730,6 +733,14 @@ bool RsChatLobbyUnsubscribeItem::serialise(void *data, uint32_t& pktsize) pktsize = tlvsize ; return ok ; } +#endif + +void RsChatLobbyConnectChallengeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,challenge_code,"challenge_code") ; +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyConnectChallengeItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -754,7 +765,19 @@ bool RsChatLobbyConnectChallengeItem::serialise(void *data, uint32_t& pktsize) pktsize = tlvsize ; return ok ; } +#endif +void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; + + TlvString s(message,TLV_TYPE_STR_NAME) ; + + RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; + RsTypeSerializer::serial_process(j,ctx,lobby_flags.toUInt32(),"lobby_flags") ; +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyInviteItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -781,7 +804,22 @@ bool RsChatLobbyInviteItem::serialise(void *data, uint32_t& pktsize) pktsize = tlvsize ; return ok ; } +#endif +void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + uint32_t x=0 ; + TlvString s(message,TLV_TYPE_STR_MSG) ; + + RsTypeSerializer::serial_process(j,ctx,x,"place holder value") ; + RsTypeSerializer::serial_process (j,ctx,configPeerId,"configPeerId") ; + RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatFlags") ; + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + RsTypeSerializer::serial_process (j,ctx,s,"message") ; + RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime") ; +} + +#ifdef TO_BE_REMOVED bool RsPrivateChatMsgConfigItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -821,6 +859,7 @@ bool RsPrivateChatMsgConfigItem::serialise(void *data, uint32_t& pktsize) return ok; } + bool RsPrivateChatDistantInviteConfigItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -863,6 +902,18 @@ bool RsPrivateChatDistantInviteConfigItem::serialise(void *data, uint32_t& pktsi return ok; } +#endif + +void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; + + RsTypeSerializer::TlvString tt(status_string,TLV_TYPE_STR_MSG) ; + + RsTypeSerializer::serial_process(j,ctx,tt,"status_string") ; +} + +#ifdef TO_BE_REMOVED bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -901,7 +952,14 @@ bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) return ok; } +#endif +void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::BinaryDataBlock(data,image_size)) ; +} + +#ifdef TO_BE_REMOVED bool RsChatAvatarItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -942,6 +1000,15 @@ bool RsChatAvatarItem::serialise(void *data, uint32_t& pktsize) return ok; } +#endif + +void RsChatLobbyConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; + RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyConfigItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -1067,6 +1134,7 @@ RsChatLobbyListItem::RsChatLobbyListItem(void *data,uint32_t) if (!ok) std::cerr << "Unknown error while deserializing." << std::endl ; } +#endif bool RsChatLobbyBouncingObject::deserialise_from_memory(void *data,uint32_t rssize,uint32_t& offset) { @@ -1103,6 +1171,8 @@ RsChatLobbyEventItem::RsChatLobbyEventItem(void *data,uint32_t /*size*/) if (!ok) std::cerr << "Unknown error while deserializing." << std::endl ; } + +#ifdef TO_BE_REMOVED RsChatLobbyUnsubscribeItem::RsChatLobbyUnsubscribeItem(void *data,uint32_t /*size*/) : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE) { @@ -1246,6 +1316,7 @@ RsChatLobbyConfigItem::RsChatLobbyConfigItem(void *data,uint32_t /*size*/) if (!ok) std::cerr << "Unknown error while deserializing." << std::endl ; } +#endif /* set data from RsChatMsgItem to RsPrivateChatMsgConfigItem */ void RsPrivateChatMsgConfigItem::set(RsChatMsgItem *ci, const RsPeerId& /*peerId*/, uint32_t confFlags) @@ -1270,6 +1341,7 @@ void RsPrivateChatMsgConfigItem::get(RsChatMsgItem *ci) ci->recvTime = recvTime; } +#ifdef TO_BE_REMOVED RsChatStatusItem::RsChatStatusItem(void *data,uint32_t /*size*/) : RsChatItem(RS_PKT_SUBTYPE_CHAT_STATUS) { @@ -1319,4 +1391,5 @@ RsChatAvatarItem::RsChatAvatarItem(void *data,uint32_t /*size*/) std::cerr << "Unknown error while deserializing." << std::endl ; } +#endif diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 2ce127196..3b04b995c 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -79,7 +79,7 @@ const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE = 0x1A ; typedef uint64_t ChatLobbyId ; typedef uint64_t ChatLobbyMsgId ; -typedef std::string ChatLobbyNickName ; +typedef std::string ChatLobbyNickName ; typedef uint64_t DistantChatDHSessionId ; class RsChatItem: public RsItem @@ -91,7 +91,7 @@ class RsChatItem: public RsItem } virtual ~RsChatItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) {} // derived from RsItem, but should be removed + virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) { return out; } // derived from RsItem, but should be removed virtual void clear() {} }; @@ -136,7 +136,6 @@ public: RsTlvKeySignature signature ; virtual RsChatLobbyBouncingObject *duplicate() const = 0 ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); // returns the size in bytes of the data chunk to sign. @@ -148,9 +147,7 @@ protected: // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - uint32_t serialized_size(bool include_signature) ; - bool serialise_to_memory(RsItem::SerializeJob j, SerializeContext &ctx, bool include_signature) ; - bool deserialise_from_memory(void *data,uint32_t rssize,uint32_t& offset) ; + void serial_process_special(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); }; class RsChatLobbyMsgItem: public RsChatMsgItem, public RsChatLobbyBouncingObject @@ -158,14 +155,10 @@ class RsChatLobbyMsgItem: public RsChatMsgItem, public RsChatLobbyBouncingObject public: RsChatLobbyMsgItem() :RsChatMsgItem(RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG) {} - RsChatLobbyMsgItem(void *data,uint32_t size) ; // deserialization /// TODO!!! - virtual ~RsChatLobbyMsgItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyMsgItem(*this) ; } - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ; virtual uint32_t signed_serial_size() ; virtual bool serialise_signed_part(void *data,uint32_t& size) ;// Isn't it better that items can serialize themselves ? @@ -177,17 +170,14 @@ class RsChatLobbyEventItem: public RsChatItem, public RsChatLobbyBouncingObject { public: RsChatLobbyEventItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT) {} - RsChatLobbyEventItem(void *data,uint32_t size) ; // deserialization /// TODO!!! virtual ~RsChatLobbyEventItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; } // - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); virtual uint32_t signed_serial_size() ; - virtual bool serialise_signed_part(void *data,uint32_t& size) ; + virtual bool serialise_signed_part(void *data,uint32_t& size) ; // members. // @@ -200,13 +190,9 @@ class RsChatLobbyListRequestItem: public RsChatItem { public: RsChatLobbyListRequestItem() : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST) {} - RsChatLobbyListRequestItem(void *data,uint32_t size) ; virtual ~RsChatLobbyListRequestItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); }; struct VisibleChatLobbyInfo @@ -222,13 +208,9 @@ class RsChatLobbyListItem: public RsChatItem { public: RsChatLobbyListItem() : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST) {} - RsChatLobbyListItem(void *data,uint32_t size) ; virtual ~RsChatLobbyListItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); std::vector lobbies ; }; @@ -237,48 +219,38 @@ class RsChatLobbyUnsubscribeItem: public RsChatItem { public: RsChatLobbyUnsubscribeItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE) {} - RsChatLobbyUnsubscribeItem(void *data,uint32_t size) ; // deserialization virtual ~RsChatLobbyUnsubscribeItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); uint64_t lobby_id ; - - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor }; class RsChatLobbyConnectChallengeItem: public RsChatItem { public: RsChatLobbyConnectChallengeItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE) {} - RsChatLobbyConnectChallengeItem(void *data,uint32_t size) ; // deserialization virtual ~RsChatLobbyConnectChallengeItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); uint64_t challenge_code ; - - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor }; class RsChatLobbyInviteItem: public RsChatItem { public: RsChatLobbyInviteItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE) {} - RsChatLobbyInviteItem(void *data,uint32_t size) ; // deserialization - virtual ~RsChatLobbyInviteItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); ChatLobbyId lobby_id ; std::string lobby_name ; std::string lobby_topic ; ChatLobbyFlags lobby_flags ; - - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor }; /*! @@ -289,14 +261,11 @@ class RsPrivateChatMsgConfigItem: public RsChatItem { public: RsPrivateChatMsgConfigItem() :RsChatItem(RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG) {} - RsPrivateChatMsgConfigItem(void *data,uint32_t size) ; // deserialization virtual ~RsPrivateChatMsgConfigItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); /* set data from RsChatMsgItem to RsPrivateChatMsgConfigItem */ void set(RsChatMsgItem *ci, const RsPeerId &peerId, uint32_t confFlags); @@ -310,43 +279,19 @@ class RsPrivateChatMsgConfigItem: public RsChatItem std::string message; uint32_t recvTime; }; -class RsPrivateChatDistantInviteConfigItem: public RsChatItem -{ - public: - RsPrivateChatDistantInviteConfigItem() :RsChatItem(RS_PKT_SUBTYPE_DISTANT_INVITE_CONFIG) {} - RsPrivateChatDistantInviteConfigItem(void *data,uint32_t size) ; // deserialization - - virtual ~RsPrivateChatDistantInviteConfigItem() {} - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor - - unsigned char aes_key[16] ; - RsFileHash hash ; - std::string encrypted_radix64_string ; - RsPgpId destination_pgp_id ; - uint32_t time_of_validity ; - uint32_t last_hit_time ; - uint32_t flags ; -}; class RsChatLobbyConfigItem: public RsChatItem { public: - RsChatLobbyConfigItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG) { lobby_Id = 0; } - RsChatLobbyConfigItem(void *data,uint32_t size) ; // deserialization + RsChatLobbyConfigItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG) { lobby_Id = 0; } - virtual ~RsChatLobbyConfigItem() {} + virtual ~RsChatLobbyConfigItem() {} - virtual void clear() { lobby_Id = 0; } - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void clear() { lobby_Id = 0; } - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); - uint64_t lobby_Id; - uint32_t flags ; + uint64_t lobby_Id; + uint32_t flags ; }; // This class contains activity info for the sending peer: active, idle, typing, etc. @@ -355,13 +300,10 @@ class RsChatStatusItem: public RsChatItem { public: RsChatStatusItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_STATUS) {} - RsChatStatusItem(void *data,uint32_t size) ; // deserialization virtual ~RsChatStatusItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); uint32_t flags ; std::string status_string; @@ -373,13 +315,9 @@ class RsChatAvatarItem: public RsChatItem { public: RsChatAvatarItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_AVATAR) {setPriorityLevel(QOS_PRIORITY_RS_CHAT_AVATAR_ITEM) ;} - RsChatAvatarItem(void *data,uint32_t size) ; // deserialization virtual ~RsChatAvatarItem() ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); uint32_t image_size ; // size of data in bytes unsigned char *image_data ; // image @@ -392,13 +330,10 @@ class RsChatDHPublicKeyItem: public RsChatItem { public: RsChatDHPublicKeyItem() :RsChatItem(RS_PKT_SUBTYPE_DISTANT_CHAT_DH_PUBLIC_KEY) {setPriorityLevel(QOS_PRIORITY_RS_CHAT_ITEM) ;} - RsChatDHPublicKeyItem(void *data,uint32_t size) ; // deserialization virtual ~RsChatDHPublicKeyItem() { BN_free(public_key) ; } - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); // Private data to DH public key item // diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index ea20845b7..8c5539088 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -9,19 +9,6 @@ #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " -class SerializeContext -{ - public: - - SerializeContext(uint8_t *data,uint32_t size) - : mData(data),mSize(size),mOffset(0),mOk(true) {} - - unsigned char *mData ; - uint32_t mSize ; - uint32_t mOffset ; - bool mOk ; -}; - class RsSerializer: public RsSerialType { public: diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 1e4d5b20b..49505fc78 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -1,6 +1,22 @@ +#pragma once + #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" +class SerializeContext +{ + public: + + SerializeContext(uint8_t *data,uint32_t size) + : mData(data),mSize(size),mOffset(0),mOk(true) {} + + unsigned char *mData ; + uint32_t mSize ; + uint32_t mOffset ; + bool mOk ; +}; + + class RsTypeSerializer { public: @@ -8,6 +24,15 @@ class RsTypeSerializer typedef std::pair TlvString; + class BinaryDataBlock_ref + { + public: + BinaryDataBlock_ref(unsigned char *& _mem,uint32_t& _size) : mem(&_mem),size(&_size){} + + unsigned char **mem ; + uint32_t *size ; + }; + template static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member,const std::string& member_name) { From 9438d606096063d10650cfedee49a2712f38bc9a Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 4 Apr 2017 22:53:50 +0200 Subject: [PATCH 050/230] progress in converting Chat items to new serialization model --- libretroshare/src/chat/distributedchat.cc | 10 +- libretroshare/src/chat/rschatitems.cc | 91 ++++++++++++++----- libretroshare/src/chat/rschatitems.h | 25 ++--- .../src/serialization/rstypeserializer.h | 11 ++- 4 files changed, 92 insertions(+), 45 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 52c9e6ffb..4d1207f8f 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); - uint32_t size = obj->signed_serial_size() ; + uint32_t size = obj->serial_size_no_signature() ; RsTemporaryMemory memory(size) ; #ifdef DEBUG_CHAT_LOBBIES @@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const std::cerr << " signature id: " << obj->signature.keyId << std::endl; #endif - if(!obj->serialise_signed_part(memory,size)) + if(!obj->serialize_no_signature(memory,size)) { std::cerr << " (EE) Cannot serialise message item. " << std::endl; return false ; @@ -239,7 +239,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const uint32_t error_status ; RsIdentityUsage use_info(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id) ; - if(!mGixs->validateData(memory,obj->signed_serial_size(),obj->signature,false,use_info,error_status)) + if(!mGixs->validateData(memory,obj->serial_size_no_signature(),obj->signature,false,use_info,error_status)) { bool res = false ; @@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId& // now sign the object, if the lobby expects it - uint32_t size = item.signed_serial_size() ; + uint32_t size = item.serial_size_no_signature() ; RsTemporaryMemory memory(size) ; - if(!item.serialise_signed_part(memory,size)) + if(!item.serialize_no_signature(memory,size)) { std::cerr << "(EE) Cannot sign message item. " << std::endl; return false ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index aa0a19cda..165dc94de 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -35,6 +35,8 @@ //#define CHAT_DEBUG 1 +static const uint32_t RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE = 0x0001; + #ifdef TO_BE_REMOVED std::ostream& RsChatMsgItem::print(std::ostream &out, uint16_t indent) { @@ -474,7 +476,7 @@ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) } #endif -void RsChatLobbyBouncingObject::serial_process_special(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature) +void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::TlvString tt(nick,TLV_TYPE_STR_NAME) ; @@ -482,7 +484,7 @@ void RsChatLobbyBouncingObject::serial_process_special(RsItem::SerializeJob j,Se RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; RsTypeSerializer::serial_process(j,ctx,tt ,"nick") ; - if(include_signature) + if(!(ctx.mFlags & RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE)) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } @@ -490,17 +492,9 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& { RsChatMsgItem::serial_process(j,ctx) ; - if(j == RsItem::SERIALIZE) - { - SerializeContext ctx2(NULL,0) ; - serial_process(RsItem::SIZE_ESTIMATE,ctx2); - - setRsItemHeader(ctx.mData, ctx.mSize, PacketId(), ctx2.mOffset); // correct header! - } - RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - RsChatLobbyBouncingObject::serial_process_special(j,ctx,true) ; + RsChatLobbyBouncingObject::serial_process(j,ctx) ; } #ifdef TO_BE_REMOVED @@ -536,7 +530,6 @@ bool RsChatLobbyMsgItem::serialise(void *data, uint32_t& pktsize) #endif return ok ; } -#endif /* serialise the data to the buffer */ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize) @@ -571,6 +564,7 @@ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize) #endif return ok ; } +#endif void RsChatLobbyListRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { @@ -592,17 +586,17 @@ bool RsChatLobbyListRequestItem::serialise(void *data, uint32_t& pktsize) } #endif -template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info) +template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info) { RsTypeSerializer::serial_process(info.id) ; TlvString tt1(info.name ,TLV_TYPE_STR_NAME) ; TlvString tt2(info.topic,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(info.name) ; - RsTypeSerializer::serial_process(info.topic) ; - RsTypeSerializer::serial_process(info.count) ; - RsTypeSerializer::serial_process(info.flags.toUInt32()) ; + RsTypeSerializer::serial_process(j,ctx,info.name,"info.name") ; + RsTypeSerializer::serial_process(j,ctx,info.topic,"info.topic") ; + RsTypeSerializer::serial_process(j,ctx,info.count,"info.count") ; + RsTypeSerializer::serial_process(j,ctx,info.flags.toUInt32(),"info.flags") ; } void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) @@ -642,6 +636,18 @@ bool RsChatLobbyListItem::serialise(void *data, uint32_t& pktsize) } #endif +void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::TlvString tt(string1,TLV_TYPE_STR_NAME) ; + + RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; + RsTypeSerializer::serial_process (j,ctx,string1,"string1") ; + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + + RsChatLobbyBouncingObject::serial_process(j,ctx,!(ctx.mFlags & RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE)); +} + +#ifdef TO_BE_REMOVED bool RsChatLobbyEventItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -702,6 +708,7 @@ bool RsChatLobbyEventItem::serialise_signed_part(void *data, uint32_t& pktsize) #endif return ok ; } +#endif void RsChatLobbyUnsubscribeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { @@ -771,7 +778,7 @@ void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeConte { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; - TlvString s(message,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::TlvString s(lobby_name,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; RsTypeSerializer::serial_process(j,ctx,lobby_flags.toUInt32(),"lobby_flags") ; @@ -809,7 +816,7 @@ bool RsChatLobbyInviteItem::serialise(void *data, uint32_t& pktsize) void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { uint32_t x=0 ; - TlvString s(message,TLV_TYPE_STR_MSG) ; + RsTypeSerializer::TlvString s(message,TLV_TYPE_STR_MSG) ; RsTypeSerializer::serial_process(j,ctx,x,"place holder value") ; RsTypeSerializer::serial_process (j,ctx,configPeerId,"configPeerId") ; @@ -956,7 +963,7 @@ bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::BinaryDataBlock(data,image_size)) ; + RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::BinaryDataBlock_ref(image_data,image_size)) ; } #ifdef TO_BE_REMOVED @@ -1004,7 +1011,7 @@ bool RsChatAvatarItem::serialise(void *data, uint32_t& pktsize) void RsChatLobbyConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; + RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; } @@ -1134,7 +1141,6 @@ RsChatLobbyListItem::RsChatLobbyListItem(void *data,uint32_t) if (!ok) std::cerr << "Unknown error while deserializing." << std::endl ; } -#endif bool RsChatLobbyBouncingObject::deserialise_from_memory(void *data,uint32_t rssize,uint32_t& offset) { @@ -1172,7 +1178,6 @@ RsChatLobbyEventItem::RsChatLobbyEventItem(void *data,uint32_t /*size*/) std::cerr << "Unknown error while deserializing." << std::endl ; } -#ifdef TO_BE_REMOVED RsChatLobbyUnsubscribeItem::RsChatLobbyUnsubscribeItem(void *data,uint32_t /*size*/) : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE) { @@ -1393,3 +1398,43 @@ RsChatAvatarItem::RsChatAvatarItem(void *data,uint32_t /*size*/) #endif +uint32_t RsChatLobbyBouncingObject::serial_size_no_signature() const +{ + SerializeContext ctx(NULL,0); + + ctx.mOffset = 8; + ctx.mFlags = RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE ; + + const_cast(this)->serial_process(RsItem::SERIALIZE,ctx) ; + + return ctx.mOffset ; +} + +bool RsChatLobbyBouncingObject::serialize_no_signature(uint8_t *data,uint32_t size) const +{ + SerializeContext ctx(data,0); + + uint32_t tlvsize = serial_size_no_signature() ; + + if(tlvsize > size) + throw std::runtime_error("Cannot serialise: not enough room.") ; + + if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; + return false ; + } + ctx.mOffset = 8; + ctx.mSize = tlvsize; + ctx.mFlags = RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE ; + + const_cast(this)->serial_process(RsItem::SERIALIZE,ctx) ; + + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsChatSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; + return false ; + } + return true ; +} + diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 3b04b995c..5cdee927e 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -137,17 +137,17 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const = 0 ; - // returns the size in bytes of the data chunk to sign. - - virtual uint32_t signed_serial_size() =0; - virtual bool serialise_signed_part(void *data,uint32_t& size) = 0; + uint32_t serial_size_no_signature() const ; + bool serialize_no_signature(uint8_t *data,uint32_t size) const ; protected: // The functions below handle the serialisation of data that is specific to the bouncing object level. // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - void serial_process_special(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + + virtual uint32_t PacketId() const= 0; }; class RsChatLobbyMsgItem: public RsChatMsgItem, public RsChatLobbyBouncingObject @@ -160,10 +160,10 @@ public: void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ; - virtual uint32_t signed_serial_size() ; - virtual bool serialise_signed_part(void *data,uint32_t& size) ;// Isn't it better that items can serialize themselves ? - ChatLobbyMsgId parent_msg_id ; // Used for threaded chat. + +protected: + virtual uint32_t PacketId() const { return RsChatMsgItem::PacketId() ; } }; class RsChatLobbyEventItem: public RsChatItem, public RsChatLobbyBouncingObject @@ -176,14 +176,14 @@ class RsChatLobbyEventItem: public RsChatItem, public RsChatLobbyBouncingObject // void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); - virtual uint32_t signed_serial_size() ; - virtual bool serialise_signed_part(void *data,uint32_t& size) ; - // members. // uint8_t event_type ; // used for defining the type of event. std::string string1; // used for any string uint32_t sendTime; // used to check for old looping messages + +protected: + virtual uint32_t PacketId() const { return RsChatItem::PacketId() ; } }; class RsChatLobbyListRequestItem: public RsChatItem @@ -243,7 +243,7 @@ class RsChatLobbyInviteItem: public RsChatItem { public: RsChatLobbyInviteItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE) {} - virtual ~RsChatLobbyInviteItem() {} + virtual ~RsChatLobbyInviteItem() {} void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); @@ -279,6 +279,7 @@ class RsPrivateChatMsgConfigItem: public RsChatItem std::string message; uint32_t recvTime; }; + class RsChatLobbyConfigItem: public RsChatItem { public: diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 49505fc78..348d18375 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -8,12 +8,13 @@ class SerializeContext public: SerializeContext(uint8_t *data,uint32_t size) - : mData(data),mSize(size),mOffset(0),mOk(true) {} + : mData(data),mSize(size),mOffset(0),mOk(true),mFlags(0) {} unsigned char *mData ; uint32_t mSize ; uint32_t mOffset ; bool mOk ; + uint32_t mFlags ; }; @@ -57,10 +58,10 @@ class RsTypeSerializer } protected: - template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); - template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); - template static uint32_t serial_size(const T& /* member */); - template static void print_data(const std::string& name,const T& /* member */); + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); + template static uint32_t serial_size(const T& /* member */); + template static void print_data(const std::string& name,const T& /* member */); }; From 48688eae3f2a04a024e83bc25597683902f4870d Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 10:27:12 +0200 Subject: [PATCH 051/230] progress in converting chat items to new serialization --- libretroshare/src/chat/rschatitems.cc | 26 +++--- libretroshare/src/chat/rschatitems.h | 2 +- .../src/serialization/rsserializer.cc | 1 + .../src/serialization/rstypeserializer.h | 84 ++++++++++++++++--- 4 files changed, 88 insertions(+), 25 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 165dc94de..41291515e 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -476,7 +476,7 @@ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) } #endif -void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx, bool include_signature) { RsTypeSerializer::TlvString tt(nick,TLV_TYPE_STR_NAME) ; @@ -484,7 +484,7 @@ void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j,SerializeC RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; RsTypeSerializer::serial_process(j,ctx,tt ,"nick") ; - if(!(ctx.mFlags & RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE)) + if(include_signature) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } @@ -494,7 +494,7 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - RsChatLobbyBouncingObject::serial_process(j,ctx) ; + RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } #ifdef TO_BE_REMOVED @@ -586,9 +586,9 @@ bool RsChatLobbyListRequestItem::serialise(void *data, uint32_t& pktsize) } #endif -template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info) +template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& name) { - RsTypeSerializer::serial_process(info.id) ; + RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; TlvString tt1(info.name ,TLV_TYPE_STR_NAME) ; TlvString tt2(info.topic,TLV_TYPE_STR_NAME) ; @@ -596,12 +596,12 @@ template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,Serializ RsTypeSerializer::serial_process(j,ctx,info.name,"info.name") ; RsTypeSerializer::serial_process(j,ctx,info.topic,"info.topic") ; RsTypeSerializer::serial_process(j,ctx,info.count,"info.count") ; - RsTypeSerializer::serial_process(j,ctx,info.flags.toUInt32(),"info.flags") ; + RsTypeSerializer::serial_process(j,ctx,info.flags,"info.flags") ; } void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,lobbies,"lobbies") ; + RsTypeSerializer::serial_process(j,ctx,lobbies,"lobbies") ; } #ifdef TO_BE_REMOVED @@ -644,7 +644,7 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex RsTypeSerializer::serial_process (j,ctx,string1,"string1") ; RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; - RsChatLobbyBouncingObject::serial_process(j,ctx,!(ctx.mFlags & RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE)); + RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } #ifdef TO_BE_REMOVED @@ -781,7 +781,7 @@ void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeConte RsTypeSerializer::TlvString s(lobby_name,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; - RsTypeSerializer::serial_process(j,ctx,lobby_flags.toUInt32(),"lobby_flags") ; + RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; } #ifdef TO_BE_REMOVED @@ -963,7 +963,7 @@ bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::BinaryDataBlock_ref(image_data,image_size)) ; + RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::block_ref(image_data,image_size),"image data") ; } #ifdef TO_BE_REMOVED @@ -1403,9 +1403,8 @@ uint32_t RsChatLobbyBouncingObject::serial_size_no_signature() const SerializeContext ctx(NULL,0); ctx.mOffset = 8; - ctx.mFlags = RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE ; - const_cast(this)->serial_process(RsItem::SERIALIZE,ctx) ; + const_cast(this)->serial_process(RsItem::SERIALIZE,ctx,false) ; return ctx.mOffset ; } @@ -1426,9 +1425,8 @@ bool RsChatLobbyBouncingObject::serialize_no_signature(uint8_t *data,uint32_t si } ctx.mOffset = 8; ctx.mSize = tlvsize; - ctx.mFlags = RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE ; - const_cast(this)->serial_process(RsItem::SERIALIZE,ctx) ; + const_cast(this)->serial_process(RsItem::SERIALIZE,ctx,false) ; if(ctx.mSize != ctx.mOffset) { diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 5cdee927e..2440722dd 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -145,7 +145,7 @@ protected: // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); virtual uint32_t PacketId() const= 0; }; diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index b17785038..745dc3521 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -2,6 +2,7 @@ #include "util/rsprint.h" #include "serialization/rsserializer.h" +#include "serialization/rstypeserializer.h" RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) { diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 348d18375..15bb8c696 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" @@ -8,31 +10,39 @@ class SerializeContext public: SerializeContext(uint8_t *data,uint32_t size) - : mData(data),mSize(size),mOffset(0),mOk(true),mFlags(0) {} + : mData(data),mSize(size),mOffset(0),mOk(true) {} unsigned char *mData ; uint32_t mSize ; uint32_t mOffset ; bool mOk ; - uint32_t mFlags ; }; class RsTypeSerializer { +protected: + class BinaryDataBlock_ref + { + public: + BinaryDataBlock_ref(unsigned char *_mem,uint32_t& _size) : mem(_mem),size(_size){} + + // This allows to pass Temporary objects as modifiable. This is valid only because all members of this class + // are pointers and references. + + BinaryDataBlock_ref& modifiable() const { return *const_cast(this) ; } + + unsigned char *& mem ; + uint32_t& size ; + }; + + public: // This type should be used to pass a parameter to drive the serialisation if needed. typedef std::pair TlvString; - class BinaryDataBlock_ref - { - public: - BinaryDataBlock_ref(unsigned char *& _mem,uint32_t& _size) : mem(&_mem),size(&_size){} - - unsigned char **mem ; - uint32_t *size ; - }; + static BinaryDataBlock_ref& block_ref(unsigned char *mem,uint32_t& size) { return BinaryDataBlock_ref(mem,size).modifiable() ; } template static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member,const std::string& member_name) @@ -57,11 +67,65 @@ class RsTypeSerializer } } + // Arrays of stuff + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::vector& v,const std::string& member_name) + { + switch(j) + { + case RsItem::SIZE_ESTIMATE: + { + ctx.mOffset += 4 ; + for(uint32_t i=0;i static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); template static uint32_t serial_size(const T& /* member */); template static void print_data(const std::string& name,const T& /* member */); + + }; From 5b3e488b423cb8e0aae0f50af6b510fd5d4125ea Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 16:53:20 +0200 Subject: [PATCH 052/230] fixed compilation --- libretroshare/src/chat/rschatitems.cc | 16 ++-- libretroshare/src/retroshare/rsids.h | 2 +- libretroshare/src/serialiser/rsserial.h | 2 +- .../src/serialization/rsserializer.h | 2 +- .../src/serialization/rstypeserializer.h | 79 +++++++++++++++++-- .../src/serialization/serial_test.cc | 10 ++- 6 files changed, 91 insertions(+), 20 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 41291515e..9865ca411 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -593,10 +593,10 @@ template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,Serializ TlvString tt1(info.name ,TLV_TYPE_STR_NAME) ; TlvString tt2(info.topic,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,info.name,"info.name") ; - RsTypeSerializer::serial_process(j,ctx,info.topic,"info.topic") ; + RsTypeSerializer::serial_process(j,ctx,tt1,"info.name") ; + RsTypeSerializer::serial_process(j,ctx,tt2,"info.topic") ; RsTypeSerializer::serial_process(j,ctx,info.count,"info.count") ; - RsTypeSerializer::serial_process(j,ctx,info.flags,"info.flags") ; + RsTypeSerializer::serial_process(j,ctx,info.flags,"info.flags") ; } void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) @@ -641,8 +641,8 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex RsTypeSerializer::TlvString tt(string1,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; - RsTypeSerializer::serial_process (j,ctx,string1,"string1") ; - RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + RsTypeSerializer::serial_process (j,ctx,tt ,"string1") ; + RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } @@ -781,7 +781,7 @@ void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeConte RsTypeSerializer::TlvString s(lobby_name,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; - RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; + RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; } #ifdef TO_BE_REMOVED @@ -913,7 +913,7 @@ bool RsPrivateChatDistantInviteConfigItem::serialise(void *data, uint32_t& pktsi void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; + RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; RsTypeSerializer::TlvString tt(status_string,TLV_TYPE_STR_MSG) ; @@ -1012,7 +1012,7 @@ bool RsChatAvatarItem::serialise(void *data, uint32_t& pktsize) void RsChatLobbyConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; - RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; + RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; } #ifdef TO_BE_REMOVED diff --git a/libretroshare/src/retroshare/rsids.h b/libretroshare/src/retroshare/rsids.h index db842ab21..a412f0cf2 100644 --- a/libretroshare/src/retroshare/rsids.h +++ b/libretroshare/src/retroshare/rsids.h @@ -120,7 +120,7 @@ template c offset += SIZE_IN_BYTES ; return true ; } - bool deserialise(void *data,uint32_t pktsize,uint32_t& offset) + bool deserialise(const void *data,uint32_t pktsize,uint32_t& offset) { if(offset + SIZE_IN_BYTES > pktsize) return false ; diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 0abc63af6..722eec9ec 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -122,7 +122,7 @@ class RsItem: public RsMemoryManagement::SmallObject */ typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03, PRINT=0x04 } SerializeJob ; - virtual void serial_process(SerializeJob j,SerializeContext& ctx) + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) { std::cerr << "(EE) RsItem::serial_process() called by an item using new serialization classes, but not derived! " << std::endl; } diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 8c5539088..f5f815d52 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -17,7 +17,7 @@ class RsSerializer: public RsSerialType /*! create_item * should be overloaded to create the correct type of item depending on the data */ - virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) { return NULL ; } diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 15bb8c696..2bb269ef6 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -1,10 +1,11 @@ #pragma once -#include - #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" +#include "retroshare/rsflags.h" +#include "retroshare/rsids.h" + class SerializeContext { public: @@ -44,6 +45,10 @@ protected: static BinaryDataBlock_ref& block_ref(unsigned char *mem,uint32_t& size) { return BinaryDataBlock_ref(mem,size).modifiable() ; } + //=================================================================================================// + // Generic types // + //=================================================================================================// + template static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member,const std::string& member_name) { @@ -67,7 +72,9 @@ protected: } } - // Arrays of stuff + //=================================================================================================// + // std::vector // + //=================================================================================================// template static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::vector& v,const std::string& member_name) @@ -106,7 +113,7 @@ protected: if(v.empty()) std::cerr << " Empty array"<< std::endl; else - std::cerr << " Array of \"" << typeid(v[0]).name() << "\"" << " with " << v.size() << " elements:"; + std::cerr << " Array of " << v.size() << " elements:" << std::endl; for(uint32_t i=0;i types // + //=================================================================================================// + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,t_RsFlags32& v,const std::string& member_name) + { + switch(j) + { + case RsItem::SIZE_ESTIMATE: ctx.mOffset += 4 ; + break ; + + case RsItem::DESERIALIZE: + { + uint32_t n=0 ; + deserialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + v = t_RsFlags32(n) ; + } + break ; + + case RsItem::SERIALIZE: + { + uint32_t n=v.toUInt32() ; + serialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + } + break ; + + case RsItem::PRINT: + std::cerr << " Flags of type " << std::hex << N << " : " << v.toUInt32() << std::endl; + break ; + } + + } protected: template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); @@ -125,7 +165,36 @@ protected: template static uint32_t serial_size(const T& /* member */); template static void print_data(const std::string& name,const T& /* member */); - + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsGenericIdType& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsGenericIdType& member); + template static uint32_t serial_size(const t_RsGenericIdType& /* member */); + template static void print_data(const std::string& name,const t_RsGenericIdType& /* member */); }; +//=================================================================================================// +// t_RsGenericId<> // +//=================================================================================================// +template +bool RsTypeSerializer::serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsGenericIdType& member) +{ + return (*const_cast *>(&member)).serialise(data,size,offset) ; +} + +template +bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsGenericIdType& member) +{ + return member.deserialise(data,size,offset) ; +} + +template +uint32_t RsTypeSerializer::serial_size(const t_RsGenericIdType& member) +{ + return member.serial_size(); +} + +template +void RsTypeSerializer::print_data(const std::string& name,const t_RsGenericIdType& member) +{ + std::cerr << " [RsGenericId<" << std::hex << UNIQUE_IDENTIFIER << ">] : " << member << std::endl; +} diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index 786fd1d88..67770ad87 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -3,6 +3,7 @@ // #include +#include #include "util/rsmemory.h" #include "util/rsprint.h" @@ -90,9 +91,9 @@ class RsTestItem: public RsItem str = "test string"; ts = time(NULL) ; - int_set.insert(lrand48()) ; - int_set.insert(lrand48()) ; - int_set.insert(lrand48()) ; + int_set.push_back(lrand48()) ; + int_set.push_back(lrand48()) ; + int_set.push_back(lrand48()) ; } // Derived from RsItem @@ -114,7 +115,7 @@ class RsTestItem: public RsItem private: std::string str ; uint64_t ts ; - std::set int_set ; + std::vector int_set ; friend int main(int argc,char *argv[]); }; @@ -148,6 +149,7 @@ class RsTestSerializer: public RsSerializer void check(const std::string& s1,const std::string& s2) { assert(s1 == s2) ; } void check(const uint64_t& s1,const uint64_t& s2) { assert(s1 == s2) ; } void check(const std::set& s1,const std::set& s2) { assert(s1 == s2) ; } +void check(const std::vector& s1,const std::vector& s2) { assert(s1 == s2) ; } int main(int argc,char *argv[]) { From a941136c0457975c477c398a2dbb16c67f216caf Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 18:09:45 +0200 Subject: [PATCH 053/230] fixed a few bugs in new serialization --- libretroshare/src/chat/distantchat.cc | 6 +++--- libretroshare/src/serialiser/rsserial.cc | 1 + libretroshare/src/serialization/rsserializer.cc | 14 ++++++-------- libretroshare/src/serialization/rsserializer.h | 9 ++++----- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/libretroshare/src/chat/distantchat.cc b/libretroshare/src/chat/distantchat.cc index 576e97efe..8bb8b8d17 100644 --- a/libretroshare/src/chat/distantchat.cc +++ b/libretroshare/src/chat/distantchat.cc @@ -92,7 +92,7 @@ bool DistantChatService::handleOutgoingItem(RsChatItem *item) uint32_t size = RsChatSerialiser().size(item) ; RsTemporaryMemory mem(size) ; - if(!RsChatSerialiser().serialise(item,mem,size)) + if(!RsChatSerialiser().serialise(item,mem,&size)) { std::cerr << "(EE) serialisation error. Something's really wrong!" << std::endl; return false; @@ -152,7 +152,7 @@ bool DistantChatService::acceptDataFromPeer(const RsGxsId& gxs_id,const RsGxsTun uint32_t size = RsChatSerialiser().size(item) ; RsTemporaryMemory mem(size) ; - if(!RsChatSerialiser().serialise(item,mem,size)) + if(!RsChatSerialiser().serialise(item,mem,&size)) { std::cerr << "(EE) serialisation error. Something's really wrong!" << std::endl; return false; @@ -218,7 +218,7 @@ void DistantChatService::receiveData(const RsGxsTunnelService::RsGxsTunnelId &tu contact.from_id = tinfo.source_gxs_id ; } - RsItem *item = RsChatSerialiser().deserialise(data,data_size) ; + RsItem *item = RsChatSerialiser().deserialise(data,&data_size) ; if(item != NULL) { diff --git a/libretroshare/src/serialiser/rsserial.cc b/libretroshare/src/serialiser/rsserial.cc index 549bdc42c..8624b5304 100644 --- a/libretroshare/src/serialiser/rsserial.cc +++ b/libretroshare/src/serialiser/rsserial.cc @@ -219,6 +219,7 @@ uint32_t RsSerialType::size(RsItem *) bool RsSerialType::serialise(RsItem */*item*/, void */*data*/, uint32_t */*size*/) { + std::cerr << "(EE) Empty method called for missing serialize() method in serializer class " << typeid(this).name() << std::endl; #ifdef RSSERIAL_DEBUG std::cerr << "RsSerialType::serialise()" << std::endl; #endif diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 745dc3521..4cf03d133 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -1,10 +1,8 @@ -#pragma once - #include "util/rsprint.h" #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" -RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) +RsItem *RsSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; @@ -13,11 +11,11 @@ RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) if(!item) { std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; - std::cerr << "(EE) Data is: " << RsUtil::BinToHex(data,std::min(50u,size)) << ((size>50)?"...":"") << std::endl; + std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; return NULL ; } - SerializeContext ctx(const_cast(data),size); + SerializeContext ctx(const_cast(static_cast(data)),*size); ctx.mOffset = 8 ; item->serial_process(RsItem::DESERIALIZE, ctx) ; @@ -29,13 +27,13 @@ RsItem *RsSerializer::deserialise(const uint8_t *data,uint32_t size) return NULL ; } -bool RsSerializer::serialise(RsItem *item,uint8_t *const data,uint32_t size) +bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) { - SerializeContext ctx(data,0); + SerializeContext ctx(static_cast(data),0); uint32_t tlvsize = this->size(item) ; - if(tlvsize > size) + if(tlvsize > *size) throw std::runtime_error("Cannot serialise: not enough room.") ; if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index f5f815d52..9c6259cf9 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -12,7 +12,7 @@ class RsSerializer: public RsSerialType { public: - RsSerializer(uint16_t service_id) : RsSerialType(service_id) {} + RsSerializer(uint16_t service_id) : RsSerialType(RS_PKT_VERSION_SERVICE,service_id) {} /*! create_item * should be overloaded to create the correct type of item depending on the data @@ -22,11 +22,10 @@ class RsSerializer: public RsSerialType return NULL ; } - // The following functions *should not* be overloaded. - // They are kept public in order to allow them to be called if needed. + // The following functions overload RsSerialType. They *should not* need to be further overloaded. - RsItem *deserialise(const uint8_t *data,uint32_t size) ; - bool serialise(RsItem *item,uint8_t *const data,uint32_t size) ; + RsItem *deserialise(void *data,uint32_t *size) ; + bool serialise(RsItem *item,void *data,uint32_t *size) ; uint32_t size(RsItem *item) ; void print(RsItem *item) ; }; From 6b4fdb42ae7a23250357d771f9cf28d581ea3058 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 18:25:54 +0200 Subject: [PATCH 054/230] fixed bug in serialization --- libretroshare/src/chat/rschatitems.cc | 20 ++++++++++-------- .../src/serialization/rstypeserializer.h | 21 ++----------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 9865ca411..ef4908252 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -254,7 +254,7 @@ RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) void RsChatMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString tt(message,TLV_TYPE_STR_MSG) ; + RsTypeSerializer::TlvString_proxy tt(message,TLV_TYPE_STR_MSG) ; RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatflags") ; RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; @@ -478,7 +478,7 @@ bool RsChatMsgItem::serialise(void *data, uint32_t& pktsize) void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx, bool include_signature) { - RsTypeSerializer::TlvString tt(nick,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::TlvString_proxy tt(nick,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; @@ -590,8 +590,8 @@ template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,Serializ { RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; - TlvString tt1(info.name ,TLV_TYPE_STR_NAME) ; - TlvString tt2(info.topic,TLV_TYPE_STR_NAME) ; + TlvString_proxy tt1(info.name ,TLV_TYPE_STR_NAME) ; + TlvString_proxy tt2(info.topic,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,tt1,"info.name") ; RsTypeSerializer::serial_process(j,ctx,tt2,"info.topic") ; @@ -638,7 +638,7 @@ bool RsChatLobbyListItem::serialise(void *data, uint32_t& pktsize) void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString tt(string1,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::TlvString_proxy tt(string1,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; RsTypeSerializer::serial_process (j,ctx,tt ,"string1") ; @@ -778,7 +778,7 @@ void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeConte { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; - RsTypeSerializer::TlvString s(lobby_name,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::TlvString_proxy s(lobby_name,TLV_TYPE_STR_NAME) ; RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; @@ -816,7 +816,7 @@ bool RsChatLobbyInviteItem::serialise(void *data, uint32_t& pktsize) void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { uint32_t x=0 ; - RsTypeSerializer::TlvString s(message,TLV_TYPE_STR_MSG) ; + RsTypeSerializer::TlvString_proxy s(message,TLV_TYPE_STR_MSG) ; RsTypeSerializer::serial_process(j,ctx,x,"place holder value") ; RsTypeSerializer::serial_process (j,ctx,configPeerId,"configPeerId") ; @@ -915,7 +915,7 @@ void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& c { RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; - RsTypeSerializer::TlvString tt(status_string,TLV_TYPE_STR_MSG) ; + RsTypeSerializer::TlvString_proxy tt(status_string,TLV_TYPE_STR_MSG) ; RsTypeSerializer::serial_process(j,ctx,tt,"status_string") ; } @@ -963,7 +963,9 @@ bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,RsTypeSerializer::block_ref(image_data,image_size),"image data") ; + RsTypeSerializer::TlvMemBlock_proxy b(image_data,image_size) ; + + RsTypeSerializer::serial_process(j,ctx,b,"image data") ; } #ifdef TO_BE_REMOVED diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 2bb269ef6..f82365f82 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -22,28 +22,11 @@ class SerializeContext class RsTypeSerializer { -protected: - class BinaryDataBlock_ref - { - public: - BinaryDataBlock_ref(unsigned char *_mem,uint32_t& _size) : mem(_mem),size(_size){} - - // This allows to pass Temporary objects as modifiable. This is valid only because all members of this class - // are pointers and references. - - BinaryDataBlock_ref& modifiable() const { return *const_cast(this) ; } - - unsigned char *& mem ; - uint32_t& size ; - }; - - public: // This type should be used to pass a parameter to drive the serialisation if needed. - typedef std::pair TlvString; - - static BinaryDataBlock_ref& block_ref(unsigned char *mem,uint32_t& size) { return BinaryDataBlock_ref(mem,size).modifiable() ; } + typedef std::pair TlvString_proxy; + typedef std::pair TlvMemBlock_proxy; //=================================================================================================// // Generic types // From 03c31ceaccfe1812ea32765fa55cc573c6544159 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 18:27:29 +0200 Subject: [PATCH 055/230] fixed serialization test example --- libretroshare/src/serialization/serial_test.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc index 67770ad87..a8d89a25f 100644 --- a/libretroshare/src/serialization/serial_test.cc +++ b/libretroshare/src/serialization/serial_test.cc @@ -100,7 +100,7 @@ class RsTestItem: public RsItem // virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx) { - RsTypeSerializer::TlvString tt(str,TLV_TYPE_STR_DESCR) ; + RsTypeSerializer::TlvString_proxy tt(str,TLV_TYPE_STR_DESCR) ; RsTypeSerializer::serial_process(j,ctx,ts ,GET_VARIABLE_NAME(ts) ) ; RsTypeSerializer::serial_process(j,ctx,tt ,GET_VARIABLE_NAME(str) ) ; @@ -168,13 +168,13 @@ int main(int argc,char *argv[]) std::cerr << "Item to be serialized:" << std::endl; RsTestSerializer().print(&t1) ; - RsTestSerializer().serialise(&t1,mem1,mem1.size()) ; + RsTestSerializer().serialise(&t1,mem1,&size); std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; // Now deserialise into a new item // - RsItem *t2 = RsTestSerializer().deserialise(mem1,mem1.size()) ; + RsItem *t2 = RsTestSerializer().deserialise(mem1,&size); // make sure t1 is equal to t2 // From ae9d0b2ab48c7d0778385d680de728d104bb8762 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 20:49:32 +0200 Subject: [PATCH 056/230] fixed a few bugs in chat serialization --- libretroshare/src/chat/distributedchat.cc | 10 +++---- libretroshare/src/chat/rschatitems.cc | 28 +++++++++++++------ libretroshare/src/chat/rschatitems.h | 33 ++++++++++++----------- 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 4d1207f8f..c83ddde8e 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); - uint32_t size = obj->serial_size_no_signature() ; + uint32_t size = obj->serial_size_for_signature() ; RsTemporaryMemory memory(size) ; #ifdef DEBUG_CHAT_LOBBIES @@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const std::cerr << " signature id: " << obj->signature.keyId << std::endl; #endif - if(!obj->serialize_no_signature(memory,size)) + if(!obj->serialize_for_signature(memory,size)) { std::cerr << " (EE) Cannot serialise message item. " << std::endl; return false ; @@ -239,7 +239,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const uint32_t error_status ; RsIdentityUsage use_info(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id) ; - if(!mGixs->validateData(memory,obj->serial_size_no_signature(),obj->signature,false,use_info,error_status)) + if(!mGixs->validateData(memory,obj->serial_size_for_signature(),obj->signature,false,use_info,error_status)) { bool res = false ; @@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId& // now sign the object, if the lobby expects it - uint32_t size = item.serial_size_no_signature() ; + uint32_t size = item.serial_size_for_signature() ; RsTemporaryMemory memory(size) ; - if(!item.serialize_no_signature(memory,size)) + if(!item.serialize_for_signature(memory,size)) { std::cerr << "(EE) Cannot sign message item. " << std::endl; return false ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index ef4908252..e6a405c0c 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -491,12 +491,15 @@ void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, Serialize void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsChatMsgItem::serial_process(j,ctx) ; - RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } - +void RsChatLobbyMsgItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsChatMsgItem::serial_process(j,ctx) ; + RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; + RsChatLobbyBouncingObject::serial_process(j,ctx,false) ; +} #ifdef TO_BE_REMOVED /* serialise the data to the buffer */ bool RsChatLobbyMsgItem::serialise(void *data, uint32_t& pktsize) @@ -646,7 +649,16 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } +void RsChatLobbyEventItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::TlvString_proxy tt(string1,TLV_TYPE_STR_NAME) ; + RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; + RsTypeSerializer::serial_process (j,ctx,tt ,"string1") ; + RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; + + RsChatLobbyBouncingObject::serial_process(j,ctx,false) ; +} #ifdef TO_BE_REMOVED bool RsChatLobbyEventItem::serialise(void *data, uint32_t& pktsize) { @@ -1400,22 +1412,22 @@ RsChatAvatarItem::RsChatAvatarItem(void *data,uint32_t /*size*/) #endif -uint32_t RsChatLobbyBouncingObject::serial_size_no_signature() const +uint32_t RsChatLobbyBouncingObject::serial_size_for_signature() const { SerializeContext ctx(NULL,0); ctx.mOffset = 8; - const_cast(this)->serial_process(RsItem::SERIALIZE,ctx,false) ; + const_cast(this)->serial_process_for_signature(RsItem::SIZE_ESTIMATE,ctx) ; return ctx.mOffset ; } -bool RsChatLobbyBouncingObject::serialize_no_signature(uint8_t *data,uint32_t size) const +bool RsChatLobbyBouncingObject::serialize_for_signature(uint8_t *data,uint32_t size) const { SerializeContext ctx(data,0); - uint32_t tlvsize = serial_size_no_signature() ; + uint32_t tlvsize = serial_size_for_signature() ; if(tlvsize > size) throw std::runtime_error("Cannot serialise: not enough room.") ; @@ -1428,7 +1440,7 @@ bool RsChatLobbyBouncingObject::serialize_no_signature(uint8_t *data,uint32_t si ctx.mOffset = 8; ctx.mSize = tlvsize; - const_cast(this)->serial_process(RsItem::SERIALIZE,ctx,false) ; + const_cast(this)->serial_process_for_signature(RsItem::SERIALIZE,ctx) ; if(ctx.mSize != ctx.mOffset) { diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 2440722dd..974dda91d 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -137,15 +137,16 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const = 0 ; - uint32_t serial_size_no_signature() const ; - bool serialize_no_signature(uint8_t *data,uint32_t size) const ; + uint32_t serial_size_for_signature() const ; + bool serialize_for_signature(uint8_t *data,uint32_t size) const ; protected: // The functions below handle the serialisation of data that is specific to the bouncing object level. // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); + virtual void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); + virtual void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx)=0; virtual uint32_t PacketId() const= 0; }; @@ -159,6 +160,7 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyMsgItem(*this) ; } void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ; + void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand ChatLobbyMsgId parent_msg_id ; // Used for threaded chat. @@ -168,22 +170,23 @@ protected: class RsChatLobbyEventItem: public RsChatItem, public RsChatLobbyBouncingObject { - public: - RsChatLobbyEventItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT) {} +public: + RsChatLobbyEventItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT) {} - virtual ~RsChatLobbyEventItem() {} - virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; } - // - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual ~RsChatLobbyEventItem() {} + virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; } + // + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand - // members. - // - uint8_t event_type ; // used for defining the type of event. - std::string string1; // used for any string - uint32_t sendTime; // used to check for old looping messages + // members. + // + uint8_t event_type ; // used for defining the type of event. + std::string string1; // used for any string + uint32_t sendTime; // used to check for old looping messages protected: - virtual uint32_t PacketId() const { return RsChatItem::PacketId() ; } + virtual uint32_t PacketId() const { return RsChatItem::PacketId() ; } }; class RsChatLobbyListRequestItem: public RsChatItem From 8b773885fddb0a48c843effa1cbe326a34349c67 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 5 Apr 2017 21:02:17 +0200 Subject: [PATCH 057/230] removed all chat serialization code --- libretroshare/src/chat/rschatitems.cc | 1189 ------------------------- libretroshare/src/chat/rschatitems.h | 24 - 2 files changed, 1213 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index e6a405c0c..f7edf5601 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -37,196 +37,6 @@ static const uint32_t RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE = 0x0001; -#ifdef TO_BE_REMOVED -std::ostream& RsChatMsgItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsChatMsgItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "QblogMs " << chatFlags << std::endl; - - printIndent(out, int_Indent); - out << "sendTime: " << sendTime << " (" << time(NULL)-sendTime << " secs ago)" << std::endl; - - printIndent(out, int_Indent); - - std::string cnv_message(message.begin(), message.end()); - out << "msg: " << cnv_message << std::endl; - - printRsItemEnd(out, "RsChatMsgItem", indent); - return out; -} - -std::ostream& RsChatLobbyListItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsChatLobbyListItem", indent); - - for(uint32_t i=0;i void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& name) { RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; @@ -607,38 +130,6 @@ void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext RsTypeSerializer::serial_process(j,ctx,lobbies,"lobbies") ; } -#ifdef TO_BE_REMOVED -bool RsChatLobbyListItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - bool ok = true ; - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header! - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize ; - - uint32_t offset = 8 ; - ok &= setRawUInt32(data, tlvsize, &offset, lobbies.size()); - - for(uint32_t i=0;i(j,ctx,lobby_id,"lobby_id") ; } -#ifdef TO_BE_REMOVED -bool RsChatLobbyUnsubscribeItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - bool ok = true ; - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header! - uint32_t offset = 8 ; - - ok &= setRawUInt64(data, tlvsize, &offset, lobby_id); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef CHAT_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - pktsize = tlvsize ; - return ok ; -} -#endif - void RsChatLobbyConnectChallengeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,challenge_code,"challenge_code") ; } -#ifdef TO_BE_REMOVED -bool RsChatLobbyConnectChallengeItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - bool ok = true ; - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header! - uint32_t offset = 8 ; - - ok &= setRawUInt64(data, tlvsize, &offset, challenge_code); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef CHAT_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - pktsize = tlvsize ; - return ok ; -} -#endif - void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; - RsTypeSerializer::TlvString_proxy s(lobby_name,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; } -#ifdef TO_BE_REMOVED -bool RsChatLobbyInviteItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - bool ok = true ; - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header! - uint32_t offset = 8 ; - - ok &= setRawUInt64(data, tlvsize, &offset, lobby_id); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, lobby_name); - ok &= setRawUInt32(data, tlvsize, &offset, lobby_flags.toUInt32()); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef CHAT_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - pktsize = tlvsize ; - return ok ; -} -#endif - void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { uint32_t x=0 ; @@ -838,505 +181,25 @@ void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,Serialize RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime") ; } -#ifdef TO_BE_REMOVED -bool RsPrivateChatMsgConfigItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef CHAT_DEBUG - std::cerr << "RsChatSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, 0); - ok &= configPeerId.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, chatFlags); - ok &= setRawUInt32(data, tlvsize, &offset, configFlags); - ok &= setRawUInt32(data, tlvsize, &offset, sendTime); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, message); - ok &= setRawUInt32(data, tlvsize, &offset, recvTime); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } - - return ok; -} - -bool RsPrivateChatDistantInviteConfigItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef CHAT_DEBUG - std::cerr << "RsChatSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= hash.serialise(data, tlvsize, offset) ; - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LINK, encrypted_radix64_string); - ok &= destination_pgp_id.serialise(data, tlvsize, offset); - - memcpy(&((unsigned char *)data)[offset],aes_key,16) ; - offset += 16 ; - - ok &= setRawUInt32(data, tlvsize, &offset, time_of_validity); - ok &= setRawUInt32(data, tlvsize, &offset, last_hit_time); - ok &= setRawUInt32(data, tlvsize, &offset, flags); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } - - return ok; -} -#endif - void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; - RsTypeSerializer::TlvString_proxy tt(status_string,TLV_TYPE_STR_MSG) ; - RsTypeSerializer::serial_process(j,ctx,tt,"status_string") ; } -#ifdef TO_BE_REMOVED -bool RsChatStatusItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef CHAT_DEBUG - std::cerr << "RsChatSerialiser serialising chat status item." << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, flags); - ok &= SetTlvString(data, tlvsize, &offset,TLV_TYPE_STR_MSG, status_string); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef CHAT_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - - return ok; -} -#endif - void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::TlvMemBlock_proxy b(image_data,image_size) ; - RsTypeSerializer::serial_process(j,ctx,b,"image data") ; } -#ifdef TO_BE_REMOVED -bool RsChatAvatarItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef CHAT_DEBUG - std::cerr << "RsChatSerialiser serialising chat avatar item." << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsChatSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset,image_size); - - memcpy((void*)( (unsigned char *)data + offset),image_data,image_size) ; - offset += image_size ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef CHAT_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - - return ok; -} -#endif - void RsChatLobbyConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; } -#ifdef TO_BE_REMOVED -bool RsChatLobbyConfigItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef CHAT_DEBUG - std::cerr << "RsChatLobbyConfigItem::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsChatLobbyConfigItem::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, lobby_Id); - ok &= setRawUInt32(data, tlvsize, &offset, flags ); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsChatLobbyConfigItem::serialise() Size Error! " << std::endl; - } - - return ok; -} - -RsChatMsgItem::RsChatMsgItem(void *data,uint32_t /*size*/,uint8_t subtype) - : RsChatItem(subtype) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - -#ifdef CHAT_DEBUG - std::cerr << "Received packet result: " ; - for(int i=0;i<20;++i) - std::cerr << (int)((uint8_t*)data)[i] << " " ; - std::cerr << std::endl ; -#endif - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &chatFlags); - ok &= getRawUInt32(data, rssize, &offset, &sendTime); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, message); - -#ifdef CHAT_DEBUG - std::cerr << "Building new chat msg item." << std::endl ; -#endif - if (getRsItemSubType(getRsItemId(data)) == RS_PKT_SUBTYPE_DEFAULT && offset != rssize) - std::cerr << "Size error while deserializing." << std::endl ; - if (!ok) - std::cerr << "Unknown error while deserializing." << std::endl ; -} - -RsChatLobbyMsgItem::RsChatLobbyMsgItem(void *data,uint32_t /*size*/) - : RsChatMsgItem(data,0,RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG) -{ - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - uint32_t offset = RsChatMsgItem::serial_size() ; - - ok &= getRawUInt64(data, rssize, &offset, &parent_msg_id); - - ok &= RsChatLobbyBouncingObject::deserialise_from_memory(data,rssize,offset) ; - -#ifdef CHAT_DEBUG - std::cerr << "Building new chat lobby msg item." << std::endl ; -#endif - if (offset != rssize) - std::cerr << "Size error while deserializing." << std::endl ; - if (!ok) - std::cerr << "Unknown error while deserializing." << std::endl ; -} -RsChatLobbyListRequestItem::RsChatLobbyListRequestItem(void *data,uint32_t) - : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST) -{ - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - uint32_t offset = 8; // skip the header - - if (offset != rssize) - std::cerr << "Size error while deserializing." << std::endl ; - if (!ok) - std::cerr << "Unknown error while deserializing." << std::endl ; -} -RsChatLobbyListItem::RsChatLobbyListItem(void *data,uint32_t) - : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST) -{ - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - uint32_t offset = 8; // skip the header - - uint32_t n=0 ; - ok &= getRawUInt32(data, rssize, &offset, &n); - - lobbies.resize(n) ; - - for(uint32_t i=0;irecvTime = recvTime; } -#ifdef TO_BE_REMOVED -RsChatStatusItem::RsChatStatusItem(void *data,uint32_t /*size*/) - : RsChatItem(RS_PKT_SUBTYPE_CHAT_STATUS) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - -#ifdef CHAT_DEBUG - std::cerr << "Building new chat status item." << std::endl ; -#endif - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &flags); - ok &= GetTlvString(data, rssize, &offset,TLV_TYPE_STR_MSG, status_string); - - if (offset != rssize) - std::cerr << "Size error while deserializing." << std::endl ; - if (!ok) - std::cerr << "Unknown error while deserializing." << std::endl ; -} - -RsChatAvatarItem::RsChatAvatarItem(void *data,uint32_t /*size*/) - : RsChatItem(RS_PKT_SUBTYPE_CHAT_AVATAR) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - -#ifdef CHAT_DEBUG - std::cerr << "Building new chat status item." << std::endl ; -#endif - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset,&image_size); - - // ensure invalid image length does not overflow data - if( (offset + image_size) <= rssize){ - image_data = new unsigned char[image_size] ; - memcpy(image_data,(void*)((unsigned char*)data+offset),image_size) ; - offset += image_size ; - }else{ - ok = false; - std::cerr << "offset+image_size exceeds rssize" << std::endl; - } - - if (offset != rssize) - std::cerr << "Size error while deserializing." << std::endl ; - if (!ok) - std::cerr << "Unknown error while deserializing." << std::endl ; -} - -#endif - uint32_t RsChatLobbyBouncingObject::serial_size_for_signature() const { SerializeContext ctx(NULL,0); diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 974dda91d..7ec79ea44 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -327,30 +327,6 @@ class RsChatAvatarItem: public RsChatItem unsigned char *image_data ; // image }; -// This class contains the public Diffie-Hellman parameters to be sent -// when performing a DH agreement over a distant chat tunnel. -// -class RsChatDHPublicKeyItem: public RsChatItem -{ - public: - RsChatDHPublicKeyItem() :RsChatItem(RS_PKT_SUBTYPE_DISTANT_CHAT_DH_PUBLIC_KEY) {setPriorityLevel(QOS_PRIORITY_RS_CHAT_ITEM) ;} - - virtual ~RsChatDHPublicKeyItem() { BN_free(public_key) ; } - - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); - - // Private data to DH public key item - // - BIGNUM *public_key ; - - RsTlvKeySignature signature ; // signs the public key in a row. - RsTlvPublicRSAKey gxs_key ; // public key of the signer - - private: - RsChatDHPublicKeyItem(const RsChatDHPublicKeyItem&) : RsChatItem(RS_PKT_SUBTYPE_DISTANT_CHAT_DH_PUBLIC_KEY) {} // make the object non copy-able - const RsChatDHPublicKeyItem& operator=(const RsChatDHPublicKeyItem&) { return *this ;} -}; - class RsChatSerialiser: public RsSerializer { public: From f175533d8df9f7952fc7284718c7aa63cc6e6689 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 8 Apr 2017 14:06:47 +0200 Subject: [PATCH 058/230] Fix comment view when they have line return. Before, they grow row height but only show 2 lines. Now, height stay at one line, but tooltip show the correct message. --- retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp | 5 +++++ retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.cpp | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp index 2fa1f3b1e..a99e815c7 100644 --- a/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCommentTreeWidget.cpp @@ -25,6 +25,7 @@ #include #include +#include "gui/common/RSElidedItemDelegate.h" #include "gui/gxs/GxsCommentTreeWidget.h" #include "gui/gxs/GxsCreateCommentDialog.h" #include "gui/gxs/GxsIdTreeWidgetItem.h" @@ -57,6 +58,10 @@ GxsCommentTreeWidget::GxsCommentTreeWidget(QWidget *parent) // QTreeWidget* widget = this; setContextMenuPolicy(Qt::CustomContextMenu); + RSElidedItemDelegate *itemDelegate = new RSElidedItemDelegate(this); + itemDelegate->setSpacing(QSize(0, 2)); + setItemDelegate(itemDelegate); + setWordWrap(true); // QFont font = QFont("ARIAL", 10); // font.setBold(true); diff --git a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.cpp b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.cpp index a1e20e37c..500693df0 100644 --- a/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsCreateCommentDialog.cpp @@ -25,6 +25,8 @@ #include "GxsCreateCommentDialog.h" #include "ui_GxsCreateCommentDialog.h" +#include "util/HandleRichText.h" + #include #include @@ -45,7 +47,11 @@ void GxsCreateCommentDialog::createComment() { RsGxsComment comment; - comment.mComment = std::string(ui->commentTextEdit->document()->toPlainText().toUtf8()); + QString text = ui->commentTextEdit->toHtml(); + RsHtml::optimizeHtml(text); + std::string msg = text.toUtf8().constData(); + + comment.mComment = msg; comment.mMeta.mParentId = mParentId.second; comment.mMeta.mGroupId = mParentId.first; comment.mMeta.mThreadId = mThreadId; From 4f5da86acaa8f1602c8f95cc25a176653322db5b Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 8 Apr 2017 19:07:33 +0200 Subject: [PATCH 059/230] added method to serialise/deserialise groups to/from memory and export of GxsIdentities to memory chunk in radix format --- libretroshare/src/gxs/rsgenexchange.cc | 52 ++++++++++++ libretroshare/src/gxs/rsgenexchange.h | 14 ++++ libretroshare/src/retroshare/rsidentity.h | 3 + libretroshare/src/services/p3idservice.cc | 96 +++++++++++++++++++++-- libretroshare/src/services/p3idservice.h | 17 ++++ 5 files changed, 175 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index a334f7e3d..4d70ee409 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -1273,6 +1273,58 @@ bool RsGenExchange::getMsgRelatedMeta(const uint32_t &token, GxsMsgRelatedMetaMa return ok; } +bool RsGenExchange::getSerializedGroupData(const uint32_t &token, RsGxsGroupId& id,unsigned char *& data,uint32_t& size) +{ + RS_STACK_MUTEX(mGenMtx) ; + + std::list nxsGrps; + + if(!mDataAccess->getGroupData(token, nxsGrps)) + return false ; + + if(nxsGrps.size() != 1) + { + std::cerr << "(EE) getSerializedGroupData() got multiple groups in single request. This is unexpected." << std::endl; + + for(std::list::const_iterator it(nxsGrps.begin());it!=nxsGrps.end();++it) + delete *it ; + + return false ; + } + RsNxsGrp *nxs_grp = *(nxsGrps.begin()); + + size = nxs_grp->serial_size() ; + id = nxs_grp->metaData->mGroupId ; + + if(size > 1024*1024 || NULL==(data = (unsigned char *)rs_malloc(size))) + { + std::cerr << "(EE) getSerializedGroupData() cannot allocate mem chunk of size " << size << ". Too big, or no room." << std::endl; + delete nxs_grp ; + return false ; + } + + return nxs_grp->serialise(data,size) ; +} + +bool RsGenExchange::deserializeGroupData(unsigned char *data,uint32_t size) +{ + RS_STACK_MUTEX(mGenMtx) ; + + RsItem *item = mSerialiser->deserialise(data, &size); + + RsNxsGrp *nxs_grp = dynamic_cast(item) ; + + if(item == NULL) + { + std::cerr << "(EE) RsGenExchange::deserializeGroupData(): cannot deserialise this data. Something's wrong." << std::endl; + delete item ; + return false ; + } + + mReceivedGrps.push_back( GxsPendingItem(nxs_grp, nxs_grp->metaData->mGroupId,time(NULL)) ); + + return true ; +} bool RsGenExchange::getGroupData(const uint32_t &token, std::vector& grpItem) { diff --git a/libretroshare/src/gxs/rsgenexchange.h b/libretroshare/src/gxs/rsgenexchange.h index 21ea4365c..ec9c0d3f0 100644 --- a/libretroshare/src/gxs/rsgenexchange.h +++ b/libretroshare/src/gxs/rsgenexchange.h @@ -288,6 +288,20 @@ protected: */ bool getGroupData(const uint32_t &token, std::vector& grpItem); + /*! + * \brief getSerializedGroupData + * Retrieves the complete group data serialized into a chunk of memory. This can be useful to + * transfer a full group from one machine to another. + * + * \param token token previously obtained from cache request + * \param data memory chunk allocated (using malloc) + * \param size size of the memory chunk. + * \return + */ + + bool getSerializedGroupData(const uint32_t &token, RsGxsGroupId &id, unsigned char *& data, uint32_t& size); + bool deserializeGroupData(unsigned char *data, uint32_t size); + template bool getGroupDataT(const uint32_t &token, std::vector& grpItem) { diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index 82f4932a3..53704961d 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -305,6 +305,9 @@ public: virtual bool setAsRegularContact(const RsGxsId& id,bool is_a_contact) = 0 ; virtual bool isARegularContact(const RsGxsId& id) = 0 ; + virtual bool serialiseIdentityToMemory(const RsGxsId& id,std::string& radix_string)=0; + virtual bool deserialiseIdentityFromMemory(const std::string& radix_string)=0; + /*! * \brief overallReputationLevel * Returns the overall reputation level of the supplied identity. See rsreputations.h diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 53b922327..9aeec2aea 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -70,6 +70,8 @@ static const time_t MAX_KEEP_KEYS_SIGNED_KNOWN = 30 * 86400 ; // signed ident static const uint32_t MAX_DELAY_BEFORE_CLEANING= 1800 ; // clean old keys every 30 mins +static const uint32_t MAX_SERIALISED_IDENTITY_AGE = 600 ; // after 10 mins, a serialised identity record must be renewed. + RsIdentity *rsIdentity = NULL; /****** @@ -97,13 +99,12 @@ RsIdentity *rsIdentity = NULL; #define BG_REPUTATION 3 -#define GXSIDREQ_CACHELOAD 0x0001 -#define GXSIDREQ_CACHEOWNIDS 0x0002 - -#define GXSIDREQ_PGPHASH 0x0010 -#define GXSIDREQ_RECOGN 0x0020 - -#define GXSIDREQ_OPINION 0x0030 +#define GXSIDREQ_CACHELOAD 0x0001 +#define GXSIDREQ_CACHEOWNIDS 0x0002 +#define GXSIDREQ_PGPHASH 0x0010 +#define GXSIDREQ_RECOGN 0x0020 +#define GXSIDREQ_OPINION 0x0030 +#define GXSIDREQ_SERIALIZE_TO_MEMORY 0x0040 #define GXSIDREQ_CACHETEST 0x1000 @@ -697,6 +698,84 @@ bool p3IdService::getOwnIds(std::list &ownIds) return true ; } +bool p3IdService::serialiseIdentityToMemory(const RsGxsId& id,std::string& radix_string) +{ + RsStackMutex stack(mIdMtx); /********** STACK LOCKED MTX ******/ + + // look into cache. If available, return the data. If not, request it. + + std::map::const_iterator it = mSerialisedIdentities.find(id); + + if(it != mSerialisedIdentities.end()) + { + Radix64::encode(it->second.mMem,it->second.mSize,radix_string) ; + + if(it->second.mLastUsageTS + MAX_SERIALISED_IDENTITY_AGE > time(NULL)) + return true ; + + std::cerr << "Identity " << id << " will be re-serialised, because the last record is too old." << std::endl; + } + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; + uint32_t token = 0; + std::list groupIds; + + groupIds.push_back(RsGxsGroupId(id)) ; + + RsGenExchange::getTokenService()->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds); + GxsTokenQueue::queueRequest(token, GXSIDREQ_SERIALIZE_TO_MEMORY); + + return false; +} + +void p3IdService::handle_get_serialized_grp(uint32_t token) +{ + // store the serialized data in cache. + + unsigned char *mem = NULL; + uint32_t size; + RsGxsGroupId id ; + + if(!RsGenExchange::getSerializedGroupData(token,id, mem,size)) + { + std::cerr << "(EE) call to RsGenExchage::getSerializedGroupData() failed." << std::endl; + return ; + } + + std::cerr << "Received serialised group from RsGenExchange." << std::endl; + + std::map::const_iterator it = mSerialisedIdentities.find(RsGxsId(id)); + + if(it != mSerialisedIdentities.end()) + free(it->second.mMem) ; + + SerialisedIdentityStruct s ; + s.mMem = mem ; + s.mSize = size ; + s.mLastUsageTS = time(NULL) ; + + mSerialisedIdentities[RsGxsId(id)] = s ; +} + +bool p3IdService::deserialiseIdentityFromMemory(const std::string& radix_string) +{ + std::vector mem = Radix64::decode(radix_string) ; + + if(mem.empty()) + { + std::cerr << "Cannot decode radix string \"" << radix_string << "\"" << std::endl; + return false ; + } + + if(!RsGenExchange::deserializeGroupData(mem.data(),mem.size())) + { + std::cerr << "Cannot load identity from radix string \"" << radix_string << "\"" << std::endl; + return false ; + } + + return true ; +} bool p3IdService::createIdentity(uint32_t& token, RsIdentityParameters ¶ms) { @@ -4117,6 +4196,9 @@ void p3IdService::handleResponse(uint32_t token, uint32_t req_type) case GXSIDREQ_OPINION: opinion_handlerequest(token); break; + case GXSIDREQ_SERIALIZE_TO_MEMORY: + handle_get_serialized_grp(token) ; + default: /* error */ std::cerr << "p3IdService::handleResponse() Unknown Request Type: " << req_type; diff --git a/libretroshare/src/services/p3idservice.h b/libretroshare/src/services/p3idservice.h index addff0d1b..6e4585eb6 100644 --- a/libretroshare/src/services/p3idservice.h +++ b/libretroshare/src/services/p3idservice.h @@ -212,6 +212,13 @@ private: void init(const RsGxsIdGroupItem *item, const RsTlvPublicRSAKey& in_pub_key, const RsTlvPrivateRSAKey& in_priv_key,const std::list &tagList); }; +struct SerialisedIdentityStruct +{ + unsigned char *mMem ; + uint32_t mSize ; + time_t mLastUsageTS; +}; + // Not sure exactly what should be inherited here? // Chris - please correct as necessary. @@ -302,6 +309,8 @@ public: virtual bool requestKey(const RsGxsId &id, const std::list &peers, const RsIdentityUsage &use_info); virtual bool requestPrivateKey(const RsGxsId &id); + virtual bool serialiseIdentityToMemory(const RsGxsId& id,std::string& radix_string); + virtual bool deserialiseIdentityFromMemory(const std::string& radix_string); /**************** RsGixsReputation Implementation ****************/ @@ -394,6 +403,12 @@ private: bool mBgSchedule_Active; uint32_t mBgSchedule_Mode; + /***********************************8 + * Fonction to receive and handle group serialisation to memory + */ + + virtual void handle_get_serialized_grp(uint32_t token); + /************************************************************************ * pgphash processing. * @@ -524,6 +539,8 @@ private: std::map > mIdsNotPresent; std::map mKeysTS ; + std::map mSerialisedIdentities ; + // keep a list of regular contacts. This is useful to sort IDs, and allow some services to priviledged ids only. std::set mContacts; RsNetworkExchangeService* mNes; From 6d290389f029e89e96fbfd46b3971f075457e484 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 8 Apr 2017 21:12:48 +0200 Subject: [PATCH 060/230] added RSLink for GXS identities --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 335 ++++++++++--------- retroshare-gui/src/gui/Identity/IdDialog.h | 1 + retroshare-gui/src/gui/RetroShareLink.cpp | 59 +++- retroshare-gui/src/gui/RetroShareLink.h | 28 +- 4 files changed, 259 insertions(+), 164 deletions(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 25db8896d..4b28a1b09 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -2240,165 +2240,202 @@ void IdDialog::loadRequest(const TokenQueue * queue, const TokenRequest &req) void IdDialog::IdListCustomPopupMenu( QPoint ) { - QMenu *contextMenu = new QMenu(this); + QMenu *contextMenu = new QMenu(this); - std::list own_identities ; - rsIdentity->getOwnIds(own_identities) ; + std::list own_identities ; + rsIdentity->getOwnIds(own_identities) ; - // make some stats about what's selected. If the same value is used for all selected items, it can be switched. + // make some stats about what's selected. If the same value is used for all selected items, it can be switched. - QList selected_items = ui->idTreeWidget->selectedItems(); + QList selected_items = ui->idTreeWidget->selectedItems(); - bool root_node_present = false ; - bool one_item_owned_by_you = false ; - uint32_t n_positive_reputations = 0 ; - uint32_t n_negative_reputations = 0 ; - uint32_t n_neutral_reputations = 0 ; - uint32_t n_is_a_contact = 0 ; - uint32_t n_is_not_a_contact = 0 ; - uint32_t n_selected_items =0 ; + bool root_node_present = false ; + bool one_item_owned_by_you = false ; + uint32_t n_positive_reputations = 0 ; + uint32_t n_negative_reputations = 0 ; + uint32_t n_neutral_reputations = 0 ; + uint32_t n_is_a_contact = 0 ; + uint32_t n_is_not_a_contact = 0 ; + uint32_t n_selected_items =0 ; - for(QList::const_iterator it(selected_items.begin());it!=selected_items.end();++it) - { - if(*it == allItem || *it == contactsItem || *it == ownItem) - { - root_node_present = true ; - continue ; - } - - uint32_t item_flags = (*it)->data(RSID_COL_KEYID,Qt::UserRole).toUInt() ; - - if(item_flags & RSID_FILTER_OWNED_BY_YOU) - one_item_owned_by_you = true ; - -#ifdef ID_DEBUG - std::cerr << " item flags = " << item_flags << std::endl; -#endif - RsGxsId keyId((*it)->text(RSID_COL_KEYID).toStdString()); - - RsIdentityDetails det ; - rsIdentity->getIdDetails(keyId,det) ; - - switch(det.mReputation.mOwnOpinion) - { - case RsReputations::OPINION_NEGATIVE: ++n_negative_reputations ; - break ; - - case RsReputations::OPINION_POSITIVE: ++n_positive_reputations ; - break ; - - case RsReputations::OPINION_NEUTRAL: ++n_neutral_reputations ; - break ; - } - - ++n_selected_items ; - - if(rsIdentity->isARegularContact(keyId)) - ++n_is_a_contact ; - else - ++n_is_not_a_contact ; - } - - if(!root_node_present) // don't show menu if some of the root nodes are present + for(QList::const_iterator it(selected_items.begin());it!=selected_items.end();++it) + { + if(*it == allItem || *it == contactsItem || *it == ownItem) { - - if(!one_item_owned_by_you) - { - QWidget *widget = new QWidget(contextMenu); - widget->setStyleSheet( ".QWidget{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #FEFEFE, stop:1 #E8E8E8); border: 1px solid #CCCCCC;}"); - - // create menu header - QHBoxLayout *hbox = new QHBoxLayout(widget); - hbox->setMargin(0); - hbox->setSpacing(6); - - QLabel *iconLabel = new QLabel(widget); - QPixmap pix = QPixmap(":/images/user/friends24.png").scaledToHeight(QFontMetricsF(iconLabel->font()).height()*1.5); - iconLabel->setPixmap(pix); - iconLabel->setMaximumSize(iconLabel->frameSize().height() + pix.height(), pix.width()); - hbox->addWidget(iconLabel); - - QLabel *textLabel = new QLabel("" + ui->titleBarLabel->text() + "", widget); - hbox->addWidget(textLabel); - - QSpacerItem *spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); - hbox->addItem(spacerItem); - - widget->setLayout(hbox); - - QWidgetAction *widgetAction = new QWidgetAction(this); - widgetAction->setDefaultWidget(widget); - contextMenu->addAction(widgetAction); - - if(n_selected_items == 1) // if only one item is selected, allow to chat with this item - { - if(own_identities.size() <= 1) - { - QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"), tr("Chat with this person"), this, SLOT(chatIdentity())); - - if(own_identities.empty()) - action->setEnabled(false) ; - else - action->setData(QString::fromStdString((own_identities.front()).toStdString())) ; - } - else - { - QMenu *mnu = contextMenu->addMenu(QIcon(":/images/chat_24.png"),tr("Chat with this person as...")) ; - - for(std::list::const_iterator it=own_identities.begin();it!=own_identities.end();++it) - { - RsIdentityDetails idd ; - rsIdentity->getIdDetails(*it,idd) ; - - QPixmap pixmap ; - - if(idd.mAvatar.mSize == 0 || !pixmap.loadFromData(idd.mAvatar.mData, idd.mAvatar.mSize, "PNG")) - pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(*it)) ; - - QAction *action = mnu->addAction(QIcon(pixmap), QString("%1 (%2)").arg(QString::fromUtf8(idd.mNickname.c_str()), QString::fromStdString((*it).toStdString())), this, SLOT(chatIdentity())); - action->setData(QString::fromStdString((*it).toStdString())) ; - } - } - } - - // always allow to send messages - contextMenu->addAction(QIcon(":/images/mail_new.png"), tr("Send message"), this, SLOT(sendMsg())); - - contextMenu->addSeparator(); - - if(n_is_a_contact == 0) - contextMenu->addAction(QIcon(), tr("Add to Contacts"), this, SLOT(addtoContacts())); - - if(n_is_not_a_contact == 0) - contextMenu->addAction(QIcon(":/images/cancel.png"), tr("Remove from Contacts"), this, SLOT(removefromContacts())); - - contextMenu->addSeparator(); - - if(n_positive_reputations == 0) // only unban when all items are banned - contextMenu->addAction(QIcon(":/icons/png/thumbs-up.png"), tr("Set positive opinion"), this, SLOT(positivePerson())); - - if(n_neutral_reputations == 0) // only unban when all items are banned - contextMenu->addAction(QIcon(":/icons/png/thumbs-neutral.png"), tr("Set neutral opinion"), this, SLOT(neutralPerson())); - - if(n_negative_reputations == 0) - contextMenu->addAction(QIcon(":/icons/png/thumbs-down.png"), tr("Set negative opinion"), this, SLOT(negativePerson())); - } - - if(one_item_owned_by_you && n_selected_items==1) - { - contextMenu->addSeparator(); - - contextMenu->addAction(ui->editIdentity); - contextMenu->addAction(ui->removeIdentity); - } - + root_node_present = true ; + continue ; } - contextMenu = ui->idTreeWidget->createStandardContextMenu(contextMenu); + uint32_t item_flags = (*it)->data(RSID_COL_KEYID,Qt::UserRole).toUInt() ; - contextMenu->exec(QCursor::pos()); - delete contextMenu; + if(item_flags & RSID_FILTER_OWNED_BY_YOU) + one_item_owned_by_you = true ; + +#ifdef ID_DEBUG + std::cerr << " item flags = " << item_flags << std::endl; +#endif + RsGxsId keyId((*it)->text(RSID_COL_KEYID).toStdString()); + + RsIdentityDetails det ; + rsIdentity->getIdDetails(keyId,det) ; + + switch(det.mReputation.mOwnOpinion) + { + case RsReputations::OPINION_NEGATIVE: ++n_negative_reputations ; + break ; + + case RsReputations::OPINION_POSITIVE: ++n_positive_reputations ; + break ; + + case RsReputations::OPINION_NEUTRAL: ++n_neutral_reputations ; + break ; + } + + ++n_selected_items ; + + if(rsIdentity->isARegularContact(keyId)) + ++n_is_a_contact ; + else + ++n_is_not_a_contact ; + } + + if(!root_node_present) // don't show menu if some of the root nodes are present + { + + if(!one_item_owned_by_you) + { + QWidget *widget = new QWidget(contextMenu); + widget->setStyleSheet( ".QWidget{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #FEFEFE, stop:1 #E8E8E8); border: 1px solid #CCCCCC;}"); + + // create menu header + QHBoxLayout *hbox = new QHBoxLayout(widget); + hbox->setMargin(0); + hbox->setSpacing(6); + + QLabel *iconLabel = new QLabel(widget); + QPixmap pix = QPixmap(":/images/user/friends24.png").scaledToHeight(QFontMetricsF(iconLabel->font()).height()*1.5); + iconLabel->setPixmap(pix); + iconLabel->setMaximumSize(iconLabel->frameSize().height() + pix.height(), pix.width()); + hbox->addWidget(iconLabel); + + QLabel *textLabel = new QLabel("" + ui->titleBarLabel->text() + "", widget); + hbox->addWidget(textLabel); + + QSpacerItem *spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + hbox->addItem(spacerItem); + + widget->setLayout(hbox); + + QWidgetAction *widgetAction = new QWidgetAction(this); + widgetAction->setDefaultWidget(widget); + contextMenu->addAction(widgetAction); + + if(n_selected_items == 1) // if only one item is selected, allow to chat with this item + { + if(own_identities.size() <= 1) + { + QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"), tr("Chat with this person"), this, SLOT(chatIdentity())); + + if(own_identities.empty()) + action->setEnabled(false) ; + else + action->setData(QString::fromStdString((own_identities.front()).toStdString())) ; + } + else + { + QMenu *mnu = contextMenu->addMenu(QIcon(":/images/chat_24.png"),tr("Chat with this person as...")) ; + + for(std::list::const_iterator it=own_identities.begin();it!=own_identities.end();++it) + { + RsIdentityDetails idd ; + rsIdentity->getIdDetails(*it,idd) ; + + QPixmap pixmap ; + + if(idd.mAvatar.mSize == 0 || !pixmap.loadFromData(idd.mAvatar.mData, idd.mAvatar.mSize, "PNG")) + pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(*it)) ; + + QAction *action = mnu->addAction(QIcon(pixmap), QString("%1 (%2)").arg(QString::fromUtf8(idd.mNickname.c_str()), QString::fromStdString((*it).toStdString())), this, SLOT(chatIdentity())); + action->setData(QString::fromStdString((*it).toStdString())) ; + } + } + } + + if(n_selected_items==1) + QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy retroshare link"),this,SLOT(copyRetroshareLink())) ; + + // always allow to send messages + contextMenu->addAction(QIcon(":/images/mail_new.png"), tr("Send message"), this, SLOT(sendMsg())); + + contextMenu->addSeparator(); + + if(n_is_a_contact == 0) + contextMenu->addAction(QIcon(), tr("Add to Contacts"), this, SLOT(addtoContacts())); + + if(n_is_not_a_contact == 0) + contextMenu->addAction(QIcon(":/images/cancel.png"), tr("Remove from Contacts"), this, SLOT(removefromContacts())); + + contextMenu->addSeparator(); + + if(n_positive_reputations == 0) // only unban when all items are banned + contextMenu->addAction(QIcon(":/icons/png/thumbs-up.png"), tr("Set positive opinion"), this, SLOT(positivePerson())); + + if(n_neutral_reputations == 0) // only unban when all items are banned + contextMenu->addAction(QIcon(":/icons/png/thumbs-neutral.png"), tr("Set neutral opinion"), this, SLOT(neutralPerson())); + + if(n_negative_reputations == 0) + contextMenu->addAction(QIcon(":/icons/png/thumbs-down.png"), tr("Set negative opinion"), this, SLOT(negativePerson())); + } + + if(one_item_owned_by_you && n_selected_items==1) + { + contextMenu->addSeparator(); + + contextMenu->addAction(ui->editIdentity); + contextMenu->addAction(ui->removeIdentity); + } + + } + + contextMenu = ui->idTreeWidget->createStandardContextMenu(contextMenu); + + contextMenu->exec(QCursor::pos()); + delete contextMenu; +} + +void IdDialog::copyRetroshareLink() +{ + QTreeWidgetItem *item = ui->idTreeWidget->currentItem(); + + if (!item) + { + std::cerr << "IdDialog::editIdentity() Invalid item"; + std::cerr << std::endl; + return; + } + + std::string keyId = item->text(RSID_COL_KEYID).toStdString(); + + RsIdentityDetails details ; + + if(! rsIdentity->getIdDetails(RsGxsId(keyId),details)) + return ; + + std::string radix ; + if(!rsIdentity->serialiseIdentityToMemory(details.mId,radix)) + { + std::cerr << "(EE) Cannot get radix data for key " << keyId << std::endl; + return; + } + QList urls ; + + RetroShareLink link ; + link.createIdentity(RsGxsId(keyId),QString::fromUtf8(details.mNickname.c_str()),QString::fromStdString(radix)) ; + + RSLinkClipboard::copyLinks(urls) ; + + QMessageBox::information(NULL,tr("information"),tr("This identity link was copied to your clipboard. Paste it in a mail, or a message to transmit the identity to someone.")) ; } void IdDialog::chatIdentity() diff --git a/retroshare-gui/src/gui/Identity/IdDialog.h b/retroshare-gui/src/gui/Identity/IdDialog.h index a44d83677..64ab756af 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.h +++ b/retroshare-gui/src/gui/Identity/IdDialog.h @@ -93,6 +93,7 @@ private slots: void editIdentity(); void chatIdentity(); void sendMsg(); + void copyRetroshareLink(); void on_closeInfoFrameButton_clicked(); void updateSelection(); diff --git a/retroshare-gui/src/gui/RetroShareLink.cpp b/retroshare-gui/src/gui/RetroShareLink.cpp index 957b61f7f..a2075aa24 100644 --- a/retroshare-gui/src/gui/RetroShareLink.cpp +++ b/retroshare-gui/src/gui/RetroShareLink.cpp @@ -67,7 +67,8 @@ #define HOST_SEARCH "search" #define HOST_CERTIFICATE "certificate" #define HOST_PUBLIC_MSG "public_msg" -#define HOST_REGEXP "file|extra|person|forum|channel|posted|search|message|certificate|private_chat|public_msg" +#define HOST_IDENTITY "identity" +#define HOST_REGEXP "file|extra|person|forum|channel|posted|search|message|certificate|private_chat|public_msg|identity" #define FILE_NAME "name" #define FILE_SIZE "size" @@ -89,6 +90,9 @@ #define POSTED_ID "id" #define POSTED_MSGID "msgid" +#define IDENTITY_NAME "name" +#define IDENTITY_ID "gxsid" +#define IDENTITY_GROUP "groupdata" #define MESSAGE_ID "id" #define MESSAGE_SUBJECT "subject" @@ -333,6 +337,21 @@ RetroShareLink::RetroShareLink() clear(); } +bool RetroShareLink::createIdentity(const RsGxsId& id, const QString& name, const QString& radix_data) +{ + clear(); + + _name = name; + _hash = QString::fromStdString(id.toStdString()); + _radix_group_data = radix_data ; + + _type = TYPE_IDENTITY; + + check(); + + return valid(); +} + bool RetroShareLink::createExtraFile(const QString& name, uint64_t size, const QString& hash,const QString& ssl_id) { clear(); @@ -534,6 +553,7 @@ void RetroShareLink::clear() _GPGid = "" ; _time_stamp = 0 ; _encrypted_chat_info = "" ; + _radix_group_data = "" ; } void RetroShareLink::check() @@ -565,6 +585,17 @@ void RetroShareLink::check() if(!checkPGPId(_GPGid)) _valid = false ; break ; + case TYPE_IDENTITY: + if(_name.isNull()) + _valid = false ; + + if(_radix_group_data.isNull()) + _valid = false ; + + if(_hash.isNull()) + _valid = false ; + break ; + case TYPE_PERSON: if(_size != 0) _valid = false; @@ -651,6 +682,9 @@ QString RetroShareLink::title() const return QObject::tr("%1 (%2, Extra - Source included)").arg(hash()).arg(misc::friendlyUnit(size())); case TYPE_FILE: return QString("%1 (%2)").arg(hash()).arg(misc::friendlyUnit(size())); + case TYPE_IDENTITY: + return _name ; + case TYPE_PERSON: return PeerDefs::rsidFromId(RsPgpId(hash().toStdString())); case TYPE_FORUM: @@ -711,6 +745,14 @@ QString RetroShareLink::toString() const break; + case TYPE_IDENTITY: + url.setScheme(RSLINK_SCHEME) ; + url.setHost(HOST_IDENTITY) ; + urlQuery.addQueryItem(IDENTITY_ID,_hash) ; + urlQuery.addQueryItem(IDENTITY_NAME,encodeItem(_name)) ; + urlQuery.addQueryItem(IDENTITY_GROUP,_radix_group_data) ; + break ; + case TYPE_EXTRAFILE: url.setScheme(RSLINK_SCHEME); url.setHost(HOST_EXTRAFILE); @@ -798,9 +840,11 @@ QString RetroShareLink::toString() const QString RetroShareLink::niceName() const { - if (type() == TYPE_PERSON) { + if (type() == TYPE_PERSON) return PeerDefs::rsid(name().toUtf8().constData(), RsPgpId(hash().toStdString())); - } + + if(type() == TYPE_IDENTITY) + return QObject::tr("Click this link to add this person (name=%1, ID=%2) to your People tab.").arg(_name).arg(_hash) ; if(type() == TYPE_PUBLIC_MSG) { RsPeerDetails detail; @@ -1156,6 +1200,15 @@ static void processList(const QStringList &list, const QString &textSingular, co } break ; + case TYPE_IDENTITY: + { + if(rsIdentity->deserialiseIdentityFromMemory(link.radixGroupData().toStdString())) + QMessageBox::information(NULL,QObject::tr("Identity added to People"),QObject::tr("The identity was added to people. You can now chat with it, send messages to it, etc.")) ; + else + QMessageBox::warning(NULL,QObject::tr("Identity cannot be added to People"),QObject::tr("The identity was not added to people. Some error occured. The link is probably corrupted.")) ; + } + break; + case TYPE_FILE: case TYPE_EXTRAFILE: { diff --git a/retroshare-gui/src/gui/RetroShareLink.h b/retroshare-gui/src/gui/RetroShareLink.h index d1390d18d..b272f3416 100644 --- a/retroshare-gui/src/gui/RetroShareLink.h +++ b/retroshare-gui/src/gui/RetroShareLink.h @@ -68,7 +68,8 @@ class RetroShareLink TYPE_EXTRAFILE = 0x08, TYPE_PRIVATE_CHAT = 0x09, TYPE_PUBLIC_MSG = 0x0a, - TYPE_POSTED = 0x0b + TYPE_POSTED = 0x0b, + TYPE_IDENTITY = 0x0c }; public: @@ -85,6 +86,7 @@ class RetroShareLink bool createSearch(const QString& keywords); bool createMessage(const RsPeerId &peerId, const QString& subject); bool createMessage(const RsGxsId &peerId, const QString& subject); + bool createIdentity(const RsGxsId& gxs_id,const QString& name,const QString& radix_data) ; bool createCertificate(const RsPeerId &ssl_id) ; bool createPublicMsgInvite(time_t time_stamp,const QString& pgp_id,const QString& hash) ; bool createUnknwonSslCertificate(const RsPeerId &sslId, const RsPgpId &gpgId = RsPgpId()) ; @@ -101,12 +103,13 @@ class RetroShareLink const QString& SSLId() const { return _SSLid ; } const QString& GPGId() const { return _GPGid ; } const QString& localIPAndPort() const { return _loc_ip_port ; } - const QString& externalIPAndPort() const { return _ext_ip_port ; } - const QString& dyndns() const { return _dyndns_name ; } - const QString& location() const { return _location ; } - const QString& radix() const { return _radix ; } - time_t timeStamp() const { return _time_stamp ; } - QString title() const; + const QString& externalIPAndPort() const { return _ext_ip_port ; } + const QString& dyndns() const { return _dyndns_name ; } + const QString& location() const { return _location ; } + const QString& radix() const { return _radix ; } + time_t timeStamp() const { return _time_stamp ; } + QString title() const; + QString radixGroupData() const { return _radix_group_data ;} unsigned int subType() const { return _subType; } void setSubType(unsigned int subType) { _subType = subType; } @@ -158,12 +161,13 @@ class RetroShareLink QString _GPGBase64String ; // GPG Cert QString _GPGBase64CheckSum ; // GPG Cert QString _location ; // location - QString _ext_ip_port ; - QString _loc_ip_port ; - QString _dyndns_name ; + QString _ext_ip_port ; + QString _loc_ip_port ; + QString _dyndns_name ; QString _radix ; - QString _encrypted_chat_info ; // encrypted data string for the recipient of a chat invite - time_t _time_stamp ; // time stamp at which the link will expire. + QString _encrypted_chat_info ; // encrypted data string for the recipient of a chat invite + time_t _time_stamp ; // time stamp at which the link will expire. + QString _radix_group_data; unsigned int _subType; // for general use as sub type for _type (RSLINK_SUBTYPE_...) }; From 54cd402f1c8c6175501782178507cf2168b3371d Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 8 Apr 2017 21:43:07 +0200 Subject: [PATCH 061/230] fixed a few bugs in latest identity link code --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 1 + retroshare-gui/src/gui/RetroShareLink.cpp | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 4b28a1b09..050785db1 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -2432,6 +2432,7 @@ void IdDialog::copyRetroshareLink() RetroShareLink link ; link.createIdentity(RsGxsId(keyId),QString::fromUtf8(details.mNickname.c_str()),QString::fromStdString(radix)) ; + urls.push_back(link); RSLinkClipboard::copyLinks(urls) ; diff --git a/retroshare-gui/src/gui/RetroShareLink.cpp b/retroshare-gui/src/gui/RetroShareLink.cpp index a2075aa24..4d32930aa 100644 --- a/retroshare-gui/src/gui/RetroShareLink.cpp +++ b/retroshare-gui/src/gui/RetroShareLink.cpp @@ -307,6 +307,21 @@ void RetroShareLink::fromUrl(const QUrl& url) return; } + if(url.host() == HOST_IDENTITY) { + _type = TYPE_IDENTITY ; + QString name = urlQuery.queryItemValue(IDENTITY_NAME) ; + QString radix= urlQuery.queryItemValue(IDENTITY_GROUP) ; + QString gxsid= urlQuery.queryItemValue(IDENTITY_ID) ; + + RsGxsId id(gxsid.toStdString()) ; + + if(!id.isNull()) + createIdentity(id,name,radix) ; + else + std::cerr << "(EE) identity link is not valid." << std::endl; + return ; + } + if (url.host() == HOST_MESSAGE) { _type = TYPE_MESSAGE; std::string id = urlQuery.queryItemValue(MESSAGE_ID).toStdString(); @@ -844,7 +859,7 @@ QString RetroShareLink::niceName() const return PeerDefs::rsid(name().toUtf8().constData(), RsPgpId(hash().toStdString())); if(type() == TYPE_IDENTITY) - return QObject::tr("Click this link to add this person (name=%1, ID=%2) to your People tab.").arg(_name).arg(_hash) ; + return QObject::tr("Identity link (name=%1, ID=%2)").arg(_name).arg(_hash) ; if(type() == TYPE_PUBLIC_MSG) { RsPeerDetails detail; @@ -1055,6 +1070,7 @@ static void processList(const QStringList &list, const QString &textSingular, co case TYPE_POSTED: case TYPE_SEARCH: case TYPE_MESSAGE: + case TYPE_IDENTITY: case TYPE_CERTIFICATE: case TYPE_PUBLIC_MSG: case TYPE_PRIVATE_CHAT: From d66e653204423622bd9adb2bfa22c8bf1d2a24f1 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 8 Apr 2017 23:39:05 +0200 Subject: [PATCH 062/230] fixed bug in deserialisation of group informaiton --- libretroshare/src/gxs/rsgenexchange.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index 4d70ee409..571489212 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -1310,7 +1310,7 @@ bool RsGenExchange::deserializeGroupData(unsigned char *data,uint32_t size) { RS_STACK_MUTEX(mGenMtx) ; - RsItem *item = mSerialiser->deserialise(data, &size); + RsItem *item = RsNxsSerialiser(mServType).deserialise(data, &size); RsNxsGrp *nxs_grp = dynamic_cast(item) ; @@ -1321,7 +1321,7 @@ bool RsGenExchange::deserializeGroupData(unsigned char *data,uint32_t size) return false ; } - mReceivedGrps.push_back( GxsPendingItem(nxs_grp, nxs_grp->metaData->mGroupId,time(NULL)) ); + mReceivedGrps.push_back( GxsPendingItem(nxs_grp, nxs_grp->grpId,time(NULL)) ); return true ; } From 7f12ca266bd5e3ff217f16bd087ad393b27a3536 Mon Sep 17 00:00:00 2001 From: electron128 Date: Sun, 9 Apr 2017 09:57:48 +0200 Subject: [PATCH 063/230] fixed name of local socket where RS waits for rslinks etc. --- retroshare-gui/src/retroshare-gui.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index 9e2951f87..6c4fdeb67 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -5,7 +5,7 @@ QT += network xml CONFIG += qt gui uic qrc resources idle bitdht CONFIG += link_prl TARGET = RetroShare06 -DEFINES += TARGET=\\\"$TARGET\\\" +DEFINES += TARGET=\\\"$${TARGET}\\\" # Plz never commit the .pro with these flags enabled. # Use this flag when developping new features only. From 4c9b62070f3d58799293bf0a5bfdb4947351f2ff Mon Sep 17 00:00:00 2001 From: electron128 Date: Sun, 9 Apr 2017 10:26:18 +0200 Subject: [PATCH 064/230] fixed --base-dir command line argument in rs-gui when running multiple instances. Only forward "link" and "rsfile" arguments to a running instance. Start a new instance if other arguments are present. --- retroshare-gui/src/rshare.cpp | 86 +++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 15 deletions(-) diff --git a/retroshare-gui/src/rshare.cpp b/retroshare-gui/src/rshare.cpp index a2de0840a..040992afe 100644 --- a/retroshare-gui/src/rshare.cpp +++ b/retroshare-gui/src/rshare.cpp @@ -68,6 +68,17 @@ #define ARG_RSFILE_L "rsfile" /**< Open RsFile with or without arg */ //Other defined for server in /libretroshare/src/rsserver/rsinit.cc:351 +// The arguments here can be send to a running instance. +// If the command line contains arguments not listed here, we have to start a new instance. +// For exmample, the user wants to start a second instance using --base-dir arg of libretroshare. +static const char* const forwardableArgs[] = { + ARG_RSLINK_S, + ARG_RSLINK_L, + ARG_RSFILE_S, + ARG_RSFILE_L, + NULL, +}; + /* Static member variables */ QMap Rshare::_args; /**< List of command-line arguments. */ QString Rshare::_style; /**< The current GUI style. */ @@ -115,6 +126,27 @@ void qt_msg_handler(QtMsgType type, const char *msg) } } +static bool notifyRunningInstance() +{ + // Connect to the Local Server of the main process to notify it + // that a new process had been started + QLocalSocket localSocket; + localSocket.connectToServer(QString(TARGET)); + + std::cerr << "Rshare::Rshare waitForConnected to other instance." << std::endl; + if( localSocket.waitForConnected(100) ) + { + std::cerr << "Rshare::Rshare Connection etablished. Waiting for disconnection." << std::endl; + localSocket.waitForDisconnected(1000); + return true; + } + else + { + std::cerr << "Rshare::Rshare failed to connect to other instance." << std::endl; + return false; + } +} + /** Constructor. Parses the command-line arguments, resets Rshare's * configuration (if requested), and sets up the GUI style and language * translation. */ @@ -128,7 +160,32 @@ Rshare::Rshare(QStringList args, int &argc, char **argv, const QString &dir) { QString serverName = QString(TARGET); - if (!args.isEmpty()) { + // check if another instance is running + bool haveRunningInstance = notifyRunningInstance(); + + bool sendArgsToRunningInstance = haveRunningInstance; + if(args.empty()) + sendArgsToRunningInstance = false; + // if we find non-forwardable args, start a new instance + for(int i = 0; i < args.size(); ++i) + { + const char* const* argit = forwardableArgs; + bool found = false; + while(*argit && i < args.size()) + { + if(args.value(i) == "-"+QString(*argit) || args.value(i) == "--"+QString(*argit)) + { + found = true; + if(argNeedsValue(*argit)) + i++; + } + argit++; + } + if(!found) + sendArgsToRunningInstance = false; + } + + if (sendArgsToRunningInstance) { // load into shared memory QBuffer buffer; buffer.open(QBuffer::ReadWrite); @@ -156,30 +213,29 @@ Rshare::Rshare(QStringList args, int &argc, char **argv, const QString &dir) memcpy(to, from, qMin(newArgs.size(), size)); newArgs.unlock(); - // Connect to the Local Server of the main process to notify it - // that a new process had been started - QLocalSocket localSocket; - localSocket.connectToServer(QString(TARGET)); - std::cerr << "Rshare::Rshare waitForConnected to other instance." << std::endl; - if( localSocket.waitForConnected(100) ) + if(notifyRunningInstance()) { - std::cerr << "Rshare::Rshare Connection etablished. Waiting for disconnection." << std::endl; - localSocket.waitForDisconnected(1000); newArgs.detach(); std::cerr << "Rshare::Rshare Arguments was sended." << std::endl << " To disable it, in Options - General - Misc," << std::endl << " uncheck \"Use Local Server to get new Arguments\"." << std::endl; ::exit(EXIT_SUCCESS); // Terminate the program using STDLib's exit function } + else + std::cerr << "Rshare::Rshare failed to connect to other instance." << std::endl; newArgs.detach(); } - // No main process exists - // Or started without arguments - // So we start a Local Server to listen for connections from new process - localServer= new QLocalServer(); - QObject::connect(localServer, SIGNAL(newConnection()), this, SLOT(slotConnectionEstablished())); - updateLocalServer(); + + if(!haveRunningInstance) + { + // No main process exists + // Or started without arguments + // So we start a Local Server to listen for connections from new process + localServer= new QLocalServer(); + QObject::connect(localServer, SIGNAL(newConnection()), this, SLOT(slotConnectionEstablished())); + updateLocalServer(); + } } #if QT_VERSION >= QT_VERSION_CHECK (5, 0, 0) From 3130ec90412b29ce7df65528389b1237a9865b47 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 10 Apr 2017 20:02:14 +0200 Subject: [PATCH 065/230] added GUI async call to ID serialised data. Allows to copy+paste identities. --- libretroshare/src/gxs/rsgxsdataaccess.cc | 77 +++++++++++----- libretroshare/src/gxs/rsgxsdataaccess.h | 7 ++ libretroshare/src/gxs/rsgxsrequesttypes.h | 6 ++ libretroshare/src/retroshare/rsidentity.h | 1 + libretroshare/src/retroshare/rstokenservice.h | 1 + libretroshare/src/services/p3idservice.cc | 22 +++++ libretroshare/src/services/p3idservice.h | 2 + retroshare-gui/src/gui/Identity/IdDialog.cpp | 91 +++++++++++++++---- retroshare-gui/src/gui/Identity/IdDialog.h | 1 + 9 files changed, 168 insertions(+), 40 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsdataaccess.cc b/libretroshare/src/gxs/rsgxsdataaccess.cc index 8fcbbde5d..56899d4ce 100644 --- a/libretroshare/src/gxs/rsgxsdataaccess.cc +++ b/libretroshare/src/gxs/rsgxsdataaccess.cc @@ -75,6 +75,12 @@ bool RsGxsDataAccess::requestGroupInfo(uint32_t &token, uint32_t ansType, const gir->mGroupIds = groupIds; req = gir; } + else if(reqType & GXS_REQUEST_TYPE_GROUP_SERIALIZED_DATA) + { + GroupSerializedDataReq* gir = new GroupSerializedDataReq(); + gir->mGroupIds = groupIds; + req = gir; + } if(req == NULL) { @@ -103,34 +109,25 @@ bool RsGxsDataAccess::requestGroupInfo(uint32_t &token, uint32_t ansType, const uint32_t reqType = opts.mReqType; if(reqType & GXS_REQUEST_TYPE_GROUP_META) - { - GroupMetaReq* gmr = new GroupMetaReq(); - req = gmr; - } + req = new GroupMetaReq(); else if(reqType & GXS_REQUEST_TYPE_GROUP_DATA) - { - GroupDataReq* gdr = new GroupDataReq(); - req = gdr; - } + req = new GroupDataReq(); else if(reqType & GXS_REQUEST_TYPE_GROUP_IDS) - { - GroupIdReq* gir = new GroupIdReq(); - req = gir; - } - - if(req == NULL) + req = new GroupIdReq(); + else if(reqType & GXS_REQUEST_TYPE_GROUP_SERIALIZED_DATA) + req = new GroupSerializedDataReq(); + else { std::cerr << "RsGxsDataAccess::requestGroupInfo() request type not recognised, type " << reqType << std::endl; return false; - }else - { - generateToken(token); -#ifdef DATA_DEBUG - std::cerr << "RsGxsDataAccess::requestGroupInfo() gets Token: " << token << std::endl; -#endif } + generateToken(token); +#ifdef DATA_DEBUG + std::cerr << "RsGxsDataAccess::requestGroupInfo() gets Token: " << token << std::endl; +#endif + setReq(req, token, ansType, opts); storeRequest(req); @@ -430,7 +427,16 @@ bool RsGxsDataAccess::getGroupData(const uint32_t& token, std::list& else if(req->status == GXS_REQUEST_V2_STATUS_COMPLETE) { GroupDataReq* gmreq = dynamic_cast(req); - if(gmreq) + GroupSerializedDataReq* gsreq = dynamic_cast(req); + + if(gsreq) + { + grpData.swap(gsreq->mGroupData); + gsreq->mGroupData.clear(); + + locked_updateRequestStatus(token, GXS_REQUEST_V2_STATUS_DONE); + } + else if(gmreq) { grpData.swap(gmreq->mGroupData); gmreq->mGroupData.clear(); @@ -804,6 +810,7 @@ void RsGxsDataAccess::processRequests() MsgIdReq* mir; MsgRelatedInfoReq* mri; GroupStatisticRequest* gsr; + GroupSerializedDataReq* grr; ServiceStatisticRequest* ssr; #ifdef DATA_DEBUG @@ -851,6 +858,11 @@ void RsGxsDataAccess::processRequests() { ok = getServiceStatistic(ssr); } + else if((grr = dynamic_cast(req)) != NULL) + { + ok = getGroupSerializedData(grr); + } + else { std::cerr << "RsGxsDataAccess::processRequests() Failed to process request, token: " @@ -929,7 +941,30 @@ bool RsGxsDataAccess::getServiceStatistic(const uint32_t &token, GxsServiceStati return true; } +bool RsGxsDataAccess::getGroupSerializedData(GroupSerializedDataReq* req) +{ + std::map grpData; + std::list grpIdsOut; + getGroupList(req->mGroupIds, req->Options, grpIdsOut); + + if(grpIdsOut.empty()) + return true; + + + for(std::list::iterator lit = grpIdsOut.begin();lit != grpIdsOut.end();++lit) + grpData[*lit] = NULL; + + bool ok = mDataStore->retrieveNxsGrps(grpData, true, true); + req->mGroupData.clear(); + + std::map::iterator mit = grpData.begin(); + + for(; mit != grpData.end(); ++mit) + req->mGroupData.push_back(mit->second) ; + + return ok; +} bool RsGxsDataAccess::getGroupData(GroupDataReq* req) { std::map grpData; diff --git a/libretroshare/src/gxs/rsgxsdataaccess.h b/libretroshare/src/gxs/rsgxsdataaccess.h index ac21f4c41..d39823f81 100644 --- a/libretroshare/src/gxs/rsgxsdataaccess.h +++ b/libretroshare/src/gxs/rsgxsdataaccess.h @@ -418,6 +418,13 @@ private: */ bool getGroupStatistic(GroupStatisticRequest* req); + /*! + * + * Attempts to retrieve group data in serialized format + * @param req Request object to satisfy + */ + bool getGroupSerializedData(GroupSerializedDataReq* req); + /*! * * Attempts to service statistic diff --git a/libretroshare/src/gxs/rsgxsrequesttypes.h b/libretroshare/src/gxs/rsgxsrequesttypes.h index a344a55e7..8009f294b 100644 --- a/libretroshare/src/gxs/rsgxsrequesttypes.h +++ b/libretroshare/src/gxs/rsgxsrequesttypes.h @@ -61,6 +61,12 @@ public: std::list mGroupIds; std::list mGroupIdResult; }; +class GroupSerializedDataReq : public GxsRequest +{ +public: + std::list mGroupIds; + std::list mGroupData; +}; class GroupDataReq : public GxsRequest { diff --git a/libretroshare/src/retroshare/rsidentity.h b/libretroshare/src/retroshare/rsidentity.h index 53704961d..6be124e93 100644 --- a/libretroshare/src/retroshare/rsidentity.h +++ b/libretroshare/src/retroshare/rsidentity.h @@ -322,6 +322,7 @@ public: */ virtual bool getGroupData(const uint32_t &token, std::vector &groups) = 0; + virtual bool getGroupSerializedData(const uint32_t &token, std::map& serialized_groups)=0; //virtual bool getMsgData(const uint32_t &token, std::vector &opinions) = 0; }; diff --git a/libretroshare/src/retroshare/rstokenservice.h b/libretroshare/src/retroshare/rstokenservice.h index c55213965..5e74a527f 100644 --- a/libretroshare/src/retroshare/rstokenservice.h +++ b/libretroshare/src/retroshare/rstokenservice.h @@ -47,6 +47,7 @@ #define GXS_REQUEST_TYPE_GROUP_STATS 0x01600000 #define GXS_REQUEST_TYPE_SERVICE_STATS 0x03200000 +#define GXS_REQUEST_TYPE_GROUP_SERIALIZED_DATA 0x04000000 // TODO CLEANUP: RS_TOKREQOPT_MSG_* should be an inner enum of RsTokReqOptions diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 9aeec2aea..dcc45af65 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -1474,6 +1474,28 @@ bool p3IdService::getGroupData(const uint32_t &token, std::vector return ok; } +bool p3IdService::getGroupSerializedData(const uint32_t &token, std::map& serialized_groups) +{ + unsigned char *mem = NULL; + uint32_t size; + RsGxsGroupId id ; + + serialized_groups.clear() ; + + if(!RsGenExchange::getSerializedGroupData(token,id, mem,size)) + { + std::cerr << "(EE) call to RsGenExchage::getSerializedGroupData() failed." << std::endl; + return false; + } + + std::string radix ; + + Radix64::encode(mem,size,radix) ; + + serialized_groups[RsGxsId(id)] = radix ; + + return true; +} /********************************************************************************/ /********************************************************************************/ diff --git a/libretroshare/src/services/p3idservice.h b/libretroshare/src/services/p3idservice.h index 6e4585eb6..91e55fe6d 100644 --- a/libretroshare/src/services/p3idservice.h +++ b/libretroshare/src/services/p3idservice.h @@ -245,6 +245,8 @@ public: // These are exposed via RsIdentity. virtual bool getGroupData(const uint32_t &token, std::vector &groups); + virtual bool getGroupSerializedData(const uint32_t &token, std::map& serialized_groups); + //virtual bool getMsgData(const uint32_t &token, std::vector &opinions); // These are local - and not exposed via RsIdentity. diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 050785db1..b7923dc49 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -55,10 +55,11 @@ *****/ // Data Requests. -#define IDDIALOG_IDLIST 1 -#define IDDIALOG_IDDETAILS 2 -#define IDDIALOG_REPLIST 3 -#define IDDIALOG_REFRESH 4 +#define IDDIALOG_IDLIST 1 +#define IDDIALOG_IDDETAILS 2 +#define IDDIALOG_REPLIST 3 +#define IDDIALOG_REFRESH 4 +#define IDDIALOG_SERIALIZED_GROUP 5 #define CIRCLEGROUP_CIRCLE_COL_GROUPNAME 0 #define CIRCLEGROUP_CIRCLE_COL_GROUPID 1 @@ -814,7 +815,7 @@ void IdDialog::loadCircleGroupData(const uint32_t& token) #ifdef ID_DEBUG std::cerr << "Loading circle info" << std::endl; #endif - + std::vector circle_grp_v ; rsGxsCircles->getGroupData(token, circle_grp_v); @@ -1385,6 +1386,8 @@ void IdDialog::updateSelection() } } + + void IdDialog::requestIdList() { //Disable by default, will be enable by insertIdDetails() @@ -2174,6 +2177,45 @@ void IdDialog::insertRepList(uint32_t token) mStateHelper->setActive(IDDIALOG_REPLIST, true); } +void IdDialog::handleSerializedGroupData(uint32_t token) +{ + std::map serialized_group_map ; + + rsIdentity->getGroupSerializedData(token, serialized_group_map); + + if(serialized_group_map.size() < 1) + { + std::cerr << "(EE) Cannot get radix data " << std::endl; + return; + } + if(serialized_group_map.size() > 1) + { + std::cerr << "(EE) Too many results for serialized data" << std::endl; + return; + } + + RsGxsId gxs_id = serialized_group_map.begin()->first ; + std::string radix = serialized_group_map.begin()->second ; + + RsIdentityDetails details ; + + if(!rsIdentity->getIdDetails(gxs_id,details)) + { + std::cerr << "(EE) Cannot get id details for key " << gxs_id << std::endl; + return; + } + + QList urls ; + + RetroShareLink link ; + link.createIdentity(gxs_id,QString::fromUtf8(details.mNickname.c_str()),QString::fromStdString(radix)) ; + urls.push_back(link); + + RSLinkClipboard::copyLinks(urls) ; + + QMessageBox::information(NULL,tr("information"),tr("This identity link was copied to your clipboard. Paste it in a mail, or a message to transmit the identity to someone.")) ; +} + void IdDialog::loadRequest(const TokenQueue * queue, const TokenRequest &req) { #ifdef ID_DEBUG @@ -2197,6 +2239,10 @@ void IdDialog::loadRequest(const TokenQueue * queue, const TokenRequest &req) insertRepList(req.mToken); break; + case IDDIALOG_SERIALIZED_GROUP: + handleSerializedGroupData(req.mToken); + break; + case IDDIALOG_REFRESH: // replaced by RsGxsUpdateBroadcastPage // updateDisplay(true); @@ -2415,28 +2461,35 @@ void IdDialog::copyRetroshareLink() return; } - std::string keyId = item->text(RSID_COL_KEYID).toStdString(); + RsGxsId gxs_id(item->text(RSID_COL_KEYID).toStdString()); + + if(gxs_id.isNull()) + { + std::cerr << "Null GXS id. Something went wrong." << std::endl; + return ; + } RsIdentityDetails details ; - if(! rsIdentity->getIdDetails(RsGxsId(keyId),details)) + if(! rsIdentity->getIdDetails(gxs_id,details)) return ; - std::string radix ; - if(!rsIdentity->serialiseIdentityToMemory(details.mId,radix)) - { - std::cerr << "(EE) Cannot get radix data for key " << keyId << std::endl; - return; - } - QList urls ; + if (!mIdQueue) + return; - RetroShareLink link ; - link.createIdentity(RsGxsId(keyId),QString::fromUtf8(details.mNickname.c_str()),QString::fromStdString(radix)) ; - urls.push_back(link); + mStateHelper->setLoading(IDDIALOG_SERIALIZED_GROUP, true); - RSLinkClipboard::copyLinks(urls) ; + mIdQueue->cancelActiveRequestTokens(IDDIALOG_SERIALIZED_GROUP); - QMessageBox::information(NULL,tr("information"),tr("This identity link was copied to your clipboard. Paste it in a mail, or a message to transmit the identity to someone.")) ; + std::list ids ; + ids.push_back(RsGxsGroupId(gxs_id)) ; + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_SERIALIZED_DATA; + + uint32_t token; + + mIdQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, ids, IDDIALOG_SERIALIZED_GROUP); } void IdDialog::chatIdentity() diff --git a/retroshare-gui/src/gui/Identity/IdDialog.h b/retroshare-gui/src/gui/Identity/IdDialog.h index 64ab756af..1eaae935d 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.h +++ b/retroshare-gui/src/gui/Identity/IdDialog.h @@ -133,6 +133,7 @@ private: void requestRepList(); void insertRepList(uint32_t token); + void handleSerializedGroupData(uint32_t token); void requestIdEdit(std::string &id); void showIdEdit(uint32_t token); From 691ed8de08ae779531df638cfed874c5ea37ba99 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 10 Apr 2017 20:34:02 +0200 Subject: [PATCH 066/230] added new template for std::string with type id --- libretroshare/src/chat/rschatitems.cc | 50 +++++++------------ .../src/serialization/rstypeserializer.h | 33 +++++++++++- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index f7edf5601..a430b1119 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -64,11 +64,9 @@ RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) void RsChatMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString_proxy tt(message,TLV_TYPE_STR_MSG) ; - RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatflags") ; RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; - RsTypeSerializer::serial_process(j,ctx,tt,"message") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,message,"message") ; } /*************************************************************************/ @@ -84,11 +82,9 @@ RsChatAvatarItem::~RsChatAvatarItem() void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx, bool include_signature) { - RsTypeSerializer::TlvString_proxy tt(nick,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; - RsTypeSerializer::serial_process(j,ctx,tt ,"nick") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,nick,"nick") ; if(include_signature) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; @@ -116,13 +112,10 @@ template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,Serializ { RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; - TlvString_proxy tt1(info.name ,TLV_TYPE_STR_NAME) ; - TlvString_proxy tt2(info.topic,TLV_TYPE_STR_NAME) ; - - RsTypeSerializer::serial_process(j,ctx,tt1,"info.name") ; - RsTypeSerializer::serial_process(j,ctx,tt2,"info.topic") ; - RsTypeSerializer::serial_process(j,ctx,info.count,"info.count") ; - RsTypeSerializer::serial_process(j,ctx,info.flags,"info.flags") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,info.name, "info.name") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,info.topic,"info.topic") ; + RsTypeSerializer::serial_process(j,ctx, info.count,"info.count") ; + RsTypeSerializer::serial_process (j,ctx, info.flags,"info.flags") ; } void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) @@ -132,20 +125,16 @@ void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString_proxy tt(string1,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; - RsTypeSerializer::serial_process (j,ctx,tt ,"string1") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ; RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; } void RsChatLobbyEventItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::TlvString_proxy tt(string1,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; - RsTypeSerializer::serial_process (j,ctx,tt ,"string1") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ; RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; RsChatLobbyBouncingObject::serial_process(j,ctx,false) ; @@ -162,30 +151,27 @@ void RsChatLobbyConnectChallengeItem::serial_process(RsItem::SerializeJob j,Seri void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; - RsTypeSerializer::TlvString_proxy s(lobby_name,TLV_TYPE_STR_NAME) ; - RsTypeSerializer::serial_process(j,ctx,s,"lobby_name") ; - RsTypeSerializer::serial_process(j,ctx,lobby_flags,"lobby_flags") ; + RsTypeSerializer::serial_process(j,ctx, lobby_id, "lobby_id") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,lobby_name, "lobby_name") ; + RsTypeSerializer::serial_process (j,ctx, lobby_flags,"lobby_flags") ; } void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { uint32_t x=0 ; - RsTypeSerializer::TlvString_proxy s(message,TLV_TYPE_STR_MSG) ; - RsTypeSerializer::serial_process(j,ctx,x,"place holder value") ; - RsTypeSerializer::serial_process (j,ctx,configPeerId,"configPeerId") ; - RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatFlags") ; - RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; - RsTypeSerializer::serial_process (j,ctx,s,"message") ; - RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime") ; + RsTypeSerializer::serial_process(j,ctx, x, "place holder value") ; + RsTypeSerializer::serial_process (j,ctx, configPeerId,"configPeerId") ; + RsTypeSerializer::serial_process(j,ctx, chatFlags, "chatFlags") ; + RsTypeSerializer::serial_process(j,ctx, sendTime, "sendTime") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,message, "message") ; + RsTypeSerializer::serial_process(j,ctx, recvTime, "recvTime") ; } void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; - RsTypeSerializer::TlvString_proxy tt(status_string,TLV_TYPE_STR_MSG) ; - RsTypeSerializer::serial_process(j,ctx,tt,"status_string") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,status_string,"status_string") ; } void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index f82365f82..878ec3e6b 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -25,7 +25,6 @@ class RsTypeSerializer public: // This type should be used to pass a parameter to drive the serialisation if needed. - typedef std::pair TlvString_proxy; typedef std::pair TlvMemBlock_proxy; //=================================================================================================// @@ -55,6 +54,33 @@ class RsTypeSerializer } } + //=================================================================================================// + // Generic types + type_id // + //=================================================================================================// + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,uint16_t type_id,T& member,const std::string& member_name) + { + switch(j) + { + case RsItem::SIZE_ESTIMATE: ctx.mOffset += serial_size(type_id,member) ; + break ; + + case RsItem::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; + break ; + + case RsItem::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; + break ; + + case RsItem::PRINT: + print_data(member_name,type_id,member); + break; + default: + ctx.mOk = false ; + throw std::runtime_error("Unknown serial job") ; + } + } + //=================================================================================================// // std::vector // //=================================================================================================// @@ -148,6 +174,11 @@ class RsTypeSerializer template static uint32_t serial_size(const T& /* member */); template static void print_data(const std::string& name,const T& /* member */); + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, uint16_t type_id,const T& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset,uint16_t type_id, T& member); + template static uint32_t serial_size(uint16_t type_id,const T& /* member */); + template static void print_data(const std::string& name,uint16_t type_id,const T& /* member */); + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsGenericIdType& member); template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsGenericIdType& member); template static uint32_t serial_size(const t_RsGenericIdType& /* member */); From 731e20d0a3ed023f845dc618fea21c391411edb6 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 10 Apr 2017 22:09:56 +0200 Subject: [PATCH 067/230] switch BanListItem classes to new serialization system --- .../src/serialiser/rsbanlistitems.cc | 299 ++---------------- libretroshare/src/serialiser/rsbanlistitems.h | 44 +-- libretroshare/src/serialiser/rsbaseserial.cc | 23 +- libretroshare/src/serialiser/rsbaseserial.h | 14 +- libretroshare/src/serialiser/rsserial.h | 7 +- .../src/serialization/rstypeserializer.h | 36 ++- 6 files changed, 93 insertions(+), 330 deletions(-) diff --git a/libretroshare/src/serialiser/rsbanlistitems.cc b/libretroshare/src/serialiser/rsbanlistitems.cc index b22c16d2b..a110ec00f 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.cc +++ b/libretroshare/src/serialiser/rsbanlistitems.cc @@ -25,7 +25,8 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rsbanlistitems.h" -#include "serialiser/rstlvbanlist.h" + +#include "serialization/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 @@ -35,300 +36,36 @@ /*************************************************************************/ -RsBanListItem::~RsBanListItem() -{ - return; -} - void RsBanListItem::clear() { peerList.TlvClear(); } -std::ostream &RsBanListItem::print(std::ostream &out, uint16_t indent) +void RsBanListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - printRsItemBase(out, "RsBanListItem", indent); - uint16_t int_Indent = indent + 2; - peerList.print(out, int_Indent); - - printRsItemEnd(out, "RsBanListItem", indent); - return out; + RsTypeSerializer::serial_process(j,ctx,peerList,"peerList") ; } - -uint32_t RsBanListSerialiser::sizeList(RsBanListItem *item) +void RsBanListConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - uint32_t s = 8; /* header */ - s += item->peerList.TlvSize(); - - return s; + RsTypeSerializer::serial_process(j,ctx,type,"type") ; + RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; + RsTypeSerializer::serial_process (j,ctx,update_time,"update_time") ; + RsTypeSerializer::serial_process (j,ctx,banned_peers,"banned_peers") ; } - -uint32_t RsBanListSerialiser::sizeListConfig(RsBanListConfigItem *item) +RsItem *RsBanListSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) { - uint32_t s = 8; /* header */ - s += 4 ; // type - s += item->banned_peers.TlvSize(); - s += 8 ; // update time - s += item->peerId.serial_size() ; + if(service_id != RS_SERVICE_TYPE_BANLIST) + return NULL ; - return s; -} -/* serialise the data to the buffer */ -bool RsBanListSerialiser::serialiseList(RsBanListItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeList(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDsdvSerialiser::serialiseRoute() Header: " << ok << std::endl; - std::cerr << "RsDsdvSerialiser::serialiseRoute() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->peerList.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDsdvSerialiser::serialiseRoute() Size Error! " << std::endl; -#endif - } - - return ok; -} -/* serialise the data to the buffer */ -bool RsBanListSerialiser::serialiseListConfig(RsBanListConfigItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeListConfig(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsBanListSerialiser::serialiseRoute() Header: " << ok << std::endl; - std::cerr << "RsBanListSerialiser::serialiseRoute() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset,item->type); - ok &= item->peerId.serialise(data, tlvsize, offset); - ok &= setRawTimeT(data, tlvsize, &offset,item->update_time); - - /* add mandatory parts first */ - ok &= item->banned_peers.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) + switch(item_sub_id) { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsBanListSerialiser::serialiseRoute() Size Error! " << std::endl; -#endif - } - - return ok; -} -RsBanListItem *RsBanListSerialiser::deserialiseList(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_BANLIST != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_BANLIST_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsBanListItem *item = new RsBanListItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->peerList.GetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} -RsBanListConfigItem *RsBanListSerialiser::deserialiseListConfig(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_BANLIST != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsBanListConfigItem *item = new RsBanListConfigItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - ok &= getRawUInt32(data, tlvsize, &offset,&item->type); - ok &= item->peerId.deserialise(data, tlvsize, offset); - ok &= getRawTimeT(data, tlvsize, &offset,item->update_time); - - /* add mandatory parts first */ - ok &= item->banned_peers.GetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -uint32_t RsBanListSerialiser::size(RsItem *i) -{ - RsBanListItem *dri; - RsBanListConfigItem *drc; - - if (NULL != (dri = dynamic_cast(i))) - { - return sizeList(dri); - } - - if (NULL != (drc = dynamic_cast(i))) - { - return sizeListConfig(drc); - } - return 0; -} - -bool RsBanListSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsBanListItem *dri; - RsBanListConfigItem *drc; - - if (NULL != (dri = dynamic_cast(i))) - { - return serialiseList(dri, data, pktsize); - } - if (NULL != (drc = dynamic_cast(i))) - { - return serialiseListConfig(drc, data, pktsize); - } - return false; -} - -RsItem *RsBanListSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_BANLIST != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_BANLIST_ITEM: - return deserialiseList(data, pktsize); - break; - case RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM: - return deserialiseListConfig(data, pktsize); - break; - default: - return NULL; - break; + case RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM: return new RsBanListConfigItem ; + case RS_PKT_SUBTYPE_BANLIST_ITEM: return new RsBanListItem ; + default: + std::cerr << "(EE) unknown item subtype " << (int)item_sub_id << " in RsBanListSerialiser::create_item()" << std::endl; + return NULL ; } } -void RsBanListConfigItem::clear() -{ - banned_peers.TlvClear() ; -} - -std::ostream &RsBanListConfigItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsBanListConfigItem", indent); - uint16_t int_Indent = indent + 2; - banned_peers.print(out, int_Indent); - - printRsItemEnd(out, "RsBanListConfigItem", indent); - return out; -} - -/*************************************************************************/ - - diff --git a/libretroshare/src/serialiser/rsbanlistitems.h b/libretroshare/src/serialiser/rsbanlistitems.h index 372f71a5d..cd5cb8cec 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.h +++ b/libretroshare/src/serialiser/rsbanlistitems.h @@ -29,12 +29,12 @@ #include #include "serialiser/rsserviceids.h" -#include "serialiser/rsserial.h" #include "serialiser/rstlvbanlist.h" +#include "serialization/rsserializer.h" #define RS_PKT_SUBTYPE_BANLIST_ITEM_deprecated 0x01 -#define RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM_deprecated 0x02 -#define RS_PKT_SUBTYPE_BANLIST_ITEM 0x03 +#define RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM_deprecated 0x02 +#define RS_PKT_SUBTYPE_BANLIST_ITEM 0x03 #define RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM 0x04 /**************************************************************************/ @@ -42,17 +42,15 @@ class RsBanListItem: public RsItem { public: - RsBanListItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST, - RS_PKT_SUBTYPE_BANLIST_ITEM) + RsBanListItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST, RS_PKT_SUBTYPE_BANLIST_ITEM) { setPriorityLevel(QOS_PRIORITY_RS_BANLIST_ITEM); return; } - virtual ~RsBanListItem(); + virtual ~RsBanListItem(){} virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); RsTlvBanList peerList; }; @@ -64,40 +62,22 @@ public: :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST, RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM) {} virtual ~RsBanListConfigItem(){} - virtual void clear(); + virtual void clear() { banned_peers.TlvClear() ; } - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); uint32_t type ; RsPeerId peerId ; - time_t update_time ; + time_t update_time ; RsTlvBanList banned_peers; }; -class RsBanListSerialiser: public RsSerialType +class RsBanListSerialiser: public RsSerializer { public: - RsBanListSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BANLIST) - { return; } - virtual ~RsBanListSerialiser() - { return; } - - virtual uint32_t size(RsItem *); - virtual bool serialise (RsItem *item, void *data, uint32_t *size); - virtual RsItem * deserialise(void *data, uint32_t *size); - -private: - - virtual uint32_t sizeList(RsBanListItem *); - virtual bool serialiseList (RsBanListItem *item, void *data, uint32_t *size); - virtual RsBanListItem *deserialiseList(void *data, uint32_t *size); - - virtual uint32_t sizeListConfig(RsBanListConfigItem *); - virtual bool serialiseListConfig (RsBanListConfigItem *item, void *data, uint32_t *size); - virtual RsBanListConfigItem *deserialiseListConfig(void *data, uint32_t *size); - + RsBanListSerialiser() :RsSerializer(RS_SERVICE_TYPE_BANLIST) {} + virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) ; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsbaseserial.cc b/libretroshare/src/serialiser/rsbaseserial.cc index 2ef67cd5b..44bd249d1 100644 --- a/libretroshare/src/serialiser/rsbaseserial.cc +++ b/libretroshare/src/serialiser/rsbaseserial.cc @@ -35,7 +35,7 @@ /* UInt8 get/set */ -bool getRawUInt8(void *data, uint32_t size, uint32_t *offset, uint8_t *out) +bool getRawUInt8(const void *data, uint32_t size, uint32_t *offset, uint8_t *out) { /* first check there is space */ if (size < *offset + 1) @@ -71,7 +71,7 @@ bool setRawUInt8(void *data, uint32_t size, uint32_t *offset, uint8_t in) } /* UInt16 get/set */ -bool getRawUInt16(void *data, uint32_t size, uint32_t *offset, uint16_t *out) +bool getRawUInt16(const void *data, uint32_t size, uint32_t *offset, uint16_t *out) { /* first check there is space */ if (size < *offset + 2) @@ -113,7 +113,7 @@ bool setRawUInt16(void *data, uint32_t size, uint32_t *offset, uint16_t in) /* UInt32 get/set */ -bool getRawUInt32(void *data, uint32_t size, uint32_t *offset, uint32_t *out) +bool getRawUInt32(const void *data, uint32_t size, uint32_t *offset, uint32_t *out) { /* first check there is space */ if (size < *offset + 4) @@ -155,7 +155,7 @@ bool setRawUInt32(void *data, uint32_t size, uint32_t *offset, uint32_t in) /* UInt64 get/set */ -bool getRawUInt64(void *data, uint32_t size, uint32_t *offset, uint64_t *out) +bool getRawUInt64(const void *data, uint32_t size, uint32_t *offset, uint64_t *out) { /* first check there is space */ if (size < *offset + 8) @@ -195,7 +195,7 @@ bool setRawUInt64(void *data, uint32_t size, uint32_t *offset, uint64_t in) return true; } -bool getRawUFloat32(void *data,uint32_t size,uint32_t *offset,float& f) +bool getRawUFloat32(const void *data, uint32_t size, uint32_t *offset, float& f) { uint32_t n ; if(!getRawUInt32(data, size, offset, &n) ) @@ -208,6 +208,13 @@ bool getRawUFloat32(void *data,uint32_t size,uint32_t *offset,float& f) bool setRawUFloat32(void *data,uint32_t size,uint32_t *offset,float f) { + uint32_t sz = 4; + + if ( !data || size <= *offset || size < sz + *offset ) + { + std::cerr << "(EE) not enough room. SIZE+offset=" << sz+*offset << " and size is only " << size << std::endl; + return false; + } if(f < 0.0f) { std::cerr << "(EE) Cannot serialise invalid negative float value " << f << " in " << __PRETTY_FUNCTION__ << std::endl; @@ -229,7 +236,7 @@ uint32_t getRawStringSize(const std::string &outStr) return outStr.length() + 4; } -bool getRawString(void *data, uint32_t size, uint32_t *offset, std::string &outStr) +bool getRawString(const void *data, uint32_t size, uint32_t *offset, std::string &outStr) { #warning Gio: "I had to change this. It seems like a bug to not clear the string. Should make sure it's not introducing any side effect." outStr.clear(); @@ -284,7 +291,7 @@ bool setRawString(void *data, uint32_t size, uint32_t *offset, const std::string return true; } -bool getRawTimeT(void *data,uint32_t size,uint32_t *offset,time_t& t) +bool getRawTimeT(const void *data,uint32_t size,uint32_t *offset,time_t& t) { uint64_t T ; bool res = getRawUInt64(data,size,offset,&T) ; @@ -292,7 +299,7 @@ bool getRawTimeT(void *data,uint32_t size,uint32_t *offset,time_t& t) return res ; } -bool setRawTimeT(void *data,uint32_t size,uint32_t *offset,const time_t& t) +bool setRawTimeT(void *data, uint32_t size, uint32_t *offset, const time_t& t) { return setRawUInt64(data,size,offset,t) ; } diff --git a/libretroshare/src/serialiser/rsbaseserial.h b/libretroshare/src/serialiser/rsbaseserial.h index 25e0f57cc..650fc9e6d 100644 --- a/libretroshare/src/serialiser/rsbaseserial.h +++ b/libretroshare/src/serialiser/rsbaseserial.h @@ -48,27 +48,27 @@ * ******************************************************************/ -bool getRawUInt8(void *data, uint32_t size, uint32_t *offset, uint8_t *out); +bool getRawUInt8(const void *data, uint32_t size, uint32_t *offset, uint8_t *out); bool setRawUInt8(void *data, uint32_t size, uint32_t *offset, uint8_t in); -bool getRawUInt16(void *data, uint32_t size, uint32_t *offset, uint16_t *out); +bool getRawUInt16(const void *data, uint32_t size, uint32_t *offset, uint16_t *out); bool setRawUInt16(void *data, uint32_t size, uint32_t *offset, uint16_t in); -bool getRawUInt32(void *data, uint32_t size, uint32_t *offset, uint32_t *out); +bool getRawUInt32(const void *data, uint32_t size, uint32_t *offset, uint32_t *out); bool setRawUInt32(void *data, uint32_t size, uint32_t *offset, uint32_t in); -bool getRawUInt64(void *data, uint32_t size, uint32_t *offset, uint64_t *out); +bool getRawUInt64(const void *data, uint32_t size, uint32_t *offset, uint64_t *out); bool setRawUInt64(void *data, uint32_t size, uint32_t *offset, uint64_t in); -bool getRawUFloat32(void *data, uint32_t size, uint32_t *offset, float& out); +bool getRawUFloat32(const void *data, uint32_t size, uint32_t *offset, float& out); bool setRawUFloat32(void *data, uint32_t size, uint32_t *offset, float in); uint32_t getRawStringSize(const std::string &outStr); -bool getRawString(void *data, uint32_t size, uint32_t *offset, std::string &outStr); +bool getRawString(const void *data, uint32_t size, uint32_t *offset, std::string &outStr); bool setRawString(void *data, uint32_t size, uint32_t *offset, const std::string &inStr); +bool getRawTimeT(const void *data, uint32_t size, uint32_t *offset, time_t& outStr); bool setRawTimeT(void *data, uint32_t size, uint32_t *offset, const time_t& inStr); -bool getRawTimeT(void *data, uint32_t size, uint32_t *offset, time_t& outStr); #endif diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 722eec9ec..21e0fcec7 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -84,7 +84,12 @@ class RsItem: public RsMemoryManagement::SmallObject virtual ~RsItem(); virtual void clear() = 0; - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) = 0; + virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) + { + std::cerr << "(EE) RsItem::print() called by an item using new serialization classes, but not derived! " << std::endl; +#warning This method should normally call serial_process(PRINT,ctx) + return out; + } void print_string(std::string &out, uint16_t indent = 0); /* source / destination id */ diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 878ec3e6b..349689c0b 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -2,6 +2,7 @@ #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" +#include "serialiser/rstlvlist.h" #include "retroshare/rsflags.h" #include "retroshare/rsids.h" @@ -183,6 +184,11 @@ class RsTypeSerializer template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsGenericIdType& member); template static uint32_t serial_size(const t_RsGenericIdType& /* member */); template static void print_data(const std::string& name,const t_RsGenericIdType& /* member */); + + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsTlvList& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsTlvList& member); + template static uint32_t serial_size(const t_RsTlvList& /* member */); + template static void print_data(const std::string& name,const t_RsTlvList& /* member */); }; //=================================================================================================// @@ -208,7 +214,35 @@ uint32_t RsTypeSerializer::serial_size(const t_RsGenericIdType -void RsTypeSerializer::print_data(const std::string& name,const t_RsGenericIdType& member) +void RsTypeSerializer::print_data(const std::string& /* name */,const t_RsGenericIdType& member) { std::cerr << " [RsGenericId<" << std::hex << UNIQUE_IDENTIFIER << ">] : " << member << std::endl; } + +//=================================================================================================// +// t_RsTlvList<> // +//=================================================================================================// + +template +bool RsTypeSerializer::serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsTlvList& member) +{ + return (*const_cast *>(&member)).SetTlv(data,size,&offset) ; +} + +template +bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsTlvList& member) +{ + return member.GetTlv(const_cast(data),size,&offset) ; +} + +template +uint32_t RsTypeSerializer::serial_size(const t_RsTlvList& member) +{ + return member.TlvSize(); +} + +template +void RsTypeSerializer::print_data(const std::string& /* name */,const t_RsTlvList& member) +{ + std::cerr << " [t_RsTlvString<" << std::hex << TLV_TYPE << ">] : size=" << member.mList.size() << std::endl; +} From e1350a0b34be63b63d566c639c55b5ead635d7f0 Mon Sep 17 00:00:00 2001 From: Konrad Date: Mon, 10 Apr 2017 22:58:23 +0200 Subject: [PATCH 068/230] Fixed: Re-selecting accounts via RsControlModule; Added: Sending feedback about incorrect password --- libresapi/src/api/RsControlModule.cpp | 38 ++++++++++++++++++++------- libresapi/src/api/RsControlModule.h | 1 + 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index 595509f09..f65c6058c 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -24,7 +24,9 @@ RsControlModule::RsControlModule(int argc, char **argv, StateTokenServer* sts, A mDataMtx("RsControlModule::mDataMtx"), mRunState(WAITING_INIT), mAutoLoginNextTime(false), - mWantPassword(false) + mWantPassword(false), + mPassword(""), + mPrevIsBad(false) { mStateToken = sts->getNewToken(); this->argc = argc; @@ -56,11 +58,14 @@ bool RsControlModule::processShouldExit() return mProcessShouldExit; } -bool RsControlModule::askForPassword(const std::string &title, const std::string &key_details, bool /* prev_is_bad */, std::string &password, bool& cancelled) +bool RsControlModule::askForPassword(const std::string &title, const std::string &key_details, bool prev_is_bad, std::string &password, bool& cancelled) { cancelled = false ; { RS_STACK_MUTEX(mDataMtx); // ********** LOCKED ********** + + mPrevIsBad = prev_is_bad; + if(mFixedPassword != "") { password = mFixedPassword; @@ -70,18 +75,25 @@ bool RsControlModule::askForPassword(const std::string &title, const std::string mWantPassword = true; mTitle = title; mKeyName = key_details; - mPassword = ""; + + if(mPassword != "") + { + password = mPassword; + mWantPassword = false; + mPassword = ""; + return true; + } + mStateTokenServer->replaceToken(mStateToken); } - bool wait = true; - while(wait) + int i = 0; + while(i<100) { usleep(5*1000); - RS_STACK_MUTEX(mDataMtx); // ********** LOCKED ********** - wait = mWantPassword; - if(!wait && mPassword != "") + + if(mPassword != "") { password = mPassword; mPassword = ""; @@ -89,6 +101,7 @@ bool RsControlModule::askForPassword(const std::string &title, const std::string mStateTokenServer->replaceToken(mStateToken); return true; } + i++; } return false; } @@ -175,8 +188,13 @@ void RsControlModule::run() std::cerr << "RsControlModule::run() LockAndLoadCertificates failed. Unexpected switch value: " << retVal << std::endl; break; } + + mLoadPeerId.clear(); + mPassword = ""; } + mFixedPassword = mPassword; + setRunState(WAITING_STARTUP); std::cerr << "RsControlModule: login ok, starting Retroshare worker threads..." << std::endl; @@ -302,12 +320,12 @@ void RsControlModule::handlePassword(Request &req, Response &resp) mPassword = passwd; mWantPassword = false; mStateTokenServer->replaceToken(mStateToken); - mFixedPassword = passwd; } resp.mDataStream << makeKeyValueReference("want_password", mWantPassword) - << makeKeyValueReference("key_name", mKeyName); + << makeKeyValueReference("key_name", mKeyName) + << makeKeyValueReference("prev_is_bad", mPrevIsBad); resp.mStateToken = mStateToken; resp.setOk(); } diff --git a/libresapi/src/api/RsControlModule.h b/libresapi/src/api/RsControlModule.h index 1323651fc..7e306405c 100644 --- a/libresapi/src/api/RsControlModule.h +++ b/libresapi/src/api/RsControlModule.h @@ -77,6 +77,7 @@ private: // to notify that a password callback is waiting // to answer the request, clear the flag and set the password bool mWantPassword; + bool mPrevIsBad; std::string mTitle; std::string mKeyName; std::string mPassword; From 9402b8e239a77b11c39a3df6aa9ed3be9433bd09 Mon Sep 17 00:00:00 2001 From: Konrad Date: Mon, 10 Apr 2017 23:42:22 +0200 Subject: [PATCH 069/230] Fixed: mFixedPassword remained empty after logging --- libresapi/src/api/RsControlModule.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index f65c6058c..f8e2d7e1e 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -67,7 +67,7 @@ bool RsControlModule::askForPassword(const std::string &title, const std::string mPrevIsBad = prev_is_bad; if(mFixedPassword != "") - { + { password = mFixedPassword; return true; } @@ -80,7 +80,6 @@ bool RsControlModule::askForPassword(const std::string &title, const std::string { password = mPassword; mWantPassword = false; - mPassword = ""; return true; } @@ -95,8 +94,7 @@ bool RsControlModule::askForPassword(const std::string &title, const std::string if(mPassword != "") { - password = mPassword; - mPassword = ""; + password = mPassword; mWantPassword = false; mStateTokenServer->replaceToken(mStateToken); return true; @@ -138,6 +136,7 @@ void RsControlModule::run() bool login_ok = false; while(!login_ok) { + mPassword = ""; // skip account selection if autologin is available if(initResult != RS_INIT_HAVE_ACCOUNT) setRunState(WAITING_ACCOUNT_SELECT); @@ -190,10 +189,10 @@ void RsControlModule::run() } mLoadPeerId.clear(); - mPassword = ""; } mFixedPassword = mPassword; + mPassword = ""; setRunState(WAITING_STARTUP); From 80e8769ed7cfe068533695ebab52bf9e92574f6d Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 11 Apr 2017 21:37:35 +0200 Subject: [PATCH 070/230] added missign file and converted BW control items --- libretroshare/src/serialiser/rsbwctrlitems.cc | 34 +-- libretroshare/src/serialiser/rsbwctrlitems.h | 44 ++- .../src/serialization/rstypeserializer.cc | 254 ++++++++++++++++++ 3 files changed, 284 insertions(+), 48 deletions(-) create mode 100644 libretroshare/src/serialization/rstypeserializer.cc diff --git a/libretroshare/src/serialiser/rsbwctrlitems.cc b/libretroshare/src/serialiser/rsbwctrlitems.cc index fbd314bb2..bd1f0341e 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.cc +++ b/libretroshare/src/serialiser/rsbwctrlitems.cc @@ -34,9 +34,17 @@ /*************************************************************************/ -RsBwCtrlAllowedItem::~RsBwCtrlAllowedItem() +RsItem *RsBwCtrlSerialiser::create_item(uint16_t service, uint8_t item_sub_id) { - return; + if(service != RS_SERVICE_TYPE_BWCTRL) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM: return new RsBwCtrlAllowedItem(); + default: + return NULL; + } } void RsBwCtrlAllowedItem::clear() @@ -44,27 +52,12 @@ void RsBwCtrlAllowedItem::clear() allowedBw = 0; } -std::ostream &RsBwCtrlAllowedItem::print(std::ostream &out, uint16_t indent) +void RsBwCtrlAllowedItem::serial_process(SerializeJob j,SerializeContext& ctx) { - printRsItemBase(out, "RsBwCtrlAllowedItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "AllowedBw: " << allowedBw; - out << std::endl; - - printRsItemEnd(out, "RsBwCtrlAllowedItem", indent); - return out; -} - - -uint32_t RsBwCtrlSerialiser::sizeAllowed(RsBwCtrlAllowedItem * /*item*/) -{ - uint32_t s = 8; /* header */ - s += GetTlvUInt32Size(); - - return s; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_BW,allowedBw,"allowedBw") ; } +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsBwCtrlSerialiser::serialiseAllowed(RsBwCtrlAllowedItem *item, void *data, uint32_t *pktsize) { @@ -200,6 +193,7 @@ RsItem *RsBwCtrlSerialiser::deserialise(void *data, uint32_t *pktsize) } /*************************************************************************/ +#endif diff --git a/libretroshare/src/serialiser/rsbwctrlitems.h b/libretroshare/src/serialiser/rsbwctrlitems.h index c1679c9c9..8b5cc8299 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.h +++ b/libretroshare/src/serialiser/rsbwctrlitems.h @@ -32,50 +32,38 @@ #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" +#include "serialization/rsserializer.h" +#include "serialization/rstypeserializer.h" + #define RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM 0x01 /**************************************************************************/ class RsBwCtrlAllowedItem: public RsItem { - public: - RsBwCtrlAllowedItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BWCTRL, - RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM) - { +public: + RsBwCtrlAllowedItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BWCTRL, RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM) + { setPriorityLevel(QOS_PRIORITY_RS_BWCTRL_ALLOWED_ITEM); - return; + return; } -virtual ~RsBwCtrlAllowedItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsBwCtrlAllowedItem() {} + virtual void clear(); - uint32_t allowedBw; // Units are bytes/sec => 4Gb/s; + void serial_process(SerializeJob j,SerializeContext& ctx); + uint32_t allowedBw; // Units are bytes/sec => 4Gb/s; }; -class RsBwCtrlSerialiser: public RsSerialType +class RsBwCtrlSerialiser: public RsSerializer { - public: - RsBwCtrlSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_BWCTRL) - { return; } -virtual ~RsBwCtrlSerialiser() - { return; } - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeAllowed(RsBwCtrlAllowedItem *); -virtual bool serialiseAllowed (RsBwCtrlAllowedItem *item, void *data, uint32_t *size); -virtual RsBwCtrlAllowedItem *deserialiseAllowed(void *data, uint32_t *size); - +public: + RsBwCtrlSerialiser() :RsSerializer(RS_SERVICE_TYPE_BWCTRL) {} + virtual ~RsBwCtrlSerialiser() {} + RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */); }; /**************************************************************************/ diff --git a/libretroshare/src/serialization/rstypeserializer.cc b/libretroshare/src/serialization/rstypeserializer.cc new file mode 100644 index 000000000..fc9563fe6 --- /dev/null +++ b/libretroshare/src/serialization/rstypeserializer.cc @@ -0,0 +1,254 @@ +#include "serialization/rsserializer.h" +#include "serialization/rstypeserializer.h" + +#include "serialiser/rsbaseserial.h" +#include "serialiser/rstlvkeys.h" + +#include "util/rsprint.h" + +#include + +static const uint32_t MAX_SERIALIZED_ARRAY_SIZE = 500 ; + +#ifdef REMOVE +template T ntoh(T t) +{ + if(sizeof(T) == 8) return t; + if(sizeof(T) == 4) return ntohl(t) ; + if(sizeof(T) == 2) return ntohs(t) ; + if(sizeof(T) == 1) return t ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; + return t; +} +template T hton(T t) +{ + if(sizeof(T) == 8) return t; + if(sizeof(T) == 4) return htonl(t) ; + if(sizeof(T) == 2) return htons(t) ; + if(sizeof(T) == 1) return t ; + + std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; + return t; +} +#endif + +//=================================================================================================// +// Integer types // +//=================================================================================================// + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) +{ + return setRawUInt8(data,size,&offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) +{ + return setRawUInt32(data,size,&offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint64_t& member) +{ + return setRawUInt64(data,size,&offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const time_t& member) +{ + return setRawTimeT(data,size,&offset,member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) +{ + return getRawUInt8(data,size,&offset,&member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) +{ + return getRawUInt32(data,size,&offset,&member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint64_t& member) +{ + return getRawUInt64(data,size,&offset,&member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, time_t& member) +{ + return getRawTimeT(data,size,&offset,member); +} +template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& /* member*/) +{ + return 1; +} +template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& /* member*/) +{ + return 4; +} +template<> uint32_t RsTypeSerializer::serial_size(const uint64_t& /* member*/) +{ + return 8; +} +template<> uint32_t RsTypeSerializer::serial_size(const time_t& /* member*/) +{ + return 8; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, const uint8_t & V) +{ + std::cerr << " [uint8_t ] " << n << ": " << V << std::endl; +} +template<> void RsTypeSerializer::print_data(const std::string& n, const uint16_t& V) +{ + std::cerr << " [uint16_t ] " << n << ": " << V << std::endl; +} +template<> void RsTypeSerializer::print_data(const std::string& n, const uint32_t& V) +{ + std::cerr << " [uint32_t ] " << n << ": " << V << std::endl; +} +template<> void RsTypeSerializer::print_data(const std::string& n, const uint64_t& V) +{ + std::cerr << " [uint64_t ] " << n << ": " << V << std::endl; +} +template<> void RsTypeSerializer::print_data(const std::string& n, const time_t& V) +{ + std::cerr << " [time_t ] " << n << ": " << V << " (" << time(NULL)-V << " secs ago)" << std::endl; +} + + +//=================================================================================================// +// FLoats // +//=================================================================================================// + +template<> uint32_t RsTypeSerializer::serial_size(const float&){ return 4; } + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t& offset, const float& f) +{ + return setRawUFloat32(data,size,&offset,f) ; +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, float& f) +{ + return getRawUFloat32(data,size,&offset,f) ; +} +template<> void RsTypeSerializer::print_data(const std::string& n, const float& V) +{ + std::cerr << " [float ] " << n << ": " << V << std::endl; +} + + +//=================================================================================================// +// TlvString with subtype // +//=================================================================================================// + +template<> uint32_t RsTypeSerializer::serial_size(uint16_t /* type_subtype */,const std::string& s) +{ + return GetTlvStringSize(s) ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,uint16_t type_substring,const std::string& s) +{ + return SetTlvString(data,size,&offset,type_substring,s) ; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,uint16_t type_substring,std::string& s) +{ + return GetTlvString((void*)data,size,&offset,type_substring,s) ; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, uint16_t type_substring,const std::string& V) +{ + std::cerr << " [TlvString ] " << n << ": type=" << std::hex < uint32_t RsTypeSerializer::serial_size(uint16_t /* type_subtype */,const uint32_t& s) +{ + return GetTlvUInt32Size() ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,uint16_t sub_type,const uint32_t& s) +{ + return SetTlvUInt32(data,size,&offset,sub_type,s) ; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,uint16_t sub_type,uint32_t& s) +{ + return GetTlvUInt32((void*)data,size,&offset,sub_type,&s) ; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, uint16_t sub_type,const uint32_t& V) +{ + std::cerr << " [TlvUInt32 ] " << n << ": type=" << std::hex < void RsTypeSerializer::print_data(const std::string& n, const std::string& V) +{ + std::cerr << " [std::string] " << n << ": " << V << std::endl; +} + +//=================================================================================================// +// Binary blocks // +//=================================================================================================// + +template<> uint32_t RsTypeSerializer::serial_size(const RsTypeSerializer::TlvMemBlock_proxy& r) { return 4 + r.second ; } + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[],uint32_t size,uint32_t& offset,RsTypeSerializer::TlvMemBlock_proxy& r) +{ + uint32_t saved_offset = offset ; + + bool ok = deserialize(data,size,offset,r.second) ; + + r.first = (uint8_t*)rs_malloc(r.second) ; + + ok = ok && NULL != r.first; + + memcpy(r.first,&data[offset],r.second) ; + + if(!ok) + offset = saved_offset ; + + return ok; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[],uint32_t size,uint32_t& offset,const RsTypeSerializer::TlvMemBlock_proxy& r) +{ + uint32_t saved_offset = offset ; + + bool ok = serialize(data,size,offset,r.second) ; + + memcpy(&data[offset],r.first,r.second) ; + + if(!ok) + offset = saved_offset ; + + return ok; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, const RsTypeSerializer::TlvMemBlock_proxy& s) +{ + std::cerr << " [Binary data] " << n << ", length=" << s.second << " data=" << RsUtil::BinToHex(s.first,std::min(50u,s.second)) << ((s.second>50)?"...":"") << std::endl; +} + +//=================================================================================================// +// Signatures // +//=================================================================================================// + +template<> uint32_t RsTypeSerializer::serial_size(const RsTlvKeySignature& s) +{ + return s.TlvSize() ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const RsTlvKeySignature& s) +{ + return s.SetTlv(data,size,&offset) ; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,RsTlvKeySignature& s) +{ + return s.GetTlv((void*)data,size,&offset) ; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, const RsTlvKeySignature& s) +{ + std::cerr << " [Signature] " << n << " : key_id=" << s.keyId << ", length=" << s.signData.bin_len << std::endl; +} From 3453a3e57dcddcd514a1be031cfd37a76a993790 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 11 Apr 2017 23:05:27 +0200 Subject: [PATCH 071/230] switched FileTransfer items to new serialization --- libretroshare/src/chat/rschatitems.cc | 2 +- .../src/serialiser/rsfiletransferitems.cc | 765 ++---------------- .../src/serialiser/rsfiletransferitems.h | 103 +-- libretroshare/src/serialiser/rstlvfileitem.h | 2 +- .../src/serialization/rstypeserializer.cc | 60 +- 5 files changed, 110 insertions(+), 822 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index a430b1119..88e7abe8a 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -87,7 +87,7 @@ void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, Serialize RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,nick,"nick") ; if(include_signature) - RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; + RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) diff --git a/libretroshare/src/serialiser/rsfiletransferitems.cc b/libretroshare/src/serialiser/rsfiletransferitems.cc index 0caabc2f8..0be0412b7 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.cc +++ b/libretroshare/src/serialiser/rsfiletransferitems.cc @@ -28,6 +28,8 @@ #include "serialiser/rstlvbase.h" #include "serialiser/rsfiletransferitems.h" +#include "serialization/rstypeserializer.h" + /*** * #define RSSERIAL_DEBUG 1 * #define DEBUG_TRANSFERS 1 @@ -40,758 +42,115 @@ #include -/**********************************************************************************************/ -/* SERIALISER STUFF */ -/**********************************************************************************************/ - -RsFileTransferItem *RsFileTransferSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemService(rstype)) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_FT_CACHE_ITEM: return deserialise_RsFileTransferCacheItem(data, *pktsize); - case RS_PKT_SUBTYPE_FT_DATA_REQUEST: return deserialise_RsFileTransferDataRequestItem(data, *pktsize); - case RS_PKT_SUBTYPE_FT_DATA: return deserialise_RsFileTransferDataItem(data, *pktsize); - case RS_PKT_SUBTYPE_FT_CHUNK_MAP_REQUEST: return deserialise_RsFileTransferChunkMapRequestItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_FT_CHUNK_MAP: return deserialise_RsFileTransferChunkMapItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_FT_CHUNK_CRC_REQUEST: return deserialise_RsFileTransferSingleChunkCrcRequestItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_FT_CHUNK_CRC: return deserialise_RsFileTransferSingleChunkCrcItem(data,*pktsize) ; - default: - std::cerr << "RsFileTransferSerialiser::deserialise(): Could not de-serialise item. SubPacket id = " << std::hex << getRsItemSubType(rstype) << " id = " << rstype << std::dec << std::endl; - return NULL; - } - return NULL; -} - -/**********************************************************************************************/ -/* OUTPUTS */ -/**********************************************************************************************/ - -std::ostream& RsFileTransferCacheItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferCacheItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "CacheId: " << cacheType << "/" << cacheSubId << std::endl; - file.print(out, int_Indent); - printRsItemEnd(out, "RsFileTransferCacheItem", indent); - return out; -} -std::ostream& RsFileTransferDataRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferDataRequestItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "FileOffset: " << fileoffset; - out << " ChunkSize: " << chunksize << std::endl; - file.print(out, int_Indent); - printRsItemEnd(out, "RsFileTransferDataRequestItem", indent); - return out; -} -std::ostream& RsFileTransferChunkMapItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferChunkMapItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); out << "PeerId: " << PeerId() << std::endl ; - printIndent(out, int_Indent); out << " hash: " << hash << std::endl ; - printIndent(out, int_Indent); out << "chunks: " << std::hex << compressed_map._map[0] << std::dec << "..." << std::endl ; - printRsItemEnd(out, "RsFileTransferChunkMapItem", indent); - return out; -} -std::ostream& RsFileTransferChunkMapRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferChunkMapRequestItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); out << "PeerId: " << PeerId() << std::endl ; - printIndent(out, int_Indent); out << " hash: " << hash << std::endl ; - printRsItemEnd(out, "RsFileTransferChunkMapRequestItem", indent); - return out; -} -std::ostream& RsFileTransferSingleChunkCrcRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferSingleChunkCrcRequestItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); out << "PeerId: " << PeerId() << std::endl ; - printIndent(out, int_Indent); out << " hash: " << hash << std::endl ; - printIndent(out, int_Indent); out << " chunk: " << chunk_number << "..." << std::endl ; - printRsItemEnd(out, "RsFileTransferSingleChunkCrcRequestItem", indent); - return out; -} -std::ostream& RsFileTransferSingleChunkCrcItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferSingleChunkCrcItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); out << "PeerId: " << PeerId() << std::endl ; - printIndent(out, int_Indent); out << " hash: " << hash << std::endl ; - printIndent(out, int_Indent); out << " chunk: " << chunk_number << "..." << std::endl ; - printIndent(out, int_Indent); out << " sha1: " << check_sum.toStdString() << "..." << std::endl ; - printRsItemEnd(out, "RsFileTransferSingleChunkCrcItem", indent); - return out; -} -std::ostream& RsFileTransferDataItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferDataItem", indent); - uint16_t int_Indent = indent + 2; - fd.print(out, int_Indent); - printRsItemEnd(out, "RsFileTransferDataItem", indent); - return out; -} - -/**********************************************************************************************/ -/* SERIAL SIZE */ -/**********************************************************************************************/ - -uint32_t RsFileTransferDataRequestItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += 8; /* offset */ - s += 4; /* chunksize */ - s += file.TlvSize(); - - return s; -} -uint32_t RsFileTransferCacheItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += 4; /* type/subid */ - s += file.TlvSize(); - - return s; -} -uint32_t RsFileTransferDataItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += fd.TlvSize(); - - return s; -} -uint32_t RsFileTransferChunkMapRequestItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += 1 ; // is_client - s += hash.serial_size() ; // hash - - return s; -} -uint32_t RsFileTransferChunkMapItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += 1 ; // is_client - s += hash.serial_size() ; // hash - s += 4 ; // compressed map size - s += 4 * compressed_map._map.size() ; // compressed chunk map - - return s; -} -uint32_t RsFileTransferSingleChunkCrcItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += hash.serial_size() ; // hash - s += 4 ; // chunk number - s += check_sum.serial_size() ; // sha1 - - return s; -} -uint32_t RsFileTransferSingleChunkCrcRequestItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += hash.serial_size() ; // hash - s += 4 ; // chunk number - - return s; -} - -/*************************************************************************/ - void RsFileTransferDataRequestItem::clear() { file.TlvClear(); fileoffset = 0; chunksize = 0; } -void RsFileTransferCacheItem::clear() -{ - cacheType = 0; - cacheSubId = 0; - file.TlvClear(); -} void RsFileTransferDataItem::clear() { fd.TlvClear(); } -/**********************************************************************************************/ -/* SERIALISATION */ -/**********************************************************************************************/ - -bool RsFileTransferItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) +void RsFileTransferDataRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; + RsTypeSerializer::serial_process (j,ctx,fileoffset,"fileoffset") ; + RsTypeSerializer::serial_process (j,ctx,chunksize, "chunksize") ; + RsTypeSerializer::serial_process(j,ctx,file, "file") ; } -/* serialise the data to the buffer */ -bool RsFileTransferChunkMapRequestItem::serialise(void *data, uint32_t& pktsize) +void RsFileTransferDataItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt8(data, tlvsize, &offset, is_client); - ok &= hash.serialise(data, tlvsize, offset) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileItemSerialiser::serialiseData() Size Error! " << std::endl; - } - - return ok; -} -bool RsFileTransferSingleChunkCrcRequestItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= hash.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, chunk_number) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileItemSerialiser::serialiseData() Size Error! " << std::endl; - } - - return ok; -} -bool RsFileTransferSingleChunkCrcItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= hash.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, chunk_number) ; - - ok &= check_sum.serialise(data,tlvsize,offset) ; - - //ok &= setRawUInt32(data, tlvsize, &offset, check_sum.fourbytes[0]) ; - //ok &= setRawUInt32(data, tlvsize, &offset, check_sum.fourbytes[1]) ; - //ok &= setRawUInt32(data, tlvsize, &offset, check_sum.fourbytes[2]) ; - //ok &= setRawUInt32(data, tlvsize, &offset, check_sum.fourbytes[3]) ; - //ok &= setRawUInt32(data, tlvsize, &offset, check_sum.fourbytes[4]) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileItemSerialiser::serialiseData() Size Error! " << std::endl; - } - - return ok; -} -bool RsFileTransferChunkMapItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt8(data, tlvsize, &offset, is_client); - ok &= hash.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, compressed_map._map.size()); - - for(uint32_t i=0;i(j,ctx,fd,"fd") ; } -/* serialise the data to the buffer */ -bool RsFileTransferDataItem::serialise(void *data, uint32_t& pktsize) +void RsFileTransferChunkMapRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= fd.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileItemSerialiser::serialiseData() Size Error! " << std::endl; - } - -#ifdef DEBUG_TRANSFERS - std::cerr << "RsFileItemSerialiser::serialiseData() at: " << RsUtil::AccurateTimeString() << std::endl; - print(std::cerr, 10); -#endif - - return ok; + RsTypeSerializer::serial_process (j,ctx,is_client,"is_client") ; + RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; } -/* serialise the data to the buffer */ -bool RsFileTransferDataRequestItem::serialise(void *data, uint32_t& pktsize) +void RsFileTransferChunkMapItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, fileoffset); - ok &= setRawUInt32(data, tlvsize, &offset, chunksize); - ok &= file.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileTransferDataRequestItem::serialise() Size Error! " << std::endl; - } - - /*** Debugging Transfer rates. - * print timestamp, and file details so we can workout packet lags. - ***/ - -#ifdef DEBUG_TRANSFERS - std::cerr << "RsFileTransferDataRequestItem::serialise() at: " << RsUtil::AccurateTimeString() << std::endl; - print(std::cerr, 10); -#endif - - return ok; + RsTypeSerializer::serial_process (j,ctx,is_client, "is_client") ; + RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; + RsTypeSerializer::serial_process (j,ctx,compressed_map,"compressed_map") ; } -/* serialise the data to the buffer */ -bool RsFileTransferCacheItem::serialise(void *data, uint32_t& pktsize) +void RsFileTransferSingleChunkCrcRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt16(data, tlvsize, &offset, cacheType); - ok &= setRawUInt16(data, tlvsize, &offset, cacheSubId); - ok &= file.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseItem() Size Error! " << std::endl; -#endif - } - - return ok; + RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; + RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; } -/**********************************************************************************************/ -/* DESERIALISATION */ -/**********************************************************************************************/ - -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferCacheItem(void *data, uint32_t pktsize) +void RsFileTransferSingleChunkCrcItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CACHE_ITEM != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferCacheItem(): wong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferCacheItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferCacheItem *item = new RsFileTransferCacheItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt16(data, rssize, &offset, &(item->cacheType)); - ok &= getRawUInt16(data, rssize, &offset, &(item->cacheSubId)); - ok &= item->file.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; + RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; + RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; + RsTypeSerializer::serial_process (j,ctx,check_sum, "check_sum") ; } -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapRequestItem(void *data, uint32_t pktsize) +//===================================================================================================// +// CompressedChunkMap // +//===================================================================================================// + +template<> uint32_t RsTypeSerializer::serial_size(const CompressedChunkMap& s) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CHUNK_MAP_REQUEST != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapRequestItem(): wong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapRequestItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferChunkMapRequestItem *item = new RsFileTransferChunkMapRequestItem(); - item->clear(); - - /* skip the header */ - offset += 8; - uint8_t tmp ; - ok &= getRawUInt8(data, rssize, &offset, &tmp); item->is_client = tmp; - ok &= item->hash.deserialise(data, rssize, offset) ; // File hash - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; + return 4 + 4*s._map.size() ; } -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferDataItem(void *data, uint32_t pktsize) +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const CompressedChunkMap& s) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); + bool ok = true ; - uint32_t offset = 0; + ok &= setRawUInt32(data, size, &offset, s._map.size()); - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_DATA != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferDataItem(): wong subtype!" << std::endl; - return NULL; /* wrong type */ - } + for(uint32_t i=0;iclear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->fd.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - -#ifdef DEBUG_TRANSFERS - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferDataItem() at: " << RsUtil::AccurateTimeString() << std::endl; - item->print(std::cerr, 10); -#endif - - return item; + return ok; } - -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferDataRequestItem(void *data, uint32_t pktsize) +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,CompressedChunkMap& s) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_DATA_REQUEST != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferDataRequestItem(): wrong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferDataRequestItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - RsFileTransferDataRequestItem *item = new RsFileTransferDataRequestItem() ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt64(data, rssize, &offset, &item->fileoffset); - ok &= getRawUInt32(data, rssize, &offset, &item->chunksize); - ok &= item->file.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - /*** Debugging Transfer rates. - * print timestamp, and file details so we can workout packet lags. - ***/ - -#ifdef DEBUG_TRANSFERS - std::cerr << "RsFileItemSerialiser::deserialise_RsFileTransferDataRequestItem() at: " << RsUtil::AccurateTimeString() << std::endl; - item->print(std::cerr, 10); -#endif - - return item; -} -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapItem(void *data, uint32_t pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CHUNK_MAP != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapItem(): wrong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferChunkMapItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferChunkMapItem *item = new RsFileTransferChunkMapItem(); - item->clear(); - - /* skip the header */ - offset += 8; - uint8_t tmp ; - ok &= getRawUInt8(data, rssize, &offset, &tmp); item->is_client = tmp; - ok &= item->hash.deserialise(data, rssize, offset) ; // File hash - uint32_t size =0; - ok &= getRawUInt32(data, rssize, &offset, &size); + uint32_t S =0; + bool ok = getRawUInt32(data, size, &offset, &S); if(ok) { - item->compressed_map._map.resize(size) ; + s._map.resize(S) ; - for(uint32_t i=0;icompressed_map._map[i])); + for(uint32_t i=0;i void RsTypeSerializer::print_data(const std::string& n, const CompressedChunkMap& s) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CHUNK_CRC_REQUEST != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferSingleChunkCrcRequestItem(): wrong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferSingleChunkCrcRequestItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferSingleChunkCrcRequestItem *item = new RsFileTransferSingleChunkCrcRequestItem(); - item->clear(); - - /* skip the header */ - offset += 8; - ok &= item->hash.deserialise(data, rssize, offset) ; - ok &= getRawUInt32(data, rssize, &offset, &(item->chunk_number)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; + std::cerr << " [Compressed chunk map] " << n << " : length=" << s._map.size() << std::endl; } -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferSingleChunkCrcItem(void *data, uint32_t pktsize) + +//===================================================================================================// +// Serializer // +//===================================================================================================// + +RsItem *RsFileTransferSerialiser::create_item(uint16_t service_type,uint8_t item_type) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); + if(service_type != RS_SERVICE_TYPE_FILE_TRANSFER) + return NULL ; - uint32_t offset = 0; - - if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CHUNK_CRC != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferSingleChunkCrcItem(): wrong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferSingleChunkCrcItem(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferSingleChunkCrcItem *item = new RsFileTransferSingleChunkCrcItem(); - item->clear(); - - /* skip the header */ - offset += 8; - ok &= item->hash.deserialise(data, rssize, offset) ; - ok &= getRawUInt32(data, rssize, &offset, &(item->chunk_number)); - ok &= item->check_sum.deserialise(data,rssize,offset) ; - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; + switch(item_type) + { + case RS_PKT_SUBTYPE_FT_DATA_REQUEST : return new RsFileTransferDataRequestItem(); + case RS_PKT_SUBTYPE_FT_DATA : return new RsFileTransferDataItem(); + case RS_PKT_SUBTYPE_FT_CHUNK_MAP_REQUEST : return new RsFileTransferChunkMapRequestItem(); + case RS_PKT_SUBTYPE_FT_CHUNK_MAP : return new RsFileTransferChunkMapItem(); + case RS_PKT_SUBTYPE_FT_CHUNK_CRC_REQUEST : return new RsFileTransferSingleChunkCrcRequestItem(); + case RS_PKT_SUBTYPE_FT_CHUNK_CRC : return new RsFileTransferSingleChunkCrcItem() ; + default: + return NULL ; + } } -/*************************************************************************/ diff --git a/libretroshare/src/serialiser/rsfiletransferitems.h b/libretroshare/src/serialiser/rsfiletransferitems.h index fa989861d..50b3c2a26 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.h +++ b/libretroshare/src/serialiser/rsfiletransferitems.h @@ -29,10 +29,10 @@ #include "retroshare/rstypes.h" #include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" #include "serialiser/rstlvfileitem.h" #include "serialiser/rsserviceids.h" +#include "serialization/rsserializer.h" const uint8_t RS_PKT_SUBTYPE_FT_DATA_REQUEST = 0x01; const uint8_t RS_PKT_SUBTYPE_FT_DATA = 0x02; @@ -53,20 +53,11 @@ const uint8_t RS_PKT_SUBTYPE_FT_CACHE_REQUEST = 0x0B; class RsFileTransferItem: public RsItem { public: - RsFileTransferItem(uint8_t ft_subtype) - : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_FILE_TRANSFER,ft_subtype) - {} + RsFileTransferItem(uint8_t ft_subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_FILE_TRANSFER,ft_subtype) {} virtual ~RsFileTransferItem() {} - virtual bool serialise(void *data,uint32_t& size) = 0 ; - virtual uint32_t serial_size() = 0 ; - - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) = 0; virtual void clear() = 0 ; - - protected: - bool serialise_header(void *data, uint32_t& pktsize, uint32_t& tlvsize, uint32_t& offset) ; }; class RsFileTransferDataRequestItem: public RsFileTransferItem @@ -77,13 +68,9 @@ class RsFileTransferDataRequestItem: public RsFileTransferItem setPriorityLevel(QOS_PRIORITY_RS_FILE_REQUEST) ; } virtual ~RsFileTransferDataRequestItem() {} - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); // Private data part. // @@ -103,11 +90,9 @@ class RsFileTransferDataItem: public RsFileTransferItem } virtual ~RsFileTransferDataItem() { clear() ; } - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear(); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void clear(); // Private data part. // @@ -122,10 +107,9 @@ class RsFileTransferChunkMapRequestItem: public RsFileTransferItem setPriorityLevel(QOS_PRIORITY_RS_FILE_MAP_REQUEST) ; } virtual ~RsFileTransferChunkMapRequestItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); // Private data part. // @@ -142,11 +126,9 @@ class RsFileTransferChunkMapItem: public RsFileTransferItem setPriorityLevel(QOS_PRIORITY_RS_FILE_MAP) ; } virtual ~RsFileTransferChunkMapItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void clear() {} // Private data part. // @@ -163,11 +145,9 @@ class RsFileTransferSingleChunkCrcRequestItem: public RsFileTransferItem setPriorityLevel(QOS_PRIORITY_RS_CHUNK_CRC_REQUEST) ; } virtual ~RsFileTransferSingleChunkCrcRequestItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void clear() {} // Private data part. // @@ -183,11 +163,9 @@ class RsFileTransferSingleChunkCrcItem: public RsFileTransferItem setPriorityLevel(QOS_PRIORITY_RS_CHUNK_CRC) ; } virtual ~RsFileTransferSingleChunkCrcItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void clear() {} // Private data part. // @@ -196,65 +174,16 @@ class RsFileTransferSingleChunkCrcItem: public RsFileTransferItem Sha1CheckSum check_sum ; // CRC32 map of the file. }; -class RsFileTransferCacheItem: public RsFileTransferItem -{ - public: - RsFileTransferCacheItem() :RsFileTransferItem(RS_PKT_SUBTYPE_FT_CACHE_ITEM) - { - setPriorityLevel(QOS_PRIORITY_RS_CACHE_ITEM); - } - - virtual ~RsFileTransferCacheItem(){ clear() ; } - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); - - // private part. - // - uint16_t cacheType; - uint16_t cacheSubId; - RsTlvFileItem file; /* file information */ -}; - - /**************************************************************************/ -class RsFileTransferSerialiser: public RsSerialType +class RsFileTransferSerialiser: public RsSerializer { public: - RsFileTransferSerialiser(): RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_FILE_TRANSFER) {} + RsFileTransferSerialiser(): RsSerializer(RS_SERVICE_TYPE_FILE_TRANSFER) {} virtual ~RsFileTransferSerialiser() {} - virtual uint32_t size(RsItem *item) - { - RsFileTransferItem *ftitem = dynamic_cast(item); - if (!ftitem) - { - return 0; - } - return ftitem->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - RsFileTransferItem *ftitem = dynamic_cast(item); - if (!ftitem) - { - return false; - } - return ftitem->serialise(data,*size) ; - } - virtual RsFileTransferItem *deserialise(void *data, uint32_t *size); - - private: - RsFileTransferItem *deserialise_RsFileTransferCacheItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferChunkMapRequestItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferChunkMapItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferDataRequestItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferDataItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferSingleChunkCrcItem(void *data, uint32_t pktsize); - RsFileTransferItem *deserialise_RsFileTransferSingleChunkCrcRequestItem(void *data, uint32_t pktsize); + RsItem *create_item(uint16_t service_type,uint8_t item_type) ; }; diff --git a/libretroshare/src/serialiser/rstlvfileitem.h b/libretroshare/src/serialiser/rstlvfileitem.h index 62745b658..1a474e60c 100644 --- a/libretroshare/src/serialiser/rstlvfileitem.h +++ b/libretroshare/src/serialiser/rstlvfileitem.h @@ -42,7 +42,7 @@ virtual ~RsTlvFileItem() { return; } virtual uint32_t TlvSize() const; virtual void TlvClear(); virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const; -virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); +virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); virtual std::ostream &print(std::ostream &out, uint16_t indent) const; uint64_t filesize; /// Mandatory: size of file to be downloaded diff --git a/libretroshare/src/serialization/rstypeserializer.cc b/libretroshare/src/serialization/rstypeserializer.cc index fc9563fe6..5a8def1bd 100644 --- a/libretroshare/src/serialization/rstypeserializer.cc +++ b/libretroshare/src/serialization/rstypeserializer.cc @@ -10,34 +10,15 @@ static const uint32_t MAX_SERIALIZED_ARRAY_SIZE = 500 ; -#ifdef REMOVE -template T ntoh(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return ntohl(t) ; - if(sizeof(T) == 2) return ntohs(t) ; - if(sizeof(T) == 1) return t ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in ntoh<>" << std::endl; - return t; -} -template T hton(T t) -{ - if(sizeof(T) == 8) return t; - if(sizeof(T) == 4) return htonl(t) ; - if(sizeof(T) == 2) return htons(t) ; - if(sizeof(T) == 1) return t ; - - std::cerr << "(EE) unhandled type of size " << sizeof(T) << " in hton<>" << std::endl; - return t; -} -#endif - //=================================================================================================// // Integer types // //=================================================================================================// -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const bool& member) +{ + return setRawUInt8(data,size,&offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint8_t& member) { return setRawUInt8(data,size,&offset,member); } @@ -53,6 +34,14 @@ template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint3 { return setRawTimeT(data,size,&offset,member); } + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, bool& member) +{ + uint8_t m ; + bool ok = getRawUInt8(data,size,&offset,&m); + member = m ; + return ok; +} template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint8_t& member) { return getRawUInt8(data,size,&offset,&member); @@ -69,6 +58,11 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz { return getRawTimeT(data,size,&offset,member); } + +template<> uint32_t RsTypeSerializer::serial_size(const bool& /* member*/) +{ + return 1; +} template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& /* member*/) { return 1; @@ -86,6 +80,10 @@ template<> uint32_t RsTypeSerializer::serial_size(const time_t& /* member*/) return 8; } +template<> void RsTypeSerializer::print_data(const std::string& n, const bool & V) +{ + std::cerr << " [bool ] " << n << ": " << V << std::endl; +} template<> void RsTypeSerializer::print_data(const std::string& n, const uint8_t & V) { std::cerr << " [uint8_t ] " << n << ": " << V << std::endl; @@ -230,25 +228,27 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const RsTypeS } //=================================================================================================// -// Signatures // +// TlvItems // //=================================================================================================// -template<> uint32_t RsTypeSerializer::serial_size(const RsTlvKeySignature& s) +template<> uint32_t RsTypeSerializer::serial_size(const RsTlvItem& s) { return s.TlvSize() ; } -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const RsTlvKeySignature& s) +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const RsTlvItem& s) { return s.SetTlv(data,size,&offset) ; } -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,RsTlvKeySignature& s) +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,RsTlvItem& s) { return s.GetTlv((void*)data,size,&offset) ; } -template<> void RsTypeSerializer::print_data(const std::string& n, const RsTlvKeySignature& s) +template<> void RsTypeSerializer::print_data(const std::string& n, const RsTlvItem& s) { - std::cerr << " [Signature] " << n << " : key_id=" << s.keyId << ", length=" << s.signData.bin_len << std::endl; + // can we call TlvPrint inside this? + + std::cerr << " [" << typeid(s).name() << "] " << n << std::endl; } From aa81cc16d0ba49d7aa151fa766ae179cd1076f2a Mon Sep 17 00:00:00 2001 From: Konrad Date: Wed, 12 Apr 2017 20:24:18 +0200 Subject: [PATCH 072/230] Added: Functions for handling PGP account details requests --- libresapi/src/api/PeersHandler.cpp | 116 +++++++++++++++++++++++++++++ libresapi/src/api/PeersHandler.h | 3 + 2 files changed, 119 insertions(+) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index f48beb2f6..14cd1b7c6 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -119,6 +119,8 @@ PeersHandler::PeersHandler(StateTokenServer* sts, RsNotify* notify, RsPeers *pee addResourceHandler("set_state_string", this, &PeersHandler::handleSetStateString); addResourceHandler("get_custom_state_string", this, &PeersHandler::handleGetCustomStateString); addResourceHandler("set_custom_state_string", this, &PeersHandler::handleSetCustomStateString); + addResourceHandler("get_pgp_options", this, &PeersHandler::handleGetPGPOptions); + addResourceHandler("set_pgp_options", this, &PeersHandler::handleSetPGPOptions); addResourceHandler("examine_cert", this, &PeersHandler::handleExamineCert); } @@ -529,6 +531,120 @@ void PeersHandler::handleExamineCert(Request &req, Response &resp) } } +void PeersHandler::handleGetPGPOptions(Request& req, Response& resp) +{ + std::string pgp_id; + req.mStream << makeKeyValueReference("pgp_id", pgp_id); + + RsPgpId pgp(pgp_id); + RsPeerDetails detail; + + if(!rsPeers->getGPGDetails(pgp, detail)) + { + resp.setFail(); + return; + } + + std::string pgp_key = rsPeers->getPGPKey(detail.gpg_id, false); + + resp.mDataStream << makeKeyValue("pgp_fingerprint", detail.fpr.toStdString()); + resp.mDataStream << makeKeyValueReference("pgp_key", pgp_key); + + resp.mDataStream << makeKeyValue("direct_transfer", detail.service_perm_flags & RS_NODE_PERM_DIRECT_DL); + resp.mDataStream << makeKeyValue("allow_push", detail.service_perm_flags & RS_NODE_PERM_ALLOW_PUSH); + resp.mDataStream << makeKeyValue("require_WL", detail.service_perm_flags & RS_NODE_PERM_REQUIRE_WL); + + resp.mDataStream << makeKeyValue("own_sign", detail.ownsign); + resp.mDataStream << makeKeyValue("trustLvl", detail.trustLvl); + + uint32_t max_upload_speed = 0; + uint32_t max_download_speed = 0; + + rsPeers->getPeerMaximumRates(pgp, max_upload_speed, max_download_speed); + + resp.mDataStream << makeKeyValueReference("maxUploadSpeed", max_upload_speed); + resp.mDataStream << makeKeyValueReference("maxDownloadSpeed", max_download_speed); + + StreamBase& signersStream = resp.mDataStream.getStreamToMember("gpg_signers"); + + // mark as list (in case list is empty) + signersStream.getStreamToMember(); + + for(std::list::const_iterator it(detail.gpgSigners.begin()); it != detail.gpgSigners.end(); ++it) + { + RsPeerDetails detail; + if(!rsPeers->getGPGDetails(*it, detail)) + continue; + + std::string pgp_id = (*it).toStdString(); + std::string name = detail.name; + + signersStream.getStreamToMember() + << makeKeyValueReference("pgp_id", pgp_id) + << makeKeyValueReference("name", name); + } + + resp.setOk(); +} + +void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) +{ + std::string pgp_id; + req.mStream << makeKeyValueReference("pgp_id", pgp_id); + + RsPgpId pgp(pgp_id); + RsPeerDetails detail; + + if(!rsPeers->getGPGDetails(pgp, detail)) + { + resp.setFail(); + return; + } + + int trustLvl; + req.mStream << makeKeyValueReference("trustLvl", trustLvl); + + if(trustLvl != (int)detail.trustLvl) + rsPeers->trustGPGCertificate(pgp, trustLvl); + + int max_upload_speed; + int max_download_speed; + + req.mStream << makeKeyValueReference("max_upload_speed", max_upload_speed); + req.mStream << makeKeyValueReference("max_download_speed", max_download_speed); + + rsPeers->setPeerMaximumRates(pgp, (uint32_t)max_upload_speed, (uint32_t)max_download_speed); + + bool direct_transfer; + bool allow_push; + bool require_WL; + + req.mStream << makeKeyValueReference("direct_transfer", direct_transfer); + req.mStream << makeKeyValueReference("allow_push", allow_push); + req.mStream << makeKeyValueReference("require_WL", require_WL); + + ServicePermissionFlags flags(0); + + if(direct_transfer) + flags = flags | RS_NODE_PERM_DIRECT_DL; + if(allow_push) + flags = flags | RS_NODE_PERM_ALLOW_PUSH; + if(require_WL) + flags = flags | RS_NODE_PERM_REQUIRE_WL; + + rsPeers->setServicePermissionFlags(pgp, flags); + + bool own_sign; + req.mStream << makeKeyValueReference("own_sign", own_sign); + + if(own_sign) + rsPeers->signGPGCertificate(pgp); + + resp.mStateToken = getCurrentStateToken(); + + resp.setOk(); +} + StateToken PeersHandler::getCurrentStateToken() { RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ diff --git a/libresapi/src/api/PeersHandler.h b/libresapi/src/api/PeersHandler.h index 15d231c10..5ae393b2f 100644 --- a/libresapi/src/api/PeersHandler.h +++ b/libresapi/src/api/PeersHandler.h @@ -41,6 +41,9 @@ private: void handleGetCustomStateString(Request& req, Response& resp); void handleSetCustomStateString(Request& req, Response& resp); + void handleGetPGPOptions(Request& req, Response& resp); + void handleSetPGPOptions(Request& req, Response& resp); + // a helper which ensures proper mutex locking StateToken getCurrentStateToken(); From dcc8c6e4c35a35c5f8a775781ecc92a9b3e35cb9 Mon Sep 17 00:00:00 2001 From: Konrad Date: Thu, 13 Apr 2017 13:31:32 +0200 Subject: [PATCH 073/230] Changed: Using PeersHandler::mRsPeers instead of rsPeers --- libresapi/src/api/PeersHandler.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 14cd1b7c6..8473bce04 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -539,13 +539,13 @@ void PeersHandler::handleGetPGPOptions(Request& req, Response& resp) RsPgpId pgp(pgp_id); RsPeerDetails detail; - if(!rsPeers->getGPGDetails(pgp, detail)) + if(!mRsPeers->getGPGDetails(pgp, detail)) { resp.setFail(); return; } - std::string pgp_key = rsPeers->getPGPKey(detail.gpg_id, false); + std::string pgp_key = mRsPeers->getPGPKey(detail.gpg_id, false); resp.mDataStream << makeKeyValue("pgp_fingerprint", detail.fpr.toStdString()); resp.mDataStream << makeKeyValueReference("pgp_key", pgp_key); @@ -560,7 +560,7 @@ void PeersHandler::handleGetPGPOptions(Request& req, Response& resp) uint32_t max_upload_speed = 0; uint32_t max_download_speed = 0; - rsPeers->getPeerMaximumRates(pgp, max_upload_speed, max_download_speed); + mRsPeers->getPeerMaximumRates(pgp, max_upload_speed, max_download_speed); resp.mDataStream << makeKeyValueReference("maxUploadSpeed", max_upload_speed); resp.mDataStream << makeKeyValueReference("maxDownloadSpeed", max_download_speed); @@ -573,7 +573,7 @@ void PeersHandler::handleGetPGPOptions(Request& req, Response& resp) for(std::list::const_iterator it(detail.gpgSigners.begin()); it != detail.gpgSigners.end(); ++it) { RsPeerDetails detail; - if(!rsPeers->getGPGDetails(*it, detail)) + if(!mRsPeers->getGPGDetails(*it, detail)) continue; std::string pgp_id = (*it).toStdString(); @@ -595,7 +595,7 @@ void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) RsPgpId pgp(pgp_id); RsPeerDetails detail; - if(!rsPeers->getGPGDetails(pgp, detail)) + if(!mRsPeers->getGPGDetails(pgp, detail)) { resp.setFail(); return; @@ -605,7 +605,7 @@ void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) req.mStream << makeKeyValueReference("trustLvl", trustLvl); if(trustLvl != (int)detail.trustLvl) - rsPeers->trustGPGCertificate(pgp, trustLvl); + mRsPeers->trustGPGCertificate(pgp, trustLvl); int max_upload_speed; int max_download_speed; @@ -613,7 +613,7 @@ void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) req.mStream << makeKeyValueReference("max_upload_speed", max_upload_speed); req.mStream << makeKeyValueReference("max_download_speed", max_download_speed); - rsPeers->setPeerMaximumRates(pgp, (uint32_t)max_upload_speed, (uint32_t)max_download_speed); + mRsPeers->setPeerMaximumRates(pgp, (uint32_t)max_upload_speed, (uint32_t)max_download_speed); bool direct_transfer; bool allow_push; @@ -632,13 +632,13 @@ void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) if(require_WL) flags = flags | RS_NODE_PERM_REQUIRE_WL; - rsPeers->setServicePermissionFlags(pgp, flags); + mRsPeers->setServicePermissionFlags(pgp, flags); bool own_sign; req.mStream << makeKeyValueReference("own_sign", own_sign); if(own_sign) - rsPeers->signGPGCertificate(pgp); + mRsPeers->signGPGCertificate(pgp); resp.mStateToken = getCurrentStateToken(); From 144d57047c1d084304142ab8785aedb2d03987e1 Mon Sep 17 00:00:00 2001 From: Konrad Date: Thu, 13 Apr 2017 13:40:30 +0200 Subject: [PATCH 074/230] Fixed: Thread safe access to RsControlModule member variables --- libresapi/src/api/RsControlModule.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index f8e2d7e1e..2910bc443 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -136,7 +136,11 @@ void RsControlModule::run() bool login_ok = false; while(!login_ok) { - mPassword = ""; + { + RsStackMutex stack(mDataMtx); // ********** LOCKED ********** + mPassword = ""; + } + // skip account selection if autologin is available if(initResult != RS_INIT_HAVE_ACCOUNT) setRunState(WAITING_ACCOUNT_SELECT); @@ -188,11 +192,17 @@ void RsControlModule::run() break; } - mLoadPeerId.clear(); + { + RsStackMutex stack(mDataMtx); // ********** LOCKED ********** + mLoadPeerId.clear(); + } } - mFixedPassword = mPassword; - mPassword = ""; + { + RsStackMutex stack(mDataMtx); // ********** LOCKED ********** + mFixedPassword = mPassword; + mPassword = ""; + } setRunState(WAITING_STARTUP); From 93aeae0f59963dc895ef0a5cae2fba8036a4a703 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 14 Apr 2017 17:41:35 +0200 Subject: [PATCH 075/230] Added: Handling requests to delete identity --- libresapi/src/api/IdentityHandler.cpp | 39 ++++++++++++++++++++++++++- libresapi/src/api/IdentityHandler.h | 1 + 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 1a43211ea..bf1c65911 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -95,6 +95,37 @@ protected: } }; +class DeleteIdentityTask : public GxsResponseTask +{ +public: + DeleteIdentityTask(RsIdentity* idservice) : + GxsResponseTask(idservice, idservice->getTokenService()), + mToken(0), + mRsIdentity(idservice) + {} + +protected: + virtual void gxsDoWork(Request &req, Response &resp) + { + RsGxsIdGroup group; + std::string gxs_id; + + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + group.mMeta.mGroupId = RsGxsGroupId(gxs_id); + + mRsIdentity->deleteIdentity(mToken, group); + addWaitingToken(mToken); + + done(); + return; + } + +private: + uint32_t mToken; + RsIdentity* mRsIdentity; + RsGxsId mId; +}; + IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIdentity *identity): mStateTokenServer(sts), mNotify(notify), mRsIdentity(identity), mMtx("IdentityHandler Mtx"), mStateToken(sts->getNewToken()) @@ -107,7 +138,8 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden addResourceHandler("own_ids", this, &IdentityHandler::handleOwnIdsRequest); addResourceHandler("notown_ids", this, &IdentityHandler::handleNotOwnIdsRequest); - addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); + addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); + addResourceHandler("delete_identity", this, &IdentityHandler::handleDeleteIdentity); } IdentityHandler::~IdentityHandler() @@ -302,4 +334,9 @@ ResponseTask* IdentityHandler::handleCreateIdentity(Request & /* req */, Respons return new CreateIdentityTask(mRsIdentity); } +ResponseTask* IdentityHandler::handleDeleteIdentity(Request& req, Response& resp) +{ + return new DeleteIdentityTask(mRsIdentity); +} + } // namespace resource_api diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index 1b54f5438..17f7cb37d 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -28,6 +28,7 @@ private: ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); + ResponseTask *handleDeleteIdentity(Request& req, Response& resp); StateTokenServer* mStateTokenServer; RsNotify* mNotify; From fd33315146d86bca139c8a0fb5ccd9ec39d57e38 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 14 Apr 2017 17:44:17 +0200 Subject: [PATCH 076/230] Added: Handling requests to create lobby --- libresapi/src/api/ChatHandler.cpp | 34 +++++++++++++++++++++++++++++++ libresapi/src/api/ChatHandler.h | 1 + 2 files changed, 35 insertions(+) diff --git a/libresapi/src/api/ChatHandler.cpp b/libresapi/src/api/ChatHandler.cpp index f576f8601..6e7fa07fe 100644 --- a/libresapi/src/api/ChatHandler.cpp +++ b/libresapi/src/api/ChatHandler.cpp @@ -145,6 +145,7 @@ ChatHandler::ChatHandler(StateTokenServer *sts, RsNotify *notify, RsMsgs *msgs, addResourceHandler("*", this, &ChatHandler::handleWildcard); addResourceHandler("lobbies", this, &ChatHandler::handleLobbies); + addResourceHandler("create_lobby", this, &ChatHandler::handleCreateLobby); addResourceHandler("subscribe_lobby", this, &ChatHandler::handleSubscribeLobby); addResourceHandler("unsubscribe_lobby", this, &ChatHandler::handleUnsubscribeLobby); addResourceHandler("autosubscribe_lobby", this, &ChatHandler::handleAutoSubsribeLobby); @@ -1210,4 +1211,37 @@ void ChatHandler::handleCloseDistantChatConnexion(Request& req, Response& resp) else resp.setFail("Failed to close distant chat"); } +void ChatHandler::handleCreateLobby(Request& req, Response& resp) +{ + std::set invited_identites; + std::string lobby_name; + std::string lobby_topic; + std::string gxs_id; + + req.mStream << makeKeyValueReference("lobby_name", lobby_name); + req.mStream << makeKeyValueReference("lobby_topic", lobby_topic); + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + + RsGxsId gxsId(gxs_id); + + bool lobby_public; + bool pgp_signed; + + req.mStream << makeKeyValueReference("lobby_public", lobby_public); + req.mStream << makeKeyValueReference("pgp_signed", pgp_signed); + + ChatLobbyFlags lobby_flags; + + if(lobby_public) + lobby_flags |= RS_CHAT_LOBBY_FLAGS_PUBLIC; + + if(pgp_signed) + lobby_flags |= RS_CHAT_LOBBY_FLAGS_PGP_SIGNED; + + mRsMsgs->createChatLobby(lobby_name, gxsId, lobby_topic, invited_identites, lobby_flags); + + tick(); + resp.setOk(); +} + } // namespace resource_api diff --git a/libresapi/src/api/ChatHandler.h b/libresapi/src/api/ChatHandler.h index 3463cee57..9cda3e551 100644 --- a/libresapi/src/api/ChatHandler.h +++ b/libresapi/src/api/ChatHandler.h @@ -118,6 +118,7 @@ public: private: void handleWildcard(Request& req, Response& resp); void handleLobbies(Request& req, Response& resp); + void handleCreateLobby(Request& req, Response& resp); void handleSubscribeLobby(Request& req, Response& resp); void handleUnsubscribeLobby(Request& req, Response& resp); void handleAutoSubsribeLobby(Request& req, Response& resp); From 636450f14dcaf3bd934f659daa320f9b30491702 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Apr 2017 18:46:44 +0200 Subject: [PATCH 077/230] moved turtle and FT to new serialization --- libretroshare/src/ft/ftserver.cc | 32 +-- libretroshare/src/ft/ftserver.h | 4 +- .../src/ft/ftturtlefiletransferitem.cc | 50 ++++ .../src/ft/ftturtlefiletransferitem.h | 49 ++-- libretroshare/src/serialiser/rstlvbase.cc | 4 +- libretroshare/src/serialiser/rstlvbase.h | 2 +- .../src/serialization/rstypeserializer.cc | 18 +- .../src/serialization/rstypeserializer.h | 59 ++++- libretroshare/src/turtle/p3turtle.cc | 20 +- libretroshare/src/turtle/rsturtleitem.cc | 247 +++++++++++++++--- libretroshare/src/turtle/rsturtleitem.h | 91 +++---- .../src/turtle/turtleclientservice.h | 4 +- 12 files changed, 419 insertions(+), 161 deletions(-) diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index caab409e8..b9c0c46c0 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -64,7 +64,7 @@ static const time_t FILE_TRANSFER_LOW_PRIORITY_TASKS_PERIOD = 5 ; // low priorit /* Setup */ ftServer::ftServer(p3PeerMgr *pm, p3ServiceControl *sc) - : p3Service(), + : p3Service(),RsSerializer(RS_SERVICE_TYPE_TURTLE), // should be FT, but this is for backward compatibility mPeerMgr(pm), mServiceCtrl(sc), mFileDatabase(NULL), mFtController(NULL), mFtExtra(NULL), @@ -459,14 +459,12 @@ bool ftServer::FileDetails(const RsFileHash &hash, FileSearchFlags hintflags, Fi return false; } -RsTurtleGenericTunnelItem *ftServer::deserialiseItem(void *data,uint32_t size) const +RsItem *ftServer::create_item(uint16_t service,uint8_t item_type) { - uint32_t rstype = getRsItemId(data); - #ifdef SERVER_DEBUG FTSERVER_DEBUG() << "p3turtle: deserialising packet: " << std::endl ; #endif - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_TURTLE != getRsItemService(rstype))) + if (RS_SERVICE_TYPE_TURTLE != service) { FTSERVER_ERROR() << " Wrong type !!" << std::endl ; return NULL; /* wrong type */ @@ -474,14 +472,14 @@ RsTurtleGenericTunnelItem *ftServer::deserialiseItem(void *data,uint32_t size) c try { - switch(getRsItemSubType(rstype)) + switch(item_type) { - case RS_TURTLE_SUBTYPE_FILE_REQUEST : return new RsTurtleFileRequestItem(data,size) ; - case RS_TURTLE_SUBTYPE_FILE_DATA : return new RsTurtleFileDataItem(data,size) ; - case RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST : return new RsTurtleFileMapRequestItem(data,size) ; - case RS_TURTLE_SUBTYPE_FILE_MAP : return new RsTurtleFileMapItem(data,size) ; - case RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST : return new RsTurtleChunkCrcRequestItem(data,size) ; - case RS_TURTLE_SUBTYPE_CHUNK_CRC : return new RsTurtleChunkCrcItem(data,size) ; + case RS_TURTLE_SUBTYPE_FILE_REQUEST : return new RsTurtleFileRequestItem(); + case RS_TURTLE_SUBTYPE_FILE_DATA : return new RsTurtleFileDataItem(); + case RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST : return new RsTurtleFileMapRequestItem(); + case RS_TURTLE_SUBTYPE_FILE_MAP : return new RsTurtleFileMapItem(); + case RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST : return new RsTurtleChunkCrcRequestItem(); + case RS_TURTLE_SUBTYPE_CHUNK_CRC : return new RsTurtleChunkCrcItem(); default: return NULL ; @@ -1189,7 +1187,8 @@ bool ftServer::encryptItem(RsTurtleGenericTunnelItem *clear_item,const RsFileHas FTSERVER_DEBUG() << " random nonce : " << RsUtil::BinToHex(initialization_vector,ENCRYPTED_FT_INITIALIZATION_VECTOR_SIZE) << std::endl; #endif - uint32_t total_data_size = ENCRYPTED_FT_HEADER_SIZE + ENCRYPTED_FT_INITIALIZATION_VECTOR_SIZE + ENCRYPTED_FT_EDATA_SIZE + clear_item->serial_size() + ENCRYPTED_FT_AUTHENTICATION_TAG_SIZE ; + uint32_t item_serialized_size = size(clear_item) ; + uint32_t total_data_size = ENCRYPTED_FT_HEADER_SIZE + ENCRYPTED_FT_INITIALIZATION_VECTOR_SIZE + ENCRYPTED_FT_EDATA_SIZE + item_serialized_size + ENCRYPTED_FT_AUTHENTICATION_TAG_SIZE ; #ifdef SERVER_DEBUG FTSERVER_DEBUG() << " clear part size : " << clear_item->serial_size() << std::endl; @@ -1204,7 +1203,7 @@ bool ftServer::encryptItem(RsTurtleGenericTunnelItem *clear_item,const RsFileHas return false ; uint8_t *edata = (uint8_t*)encrypted_item->data_bytes ; - uint32_t edata_size = clear_item->serial_size() ; + uint32_t edata_size = item_serialized_size; uint32_t offset = 0; edata[0] = 0xae ; @@ -1227,7 +1226,8 @@ bool ftServer::encryptItem(RsTurtleGenericTunnelItem *clear_item,const RsFileHas offset += ENCRYPTED_FT_EDATA_SIZE ; uint32_t ser_size = (uint32_t)((int)total_data_size - (int)offset); - clear_item->serialize(&edata[offset], ser_size); + + serialise(clear_item,&edata[offset], &ser_size); #ifdef SERVER_DEBUG FTSERVER_DEBUG() << " clear item : " << RsUtil::BinToHex(&edata[offset],std::min(50,(int)total_data_size-(int)offset)) << "(...)" << std::endl; @@ -1331,7 +1331,7 @@ bool ftServer::decryptItem(RsTurtleGenericDataItem *encrypted_item,const RsFileH return false ; } - decrypted_item = deserialiseItem(&edata[clear_item_offset],edata_size) ; + decrypted_item = dynamic_cast(deserialise(&edata[clear_item_offset],&edata_size)) ; if(decrypted_item == NULL) return false ; diff --git a/libretroshare/src/ft/ftserver.h b/libretroshare/src/ft/ftserver.h index d52c539d0..cda01eed6 100644 --- a/libretroshare/src/ft/ftserver.h +++ b/libretroshare/src/ft/ftserver.h @@ -68,7 +68,7 @@ class p3PeerMgr; class p3ServiceControl; class p3FileDatabase; -class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTurtleClientService +class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTurtleClientService, public RsSerializer { public: @@ -97,7 +97,7 @@ public: // virtual bool handleTunnelRequest(const RsFileHash& hash,const RsPeerId& peer_id) ; virtual void receiveTurtleData(RsTurtleGenericTunnelItem *item,const RsFileHash& hash,const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction) ; - virtual RsTurtleGenericTunnelItem *deserialiseItem(void *data,uint32_t size) const ; + virtual RsItem *create_item(uint16_t service,uint8_t item_type) ; void addVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&,RsTurtleGenericTunnelItem::Direction dir) ; void removeVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&) ; diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index b4ce91623..e8f1bc886 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -30,6 +30,9 @@ #include #include +#include + +#ifdef TO_REMOVE uint32_t RsTurtleFileRequestItem::serial_size() const { uint32_t s = 0 ; @@ -101,6 +104,15 @@ uint32_t RsTurtleChunkCrcRequestItem::serial_size() const return s ; } +#endif + +void RsTurtleFileMapRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,direction,"direction") ; +} + +#ifdef TO_REMOVE bool RsTurtleFileMapRequestItem::serialize(void *data,uint32_t& pktsize) const { uint32_t tlvsize = serial_size(); @@ -134,6 +146,7 @@ bool RsTurtleFileMapRequestItem::serialize(void *data,uint32_t& pktsize) const return ok; } + bool RsTurtleFileMapItem::serialize(void *data,uint32_t& pktsize) const { uint32_t tlvsize = serial_size(); @@ -563,3 +576,40 @@ std::ostream& RsTurtleChunkCrcItem::print(std::ostream& o, uint16_t) return o ; } +#endif + +void RsTurtleFileMapItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,direction,"direction") ; + RsTypeSerializer::serial_process (j,ctx,compressed_map._map,"map") ; +} +void RsTurtleChunkCrcRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; +} +void RsTurtleChunkCrcItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; + RsTypeSerializer::serial_process (j,ctx,check_sum,"check_sum") ; +} + +void RsTurtleFileRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,chunk_offset,"chunk_offset") ; + RsTypeSerializer::serial_process(j,ctx,chunk_size,"chunk_size") ; +} +void RsTurtleFileDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,chunk_offset,"chunk_offset") ; + RsTypeSerializer::serial_process(j,ctx,chunk_size,"chunk_size") ; + + RsTypeSerializer::TlvMemBlock_proxy prox(chunk_data,chunk_size) ; + + RsTypeSerializer::serial_process(j,ctx,prox,"chunk_data") ; +} + diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.h b/libretroshare/src/ft/ftturtlefiletransferitem.h index 8a886918e..fd8aada93 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.h +++ b/libretroshare/src/ft/ftturtlefiletransferitem.h @@ -34,7 +34,6 @@ class RsTurtleFileRequestItem: public RsTurtleGenericTunnelItem { public: RsTurtleFileRequestItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_REQUEST) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_REQUEST);} - RsTurtleFileRequestItem(void *data,uint32_t size) ; // deserialization virtual bool shouldStampTunnel() const { return false ; } virtual Direction travelingDirection() const { return DIRECTION_SERVER ; } @@ -42,51 +41,50 @@ class RsTurtleFileRequestItem: public RsTurtleGenericTunnelItem uint64_t chunk_offset ; uint32_t chunk_size ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; + void clear() {} protected: - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleFileDataItem: public RsTurtleGenericTunnelItem { public: RsTurtleFileDataItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_DATA) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_DATA) ;} - ~RsTurtleFileDataItem() ; - RsTurtleFileDataItem(void *data,uint32_t size) ; // deserialization + ~RsTurtleFileDataItem() { clear() ; } virtual bool shouldStampTunnel() const { return true ; } virtual Direction travelingDirection() const { return DIRECTION_CLIENT ; } + void clear() + { + free(chunk_data); + chunk_data = NULL ; + chunk_size = 0 ; + chunk_offset = 0 ; + } + uint64_t chunk_offset ; // offset in the file uint32_t chunk_size ; // size of the file chunk void *chunk_data ; // actual data. - virtual std::ostream& print(std::ostream& o, uint16_t) ; - - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleFileMapRequestItem: public RsTurtleGenericTunnelItem { public: RsTurtleFileMapRequestItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_MAP_REQUEST) ;} - RsTurtleFileMapRequestItem(void *data,uint32_t size) ; // deserialization virtual bool shouldStampTunnel() const { return false ; } - virtual std::ostream& print(std::ostream& o, uint16_t) ; - - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void clear() {} + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem { public: RsTurtleFileMapItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_MAP) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_MAP) ;} - RsTurtleFileMapItem(void *data,uint32_t size) ; // deserialization virtual bool shouldStampTunnel() const { return false ; } @@ -94,34 +92,28 @@ class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem // by default, we suppose the peer has all the chunks. This info will thus be and-ed // with the default file map for this source. - virtual std::ostream& print(std::ostream& o, uint16_t) ; - - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void clear() { compressed_map._map.clear() ;} + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleChunkCrcRequestItem: public RsTurtleGenericTunnelItem { public: RsTurtleChunkCrcRequestItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST) { setPriorityLevel(QOS_PRIORITY_RS_CHUNK_CRC_REQUEST);} - RsTurtleChunkCrcRequestItem(void *data,uint32_t size) ; // deserialization virtual bool shouldStampTunnel() const { return false ; } virtual Direction travelingDirection() const { return DIRECTION_SERVER ; } uint32_t chunk_number ; // id of the chunk to CRC. - virtual std::ostream& print(std::ostream& o, uint16_t) ; - - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void clear() {} + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleChunkCrcItem: public RsTurtleGenericTunnelItem { public: RsTurtleChunkCrcItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_CHUNK_CRC) { setPriorityLevel(QOS_PRIORITY_RS_CHUNK_CRC);} - RsTurtleChunkCrcItem(void *data,uint32_t size) ; // deserialization virtual bool shouldStampTunnel() const { return true ; } virtual Direction travelingDirection() const { return DIRECTION_CLIENT ; } @@ -129,7 +121,6 @@ class RsTurtleChunkCrcItem: public RsTurtleGenericTunnelItem uint32_t chunk_number ; Sha1CheckSum check_sum ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; - virtual bool serialize(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + void clear() { check_sum.clear() ;} + void serial_process(SerializeJob j,SerializeContext& ctx); }; diff --git a/libretroshare/src/serialiser/rstlvbase.cc b/libretroshare/src/serialiser/rstlvbase.cc index afc29a99e..f92dae4d9 100644 --- a/libretroshare/src/serialiser/rstlvbase.cc +++ b/libretroshare/src/serialiser/rstlvbase.cc @@ -32,7 +32,7 @@ //********************* // A facility func -inline void* right_shift_void_pointer(void* p, uint32_t len) { +inline void* right_shift_void_pointer(const void* p, uint32_t len) { return (void*)( (uint8_t*)p + len); } @@ -550,7 +550,7 @@ static bool find_decoded_string(const std::string& in,const std::string& suspici } //tested -bool GetTlvString(void *data, uint32_t size, uint32_t *offset, +bool GetTlvString(const void *data, uint32_t size, uint32_t *offset, uint16_t type, std::string &in) { if (!data) diff --git a/libretroshare/src/serialiser/rstlvbase.h b/libretroshare/src/serialiser/rstlvbase.h index f33a7d8ee..3f6ac1102 100644 --- a/libretroshare/src/serialiser/rstlvbase.h +++ b/libretroshare/src/serialiser/rstlvbase.h @@ -275,7 +275,7 @@ uint32_t GetTlvUInt64Size(); bool SetTlvString(void *data, uint32_t size, uint32_t *offset, uint16_t type, std::string out); -bool GetTlvString(void *data, uint32_t size, uint32_t *offset, uint16_t type, std::string &in); +bool GetTlvString(const void *data, uint32_t size, uint32_t *offset, uint16_t type, std::string &in); uint32_t GetTlvStringSize(const std::string &in); #ifdef REMOVED_CODE diff --git a/libretroshare/src/serialization/rstypeserializer.cc b/libretroshare/src/serialization/rstypeserializer.cc index 5a8def1bd..2c68d2c0c 100644 --- a/libretroshare/src/serialization/rstypeserializer.cc +++ b/libretroshare/src/serialization/rstypeserializer.cc @@ -22,7 +22,11 @@ template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint3 { return setRawUInt8(data,size,&offset,member); } -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint16_t& member) +{ + return setRawUInt16(data,size,&offset,member); +} +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const uint32_t& member) { return setRawUInt32(data,size,&offset,member); } @@ -46,7 +50,11 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t siz { return getRawUInt8(data,size,&offset,&member); } -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint16_t& member) +{ + return getRawUInt16(data,size,&offset,&member); +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, uint32_t& member) { return getRawUInt32(data,size,&offset,&member); } @@ -67,6 +75,10 @@ template<> uint32_t RsTypeSerializer::serial_size(const uint8_t& /* member*/) { return 1; } +template<> uint32_t RsTypeSerializer::serial_size(const uint16_t& /* member*/) +{ + return 2; +} template<> uint32_t RsTypeSerializer::serial_size(const uint32_t& /* member*/) { return 4; @@ -224,7 +236,7 @@ template<> bool RsTypeSerializer::serialize(uint8_t data[],uint32_t size,uint32_ template<> void RsTypeSerializer::print_data(const std::string& n, const RsTypeSerializer::TlvMemBlock_proxy& s) { - std::cerr << " [Binary data] " << n << ", length=" << s.second << " data=" << RsUtil::BinToHex(s.first,std::min(50u,s.second)) << ((s.second>50)?"...":"") << std::endl; + std::cerr << " [Binary data] " << n << ", length=" << s.second << " data=" << RsUtil::BinToHex((uint8_t*)s.first,std::min(50u,s.second)) << ((s.second>50)?"...":"") << std::endl; } //=================================================================================================// diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 349689c0b..403219ecb 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -26,7 +26,11 @@ class RsTypeSerializer public: // This type should be used to pass a parameter to drive the serialisation if needed. - typedef std::pair TlvMemBlock_proxy; + struct TlvMemBlock_proxy: public std::pair + { + TlvMemBlock_proxy(void *& p,uint32_t& s) : std::pair(p,s) {} + TlvMemBlock_proxy(uint8_t*& p,uint32_t& s) : std::pair(*(void**)&p,s) {} + }; //=================================================================================================// // Generic types // @@ -135,6 +139,59 @@ class RsTypeSerializer break; } } + + //=================================================================================================// + // std::list // + //=================================================================================================// + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::list& v,const std::string& member_name) + { + switch(j) + { + case RsItem::SIZE_ESTIMATE: + { + ctx.mOffset += 4 ; + for(typename std::list::iterator it(v.begin());it!=v.end();++it) + serial_process(j,ctx,*it ,member_name) ; + } + break ; + + case RsItem::DESERIALIZE: + { uint32_t n=0 ; + serial_process(j,ctx,n,"temporary size") ; + + for(uint32_t i=0;i(j,ctx,tmp,member_name) ; + v.push_back(tmp); + } + } + break ; + + case RsItem::SERIALIZE: + { + uint32_t n=v.size(); + serial_process(j,ctx,n,"temporary size") ; + for(typename std::list::iterator it(v.begin());it!=v.end();++it) + serial_process(j,ctx,*it ,member_name) ; + } + break ; + + case RsItem::PRINT: + { + if(v.empty()) + std::cerr << " Empty list"<< std::endl; + else + std::cerr << " List of " << v.size() << " elements:" << std::endl; + } + break; + default: + break; + } + } + //=================================================================================================// // t_RsFlags32<> types // //=================================================================================================// diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index 997fe0e7e..1cfbc2cbd 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -852,12 +852,14 @@ void p3turtle::handleSearchRequest(RsTurtleSearchRequestItem *item) item->print(std::cerr,0) ; #endif - if(item->serial_size() > TURTLE_MAX_SEARCH_REQ_ACCEPTED_SERIAL_SIZE) + uint32_t item_size = RsTurtleSerialiser().size(item); + + if(item_size > TURTLE_MAX_SEARCH_REQ_ACCEPTED_SERIAL_SIZE) { #ifdef P3TURTLE_DEBUG std::cerr << " Dropping, because the serial size exceeds the accepted limit." << std::endl ; #endif - std::cerr << " Caught a turtle search item with arbitrary large size from " << item->PeerId() << " of size " << item->serial_size() << " and depth " << item->depth << ". This is not allowed => dropping." << std::endl; + std::cerr << " Caught a turtle search item with arbitrary large size from " << item->PeerId() << " of size " << item_size << " and depth " << item->depth << ". This is not allowed => dropping." << std::endl; return ; } @@ -1074,7 +1076,7 @@ void p3turtle::routeGenericTunnelItem(RsTurtleGenericTunnelItem *item) if(item->shouldStampTunnel()) tunnel.time_stamp = time(NULL) ; - tunnel.transfered_bytes += static_cast(item)->serial_size() ; + tunnel.transfered_bytes += RsTurtleSerialiser().size(item); if(item->PeerId() == tunnel.local_dst) item->setTravelingDirection(RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ; @@ -1100,7 +1102,7 @@ void p3turtle::routeGenericTunnelItem(RsTurtleGenericTunnelItem *item) #endif item->PeerId(tunnel.local_src) ; - _traffic_info_buffer.unknown_updn_Bps += static_cast(item)->serial_size() ; + _traffic_info_buffer.unknown_updn_Bps += RsTurtleSerialiser().size(item) ; // This has been disabled for compilation reasons. Not sure we actually need it. // @@ -1118,7 +1120,7 @@ void p3turtle::routeGenericTunnelItem(RsTurtleGenericTunnelItem *item) #endif item->PeerId(tunnel.local_dst) ; - _traffic_info_buffer.unknown_updn_Bps += static_cast(item)->serial_size() ; + _traffic_info_buffer.unknown_updn_Bps += RsTurtleSerialiser().size(item); sendItem(item) ; return ; @@ -1126,7 +1128,7 @@ void p3turtle::routeGenericTunnelItem(RsTurtleGenericTunnelItem *item) // item is for us. Use the locked region to record the data. - _traffic_info_buffer.data_dn_Bps += item->serial_size() ; + _traffic_info_buffer.data_dn_Bps += RsTurtleSerialiser().size(item); } // The packet was not forwarded, so it is for us. Let's treat it. @@ -1246,7 +1248,7 @@ void p3turtle::sendTurtleData(const RsPeerId& virtual_peer_id,RsTurtleGenericTun item->tunnel_id = tunnel_id ; // we should randomly select a tunnel, or something more clever. - uint32_t ss = item->serial_size() ; + uint32_t ss = RsTurtleSerialiser().size(item); if(item->shouldStampTunnel()) tunnel.time_stamp = time(NULL) ; @@ -1380,7 +1382,7 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item) { RsStackMutex stack(mTurtleMtx); /********** STACK LOCKED MTX ******/ - _traffic_info_buffer.tr_dn_Bps += static_cast(item)->serial_size() ; + _traffic_info_buffer.tr_dn_Bps += RsTurtleSerialiser().size(item); float distance_to_maximum = std::min(100.0f,_traffic_info.tr_up_Bps/(float)(TUNNEL_REQUEST_PACKET_SIZE*_max_tr_up_rate)) ; float corrected_distance = pow(distance_to_maximum,DISTANCE_SQUEEZING_POWER) ; @@ -1572,7 +1574,7 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item) { RsStackMutex stack(mTurtleMtx); /********** STACK LOCKED MTX ******/ - _traffic_info_buffer.tr_up_Bps += static_cast(fwd_item)->serial_size() ; + _traffic_info_buffer.tr_up_Bps += RsTurtleSerialiser().size(fwd_item); } sendItem(fwd_item) ; diff --git a/libretroshare/src/turtle/rsturtleitem.cc b/libretroshare/src/turtle/rsturtleitem.cc index c1965deee..577d152a8 100644 --- a/libretroshare/src/turtle/rsturtleitem.cc +++ b/libretroshare/src/turtle/rsturtleitem.cc @@ -6,6 +6,8 @@ #include "rsturtleitem.h" #include "turtleclientservice.h" +#include "serialization/rstypeserializer.h" + //#define P3TURTLE_DEBUG // -----------------------------------------------------------------------------------// // -------------------------------- Serialization. --------------------------------- // @@ -16,6 +18,7 @@ // ---------------------------------- Packet sizes -----------------------------------// // +#ifdef TO_REMOVE uint32_t RsTurtleStringSearchRequestItem::serial_size() const { uint32_t s = 0 ; @@ -102,19 +105,13 @@ uint32_t RsTurtleGenericDataItem::serial_size() const return s ; } +#endif // // ---------------------------------- Serialization ----------------------------------// // -RsItem *RsTurtleSerialiser::deserialise(void *data, uint32_t *size) +RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) { - // look what we have... - - /* get the type */ - uint32_t rstype = getRsItemId(data); -#ifdef P3TURTLE_DEBUG - std::cerr << "p3turtle: deserialising packet: " << std::endl ; -#endif - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_TURTLE != getRsItemService(rstype))) + if (RS_SERVICE_TYPE_TURTLE != service) { #ifdef P3TURTLE_DEBUG std::cerr << " Wrong type !!" << std::endl ; @@ -122,43 +119,38 @@ RsItem *RsTurtleSerialiser::deserialise(void *data, uint32_t *size) return NULL; /* wrong type */ } -#ifndef WINDOWS_SYS - try + switch(getRsItemSubType(item_subtype)) { -#endif - switch(getRsItemSubType(rstype)) - { - case RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST : return new RsTurtleStringSearchRequestItem(data,*size) ; - case RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST : return new RsTurtleRegExpSearchRequestItem(data,*size) ; - case RS_TURTLE_SUBTYPE_SEARCH_RESULT : return new RsTurtleSearchResultItem(data,*size) ; - case RS_TURTLE_SUBTYPE_OPEN_TUNNEL : return new RsTurtleOpenTunnelItem(data,*size) ; - case RS_TURTLE_SUBTYPE_TUNNEL_OK : return new RsTurtleTunnelOkItem(data,*size) ; - case RS_TURTLE_SUBTYPE_GENERIC_DATA : return new RsTurtleGenericDataItem(data,*size) ; - - default: - break ; - } - // now try all client services - // - RsItem *item = NULL ; + case RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST : return new RsTurtleStringSearchRequestItem(); + case RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST : return new RsTurtleRegExpSearchRequestItem(); + case RS_TURTLE_SUBTYPE_SEARCH_RESULT : return new RsTurtleSearchResultItem(); + case RS_TURTLE_SUBTYPE_OPEN_TUNNEL : return new RsTurtleOpenTunnelItem(); + case RS_TURTLE_SUBTYPE_TUNNEL_OK : return new RsTurtleTunnelOkItem(); + case RS_TURTLE_SUBTYPE_GENERIC_DATA : return new RsTurtleGenericDataItem(); - for(uint32_t i=0;i<_client_services.size();++i) - if((item = _client_services[i]->deserialiseItem(data,*size)) != NULL) - return item ; - - std::cerr << "Unknown packet type in RsTurtle (not even handled by client services)!" << std::endl ; - return NULL ; -#ifndef WINDOWS_SYS + default: + break ; } - catch(std::exception& e) - { - std::cerr << "Exception raised: " << e.what() << std::endl ; - return NULL ; - } -#endif + // now try all client services + // + RsItem *item = NULL ; + for(uint32_t i=0;i<_client_services.size();++i) + if((item = _client_services[i]->create_item(service,item_subtype)) != NULL) + return item ; + + std::cerr << "Unknown packet type in RsTurtle (not even handled by client services)!" << std::endl ; + return NULL ; } +void RsTurtleStringSearchRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_VALUE,match_string,"match_string") ; + RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; + RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; +} + +#ifdef TO_REMOVE bool RsTurtleStringSearchRequestItem::serialize(void *data,uint32_t& pktsize) const { uint32_t tlvsize = serial_size(); @@ -242,7 +234,95 @@ bool RsTurtleRegExpSearchRequestItem::serialize(void *data,uint32_t& pktsize) co return ok; } +#endif +void RsTurtleRegExpSearchRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; + RsTypeSerializer::serial_process(j,ctx,depth,"depth") ; + RsTypeSerializer::serial_process(j,ctx,expr,"expr") ; +} + +template<> uint32_t RsTypeSerializer::serial_size(const RsRegularExpression::LinearizedExpression& r) +{ + uint32_t s = 0 ; + + s += 4 ; // number of strings + + for(unsigned int i=0;i bool RsTypeSerializer::deserialize(const uint8_t data[],uint32_t size,uint32_t& offset,RsRegularExpression::LinearizedExpression& expr) +{ + uint32_t saved_offset = offset ; + + uint32_t n =0 ; + bool ok = true ; + + ok &= getRawUInt32(data,size,&offset,&n) ; + + if(ok) expr._tokens.resize(n) ; + + for(uint32_t i=0;i bool RsTypeSerializer::serialize(uint8_t data[],uint32_t size,uint32_t& offset,const RsRegularExpression::LinearizedExpression& expr) +{ + uint32_t saved_offset = offset ; + + bool ok = true ; + + ok &= setRawUInt32(data,size,&offset,expr._tokens.size()) ; + + for(unsigned int i=0;i void RsTypeSerializer::print_data(const std::string& n, const RsRegularExpression::LinearizedExpression& expr) +{ + std::cerr << " [RegExpr ] " << n << ", tokens=" << expr._tokens.size() << " ints=" << expr._ints.size() << " strings=" << expr._strings.size() << std::endl; +} + + +#ifdef TO_REMOVE RsTurtleStringSearchRequestItem::RsTurtleStringSearchRequestItem(void *data,uint32_t pktsize) : RsTurtleSearchRequestItem(RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST) { @@ -309,6 +389,62 @@ RsTurtleRegExpSearchRequestItem::RsTurtleRegExpSearchRequestItem(void *data,uint throw std::runtime_error("Unknown error while deserializing.") ; #endif } +#endif + +void RsTurtleSearchResultItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; + RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; + RsTypeSerializer::serial_process (j,ctx,result ,"result") ; +} + +template<> uint32_t RsTypeSerializer::serial_size(const TurtleFileInfo& i) +{ + uint32_t s = 0 ; + + s += 8 ; // size + s += i.hash.SIZE_IN_BYTES ; + s += GetTlvStringSize(i.name) ; + + return s; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[],uint32_t size,uint32_t& offset,TurtleFileInfo& i) +{ + uint32_t saved_offset = offset ; + bool ok = true ; + + ok &= getRawUInt64(data, size, &offset, &i.size); // file size + ok &= i.hash.deserialise(data, size, offset); // file hash + ok &= GetTlvString(data, size, &offset, TLV_TYPE_STR_NAME, i.name); // file name + + if(!ok) + offset = saved_offset ; + + return ok; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[],uint32_t size,uint32_t& offset,const TurtleFileInfo& i) +{ + uint32_t saved_offset = offset ; + bool ok = true ; + + ok &= setRawUInt64(data, size, &offset, i.size); // file size + ok &= i.hash.serialise(data, size, offset); // file hash + ok &= SetTlvString(data, size, &offset, TLV_TYPE_STR_NAME, i.name); // file name + + if(!ok) + offset = saved_offset ; + + return ok; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, const TurtleFileInfo& i) +{ + std::cerr << " [FileInfo ] " << n << " size=" << i.size << " hash=" << i.hash << ", name=" << i.name << std::endl; +} + +#ifdef TO_REMOVE bool RsTurtleSearchResultItem::serialize(void *data,uint32_t& pktsize) const { @@ -394,7 +530,17 @@ RsTurtleSearchResultItem::RsTurtleSearchResultItem(void *data,uint32_t pktsize) throw std::runtime_error("Unknown error while deserializing.") ; #endif } +#endif +void RsTurtleOpenTunnelItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,file_hash ,"file_hash") ; + RsTypeSerializer::serial_process(j,ctx,request_id ,"request_id") ; + RsTypeSerializer::serial_process(j,ctx,partial_tunnel_id,"partial_tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; +} + +#ifdef TO_REMOVE bool RsTurtleOpenTunnelItem::serialize(void *data,uint32_t& pktsize) const { uint32_t tlvsize = serial_size(); @@ -460,7 +606,15 @@ RsTurtleOpenTunnelItem::RsTurtleOpenTunnelItem(void *data,uint32_t pktsize) throw std::runtime_error("RsTurtleOpenTunnelItem::() unknown error while deserializing.") ; #endif } +#endif +void RsTurtleTunnelOkItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; + RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; +} + +#ifdef TO_REMOVE bool RsTurtleTunnelOkItem::serialize(void *data,uint32_t& pktsize) const { uint32_t tlvsize = serial_size(); @@ -522,7 +676,18 @@ RsTurtleTunnelOkItem::RsTurtleTunnelOkItem(void *data,uint32_t pktsize) throw std::runtime_error("RsTurtleTunnelOkItem::() unknown error while deserializing.") ; #endif } +#endif +void RsTurtleGenericDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; + + RsTypeSerializer::TlvMemBlock_proxy prox(data_bytes,data_size) ; + + RsTypeSerializer::serial_process(j,ctx,prox,"data bytes") ; +} + +#ifdef TO_REMOVE RsTurtleGenericDataItem::RsTurtleGenericDataItem(void *data,uint32_t pktsize) : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_GENERIC_DATA) { @@ -604,6 +769,7 @@ bool RsTurtleGenericDataItem::serialize(void *data,uint32_t& pktsize) const return ok; } + // -----------------------------------------------------------------------------------// // ------------------------------------- IO --------------------------------------- // // -----------------------------------------------------------------------------------// @@ -681,3 +847,4 @@ std::ostream& RsTurtleGenericDataItem::print(std::ostream& o, uint16_t) return o ; } +#endif diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 5b15f7781..22477668a 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -9,6 +9,8 @@ #include "serialiser/rsserviceids.h" #include "turtle/turtletypes.h" +#include "serialization/rsserializer.h" + const uint8_t RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST = 0x01 ; const uint8_t RS_TURTLE_SUBTYPE_SEARCH_RESULT = 0x02 ; const uint8_t RS_TURTLE_SUBTYPE_OPEN_TUNNEL = 0x03 ; @@ -17,14 +19,14 @@ const uint8_t RS_TURTLE_SUBTYPE_CLOSE_TUNNEL = 0x05 ; const uint8_t RS_TURTLE_SUBTYPE_TUNNEL_CLOSED = 0x06 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_REQUEST = 0x07 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_DATA = 0x08 ; -const uint8_t RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST = 0x09 ; +const uint8_t RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST = 0x09 ; const uint8_t RS_TURTLE_SUBTYPE_GENERIC_DATA = 0x0a ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP = 0x10 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST = 0x11 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC = 0x12 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST = 0x13 ; -const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC = 0x14 ; -const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST = 0x15 ; +const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP = 0x10 ; +const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST = 0x11 ; +const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC = 0x12 ; +const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST = 0x13 ; +const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC = 0x14 ; +const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST = 0x15 ; /***********************************************************************************/ /* Basic Turtle Item Class */ @@ -34,11 +36,6 @@ class RsTurtleItem: public RsItem { public: RsTurtleItem(uint8_t turtle_subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TURTLE,turtle_subtype) {} - - virtual bool serialize(void *data,uint32_t& size) const = 0 ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() const = 0 ; // deserialise is handled using a constructor - - virtual void clear() {} }; /***********************************************************************************/ @@ -50,29 +47,26 @@ class RsTurtleSearchResultItem: public RsTurtleItem { public: RsTurtleSearchResultItem() : RsTurtleItem(RS_TURTLE_SUBTYPE_SEARCH_RESULT), request_id(0), depth(0) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_SEARCH_RESULT) ;} - RsTurtleSearchResultItem(void *data,uint32_t size) ; // deserialization TurtleSearchRequestId request_id ; // Randomly generated request id. - uint16_t depth ; // The depth of a search result is obfuscated in this way: - // If the actual depth is 1, this field will be 1. - // If the actual depth is > 1, this field is a larger arbitrary integer. - + uint16_t depth ; // The depth of a search result is obfuscated in this way: + // If the actual depth is 1, this field will be 1. + // If the actual depth is > 1, this field is a larger arbitrary integer. std::list result ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; - + void clear() { result.clear() ; } protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); + }; class RsTurtleSearchRequestItem: public RsTurtleItem { public: RsTurtleSearchRequestItem(uint32_t subtype) : RsTurtleItem(subtype), request_id(0), depth(0) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_SEARCH_REQUEST) ;} + virtual RsTurtleSearchRequestItem *clone() const = 0 ; // used for cloning in routing methods - virtual RsTurtleSearchRequestItem *clone() const = 0 ; // used for cloning in routing methods virtual void performLocalSearch(std::list&) const = 0 ; // abstracts the search method uint32_t request_id ; // randomly generated request id. @@ -83,34 +77,31 @@ class RsTurtleStringSearchRequestItem: public RsTurtleSearchRequestItem { public: RsTurtleStringSearchRequestItem() : RsTurtleSearchRequestItem(RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST) {} - RsTurtleStringSearchRequestItem(void *data,uint32_t size) ; std::string match_string ; // string to match virtual RsTurtleSearchRequestItem *clone() const { return new RsTurtleStringSearchRequestItem(*this) ; } virtual void performLocalSearch(std::list&) const ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; + void clear() { match_string.clear() ; } + protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleRegExpSearchRequestItem: public RsTurtleSearchRequestItem { public: RsTurtleRegExpSearchRequestItem() : RsTurtleSearchRequestItem(RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST) {} - RsTurtleRegExpSearchRequestItem(void *data,uint32_t size) ; RsRegularExpression::LinearizedExpression expr ; // Reg Exp in linearised mode virtual RsTurtleSearchRequestItem *clone() const { return new RsTurtleRegExpSearchRequestItem(*this) ; } virtual void performLocalSearch(std::list&) const ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; + void clear() { expr = RsRegularExpression::LinearizedExpression(); } protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); }; /***********************************************************************************/ @@ -121,34 +112,28 @@ class RsTurtleOpenTunnelItem: public RsTurtleItem { public: RsTurtleOpenTunnelItem() : RsTurtleItem(RS_TURTLE_SUBTYPE_OPEN_TUNNEL), request_id(0), partial_tunnel_id(0), depth(0) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_OPEN_TUNNEL) ;} - RsTurtleOpenTunnelItem(void *data,uint32_t size) ; // deserialization TurtleFileHash file_hash ; // hash to match uint32_t request_id ; // randomly generated request id. uint32_t partial_tunnel_id ; // uncomplete tunnel id. Will be completed at destination. uint16_t depth ; // Used for limiting search depth. - virtual std::ostream& print(std::ostream& o, uint16_t) ; - + void clear() { file_hash.clear() ;} protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); }; class RsTurtleTunnelOkItem: public RsTurtleItem { public: RsTurtleTunnelOkItem() : RsTurtleItem(RS_TURTLE_SUBTYPE_TUNNEL_OK), tunnel_id(0), request_id(0) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_TUNNEL_OK) ;} - RsTurtleTunnelOkItem(void *data,uint32_t size) ; // deserialization uint32_t tunnel_id ; // id of the tunnel. Should be identical for a tunnel between two same peers for the same hash. uint32_t request_id ; // randomly generated request id corresponding to the intial request. - virtual std::ostream& print(std::ostream& o, uint16_t) ; - + void clear() {} protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); }; /***********************************************************************************/ @@ -198,8 +183,6 @@ class RsTurtleGenericDataItem: public RsTurtleGenericTunnelItem { public: RsTurtleGenericDataItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_GENERIC_DATA), data_size(0), data_bytes(0) { setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_REQUEST);} - RsTurtleGenericDataItem(void *data,uint32_t size) ; // deserialization - virtual ~RsTurtleGenericDataItem() { if(data_bytes != NULL) free(data_bytes) ; } virtual bool shouldStampTunnel() const { return true ; } @@ -207,30 +190,26 @@ class RsTurtleGenericDataItem: public RsTurtleGenericTunnelItem uint32_t data_size ; void *data_bytes ; - virtual std::ostream& print(std::ostream& o, uint16_t) ; + void clear() + { + free(data_bytes) ; + data_bytes = NULL ; + data_size = 0; + } protected: - virtual bool serialize(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + void serial_process(SerializeJob j,SerializeContext& ctx); }; /***********************************************************************************/ /* Turtle Serialiser class */ /***********************************************************************************/ -class RsTurtleSerialiser: public RsSerialType +class RsTurtleSerialiser: public RsSerializer { public: - RsTurtleSerialiser() : RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_TURTLE) {} + RsTurtleSerialiser() : RsSerializer(RS_SERVICE_TYPE_TURTLE) {} - virtual uint32_t size (RsItem *item) - { - return dynamic_cast(item)->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - return dynamic_cast(item)->serialize(data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) ; + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype); // This is used by the turtle router to add services to its serialiser. // Client services are only used for deserialising, since the serialisation is diff --git a/libretroshare/src/turtle/turtleclientservice.h b/libretroshare/src/turtle/turtleclientservice.h index 033d5e046..6fa4dd629 100644 --- a/libretroshare/src/turtle/turtleclientservice.h +++ b/libretroshare/src/turtle/turtleclientservice.h @@ -71,12 +71,12 @@ class RsTurtleClientService std::cerr << "!!!!!! Received Data from turtle router, but the client service is not handling it !!!!!!!!!!" << std::endl ; } - // Method for deserialising specific items of the client service. The + // Method for creating specific items of the client service. The // method has a default behavior of not doing anything, since most client // services might only use the generic item already provided by the turtle // router: RsTurtleGenericDataItem - virtual RsTurtleGenericTunnelItem *deserialiseItem(void */*data*/, uint32_t /*size*/) const { return NULL ; } + virtual RsTurtleGenericTunnelItem *create_item(uint16_t service,uint8_t item_type) const { return NULL ; } // These methods are called by the turtle router to add/remove virtual peers when tunnels are created/deleted // From 273aae7cc1aad7ae0f9e41d3343b66ab2f1bbd62 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 15 Apr 2017 19:01:13 +0200 Subject: [PATCH 078/230] fixed sharing of own identity --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index b7923dc49..96b943d15 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -2409,7 +2409,7 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) } if(n_selected_items==1) - QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy retroshare link"),this,SLOT(copyRetroshareLink())) ; + QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; // always allow to send messages contextMenu->addAction(QIcon(":/images/mail_new.png"), tr("Send message"), this, SLOT(sendMsg())); @@ -2438,6 +2438,7 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) { contextMenu->addSeparator(); + contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; contextMenu->addAction(ui->editIdentity); contextMenu->addAction(ui->removeIdentity); } From 121133488c7893601255bf9507a0953e0c5639a7 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 16 Apr 2017 19:59:22 +0200 Subject: [PATCH 079/230] fixed bug in serialization for turtle --- libretroshare/src/chat/rschatitems.cc | 2 +- libretroshare/src/chat/rschatitems.h | 2 +- libretroshare/src/ft/ftserver.cc | 2 +- libretroshare/src/ft/ftserver.h | 3 ++- libretroshare/src/ft/ftturtlefiletransferitem.cc | 1 - libretroshare/src/serialiser/rsbanlistitems.cc | 2 +- libretroshare/src/serialiser/rsbanlistitems.h | 2 +- libretroshare/src/serialiser/rsbwctrlitems.cc | 2 +- libretroshare/src/serialiser/rsbwctrlitems.h | 2 +- libretroshare/src/serialiser/rsfiletransferitems.cc | 2 +- libretroshare/src/serialiser/rsfiletransferitems.h | 2 +- libretroshare/src/serialization/rsserializer.h | 2 +- libretroshare/src/turtle/rsturtleitem.cc | 4 ++-- libretroshare/src/turtle/rsturtleitem.h | 7 ++++--- libretroshare/src/turtle/turtleclientservice.h | 2 +- 15 files changed, 19 insertions(+), 18 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 88e7abe8a..23f4aab25 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -37,7 +37,7 @@ static const uint32_t RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE = 0x0001; -RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) +RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) const { if(service_id != RS_SERVICE_TYPE_CHAT) return NULL ; diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 7ec79ea44..7771a375f 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -332,6 +332,6 @@ class RsChatSerialiser: public RsSerializer public: RsChatSerialiser() :RsSerializer(RS_SERVICE_TYPE_CHAT) {} - virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) ; + virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index b9c0c46c0..5b04f2828 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -459,7 +459,7 @@ bool ftServer::FileDetails(const RsFileHash &hash, FileSearchFlags hintflags, Fi return false; } -RsItem *ftServer::create_item(uint16_t service,uint8_t item_type) +RsItem *ftServer::create_item(uint16_t service,uint8_t item_type) const { #ifdef SERVER_DEBUG FTSERVER_DEBUG() << "p3turtle: deserialising packet: " << std::endl ; diff --git a/libretroshare/src/ft/ftserver.h b/libretroshare/src/ft/ftserver.h index cda01eed6..23606b28e 100644 --- a/libretroshare/src/ft/ftserver.h +++ b/libretroshare/src/ft/ftserver.h @@ -97,7 +97,8 @@ public: // virtual bool handleTunnelRequest(const RsFileHash& hash,const RsPeerId& peer_id) ; virtual void receiveTurtleData(RsTurtleGenericTunnelItem *item,const RsFileHash& hash,const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction) ; - virtual RsItem *create_item(uint16_t service,uint8_t item_type) ; + virtual RsItem *create_item(uint16_t service,uint8_t item_type) const ; + virtual RsSerializer *serializer() { return this ; } void addVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&,RsTurtleGenericTunnelItem::Direction dir) ; void removeVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&) ; diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index e8f1bc886..722991aef 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -606,7 +606,6 @@ void RsTurtleFileDataItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_offset,"chunk_offset") ; - RsTypeSerializer::serial_process(j,ctx,chunk_size,"chunk_size") ; RsTypeSerializer::TlvMemBlock_proxy prox(chunk_data,chunk_size) ; diff --git a/libretroshare/src/serialiser/rsbanlistitems.cc b/libretroshare/src/serialiser/rsbanlistitems.cc index a110ec00f..c28399e34 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.cc +++ b/libretroshare/src/serialiser/rsbanlistitems.cc @@ -53,7 +53,7 @@ void RsBanListConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext RsTypeSerializer::serial_process (j,ctx,update_time,"update_time") ; RsTypeSerializer::serial_process (j,ctx,banned_peers,"banned_peers") ; } -RsItem *RsBanListSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) +RsItem *RsBanListSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) const { if(service_id != RS_SERVICE_TYPE_BANLIST) return NULL ; diff --git a/libretroshare/src/serialiser/rsbanlistitems.h b/libretroshare/src/serialiser/rsbanlistitems.h index cd5cb8cec..57263a356 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.h +++ b/libretroshare/src/serialiser/rsbanlistitems.h @@ -77,7 +77,7 @@ class RsBanListSerialiser: public RsSerializer public: RsBanListSerialiser() :RsSerializer(RS_SERVICE_TYPE_BANLIST) {} - virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) ; + virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsbwctrlitems.cc b/libretroshare/src/serialiser/rsbwctrlitems.cc index bd1f0341e..092b1d643 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.cc +++ b/libretroshare/src/serialiser/rsbwctrlitems.cc @@ -34,7 +34,7 @@ /*************************************************************************/ -RsItem *RsBwCtrlSerialiser::create_item(uint16_t service, uint8_t item_sub_id) +RsItem *RsBwCtrlSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const { if(service != RS_SERVICE_TYPE_BWCTRL) return NULL ; diff --git a/libretroshare/src/serialiser/rsbwctrlitems.h b/libretroshare/src/serialiser/rsbwctrlitems.h index 8b5cc8299..07907c709 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.h +++ b/libretroshare/src/serialiser/rsbwctrlitems.h @@ -63,7 +63,7 @@ public: RsBwCtrlSerialiser() :RsSerializer(RS_SERVICE_TYPE_BWCTRL) {} virtual ~RsBwCtrlSerialiser() {} - RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */); + RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsfiletransferitems.cc b/libretroshare/src/serialiser/rsfiletransferitems.cc index 0be0412b7..3eb7c1147 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.cc +++ b/libretroshare/src/serialiser/rsfiletransferitems.cc @@ -137,7 +137,7 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const Compres // Serializer // //===================================================================================================// -RsItem *RsFileTransferSerialiser::create_item(uint16_t service_type,uint8_t item_type) +RsItem *RsFileTransferSerialiser::create_item(uint16_t service_type,uint8_t item_type) const { if(service_type != RS_SERVICE_TYPE_FILE_TRANSFER) return NULL ; diff --git a/libretroshare/src/serialiser/rsfiletransferitems.h b/libretroshare/src/serialiser/rsfiletransferitems.h index 50b3c2a26..ae1835126 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.h +++ b/libretroshare/src/serialiser/rsfiletransferitems.h @@ -183,7 +183,7 @@ class RsFileTransferSerialiser: public RsSerializer virtual ~RsFileTransferSerialiser() {} - RsItem *create_item(uint16_t service_type,uint8_t item_type) ; + RsItem *create_item(uint16_t service_type,uint8_t item_type) const ; }; diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 9c6259cf9..d8ff50b14 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -17,7 +17,7 @@ class RsSerializer: public RsSerialType /*! create_item * should be overloaded to create the correct type of item depending on the data */ - virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const { return NULL ; } diff --git a/libretroshare/src/turtle/rsturtleitem.cc b/libretroshare/src/turtle/rsturtleitem.cc index 577d152a8..e5d064ef2 100644 --- a/libretroshare/src/turtle/rsturtleitem.cc +++ b/libretroshare/src/turtle/rsturtleitem.cc @@ -109,7 +109,7 @@ uint32_t RsTurtleGenericDataItem::serial_size() const // // ---------------------------------- Serialization ----------------------------------// // -RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) +RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) const { if (RS_SERVICE_TYPE_TURTLE != service) { @@ -136,7 +136,7 @@ RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) RsItem *item = NULL ; for(uint32_t i=0;i<_client_services.size();++i) - if((item = _client_services[i]->create_item(service,item_subtype)) != NULL) + if((_client_services[i]->serializer() != NULL) && (item = _client_services[i]->serializer()->create_item(service,item_subtype)) != NULL) return item ; std::cerr << "Unknown packet type in RsTurtle (not even handled by client services)!" << std::endl ; diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 22477668a..95594761b 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -23,11 +23,12 @@ const uint8_t RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST = 0x09 ; const uint8_t RS_TURTLE_SUBTYPE_GENERIC_DATA = 0x0a ; const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP = 0x10 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST = 0x11 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC = 0x12 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST = 0x13 ; const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC = 0x14 ; const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST = 0x15 ; +// const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC = 0x12 ; // unused +// const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST = 0x13 ; + /***********************************************************************************/ /* Basic Turtle Item Class */ /***********************************************************************************/ @@ -209,7 +210,7 @@ class RsTurtleSerialiser: public RsSerializer public: RsTurtleSerialiser() : RsSerializer(RS_SERVICE_TYPE_TURTLE) {} - virtual RsItem *create_item(uint16_t service,uint8_t item_subtype); + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const; // This is used by the turtle router to add services to its serialiser. // Client services are only used for deserialising, since the serialisation is diff --git a/libretroshare/src/turtle/turtleclientservice.h b/libretroshare/src/turtle/turtleclientservice.h index 6fa4dd629..7fa4d8b18 100644 --- a/libretroshare/src/turtle/turtleclientservice.h +++ b/libretroshare/src/turtle/turtleclientservice.h @@ -76,7 +76,7 @@ class RsTurtleClientService // services might only use the generic item already provided by the turtle // router: RsTurtleGenericDataItem - virtual RsTurtleGenericTunnelItem *create_item(uint16_t service,uint8_t item_type) const { return NULL ; } + virtual RsSerializer *serializer() { return NULL ; } // These methods are called by the turtle router to add/remove virtual peers when tunnels are created/deleted // From 2ca46ec636bef771616be789a538739199a4637f Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 16 Apr 2017 20:11:54 +0200 Subject: [PATCH 080/230] fixed bug in serialization of data chunks --- libretroshare/src/serialization/rstypeserializer.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libretroshare/src/serialization/rstypeserializer.cc b/libretroshare/src/serialization/rstypeserializer.cc index 2c68d2c0c..64ba46f68 100644 --- a/libretroshare/src/serialization/rstypeserializer.cc +++ b/libretroshare/src/serialization/rstypeserializer.cc @@ -213,6 +213,7 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[],uint32_t size ok = ok && NULL != r.first; memcpy(r.first,&data[offset],r.second) ; + offset += r.second ; if(!ok) offset = saved_offset ; @@ -227,6 +228,7 @@ template<> bool RsTypeSerializer::serialize(uint8_t data[],uint32_t size,uint32_ bool ok = serialize(data,size,offset,r.second) ; memcpy(&data[offset],r.first,r.second) ; + offset += r.second ; if(!ok) offset = saved_offset ; From f8fc8b40e4a26c6556a394abd664fffa21e4eb7d Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 16 Apr 2017 20:16:59 +0200 Subject: [PATCH 081/230] removed old code in turtle serialiser --- .../src/serialization/rsserializer.cc | 8 +- libretroshare/src/turtle/rsturtleitem.cc | 633 ------------------ 2 files changed, 7 insertions(+), 634 deletions(-) diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 4cf03d133..13b4435fd 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -20,6 +20,12 @@ RsItem *RsSerializer::deserialise(void *data, uint32_t *size) item->serial_process(RsItem::DESERIALIZE, ctx) ; + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsSerializer::deserialise(): ERROR. offset does not match expected size!" << std::endl; + delete item ; + return NULL ; + } if(ctx.mOk) return item ; @@ -48,7 +54,7 @@ bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) if(ctx.mSize != ctx.mOffset) { - std::cerr << "RsSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; + std::cerr << "RsSerializer::serialise(): ERROR. offset does not match expected size!" << std::endl; return false ; } return true ; diff --git a/libretroshare/src/turtle/rsturtleitem.cc b/libretroshare/src/turtle/rsturtleitem.cc index e5d064ef2..4d5f1a2fa 100644 --- a/libretroshare/src/turtle/rsturtleitem.cc +++ b/libretroshare/src/turtle/rsturtleitem.cc @@ -14,101 +14,6 @@ // -----------------------------------------------------------------------------------// // -// -// ---------------------------------- Packet sizes -----------------------------------// -// - -#ifdef TO_REMOVE -uint32_t RsTurtleStringSearchRequestItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // request_id - s += 2 ; // depth - s += GetTlvStringSize(match_string) ; // match_string - - return s ; -} -uint32_t RsTurtleRegExpSearchRequestItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // request_id - s += 2 ; // depth - - s += 4 ; // number of strings - - for(unsigned int i=0;i::const_iterator it(result.begin());it!=result.end();++it) - { - s += 8 ; // file size - s += it->hash.serial_size(); // file hash - s += GetTlvStringSize(it->name) ; // file name - } - - return s ; -} - -uint32_t RsTurtleOpenTunnelItem::serial_size()const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += file_hash.serial_size() ; // file hash - s += 4 ; // tunnel request id - s += 4 ; // partial tunnel id - s += 2 ; // depth - - return s ; -} - -uint32_t RsTurtleTunnelOkItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // tunnel request id - - return s ; -} - -uint32_t RsTurtleGenericDataItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // data size - s += data_size ; // data - - return s ; -} -#endif -// -// ---------------------------------- Serialization ----------------------------------// -// RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) const { if (RS_SERVICE_TYPE_TURTLE != service) @@ -150,92 +55,6 @@ void RsTurtleStringSearchRequestItem::serial_process(SerializeJob j,SerializeCon RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; } -#ifdef TO_REMOVE -bool RsTurtleStringSearchRequestItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_VALUE, match_string); - ok &= setRawUInt32(data, tlvsize, &offset, request_id); - ok &= setRawUInt16(data, tlvsize, &offset, depth); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -bool RsTurtleRegExpSearchRequestItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - -#ifdef P3TURTLE_DEBUG - std::cerr << "RsTurtleSerialiser::serialising RegExp search packet (size=" << tlvsize << ")" << std::endl; -#endif - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, request_id); - ok &= setRawUInt16(data, tlvsize, &offset, depth); - - // now serialize the regexp - ok &= setRawUInt32(data,tlvsize,&offset,expr._tokens.size()) ; - - for(unsigned int i=0;i(j,ctx,request_id,"request_id") ; @@ -321,76 +140,6 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const RsRegul std::cerr << " [RegExpr ] " << n << ", tokens=" << expr._tokens.size() << " ints=" << expr._ints.size() << " strings=" << expr._strings.size() << std::endl; } - -#ifdef TO_REMOVE -RsTurtleStringSearchRequestItem::RsTurtleStringSearchRequestItem(void *data,uint32_t pktsize) - : RsTurtleSearchRequestItem(RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST) -{ -#ifdef P3TURTLE_DEBUG - std::cerr << " deserializibg packet. type = search request (string)" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - ok &= GetTlvString(data, pktsize, &offset, TLV_TYPE_STR_VALUE, match_string); // file hash - ok &= getRawUInt32(data, pktsize, &offset, &request_id); - ok &= getRawUInt16(data, pktsize, &offset, &depth); - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("Size error while deserializing.") ; - if (!ok) - throw std::runtime_error("Unknown error while deserializing.") ; -#endif -} - -RsTurtleRegExpSearchRequestItem::RsTurtleRegExpSearchRequestItem(void *data,uint32_t pktsize) - : RsTurtleSearchRequestItem(RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST) -{ -#ifdef P3TURTLE_DEBUG - std::cerr << " deserializibg packet. type = search request (regexp)" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - ok &= getRawUInt32(data, pktsize, &offset, &request_id); - ok &= getRawUInt16(data, pktsize, &offset, &depth); - - // now serialize the regexp - uint32_t n =0 ; - ok &= getRawUInt32(data,pktsize,&offset,&n) ; - - if(ok) expr._tokens.resize(n) ; - - for(uint32_t i=0;i(j,ctx,request_id,"request_id") ; @@ -444,94 +193,6 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const TurtleF std::cerr << " [FileInfo ] " << n << " size=" << i.size << " hash=" << i.hash << ", name=" << i.name << std::endl; } -#ifdef TO_REMOVE - -bool RsTurtleSearchResultItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, request_id); - ok &= setRawUInt16(data, tlvsize, &offset, depth); - ok &= setRawUInt32(data, tlvsize, &offset, result.size()); - - for(std::list::const_iterator it(result.begin());it!=result.end();++it) - { - ok &= setRawUInt64(data, tlvsize, &offset, it->size); // file size - ok &= it->hash.serialise(data, tlvsize, offset); // file hash - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, it->name); // file name - } - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsTurtleSearchResultItem::RsTurtleSearchResultItem(void *data,uint32_t pktsize) - : RsTurtleItem(RS_TURTLE_SUBTYPE_SEARCH_RESULT) -{ - setPriorityLevel(QOS_PRIORITY_RS_TURTLE_SEARCH_RESULT) ; -#ifdef P3TURTLE_DEBUG - std::cerr << " type = search result" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - - /* add mandatory parts first */ - - bool ok = true ; - uint32_t s ; - ok &= getRawUInt32(data, pktsize, &offset, &request_id); - ok &= getRawUInt16(data, pktsize, &offset, &depth); - ok &= getRawUInt32(data, pktsize, &offset, &s) ; -#ifdef P3TURTLE_DEBUG - std::cerr << " request_id=" << request_id << ", depth=" << depth << ", s=" << s << std::endl ; -#endif - - result.clear() ; - - for(int i=0;i<(int)s;++i) - { - TurtleFileInfo f ; - - ok &= getRawUInt64(data, pktsize, &offset, &(f.size)); // file size - ok &= f.hash.deserialise(data, pktsize, offset); // file hash - ok &= GetTlvString(data, pktsize, &offset, TLV_TYPE_STR_NAME, f.name); // file name - - result.push_back(f) ; - } - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("Size error while deserializing.") ; - if (!ok) - throw std::runtime_error("Unknown error while deserializing.") ; -#endif -} -#endif - void RsTurtleOpenTunnelItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,file_hash ,"file_hash") ; @@ -540,144 +201,12 @@ void RsTurtleOpenTunnelItem::serial_process(SerializeJob j,SerializeContext& ctx RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; } -#ifdef TO_REMOVE -bool RsTurtleOpenTunnelItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= file_hash.serialise(data, tlvsize, offset); // file hash - ok &= setRawUInt32(data, tlvsize, &offset, request_id); - ok &= setRawUInt32(data, tlvsize, &offset, partial_tunnel_id); - ok &= setRawUInt16(data, tlvsize, &offset, depth); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsTurtleOpenTunnelItem::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsTurtleOpenTunnelItem::RsTurtleOpenTunnelItem(void *data,uint32_t pktsize) - : RsTurtleItem(RS_TURTLE_SUBTYPE_OPEN_TUNNEL) -{ - setPriorityLevel(QOS_PRIORITY_RS_TURTLE_OPEN_TUNNEL) ; -#ifdef P3TURTLE_DEBUG - std::cerr << " type = open tunnel" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - - /* add mandatory parts first */ - - bool ok = true ; - ok &= file_hash.deserialise(data, pktsize, offset); // file hash - ok &= getRawUInt32(data, pktsize, &offset, &request_id); - ok &= getRawUInt32(data, pktsize, &offset, &partial_tunnel_id) ; - ok &= getRawUInt16(data, pktsize, &offset, &depth); -#ifdef P3TURTLE_DEBUG - std::cerr << " request_id=" << (void*)request_id << ", partial_id=" << (void*)partial_tunnel_id << ", depth=" << depth << ", hash=" << file_hash << std::endl ; -#endif - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("RsTurtleOpenTunnelItem::() error while deserializing.") ; - if (!ok) - throw std::runtime_error("RsTurtleOpenTunnelItem::() unknown error while deserializing.") ; -#endif -} -#endif - void RsTurtleTunnelOkItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; } -#ifdef TO_REMOVE -bool RsTurtleTunnelOkItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id); - ok &= setRawUInt32(data, tlvsize, &offset, request_id); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsTurtleTunnelOkItem::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsTurtleTunnelOkItem::RsTurtleTunnelOkItem(void *data,uint32_t pktsize) - : RsTurtleItem(RS_TURTLE_SUBTYPE_TUNNEL_OK) -{ - setPriorityLevel(QOS_PRIORITY_RS_TURTLE_TUNNEL_OK) ; -#ifdef P3TURTLE_DEBUG - std::cerr << " type = tunnel ok" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - - /* add mandatory parts first */ - - bool ok = true ; - ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ; - ok &= getRawUInt32(data, pktsize, &offset, &request_id); -#ifdef P3TURTLE_DEBUG - std::cerr << " request_id=" << (void*)request_id << ", tunnel_id=" << (void*)tunnel_id << std::endl ; -#endif - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("RsTurtleTunnelOkItem::() error while deserializing.") ; - if (!ok) - throw std::runtime_error("RsTurtleTunnelOkItem::() unknown error while deserializing.") ; -#endif -} -#endif - void RsTurtleGenericDataItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; @@ -686,165 +215,3 @@ void RsTurtleGenericDataItem::serial_process(SerializeJob j,SerializeContext& ct RsTypeSerializer::serial_process(j,ctx,prox,"data bytes") ; } - -#ifdef TO_REMOVE -RsTurtleGenericDataItem::RsTurtleGenericDataItem(void *data,uint32_t pktsize) - : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_GENERIC_DATA) -{ - setPriorityLevel(QOS_PRIORITY_RS_TURTLE_GENERIC_DATA) ; -#ifdef P3TURTLE_DEBUG - std::cerr << " type = tunnel ok" << std::endl ; -#endif - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - - if(rssize > pktsize) - throw std::runtime_error("RsTurtleTunnelOkItem::() wrong rssize (exceeds pktsize).") ; - - /* add mandatory parts first */ - - bool ok = true ; - - ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ; - ok &= getRawUInt32(data, pktsize, &offset, &data_size); -#ifdef P3TURTLE_DEBUG - std::cerr << " request_id=" << (void*)request_id << ", tunnel_id=" << (void*)tunnel_id << std::endl ; -#endif - - if(data_size > rssize || rssize - data_size < offset) - throw std::runtime_error("RsTurtleTunnelOkItem::() wrong data_size (exceeds rssize).") ; - - data_bytes = rs_malloc(data_size) ; - - if(data_bytes != NULL) - { - memcpy(data_bytes,(void *)((uint8_t *)data+offset),data_size) ; - offset += data_size ; - } - else - offset = 0 ; // generate an error - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("RsTurtleTunnelOkItem::() error while deserializing.") ; - if (!ok) - throw std::runtime_error("RsTurtleTunnelOkItem::() unknown error while deserializing.") ; -#endif -} - -bool RsTurtleGenericDataItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id); - ok &= setRawUInt32(data, tlvsize, &offset, data_size); - - memcpy((void *)((uint8_t *)data+offset),data_bytes,data_size) ; - offset += data_size ; - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsTurtleTunnelOkItem::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -// -----------------------------------------------------------------------------------// -// ------------------------------------- IO --------------------------------------- // -// -----------------------------------------------------------------------------------// -// -std::ostream& RsTurtleStringSearchRequestItem::print(std::ostream& o, uint16_t) -{ - o << "Search request (string):" << std::endl ; - o << " direct origin: \"" << PeerId() << "\"" << std::endl ; - o << " match string: \"" << match_string << "\"" << std::endl ; - o << " Req. Id: " << std::hex << request_id << std::dec << std::endl ; - o << " Depth : " << depth << std::endl ; - - return o ; -} -std::ostream& RsTurtleRegExpSearchRequestItem::print(std::ostream& o, uint16_t) -{ - o << "Search request (regexp):" << std::endl ; - o << " direct origin: \"" << PeerId() << "\"" << std::endl ; - o << " Req. Id: " << std::hex << request_id << std::dec << std::endl ; - o << " Depth : " << depth << std::endl ; - o << " RegExp: " << std::endl ; - o << " Toks: " ; for(unsigned int i=0;i::const_iterator it(result.begin());it!=result.end();++it) - o << " " << it->hash << " " << it->size << " " << it->name << std::endl ; - - return o ; -} - -std::ostream& RsTurtleOpenTunnelItem::print(std::ostream& o, uint16_t) -{ - o << "Open Tunnel:" << std::endl ; - - o << " Peer id : " << PeerId() << std::endl ; - o << " Partial tId: " << std::hex << partial_tunnel_id << std::dec << std::endl ; - o << " Req. Id : " << std::hex << request_id << std::dec << std::endl ; - o << " Depth : " << depth << std::endl ; - o << " Hash : " << file_hash << std::endl ; - - return o ; -} - -std::ostream& RsTurtleTunnelOkItem::print(std::ostream& o, uint16_t) -{ - o << "Tunnel Ok:" << std::endl ; - - o << " Peer id : " << PeerId() << std::endl ; - o << " tunnel id : " << std::hex << tunnel_id << std::dec << std::endl ; - o << " Req. Id : " << std::hex << request_id << std::dec << std::endl ; - - return o ; -} - -std::ostream& RsTurtleGenericDataItem::print(std::ostream& o, uint16_t) -{ - o << "Generic Data item:" << std::endl ; - - o << " Peer id : " << PeerId() << std::endl ; - o << " data size : " << data_size << std::endl ; - o << " data bytes: " << std::hex << (void*)data_bytes << std::dec << std::endl ; - - return o ; -} -#endif From cbc264f5a3f9f90afdd83831691e63291244a69f Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 15 Mar 2017 18:53:30 +0100 Subject: [PATCH 082/230] Fix clang warning:Implicit conversion from enumeration warning: implicit conversion from enumeration type 'ops_s2k_usage_t' to different enumeration type 'ops_symmetric_algorithm_t' [-Wenum- conversion] C.secret_key.algorithm=C.secret_key.s2k_usage; ~~~~~~~~~~~~~~^~~~~~~~~ --- openpgpsdk/src/openpgpsdk/packet-parse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpgpsdk/src/openpgpsdk/packet-parse.c b/openpgpsdk/src/openpgpsdk/packet-parse.c index b80cf4ef8..a4596a55c 100644 --- a/openpgpsdk/src/openpgpsdk/packet-parse.c +++ b/openpgpsdk/src/openpgpsdk/packet-parse.c @@ -2394,7 +2394,7 @@ static int parse_secret_key(ops_region_t *region,ops_parse_info_t *pinfo) else if(C.secret_key.s2k_usage != OPS_S2KU_NONE) { // this is V3 style, looks just like a V4 simple hash - C.secret_key.algorithm=C.secret_key.s2k_usage; + C.secret_key.algorithm=(ops_symmetric_algorithm_t)C.secret_key.s2k_usage; C.secret_key.s2k_usage=OPS_S2KU_ENCRYPTED; C.secret_key.s2k_specifier=OPS_S2KS_SIMPLE; C.secret_key.hash_algorithm=OPS_HASH_MD5; From da4b168a04ddeb797e2db9f47cf9707da01aa63c Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 15 Mar 2017 18:55:24 +0100 Subject: [PATCH 083/230] Fix Clang warnings: mFns is not used warning: private field 'mFns' is not used [-Wunused-private-field] bdDhtFunctions *mFns; ^ --- libbitdht/src/udp/udpbitdht.cc | 2 +- libbitdht/src/udp/udpbitdht.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libbitdht/src/udp/udpbitdht.cc b/libbitdht/src/udp/udpbitdht.cc index 5410d50e0..39c13e182 100644 --- a/libbitdht/src/udp/udpbitdht.cc +++ b/libbitdht/src/udp/udpbitdht.cc @@ -58,7 +58,7 @@ /*************************************/ UdpBitDht::UdpBitDht(UdpPublisher *pub, bdNodeId *id, std::string appVersion, std::string bootstrapfile, const std::string& filteredipfile, bdDhtFunctions *fns) - :UdpSubReceiver(pub), dhtMtx(true), mFns(fns) + :UdpSubReceiver(pub), dhtMtx(true)//, mFns(fns) { std::string usedVersion; diff --git a/libbitdht/src/udp/udpbitdht.h b/libbitdht/src/udp/udpbitdht.h index 36946877e..f1e167abf 100644 --- a/libbitdht/src/udp/udpbitdht.h +++ b/libbitdht/src/udp/udpbitdht.h @@ -119,7 +119,7 @@ void clearDataTransferred(); bdMutex dhtMtx; /* for all class data (below) */ bdNodeManager *mBitDhtManager; - bdDhtFunctions *mFns; + //bdDhtFunctions *mFns; uint32_t mReadBytes; From 105840ab982cb8442f111c49fcba0776abcfd249 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 15 Mar 2017 19:03:39 +0100 Subject: [PATCH 084/230] Fix Clang Warning: Overloaded vf hide warning: 'pqiConnectCbDummy::peerConnectRequest' hides overloaded virtual function [-Woverloaded-virtual] virtual void peerConnectRequest(const RsPeerId& id, ^ --- libretroshare/src/pqi/pqimonitor.cc | 12 +++++++++--- libretroshare/src/pqi/pqimonitor.h | 5 +++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libretroshare/src/pqi/pqimonitor.cc b/libretroshare/src/pqi/pqimonitor.cc index 03894a66d..fac7a50f9 100644 --- a/libretroshare/src/pqi/pqimonitor.cc +++ b/libretroshare/src/pqi/pqimonitor.cc @@ -61,14 +61,20 @@ void pqiConnectCbDummy::peerStatus(const RsPeerId& id, const pqiIpAddrSet &ad std::cerr << out << std::endl; } -void pqiConnectCbDummy::peerConnectRequest(const RsPeerId& id, - const struct sockaddr_storage &raddr, uint32_t source) +void pqiConnectCbDummy::peerConnectRequest(const RsPeerId &id, const sockaddr_storage &raddr + , const sockaddr_storage &proxyaddr, const sockaddr_storage &srcaddr + , uint32_t source, uint32_t flags, uint32_t delay, uint32_t bandwidth) { std::cerr << "pqiConnectCbDummy::peerConnectRequest()"; std::cerr << " id: " << id; std::cerr << " raddr: " << sockaddr_storage_tostring(raddr); + std::cerr << " proxyaddr: " << sockaddr_storage_tostring(proxyaddr); + std::cerr << " srcaddr: " << sockaddr_storage_tostring(srcaddr); std::cerr << " source: " << source; - std::cerr << std::endl; + std::cerr << " flags: " << flags; + std::cerr << " delay: " << delay; + std::cerr << " bandwidth: " << bandwidth; + std::cerr << std::endl; } void pqiMonitor::disconnectPeer(const RsPeerId &/*peer*/) diff --git a/libretroshare/src/pqi/pqimonitor.h b/libretroshare/src/pqi/pqimonitor.h index 34d998e75..94e9bdf05 100644 --- a/libretroshare/src/pqi/pqimonitor.h +++ b/libretroshare/src/pqi/pqimonitor.h @@ -179,8 +179,9 @@ virtual ~pqiConnectCbDummy(); virtual void peerStatus(const RsPeerId& id, const pqiIpAddrSet &addrs, uint32_t type, uint32_t mode, uint32_t source); -virtual void peerConnectRequest(const RsPeerId& id, - const struct sockaddr_storage &raddr, uint32_t source); + virtual void peerConnectRequest(const RsPeerId& id, const struct sockaddr_storage &raddr, + const struct sockaddr_storage &proxyaddr, const struct sockaddr_storage &srcaddr, + uint32_t source, uint32_t flags, uint32_t delay, uint32_t bandwidth); //virtual void stunStatus(std::string id, const struct sockaddr_storage &raddr, uint32_t type, uint32_t flags); }; From cf963c0c7359697c9874df64e4b86ff3671ed54f Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 15 Mar 2017 20:41:39 +0100 Subject: [PATCH 085/230] Fix Clang warnings: struct declared as class warning: 'RsMsgMetaData' defined as a struct here but previously declared as a class [-Wmismatched-tags] struct RsMsgMetaData ^ --- libretroshare/src/gxs/rsgxsdata.h | 24 +++++++++---------- .../src/retroshare/rsgxsifacetypes.h | 2 +- libretroshare/src/retroshare/rsgxsservice.h | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsdata.h b/libretroshare/src/gxs/rsgxsdata.h index 21fbe1445..2b2e9f14d 100644 --- a/libretroshare/src/gxs/rsgxsdata.h +++ b/libretroshare/src/gxs/rsgxsdata.h @@ -34,8 +34,8 @@ #include "serialiser/rstlvkeys.h" #include "serialiser/rsgxsitems.h" -class RsGroupMetaData; -class RsMsgMetaData; +struct RsGroupMetaData; +struct RsMsgMetaData; static const uint32_t RS_GXS_GRP_META_DATA_VERSION_ID_0001 = 0x0000 ; // change this, and keep old values if the content changes static const uint32_t RS_GXS_GRP_META_DATA_VERSION_ID_0002 = 0xaf01 ; // current API @@ -56,22 +56,22 @@ public: void clear(); void operator =(const RsGroupMetaData& rMeta); - //Sort data in same order than serialiser and deserializer + //Sort data in same order than serialiser and deserializer RsGxsGroupId mGroupId; RsGxsGroupId mOrigGrpId; - RsGxsGroupId mParentGrpId; + RsGxsGroupId mParentGrpId; std::string mGroupName; uint32_t mGroupFlags; // GXS_SERV::FLAG_PRIVACY_RESTRICTED | GXS_SERV::FLAG_PRIVACY_PRIVATE | GXS_SERV::FLAG_PRIVACY_PUBLIC uint32_t mPublishTs; - uint32_t mCircleType; - uint32_t mAuthenFlags; + uint32_t mCircleType; + uint32_t mAuthenFlags; RsGxsId mAuthorId; - std::string mServiceString; + std::string mServiceString; RsGxsCircleId mCircleId; RsTlvKeySignatureSet signSet; RsTlvSecurityKeySet keys; - uint32_t mSignFlags; + uint32_t mSignFlags; // BELOW HERE IS LOCAL DATA, THAT IS NOT FROM MSG. @@ -103,9 +103,9 @@ public: void clear(); void operator =(const RsMsgMetaData& rMeta); - static int refcount; - - //Sort data in same order than serialiser and deserializer + static int refcount; + + //Sort data in same order than serialiser and deserializer RsGxsGroupId mGroupId; RsGxsMessageId mMsgId; RsGxsMessageId mThreadId; @@ -121,7 +121,7 @@ public: // BELOW HERE IS LOCAL DATA, THAT IS NOT FROM MSG. // normally READ / UNREAD flags. LOCAL Data. - std::string mServiceString; + std::string mServiceString; uint32_t mMsgStatus; uint32_t mMsgSize; time_t mChildTs; diff --git a/libretroshare/src/retroshare/rsgxsifacetypes.h b/libretroshare/src/retroshare/rsgxsifacetypes.h index 6fd907898..1bc17b5e0 100644 --- a/libretroshare/src/retroshare/rsgxsifacetypes.h +++ b/libretroshare/src/retroshare/rsgxsifacetypes.h @@ -25,7 +25,7 @@ typedef std::pair RsGxsGrpMsgIdPair; typedef std::map > MsgRelatedIdResult; typedef std::map > GxsMsgReq; -class RsMsgMetaData; +struct RsMsgMetaData; typedef std::map > MsgMetaResult; diff --git a/libretroshare/src/retroshare/rsgxsservice.h b/libretroshare/src/retroshare/rsgxsservice.h index 8f26e5262..6afed31c6 100644 --- a/libretroshare/src/retroshare/rsgxsservice.h +++ b/libretroshare/src/retroshare/rsgxsservice.h @@ -5,7 +5,7 @@ #include "retroshare/rsgxsifacetypes.h" #include "retroshare/rstokenservice.h" -class RsMsgMetaData ; +struct RsMsgMetaData ; typedef std::map > GxsMsgMetaMap; typedef std::map > GxsMsgRelatedMetaMap; From 6fecac5f7beee4c66cd45f3c0f77c7e7fe8bca63 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 17:50:25 +0100 Subject: [PATCH 086/230] Fix Clang warnings: Overloaded vf hide warning: 'pqiconnect::connect_parameter' hides overloaded virtual function [-Woverloaded-virtual] virtual bool connect_parameter(uint32_t type, std::string value) { return ni->connect_parameter(type, value);} ^ --- libretroshare/src/pqi/pqiperson.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/pqi/pqiperson.h b/libretroshare/src/pqi/pqiperson.h index f3ff940e1..afd2213d5 100644 --- a/libretroshare/src/pqi/pqiperson.h +++ b/libretroshare/src/pqi/pqiperson.h @@ -29,6 +29,7 @@ #define MRK_PQI_PERSON_HEADER +#include #include "pqi/pqi.h" #include "util/rsnet.h" @@ -66,7 +67,7 @@ public: virtual int reset() { pqistreamer::reset(); return ni->reset(); } virtual int disconnect() { return reset() ; } virtual bool connect_parameter(uint32_t type, uint32_t value) { return ni->connect_parameter(type, value);} - virtual bool connect_parameter(uint32_t type, std::string value) { return ni->connect_parameter(type, value);} + virtual bool connect_parameter(uint32_t type, const std::string &value) { return ni->connect_parameter(type, value);} virtual bool connect_additional_address(uint32_t type, const struct sockaddr_storage &addr) { return ni->connect_additional_address(type, addr); } virtual int getConnectAddress(struct sockaddr_storage &raddr){ return ni->getConnectAddress(raddr); } From 5bc6558567fba0f9f5f30d64d0e72ace1187dd07 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 18:28:48 +0100 Subject: [PATCH 087/230] Fix Clang warnings: explicitly assigning value to itself /home/phenom/GIT/RetroShare/trunk/libretroshare/src/util/radix64.h:96: warning: explicitly assigning value of variable of type 'int' to itself [-Wself-assign] idx = idx; ~~~ ^ ~~~ --- libretroshare/src/util/radix64.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/util/radix64.h b/libretroshare/src/util/radix64.h index dc7f8528c..9ee80f2dd 100644 --- a/libretroshare/src/util/radix64.h +++ b/libretroshare/src/util/radix64.h @@ -93,9 +93,9 @@ again: idx = (idx + 1) % 4; } - idx = idx; + //idx = idx; - return buf; + return buf ; } /**************** From 65321501e48787930da7cde70b92496f1f2d084b Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 21:04:38 +0100 Subject: [PATCH 088/230] Fix Clang warnings: Overloaded vf hide in p3dhtmgr warning: 'p3DhtMgr::findPeer' hides overloaded virtual function [- Woverloaded-virtual] virtual bool findPeer(std::string id); warning: 'p3DhtMgr::dropPeer' hides overloaded virtual function [- Woverloaded-virtual] virtual bool dropPeer(std::string id); warning: 'p3DhtMgr::getPeerStatus' hides overloaded virtual function [- Woverloaded-virtual] virtual bool getPeerStatus(std::string id, --- libretroshare/src/pqi/p3dhtmgr.cc | 46 +++++++++++++++---------------- libretroshare/src/pqi/p3dhtmgr.h | 24 ++++++++-------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/libretroshare/src/pqi/p3dhtmgr.cc b/libretroshare/src/pqi/p3dhtmgr.cc index a93577581..c1d929c94 100644 --- a/libretroshare/src/pqi/p3dhtmgr.cc +++ b/libretroshare/src/pqi/p3dhtmgr.cc @@ -92,7 +92,7 @@ dhtPeerEntry::dhtPeerEntry() return; } -p3DhtMgr::p3DhtMgr(std::string id, pqiConnectCb *cb) +p3DhtMgr::p3DhtMgr(RsPeerId id, pqiConnectCb *cb) :pqiNetAssistConnect(id, cb), dhtMtx("p3DhtMgr"), mStunRequired(true) { /* setup own entry */ @@ -237,13 +237,13 @@ bool p3DhtMgr::setExternalInterface( /* add / remove peers */ -bool p3DhtMgr::findPeer(std::string id) +bool p3DhtMgr::findPeer(const RsPeerId& id) { RsStackMutex stack(dhtMtx); /***** LOCK MUTEX *****/ mDhtModifications = true; - std::map::iterator it; + std::map::iterator it; it = peers.find(id); if (it != peers.end()) { @@ -281,14 +281,14 @@ bool p3DhtMgr::findPeer(std::string id) return true; } -bool p3DhtMgr::dropPeer(std::string id) +bool p3DhtMgr::dropPeer(const RsPeerId& id) { RsStackMutex stack(dhtMtx); /***** LOCK MUTEX *****/ mDhtModifications = true; /* once we are connected ... don't worry about them anymore */ - std::map::iterator it; + std::map::iterator it; it = peers.find(id); if (it == peers.end()) { @@ -302,14 +302,14 @@ bool p3DhtMgr::dropPeer(std::string id) } /* post DHT key saying we should connect */ -bool p3DhtMgr::notifyPeer(std::string id) +bool p3DhtMgr::notifyPeer(const RsPeerId& id) { RsStackMutex stack(dhtMtx); /***** LOCK MUTEX *****/ #ifdef DHT_DEBUG - std::cerr << "p3DhtMgr::notifyPeer() " << id << std::endl; + std::cerr << "p3DhtMgr::notifyPeer() " << id.toStdString() << std::endl; #endif - std::map::iterator it; + std::map::iterator it; it = peers.find(id); if (it == peers.end()) { @@ -333,7 +333,7 @@ bool p3DhtMgr::notifyPeer(std::string id) #ifdef DHT_LOGS { /* Log */ - rslog(RSL_WARNING, p3dhtzone, "p3DhtMgr::notifyPeer() Id: " + id + " TO SOON - DROPPING"); + rslog(RSL_WARNING, p3dhtzone, "p3DhtMgr::notifyPeer() Id: " + id.toStdString() + " TO SOON - DROPPING"); } #endif @@ -352,7 +352,7 @@ bool p3DhtMgr::notifyPeer(std::string id) #ifdef DHT_LOGS { /* Log */ - rslog(RSL_WARNING, p3dhtzone, "p3DhtMgr::notifyPeer() Id: " + id + " PEER NOT FOUND - Trigger Search"); + rslog(RSL_WARNING, p3dhtzone, "p3DhtMgr::notifyPeer() Id: " + id.toStdString() + " PEER NOT FOUND - Trigger Search"); } #endif it->second.lastTS = 0; @@ -364,14 +364,14 @@ bool p3DhtMgr::notifyPeer(std::string id) } /* extract current peer status */ -bool p3DhtMgr::getPeerStatus(std::string id, - struct sockaddr_in &laddr, - struct sockaddr_in &raddr, +bool p3DhtMgr::getPeerStatus(const RsPeerId &id, + struct sockaddr_in &laddr, + struct sockaddr_in &raddr, uint32_t &type, uint32_t &state) { RsStackMutex stack(dhtMtx); /* LOCK MUTEX */ - std::map::iterator it; + std::map::iterator it; it = peers.find(id); /* ignore OFF peers */ @@ -776,7 +776,7 @@ int p3DhtMgr::checkPeerDHTKeys() dhtMtx.lock(); /* LOCK MUTEX */ /* iterate through and find min time and suitable candidate */ - std::map::iterator it,pit; + std::map::iterator it,pit; time_t now = time(NULL); uint32_t period = 0; uint32_t repeatPeriod = 6000; @@ -802,7 +802,7 @@ int p3DhtMgr::checkPeerDHTKeys() period = DHT_CHECK_PERIOD; } #ifdef DHT_DEBUG - std::cerr << "p3DhtMgr::checkPeerDHTKeys() Peer: " << it->second.id; + std::cerr << "p3DhtMgr::checkPeerDHTKeys() Peer: " << it->second.id.toStdString(); std::cerr << " Period: " << period; std::cerr << " Delta: " << delta; std::cerr << std::endl; @@ -865,7 +865,7 @@ int p3DhtMgr::checkNotifyDHT() RsStackMutex stack(dhtMtx); /***** LOCK MUTEX *****/ /* iterate through and find min time and suitable candidate */ - std::map::iterator it; + std::map::iterator it; time_t now = time(NULL); int repeatPeriod = DHT_DEFAULT_PERIOD; @@ -1015,7 +1015,7 @@ int p3DhtMgr::checkStunState() if (mDhtState == DHT_STATE_CHECK_PEERS) { /* check that they have all be searched for */ - std::map::iterator it; + std::map::iterator it; for(it = peers.begin(); it != peers.end(); it++) { if (it->second.state == DHT_PEER_INIT) @@ -1287,7 +1287,7 @@ int p3DhtMgr::status(std::ostream &out) out << "OWN DETAILS END----------------------------------------" << std::endl; /* now peers states */ - std::map::iterator it; + std::map::iterator it; out << "PEER DETAILS ------------------------------------------" << std::endl; for(it = peers.begin(); it != peers.end(); it++) { @@ -1622,15 +1622,13 @@ bool p3DhtMgr::dhtResultNotify(std::string idhash) std::cerr << "p3DhtMgr::dhtResultNotify() from idhash: "; std::cerr << RsUtil::BinToHex(idhash) << std::endl; #endif - std::map::iterator it; + std::map::iterator it; time_t now = time(NULL); /* if notify - we must match on the second hash */ for(it = peers.begin(); (it != peers.end()) && ((it->second).hash2 != idhash); it++) ; /* update data */ - std::string peerid; - /* ignore OFF peers */ if ((it != peers.end()) && (it->second.state != DHT_PEER_OFF)) { @@ -1677,7 +1675,7 @@ bool p3DhtMgr::dhtResultSearch(std::string idhash, std::cerr << "p3DhtMgr::dhtResultSearch() for idhash: "; std::cerr << RsUtil::BinToHex(idhash) << std::endl; #endif - std::map::iterator it; + std::map::iterator it; bool doCb = false; bool doStun = false; uint32_t stunFlags = 0; @@ -1780,7 +1778,7 @@ bool p3DhtMgr::dhtResultSearch(std::string idhash, void printDhtPeerEntry(dhtPeerEntry *ent, std::ostream &out) { - out << "DhtEntry: ID: " << ent->id; + out << "DhtEntry: ID: " << ent->id.toStdString(); out << " State: " << ent->state; out << " lastTS: " << ent->lastTS; out << " notifyPending: " << ent->notifyPending; diff --git a/libretroshare/src/pqi/p3dhtmgr.h b/libretroshare/src/pqi/p3dhtmgr.h index f08c2bc96..86d6b5424 100644 --- a/libretroshare/src/pqi/p3dhtmgr.h +++ b/libretroshare/src/pqi/p3dhtmgr.h @@ -78,7 +78,7 @@ class dhtPeerEntry public: dhtPeerEntry(); - std::string id; + RsPeerId id; uint32_t state; time_t lastTS; @@ -97,7 +97,7 @@ class p3DhtMgr: public pqiNetAssistConnect, public RsThread /* */ public: - p3DhtMgr(std::string id, pqiConnectCb *cb); + p3DhtMgr(RsPeerId id, pqiConnectCb *cb); /********** External DHT Interface ************************ * These Functions are the external interface @@ -121,15 +121,15 @@ virtual bool setExternalInterface(struct sockaddr_in laddr, struct sockaddr_in raddr, uint32_t type); /* add / remove peers */ -virtual bool findPeer(std::string id); -virtual bool dropPeer(std::string id); +virtual bool findPeer(const RsPeerId& id); +virtual bool dropPeer(const RsPeerId& id); /* post DHT key saying we should connect (callback when done) */ -virtual bool notifyPeer(std::string id); +virtual bool notifyPeer(const RsPeerId& id); /* extract current peer status */ -virtual bool getPeerStatus(std::string id, - struct sockaddr_in &laddr, struct sockaddr_in &raddr, +virtual bool getPeerStatus(const RsPeerId& id, + struct sockaddr_in &laddr, struct sockaddr_in &raddr, uint32_t &type, uint32_t &mode); /* stun */ @@ -154,17 +154,17 @@ virtual bool dhtResultBootstrap(std::string idhash); protected: /* can block briefly (called only from thread) */ -virtual bool dhtPublish(std::string id, +virtual bool dhtPublish(std::string idhash, struct sockaddr_in &laddr, struct sockaddr_in &raddr, uint32_t type, std::string sign); -virtual bool dhtNotify(std::string peerid, std::string ownId, +virtual bool dhtNotify(std::string idhash, std::string ownIdHash, std::string sign); -virtual bool dhtSearch(std::string id, uint32_t mode); +virtual bool dhtSearch(std::string idhash, uint32_t mode); -virtual bool dhtBootstrap(std::string storehash, std::string ownIdHash, +virtual bool dhtBootstrap(std::string idhash, std::string ownIdHash, std::string sign); /* to publish bootstrap */ @@ -232,7 +232,7 @@ std::string randomBootstrapId(); dhtPeerEntry ownEntry; time_t ownNotifyTS; - std::map peers; + std::map peers; std::list stunIds; bool mStunRequired; From dc533b1346ce1f7fa4f8137ee8133fc65cb285e9 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 22:01:22 +0100 Subject: [PATCH 089/230] Fix Clang warnings: private field not used warning: private field 'lastGroupId' is not used [-Wunused-private- field] uint32_t lastGroupId; warning: private field 'waittimes' is not used [-Wunused-private-field] int waittimes; warning: private field 'listen_checktime' is not used [-Wunused-private- field] long listen_checktime; --- libretroshare/src/pqi/p3peermgr.h | 2 +- libretroshare/src/pqi/pqiperson.cc | 2 +- libretroshare/src/pqi/pqiperson.h | 2 +- libretroshare/src/pqi/pqissludp.cc | 2 +- libretroshare/src/pqi/pqissludp.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libretroshare/src/pqi/p3peermgr.h b/libretroshare/src/pqi/p3peermgr.h index ee581b275..f0a9a44cb 100644 --- a/libretroshare/src/pqi/p3peermgr.h +++ b/libretroshare/src/pqi/p3peermgr.h @@ -397,7 +397,7 @@ private: std::map mReportedOwnAddresses ; std::map groupList; - uint32_t lastGroupId; + //uint32_t lastGroupId; std::list saveCleanupList; /* TEMPORARY LIST WHEN SAVING */ diff --git a/libretroshare/src/pqi/pqiperson.cc b/libretroshare/src/pqi/pqiperson.cc index cade0c39e..e7d1cf18b 100644 --- a/libretroshare/src/pqi/pqiperson.cc +++ b/libretroshare/src/pqi/pqiperson.cc @@ -40,7 +40,7 @@ static struct RsLog::logInfo pqipersonzoneInfo = {RsLog::Default, "pqiperson"}; pqiperson::pqiperson(const RsPeerId& id, pqipersongrp *pg) : PQInterface(id), mNotifyMtx("pqiperson-notify"), mPersonMtx("pqiperson"), - active(false), activepqi(NULL), inConnectAttempt(false), waittimes(0), + active(false), activepqi(NULL), inConnectAttempt(false),// waittimes(0), pqipg(pg) {} // TODO: must check id! pqiperson::~pqiperson() diff --git a/libretroshare/src/pqi/pqiperson.h b/libretroshare/src/pqi/pqiperson.h index afd2213d5..69faec48c 100644 --- a/libretroshare/src/pqi/pqiperson.h +++ b/libretroshare/src/pqi/pqiperson.h @@ -172,7 +172,7 @@ private: bool active; pqiconnect *activepqi; bool inConnectAttempt; - int waittimes; + //int waittimes; time_t lastHeartbeatReceived; // use to track connection failure pqipersongrp *pqipg; /* parent for callback */ }; diff --git a/libretroshare/src/pqi/pqissludp.cc b/libretroshare/src/pqi/pqissludp.cc index 9519e2af3..29bd228c9 100644 --- a/libretroshare/src/pqi/pqissludp.cc +++ b/libretroshare/src/pqi/pqissludp.cc @@ -53,7 +53,7 @@ static const uint32_t PQI_SSLUDP_DEF_CONN_PERIOD = 300; /* 5 minutes? */ /********** PQI SSL UDP STUFF **************************************/ pqissludp::pqissludp(PQInterface *parent, p3LinkMgr *lm) : - pqissl(NULL, parent, lm), tou_bio(NULL), listen_checktime(0), + pqissl(NULL, parent, lm), tou_bio(NULL),// listen_checktime(0), mConnectPeriod(PQI_SSLUDP_DEF_CONN_PERIOD), mConnectFlags(0), mConnectBandwidth(0) { diff --git a/libretroshare/src/pqi/pqissludp.h b/libretroshare/src/pqi/pqissludp.h index 848717bbd..195e9e604 100644 --- a/libretroshare/src/pqi/pqissludp.h +++ b/libretroshare/src/pqi/pqissludp.h @@ -95,7 +95,7 @@ private: BIO *tou_bio; // specific to ssludp. - long listen_checktime; + //long listen_checktime; uint32_t mConnectPeriod; uint32_t mConnectFlags; From 22043094b5d269a92db3816468b2312f98e7e374 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 22:11:33 +0100 Subject: [PATCH 090/230] Fix Clang warnings: extraneous parentheses warning: equality comparison with extraneous parentheses [-Wparentheses- equality] else if ((err == ECONNREFUSED)) ~~~~^~~~~~~~~~~~~~~ --- libretroshare/src/pqi/pqissl.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/pqi/pqissl.cc b/libretroshare/src/pqi/pqissl.cc index b7709bb82..bcc49cbbc 100644 --- a/libretroshare/src/pqi/pqissl.cc +++ b/libretroshare/src/pqi/pqissl.cc @@ -1009,7 +1009,7 @@ int pqissl::Basic_Connection_Complete() return -1; } - else if ((err == ECONNREFUSED)) + else if (err == ECONNREFUSED) { rslog(RSL_WARNING, pqisslzone, "pqissl::Basic_Connection_Complete() ECONNREFUSED: cert: " + PeerId().toStdString()); From 872f42bcefe4b6fc6c0b84d04b4484dff177b549 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 22:55:18 +0100 Subject: [PATCH 091/230] Fix Clang warnings: Overloaded vf hide in pluginmanager warning: 'RsPluginManager::loadConfiguration' hides overloaded virtual function [-Woverloaded-virtual] virtual void loadConfiguration() ; --- libretroshare/src/plugins/pluginmanager.cc | 7 ++++++- libretroshare/src/plugins/pluginmanager.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/plugins/pluginmanager.cc b/libretroshare/src/plugins/pluginmanager.cc index 431b6c2f8..259004300 100644 --- a/libretroshare/src/plugins/pluginmanager.cc +++ b/libretroshare/src/plugins/pluginmanager.cc @@ -51,9 +51,14 @@ RsPluginManager::RsPluginManager(const RsFileHash &hash) _allow_all_plugins = false ; } +bool RsPluginManager::loadConfiguration(RsFileHash &loadHash) +{ + return p3Config::loadConfiguration(loadHash); +} + void RsPluginManager::loadConfiguration() { - RsFileHash dummyHash ; + RsFileHash dummyHash; p3Config::loadConfiguration(dummyHash); } diff --git a/libretroshare/src/plugins/pluginmanager.h b/libretroshare/src/plugins/pluginmanager.h index 5f2a8c3b7..27a74f870 100644 --- a/libretroshare/src/plugins/pluginmanager.h +++ b/libretroshare/src/plugins/pluginmanager.h @@ -74,6 +74,7 @@ class RsPluginManager: public RsPluginHandler, public p3Config // -------------------- Own members -------------------------// // virtual void addConfigurations(p3ConfigMgr *cfgMgr) ; + virtual bool loadConfiguration(RsFileHash &loadHash) ; virtual void loadConfiguration() ; /*! From 039908b2c634d1a8c9355b5bb2574de8812b83e2 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 16 Mar 2017 22:58:06 +0100 Subject: [PATCH 092/230] Fix Clang warnings: private field not used warning: private field 'mNetMgr' is not used [-Wunused-private-field] p3NetMgr *mNetMgr; --- libretroshare/src/services/p3banlist.cc | 4 ++-- libretroshare/src/services/p3banlist.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libretroshare/src/services/p3banlist.cc b/libretroshare/src/services/p3banlist.cc index 157cc23f8..65d56987b 100644 --- a/libretroshare/src/services/p3banlist.cc +++ b/libretroshare/src/services/p3banlist.cc @@ -66,8 +66,8 @@ */ RsBanList *rsBanList = NULL ; -p3BanList::p3BanList(p3ServiceControl *sc, p3NetMgr *nm) - :p3Service(), mBanMtx("p3BanList"), mServiceCtrl(sc), mNetMgr(nm) +p3BanList::p3BanList(p3ServiceControl *sc, p3NetMgr */*nm*/) + :p3Service(), mBanMtx("p3BanList"), mServiceCtrl(sc)//, mNetMgr(nm) { addSerialType(new RsBanListSerialiser()); diff --git a/libretroshare/src/services/p3banlist.h b/libretroshare/src/services/p3banlist.h index 87bb7104a..86456d6ae 100644 --- a/libretroshare/src/services/p3banlist.h +++ b/libretroshare/src/services/p3banlist.h @@ -148,7 +148,7 @@ private: std::map mWhiteListedRanges; p3ServiceControl *mServiceCtrl; - p3NetMgr *mNetMgr; + //p3NetMgr *mNetMgr; time_t mLastDhtInfoRequest ; bool mIPFilteringEnabled ; From e83104ee0fc520cc9115be3fa1bd335130cb5630 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 10:19:31 +0100 Subject: [PATCH 093/230] Fix Clang warnings: Add author and date to #warning --- libretroshare/src/gxs/rsgxsnetservice.cc | 4 ++-- libretroshare/src/gxs/rsgxsnetutils.cc | 2 +- libretroshare/src/pqi/sslfns.cc | 2 +- libretroshare/src/services/p3gxsreputation.cc | 2 +- libretroshare/src/services/p3idservice.cc | 2 +- retroshare-gui/src/gui/Identity/IdDialog.cpp | 2 +- retroshare-gui/src/gui/RetroShareLink.h | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 259d01135..3811ddd0c 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -1972,7 +1972,7 @@ void RsGxsNetService::updateServerSyncTS() #endif // I keep the creation, but the data is not used yet. -#warning disabled this, but do we need it? +#warning csoler 2016-12-12: Disabled this, but do we need it? // RsGxsServerMsgUpdate& msui(mServerMsgUpdateMap[grpId]) ; // (cyril) I'm removing this, because the msgUpdateTS is updated when new messages are received by calling locked_stampMsgServerUpdateTS(). @@ -3000,7 +3000,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) } // FIXTESTS global variable rsReputations not available in unittests! -#warning Update the code below to correctly send/recv dependign on reputation +#warning csoler 2016-12-23: Update the code below to correctly send/recv dependign on reputation if(!grpSyncItem->authorId.isNull() && mReputations->overallReputationLevel(grpSyncItem->authorId) == RsReputations::REPUTATION_LOCALLY_NEGATIVE) { #ifdef NXS_NET_DEBUG_0 diff --git a/libretroshare/src/gxs/rsgxsnetutils.cc b/libretroshare/src/gxs/rsgxsnetutils.cc index 4d54ce117..7454ba58a 100644 --- a/libretroshare/src/gxs/rsgxsnetutils.cc +++ b/libretroshare/src/gxs/rsgxsnetutils.cc @@ -45,7 +45,7 @@ bool AuthorPending::getAuthorRep(GixsReputation& rep, const RsGxsId& authorId, c rep.id = authorId ; rep.reputation_level = mRep->overallReputationLevel(authorId); -#warning can it happen that reputations do not have the info yet? +#warning csoler 2017-01-10: Can it happen that reputations do not have the info yet? return true ; #ifdef TO_BE_REMOVED { diff --git a/libretroshare/src/pqi/sslfns.cc b/libretroshare/src/pqi/sslfns.cc index 7cf742956..ba5a9e6a3 100644 --- a/libretroshare/src/pqi/sslfns.cc +++ b/libretroshare/src/pqi/sslfns.cc @@ -627,7 +627,7 @@ bool getX509id(X509 *x509, RsPeerId& xid) * more randomness */ -#warning this is cryptographically horrible. We should do a hash of the public key here!!! +#warning csoler 2017-02-19: This is cryptographically horrible. We should do a hash of the public key here!!! xid = RsPeerId(&signdata[signlen - CERTSIGNLEN]) ; diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc index 45fd95898..c60f54f0c 100644 --- a/libretroshare/src/services/p3gxsreputation.cc +++ b/libretroshare/src/services/p3gxsreputation.cc @@ -1035,7 +1035,7 @@ bool p3GxsReputation::setOwnOpinion(const RsGxsId& gxsid, const RsReputations::O if (rit == mReputations.end()) { -#warning we should set the owner node id here. +#warning csoler 2017-01-05: We should set the owner node id here. mReputations[gxsid] = Reputation(gxsid); rit = mReputations.find(gxsid); } diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index dcc45af65..78abe7d2b 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -788,7 +788,7 @@ bool p3IdService::createIdentity(uint32_t& token, RsIdentityParameters ¶ms) if (params.isPgpLinked) { -#warning Backward compatibility issue to fix here in v0.7.0 +#warning csoler 2017-02-07: Backward compatibility issue to fix here in v0.7.0 // This is a hack, because a bad decision led to having RSGXSID_GROUPFLAG_REALID be equal to GXS_SERV::FLAG_PRIVACY_PRIVATE. // In order to keep backward compatibility, we'll also add the new value diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 96b943d15..1cf93055b 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1993,7 +1993,7 @@ QString IdDialog::createUsageString(const RsIdentityUsage& u) const return tr("Membership verification in circle %1.").arg(QString::fromStdString(u.mGrpId.toStdString())); } -#warning TODO! Add the different strings and translations here. +#warning TODO! csoler 2017-01-03: Add the different strings and translations here. default: return QString("Undone yet"); } diff --git a/retroshare-gui/src/gui/RetroShareLink.h b/retroshare-gui/src/gui/RetroShareLink.h index b272f3416..241d56740 100644 --- a/retroshare-gui/src/gui/RetroShareLink.h +++ b/retroshare-gui/src/gui/RetroShareLink.h @@ -77,7 +77,7 @@ class RetroShareLink RetroShareLink(const QUrl& url); RetroShareLink(const QString& url); -#warning these methods should be static and return a created link +#warning csoler 2017-01-04: These methods should be static and return a created link bool createFile(const QString& name, uint64_t size, const QString& hash); bool createExtraFile(const QString& name, uint64_t size, const QString& hash, const QString& ssl_id); bool createPerson(const RsPgpId &id); From 4ac3b3f5bfd2d156e3c16fbc1d29f3c8d013d8ea Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 10:20:57 +0100 Subject: [PATCH 094/230] Fix Clang warnings: implicit conversion of NULL to bool warning: implicit conversion of NULL constant to 'bool' [-Wnull- conversion] return NULL ; ~~~~~~ ^~~~ false --- libretroshare/src/gxstunnel/p3gxstunnel.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/gxstunnel/p3gxstunnel.cc b/libretroshare/src/gxstunnel/p3gxstunnel.cc index 3ad4198a9..871a5cd49 100644 --- a/libretroshare/src/gxstunnel/p3gxstunnel.cc +++ b/libretroshare/src/gxstunnel/p3gxstunnel.cc @@ -1193,7 +1193,7 @@ bool p3GxsTunnelService::locked_sendClearTunnelData(RsGxsTunnelDHPublicKeyItem * if(gitem->data_bytes == NULL) { delete gitem ; - return NULL ; + return false ; } // by convention, we use a IV of 0 for unencrypted data. memset(gitem->data_bytes,0,8) ; From 32eeb957b247f72603fcb98f5f52cf2e58e89fc7 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 10:25:23 +0100 Subject: [PATCH 095/230] Fix Clang warnings: unused private field warning: private field 'mAutoBanIdentitiesLimit' is not used [-Wunused- private-field] float mAutoBanIdentitiesLimit ; warning: private field 'mFiles' is not used [-Wunused-private-field] RsFiles* mFiles; --- libresapi/src/api/FileSearchHandler.cpp | 4 ++-- libresapi/src/api/FileSearchHandler.h | 2 +- libretroshare/src/services/p3gxsreputation.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libresapi/src/api/FileSearchHandler.cpp b/libresapi/src/api/FileSearchHandler.cpp index 2b56317ad..c159ad913 100644 --- a/libresapi/src/api/FileSearchHandler.cpp +++ b/libresapi/src/api/FileSearchHandler.cpp @@ -10,8 +10,8 @@ namespace resource_api { -FileSearchHandler::FileSearchHandler(StateTokenServer *sts, RsNotify *notify, RsTurtle *turtle, RsFiles *files): - mStateTokenServer(sts), mNotify(notify), mTurtle(turtle), mFiles(files), +FileSearchHandler::FileSearchHandler(StateTokenServer *sts, RsNotify *notify, RsTurtle *turtle, RsFiles */*files*/): + mStateTokenServer(sts), mNotify(notify), mTurtle(turtle),// mFiles(files), mMtx("FileSearchHandler") { mNotify->registerNotifyClient(this); diff --git a/libresapi/src/api/FileSearchHandler.h b/libresapi/src/api/FileSearchHandler.h index 1cab730a4..a049c2207 100644 --- a/libresapi/src/api/FileSearchHandler.h +++ b/libresapi/src/api/FileSearchHandler.h @@ -24,7 +24,7 @@ private: StateTokenServer* mStateTokenServer; RsNotify* mNotify; RsTurtle* mTurtle; - RsFiles* mFiles; + //RsFiles* mFiles; class Search{ public: diff --git a/libretroshare/src/services/p3gxsreputation.h b/libretroshare/src/services/p3gxsreputation.h index baabdaa43..890092237 100644 --- a/libretroshare/src/services/p3gxsreputation.h +++ b/libretroshare/src/services/p3gxsreputation.h @@ -174,7 +174,7 @@ private: time_t mLastIdentityFlagsUpdate ; bool mReputationsUpdated; - float mAutoBanIdentitiesLimit ; + //float mAutoBanIdentitiesLimit ; bool mAutoSetPositiveOptionToContacts; p3LinkMgr *mLinkMgr; From de4f6c06dd951f5b6f18005cbb06cd3e892e1920 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 10:42:38 +0100 Subject: [PATCH 096/230] Fix Clang warnings: Z-order assignment to spacer warning: Z-order assignment: 'verticalSpacer_2' is not a valid widget. --- retroshare-gui/src/gui/Identity/IdDialog.ui | 36 ++++++++++----------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.ui b/retroshare-gui/src/gui/Identity/IdDialog.ui index 016ff28e1..1c52802ef 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.ui +++ b/retroshare-gui/src/gui/Identity/IdDialog.ui @@ -287,7 +287,7 @@ 692 - + @@ -296,12 +296,12 @@ QFrame::Raised - + 12 - + @@ -397,7 +397,7 @@ QFrame::Box - + 6 @@ -514,7 +514,7 @@ border-image: url(:/images/closepressed.png) Identity info - + @@ -526,7 +526,7 @@ border-image: url(:/images/closepressed.png) - + Your opinion: @@ -540,7 +540,7 @@ border-image: url(:/images/closepressed.png) - + Qt::Horizontal @@ -728,7 +728,7 @@ p, li { white-space: pre-wrap; } - + @@ -774,12 +774,12 @@ p, li { white-space: pre-wrap; } - + 6 - + 34 @@ -813,14 +813,14 @@ p, li { white-space: pre-wrap; } - + Qt::Vertical - + 34 @@ -856,7 +856,7 @@ p, li { white-space: pre-wrap; } - + Qt::Vertical @@ -874,11 +874,11 @@ p, li { white-space: pre-wrap; } - + Usage statistics - + @@ -886,7 +886,7 @@ p, li { white-space: pre-wrap; } - + Qt::Vertical @@ -900,10 +900,8 @@ p, li { white-space: pre-wrap; } detailsGroupBox - detailsGroupBox - groupBox + usageStatisticsGBox headerFramePerson - verticalSpacer_2 From e0225efef35068800241d02ff4cee25c1a9e8a9e Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 11:19:42 +0100 Subject: [PATCH 097/230] Fix Clang warnings: 'ChatLobbyDialog::init' hides overloaded virtual function warning: 'ChatLobbyDialog::init' hides overloaded virtual function [- Woverloaded-virtual] virtual void init(); ^ /retroshare-gui/src/gui/chat/ChatDialog.h:87: hidden overloaded virtual function 'ChatDialog::init' declared here: different number of parameters (2 vs 0) virtual void init(ChatId id, const QString &title); ^ --- retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp | 5 +++++ retroshare-gui/src/gui/chat/ChatLobbyDialog.h | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp index 4056156bb..c5dec3a67 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp @@ -304,6 +304,11 @@ void ChatLobbyDialog::showInPeopleTab() idDialog->navigate(nickname); } +void ChatLobbyDialog::init(ChatId /*id*/, const QString &/*title*/) +{ + init(); +} + void ChatLobbyDialog::init() { ChatLobbyInfo linfo ; diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h index 40fb44014..2dd66a554 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h @@ -71,7 +71,8 @@ protected: virtual ~ChatLobbyDialog(); void processSettings(bool load); - virtual void init(); + virtual void init(ChatId id, const QString &title); + void init(); virtual bool canClose(); virtual void addChatMsg(const ChatMessage &msg); From 13c8f7d342418c2f52943238fc630ba89aa6f601 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 11:28:29 +0100 Subject: [PATCH 098/230] Fix Clang warnings: Infinite recursion warning: all paths through this function will call itself [-Winfinite- recursion] { ^ --- retroshare-gui/src/gui/MainWindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index 4fecfa620..8e8534345 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -1207,7 +1207,7 @@ void MainWindow::showHelpDialog(const QString &topic) void MainWindow::retranslateUi() { - retranslateUi(); + //retranslateUi(); foreach (MainPage *page, ui->stackPages->pages()) { page->retranslateUi(); } From 9319caffc77dfcf4427baacc86349d71b520a26c Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 11:32:56 +0100 Subject: [PATCH 099/230] Fix Clang warnings: 'Node::advance' hides overloaded virtual function warning: 'Node::advance' hides overloaded virtual function [- Woverloaded-virtual] bool advance(); ^ /usr/include/qt4/QtGui/qgraphicsitem.h:323: hidden overloaded virtual function 'QGraphicsItem::advance' declared here: different number of parameters (1 vs 0) virtual void advance(int phase); ^ --- retroshare-gui/src/gui/elastic/graphwidget.cpp | 2 +- retroshare-gui/src/gui/elastic/node.cpp | 2 +- retroshare-gui/src/gui/elastic/node.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/retroshare-gui/src/gui/elastic/graphwidget.cpp b/retroshare-gui/src/gui/elastic/graphwidget.cpp index bb1f9ffb8..a2c69c80d 100644 --- a/retroshare-gui/src/gui/elastic/graphwidget.cpp +++ b/retroshare-gui/src/gui/elastic/graphwidget.cpp @@ -362,7 +362,7 @@ void GraphWidget::timerEvent(QTimerEvent *event) bool itemsMoved = false; foreach (Node *node, _nodes) - if(node->advance()) + if(node->progress()) itemsMoved = true; if (!itemsMoved) { diff --git a/retroshare-gui/src/gui/elastic/node.cpp b/retroshare-gui/src/gui/elastic/node.cpp index bc33151df..6a3020b21 100644 --- a/retroshare-gui/src/gui/elastic/node.cpp +++ b/retroshare-gui/src/gui/elastic/node.cpp @@ -215,7 +215,7 @@ void Node::calculateForces(const double *map,int width,int height,int W,int H,fl newPos.setY(qMin(qMax(newPos.y(), sceneRect.top()) , sceneRect.bottom())); } -bool Node::advance() +bool Node::progress() { if(_type == GraphWidget::ELASTIC_NODE_TYPE_OWN) return false; diff --git a/retroshare-gui/src/gui/elastic/node.h b/retroshare-gui/src/gui/elastic/node.h index 13c717b0b..e43fa3521 100644 --- a/retroshare-gui/src/gui/elastic/node.h +++ b/retroshare-gui/src/gui/elastic/node.h @@ -77,7 +77,7 @@ public: std::string descString() const { return _desc_string ; } void calculateForces(const double *data,int width,int height,int W,int H,float x,float y,float speedf); - bool advance(); + bool progress(); QRectF boundingRect() const; QPainterPath shape() const; From eea49d96bfb58914ef031d7139571c1cc6f36d80 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 18 Mar 2017 11:56:11 +0100 Subject: [PATCH 100/230] Fix Clang warnings: change ChatDialog::init definition warning: 'PopupChatDialog::init' hides overloaded virtual function [- Woverloaded-virtual] virtual void init(const ChatId &chat_id, const QString &title); ^ /retroshare-gui/src/gui/chat/ChatDialog.h:87: hidden overloaded virtual function 'ChatDialog::init' declared here: type mismatch at 1st parameter ('ChatId' vs 'const ChatId &') virtual void init(ChatId id, const QString &title); ^ --- retroshare-gui/src/gui/chat/ChatDialog.cpp | 4 ++-- retroshare-gui/src/gui/chat/ChatDialog.h | 2 +- retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp | 7 +------ retroshare-gui/src/gui/chat/ChatLobbyDialog.h | 3 +-- retroshare-gui/src/gui/chat/PopupChatDialog.h | 2 +- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/retroshare-gui/src/gui/chat/ChatDialog.cpp b/retroshare-gui/src/gui/chat/ChatDialog.cpp index 2ab8b8e90..2a52ccf35 100644 --- a/retroshare-gui/src/gui/chat/ChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatDialog.cpp @@ -63,7 +63,7 @@ void ChatDialog::closeEvent(QCloseEvent *event) emit dialogClose(this); } -void ChatDialog::init(ChatId id, const QString &title) +void ChatDialog::init(const ChatId &id, const QString &title) { mChatId = id; ChatWidget *cw = getChatWidget(); @@ -102,7 +102,7 @@ void ChatDialog::init(ChatId id, const QString &title) if (chatflags & RS_CHAT_OPEN) { if (id.isLobbyId()) { ChatLobbyDialog* cld = new ChatLobbyDialog(id.toLobbyId()); - cld->init(); + cld->init(ChatId(), ""); cd = cld; } else if(id.isDistantChatId()) diff --git a/retroshare-gui/src/gui/chat/ChatDialog.h b/retroshare-gui/src/gui/chat/ChatDialog.h index f6b4ae57e..a5c6a0bc3 100644 --- a/retroshare-gui/src/gui/chat/ChatDialog.h +++ b/retroshare-gui/src/gui/chat/ChatDialog.h @@ -84,7 +84,7 @@ protected: virtual QString getPeerName(const ChatId &sslid) const ; // can be overloaded for chat dialogs that have specific peers virtual QString getOwnName() const; - virtual void init(ChatId id, const QString &title); + virtual void init(const ChatId &id, const QString &title); virtual void addChatMsg(const ChatMessage& msg) = 0; ChatId mChatId; diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp index c5dec3a67..20352b888 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp @@ -304,12 +304,7 @@ void ChatLobbyDialog::showInPeopleTab() idDialog->navigate(nickname); } -void ChatLobbyDialog::init(ChatId /*id*/, const QString &/*title*/) -{ - init(); -} - -void ChatLobbyDialog::init() +void ChatLobbyDialog::init(const ChatId &/*id*/, const QString &/*title*/) { ChatLobbyInfo linfo ; diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h index 2dd66a554..420524f93 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h @@ -71,8 +71,7 @@ protected: virtual ~ChatLobbyDialog(); void processSettings(bool load); - virtual void init(ChatId id, const QString &title); - void init(); + virtual void init(const ChatId &id, const QString &title); virtual bool canClose(); virtual void addChatMsg(const ChatMessage &msg); diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.h b/retroshare-gui/src/gui/chat/PopupChatDialog.h index 0a304b14c..49e3036b3 100644 --- a/retroshare-gui/src/gui/chat/PopupChatDialog.h +++ b/retroshare-gui/src/gui/chat/PopupChatDialog.h @@ -46,7 +46,7 @@ protected: /** Default destructor */ virtual ~PopupChatDialog(); - virtual void init(const ChatId &chat_id, const QString &title); + virtual void init(const ChatId &chat_id, const QString &title); virtual void showDialog(uint chatflags); virtual ChatWidget *getChatWidget(); virtual bool hasPeerStatus() { return true; } From 07b67e9cc90bea746d92711289a212de50ad2fcf Mon Sep 17 00:00:00 2001 From: Phenom Date: Sun, 19 Mar 2017 10:40:34 +0100 Subject: [PATCH 101/230] Fix Clang warnings: 'PopupDistantChatDialog::init' hides overloaded virtual function warning: 'PopupDistantChatDialog::init' hides overloaded virtual function [-Woverloaded-virtual] virtual void init(const DistantChatPeerId& peer_id); /retroshare-gui/src/gui/chat/PopupChatDialog.h:49: hidden overloaded virtual function 'PopupChatDialog::init' declared here: different number of parameters (2 vs 1) virtual void init(const ChatId &chat_id, const QString &title); --- retroshare-gui/src/gui/chat/ChatDialog.cpp | 2 +- .../src/gui/chat/PopupDistantChatDialog.cpp | 13 ++++++++----- .../src/gui/chat/PopupDistantChatDialog.h | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/retroshare-gui/src/gui/chat/ChatDialog.cpp b/retroshare-gui/src/gui/chat/ChatDialog.cpp index 2a52ccf35..9fe8220ab 100644 --- a/retroshare-gui/src/gui/chat/ChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatDialog.cpp @@ -109,7 +109,7 @@ void ChatDialog::init(const ChatId &id, const QString &title) { PopupDistantChatDialog* pdcd = new PopupDistantChatDialog(id.toDistantChatId()); - pdcd->init(id.toDistantChatId()); + pdcd->init(id, ""); cd = pdcd; } else diff --git a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp index 4992b5ff5..dea397310 100644 --- a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp +++ b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.cpp @@ -63,9 +63,12 @@ PopupDistantChatDialog::PopupDistantChatDialog(const DistantChatPeerId& tunnel_i updateDisplay() ; } -void PopupDistantChatDialog::init(const DistantChatPeerId &peer_id) +void PopupDistantChatDialog::init(const ChatId &chat_id, const QString &/*title*/) { - _tunnel_id = peer_id; + if (!chat_id.isDistantChatId()) + return; + + _tunnel_id = chat_id.toDistantChatId(); DistantChatPeerInfo tinfo; if(!rsMsgs->getDistantChatStatus(_tunnel_id,tinfo)) @@ -74,15 +77,15 @@ void PopupDistantChatDialog::init(const DistantChatPeerId &peer_id) RsIdentityDetails iddetails ; if(rsIdentity->getIdDetails(tinfo.to_id,iddetails)) - PopupChatDialog::init(ChatId(peer_id), QString::fromUtf8(iddetails.mNickname.c_str())) ; + PopupChatDialog::init(chat_id, QString::fromUtf8(iddetails.mNickname.c_str())) ; else - PopupChatDialog::init(ChatId(peer_id), QString::fromStdString(tinfo.to_id.toStdString())) ; + PopupChatDialog::init(chat_id, QString::fromStdString(tinfo.to_id.toStdString())) ; // Do not use setOwnId, because we don't want the user to change the GXS avatar from the chat window // it will not be transmitted. ui.ownAvatarWidget->setOwnId() ; // sets the flag - ui.ownAvatarWidget->setId(ChatId(peer_id)) ; // sets the actual Id + ui.ownAvatarWidget->setId(chat_id) ; // sets the actual Id } void PopupDistantChatDialog::updateDisplay() diff --git a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.h b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.h index dfe75b9de..ff05f70c0 100644 --- a/retroshare-gui/src/gui/chat/PopupDistantChatDialog.h +++ b/retroshare-gui/src/gui/chat/PopupDistantChatDialog.h @@ -38,7 +38,7 @@ class PopupDistantChatDialog: public PopupChatDialog /** Default destructor */ virtual ~PopupDistantChatDialog(); - virtual void init(const DistantChatPeerId& peer_id); + virtual void init(const ChatId& chat_id, const QString &title); virtual void closeEvent(QCloseEvent *e) ; virtual QString getPeerName(const ChatId &id) const ; From 6f2d7bbca040448b9ad906e4f816543ee3c924f0 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sun, 19 Mar 2017 10:51:48 +0100 Subject: [PATCH 102/230] Fix Clang warnings: implicit conversion from 'double' to 'int' warning: implicit conversion from 'double' to 'int' changes value from 2.5 to 2 [-Wliteral-conversion] QSize buttonSize = QSize(iconSize + QSize(FMM,FMM)); --- retroshare-gui/src/gui/chat/ChatWidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/chat/ChatWidget.cpp b/retroshare-gui/src/gui/chat/ChatWidget.cpp index 2ea4ba348..37e2b589e 100644 --- a/retroshare-gui/src/gui/chat/ChatWidget.cpp +++ b/retroshare-gui/src/gui/chat/ChatWidget.cpp @@ -76,7 +76,7 @@ ChatWidget::ChatWidget(QWidget *parent) : int iconHeight = FMM*QFontMetricsF(font()).height() ; QSize iconSize = QSize(iconHeight,iconHeight); - QSize buttonSize = QSize(iconSize + QSize(FMM,FMM)); + QSize buttonSize = QSize(iconSize + QSize((int)FMM,(int)FMM)); newMessages = false; typing = false; @@ -258,7 +258,7 @@ void ChatWidget::addChatBarWidget(QWidget *w) { int iconHeight = FMM*QFontMetricsF(font()).height() ; QSize iconSize = QSize(iconHeight,iconHeight); - QSize buttonSize = QSize(iconSize + QSize(FMM,FMM)); + QSize buttonSize = QSize(iconSize + QSize((int)FMM,(int)FMM)); w->setFixedSize(buttonSize); ui->pluginButtonFrame->layout()->addWidget(w) ; } From 8d85cf558b0f5f2167185a4b56ce5f968fec8efd Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 28 Mar 2017 21:16:05 +0200 Subject: [PATCH 103/230] Fix Clang warnings: 'xxxWidget::sizeHint' hides overloaded vf warning: 'IdentityWidget::sizeHint' hides overloaded virtual function [- Woverloaded-virtual] QSize sizeHint(); warning: 'CircleWidget::sizeHint' hides overloaded virtual function [- Woverloaded-virtual] QSize sizeHint(); /usr/include/qt4/QtGui/qwidget.h:537: hidden overloaded virtual function 'QWidget::sizeHint' declared here: different qualifiers (const vs none) virtual QSize sizeHint() const; --- retroshare-gui/src/gui/People/CircleWidget.cpp | 2 +- retroshare-gui/src/gui/People/CircleWidget.h | 2 +- retroshare-gui/src/gui/People/IdentityWidget.cpp | 2 +- retroshare-gui/src/gui/People/IdentityWidget.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/retroshare-gui/src/gui/People/CircleWidget.cpp b/retroshare-gui/src/gui/People/CircleWidget.cpp index 3a192f97a..b36a3fa56 100644 --- a/retroshare-gui/src/gui/People/CircleWidget.cpp +++ b/retroshare-gui/src/gui/People/CircleWidget.cpp @@ -96,7 +96,7 @@ void CircleWidget::updateData(const RsGroupMetaData& gxs_group_info } } -QSize CircleWidget::sizeHint() +QSize CircleWidget::sizeHint() const { QSize size; size.setHeight(ui->graphicsView->size().height() + ui->label->size().height()); diff --git a/retroshare-gui/src/gui/People/CircleWidget.h b/retroshare-gui/src/gui/People/CircleWidget.h index 08b6ad6dc..75d6899ba 100644 --- a/retroshare-gui/src/gui/People/CircleWidget.h +++ b/retroshare-gui/src/gui/People/CircleWidget.h @@ -24,7 +24,7 @@ public: , const RsGxsCircleDetails& details); //Start QWidget Properties - QSize sizeHint(); + QSize sizeHint() const; //Start FlowLayoutItem Properties virtual const QPixmap getImage(); virtual const QPixmap getDragImage(); diff --git a/retroshare-gui/src/gui/People/IdentityWidget.cpp b/retroshare-gui/src/gui/People/IdentityWidget.cpp index 902a4dc18..0fcfbc127 100644 --- a/retroshare-gui/src/gui/People/IdentityWidget.cpp +++ b/retroshare-gui/src/gui/People/IdentityWidget.cpp @@ -148,7 +148,7 @@ void IdentityWidget::updateData(const RsGxsIdGroup &gxs_group_info, const RsPeer updateData(pgp_details); } -QSize IdentityWidget::sizeHint() +QSize IdentityWidget::sizeHint() const { QSize size; size.setHeight(ui->graphicsView->size().height() + ui->labelName->size().height()); diff --git a/retroshare-gui/src/gui/People/IdentityWidget.h b/retroshare-gui/src/gui/People/IdentityWidget.h index c9ade98e3..7f5dcd97f 100644 --- a/retroshare-gui/src/gui/People/IdentityWidget.h +++ b/retroshare-gui/src/gui/People/IdentityWidget.h @@ -26,7 +26,7 @@ public: , const RsPeerDetails& pgp_details); //Start QWidget Properties - QSize sizeHint(); + QSize sizeHint() const; //Start FlowLayoutItem Properties virtual const QPixmap getImage(); virtual const QPixmap getDragImage(); From fd92bca688e07ade46aec892a23a323e6a3bed1c Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 28 Mar 2017 21:18:25 +0200 Subject: [PATCH 104/230] Fix Clang warnings: variable 'layout' is used uninitialized warning: variable 'layout' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (wid) layout = --- retroshare-gui/src/gui/People/PeopleDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/People/PeopleDialog.cpp b/retroshare-gui/src/gui/People/PeopleDialog.cpp index 5098da953..bdf247a4f 100644 --- a/retroshare-gui/src/gui/People/PeopleDialog.cpp +++ b/retroshare-gui/src/gui/People/PeopleDialog.cpp @@ -901,7 +901,7 @@ void PeopleDialog::pf_dropEventOccursExt(QDropEvent *event) QWidget *wid = qobject_cast(event->source());//QT5 return QObject - FlowLayout *layout; + FlowLayout *layout = NULL; if (wid) layout = qobject_cast(wid->layout()); if (layout) { @@ -991,7 +991,7 @@ void PeopleDialog::pf_dropEventOccursInt(QDropEvent *event) QWidget *wid = qobject_cast(event->source());//QT5 return QObject - FlowLayout *layout; + FlowLayout *layout = NULL; if (wid) layout = qobject_cast(wid->layout()); if (layout) { From 94ac8216f7c2b7725ddd6607f5717adac1b5cd31 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 29 Mar 2017 18:13:17 +0200 Subject: [PATCH 105/230] Fix Clang warnings: Unused variable Pi warning: unused variable 'Pi' [-Wunused-const-variable] static const double Pi = 3.14159265358979323846264338327950288419717; --- retroshare-gui/src/gui/elastic/edge.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/elastic/edge.cpp b/retroshare-gui/src/gui/elastic/edge.cpp index 4fec24fe7..e9e60f06b 100644 --- a/retroshare-gui/src/gui/elastic/edge.cpp +++ b/retroshare-gui/src/gui/elastic/edge.cpp @@ -46,7 +46,7 @@ #include -static const double Pi = 3.14159265358979323846264338327950288419717; +//static const double Pi = 3.14159265358979323846264338327950288419717; Edge::Edge(Node *sourceNode, Node *destNode) : arrowSize(10) From a3a53b970dadc3c11c1c35b5ddff56cd1572a1e5 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:19:42 +0200 Subject: [PATCH 106/230] Fix Clang warnings: unused parameter 'req' warning: unused parameter 'req' [-Wunused-parameter] void PeersHandler::handleGetStateString(Request& req, Response& resp) --- libresapi/src/api/PeersHandler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 8473bce04..1c4129a38 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -200,7 +200,7 @@ static bool have_avatar(RsMsgs* msgs, const RsPeerId& id) return size != 0; } -void PeersHandler::handleGetStateString(Request& req, Response& resp) +void PeersHandler::handleGetStateString(Request& /*req*/, Response& resp) { { RS_STACK_MUTEX(mMtx); @@ -246,7 +246,7 @@ void PeersHandler::handleSetStateString(Request& req, Response& resp) resp.setOk(); } -void PeersHandler::handleGetCustomStateString(Request& req, Response& resp) +void PeersHandler::handleGetCustomStateString(Request& /*req*/, Response& resp) { { RS_STACK_MUTEX(mMtx); From 19196e2cb05dfb451d9ca15305042404fc3425c8 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:21:49 +0200 Subject: [PATCH 107/230] Fix Clang warnings: ariable 'status' is used uninitialized warning: variable 'status' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] else if(state_string == "away") ^~~~~~~~~~~~~~~~~~~~~~ --- libresapi/src/api/PeersHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 1c4129a38..88e9bc445 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -234,7 +234,7 @@ void PeersHandler::handleSetStateString(Request& req, Response& resp) std::string state_string; req.mStream << makeKeyValueReference("state_string", state_string); - uint32_t status; + uint32_t status = RS_STATUS_OFFLINE; if(state_string == "online") status = RS_STATUS_ONLINE; else if(state_string == "busy") From d8a73132c11bab531cbb8b31ad9583fe09a88532 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:32:55 +0200 Subject: [PATCH 108/230] Fix Clang warnings: implicit conversion from 'double' to 'int' warning: implicit conversion from 'double' to 'int' changes value from 0.5 to 0 [-Wliteral-conversion] painter.setPen(QColor::fromRgb(0.5,0.5,0.5)); --- retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp index a309717b8..a8e830624 100644 --- a/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp +++ b/retroshare-gui/src/gui/statistics/GlobalRouterStatistics.cpp @@ -379,7 +379,7 @@ void GlobalRouterStatisticsWidget::updateContent() painter.setPen(QColor::fromRgb(0,0,0)) ; - painter.setPen(QColor::fromRgb(0.5,0.5,0.5)); + painter.setPen(QColor::fromRgb(127,127,127)); painter.drawRect(ox+2*cellx,current_oy+0.15*celly,fm_monospace.width(ids)+cellx*matrix_info.friend_ids.size()- 2*cellx,celly) ; float total_length = (matrix_info.friend_ids.size()+2)*cellx ; From a476a8138cb410e7b00090e6c371461398365900 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:40:02 +0200 Subject: [PATCH 109/230] Fix Clang warnings: function 'update_children_background' is not needed warning: function 'update_children_background' is not needed and will not be emitted [-Wunneeded-internal-declaration] static void update_children_background(QTreeWidgetItem *item, uint32_t type) ^ --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 1cf93055b..3b097b986 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1233,6 +1233,7 @@ static void set_item_background(QTreeWidgetItem *item, uint32_t type) item->setBackground (0, brush); } +#ifdef SUSPENDED static void update_children_background(QTreeWidgetItem *item, uint32_t type) { int count = item->childCount(); @@ -1248,7 +1249,6 @@ static void update_children_background(QTreeWidgetItem *item, uint32_t type) } } -#ifdef SUSPENDED static void set_tree_background(QTreeWidget *tree, uint32_t type) { std::cerr << "CirclesDialog set_tree_background()"; From 0bbd1499d4a57f235032068f6d5824b745d1fbbd Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:42:22 +0200 Subject: [PATCH 110/230] Fix Clang warnings: comparison of integers of different signs warning: comparison of integers of different signs: 'uint32_t' (aka 'unsigned int') and 'int' [-Wsign-compare] for(uint32_t i=0;i<(*it).size();++i) ~^~~~~~~~~~~~~ --- retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index 4254af49e..5c479005c 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -1607,7 +1607,7 @@ void GxsForumThreadWidget::insertMessage() int current_index = 0 ; - for(uint32_t i=0;i<(*it).size();++i) + for(int i=0;i<(*it).size();++i) { ui->versions_CB->insertItem(i, ((i==0)?tr("(Latest) "):tr("(Old) "))+" "+DateTime::formatLongDateTime( (*it)[i].first)); ui->versions_CB->setItemData(i,QString::fromStdString((*it)[i].second.toStdString())); From 76f75736598c1e1ce7fca9741bc7b34ccef0185b Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 18:48:40 +0200 Subject: [PATCH 111/230] Fix Clang warnings: comparison of array != a null pointer is always true warning: comparison of array 'known_zones[i].tzName' not equal to a null pointer is always true [-Wtautological-pointer-compare] for (int i=0; known_zones[i].tzName != 0; i++) { --- plugins/FeedReader/services/p3FeedReaderThread.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/FeedReader/services/p3FeedReaderThread.cc b/plugins/FeedReader/services/p3FeedReaderThread.cc index c638304f4..9ec1106ef 100644 --- a/plugins/FeedReader/services/p3FeedReaderThread.cc +++ b/plugins/FeedReader/services/p3FeedReaderThread.cc @@ -651,7 +651,7 @@ static time_t parseRFC822Date(const std::string &pubDate) offset = abs(offset); offset = ((offset / 100)*60 + (offset % 100))*sgn; } else { - for (int i=0; known_zones[i].tzName != 0; i++) { + for (int i=0; known_zones[i].tzName[0] != 0; i++) { if (0 == strncasecmp(dateString, known_zones[i].tzName, strlen(known_zones[i].tzName))) { offset = known_zones[i].tzOffset; break; From 4f939b2b760ae0257cb49db19d9da610a11b1ac3 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 19:29:27 +0200 Subject: [PATCH 112/230] Fix Clang warnings: unused function 'set_item_background' warning: unused function 'set_item_background' [-Wunused-function] static void set_item_background(QTreeWidgetItem *item, uint32_t type) --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index 3b097b986..aac7e3ba5 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -1208,6 +1208,7 @@ void IdDialog::CircleListCustomPopupMenu( QPoint ) contextMnu.exec(QCursor::pos()); } +#ifdef SUSPENDED static void set_item_background(QTreeWidgetItem *item, uint32_t type) { QBrush brush; @@ -1233,7 +1234,6 @@ static void set_item_background(QTreeWidgetItem *item, uint32_t type) item->setBackground (0, brush); } -#ifdef SUSPENDED static void update_children_background(QTreeWidgetItem *item, uint32_t type) { int count = item->childCount(); From 87dd6140885771e9534782b438b1ad9fb31691c6 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 7 Apr 2017 19:32:19 +0200 Subject: [PATCH 113/230] Fix Clang Warnings: private field 'encoding_debug_file' is not used warning: private field 'encoding_debug_file' is not used [-Wunused- private-field] FILE *encoding_debug_file ; --- plugins/VOIP/gui/VideoProcessor.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/VOIP/gui/VideoProcessor.h b/plugins/VOIP/gui/VideoProcessor.h index 4e47b2c29..4946c4342 100644 --- a/plugins/VOIP/gui/VideoProcessor.h +++ b/plugins/VOIP/gui/VideoProcessor.h @@ -66,7 +66,9 @@ private: AVPacket decoding_buffer; uint64_t encoding_frame_count ; +#ifdef DEBUG_MPEG_VIDEO FILE *encoding_debug_file ; +#endif }; // This class decodes video from a stream. It keeps a queue of From 7d9a80326dc3b14b1a04362eb18e635d9d41a27e Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 11:18:10 +0200 Subject: [PATCH 114/230] Fix Clang warnings: bdnet_inet_ntoa C-linkage /libbitdht/src/util/bdnet.h:107: warning: 'bdnet_inet_ntoa' has C- linkage specified, but returns user-defined type 'std::string' (aka 'basic_string') which is incompatible with C [-Wreturn-type-c- linkage] std::string bdnet_inet_ntoa(struct in_addr in); ^ --- libbitdht/src/util/bdnet.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libbitdht/src/util/bdnet.h b/libbitdht/src/util/bdnet.h index 9b9d36f48..7e3e24644 100644 --- a/libbitdht/src/util/bdnet.h +++ b/libbitdht/src/util/bdnet.h @@ -103,8 +103,6 @@ int bdnet_inet_aton(const char *name, struct in_addr *addr); int bdnet_checkTTL(int fd); void bdsockaddr_clear(struct sockaddr_in *addr); -/* thread-safe version of inet_ntoa */ -std::string bdnet_inet_ntoa(struct in_addr in); /* Extra stuff to declare for windows error handling (mimics unix errno) */ @@ -175,4 +173,7 @@ int usleep(unsigned int usec); } /* C Interface */ #endif +/* thread-safe version of inet_ntoa */ +std::string bdnet_inet_ntoa(struct in_addr in); + #endif /* BITDHT_UNIVERSAL_NETWORK_HEADER */ From 37331372c145d24291d5e53ac45acd426ef4ee4d Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 11:25:41 +0200 Subject: [PATCH 115/230] Fix Clang warnings: implicit conversion warning: implicit conversion from 'int' to 'char' changes value from 255 to -1 [-Wconstant-conversion] asctobin()[i] = 255; /* used to detect invalid characters */ --- libretroshare/src/util/radix64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/util/radix64.h b/libretroshare/src/util/radix64.h index 9ee80f2dd..7776995f9 100644 --- a/libretroshare/src/util/radix64.h +++ b/libretroshare/src/util/radix64.h @@ -147,7 +147,7 @@ again: private: static inline char *bintoasc() { static char bta[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; return bta ; } - static inline char *asctobin() { static char s[256]; return s ; } /* runtime radix64_initd */ + static inline uint8_t *asctobin() { static uint8_t s[256]; return s ; } /* runtime radix64_initd */ static int& is_radix64_initd() { static int is_inited = false ; return is_inited ; } /* hey, guess what: this is a read-only table. From 4a99000f1624b0ef9f3a46cb7a4ad7d7f6791104 Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 18 Apr 2017 14:00:30 +0200 Subject: [PATCH 116/230] Added: Handling requests to get and set node options --- libresapi/src/api/PeersHandler.cpp | 198 +++++++++++++++++++++++++++++ libresapi/src/api/PeersHandler.h | 3 + 2 files changed, 201 insertions(+) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 8473bce04..3ba827a33 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -106,6 +107,84 @@ bool peerInfoToStream(StreamBase& stream, RsPeerDetails& details, RsPeers* peers return ok; } +std::string peerStateString(int peerState) +{ + if (peerState & RS_PEER_STATE_CONNECTED) { + return "Connected"; + } else if (peerState & RS_PEER_STATE_UNREACHABLE) { + return "Unreachable"; + } else if (peerState & RS_PEER_STATE_ONLINE) { + return "Available"; + } else if (peerState & RS_PEER_STATE_FRIEND) { + return "Offline"; + } + + return "Neighbor"; +} + +std::string connectStateString(RsPeerDetails &details) +{ + std::string stateString; + bool isConnected = false; + + switch (details.connectState) { + case 0: + stateString = peerStateString(details.state); + break; + case RS_PEER_CONNECTSTATE_TRYING_TCP: + stateString = "Trying TCP"; + break; + case RS_PEER_CONNECTSTATE_TRYING_UDP: + stateString = "Trying UDP"; + break; + case RS_PEER_CONNECTSTATE_CONNECTED_TCP: + stateString = "Connected: TCP"; + isConnected = true; + break; + case RS_PEER_CONNECTSTATE_CONNECTED_UDP: + stateString = "Connected: UDP"; + isConnected = true; + break; + case RS_PEER_CONNECTSTATE_CONNECTED_TOR: + stateString = "Connected: Tor"; + isConnected = true; + break; + case RS_PEER_CONNECTSTATE_CONNECTED_I2P: + stateString = "Connected: I2P"; + isConnected = true; + break; + case RS_PEER_CONNECTSTATE_CONNECTED_UNKNOWN: + stateString = "Connected: Unknown"; + isConnected = true; + break; + } + + if(isConnected) { + stateString += " "; + if(details.actAsServer) + stateString += "inbound connection"; + else + stateString += "outbound connection"; + } + + if (details.connectStateString.empty() == false) { + if (stateString.empty() == false) { + stateString += ": "; + } + stateString += details.connectStateString; + } + + /* HACK to display DHT Status info too */ + if (details.foundDHT) { + if (stateString.empty() == false) { + stateString += ", "; + } + stateString += "DHT: Contact"; + } + + return stateString; +} + PeersHandler::PeersHandler(StateTokenServer* sts, RsNotify* notify, RsPeers *peers, RsMsgs* msgs): mStateTokenServer(sts), mNotify(notify), @@ -121,6 +200,8 @@ PeersHandler::PeersHandler(StateTokenServer* sts, RsNotify* notify, RsPeers *pee addResourceHandler("set_custom_state_string", this, &PeersHandler::handleSetCustomStateString); addResourceHandler("get_pgp_options", this, &PeersHandler::handleGetPGPOptions); addResourceHandler("set_pgp_options", this, &PeersHandler::handleSetPGPOptions); + addResourceHandler("get_node_options", this, &PeersHandler::handleGetNodeOptions); + addResourceHandler("set_node_options", this, &PeersHandler::handleSetNodeOptions); addResourceHandler("examine_cert", this, &PeersHandler::handleExamineCert); } @@ -645,6 +726,123 @@ void PeersHandler::handleSetPGPOptions(Request& req, Response& resp) resp.setOk(); } +void PeersHandler::handleGetNodeOptions(Request& req, Response& resp) +{ + std::string peer_id; + req.mStream << makeKeyValueReference("peer_id", peer_id); + + RsPeerId peerId(peer_id); + RsPeerDetails detail; + if(!mRsPeers->getPeerDetails(peerId, detail)) + { + resp.setFail(); + return; + } + + resp.mDataStream << makeKeyValue("peer_id", detail.id.toStdString()); + resp.mDataStream << makeKeyValue("name", detail.name); + resp.mDataStream << makeKeyValue("location", detail.location); + resp.mDataStream << makeKeyValue("pgp_id", detail.gpg_id.toStdString()); + resp.mDataStream << makeKeyValue("last_contact", detail.lastConnect); + + std::string status_message = mRsMsgs->getCustomStateString(detail.id); + resp.mDataStream << makeKeyValueReference("status_message", status_message); + + std::string encryption; + RsPeerCryptoParams cdet; + if(RsControl::instance()->getPeerCryptoDetails(detail.id, cdet) && cdet.connexion_state != 0) + { + encryption = cdet.cipher_version; + encryption += ": "; + encryption += cdet.cipher_name; + + if(cdet.cipher_version != "TLSv1.2") + encryption += cdet.cipher_bits_1; + } + else + encryption = "Not connected"; + + resp.mDataStream << makeKeyValueReference("encryption", encryption); + + resp.mDataStream << makeKeyValue("is_hidden_node", detail.isHiddenNode); + if (detail.isHiddenNode) + { + resp.mDataStream << makeKeyValue("local_address", detail.hiddenNodeAddress); + resp.mDataStream << makeKeyValue("local_port", (int)detail.hiddenNodePort); + resp.mDataStream << makeKeyValue("ext_address", std::string("none")); + resp.mDataStream << makeKeyValue("ext_port", 0); + resp.mDataStream << makeKeyValue("dyn_dns", std::string("none")); + } + else + { + resp.mDataStream << makeKeyValue("local_address", detail.localAddr); + resp.mDataStream << makeKeyValue("local_port", (int)detail.localPort); + resp.mDataStream << makeKeyValue("ext_address", detail.extAddr); + resp.mDataStream << makeKeyValue("ext_port", (int)detail.extPort); + resp.mDataStream << makeKeyValue("dyn_dns", detail.dyndns); + } + + resp.mDataStream << makeKeyValue("connection_status", connectStateString(detail)); + + StreamBase& addressesStream = resp.mDataStream.getStreamToMember("ip_addresses"); + + // mark as list (in case list is empty) + addressesStream.getStreamToMember(); + + for(std::list::const_iterator it(detail.ipAddressList.begin()); it != detail.ipAddressList.end(); ++it) + { + addressesStream.getStreamToMember() << makeKeyValue("ip_address", (*it)); + } + + std::string certificate = mRsPeers->GetRetroshareInvite(detail.id, false); + resp.mDataStream << makeKeyValueReference("certificate", certificate); + + resp.setOk(); +} + +void PeersHandler::handleSetNodeOptions(Request& req, Response& resp) +{ + std::string peer_id; + req.mStream << makeKeyValueReference("peer_id", peer_id); + + RsPeerId peerId(peer_id); + RsPeerDetails detail; + if(!mRsPeers->getPeerDetails(peerId, detail)) + { + resp.setFail(); + return; + } + + std::string local_address; + std::string ext_address; + std::string dyn_dns; + int local_port; + int ext_port; + + req.mStream << makeKeyValueReference("local_address", local_address); + req.mStream << makeKeyValueReference("local_port", local_port); + req.mStream << makeKeyValueReference("ext_address", ext_address); + req.mStream << makeKeyValueReference("ext_port", ext_port); + req.mStream << makeKeyValueReference("dyn_dns", dyn_dns); + + if(!detail.isHiddenNode) + { + if(detail.localAddr != local_address || (int)detail.localPort != local_port) + mRsPeers->setLocalAddress(peerId, local_address, local_port); + if(detail.extAddr != ext_address || (int)detail.extPort != ext_port) + mRsPeers->setExtAddress(peerId, ext_address, ext_port); + if(detail.dyndns != dyn_dns) + mRsPeers->setDynDNS(peerId, dyn_dns); + } + else + { + if(detail.hiddenNodeAddress != local_address || detail.hiddenNodePort != local_port) + rsPeers->setHiddenNode(peerId, local_address, local_port); + } + + resp.setOk(); +} + StateToken PeersHandler::getCurrentStateToken() { RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ diff --git a/libresapi/src/api/PeersHandler.h b/libresapi/src/api/PeersHandler.h index 5ae393b2f..a7386d8c9 100644 --- a/libresapi/src/api/PeersHandler.h +++ b/libresapi/src/api/PeersHandler.h @@ -44,6 +44,9 @@ private: void handleGetPGPOptions(Request& req, Response& resp); void handleSetPGPOptions(Request& req, Response& resp); + void handleGetNodeOptions(Request& req, Response& resp); + void handleSetNodeOptions(Request& req, Response& resp); + // a helper which ensures proper mutex locking StateToken getCurrentStateToken(); From 76dd7fe47fce9d91065894503013e00f6e5d29a0 Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 18 Apr 2017 14:02:14 +0200 Subject: [PATCH 117/230] Added: Handling requests to add and remove contact --- libresapi/src/api/IdentityHandler.cpp | 33 +++++++++++++++++++++++++++ libresapi/src/api/IdentityHandler.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index bf1c65911..529188087 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -138,6 +138,9 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden addResourceHandler("own_ids", this, &IdentityHandler::handleOwnIdsRequest); addResourceHandler("notown_ids", this, &IdentityHandler::handleNotOwnIdsRequest); + addResourceHandler("add_contact", this, &IdentityHandler::handleAddContact); + addResourceHandler("remove_contact", this, &IdentityHandler::handleRemoveContact); + addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); addResourceHandler("delete_identity", this, &IdentityHandler::handleDeleteIdentity); } @@ -314,6 +317,36 @@ void IdentityHandler::handleOwnIdsRequest(Request & /*req*/, Response &resp) else resp.setFail(); } +void IdentityHandler::handleAddContact(Request& req, Response& resp) +{ + std::string gxs_id; + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + + mRsIdentity->setAsRegularContact(RsGxsId(gxs_id), true); + + { + RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ + mStateTokenServer->replaceToken(mStateToken); + } + + resp.setOk(); +} + +void IdentityHandler::handleRemoveContact(Request& req, Response& resp) +{ + std::string gxs_id; + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + + mRsIdentity->setAsRegularContact(RsGxsId(gxs_id), false); + + { + RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ + mStateTokenServer->replaceToken(mStateToken); + } + + resp.setOk(); +} + ResponseTask* IdentityHandler::handleOwn(Request & /* req */, Response &resp) { StateToken state; diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index 17f7cb37d..a164af365 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -26,6 +26,9 @@ private: void handleNotOwnIdsRequest(Request& req, Response& resp); void handleOwnIdsRequest(Request& req, Response& resp); + void handleAddContact(Request& req, Response& resp); + void handleRemoveContact(Request& req, Response& resp); + ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); ResponseTask *handleDeleteIdentity(Request& req, Response& resp); From 3c5e61a297d548683e97d5e16568333dc29204ca Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 17:36:43 +0200 Subject: [PATCH 118/230] Encode Radix in RSLinks. Because it can contains special characters like '+', '/'. But this is not backward compatible. --- retroshare-gui/src/gui/RetroShareLink.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/retroshare-gui/src/gui/RetroShareLink.cpp b/retroshare-gui/src/gui/RetroShareLink.cpp index 4d32930aa..28a2d09c6 100644 --- a/retroshare-gui/src/gui/RetroShareLink.cpp +++ b/retroshare-gui/src/gui/RetroShareLink.cpp @@ -309,8 +309,8 @@ void RetroShareLink::fromUrl(const QUrl& url) if(url.host() == HOST_IDENTITY) { _type = TYPE_IDENTITY ; - QString name = urlQuery.queryItemValue(IDENTITY_NAME) ; - QString radix= urlQuery.queryItemValue(IDENTITY_GROUP) ; + QString name = decodedQueryItemValue(urlQuery, IDENTITY_NAME) ; + QString radix= decodedQueryItemValue(urlQuery, IDENTITY_GROUP) ; QString gxsid= urlQuery.queryItemValue(IDENTITY_ID) ; RsGxsId id(gxsid.toStdString()) ; @@ -331,7 +331,7 @@ void RetroShareLink::fromUrl(const QUrl& url) if (url.host() == HOST_CERTIFICATE) { _type = TYPE_CERTIFICATE; - _radix = urlQuery.queryItemValue(CERTIFICATE_RADIX); + _radix = decodedQueryItemValue(urlQuery, CERTIFICATE_RADIX); #ifdef DEBUG_RSLINK std::cerr << "Got a certificate link!!" << std::endl; @@ -765,7 +765,7 @@ QString RetroShareLink::toString() const url.setHost(HOST_IDENTITY) ; urlQuery.addQueryItem(IDENTITY_ID,_hash) ; urlQuery.addQueryItem(IDENTITY_NAME,encodeItem(_name)) ; - urlQuery.addQueryItem(IDENTITY_GROUP,_radix_group_data) ; + urlQuery.addQueryItem(IDENTITY_GROUP,encodeItem(_radix_group_data)) ; break ; case TYPE_EXTRAFILE: @@ -839,9 +839,9 @@ QString RetroShareLink::toString() const case TYPE_CERTIFICATE: url.setScheme(RSLINK_SCHEME); url.setHost(HOST_CERTIFICATE) ; - urlQuery.addQueryItem(CERTIFICATE_RADIX, _radix); - urlQuery.addQueryItem(CERTIFICATE_NAME, _name); - urlQuery.addQueryItem(CERTIFICATE_LOCATION, _location); + urlQuery.addQueryItem(CERTIFICATE_RADIX, encodeItem(_radix)); + urlQuery.addQueryItem(CERTIFICATE_NAME, encodeItem(_name)); + urlQuery.addQueryItem(CERTIFICATE_LOCATION, encodeItem(_location)); break; } From e2d9152b226bc003d9c1d64d54ea7e9e96609f10 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 18 Apr 2017 21:11:37 +0200 Subject: [PATCH 119/230] moved converted serialisation files into new directory rsitems/, leaving serialiser/ for the serialisation classes --- libretroshare/src/chat/rschatitems.h | 2 +- libretroshare/src/file_sharing/p3filelists.cc | 2 +- .../src/file_sharing/rsfilelistitems.h | 2 +- libretroshare/src/ft/ftserver.cc | 4 +- .../src/ft/ftturtlefiletransferitem.cc | 542 +----------------- libretroshare/src/grouter/grouteritems.h | 2 +- .../src/gxstunnel/rsgxstunnelitems.h | 2 +- libretroshare/src/libretroshare.pro | 16 +- libretroshare/src/pqi/p3servicecontrol.cc | 2 +- .../{serialiser => rsitems}/itempriorities.h | 0 .../{serialiser => rsitems}/rsbanlistitems.cc | 2 +- .../{serialiser => rsitems}/rsbanlistitems.h | 2 +- .../{serialiser => rsitems}/rsbwctrlitems.cc | 2 +- .../{serialiser => rsitems}/rsbwctrlitems.h | 2 +- .../rsfiletransferitems.cc | 2 +- .../rsfiletransferitems.h | 2 +- .../{serialiser => rsitems}/rsserviceids.h | 0 .../src/serialiser/rsdiscovery2items.cc | 2 +- .../src/serialiser/rsdiscovery2items.h | 2 +- libretroshare/src/serialiser/rsdsdvitems.h | 2 +- .../src/serialiser/rsgxschannelitems.h | 2 +- .../src/serialiser/rsgxscircleitems.h | 2 +- .../src/serialiser/rsgxscommentitems.h | 2 +- .../src/serialiser/rsgxsforumitems.h | 2 +- libretroshare/src/serialiser/rsgxsiditems.h | 2 +- libretroshare/src/serialiser/rsgxsitems.h | 2 +- .../src/serialiser/rsgxsrecognitems.h | 2 +- .../src/serialiser/rsgxsreputationitems.h | 2 +- .../src/serialiser/rsgxsupdateitems.h | 2 +- .../src/serialiser/rsheartbeatitems.cc | 2 +- .../src/serialiser/rsheartbeatitems.h | 2 +- libretroshare/src/serialiser/rshistoryitems.h | 2 +- libretroshare/src/serialiser/rsmsgitems.h | 2 +- libretroshare/src/serialiser/rsnxsitems.h | 2 +- libretroshare/src/serialiser/rsphotoitems.h | 2 +- libretroshare/src/serialiser/rsposteditems.h | 2 +- libretroshare/src/serialiser/rsrttitems.h | 2 +- libretroshare/src/serialiser/rsserial.h | 2 +- .../src/serialiser/rsserviceinfoitems.h | 2 +- libretroshare/src/serialiser/rsstatusitems.h | 2 +- libretroshare/src/serialiser/rswikiitems.h | 2 +- libretroshare/src/serialiser/rswireitems.h | 2 +- libretroshare/src/services/p3banlist.cc | 2 +- libretroshare/src/services/p3banlist.h | 2 +- libretroshare/src/services/p3bwctrl.cc | 2 +- libretroshare/src/services/p3bwctrl.h | 2 +- libretroshare/src/services/p3serviceinfo.cc | 2 +- libretroshare/src/turtle/rsturtleitem.h | 2 +- plugins/FeedReader/FeedReaderPlugin.h | 2 +- .../FeedReader/services/rsFeedReaderItems.h | 2 +- plugins/VOIP/services/rsVOIPItems.h | 2 +- .../services/gxs/rsgxstestitems.h | 2 +- 52 files changed, 58 insertions(+), 598 deletions(-) rename libretroshare/src/{serialiser => rsitems}/itempriorities.h (100%) rename libretroshare/src/{serialiser => rsitems}/rsbanlistitems.cc (98%) rename libretroshare/src/{serialiser => rsitems}/rsbanlistitems.h (98%) rename libretroshare/src/{serialiser => rsitems}/rsbwctrlitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsbwctrlitems.h (98%) rename libretroshare/src/{serialiser => rsitems}/rsfiletransferitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsfiletransferitems.h (99%) rename libretroshare/src/{serialiser => rsitems}/rsserviceids.h (100%) diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 7771a375f..456ffe5b6 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -29,7 +29,7 @@ #include "retroshare/rstypes.h" #include "serialization/rsserializer.h" #include "serialiser/rstlvkeys.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/file_sharing/p3filelists.cc b/libretroshare/src/file_sharing/p3filelists.cc index 2c30b6813..492c37f67 100644 --- a/libretroshare/src/file_sharing/p3filelists.cc +++ b/libretroshare/src/file_sharing/p3filelists.cc @@ -22,7 +22,7 @@ * Please report all bugs and problems to "retroshare.project@gmail.com". * */ -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "file_sharing/p3filelists.h" #include "file_sharing/directory_storage.h" diff --git a/libretroshare/src/file_sharing/rsfilelistitems.h b/libretroshare/src/file_sharing/rsfilelistitems.h index 8c1d466e1..d56827527 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.h +++ b/libretroshare/src/file_sharing/rsfilelistitems.h @@ -27,7 +27,7 @@ #include #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvitem.h" diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index 5b04f2828..9dcc139d4 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -49,8 +49,8 @@ const int ftserverzone = 29539; #include "pqi/pqi.h" #include "pqi/p3linkmgr.h" -#include "serialiser/rsfiletransferitems.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsfiletransferitems.h" +#include "rsitems/rsserviceids.h" /*** * #define SERVER_DEBUG 1 diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index 722991aef..5c343b7fa 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -27,557 +27,17 @@ #include #include -#include +#include #include #include -#ifdef TO_REMOVE -uint32_t RsTurtleFileRequestItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 8 ; // file offset - s += 4 ; // chunk size - - return s ; -} - -uint32_t RsTurtleFileDataItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 8 ; // file offset - s += 4 ; // chunk size - s += chunk_size ; // actual data size. - - return s ; -} - -uint32_t RsTurtleFileMapRequestItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // direction - - return s ; -} - -uint32_t RsTurtleFileMapItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // direction - s += 4 ; // compressed_map.size() - - s += 4 * compressed_map._map.size() ; - - return s ; -} - -uint32_t RsTurtleChunkCrcItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // chunk number - s += check_sum.serial_size() ; // check_sum - - return s ; -} -uint32_t RsTurtleChunkCrcRequestItem::serial_size() const -{ - uint32_t s = 0 ; - - s += 8 ; // header - s += 4 ; // tunnel id - s += 4 ; // chunk number - - return s ; -} -#endif - void RsTurtleFileMapRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,direction,"direction") ; } -#ifdef TO_REMOVE -bool RsTurtleFileMapRequestItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id); - ok &= setRawUInt32(data, tlvsize, &offset, direction); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - - -bool RsTurtleFileMapItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id); - ok &= setRawUInt32(data, tlvsize, &offset, direction); - ok &= setRawUInt32(data, tlvsize, &offset, compressed_map._map.size()); - - for(uint32_t i=0;i pktsize) - ok = false ; - - /* add mandatory parts first */ - ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ; - ok &= getRawUInt64(data, pktsize, &offset, &chunk_offset); - ok &= getRawUInt32(data, pktsize, &offset, &chunk_size); - - if(chunk_size > rssize || rssize - chunk_size < offset) - throw std::runtime_error("RsTurtleFileDataItem::() error while deserializing.") ; - - chunk_data = (void*)rs_malloc(chunk_size) ; - - if(chunk_data == NULL) - throw std::runtime_error("RsTurtleFileDataItem::() cannot allocate memory.") ; - - memcpy(chunk_data,(void*)((unsigned char*)data+offset),chunk_size) ; - - offset += chunk_size ; - -#ifdef P3TURTLE_DEBUG - std::cerr << " tunnel_id=" << (void*)tunnel_id << ", chunk_offset=" << chunk_offset << ", chunk_size=" << chunk_size << std::endl ; -#endif - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (offset != rssize) - throw std::runtime_error("RsTurtleFileDataItem::() error while deserializing.") ; - if (!ok) - throw std::runtime_error("RsTurtleFileDataItem::() unknown error while deserializing.") ; -#endif -} - -bool RsTurtleFileDataItem::serialize(void *data,uint32_t& pktsize) const -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id) ; - ok &= setRawUInt64(data, tlvsize, &offset, chunk_offset); - ok &= setRawUInt32(data, tlvsize, &offset, chunk_size); - - memcpy((void*)((unsigned char*)data+offset),chunk_data,chunk_size) ; - offset += chunk_size ; - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsTurtleTunnelOkItem::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} -std::ostream& RsTurtleFileRequestItem::print(std::ostream& o, uint16_t) -{ - o << "File request item:" << std::endl ; - - o << " tunnel id : " << std::hex << tunnel_id << std::dec << std::endl ; - o << " offset : " << chunk_offset << std::endl ; - o << " chunk size: " << chunk_size << std::endl ; - - return o ; -} - -std::ostream& RsTurtleFileDataItem::print(std::ostream& o, uint16_t) -{ - o << "File request item:" << std::endl ; - - o << " tunnel id : " << std::hex << tunnel_id << std::dec << std::endl ; - o << " offset : " << chunk_offset << std::endl ; - o << " chunk size: " << chunk_size << std::endl ; - o << " data : " << std::hex << chunk_data << std::dec << std::endl ; - - return o ; -} - -std::ostream& RsTurtleFileMapItem::print(std::ostream& o, uint16_t) -{ - o << "File map item:" << std::endl ; - - o << " tunnel id : " << std::hex << tunnel_id << std::dec << std::endl ; - o << " direction : " << direction << std::endl ; - o << " map : " ; - - for(uint32_t i=0;i(j,ctx,tunnel_id,"tunnel_id") ; diff --git a/libretroshare/src/grouter/grouteritems.h b/libretroshare/src/grouter/grouteritems.h index a0c3dd9e7..af78866c0 100644 --- a/libretroshare/src/grouter/grouteritems.h +++ b/libretroshare/src/grouter/grouteritems.h @@ -29,7 +29,7 @@ #include "serialiser/rsserial.h" #include "serialiser/rstlvkeys.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "retroshare/rstypes.h" #include "retroshare/rsgrouter.h" diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.h b/libretroshare/src/gxstunnel/rsgxstunnelitems.h index c23a8b9a1..ad049a753 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.h +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.h @@ -29,7 +29,7 @@ #include "retroshare/rstypes.h" #include "serialiser/rstlvkeys.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 1b437282c..2d7a966e9 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -452,15 +452,15 @@ HEADERS += grouter/groutercache.h \ grouter/groutertypes.h \ grouter/rsgrouterclient.h -HEADERS += serialiser/itempriorities.h \ +HEADERS += rsitems/itempriorities.h \ serialiser/rsbaseserial.h \ - serialiser/rsfiletransferitems.h \ + rsitems/rsfiletransferitems.h \ serialiser/rsserviceserialiser.h \ serialiser/rsconfigitems.h \ serialiser/rshistoryitems.h \ serialiser/rsmsgitems.h \ serialiser/rsserial.h \ - serialiser/rsserviceids.h \ + rsitems/rsserviceids.h \ serialiser/rsserviceitems.h \ serialiser/rsstatusitems.h \ serialiser/rstlvaddrs.h \ @@ -479,8 +479,8 @@ HEADERS += serialiser/itempriorities.h \ serialiser/rstlvlist.h \ serialiser/rstlvmaps.h \ serialiser/rstlvbanlist.h \ - serialiser/rsbanlistitems.h \ - serialiser/rsbwctrlitems.h \ + rsitems/rsbanlistitems.h \ + rsitems/rsbwctrlitems.h \ serialiser/rsdiscovery2items.h \ serialiser/rsheartbeatitems.h \ serialiser/rsrttitems.h \ @@ -608,7 +608,7 @@ SOURCES += plugins/pluginmanager.cc \ serialiser/rspluginitems.cc SOURCES += serialiser/rsbaseserial.cc \ - serialiser/rsfiletransferitems.cc \ + rsitems/rsfiletransferitems.cc \ serialiser/rsserviceserialiser.cc \ serialiser/rsconfigitems.cc \ serialiser/rshistoryitems.cc \ @@ -627,8 +627,8 @@ SOURCES += serialiser/rsbaseserial.cc \ serialiser/rstlvkeyvalue.cc \ serialiser/rstlvgenericparam.cc \ serialiser/rstlvbanlist.cc \ - serialiser/rsbanlistitems.cc \ - serialiser/rsbwctrlitems.cc \ + rsitems/rsbanlistitems.cc \ + rsitems/rsbwctrlitems.cc \ serialiser/rsdiscovery2items.cc \ serialiser/rsheartbeatitems.cc \ serialiser/rsrttitems.cc \ diff --git a/libretroshare/src/pqi/p3servicecontrol.cc b/libretroshare/src/pqi/p3servicecontrol.cc index a397a4e1c..f22cc44c0 100644 --- a/libretroshare/src/pqi/p3servicecontrol.cc +++ b/libretroshare/src/pqi/p3servicecontrol.cc @@ -26,7 +26,7 @@ #include #include "p3servicecontrol.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rsbaseserial.h" #include "pqi/p3cfgmgr.h" diff --git a/libretroshare/src/serialiser/itempriorities.h b/libretroshare/src/rsitems/itempriorities.h similarity index 100% rename from libretroshare/src/serialiser/itempriorities.h rename to libretroshare/src/rsitems/itempriorities.h diff --git a/libretroshare/src/serialiser/rsbanlistitems.cc b/libretroshare/src/rsitems/rsbanlistitems.cc similarity index 98% rename from libretroshare/src/serialiser/rsbanlistitems.cc rename to libretroshare/src/rsitems/rsbanlistitems.cc index c28399e34..d597abcfd 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.cc +++ b/libretroshare/src/rsitems/rsbanlistitems.cc @@ -24,7 +24,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsbanlistitems.h" +#include "rsitems/rsbanlistitems.h" #include "serialization/rstypeserializer.h" diff --git a/libretroshare/src/serialiser/rsbanlistitems.h b/libretroshare/src/rsitems/rsbanlistitems.h similarity index 98% rename from libretroshare/src/serialiser/rsbanlistitems.h rename to libretroshare/src/rsitems/rsbanlistitems.h index 57263a356..cc3f96eeb 100644 --- a/libretroshare/src/serialiser/rsbanlistitems.h +++ b/libretroshare/src/rsitems/rsbanlistitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rstlvbanlist.h" #include "serialization/rsserializer.h" diff --git a/libretroshare/src/serialiser/rsbwctrlitems.cc b/libretroshare/src/rsitems/rsbwctrlitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsbwctrlitems.cc rename to libretroshare/src/rsitems/rsbwctrlitems.cc index 092b1d643..747dbbbda 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.cc +++ b/libretroshare/src/rsitems/rsbwctrlitems.cc @@ -24,7 +24,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsbwctrlitems.h" +#include "rsitems/rsbwctrlitems.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/serialiser/rsbwctrlitems.h b/libretroshare/src/rsitems/rsbwctrlitems.h similarity index 98% rename from libretroshare/src/serialiser/rsbwctrlitems.h rename to libretroshare/src/rsitems/rsbwctrlitems.h index 07907c709..e9262cd5b 100644 --- a/libretroshare/src/serialiser/rsbwctrlitems.h +++ b/libretroshare/src/rsitems/rsbwctrlitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" diff --git a/libretroshare/src/serialiser/rsfiletransferitems.cc b/libretroshare/src/rsitems/rsfiletransferitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsfiletransferitems.cc rename to libretroshare/src/rsitems/rsfiletransferitems.cc index 3eb7c1147..acdadaff2 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.cc +++ b/libretroshare/src/rsitems/rsfiletransferitems.cc @@ -26,7 +26,7 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" -#include "serialiser/rsfiletransferitems.h" +#include "rsitems/rsfiletransferitems.h" #include "serialization/rstypeserializer.h" diff --git a/libretroshare/src/serialiser/rsfiletransferitems.h b/libretroshare/src/rsitems/rsfiletransferitems.h similarity index 99% rename from libretroshare/src/serialiser/rsfiletransferitems.h rename to libretroshare/src/rsitems/rsfiletransferitems.h index ae1835126..5cfed03b9 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.h +++ b/libretroshare/src/rsitems/rsfiletransferitems.h @@ -30,7 +30,7 @@ #include "retroshare/rstypes.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvfileitem.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialization/rsserializer.h" diff --git a/libretroshare/src/serialiser/rsserviceids.h b/libretroshare/src/rsitems/rsserviceids.h similarity index 100% rename from libretroshare/src/serialiser/rsserviceids.h rename to libretroshare/src/rsitems/rsserviceids.h diff --git a/libretroshare/src/serialiser/rsdiscovery2items.cc b/libretroshare/src/serialiser/rsdiscovery2items.cc index 611a7e80a..90b4313b3 100644 --- a/libretroshare/src/serialiser/rsdiscovery2items.cc +++ b/libretroshare/src/serialiser/rsdiscovery2items.cc @@ -29,7 +29,7 @@ #if 0 -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsdiscovery2items.h b/libretroshare/src/serialiser/rsdiscovery2items.h index dad0d0fb5..26bbf1f22 100644 --- a/libretroshare/src/serialiser/rsdiscovery2items.h +++ b/libretroshare/src/serialiser/rsdiscovery2items.h @@ -31,7 +31,7 @@ #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" #include "serialiser/rstlvaddrs.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" const uint8_t RS_PKT_SUBTYPE_DISC_PGP_LIST = 0x01; const uint8_t RS_PKT_SUBTYPE_DISC_PGP_CERT = 0x02; diff --git a/libretroshare/src/serialiser/rsdsdvitems.h b/libretroshare/src/serialiser/rsdsdvitems.h index efafa1f4b..fd03be486 100644 --- a/libretroshare/src/serialiser/rsdsdvitems.h +++ b/libretroshare/src/serialiser/rsdsdvitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvbinary.h" diff --git a/libretroshare/src/serialiser/rsgxschannelitems.h b/libretroshare/src/serialiser/rsgxschannelitems.h index f7386b93d..9a937e581 100644 --- a/libretroshare/src/serialiser/rsgxschannelitems.h +++ b/libretroshare/src/serialiser/rsgxschannelitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" #include "serialiser/rstlvfileitem.h" diff --git a/libretroshare/src/serialiser/rsgxscircleitems.h b/libretroshare/src/serialiser/rsgxscircleitems.h index 4ae4e7109..84316b133 100644 --- a/libretroshare/src/serialiser/rsgxscircleitems.h +++ b/libretroshare/src/serialiser/rsgxscircleitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvitem.h" #include "serialiser/rstlvstring.h" diff --git a/libretroshare/src/serialiser/rsgxscommentitems.h b/libretroshare/src/serialiser/rsgxscommentitems.h index 6f5d1bddd..2ccd6d5d8 100644 --- a/libretroshare/src/serialiser/rsgxscommentitems.h +++ b/libretroshare/src/serialiser/rsgxscommentitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsgxsforumitems.h b/libretroshare/src/serialiser/rsgxsforumitems.h index f4bce076d..97f6dd89b 100644 --- a/libretroshare/src/serialiser/rsgxsforumitems.h +++ b/libretroshare/src/serialiser/rsgxsforumitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsgxsiditems.h b/libretroshare/src/serialiser/rsgxsiditems.h index 483916055..39ca6882a 100644 --- a/libretroshare/src/serialiser/rsgxsiditems.h +++ b/libretroshare/src/serialiser/rsgxsiditems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "rsgxsitems.h" diff --git a/libretroshare/src/serialiser/rsgxsitems.h b/libretroshare/src/serialiser/rsgxsitems.h index 4e46a39a4..ed6d3124d 100644 --- a/libretroshare/src/serialiser/rsgxsitems.h +++ b/libretroshare/src/serialiser/rsgxsitems.h @@ -26,7 +26,7 @@ * */ -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" //#include "serialiser/rstlvkeys.h" diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.h b/libretroshare/src/serialiser/rsgxsrecognitems.h index a8aad7c31..6d0ea0ae6 100644 --- a/libretroshare/src/serialiser/rsgxsrecognitems.h +++ b/libretroshare/src/serialiser/rsgxsrecognitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvkeys.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/serialiser/rsgxsreputationitems.h b/libretroshare/src/serialiser/rsgxsreputationitems.h index 0fdc40ee2..9d5383343 100644 --- a/libretroshare/src/serialiser/rsgxsreputationitems.h +++ b/libretroshare/src/serialiser/rsgxsreputationitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" #include "retroshare/rsgxsifacetypes.h" diff --git a/libretroshare/src/serialiser/rsgxsupdateitems.h b/libretroshare/src/serialiser/rsgxsupdateitems.h index b7d6f324c..7d6c89907 100644 --- a/libretroshare/src/serialiser/rsgxsupdateitems.h +++ b/libretroshare/src/serialiser/rsgxsupdateitems.h @@ -30,7 +30,7 @@ #if 0 #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsheartbeatitems.cc b/libretroshare/src/serialiser/rsheartbeatitems.cc index 55f1e844a..0151525a2 100644 --- a/libretroshare/src/serialiser/rsheartbeatitems.cc +++ b/libretroshare/src/serialiser/rsheartbeatitems.cc @@ -25,7 +25,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsheartbeatitems.h" /*** diff --git a/libretroshare/src/serialiser/rsheartbeatitems.h b/libretroshare/src/serialiser/rsheartbeatitems.h index cfabae2ee..5660ba373 100644 --- a/libretroshare/src/serialiser/rsheartbeatitems.h +++ b/libretroshare/src/serialiser/rsheartbeatitems.h @@ -29,7 +29,7 @@ #define RS_HEARTBEAT_ITEMS_H #include "serialiser/rsserial.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" const uint8_t RS_PKT_SUBTYPE_HEARTBEAT_PULSE = 0x01; diff --git a/libretroshare/src/serialiser/rshistoryitems.h b/libretroshare/src/serialiser/rshistoryitems.h index 039bf095f..72f186561 100644 --- a/libretroshare/src/serialiser/rshistoryitems.h +++ b/libretroshare/src/serialiser/rshistoryitems.h @@ -26,7 +26,7 @@ * */ -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "retroshare/rstypes.h" diff --git a/libretroshare/src/serialiser/rsmsgitems.h b/libretroshare/src/serialiser/rsmsgitems.h index 1a7e84cd0..0d44aa501 100644 --- a/libretroshare/src/serialiser/rsmsgitems.h +++ b/libretroshare/src/serialiser/rsmsgitems.h @@ -30,7 +30,7 @@ #include "retroshare/rstypes.h" #include "serialiser/rstlvkeys.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/serialiser/rsnxsitems.h b/libretroshare/src/serialiser/rsnxsitems.h index 88f0ca914..259c560a6 100644 --- a/libretroshare/src/serialiser/rsnxsitems.h +++ b/libretroshare/src/serialiser/rsnxsitems.h @@ -30,7 +30,7 @@ #include #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvitem.h" diff --git a/libretroshare/src/serialiser/rsphotoitems.h b/libretroshare/src/serialiser/rsphotoitems.h index 40fa8b32b..a935472e6 100644 --- a/libretroshare/src/serialiser/rsphotoitems.h +++ b/libretroshare/src/serialiser/rsphotoitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "rsgxsitems.h" diff --git a/libretroshare/src/serialiser/rsposteditems.h b/libretroshare/src/serialiser/rsposteditems.h index 6fa08f203..a303f0d33 100644 --- a/libretroshare/src/serialiser/rsposteditems.h +++ b/libretroshare/src/serialiser/rsposteditems.h @@ -1,7 +1,7 @@ #ifndef RSPOSTEDITEMS_H #define RSPOSTEDITEMS_H -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsrttitems.h b/libretroshare/src/serialiser/rsrttitems.h index 2ebbbb51b..11a6b8889 100644 --- a/libretroshare/src/serialiser/rsrttitems.h +++ b/libretroshare/src/serialiser/rsrttitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 21e0fcec7..ffa9bb855 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -60,7 +60,7 @@ ******************************************************************/ #include -#include "itempriorities.h" +#include "rsitems/itempriorities.h" const uint8_t RS_PKT_VERSION1 = 0x01; const uint8_t RS_PKT_VERSION_SERVICE = 0x02; diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.h b/libretroshare/src/serialiser/rsserviceinfoitems.h index 295ca4f6b..76b451cce 100644 --- a/libretroshare/src/serialiser/rsserviceinfoitems.h +++ b/libretroshare/src/serialiser/rsserviceinfoitems.h @@ -30,7 +30,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvgenericmap.h" diff --git a/libretroshare/src/serialiser/rsstatusitems.h b/libretroshare/src/serialiser/rsstatusitems.h index 8677c2be0..c6cc0c8b2 100644 --- a/libretroshare/src/serialiser/rsstatusitems.h +++ b/libretroshare/src/serialiser/rsstatusitems.h @@ -26,7 +26,7 @@ * */ -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rswikiitems.h b/libretroshare/src/serialiser/rswikiitems.h index e45eab729..4247f9d3b 100644 --- a/libretroshare/src/serialiser/rswikiitems.h +++ b/libretroshare/src/serialiser/rswikiitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rswireitems.h b/libretroshare/src/serialiser/rswireitems.h index 72d1732a6..77258707a 100644 --- a/libretroshare/src/serialiser/rswireitems.h +++ b/libretroshare/src/serialiser/rswireitems.h @@ -28,7 +28,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/services/p3banlist.cc b/libretroshare/src/services/p3banlist.cc index 157cc23f8..bf72ea815 100644 --- a/libretroshare/src/services/p3banlist.cc +++ b/libretroshare/src/services/p3banlist.cc @@ -30,7 +30,7 @@ #include "util/rsnet.h" #include "services/p3banlist.h" -#include "serialiser/rsbanlistitems.h" +#include "rsitems/rsbanlistitems.h" #include "serialiser/rsconfigitems.h" #include "retroshare/rsdht.h" #include "retroshare/rsbanlist.h" diff --git a/libretroshare/src/services/p3banlist.h b/libretroshare/src/services/p3banlist.h index 87bb7104a..7cdc983a5 100644 --- a/libretroshare/src/services/p3banlist.h +++ b/libretroshare/src/services/p3banlist.h @@ -31,7 +31,7 @@ #include #include -#include "serialiser/rsbanlistitems.h" +#include "rsitems/rsbanlistitems.h" #include "services/p3service.h" #include "retroshare/rsbanlist.h" diff --git a/libretroshare/src/services/p3bwctrl.cc b/libretroshare/src/services/p3bwctrl.cc index 1cf4da87f..aa9106e47 100644 --- a/libretroshare/src/services/p3bwctrl.cc +++ b/libretroshare/src/services/p3bwctrl.cc @@ -30,7 +30,7 @@ #include "util/rsnet.h" #include "services/p3bwctrl.h" -#include "serialiser/rsbwctrlitems.h" +#include "rsitems/rsbwctrlitems.h" #include diff --git a/libretroshare/src/services/p3bwctrl.h b/libretroshare/src/services/p3bwctrl.h index 94c746aa8..9e80bb188 100644 --- a/libretroshare/src/services/p3bwctrl.h +++ b/libretroshare/src/services/p3bwctrl.h @@ -31,7 +31,7 @@ #include #include -#include "serialiser/rsbwctrlitems.h" +#include "rsitems/rsbwctrlitems.h" #include "services/p3service.h" #include "pqi/pqiservicemonitor.h" #include "retroshare/rsconfig.h" // for datatypes. diff --git a/libretroshare/src/services/p3serviceinfo.cc b/libretroshare/src/services/p3serviceinfo.cc index 0965914e0..0782016a1 100644 --- a/libretroshare/src/services/p3serviceinfo.cc +++ b/libretroshare/src/services/p3serviceinfo.cc @@ -29,7 +29,7 @@ #include "util/rsnet.h" #include "services/p3serviceinfo.h" -#include "serialiser/rsbanlistitems.h" +#include "rsitems/rsbanlistitems.h" #include diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 95594761b..0249cce22 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -6,7 +6,7 @@ #include "retroshare/rsturtle.h" #include "retroshare/rsexpr.h" #include "retroshare/rstypes.h" -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "turtle/turtletypes.h" #include "serialization/rsserializer.h" diff --git a/plugins/FeedReader/FeedReaderPlugin.h b/plugins/FeedReader/FeedReaderPlugin.h index 9a27d9243..12b45db20 100644 --- a/plugins/FeedReader/FeedReaderPlugin.h +++ b/plugins/FeedReader/FeedReaderPlugin.h @@ -21,7 +21,7 @@ #pragma once -#include +#include #include #include #include "services/p3FeedReader.h" diff --git a/plugins/FeedReader/services/rsFeedReaderItems.h b/plugins/FeedReader/services/rsFeedReaderItems.h index 14f6d0e6e..da4e4fa72 100644 --- a/plugins/FeedReader/services/rsFeedReaderItems.h +++ b/plugins/FeedReader/services/rsFeedReaderItems.h @@ -22,7 +22,7 @@ #ifndef RS_FEEDREADER_ITEMS_H #define RS_FEEDREADER_ITEMS_H -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvstring.h" diff --git a/plugins/VOIP/services/rsVOIPItems.h b/plugins/VOIP/services/rsVOIPItems.h index 7d083fde5..a685f9ef6 100644 --- a/plugins/VOIP/services/rsVOIPItems.h +++ b/plugins/VOIP/services/rsVOIPItems.h @@ -48,7 +48,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" /**************************************************************************/ diff --git a/tests/unittests/libretroshare/services/gxs/rsgxstestitems.h b/tests/unittests/libretroshare/services/gxs/rsgxstestitems.h index 8a367cfc3..78379436f 100644 --- a/tests/unittests/libretroshare/services/gxs/rsgxstestitems.h +++ b/tests/unittests/libretroshare/services/gxs/rsgxstestitems.h @@ -27,7 +27,7 @@ #include -#include "serialiser/rsserviceids.h" +#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rsgxsitems.h" From 3f54568d7fd324cc50c8bc4bdbefd56f943ca12a Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 18 Apr 2017 22:56:35 +0200 Subject: [PATCH 120/230] Added: Handling requests to get details about identity --- libresapi/src/api/IdentityHandler.cpp | 125 ++++++++++++++++++++++++++ libresapi/src/api/IdentityHandler.h | 2 + 2 files changed, 127 insertions(+) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 529188087..097a04ef7 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -1,6 +1,7 @@ #include "IdentityHandler.h" #include +#include #include #include "Operators.h" @@ -143,6 +144,8 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden addResourceHandler("create_identity", this, &IdentityHandler::handleCreateIdentity); addResourceHandler("delete_identity", this, &IdentityHandler::handleDeleteIdentity); + + addResourceHandler("get_identity_details", this, &IdentityHandler::handleGetIdentityDetails); } IdentityHandler::~IdentityHandler() @@ -347,6 +350,128 @@ void IdentityHandler::handleRemoveContact(Request& req, Response& resp) resp.setOk(); } +void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) +{ + std::string gxs_id; + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + + RsTokReqOptions opts; + opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; + uint32_t token; + + std::list groupIds; + groupIds.push_back(RsGxsGroupId(gxs_id)); + mRsIdentity->getTokenService()->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds); + + time_t start = time(NULL); + while((mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE) + &&(mRsIdentity->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED) + &&((time(NULL) < (start+10))) + ) + { +#ifdef WINDOWS_SYS + Sleep(500); +#else + usleep(500*1000); +#endif + } + + RsGxsIdGroup data; + std::vector datavector; + if (!mRsIdentity->getGroupData(token, datavector)) + { + resp.setFail(); + return; + } + + data = datavector[0]; + + resp.mDataStream << makeKeyValue("gxs_name", data.mMeta.mGroupName); + resp.mDataStream << makeKeyValue("gxs_id", data.mMeta.mGroupId.toStdString()); + + resp.mDataStream << makeKeyValue("pgp_id_known", data.mPgpKnown); + resp.mDataStream << makeKeyValue("pgp_id", data.mPgpId.toStdString()); + + std::string pgp_name; + if (data.mPgpKnown) + { + RsPeerDetails details; + rsPeers->getGPGDetails(data.mPgpId, details); + pgp_name = details.name; + } + else + { + if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility) + pgp_name = "[Unknown node]"; + else + pgp_name = "Anonymous Id"; + } + resp.mDataStream << makeKeyValue("pgp_name", pgp_name); + + time_t now = time(NULL); + resp.mDataStream << makeKeyValue("last_usage", std::to_string(now - data.mLastUsageTS)); + + bool isAnonymous = false; + if(!data.mPgpKnown) + { + if (!(data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)) + isAnonymous = true; + } + resp.mDataStream << makeKeyValue("anonymous", isAnonymous); + + + bool isOwnId = (data.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN); + resp.mDataStream << makeKeyValue("own", isOwnId); + + std::string type; + if(isOwnId) + { + if (data.mPgpKnown && !data.mPgpId.isNull()) + type = "Identity owned by you, linked to your Retroshare node"; + else + type = "Anonymous identity, owned by you"; + } + else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility) + { + if (data.mPgpKnown) + { + if (rsPeers->isGPGAccepted(data.mPgpId)) + type = "Linked to a friend Retroshare node"; + else + type = "Linked to a known Retroshare node"; + } + else + type = "Linked to unknown Retroshare node"; + } + else + type = "Anonymous identity"; + + resp.mDataStream << makeKeyValue("type", type); + + resp.mDataStream << makeKeyValue("bannned_node", rsReputations->isNodeBanned(data.mPgpId)); + + RsReputations::ReputationInfo info; + rsReputations->getReputationInfo(RsGxsId(data.mMeta.mGroupId), data.mPgpId, info); + resp.mDataStream << makeKeyValue("friends_positive_votes", info.mFriendsPositiveVotes); + resp.mDataStream << makeKeyValue("friends_negative_votes", info.mFriendsNegativeVotes); + resp.mDataStream << makeKeyValue("overall_reputation_level", (int)info.mOverallReputationLevel); + resp.mDataStream << makeKeyValue("own_opinion", (int)info.mOwnOpinion); + + RsIdentityDetails details; + mRsIdentity->getIdDetails(RsGxsId(data.mMeta.mGroupId), details); + StreamBase& usagesStream = resp.mDataStream.getStreamToMember("usages"); + usagesStream.getStreamToMember(); + + for(std::map::const_iterator it(details.mUseCases.begin()); it != details.mUseCases.end(); ++it) + { + usagesStream.getStreamToMember() << makeKeyValue("usage_time", std::to_string(now - it->second)); + usagesStream.getStreamToMember() << makeKeyValue("usage_service", (int)(it->first.mServiceId)); + usagesStream.getStreamToMember() << makeKeyValue("usage_case", (int)(it->first.mUsageCode)); + } + + resp.setOk(); +} + ResponseTask* IdentityHandler::handleOwn(Request & /* req */, Response &resp) { StateToken state; diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index a164af365..0780585e8 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -29,6 +29,8 @@ private: void handleAddContact(Request& req, Response& resp); void handleRemoveContact(Request& req, Response& resp); + void handleGetIdentityDetails(Request& req, Response& resp); + ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); ResponseTask *handleDeleteIdentity(Request& req, Response& resp); From 120ca9d0783d3dbbd8a7491b8fed3254a880c71f Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 18 Apr 2017 22:58:15 +0200 Subject: [PATCH 121/230] Added: Handling requests to set opinion about identity --- libresapi/src/api/IdentityHandler.cpp | 15 +++++++++++++++ libresapi/src/api/IdentityHandler.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 097a04ef7..1b298467d 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -146,6 +146,8 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden addResourceHandler("delete_identity", this, &IdentityHandler::handleDeleteIdentity); addResourceHandler("get_identity_details", this, &IdentityHandler::handleGetIdentityDetails); + + addResourceHandler("set_ban_node", this, &IdentityHandler::handleSetBanNode); } IdentityHandler::~IdentityHandler() @@ -472,6 +474,19 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) resp.setOk(); } +void IdentityHandler::handleSetBanNode(Request& req, Response& resp) +{ + std::string pgp_id; + req.mStream << makeKeyValueReference("pgp_id", pgp_id); + RsPgpId pgpId(pgp_id); + + bool banned_node; + req.mStream << makeKeyValueReference("banned_node", banned_node); + rsReputations->banNode(pgpId, banned_node); + + resp.setOk(); +} + ResponseTask* IdentityHandler::handleOwn(Request & /* req */, Response &resp) { StateToken state; diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index 0780585e8..3824d483d 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -31,6 +31,8 @@ private: void handleGetIdentityDetails(Request& req, Response& resp); + void handleSetBanNode(Request& req, Response& resp); + ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); ResponseTask *handleDeleteIdentity(Request& req, Response& resp); From b43bedf66948e1a5ff59b12d6af70c2a2b87617f Mon Sep 17 00:00:00 2001 From: Konrad Date: Tue, 18 Apr 2017 23:00:59 +0200 Subject: [PATCH 122/230] Added: Handling requests to set opinion about identity --- libresapi/src/api/IdentityHandler.cpp | 31 +++++++++++++++++++++++++++ libresapi/src/api/IdentityHandler.h | 1 + 2 files changed, 32 insertions(+) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 1b298467d..420d310a5 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -148,6 +148,7 @@ IdentityHandler::IdentityHandler(StateTokenServer *sts, RsNotify *notify, RsIden addResourceHandler("get_identity_details", this, &IdentityHandler::handleGetIdentityDetails); addResourceHandler("set_ban_node", this, &IdentityHandler::handleSetBanNode); + addResourceHandler("set_opinion", this, &IdentityHandler::handleSetOpinion); } IdentityHandler::~IdentityHandler() @@ -487,6 +488,36 @@ void IdentityHandler::handleSetBanNode(Request& req, Response& resp) resp.setOk(); } +void IdentityHandler::handleSetOpinion(Request& req, Response& resp) +{ + std::string gxs_id; + req.mStream << makeKeyValueReference("gxs_id", gxs_id); + RsGxsId gxsId(gxs_id); + + int own_opinion; + req.mStream << makeKeyValueReference("own_opinion", own_opinion); + + RsReputations::Opinion opinion; + switch(own_opinion) + { + case 0: + opinion = RsReputations::OPINION_NEGATIVE; + break; + case 1: opinion = + RsReputations::OPINION_NEUTRAL; + break; + case 2: + opinion = RsReputations::OPINION_POSITIVE; + break; + default: + resp.setFail(); + return; + } + rsReputations->setOwnOpinion(gxsId, opinion); + + resp.setOk(); +} + ResponseTask* IdentityHandler::handleOwn(Request & /* req */, Response &resp) { StateToken state; diff --git a/libresapi/src/api/IdentityHandler.h b/libresapi/src/api/IdentityHandler.h index 3824d483d..bac61f574 100644 --- a/libresapi/src/api/IdentityHandler.h +++ b/libresapi/src/api/IdentityHandler.h @@ -32,6 +32,7 @@ private: void handleGetIdentityDetails(Request& req, Response& resp); void handleSetBanNode(Request& req, Response& resp); + void handleSetOpinion(Request& req, Response& resp); ResponseTask *handleOwn(Request& req, Response& resp); ResponseTask *handleCreateIdentity(Request& req, Response& resp); From 1da89dd70d6532d9d661ff630f7caaeca5a84ac0 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 19 Apr 2017 17:16:30 +0200 Subject: [PATCH 123/230] changed FFT code in graph widget into a more efficient one, with free licence --- retroshare-gui/src/gui/elastic/fft.h | 827 ++++++++++++++++++ .../src/gui/elastic/graphwidget.cpp | 64 +- 2 files changed, 872 insertions(+), 19 deletions(-) create mode 100644 retroshare-gui/src/gui/elastic/fft.h diff --git a/retroshare-gui/src/gui/elastic/fft.h b/retroshare-gui/src/gui/elastic/fft.h new file mode 100644 index 000000000..12d460c24 --- /dev/null +++ b/retroshare-gui/src/gui/elastic/fft.h @@ -0,0 +1,827 @@ +/****************************************************************** + + Original FFT code Credits: + Copyright Takuya OOURA, 1996-2001 + http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html + +******************************************************************/ + +/* +Fast Fourier/Cosine/Sine Transform + dimension :two + data length :power of 2 + decimation :frequency + radix :4, 2, row-column + data :inplace + table :use +functions + cdft2d: Complex Discrete Fourier Transform + rdft2d: Real Discrete Fourier Transform + ddct2d: Discrete Cosine Transform + ddst2d: Discrete Sine Transform +function prototypes + void cdft2d(int, int, int, double **, int *, double *); + void rdft2d(int, int, int, double **, int *, double *); + void ddct2d(int, int, int, double **, double **, int *, double *); + void ddst2d(int, int, int, double **, double **, int *, double *); + + +-------- Complex DFT (Discrete Fourier Transform) -------- + [definition] + + X[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 x[j1][j2] * + exp(2*pi*i*j1*k1/n1) * + exp(2*pi*i*j2*k2/n2), 0<=k1 + X[k1][k2] = sum_j1=0^n1-1 sum_j2=0^n2-1 x[j1][j2] * + exp(-2*pi*i*j1*k1/n1) * + exp(-2*pi*i*j2*k2/n2), 0<=k1 + ip[0] = 0; // first time only + cdft2d(n1, 2*n2, 1, a, ip, w); + + ip[0] = 0; // first time only + cdft2d(n1, 2*n2, -1, a, ip, w); + [parameters] + n1 :data length (int) + n1 >= 1, n1 = power of 2 + 2*n2 :data length (int) + n2 >= 1, n2 = power of 2 + a[0...n1-1][0...2*n2-1] + :input/output data (double **) + input data + a[j1][2*j2] = Re(x[j1][j2]), + a[j1][2*j2+1] = Im(x[j1][j2]), + 0<=j1= 2+sqrt(n) + (n = max(n1, n2)) + ip[0],ip[1] are pointers of the cos/sin table. + w[0...*] + :cos/sin table (double *) + length of w >= max(n1/2, n2/2) + w[],ip[] are initialized if ip[0] == 0. + [remark] + Inverse of + cdft2d(n1, 2*n2, -1, a, ip, w); + is + cdft2d(n1, 2*n2, 1, a, ip, w); + for (j1 = 0; j1 <= n1 - 1; j1++) { + for (j2 = 0; j2 <= 2 * n2 - 1; j2++) { + a[j1][j2] *= 1.0 / (n1 * n2); + } + } +*/ + + +/* -------- initializing routines -------- */ + +#pragma once +#include + +class fft +{ +public: + static void makewt(int nw, int *ip, double *w) + { + int nwh, j; + double delta, x, y; + + ip[0] = nw; + ip[1] = 1; + if (nw > 2) { + nwh = nw >> 1; + delta = atan(1.0) / nwh; + w[0] = 1; + w[1] = 0; + w[nwh] = cos(delta * nwh); + w[nwh + 1] = w[nwh]; + for (j = 2; j <= nwh - 2; j += 2) { + sincos(delta*j,&y,&x) ; + //x = cos(delta * j); + //y = sin(delta * j); + w[j] = x; + w[j + 1] = y; + w[nw - j] = y; + w[nw - j + 1] = x; + } + bitrv2(nw, ip + 2, w); + } + } + + + /* -------- child routines -------- */ + + + static void bitrv2(int n, int *ip, double *a) + { + int j, j1, k, k1, l, m, m2; + double xr, xi; + + ip[0] = 0; + l = n; + m = 1; + while ((m << 2) < l) { + l >>= 1; + for (j = 0; j <= m - 1; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + if ((m << 2) > l) { + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } else { + m2 = m << 1; + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + j1 += m2; + k1 += m2; + xr = a[j1]; + xi = a[j1 + 1]; + a[j1] = a[k1]; + a[j1 + 1] = a[k1 + 1]; + a[k1] = xr; + a[k1 + 1] = xi; + } + } + } + } + + + static void bitrv2col(int n1, int n, int *ip, double **a) + { + int i, j, j1, k, k1, l, m, m2; + double xr, xi; + + ip[0] = 0; + l = n; + m = 1; + while ((m << 2) < l) { + l >>= 1; + for (j = 0; j <= m - 1; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + if ((m << 2) > l) { + for (i = 0; i <= n1 - 1; i++) { + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[i][j1]; + xi = a[i][j1 + 1]; + a[i][j1] = a[i][k1]; + a[i][j1 + 1] = a[i][k1 + 1]; + a[i][k1] = xr; + a[i][k1 + 1] = xi; + } + } + } + } else { + m2 = m << 1; + for (i = 0; i <= n1 - 1; i++) { + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = (j << 1) + ip[k]; + k1 = (k << 1) + ip[j]; + xr = a[i][j1]; + xi = a[i][j1 + 1]; + a[i][j1] = a[i][k1]; + a[i][j1 + 1] = a[i][k1 + 1]; + a[i][k1] = xr; + a[i][k1 + 1] = xi; + j1 += m2; + k1 += m2; + xr = a[i][j1]; + xi = a[i][j1 + 1]; + a[i][j1] = a[i][k1]; + a[i][j1 + 1] = a[i][k1 + 1]; + a[i][k1] = xr; + a[i][k1 + 1] = xi; + } + } + } + } + } + + + static void bitrv2row(int n, int n2, int *ip, double **a) + { + int i, j, j1, k, k1, l, m; + double xr, xi; + + ip[0] = 0; + l = n; + m = 1; + while ((m << 1) < l) { + l >>= 1; + for (j = 0; j <= m - 1; j++) { + ip[m + j] = ip[j] + l; + } + m <<= 1; + } + if ((m << 1) > l) { + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = j + ip[k]; + k1 = k + ip[j]; + for (i = 0; i <= n2 - 2; i += 2) { + xr = a[j1][i]; + xi = a[j1][i + 1]; + a[j1][i] = a[k1][i]; + a[j1][i + 1] = a[k1][i + 1]; + a[k1][i] = xr; + a[k1][i + 1] = xi; + } + } + } + } else { + for (k = 1; k <= m - 1; k++) { + for (j = 0; j <= k - 1; j++) { + j1 = j + ip[k]; + k1 = k + ip[j]; + for (i = 0; i <= n2 - 2; i += 2) { + xr = a[j1][i]; + xi = a[j1][i + 1]; + a[j1][i] = a[k1][i]; + a[j1][i + 1] = a[k1][i + 1]; + a[k1][i] = xr; + a[k1][i + 1] = xi; + } + j1 += m; + k1 += m; + for (i = 0; i <= n2 - 2; i += 2) { + xr = a[j1][i]; + xi = a[j1][i + 1]; + a[j1][i] = a[k1][i]; + a[j1][i + 1] = a[k1][i + 1]; + a[k1][i] = xr; + a[k1][i + 1] = xi; + } + } + } + } + } + + + static void cftbcol(int n1, int n, double **a, double *w) + { + int i, j, j1, j2, j3, k, k1, ks, l, m; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + for (i = 0; i <= n1 - 1; i++) { + l = 2; + while ((l << 1) < n) { + m = l << 2; + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + a[i][j2] = x0r - x2r; + a[i][j2 + 1] = x0i - x2i; + a[i][j1] = x1r - x3i; + a[i][j1 + 1] = x1i + x3r; + a[i][j3] = x1r + x3i; + a[i][j3 + 1] = x1i - x3r; + } + if (m < n) { + wk1r = w[2]; + for (j = m; j <= l + m - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + a[i][j2] = x2i - x0i; + a[i][j2 + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[i][j1] = wk1r * (x0r - x0i); + a[i][j1 + 1] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[i][j3] = wk1r * (x0i - x0r); + a[i][j3 + 1] = wk1r * (x0i + x0r); + } + k1 = 1; + ks = -1; + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for (j = k; j <= l + k - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[i][j2] = wk2r * x0r - wk2i * x0i; + a[i][j2 + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[i][j1] = wk1r * x0r - wk1i * x0i; + a[i][j1 + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[i][j3] = wk3r * x0r - wk3i * x0i; + a[i][j3 + 1] = wk3r * x0i + wk3i * x0r; + } + } + } + l = m; + } + if (l < n) { + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + x0r = a[i][j] - a[i][j1]; + x0i = a[i][j + 1] - a[i][j1 + 1]; + a[i][j] += a[i][j1]; + a[i][j + 1] += a[i][j1 + 1]; + a[i][j1] = x0r; + a[i][j1 + 1] = x0i; + } + } + } + } + + + static void cftbrow(int n, int n2, double **a, double *w) + { + int i, j, j1, j2, j3, k, k1, ks, l, m; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 1; + while ((l << 1) < n) { + m = l << 2; + for (j = 0; j <= l - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + a[j2][i] = x0r - x2r; + a[j2][i + 1] = x0i - x2i; + a[j1][i] = x1r - x3i; + a[j1][i + 1] = x1i + x3r; + a[j3][i] = x1r + x3i; + a[j3][i + 1] = x1i - x3r; + } + } + if (m < n) { + wk1r = w[2]; + for (j = m; j <= l + m - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + a[j2][i] = x2i - x0i; + a[j2][i + 1] = x0r - x2r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1][i] = wk1r * (x0r - x0i); + a[j1][i + 1] = wk1r * (x0r + x0i); + x0r = x3i + x1r; + x0i = x3r - x1i; + a[j3][i] = wk1r * (x0i - x0r); + a[j3][i + 1] = wk1r * (x0i + x0r); + } + } + k1 = 1; + ks = -1; + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for (j = k; j <= l + k - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2][i] = wk2r * x0r - wk2i * x0i; + a[j2][i + 1] = wk2r * x0i + wk2i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j1][i] = wk1r * x0r - wk1i * x0i; + a[j1][i + 1] = wk1r * x0i + wk1i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j3][i] = wk3r * x0r - wk3i * x0i; + a[j3][i + 1] = wk3r * x0i + wk3i * x0r; + } + } + } + } + l = m; + } + if (l < n) { + for (j = 0; j <= l - 1; j++) { + j1 = j + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] - a[j1][i]; + x0i = a[j][i + 1] - a[j1][i + 1]; + a[j][i] += a[j1][i]; + a[j][i + 1] += a[j1][i + 1]; + a[j1][i] = x0r; + a[j1][i + 1] = x0i; + } + } + } + } + + + static void cftfcol(int n1, int n, double **a, double *w) + { + int i, j, j1, j2, j3, k, k1, ks, l, m; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + for (i = 0; i <= n1 - 1; i++) { + l = 2; + while ((l << 1) < n) { + m = l << 2; + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + a[i][j2] = x0r - x2r; + a[i][j2 + 1] = x0i - x2i; + a[i][j1] = x1r + x3i; + a[i][j1 + 1] = x1i - x3r; + a[i][j3] = x1r - x3i; + a[i][j3 + 1] = x1i + x3r; + } + if (m < n) { + wk1r = w[2]; + for (j = m; j <= l + m - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + a[i][j2] = x0i - x2i; + a[i][j2 + 1] = x2r - x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[i][j1] = wk1r * (x0i + x0r); + a[i][j1 + 1] = wk1r * (x0i - x0r); + x0r = x3i - x1r; + x0i = x3r + x1i; + a[i][j3] = wk1r * (x0r + x0i); + a[i][j3 + 1] = wk1r * (x0r - x0i); + } + k1 = 1; + ks = -1; + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for (j = k; j <= l + k - 2; j += 2) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + x0r = a[i][j] + a[i][j1]; + x0i = a[i][j + 1] + a[i][j1 + 1]; + x1r = a[i][j] - a[i][j1]; + x1i = a[i][j + 1] - a[i][j1 + 1]; + x2r = a[i][j2] + a[i][j3]; + x2i = a[i][j2 + 1] + a[i][j3 + 1]; + x3r = a[i][j2] - a[i][j3]; + x3i = a[i][j2 + 1] - a[i][j3 + 1]; + a[i][j] = x0r + x2r; + a[i][j + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[i][j2] = wk2r * x0r + wk2i * x0i; + a[i][j2 + 1] = wk2r * x0i - wk2i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[i][j1] = wk1r * x0r + wk1i * x0i; + a[i][j1 + 1] = wk1r * x0i - wk1i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[i][j3] = wk3r * x0r + wk3i * x0i; + a[i][j3 + 1] = wk3r * x0i - wk3i * x0r; + } + } + } + l = m; + } + if (l < n) { + for (j = 0; j <= l - 2; j += 2) { + j1 = j + l; + x0r = a[i][j] - a[i][j1]; + x0i = a[i][j + 1] - a[i][j1 + 1]; + a[i][j] += a[i][j1]; + a[i][j + 1] += a[i][j1 + 1]; + a[i][j1] = x0r; + a[i][j1 + 1] = x0i; + } + } + } + } + + + static void cftfrow(int n, int n2, double **a, double *w) + { + int i, j, j1, j2, j3, k, k1, ks, l, m; + double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; + double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; + + l = 1; + while ((l << 1) < n) { + m = l << 2; + for (j = 0; j <= l - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + a[j2][i] = x0r - x2r; + a[j2][i + 1] = x0i - x2i; + a[j1][i] = x1r + x3i; + a[j1][i + 1] = x1i - x3r; + a[j3][i] = x1r - x3i; + a[j3][i + 1] = x1i + x3r; + } + } + if (m < n) { + wk1r = w[2]; + for (j = m; j <= l + m - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + a[j2][i] = x0i - x2i; + a[j2][i + 1] = x2r - x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j1][i] = wk1r * (x0i + x0r); + a[j1][i + 1] = wk1r * (x0i - x0r); + x0r = x3i - x1r; + x0i = x3r + x1i; + a[j3][i] = wk1r * (x0r + x0i); + a[j3][i + 1] = wk1r * (x0r - x0i); + } + } + k1 = 1; + ks = -1; + for (k = (m << 1); k <= n - m; k += m) { + k1++; + ks = -ks; + wk1r = w[k1 << 1]; + wk1i = w[(k1 << 1) + 1]; + wk2r = ks * w[k1]; + wk2i = w[k1 + ks]; + wk3r = wk1r - 2 * wk2i * wk1i; + wk3i = 2 * wk2i * wk1r - wk1i; + for (j = k; j <= l + k - 1; j++) { + j1 = j + l; + j2 = j1 + l; + j3 = j2 + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] + a[j1][i]; + x0i = a[j][i + 1] + a[j1][i + 1]; + x1r = a[j][i] - a[j1][i]; + x1i = a[j][i + 1] - a[j1][i + 1]; + x2r = a[j2][i] + a[j3][i]; + x2i = a[j2][i + 1] + a[j3][i + 1]; + x3r = a[j2][i] - a[j3][i]; + x3i = a[j2][i + 1] - a[j3][i + 1]; + a[j][i] = x0r + x2r; + a[j][i + 1] = x0i + x2i; + x0r -= x2r; + x0i -= x2i; + a[j2][i] = wk2r * x0r + wk2i * x0i; + a[j2][i + 1] = wk2r * x0i - wk2i * x0r; + x0r = x1r + x3i; + x0i = x1i - x3r; + a[j1][i] = wk1r * x0r + wk1i * x0i; + a[j1][i + 1] = wk1r * x0i - wk1i * x0r; + x0r = x1r - x3i; + x0i = x1i + x3r; + a[j3][i] = wk3r * x0r + wk3i * x0i; + a[j3][i + 1] = wk3r * x0i - wk3i * x0r; + } + } + } + } + l = m; + } + if (l < n) { + for (j = 0; j <= l - 1; j++) { + j1 = j + l; + for (i = 0; i <= n2 - 2; i += 2) { + x0r = a[j][i] - a[j1][i]; + x0i = a[j][i + 1] - a[j1][i + 1]; + a[j][i] += a[j1][i]; + a[j][i + 1] += a[j1][i + 1]; + a[j1][i] = x0r; + a[j1][i + 1] = x0i; + } + } + } + } + static int *alloc_1d_int(int n1) + { + int *i; + + i = (int *) malloc(sizeof(int) * n1); + return i; + } + + static void free_1d_int(int *i) { free(i); } + + static double *alloc_1d_double(int n1) + { + double *d; + + d = (double *) malloc(sizeof(double) * n1); + return d; + } + + + static void free_1d_double(double *d) { free(d); } + static double **alloc_2d_double(int n1, int n2) + { + double **dd, *d; + int j; + + dd = (double **) malloc(sizeof(double *) * n1); + d = (double *) malloc(sizeof(double) * n1 * n2); + + dd[0] = d; + for (j = 1; j < n1; j++) { + dd[j] = dd[j - 1] + n2; + } + return dd; + } + + static void free_2d_double(double **dd) { free(dd[0]); free(dd); } + + + static void cdft2d(int n1, int n2, int isgn, double **a, int *ip, double *w) + { + int n; + + n = n1 << 1; + if (n < n2) { + n = n2; + } + if (n > (ip[0] << 2)) { + makewt(n >> 2, ip, w); + } + if (n2 > 4) { + bitrv2col(n1, n2, ip + 2, a); + } + if (n1 > 2) { + bitrv2row(n1, n2, ip + 2, a); + } + if (isgn < 0) { + cftfcol(n1, n2, a, w); + cftfrow(n1, n2, a, w); + } else { + cftbcol(n1, n2, a, w); + cftbrow(n1, n2, a, w); + } + } +}; diff --git a/retroshare-gui/src/gui/elastic/graphwidget.cpp b/retroshare-gui/src/gui/elastic/graphwidget.cpp index a2c69c80d..099ca3d7d 100644 --- a/retroshare-gui/src/gui/elastic/graphwidget.cpp +++ b/retroshare-gui/src/gui/elastic/graphwidget.cpp @@ -42,6 +42,7 @@ #include "graphwidget.h" #include "edge.h" #include "node.h" +#include "fft.h" #include #include @@ -259,45 +260,70 @@ void GraphWidget::keyPressEvent(QKeyEvent *event) } } -static void convolveWithGaussian(double *forceMap,unsigned int S,int /*s*/) +static void convolveWithForce(double *forceMap,unsigned int S,int /*s*/) { - static double *bf = NULL ; + static double **bf = NULL ; + static double **tmp = NULL ; + static int *ip = NULL ; + static double *w = NULL ; + static uint32_t last_S = 0 ; if(bf == NULL) { - bf = new double[S*S*2] ; + bf = fft::alloc_2d_double(S, 2*S); for(unsigned int i=0;i derivative is constant - bf[2*(i+S*j)+1] = 0 ; + + bf[i][j*2+0] = log(sqrtf(0.1 + x*x+y*y)); // linear -> derivative is constant + bf[i][j*2+1] = 0 ; } - unsigned long nn[2] = {S,S}; - fourn(&bf[-1],&nn[-1],2,1) ; + //unsigned long nn[2] = {S,S}; + //fourn(&bf[-1],&nn[-1],2,1) ; + + ip = fft::alloc_1d_int(2 + (int) sqrt(S + 0.5)); + w = fft::alloc_1d_double(S/2+S); + ip[0] = 0; + + fft::cdft2d(S, 2*S, 1, bf, ip, w); } - unsigned long nn[2] = {S,S}; - fourn(&forceMap[-1],&nn[-1],2,1) ; + if(last_S != S) + { + if(tmp) + fft::free_2d_double(tmp) ; + + tmp = fft::alloc_2d_double(S, 2*S); + last_S = S ; + } + memcpy(tmp[0],forceMap,S*S*2*sizeof(double)) ; + + fft::cdft2d(S, 2*S, 1, tmp, ip, w); + + //fourn(&forceMap[-1],&nn[-1],2,1) ; for (unsigned int i=0;isceneRect()) ; - if( (hit++ & 7) == 0) + if( (hit++ & 3) == 0) { memset(forceMap,0,2*S*S*sizeof(double)) ; @@ -348,7 +374,7 @@ void GraphWidget::timerEvent(QTimerEvent *event) } // compute convolution with 1/omega kernel. - convolveWithGaussian(forceMap,S,20) ; + convolveWithForce(forceMap,S,20) ; } foreach (Node *node, _nodes) From f406b8123867240479ea35dee168c58957f51cbb Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 19 Apr 2017 18:46:58 +0200 Subject: [PATCH 124/230] removed all FFT code and cleaned up deleted code in graphwidget.cpp --- .../src/gui/elastic/graphwidget.cpp | 145 ------------------ 1 file changed, 145 deletions(-) diff --git a/retroshare-gui/src/gui/elastic/graphwidget.cpp b/retroshare-gui/src/gui/elastic/graphwidget.cpp index 099ca3d7d..9aeebbeda 100644 --- a/retroshare-gui/src/gui/elastic/graphwidget.cpp +++ b/retroshare-gui/src/gui/elastic/graphwidget.cpp @@ -51,86 +51,9 @@ #include -#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr - -void fourn(double data[],unsigned long nn[],unsigned long ndim,int isign) -{ - int i1,i2,i3,i2rev,i3rev,ip1,ip2,ip3,ifp1,ifp2; - int ibit,idim,k1,k2,n,nprev,nrem,ntot; - double tempi,tempr; - double theta,wi,wpi,wpr,wr,wtemp; - - ntot=1; - for (idim=1;idim<=(long)ndim;++idim) - ntot *= nn[idim]; - nprev=1; - for (idim=ndim;idim>=1;idim--) { - n=nn[idim]; - nrem=ntot/(n*nprev); - ip1=nprev << 1; - ip2=ip1*n; - ip3=ip2*nrem; - i2rev=1; - for (i2=1;i2<=ip2;i2+=ip1) { - if (i2 < i2rev) { - for (i1=i2;i1<=i2+ip1-2;i1+=2) { - for (i3=i1;i3<=ip3;i3+=ip2) { - i3rev=i2rev+i3-i2; - SWAP(data[i3],data[i3rev]); - SWAP(data[i3+1],data[i3rev+1]); - } - } - } - ibit=ip2 >> 1; - while (ibit >= ip1 && i2rev > ibit) { - i2rev -= ibit; - ibit >>= 1; - } - i2rev += ibit; - } - ifp1=ip1; - while (ifp1 < ip2) { - ifp2=ifp1 << 1; - theta=isign*6.28318530717959/(ifp2/ip1); - wtemp=sin(0.5*theta); - wpr = -2.0*wtemp*wtemp; - wpi=sin(theta); - wr=1.0; - wi=0.0; - for (i3=1;i3<=ifp1;i3+=ip1) { - for (i1=i3;i1<=i3+ip1-2;i1+=2) { - for (i2=i1;i2<=ip3;i2+=ifp2) { - k1=i2; - k2=k1+ifp1; - tempr=wr*data[k2]-wi*data[k2+1]; - tempi=wr*data[k2+1]+wi*data[k2]; - data[k2]=data[k1]-tempr; - data[k2+1]=data[k1+1]-tempi; - data[k1] += tempr; - data[k1+1] += tempi; - } - } - wr=(wtemp=wr)*wpr-wi*wpi+wr; - wi=wi*wpr+wtemp*wpi+wi; - } - ifp1=ifp2; - } - nprev *= n; - } -} - -#undef SWAP - GraphWidget::GraphWidget(QWidget *) : timerId(0), mIsFrozen(false) { -// QGraphicsScene *scene = new QGraphicsScene(QRectF(0,0,500,500),this); -// scene->setItemIndexMethod(QGraphicsScene::NoIndex); -// scene->clear() ; -// setScene(scene); - -// scene()->setSceneRect(0, 0, width(), height()); - setCacheMode(CacheBackground); setViewportUpdateMode(BoundingRectViewportUpdate); setRenderHint(QPainter::Antialiasing); @@ -143,18 +66,6 @@ GraphWidget::GraphWidget(QWidget *) void GraphWidget::clearGraph() { -// QGraphicsScene *scene = new QGraphicsScene(this); -// scene->setItemIndexMethod(QGraphicsScene::NoIndex); -// setScene(scene); - -// scene->addItem(centerNode); -// centerNode->setPos(0, 0); - -// if (oldscene != NULL) -// { -// delete oldscene; -// } - scene()->clear(); scene()->setSceneRect(0, 0, width(), height()); @@ -230,18 +141,6 @@ void GraphWidget::itemMoved() void GraphWidget::keyPressEvent(QKeyEvent *event) { switch (event->key()) { -// case Qt::Key_Up: -// centerNode->moveBy(0, -20); -// break; -// case Qt::Key_Down: -// centerNode->moveBy(0, 20); -// break; -// case Qt::Key_Left: -// centerNode->moveBy(-20, 0); -// break; -// case Qt::Key_Right: -// centerNode->moveBy(20, 0); -// break; case Qt::Key_Plus: scaleView(qreal(1.2)); break; @@ -282,9 +181,6 @@ static void convolveWithForce(double *forceMap,unsigned int S,int /*s*/) bf[i][j*2+1] = 0 ; } - //unsigned long nn[2] = {S,S}; - //fourn(&bf[-1],&nn[-1],2,1) ; - ip = fft::alloc_1d_int(2 + (int) sqrt(S + 0.5)); w = fft::alloc_1d_double(S/2+S); ip[0] = 0; @@ -304,8 +200,6 @@ static void convolveWithForce(double *forceMap,unsigned int S,int /*s*/) fft::cdft2d(S, 2*S, 1, tmp, ip, w); - //fourn(&forceMap[-1],&nn[-1],2,1) ; - for (unsigned int i=0;idelta() / 240.0)); } -//void GraphWidget::drawBackground(QPainter *painter, const QRectF &rect) -//{ -// Q_UNUSED(rect); -// -// // Shadow -// QRectF sceneRect = this->sceneRect(); -// QRectF rightShadow(sceneRect.right(), sceneRect.top() + 5, 5, sceneRect.height()); -// QRectF bottomShadow(sceneRect.left() + 5, sceneRect.bottom(), sceneRect.width(), 5); -// if (rightShadow.intersects(rect) || rightShadow.contains(rect)) -// painter->fillRect(rightShadow, Qt::darkGray); -// if (bottomShadow.intersects(rect) || bottomShadow.contains(rect)) -// painter->fillRect(bottomShadow, Qt::darkGray); -// -// // Fill -// QLinearGradient gradient(sceneRect.topLeft(), sceneRect.bottomRight()); -// gradient.setColorAt(0, Qt::white); -// gradient.setColorAt(1, Qt::lightGray); -// painter->fillRect(rect.intersected(sceneRect), gradient); -// painter->setBrush(Qt::NoBrush); -// painter->drawRect(sceneRect); -// -// // Text -// QRectF textRect(sceneRect.left() + 4, sceneRect.top() + 4, -// sceneRect.width() - 4, sceneRect.height() - 4); -// QString message(tr("Click and drag the nodes around, and zoom with the mouse " -// "wheel or the '+' and '-' keys")); -// -// QFont font = painter->font(); -// font.setBold(true); -// font.setPointSize(14); -// painter->setFont(font); -// painter->setPen(Qt::lightGray); -// painter->drawText(textRect.translated(2, 2), message); -// painter->setPen(Qt::black); -// painter->drawText(textRect, message); -//} - void GraphWidget::scaleView(qreal scaleFactor) { qreal factor = matrix().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width(); From 4a0b51ce2d853c3466940f19f642854225e238d2 Mon Sep 17 00:00:00 2001 From: Konrad Date: Wed, 19 Apr 2017 22:03:24 +0200 Subject: [PATCH 125/230] Added: to response information whether the identity is a contact --- libresapi/src/api/IdentityHandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 420d310a5..67e5cb4c6 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -207,6 +207,7 @@ void IdentityHandler::handleWildcard(Request & /*req*/, Response &resp) << makeKeyValueReference("gxs_id", grp.mMeta.mGroupId) << makeKeyValueReference("pgp_id",grp.mPgpId ) << makeKeyValueReference("name", grp.mMeta.mGroupName) + << makeKeyValueReference("contact", grp.mIsAContact) << makeKeyValueReference("own", own) << makeKeyValueReference("pgp_linked", pgp_linked); } From 9600359bdb62cc05e553f846dbf243bde5830f37 Mon Sep 17 00:00:00 2001 From: Konrad Date: Thu, 20 Apr 2017 18:09:19 +0200 Subject: [PATCH 126/230] Fixed: Password was not stored after creating a new location --- libresapi/src/api/RsControlModule.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index 2910bc443..cb3cdcdf2 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -456,6 +456,7 @@ void RsControlModule::handleCreateLocation(Request &req, Response &resp) // give the password to the password callback { RsStackMutex stack(mDataMtx); // ********** LOCKED ********** + mPassword = pgp_password; mFixedPassword = pgp_password; } bool ssl_ok = RsAccounts::GenerateSSLCertificate(pgp_id, "", ssl_name, "", hidden_port!=0, ssl_password, ssl_id, err_string); From c9f618ddf602f1623fcb3a99741bde3015476b10 Mon Sep 17 00:00:00 2001 From: Konrad Date: Thu, 20 Apr 2017 19:09:57 +0200 Subject: [PATCH 127/230] Added: Notification about changed peer status --- libresapi/src/api/PeersHandler.cpp | 6 ++++++ libresapi/src/api/PeersHandler.h | 1 + 2 files changed, 7 insertions(+) diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 3ba827a33..6649acdcb 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -221,6 +221,12 @@ void PeersHandler::notifyListChange(int list, int /* type */) } } +void PeersHandler::notifyPeerStatusChanged(const std::string& /*peer_id*/, uint32_t /*state*/) +{ + RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ + mStateTokenServer->replaceToken(mStateToken); +} + void PeersHandler::notifyPeerHasNewAvatar(std::string /*peer_id*/) { RsStackMutex stack(mMtx); /********** STACK LOCKED MTX ******/ diff --git a/libresapi/src/api/PeersHandler.h b/libresapi/src/api/PeersHandler.h index a7386d8c9..c4e0ddc3d 100644 --- a/libresapi/src/api/PeersHandler.h +++ b/libresapi/src/api/PeersHandler.h @@ -21,6 +21,7 @@ public: // from NotifyClient // note: this may get called from foreign threads virtual void notifyListChange(int list, int type); // friends list change + virtual void notifyPeerStatusChanged(const std::string& /*peer_id*/, uint32_t /*state*/); virtual void notifyPeerHasNewAvatar(std::string /*peer_id*/); // from Tickable From 5f8bf03dfea7570473cd8960b91e1db82bd12eaa Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 20 Apr 2017 20:54:51 +0200 Subject: [PATCH 128/230] added mechanism to allow services to document the names of their items, and improved bandwidth graph to show names for GXS services. Other services still need to supply their own names --- libretroshare/src/gxs/rsgxsnetservice.cc | 17 +++++ libretroshare/src/gxs/rsgxsnetservice.h | 1 + libretroshare/src/pqi/p3servicecontrol.cc | 67 +++++++++++-------- libretroshare/src/pqi/p3servicecontrol.h | 8 +++ libretroshare/src/pqi/pqiservice.cc | 17 ++++- libretroshare/src/pqi/pqiservice.h | 44 ++++++------ .../src/retroshare/rsservicecontrol.h | 1 + libretroshare/src/rsserver/rsinit.cc | 2 + .../src/gui/common/RSGraphWidget.cpp | 52 +++++++++++--- retroshare-gui/src/gui/common/RSGraphWidget.h | 12 +++- retroshare-gui/src/gui/statistics/BWGraph.cpp | 62 ++++++++++++++--- retroshare-gui/src/gui/statistics/BWGraph.h | 13 +++- .../gui/statistics/BandwidthStatsWidget.cpp | 28 ++++++-- .../src/gui/statistics/BandwidthStatsWidget.h | 3 +- .../gui/statistics/BandwidthStatsWidget.ui | 34 +++++++++- 15 files changed, 280 insertions(+), 81 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 3811ddd0c..7258ae775 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -328,6 +328,23 @@ RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds, mUpdateCounter = 0; } +void RsGxsNetService::getItemNames(std::map& names) const +{ + names.clear(); + + names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM ] = "Group Sync Request" ; + names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM ] = "Group Sync" ; + names[RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM ] = "Group Stats" ; + names[RS_PKT_SUBTYPE_NXS_GRP_ITEM ] = "Group Data" ; + names[RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM ] = "Encrypted data" ; + names[RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM ] = "Session Key" ; + names[RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM ] = "Message Sync" ; + names[RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM ] = "Message Sync Request" ; + names[RS_PKT_SUBTYPE_NXS_MSG_ITEM ] = "Message Data" ; + names[RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM ] = "Transaction" ; + names[RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM ] = "Publish key" ; +} + RsGxsNetService::~RsGxsNetService() { RS_STACK_MUTEX(mNxsMutex) ; diff --git a/libretroshare/src/gxs/rsgxsnetservice.h b/libretroshare/src/gxs/rsgxsnetservice.h index b14d55058..fba79ebc9 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.h +++ b/libretroshare/src/gxs/rsgxsnetservice.h @@ -99,6 +99,7 @@ public: virtual RsServiceInfo getServiceInfo() { return mServiceInfo; } + virtual void getItemNames(std::map& names) const ; public: diff --git a/libretroshare/src/pqi/p3servicecontrol.cc b/libretroshare/src/pqi/p3servicecontrol.cc index a397a4e1c..799093d29 100644 --- a/libretroshare/src/pqi/p3servicecontrol.cc +++ b/libretroshare/src/pqi/p3servicecontrol.cc @@ -29,7 +29,9 @@ #include "serialiser/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rsbaseserial.h" +#include "serialiser/rsnxsitems.h" #include "pqi/p3cfgmgr.h" +#include "pqi/pqiservice.h" /*******************************/ // #define SERVICECONTROL_DEBUG 1 @@ -138,7 +140,7 @@ public: std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; return NULL ; } - + /* add mandatory parts first */ ok &= getRawUInt32(data, rssize, &offset, &item->mServiceId); ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->mServiceName); @@ -248,6 +250,13 @@ const RsPeerId& p3ServiceControl::getOwnId() return mOwnPeerId; } +bool p3ServiceControl::getServiceItemNames(uint32_t serviceId,std::map& names) +{ + if(mServiceServer != NULL) + return mServiceServer->getServiceItemNames(serviceId,names) ; + + return false ; +} /* Interface for Services */ bool p3ServiceControl::registerService(const RsServiceInfo &info, bool defaultOn) @@ -537,7 +546,7 @@ bool p3ServiceControl::updateServicePermissions(uint32_t serviceId, const RsServ { for(pit = onlinePeers.begin(); pit != onlinePeers.end(); ++pit) { - if (it->second.peerHasPermission(*pit) != + if (it->second.peerHasPermission(*pit) != permissions.peerHasPermission(*pit)) { mUpdatedSet.insert(*pit); @@ -597,7 +606,7 @@ bool p3ServiceControl::checkFilter(uint32_t serviceId, const RsPeerId &peerId) #endif // must allow ServiceInfo through, or we have nothing! -#define FULLID_SERVICEINFO ((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + ((RS_SERVICE_TYPE_SERVICEINFO) << 8)) +#define FULLID_SERVICEINFO ((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + ((RS_SERVICE_TYPE_SERVICEINFO) << 8)) //if (serviceId == RS_SERVICE_TYPE_SERVICEINFO) if (serviceId == FULLID_SERVICEINFO) @@ -691,21 +700,21 @@ bool ServiceInfoCompatible(const RsServiceInfo &info1, const RsServiceInfo &info } // ensure that info1 meets minimum requirements for info2 - if (!versionOkay(info1.mVersionMajor, info1.mVersionMinor, + if (!versionOkay(info1.mVersionMajor, info1.mVersionMinor, info2.mMinVersionMajor, info2.mMinVersionMinor)) { return false; } // ensure that info2 meets minimum requirements for info1 - if (!versionOkay(info2.mVersionMajor, info2.mVersionMinor, + if (!versionOkay(info2.mVersionMajor, info2.mVersionMinor, info1.mMinVersionMajor, info1.mMinVersionMinor)) { return false; } return true; } - + bool p3ServiceControl::updateFilterByPeer(const RsPeerId &peerId) { @@ -790,8 +799,8 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId) std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty ... Clearing"; std::cerr << std::endl; #endif - - // empty, remove... + + // empty, remove... recordFilterChanges_locked(peerId, originalFilter, peerFilter); if (fit != mPeerFilterMap.end()) { @@ -882,7 +891,7 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId) std::cerr << "p3ServiceControl::updateFilterByPeer_locked() Empty(2) ... Clearing"; std::cerr << std::endl; #endif - + if (fit != mPeerFilterMap.end()) { mPeerFilterMap.erase(fit); @@ -900,7 +909,7 @@ bool p3ServiceControl::updateFilterByPeer_locked(const RsPeerId &peerId) return true; } -void p3ServiceControl::recordFilterChanges_locked(const RsPeerId &peerId, +void p3ServiceControl::recordFilterChanges_locked(const RsPeerId &peerId, ServicePeerFilter &originalFilter, ServicePeerFilter &updatedFilter) { #ifdef SERVICECONTROL_DEBUG @@ -1202,7 +1211,7 @@ bool p3ServiceControl::loadList(std::list& loadList) if(item != NULL) mServicePermissionMap[item->mServiceId] = *item ; - + delete *it ; } @@ -1396,49 +1405,49 @@ void p3ServiceControl::notifyServices() std::cerr << "p3ServiceControl::notifyServices(): Noone Monitoring ... skipping"; std::cerr << std::endl; #endif - + continue; } - + std::list peers; std::set::const_iterator pit; - for(pit = it->second.mAdded.begin(); + for(pit = it->second.mAdded.begin(); pit != it->second.mAdded.end(); ++pit) { pqiServicePeer peer; peer.id = *pit; peer.actions = RS_SERVICE_PEER_CONNECTED; - + peers.push_back(peer); - + #ifdef SERVICECONTROL_DEBUG std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " CONNECTED"; std::cerr << std::endl; #endif } - - for(pit = it->second.mRemoved.begin(); + + for(pit = it->second.mRemoved.begin(); pit != it->second.mRemoved.end(); ++pit) { pqiServicePeer peer; peer.id = *pit; peer.actions = RS_SERVICE_PEER_DISCONNECTED; - + peers.push_back(peer); - + #ifdef SERVICECONTROL_DEBUG std::cerr << "p3ServiceControl::notifyServices(): Peer: " << *pit << " DISCONNECTED"; std::cerr << std::endl; #endif } - + for(; sit != eit; ++sit) { #ifdef SERVICECONTROL_DEBUG std::cerr << "p3ServiceControl::notifyServices(): Sending to Monitoring Service"; std::cerr << std::endl; #endif - + sit->second->statusChange(peers); } } @@ -1500,17 +1509,17 @@ void RsServicePermissions::resetPermission(const RsPeerId& peerId) } RsServiceInfo::RsServiceInfo( - const uint16_t service_type, - const std::string service_name, + const uint16_t service_type, + const std::string service_name, const uint16_t version_major, const uint16_t version_minor, const uint16_t min_version_major, const uint16_t min_version_minor) - :mServiceName(service_name), - mServiceType((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + (((uint32_t) service_type) << 8)), - mVersionMajor(version_major), + :mServiceName(service_name), + mServiceType((((uint32_t) RS_PKT_VERSION_SERVICE) << 24) + (((uint32_t) service_type) << 8)), + mVersionMajor(version_major), mVersionMinor(version_minor), - mMinVersionMajor(min_version_major), + mMinVersionMajor(min_version_major), mMinVersionMinor(min_version_minor) { return; @@ -1518,7 +1527,7 @@ RsServiceInfo::RsServiceInfo( RsServiceInfo::RsServiceInfo() - :mServiceName("unknown"), + :mServiceName("unknown"), mServiceType(0), mVersionMajor(0), mVersionMinor(0), diff --git a/libretroshare/src/pqi/p3servicecontrol.h b/libretroshare/src/pqi/p3servicecontrol.h index 948481a2b..9c9724347 100644 --- a/libretroshare/src/pqi/p3servicecontrol.h +++ b/libretroshare/src/pqi/p3servicecontrol.h @@ -36,6 +36,8 @@ #include "pqi/pqiservicemonitor.h" #include "pqi/p3linkmgr.h" +class p3ServiceServer ; + class ServiceNotifications { public: @@ -101,6 +103,9 @@ virtual bool updateServicePermissions(uint32_t serviceId, const RsServicePermiss virtual void getPeersConnected(const uint32_t serviceId, std::set &peerSet); virtual bool isPeerConnected(const uint32_t serviceId, const RsPeerId &peerId); + // Gets the list of items used by that service +virtual bool getServiceItemNames(uint32_t serviceId,std::map& names) ; + /** * Registration for all Services. */ @@ -132,6 +137,8 @@ virtual bool updateServicesProvided(const RsPeerId &peerId, const RsPeerServiceI // pqiMonitor. virtual void statusChange(const std::list &plist); + virtual void setServiceServer(p3ServiceServer *p) { mServiceServer = p ; } + protected: // configuration. virtual bool saveList(bool &cleanup, std::list&); @@ -196,6 +203,7 @@ bool peerHasPermissionForService_locked(const RsPeerId &peerId, uint32_t service // Below here is saved in Configuration. std::map mServicePermissionMap; + p3ServiceServer *mServiceServer ; }; diff --git a/libretroshare/src/pqi/pqiservice.cc b/libretroshare/src/pqi/pqiservice.cc index 4ba249c69..d9c93cc18 100644 --- a/libretroshare/src/pqi/pqiservice.cc +++ b/libretroshare/src/pqi/pqiservice.cc @@ -79,11 +79,26 @@ int p3ServiceServer::addService(pqiService *ts, bool defaultOn) services[info.mServiceType] = ts; // This doesn't need to be in Mutex. - mServiceControl->registerService(info, defaultOn); + mServiceControl->registerService(info,defaultOn); return 1; } +bool p3ServiceServer::getServiceItemNames(uint32_t service_type,std::map& names) +{ + RsStackMutex stack(srvMtx); /********* LOCKED *********/ + + std::map::iterator it=services.find(service_type) ; + + if(it != services.end()) + { + it->second->getItemNames(names) ; + return true ; + } + else + return false ; +} + int p3ServiceServer::removeService(pqiService *ts) { RsStackMutex stack(srvMtx); /********* LOCKED *********/ diff --git a/libretroshare/src/pqi/pqiservice.h b/libretroshare/src/pqi/pqiservice.h index c293cc005..b22a34aac 100644 --- a/libretroshare/src/pqi/pqiservice.h +++ b/libretroshare/src/pqi/pqiservice.h @@ -60,24 +60,26 @@ class p3ServiceServerIface; class pqiService { - protected: +protected: pqiService() // our type of packets. - :mServiceServer(NULL) { return; } + :mServiceServer(NULL) { return; } -virtual ~pqiService() { return; } + virtual ~pqiService() { return; } - public: -void setServiceServer(p3ServiceServerIface *server); - // -virtual bool recv(RsRawItem *) = 0; -virtual bool send(RsRawItem *item); +public: + void setServiceServer(p3ServiceServerIface *server); + // + virtual bool recv(RsRawItem *) = 0; + virtual bool send(RsRawItem *item); -virtual RsServiceInfo getServiceInfo() = 0; + virtual RsServiceInfo getServiceInfo() = 0; -virtual int tick() { return 0; } + virtual int tick() { return 0; } - private: + virtual void getItemNames(std::map& names) const {} // This does nothing by default. Service should derive it in order to give info for the UI + +private: p3ServiceServerIface *mServiceServer; // const, no need for mutex. }; @@ -97,10 +99,10 @@ public: virtual ~p3ServiceServerIface() {} -virtual bool recvItem(RsRawItem *) = 0; -virtual bool sendItem(RsRawItem *) = 0; - + virtual bool recvItem(RsRawItem *) = 0; + virtual bool sendItem(RsRawItem *) = 0; + virtual bool getServiceItemNames(uint32_t service_type,std::map& names) =0; }; class p3ServiceServer : public p3ServiceServerIface @@ -108,13 +110,15 @@ class p3ServiceServer : public p3ServiceServerIface public: p3ServiceServer(pqiPublisher *pub, p3ServiceControl *ctrl); -int addService(pqiService *, bool defaultOn); -int removeService(pqiService *); + int addService(pqiService *, bool defaultOn); + int removeService(pqiService *); -bool recvItem(RsRawItem *); -bool sendItem(RsRawItem *); + bool recvItem(RsRawItem *); + bool sendItem(RsRawItem *); -int tick(); + bool getServiceItemNames(uint32_t service_type, std::map& names) ; + + int tick(); public: private: @@ -122,7 +126,7 @@ private: pqiPublisher *mPublisher; // constant no need for mutex. p3ServiceControl *mServiceControl; - RsMutex srvMtx; + RsMutex srvMtx; std::map services; }; diff --git a/libretroshare/src/retroshare/rsservicecontrol.h b/libretroshare/src/retroshare/rsservicecontrol.h index a6d8fde7c..7558764e7 100644 --- a/libretroshare/src/retroshare/rsservicecontrol.h +++ b/libretroshare/src/retroshare/rsservicecontrol.h @@ -109,6 +109,7 @@ virtual ~RsServiceControl() { return; } virtual bool getOwnServices(RsPeerServiceInfo &info) = 0; virtual std::string getServiceName(uint32_t service_id) = 0; +virtual bool getServiceItemNames(uint32_t service_id,std::map& names) = 0; virtual bool getServicesAllowed(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0; virtual bool getServicesProvided(const RsPeerId &peerId, RsPeerServiceInfo &info) = 0; diff --git a/libretroshare/src/rsserver/rsinit.cc b/libretroshare/src/rsserver/rsinit.cc index 47036b691..fd378b286 100644 --- a/libretroshare/src/rsserver/rsinit.cc +++ b/libretroshare/src/rsserver/rsinit.cc @@ -1243,6 +1243,8 @@ int RsServer::StartupRetroShare() pqih = new pqisslpersongrp(serviceCtrl, flags, mPeerMgr); //pqih = new pqipersongrpDummy(none, flags); + serviceCtrl->setServiceServer(pqih) ; + /****** New Ft Server **** !!! */ ftServer *ftserver = new ftServer(mPeerMgr, serviceCtrl); ftserver->setConfigDirectory(rsAccounts->PathAccountDirectory()); diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.cpp b/retroshare-gui/src/gui/common/RSGraphWidget.cpp index 90cf069c2..b7759d846 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.cpp +++ b/retroshare-gui/src/gui/common/RSGraphWidget.cpp @@ -99,6 +99,11 @@ QString RSGraphSource::displayValue(float v) const return QString::number(v,'f',_digits) + " " + unitName() ; } +void RSGraphSource::getCumulatedValues(std::vector& vals) const +{ + for(std::map::const_iterator it = _totals.begin();it!=_totals.end();++it) + vals.push_back(it->second) ; +} void RSGraphSource::getCurrentValues(std::vector& vals) const { std::map > >::const_iterator it = _points.begin(); @@ -108,9 +113,9 @@ void RSGraphSource::getCurrentValues(std::vector& vals) const vals.push_back(QPointF( (now - it->second.back().first)/1000.0f,it->second.back().second)) ; } -QString RSGraphSource::legend(int i,float v) const +QString RSGraphSource::legend(int i,float v,bool show_value) const { - return displayName(i) + " (" + displayValue(v) + " )"; + return displayName(i) + (show_value?(" (" + displayValue(v) + ")"):""); } void RSGraphSource::getDataPoints(int index,std::vector& pts,float filter_factor) const @@ -209,11 +214,30 @@ void RSGraphSource::update() } else ++it ; + + updateTotals(); +} + +void RSGraphSource::updateTotals() +{ + // now compute totals + + _totals.clear(); + + for(std::map > >::const_iterator it(_points.begin());it!=_points.end();++it) + { + float& f = _totals[it->first] ; + + f = 0.0f ; + for(std::list >::const_iterator it2=it->second.begin();it2!=it->second.end();++it2) + f += (*it2).second ; + } } void RSGraphSource::reset() { - _points.clear() ; + _points.clear(); + _totals.clear(); } void RSGraphSource::setCollectionTimeLimit(qint64 s) { _time_limit_msecs = s ; } @@ -630,8 +654,19 @@ void RSGraphWidget::paintLegend() { //int bottom = _rec.height(); - std::vector vals ; - _source->getCurrentValues(vals) ; + std::vector vals ; + + if(_flags & RSGRAPH_FLAGS_LEGEND_CUMULATED) + _source->getCumulatedValues(vals) ; + else + { + std::vector cvals ; + _source->getCurrentValues(cvals) ; + + for(uint32_t i=0;idisplayName(i).toStdString()) == _masked_entries.end() ) { - if( _rec.width() - (vals[i].x()-0)*_time_scale < SCALE_WIDTH*fact ) - continue ; +// if( _rec.width() - (vals[i].x()-0)*_time_scale < SCALE_WIDTH*fact ) +// continue ; qreal paintStep = 4*fact+FS; qreal pos = 15*fact+j*paintStep; - QString text = _source->legend(i,vals[i].y()) ; + + QString text = _source->legend(i,vals[i]) ; QPen oldPen = _painter->pen(); _painter->setPen(QPen(getColor(i), Qt::SolidLine)); diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.h b/retroshare-gui/src/gui/common/RSGraphWidget.h index 84a4ee3be..2159ba0dc 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.h +++ b/retroshare-gui/src/gui/common/RSGraphWidget.h @@ -69,8 +69,11 @@ public: // return the vector of last values up to date virtual void getCurrentValues(std::vector& vals) const ; + // return the vector of cumulated values up to date + virtual void getCumulatedValues(std::vector& vals) const; + // returns what to display in the legend. Derive this to show additional info. - virtual QString legend(int i,float v) const ; + virtual QString legend(int i, float v, bool show_value=true) const ; // Returns the n^th interpolated value at the given time in floating point seconds backward. virtual void getDataPoints(int index, std::vector& pts, float filter_factor=0.0f) const ; @@ -95,11 +98,13 @@ protected slots: protected: virtual void getValues(std::map& values) const = 0 ;// overload this in your own class to fill in the values you want to display. + void updateTotals(); qint64 getTime() const ; // returns time in ms since RS has started // Storage of collected events. The string is any string used to represent the collected data. std::map > > _points ; + std::map _totals ; QTimer *_timer ; @@ -118,8 +123,9 @@ public: static const uint32_t RSGRAPH_FLAGS_LOG_SCALE_Y = 0x0002 ;// log scale in Y static const uint32_t RSGRAPH_FLAGS_ALWAYS_COLLECT = 0x0004 ;// keep collecting while not displayed static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_PLAIN = 0x0008 ;// use plain / line drawing style - static const uint32_t RSGRAPH_FLAGS_SHOW_LEGEND = 0x0010 ;// show legend in the graph - static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes + static const uint32_t RSGRAPH_FLAGS_SHOW_LEGEND = 0x0010 ;// show legend in the graph + static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes + static const uint32_t RSGRAPH_FLAGS_LEGEND_CUMULATED = 0x0040 ;// show the total in the legend rather than current values /** Bandwidth graph style. */ enum GraphStyle diff --git a/retroshare-gui/src/gui/statistics/BWGraph.cpp b/retroshare-gui/src/gui/statistics/BWGraph.cpp index 08c208868..a7451c560 100644 --- a/retroshare-gui/src/gui/statistics/BWGraph.cpp +++ b/retroshare-gui/src/gui/statistics/BWGraph.cpp @@ -107,16 +107,25 @@ void BWGraphSource::update() // remove empty lists + float duration = 0.0f; + for(std::map > >::iterator it=_points.begin();it!=_points.end();) if(it->second.empty()) - { - std::map > >::iterator tmp(it) ; - ++tmp; - _points.erase(it) ; - it=tmp ; - } + { + std::map > >::iterator tmp(it) ; + ++tmp; + _points.erase(it) ; + it=tmp ; + } else + { + float d = it->second.back().first - it->second.front().first; + + if(duration < d) + duration = d ; + ++it ; + } // also clears history @@ -138,11 +147,36 @@ void BWGraphSource::update() break ; } + // now update the totals, and possibly convert into an average if the unit requires it. + + updateTotals(); + + if(_current_unit == UNIT_KILOBYTES) + for(std::map::iterator it(_totals.begin());it!=_totals.end();++it) + it->second /= (duration/1000.0) ; + #ifdef BWGRAPH_DEBUG std::cerr << "Traffic history has size " << mTrafficHistory.size() << std::endl; #endif } +std::string BWGraphSource::makeSubItemName(uint16_t service_id,uint8_t sub_item_type) const +{ + RsServiceInfoWithNames& s(mServiceInfoMap[service_id]) ; + + if(s.item_names.empty()) + return "item #"+QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString() ; + else + { + std::map::const_iterator it = s.item_names.find(sub_item_type) ; + + if(it == s.item_names.end()) + return "item #"+QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString() + " (undocumented)"; + + return QString("%1").arg(sub_item_type,2,16,QChar('0')).toStdString()+": " + it->second ; + } +} + void BWGraphSource::convertTrafficClueToValues(const std::list& lst,std::map& vals) const { vals.clear() ; @@ -162,7 +196,7 @@ void BWGraphSource::convertTrafficClueToValues(const std::list& l for(uint32_t i=0;i<256;++i) if(clue_per_sub_id[i].count > 0) - vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ; + vals[makeSubItemName(clue_per_sub_id[i].service_id,i)] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ; } break ; @@ -233,11 +267,14 @@ void BWGraphSource::convertTrafficClueToValues(const std::list& l for(std::list::const_iterator it(lst.begin());it!=lst.end();++it) if(it->service_id == _current_selected_service) + { clue_per_sub_id[it->service_sub_id] += *it ; + clue_per_sub_id[it->service_sub_id].service_id = it->service_id ; + } for(uint32_t i=0;i<256;++i) if(clue_per_sub_id[i].count > 0) - vals["item #"+QString::number(i,16).toStdString()] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ; + vals[makeSubItemName(clue_per_sub_id[i].service_id,i)] = (_current_unit == UNIT_KILOBYTES)?(clue_per_sub_id[i].size):(clue_per_sub_id[i].count) ; } break ; @@ -297,7 +334,11 @@ BWGraphSource::BWGraphSource() rsServiceControl->getOwnServices(rspsi) ; for(std::map::const_iterator it(rspsi.mServiceList.begin());it!=rspsi.mServiceList.end();++it) + { mServiceInfoMap[ (it->first >> 8) & 0xffff ] = it->second ; + + rsServiceControl->getServiceItemNames(it->first,mServiceInfoMap[(it->first >> 8) & 0xffff].item_names) ; + } } void BWGraphSource::getValues(std::map& values) const @@ -359,9 +400,9 @@ QString BWGraphSource::displayValue(float v) const return QString() ; } -QString BWGraphSource::legend(int i,float v) const +QString BWGraphSource::legend(int i,float v,bool show_value) const { - return RSGraphSource::legend(i,v) ;//+ " Total: " + niceNumber(_total_recv) ; + return RSGraphSource::legend(i,v,show_value) ; } QString BWGraphSource::niceNumber(float v) const { @@ -446,6 +487,7 @@ void BWGraphSource::setUnit(int unit) recomputeCurrentCurves() ; } + void BWGraphSource::setDirection(int dir) { if(dir == _current_direction) diff --git a/retroshare-gui/src/gui/statistics/BWGraph.h b/retroshare-gui/src/gui/statistics/BWGraph.h index 865893473..3e2c4b8b2 100644 --- a/retroshare-gui/src/gui/statistics/BWGraph.h +++ b/retroshare-gui/src/gui/statistics/BWGraph.h @@ -13,6 +13,14 @@ public: std::list out_rstcl ; std::list in_rstcl ; }; + class RsServiceInfoWithNames: public RsServiceInfo + { + public: + RsServiceInfoWithNames(const RsServiceInfo& s) : RsServiceInfo(s) {} + RsServiceInfoWithNames(){} + + std::map item_names ; + }; BWGraphSource() ; @@ -25,7 +33,7 @@ public: virtual void getValues(std::map& values) const; virtual QString displayValue(float v) const; - virtual QString legend(int i,float v) const; + virtual QString legend(int i,float v,bool show_value=true) const; virtual void update(); QString unitName() const ; @@ -45,6 +53,7 @@ public: protected: void convertTrafficClueToValues(const std::list &lst, std::map &vals) const; + std::string makeSubItemName(uint16_t service_id,uint8_t sub_item_type) const; void recomputeCurrentCurves() ; std::string visibleFriendName(const RsPeerId &pid) const ; @@ -67,7 +76,7 @@ private: std::map mVisibleFriends ; std::set mVisibleServices ; - mutable std::map mServiceInfoMap ; + mutable std::map mServiceInfoMap ; }; class BWGraph: public RSGraphWidget diff --git a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp index b3fd9a063..6ae112803 100644 --- a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp +++ b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp @@ -28,13 +28,18 @@ BandwidthStatsWidget::BandwidthStatsWidget(QWidget *parent) ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_SERVICE,BWGraphSource::GRAPH_TYPE_SUM) ; ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ; + ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ; + + updateUnitSelection(0); + // Setup connections - QObject::connect(ui.friend_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateFriendSelection(int))) ; - QObject::connect(ui.updn_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateUpDownSelection(int))) ; - QObject::connect(ui.unit_CB ,SIGNAL(currentIndexChanged(int)),this, SLOT( updateUnitSelection(int))) ; - QObject::connect(ui.service_CB,SIGNAL(currentIndexChanged(int)),this, SLOT(updateServiceSelection(int))) ; - QObject::connect(ui.logScale_CB,SIGNAL(toggled(bool)),this, SLOT(toggleLogScale(bool))) ; + QObject::connect(ui.friend_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateFriendSelection(int ))) ; + QObject::connect(ui.updn_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateUpDownSelection(int ))) ; + QObject::connect(ui.unit_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateUnitSelection(int ))) ; + QObject::connect(ui.service_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT(updateServiceSelection(int ))) ; + QObject::connect(ui.legend_CB ,SIGNAL(currentIndexChanged(int )),this, SLOT( updateLegendType(int ))) ; + QObject::connect(ui.logScale_CB,SIGNAL( toggled(bool)),this, SLOT( toggleLogScale(bool))) ; // setup one timer for auto-update @@ -156,6 +161,13 @@ void BandwidthStatsWidget::updateFriendSelection(int n) ui.bwgraph_BW->setSelector(BWGraphSource::SELECTOR_TYPE_FRIEND,BWGraphSource::GRAPH_TYPE_SINGLE,ui.friend_CB->itemData(ci,Qt::UserRole).toString().toStdString()) ; } } +void BandwidthStatsWidget::updateLegendType(int n) +{ + if(n==0) + ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ; + else + ui.bwgraph_BW->setFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_CUMULATED) ; +} void BandwidthStatsWidget::updateServiceSelection(int n) { if(n == 0) @@ -187,7 +199,13 @@ void BandwidthStatsWidget::updateUpDownSelection(int n) void BandwidthStatsWidget::updateUnitSelection(int n) { if(n==0) + { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ; + ui.legend_CB->setItemText(1,tr("Average")); + } else + { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_COUNT) ; + ui.legend_CB->setItemText(1,tr("Total")); + } } diff --git a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.h b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.h index 9a835fc57..055555f73 100644 --- a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.h +++ b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.h @@ -15,7 +15,8 @@ protected slots: void updateUpDownSelection(int n); void updateUnitSelection(int n); void toggleLogScale(bool b); - + void updateLegendType(int n); + private: Ui::BwStatsWidget ui; diff --git a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.ui b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.ui index e99058ac3..fdfefb99b 100644 --- a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.ui +++ b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.ui @@ -6,7 +6,7 @@ 0 0 - 1128 + 1148 385 @@ -14,7 +14,16 @@ Form - + + 0 + + + 0 + + + 0 + + 0 @@ -103,6 +112,27 @@ + + + + Legend: + + + + + + + + Current + + + + + Total + + + + From 969b5ce1f1260160e0bfc0be2f59253777c27b8c Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 21 Apr 2017 15:57:57 +0200 Subject: [PATCH 129/230] Fix MacOSX compilation. --- retroshare-gui/src/gui/elastic/fft.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/retroshare-gui/src/gui/elastic/fft.h b/retroshare-gui/src/gui/elastic/fft.h index 12d460c24..0b5c48ad7 100644 --- a/retroshare-gui/src/gui/elastic/fft.h +++ b/retroshare-gui/src/gui/elastic/fft.h @@ -104,7 +104,11 @@ public: w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { +#ifdef __APPLE__ + __sincos(delta*j,&y,&x); +#else sincos(delta*j,&y,&x) ; +#endif //x = cos(delta * j); //y = sin(delta * j); w[j] = x; From 936dcbabb344e46b95c396fb596fc41febe63d98 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 21 Apr 2017 18:50:36 +0200 Subject: [PATCH 130/230] Fix UnitTest compilation. --- tests/unittests/libretroshare/gxs/nxs_test/nxstesthub.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unittests/libretroshare/gxs/nxs_test/nxstesthub.cc b/tests/unittests/libretroshare/gxs/nxs_test/nxstesthub.cc index 216f971c1..36b288341 100644 --- a/tests/unittests/libretroshare/gxs/nxs_test/nxstesthub.cc +++ b/tests/unittests/libretroshare/gxs/nxs_test/nxstesthub.cc @@ -53,6 +53,7 @@ public: { return recvItem(i); } + bool getServiceItemNames(uint32_t /*service_type*/, std::map& /*names*/) { return false; } private: RsPeerId mPeerId; RecvPeerItemIface* mRecvIface; From 8c0b7ce776bfc77f4d03ec269d3f3ffbec250d90 Mon Sep 17 00:00:00 2001 From: Konrad Date: Fri, 21 Apr 2017 23:44:00 +0200 Subject: [PATCH 131/230] Fixed: Responds sends now correct time difference --- libresapi/src/api/IdentityHandler.cpp | 4 ++-- libresapi/src/api/PeersHandler.cpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 67e5cb4c6..2990a745c 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -413,7 +413,7 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) resp.mDataStream << makeKeyValue("pgp_name", pgp_name); time_t now = time(NULL); - resp.mDataStream << makeKeyValue("last_usage", std::to_string(now - data.mLastUsageTS)); + resp.mDataStream << makeKeyValue("last_usage", difftime(now, data.mLastUsageTS)); bool isAnonymous = false; if(!data.mPgpKnown) @@ -468,7 +468,7 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) for(std::map::const_iterator it(details.mUseCases.begin()); it != details.mUseCases.end(); ++it) { - usagesStream.getStreamToMember() << makeKeyValue("usage_time", std::to_string(now - it->second)); + usagesStream.getStreamToMember() << makeKeyValue("usage_time", difftime(now, data.mLastUsageTS)); usagesStream.getStreamToMember() << makeKeyValue("usage_service", (int)(it->first.mServiceId)); usagesStream.getStreamToMember() << makeKeyValue("usage_case", (int)(it->first.mUsageCode)); } diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index 6649acdcb..dd03f8351 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -7,6 +7,7 @@ #include #include +#include #include "Operators.h" #include "ApiTypes.h" @@ -745,11 +746,12 @@ void PeersHandler::handleGetNodeOptions(Request& req, Response& resp) return; } + time_t now = time(NULL); resp.mDataStream << makeKeyValue("peer_id", detail.id.toStdString()); resp.mDataStream << makeKeyValue("name", detail.name); resp.mDataStream << makeKeyValue("location", detail.location); resp.mDataStream << makeKeyValue("pgp_id", detail.gpg_id.toStdString()); - resp.mDataStream << makeKeyValue("last_contact", detail.lastConnect); + resp.mDataStream << makeKeyValue("last_contact", difftime(now, detail.lastConnect)); std::string status_message = mRsMsgs->getCustomStateString(detail.id); resp.mDataStream << makeKeyValueReference("status_message", status_message); From 8b9c447063a13f4b2c567e8be378a8c270487003 Mon Sep 17 00:00:00 2001 From: electron128 Date: Sat, 22 Apr 2017 10:13:23 +0200 Subject: [PATCH 132/230] fixed possible crash and return value in rsGetHostByName(), thanks to Kotyara for reporting this --- libretroshare/src/util/rsnet.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/util/rsnet.cc b/libretroshare/src/util/rsnet.cc index 63501511b..8b8c9ef82 100644 --- a/libretroshare/src/util/rsnet.cc +++ b/libretroshare/src/util/rsnet.cc @@ -81,15 +81,18 @@ bool rsGetHostByName(const std::string& hostname, in_addr& returned_addr) addrinfo *info = NULL; int res = getaddrinfo(hostname.c_str(),NULL,NULL,&info) ; + bool ok = true; if(res > 0 || info == NULL || info->ai_addr == NULL) { std::cerr << "(EE) getaddrinfo returned error " << res << " on string \"" << hostname << "\"" << std::endl; returned_addr.s_addr = 0 ; + ok = false; } else returned_addr.s_addr = ((sockaddr_in*)info->ai_addr)->sin_addr.s_addr ; - freeaddrinfo(info) ; + if(info) + freeaddrinfo(info) ; #ifdef DEPRECATED_TO_REMOVE #if defined(WINDOWS_SYS) || defined(__APPLE__) || defined(__HAIKU__) @@ -123,7 +126,7 @@ bool rsGetHostByName(const std::string& hostname, in_addr& returned_addr) returned_addr.s_addr = *(unsigned long*) (result->h_addr); #endif - return true ; + return ok; } bool isValidNet(const struct in_addr *addr) From f571b05693e2e886cbb062cdf5636e945e5b607f Mon Sep 17 00:00:00 2001 From: Konrad Date: Sat, 22 Apr 2017 11:06:56 +0200 Subject: [PATCH 133/230] Added: Checking if the vector is empty; Changed: Grouped values into one member --- libresapi/src/api/IdentityHandler.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 2990a745c..1306f9a54 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -388,6 +388,12 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) return; } + if(datavector.empty()) + { + resp.setFail(); + return; + } + data = datavector[0]; resp.mDataStream << makeKeyValue("gxs_name", data.mMeta.mGroupName); @@ -468,9 +474,10 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) for(std::map::const_iterator it(details.mUseCases.begin()); it != details.mUseCases.end(); ++it) { - usagesStream.getStreamToMember() << makeKeyValue("usage_time", difftime(now, data.mLastUsageTS)); - usagesStream.getStreamToMember() << makeKeyValue("usage_service", (int)(it->first.mServiceId)); - usagesStream.getStreamToMember() << makeKeyValue("usage_case", (int)(it->first.mUsageCode)); + usagesStream.getStreamToMember() + << makeKeyValue("usage_time", difftime(now, data.mLastUsageTS)) + << makeKeyValue("usage_service", (int)(it->first.mServiceId)) + << makeKeyValue("usage_case", (int)(it->first.mUsageCode)); } resp.setOk(); From 782c02744f96e34fad0beeef939fc1f744b86426 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Apr 2017 16:00:01 +0200 Subject: [PATCH 134/230] added names for turtle sub items --- libretroshare/src/turtle/p3turtle.cc | 17 +++++++++++++++++ libretroshare/src/turtle/p3turtle.h | 2 ++ libretroshare/src/turtle/rsturtleitem.h | 4 ---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index 997fe0e7e..4064a7a3e 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -144,6 +144,23 @@ RsServiceInfo p3turtle::getServiceInfo() TURTLE_MIN_MINOR_VERSION); } +void p3turtle::getItemNames(std::map& names) const +{ + names.clear(); + + names[RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST ] = "Search request"; + names[RS_TURTLE_SUBTYPE_SEARCH_RESULT ] = "Search result"; + names[RS_TURTLE_SUBTYPE_OPEN_TUNNEL ] = "Tunnel request"; + names[RS_TURTLE_SUBTYPE_TUNNEL_OK ] = "Tunnel response"; + names[RS_TURTLE_SUBTYPE_FILE_REQUEST ] = "Data request"; + names[RS_TURTLE_SUBTYPE_FILE_DATA ] = "Data chunk"; + names[RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST ] = "RegExp search"; + names[RS_TURTLE_SUBTYPE_GENERIC_DATA ] = "Generic data"; + names[RS_TURTLE_SUBTYPE_FILE_MAP ] = "Chunk map"; + names[RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST ] = "Chunk map request"; + names[RS_TURTLE_SUBTYPE_CHUNK_CRC ] = "Chunk CRC"; + names[RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST ] = "Chunk CRC request"; +} void p3turtle::setEnabled(bool b) { diff --git a/libretroshare/src/turtle/p3turtle.h b/libretroshare/src/turtle/p3turtle.h index d9d51456b..36324f941 100644 --- a/libretroshare/src/turtle/p3turtle.h +++ b/libretroshare/src/turtle/p3turtle.h @@ -293,6 +293,8 @@ class p3turtle: public p3Service, public RsTurtle, public p3Config /// virtual int tick(); + virtual void getItemNames(std::map& names) const; + /************* from p3Config *******************/ virtual RsSerialiser *setupSerialiser() ; virtual bool saveList(bool& cleanup, std::list&) ; diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 5b15f7781..bbe587396 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -13,16 +13,12 @@ const uint8_t RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST = 0x01 ; const uint8_t RS_TURTLE_SUBTYPE_SEARCH_RESULT = 0x02 ; const uint8_t RS_TURTLE_SUBTYPE_OPEN_TUNNEL = 0x03 ; const uint8_t RS_TURTLE_SUBTYPE_TUNNEL_OK = 0x04 ; -const uint8_t RS_TURTLE_SUBTYPE_CLOSE_TUNNEL = 0x05 ; -const uint8_t RS_TURTLE_SUBTYPE_TUNNEL_CLOSED = 0x06 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_REQUEST = 0x07 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_DATA = 0x08 ; const uint8_t RS_TURTLE_SUBTYPE_REGEXP_SEARCH_REQUEST = 0x09 ; const uint8_t RS_TURTLE_SUBTYPE_GENERIC_DATA = 0x0a ; const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP = 0x10 ; const uint8_t RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST = 0x11 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC = 0x12 ; -const uint8_t RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST = 0x13 ; const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC = 0x14 ; const uint8_t RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST = 0x15 ; From 0e087db807dfff94cdab04dfc763e6fe3b26689a Mon Sep 17 00:00:00 2001 From: defnax Date: Sat, 22 Apr 2017 17:32:59 +0200 Subject: [PATCH 135/230] Fixed to use right icons for context menu actions --- retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index 5c479005c..6afa8dbdd 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -60,6 +60,7 @@ /* Images for context menu icons */ #define IMAGE_MESSAGE ":/images/mail_new.png" #define IMAGE_MESSAGEREPLY ":/images/mail_reply.png" +#define IMAGE_MESSAGEEDIT ":/images/edit_16.png" #define IMAGE_MESSAGEREMOVE ":/images/mail_delete.png" #define IMAGE_DOWNLOAD ":/images/start.png" #define IMAGE_DOWNLOADALL ":/images/startall.png" @@ -485,7 +486,7 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) QMenu contextMnu(this); - QAction *editAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Edit"), &contextMnu); + QAction *editAct = new QAction(QIcon(IMAGE_MESSAGEEDIT), tr("Edit"), &contextMnu); connect(editAct, SIGNAL(triggered()), this, SLOT(editforummessage())); QAction *replyAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Reply"), &contextMnu); @@ -531,7 +532,7 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) QAction *markMsgAsUnreadChildren = new QAction(QIcon(":/images/message-mail.png"), tr("Mark as unread") + " (" + tr ("with children") + ")", &contextMnu); connect(markMsgAsUnreadChildren, SIGNAL(triggered()), this, SLOT(markMsgAsUnreadChildren())); - QAction *showinpeopleAct = new QAction(QIcon(":/images/message-mail.png"), tr("Show author in people tab"), &contextMnu); + QAction *showinpeopleAct = new QAction(QIcon(":/images/info16.png"), tr("Show author in people tab"), &contextMnu); connect(showinpeopleAct, SIGNAL(triggered()), this, SLOT(showInPeopleTab())); if (IS_GROUP_SUBSCRIBED(mSubscribeFlags)) { From 311f257090ab6027e629357c6927d5f4e7e29ecb Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Apr 2017 21:10:55 +0200 Subject: [PATCH 136/230] converted GxsReputationItems to new serialization --- .../src/serialiser/rsgxsreputationitems.cc | 91 +++++++++++++------ .../src/serialiser/rsgxsreputationitems.h | 65 ++++--------- .../src/serialization/rstypeserializer.h | 71 +++++++++++++++ libretroshare/src/services/p3gxsreputation.cc | 5 +- libretroshare/src/services/p3gxsreputation.h | 2 + 5 files changed, 156 insertions(+), 78 deletions(-) diff --git a/libretroshare/src/serialiser/rsgxsreputationitems.cc b/libretroshare/src/serialiser/rsgxsreputationitems.cc index 5701cc756..e5240d91d 100644 --- a/libretroshare/src/serialiser/rsgxsreputationitems.cc +++ b/libretroshare/src/serialiser/rsgxsreputationitems.cc @@ -28,40 +28,14 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rsgxsreputationitems.h" +#include "serialization/rstypeserializer.h" + /*** #define RSSERIAL_DEBUG 1 ***/ #include -// re-defined here, in order to avoid cross-includes -#define REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE 0x0100 - -/*************************************************************************/ - -bool RsReputationItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const -{ - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsReputationItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsReputationItem::serialise() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; -} - /*************************************************************************/ void RsGxsReputationSetItem::clear() @@ -79,6 +53,45 @@ void RsGxsReputationBannedNodeSetItem::clear() mKnownIdentities.TlvClear(); } +void RsGxsReputationConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,mPeerId,"mPeerId") ; + RsTypeSerializer::serial_process(j,ctx,mLatestUpdate,"mLatestUpdate") ; + RsTypeSerializer::serial_process(j,ctx,mLastQuery,"mLastQuery") ; +} + +void RsGxsReputationBannedNodeSetItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,mPgpId,"mPgpId") ; + RsTypeSerializer::serial_process (j,ctx,mLastActivityTS,"mLastActivityTS") ; + RsTypeSerializer::serial_process(j,ctx,mKnownIdentities,"mKnownIdentities") ; +} + +void RsGxsReputationSetItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,mGxsId,"mGxsId") ; + RsTypeSerializer::serial_process(j,ctx,mOwnOpinion,"mOwnOpinion") ; + RsTypeSerializer::serial_process(j,ctx,mOwnOpinionTS,"mOwnOpinionTS") ; + RsTypeSerializer::serial_process(j,ctx,mIdentityFlags,"mIdentityFlags") ; + RsTypeSerializer::serial_process(j,ctx,mLastUsedTS,"mLastUsedTS") ; + RsTypeSerializer::serial_process (j,ctx,mOwnerNodeId,"mOwnerNodeId") ; + RsTypeSerializer::serial_process (j,ctx,mOpinions,"mOpinions") ; +} + +void RsGxsReputationUpdateItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mLatestUpdate,"mLatestUpdate") ; + RsTypeSerializer::serial_process (j,ctx,mOpinions,"mOpinions") ; +} +void RsGxsReputationRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mLastUpdate,"mLastUpdate") ; +} + +#ifdef TO_REMOVE +// re-defined here, in order to avoid cross-includes +#define REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE 0x0100 + /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ @@ -360,6 +373,7 @@ RsGxsReputationConfigItem *RsGxsReputationSerialiser::deserialiseReputationConfi return item; } + RsGxsReputationBannedNodeSetItem *RsGxsReputationSerialiser::deserialiseReputationBannedNodeSetItem(void *data,uint32_t size) { uint32_t offset = 8; // skip the header @@ -382,6 +396,8 @@ RsGxsReputationBannedNodeSetItem *RsGxsReputationSerialiser::deserialiseReputati return item; } + + RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem_deprecated(void *data,uint32_t tlvsize) { uint32_t offset = 8; // skip the header @@ -502,6 +518,7 @@ RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem( return item; } + RsGxsReputationUpdateItem *RsGxsReputationSerialiser::deserialiseReputationUpdateItem(void *data,uint32_t tlvsize) { uint32_t offset = 8; // skip the header @@ -559,6 +576,7 @@ RsGxsReputationRequestItem *RsGxsReputationSerialiser::deserialiseReputationRequ return item; } + /*************************************************************************/ RsItem *RsGxsReputationSerialiser::deserialise(void *data, uint32_t *pktsize) @@ -587,8 +605,25 @@ RsItem *RsGxsReputationSerialiser::deserialise(void *data, uint32_t *pktsize) break; } } +#endif /*************************************************************************/ +RsItem *RsGxsReputationSerialiser::create_item(uint16_t service,uint8_t subtype) const +{ + if(service != RS_SERVICE_GXS_TYPE_REPUTATION) + return NULL ; + switch(subtype) + { + case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return new RsGxsReputationSetItem() ; + case RS_PKT_SUBTYPE_GXS_REPUTATION_BANNED_NODE_SET_ITEM : return new RsGxsReputationBannedNodeSetItem(); + case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return new RsGxsReputationUpdateItem(); + case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM : return new RsGxsReputationRequestItem() ; + case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return new RsGxsReputationConfigItem () ; + default: + std::cerr << "(EE) RsGxsReputationSerialiser::create_item(): unhandled item type " << subtype << std::endl; + return NULL ; + } +} diff --git a/libretroshare/src/serialiser/rsgxsreputationitems.h b/libretroshare/src/serialiser/rsgxsreputationitems.h index 9d5383343..cc3f64a78 100644 --- a/libretroshare/src/serialiser/rsgxsreputationitems.h +++ b/libretroshare/src/serialiser/rsgxsreputationitems.h @@ -34,6 +34,8 @@ #include "retroshare/rsgxsifacetypes.h" #include "retroshare/rsreputations.h" +#include "serialization/rsserializer.h" + #define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01 #define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated2 0x02 #define RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM 0x03 @@ -53,15 +55,7 @@ class RsReputationItem: public RsItem } virtual ~RsReputationItem() {} - - virtual bool serialise(void *data,uint32_t& size) const = 0 ; - virtual uint32_t serial_size() const = 0 ; - virtual void clear() = 0 ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0; - - protected: - bool serialise_header(void *data, uint32_t& pktsize, uint32_t& tlvsize, uint32_t& offset) const; }; class RsGxsReputationConfigItem: public RsReputationItem @@ -71,16 +65,15 @@ public: virtual ~RsGxsReputationConfigItem() {} virtual void clear() {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; - + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + RsPeerId mPeerId; uint32_t mLatestUpdate; // timestamp they returned. uint32_t mLastQuery; // when we sent out. }; +#ifdef TO_REMOVE // This class should disappear. Deprecated since Jan 7, 2017. The class definition is actually not needed, // that is why it's commented out. Kept here in order to explains how the deserialisation works. // @@ -91,10 +84,8 @@ public: virtual ~RsGxsReputationSetItem_deprecated3() {} virtual void clear() {} - std::ostream &print(std::ostream &out, uint16_t /*indent*/ = 0) { return out;} - virtual bool serialise(void */*data*/,uint32_t& /*size*/) const { return false ;} - virtual uint32_t serial_size() const { return 0;} + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; RsGxsId mGxsId; uint32_t mOwnOpinion; @@ -103,6 +94,8 @@ public: RsPgpId mOwnerNodeId; std::map mOpinions; // RsPeerId -> Opinion. }; +#endif + class RsGxsReputationSetItem: public RsReputationItem { public: @@ -116,10 +109,8 @@ public: virtual ~RsGxsReputationSetItem() {} virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; RsGxsId mGxsId; uint32_t mOwnOpinion; @@ -136,10 +127,8 @@ public: virtual ~RsGxsReputationBannedNodeSetItem() {} virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; RsPgpId mPgpId ; uint32_t mLastActivityTS ; @@ -153,12 +142,10 @@ public: virtual ~RsGxsReputationUpdateItem() {} virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; - uint32_t mLatestUpdate; + uint32_t mLatestUpdate; std::map mOpinions; // GxsId -> Opinion. }; @@ -169,40 +156,20 @@ public: virtual ~RsGxsReputationRequestItem() {} virtual void clear() {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; uint32_t mLastUpdate; }; -class RsGxsReputationSerialiser: public RsSerialType +class RsGxsReputationSerialiser: public RsSerializer { public: - RsGxsReputationSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION){} - + RsGxsReputationSerialiser() :RsSerializer(RS_SERVICE_GXS_TYPE_REPUTATION){} virtual ~RsGxsReputationSerialiser(){} - virtual uint32_t size(RsItem *item) - { - return dynamic_cast(item)->serial_size() ; - } - virtual bool serialise (RsItem *item, void *data, uint32_t *size) - { - return dynamic_cast(item)->serialise(data,*size) ; - } - virtual RsItem * deserialise(void *data, uint32_t *size); - -private: - static RsGxsReputationConfigItem *deserialiseReputationConfigItem (void *data, uint32_t size); - static RsGxsReputationSetItem *deserialiseReputationSetItem (void *data, uint32_t size); - static RsGxsReputationSetItem *deserialiseReputationSetItem_deprecated (void *data, uint32_t size); - static RsGxsReputationSetItem_deprecated3 *deserialiseReputationSetItem_deprecated3 (void *data, uint32_t size); - static RsGxsReputationUpdateItem *deserialiseReputationUpdateItem (void *data, uint32_t size); - static RsGxsReputationRequestItem *deserialiseReputationRequestItem (void *data, uint32_t size); - static RsGxsReputationBannedNodeSetItem *deserialiseReputationBannedNodeSetItem (void *data, uint32_t size); + virtual RsItem *create_item(uint16_t service,uint8_t item_type) const; }; /**************************************************************************/ diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 403219ecb..1899a26fe 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -85,6 +85,77 @@ class RsTypeSerializer throw std::runtime_error("Unknown serial job") ; } } + //=================================================================================================// + // std::map // + //=================================================================================================// + + template + static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::map& v,const std::string& member_name) + { + switch(j) + { + case RsItem::SIZE_ESTIMATE: + { + ctx.mOffset += 4 ; + for(typename std::map::iterator it(v.begin());it!=v.end();++it) + { + ctx.mOffset += serial_size(it->first) ; + ctx.mOffset += serial_size(it->second) ; + } + } + break ; + + case RsItem::DESERIALIZE: + { + uint32_t n=0 ; + ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + + for(uint32_t i=0;i(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + + for(typename std::map::iterator it(v.begin());it!=v.end();++it) + { + ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,it->first) ; + ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,it->second) ; + } + } + break ; + + case RsItem::PRINT: + { + if(v.empty()) + std::cerr << " Empty map"<< std::endl; + else + std::cerr << " std::map of " << v.size() << " elements:" << std::endl; + + for(typename std::map::iterator it(v.begin());it!=v.end();++it) + { + std::cerr << " " ; + + print_data("first",it->first) ; + print_data("second",it->second) ; + } + } + break; + default: + break; + } + } //=================================================================================================// // std::vector // diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc index 45fd95898..cf956c0d8 100644 --- a/libretroshare/src/services/p3gxsreputation.cc +++ b/libretroshare/src/services/p3gxsreputation.cc @@ -1210,6 +1210,7 @@ bool p3GxsReputation::loadList(std::list& loadList) if (set) loadReputationSet(set, peerSet); +#ifdef TO_REMOVE RsGxsReputationSetItem_deprecated3 *set2 = dynamic_cast(*it); if(set2) @@ -1217,6 +1218,7 @@ bool p3GxsReputation::loadList(std::list& loadList) std::cerr << "(II) reading and converting old format ReputationSetItem." << std::endl; loadReputationSet_deprecated3(set2, peerSet); } +#endif RsGxsReputationBannedNodeSetItem *itm2 = dynamic_cast(*it) ; @@ -1274,6 +1276,7 @@ bool p3GxsReputation::loadList(std::list& loadList) loadList.clear() ; return true; } +#ifdef TO_REMOVE bool p3GxsReputation::loadReputationSet_deprecated3(RsGxsReputationSetItem_deprecated3 *item, const std::set &peerSet) { { @@ -1324,7 +1327,7 @@ bool p3GxsReputation::loadReputationSet_deprecated3(RsGxsReputationSetItem_depre #endif return true; } - +#endif bool p3GxsReputation::loadReputationSet(RsGxsReputationSetItem *item, const std::set &peerSet) { diff --git a/libretroshare/src/services/p3gxsreputation.h b/libretroshare/src/services/p3gxsreputation.h index baabdaa43..fdfd8ac54 100644 --- a/libretroshare/src/services/p3gxsreputation.h +++ b/libretroshare/src/services/p3gxsreputation.h @@ -156,7 +156,9 @@ private: // internal update of data. Takes care of cleaning empty boxes. void locked_updateOpinion(const RsPeerId &from, const RsGxsId &about, RsReputations::Opinion op); bool loadReputationSet(RsGxsReputationSetItem *item, const std::set &peerSet); +#ifdef TO_REMOVE bool loadReputationSet_deprecated3(RsGxsReputationSetItem_deprecated3 *item, const std::set &peerSet); +#endif int sendPackets(); void cleanup(); void sendReputationRequests(); From bef6db4b4362d49f38893c522cc72b7bb9b6bfa5 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Apr 2017 21:32:57 +0200 Subject: [PATCH 137/230] moved files --- libretroshare/src/{serialiser => rsitems}/rsgxsreputationitems.cc | 0 libretroshare/src/{serialiser => rsitems}/rsgxsreputationitems.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsgxsreputationitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsreputationitems.h (100%) diff --git a/libretroshare/src/serialiser/rsgxsreputationitems.cc b/libretroshare/src/rsitems/rsgxsreputationitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsgxsreputationitems.cc rename to libretroshare/src/rsitems/rsgxsreputationitems.cc diff --git a/libretroshare/src/serialiser/rsgxsreputationitems.h b/libretroshare/src/rsitems/rsgxsreputationitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsreputationitems.h rename to libretroshare/src/rsitems/rsgxsreputationitems.h From 2e7127077dab71675431e9826e494cff1cfc396d Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Apr 2017 21:36:39 +0200 Subject: [PATCH 138/230] fixed previous file move --- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/rsitems/rsgxsreputationitems.cc | 2 +- libretroshare/src/services/p3gxsreputation.cc | 2 +- libretroshare/src/services/p3gxsreputation.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 2d7a966e9..16aba6778 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -784,12 +784,12 @@ HEADERS += retroshare/rsidentity.h \ services/p3idservice.h \ serialiser/rsgxsiditems.h \ services/p3gxsreputation.h \ - serialiser/rsgxsreputationitems.h \ + rsitems/rsgxsreputationitems.h \ SOURCES += services/p3idservice.cc \ serialiser/rsgxsiditems.cc \ services/p3gxsreputation.cc \ - serialiser/rsgxsreputationitems.cc \ + rsitems/rsgxsreputationitems.cc \ # GxsCircles Service HEADERS += services/p3gxscircles.h \ diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.cc b/libretroshare/src/rsitems/rsgxsreputationitems.cc index e5240d91d..11e267654 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.cc +++ b/libretroshare/src/rsitems/rsgxsreputationitems.cc @@ -26,7 +26,7 @@ #include #include #include "serialiser/rsbaseserial.h" -#include "serialiser/rsgxsreputationitems.h" +#include "rsitems/rsgxsreputationitems.h" #include "serialization/rstypeserializer.h" diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc index cf956c0d8..609382444 100644 --- a/libretroshare/src/services/p3gxsreputation.cc +++ b/libretroshare/src/services/p3gxsreputation.cc @@ -29,7 +29,7 @@ #include "retroshare/rspeers.h" #include "services/p3gxsreputation.h" -#include "serialiser/rsgxsreputationitems.h" +#include "rsitems/rsgxsreputationitems.h" #include "serialiser/rsconfigitems.h" #include diff --git a/libretroshare/src/services/p3gxsreputation.h b/libretroshare/src/services/p3gxsreputation.h index fdfd8ac54..06ff7415b 100644 --- a/libretroshare/src/services/p3gxsreputation.h +++ b/libretroshare/src/services/p3gxsreputation.h @@ -36,7 +36,7 @@ static const uint32_t REPUTATION_IDENTITY_FLAG_UP_TO_DATE = 0x0100; // This static const uint32_t REPUTATION_IDENTITY_FLAG_PGP_LINKED = 0x0001; static const uint32_t REPUTATION_IDENTITY_FLAG_PGP_KNOWN = 0x0002; -#include "serialiser/rsgxsreputationitems.h" +#include "rsitems/rsgxsreputationitems.h" #include "retroshare/rsidentity.h" #include "retroshare/rsreputations.h" From 4c326f5e808f261bb3e4522d6cbaba2927224dc9 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sun, 23 Apr 2017 10:27:18 +0200 Subject: [PATCH 139/230] Fix Relay setting page. --- retroshare-gui/src/gui/settings/RelayPage.cpp | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/retroshare-gui/src/gui/settings/RelayPage.cpp b/retroshare-gui/src/gui/settings/RelayPage.cpp index 258bc05aa..3124f40db 100644 --- a/retroshare-gui/src/gui/settings/RelayPage.cpp +++ b/retroshare-gui/src/gui/settings/RelayPage.cpp @@ -29,6 +29,7 @@ #include #include #include +#include "util/misc.h" #include @@ -127,35 +128,37 @@ void RelayPage::load() uint32_t count; uint32_t bandwidth; rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_FRIENDS, count, bandwidth); - ui.noFriendSpinBox->setValue(count); - ui.bandFriendSpinBox->setValue(bandwidth / 1000); + whileBlocking(ui.noFriendSpinBox)->setValue(count); + whileBlocking(ui.bandFriendSpinBox)->setValue(bandwidth / 1000); rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_FOF, count, bandwidth); - ui.noFOFSpinBox->setValue(count); - ui.bandFOFSpinBox->setValue(bandwidth / 1000); + whileBlocking(ui.noFOFSpinBox)->setValue(count); + whileBlocking(ui.bandFOFSpinBox)->setValue(bandwidth / 1000); rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_GENERAL, count, bandwidth); - ui.noGeneralSpinBox->setValue(count); - ui.bandGeneralSpinBox->setValue(bandwidth / 1000); + whileBlocking(ui.noGeneralSpinBox)->setValue(count); + whileBlocking(ui.bandGeneralSpinBox)->setValue(bandwidth / 1000); + + updateTotals(); uint32_t relayMode = rsDht->getRelayMode(); if (relayMode & RSDHT_RELAY_ENABLED) { - ui.enableCheckBox->setCheckState(Qt::Checked); + whileBlocking(ui.enableCheckBox)->setCheckState(Qt::Checked); if ((relayMode & RSDHT_RELAY_MODE_MASK) == RSDHT_RELAY_MODE_OFF) { - ui.serverCheckBox->setCheckState(Qt::Unchecked); + whileBlocking(ui.serverCheckBox)->setCheckState(Qt::Unchecked); } else { - ui.serverCheckBox->setCheckState(Qt::Checked); + whileBlocking(ui.serverCheckBox)->setCheckState(Qt::Checked); } } else { - ui.enableCheckBox->setCheckState(Qt::Unchecked); - ui.serverCheckBox->setCheckState(Qt::Unchecked); + whileBlocking(ui.enableCheckBox)->setCheckState(Qt::Unchecked); + whileBlocking(ui.serverCheckBox)->setCheckState(Qt::Unchecked); } loadServers(); From 5b3b903603742a7717d7e5f372df8f13140089f7 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 17:33:21 +0200 Subject: [PATCH 140/230] added missing line for ubuntu zesty --- build_scripts/Debian+Ubuntu/makeSourcePackage.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh index 5cbb59f24..2e6f4305a 100755 --- a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh +++ b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh @@ -116,6 +116,8 @@ for i in ${dist}; do if test "${i}" = "lucid" ; then cp ../control.ubuntu_lucid debian/control + elif test "${i}" = "zesty" ; then + cp ../control.zesty debian/control elif test "${i}" = "squeeze" ; then cp ../control.squeeze_bubba3 debian/control elif test "${i}" = "precise" ; then From c738026eb8f874620ecaf174b5477f4d5039eae4 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 17:48:39 +0200 Subject: [PATCH 141/230] updated ubuntu changelog --- build_scripts/Debian+Ubuntu/changelog | 194 ++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) diff --git a/build_scripts/Debian+Ubuntu/changelog b/build_scripts/Debian+Ubuntu/changelog index 15c1216c6..bb6fcd9b7 100644 --- a/build_scripts/Debian+Ubuntu/changelog +++ b/build_scripts/Debian+Ubuntu/changelog @@ -1,5 +1,199 @@ retroshare06 (0.6.2-1.XXXXXX~YYYYYY) YYYYYY; urgency=low + 5b3b903 csoler Sun, 23 Apr 2017 17:33:21 +0200 added missing line for ubuntu zesty + 73bfc27 csoler Sun, 23 Apr 2017 17:33:50 +0200 Merge pull request #784 from PhenomRetroShare/Fix_RelaySettingsPage + 4c326f5 Phenom Sun, 23 Apr 2017 10:27:18 +0200 Fix Relay setting page. + 0e087db defnax Sat, 22 Apr 2017 17:32:59 +0200 Fixed to use right icons for context menu actions + 8b9c447 electr Sat, 22 Apr 2017 10:13:23 +0200 fixed possible crash and return value in rsGetHostByName(), thanks to Kotyara for reporting this + 4ab6021 csoler Fri, 21 Apr 2017 19:45:30 +0200 Merge pull request #782 from PhenomRetroShare/Fix_MacOSX_Compilation + 936dcba Phenom Fri, 21 Apr 2017 18:50:36 +0200 Fix UnitTest compilation. + 969b5ce Phenom Fri, 21 Apr 2017 15:57:57 +0200 Fix MacOSX compilation. + 7400a8d csoler Thu, 20 Apr 2017 20:59:12 +0200 Merge pull request #780 from csoler/v0.6-ImprovedGUI + 5f8bf03 csoler Thu, 20 Apr 2017 20:54:51 +0200 added mechanism to allow services to document the names of their items, and improved bandwidth graph to show names for GXS services. Other services still need to supply their own names + ccfd12b csoler Wed, 19 Apr 2017 18:53:49 +0200 Merge pull request #778 from csoler/v0.6-ImprovedGUI + f406b81 csoler Wed, 19 Apr 2017 18:46:58 +0200 removed all FFT code and cleaned up deleted code in graphwidget.cpp + 1da89dd csoler Wed, 19 Apr 2017 17:16:30 +0200 changed FFT code in graph widget into a more efficient one, with free licence + e95ddb9 csoler Tue, 18 Apr 2017 20:28:36 +0200 Merge pull request #767 from PhenomRetroShare/Fix_CommentWithLineReturn + 5f969e7 csoler Tue, 18 Apr 2017 20:27:20 +0200 Merge pull request #776 from PhenomRetroShare/Fix_ClangWarnings + 3ab39c6 csoler Tue, 18 Apr 2017 20:26:14 +0200 Merge pull request #777 from PhenomRetroShare/Fix_EncodeRadixInRSLinks + 3c5e61a Phenom Tue, 18 Apr 2017 17:36:43 +0200 Encode Radix in RSLinks. + 3733137 Phenom Tue, 18 Apr 2017 11:25:41 +0200 Fix Clang warnings: implicit conversion + 7d9a803 Phenom Tue, 18 Apr 2017 11:18:10 +0200 Fix Clang warnings: bdnet_inet_ntoa C-linkage + 4faaaf7 csoler Mon, 17 Apr 2017 22:03:48 +0200 Merge pull request #775 from csoler/v0.6-PRTest + 87dd614 Phenom Fri, 7 Apr 2017 19:32:19 +0200 Fix Clang Warnings: private field 'encoding_debug_file' is not used + 4f939b2 Phenom Fri, 7 Apr 2017 19:29:27 +0200 Fix Clang warnings: unused function 'set_item_background' + 76f7573 Phenom Fri, 7 Apr 2017 18:48:40 +0200 Fix Clang warnings: comparison of array != a null pointer is always true + 0bbd149 Phenom Fri, 7 Apr 2017 18:42:22 +0200 Fix Clang warnings: comparison of integers of different signs + a476a81 Phenom Fri, 7 Apr 2017 18:40:02 +0200 Fix Clang warnings: function 'update_children_background' is not needed + d8a7313 Phenom Fri, 7 Apr 2017 18:32:55 +0200 Fix Clang warnings: implicit conversion from 'double' to 'int' + 19196e2 Phenom Fri, 7 Apr 2017 18:21:49 +0200 Fix Clang warnings: ariable 'status' is used uninitialized + a3a53b9 Phenom Fri, 7 Apr 2017 18:19:42 +0200 Fix Clang warnings: unused parameter 'req' + 94ac821 Phenom Wed, 29 Mar 2017 18:13:17 +0200 Fix Clang warnings: Unused variable Pi + fd92bca Phenom Tue, 28 Mar 2017 21:18:25 +0200 Fix Clang warnings: variable 'layout' is used uninitialized + 8d85cf5 Phenom Tue, 28 Mar 2017 21:16:05 +0200 Fix Clang warnings: 'xxxWidget::sizeHint' hides overloaded vf + 6f2d7bb Phenom Sun, 19 Mar 2017 10:51:48 +0100 Fix Clang warnings: implicit conversion from 'double' to 'int' + 07b67e9 Phenom Sun, 19 Mar 2017 10:40:34 +0100 Fix Clang warnings: 'PopupDistantChatDialog::init' hides overloaded virtual function + eea49d9 Phenom Sat, 18 Mar 2017 11:56:11 +0100 Fix Clang warnings: change ChatDialog::init definition + 9319caf Phenom Sat, 18 Mar 2017 11:32:56 +0100 Fix Clang warnings: 'Node::advance' hides overloaded virtual function + 13c8f7d Phenom Sat, 18 Mar 2017 11:28:29 +0100 Fix Clang warnings: Infinite recursion + e0225ef Phenom Sat, 18 Mar 2017 11:19:42 +0100 Fix Clang warnings: 'ChatLobbyDialog::init' hides overloaded virtual function + de4f6c0 Phenom Sat, 18 Mar 2017 10:42:38 +0100 Fix Clang warnings: Z-order assignment to spacer + 32eeb95 Phenom Sat, 18 Mar 2017 10:25:23 +0100 Fix Clang warnings: unused private field + 4ac3b3f Phenom Sat, 18 Mar 2017 10:20:57 +0100 Fix Clang warnings: implicit conversion of NULL to bool + e83104e Phenom Sat, 18 Mar 2017 10:19:31 +0100 Fix Clang warnings: Add author and date to #warning + 039908b Phenom Thu, 16 Mar 2017 22:58:06 +0100 Fix Clang warnings: private field not used + 872f42b Phenom Thu, 16 Mar 2017 22:55:18 +0100 Fix Clang warnings: Overloaded vf hide in pluginmanager + 2204309 Phenom Thu, 16 Mar 2017 22:11:33 +0100 Fix Clang warnings: extraneous parentheses + dc533b1 Phenom Thu, 16 Mar 2017 22:01:22 +0100 Fix Clang warnings: private field not used + 6532150 Phenom Thu, 16 Mar 2017 21:04:38 +0100 Fix Clang warnings: Overloaded vf hide in p3dhtmgr + 5bc6558 Phenom Thu, 16 Mar 2017 18:28:48 +0100 Fix Clang warnings: explicitly assigning value to itself + 6fecac5 Phenom Thu, 16 Mar 2017 17:50:25 +0100 Fix Clang warnings: Overloaded vf hide + cf963c0 Phenom Wed, 15 Mar 2017 20:41:39 +0100 Fix Clang warnings: struct declared as class + 105840a Phenom Wed, 15 Mar 2017 19:03:39 +0100 Fix Clang Warning: Overloaded vf hide + da4b168 Phenom Wed, 15 Mar 2017 18:55:24 +0100 Fix Clang warnings: mFns is not used + cbc264f Phenom Wed, 15 Mar 2017 18:53:30 +0100 Fix clang warning:Implicit conversion from enumeration + b2e37fe csoler Sat, 15 Apr 2017 20:24:06 +0200 Merge pull request #773 from csoler/v0.6-Identity + 273aae7 csoler Sat, 15 Apr 2017 19:01:13 +0200 fixed sharing of own identity + 98e1a6d electr Thu, 13 Apr 2017 14:12:46 +0200 Merge pull request #770 from Sonetio/fix_reselecting_accounts + 144d570 Konrad Thu, 13 Apr 2017 13:40:30 +0200 Fixed: Thread safe access to RsControlModule member variables + dcc8c6e Konrad Thu, 13 Apr 2017 13:31:32 +0200 Changed: Using PeersHandler::mRsPeers instead of rsPeers + a382d68 electr Thu, 13 Apr 2017 09:22:19 +0200 Merge pull request #769 from electron128/fix-gui-multiinstance + aa81cc1 Konrad Wed, 12 Apr 2017 20:24:18 +0200 Added: Functions for handling PGP account details requests + 9402b8e Konrad Mon, 10 Apr 2017 23:42:22 +0200 Fixed: mFixedPassword remained empty after logging + e1350a0 Konrad Mon, 10 Apr 2017 22:58:23 +0200 Fixed: Re-selecting accounts via RsControlModule; Added: Sending feedback about incorrect password + 3130ec9 csoler Mon, 10 Apr 2017 20:02:14 +0200 added GUI async call to ID serialised data. Allows to copy+paste identities. + 4c9b620 electr Sun, 9 Apr 2017 10:26:18 +0200 fixed --base-dir command line argument in rs-gui when running multiple instances. Only forward "link" and "rsfile" arguments to a running instance. Start a new instance if other arguments are present. + 7f12ca2 electr Sun, 9 Apr 2017 09:57:48 +0200 fixed name of local socket where RS waits for rslinks etc. + d66e653 csoler Sat, 8 Apr 2017 23:39:05 +0200 fixed bug in deserialisation of group informaiton + 54cd402 csoler Sat, 8 Apr 2017 21:43:07 +0200 fixed a few bugs in latest identity link code + 6d29038 csoler Sat, 8 Apr 2017 21:12:48 +0200 added RSLink for GXS identities + 4f5da86 csoler Sat, 8 Apr 2017 19:07:33 +0200 added method to serialise/deserialise groups to/from memory and export of GxsIdentities to memory chunk in radix format + f175533 Phenom Sat, 8 Apr 2017 14:06:47 +0200 Fix comment view when they have line return. + 4067c95 electr Wed, 5 Apr 2017 18:49:32 +0200 Merge pull request #760 from Sonetio/windows_service + 6e65fcd Konrad Sat, 1 Apr 2017 14:32:49 +0200 Removed: Unused #include statement + 8543525 Konrad Sat, 1 Apr 2017 14:28:55 +0200 Fixed: Linker problem + fbc1bb4 Konrad Wed, 29 Mar 2017 16:06:39 +0200 Added: function for handling autosubscribing lobbies + 22956be Konrad Tue, 28 Mar 2017 11:24:16 +0200 Deleted: functions for hadling particular lobbies types in ChatHandler + 6e53002 Konrad Tue, 28 Mar 2017 11:20:51 +0200 Added: tokens in PeersHandler + efd6ce3 Konrad Tue, 28 Mar 2017 11:19:50 +0200 Changed: Simplified asking for deferred self signature + 5694581 Konrad Tue, 28 Mar 2017 11:18:27 +0200 Changed: Qt dependecies are optional + 4031e49 Konrad Mon, 27 Mar 2017 16:11:04 +0200 Deleted: unused stateTokens + c33107c Konrad Sun, 26 Mar 2017 19:12:04 +0200 Fixed: backward comptiblity + bef7540 Konrad Sun, 26 Mar 2017 15:11:07 +0200 Fixed building on Travis CI + dbcf2d2 csoler Sat, 25 Mar 2017 20:27:18 +0100 Merge pull request #756 from RetroPooh/guistuff + 04af39f csoler Sat, 25 Mar 2017 20:24:40 +0100 Merge pull request #754 from PhenomRetroShare/Fix_WinNoSQLCipherCompil + ccb632a csoler Sat, 25 Mar 2017 19:26:12 +0100 Merge pull request #749 from PhenomRetroShare/Fix_WindowsHeightAtFirstStart + 8624c93 Konrad Sat, 25 Mar 2017 18:33:35 +0100 Added functions for hadling particular lobbies types to ChatHandler + 194878a Konrad Sat, 25 Mar 2017 18:31:13 +0100 Added functions for handling own and not own identities to IdentityHandler + cb32f30 Konrad Sat, 25 Mar 2017 18:28:31 +0100 Added states handling to PeersHandler + 28d37c2 Konrad Sat, 25 Mar 2017 18:25:26 +0100 Added password storing to RsControlModule for GUI benefits + 39967b7 Konrad Sat, 25 Mar 2017 18:23:28 +0100 Added name of requests to be used by GUI + ae95b49 Konrad Sat, 25 Mar 2017 18:20:53 +0100 Added SettingsHandler to handle response to settings requests + cb04134 Konrad Sat, 25 Mar 2017 18:15:47 +0100 Added Windows support to libresapi when working with retroshare_android_service + b0d2249 Konrad Sat, 25 Mar 2017 18:12:39 +0100 Added Windows support to retroshare-android-service + f5e7217 RetroP Tue, 21 Mar 2017 17:24:59 +0300 statistics - router - fix bold marking for tunnel speeds over 1mbs + 85cfda1 RetroP Tue, 21 Mar 2017 16:52:40 +0300 add tree item counters for channels,forums,posted + 50c81d7 RetroP Tue, 21 Mar 2017 16:41:39 +0300 chat lobby list - mark signed lobbies with color + 000dabf RetroP Tue, 21 Mar 2017 15:02:46 +0300 chat lobby list - add tree item counters + 19bd51d RetroP Tue, 21 Mar 2017 14:57:06 +0300 searchdialog - mark current downloads green + 5efa8e3 Phenom Fri, 17 Mar 2017 22:14:14 +0100 Fix Windows Compilation with CONFIG+=no_sqlcipher + ca0521c csoler Thu, 16 Mar 2017 21:01:27 +0100 allowed to edit subject hen editing forum posts. Only the latest subject is visible + 107d48f Phenom Wed, 15 Mar 2017 22:50:51 +0100 Fix windows height at first start. + 2046dbe csoler Wed, 15 Mar 2017 20:53:01 +0100 merged latest fixes from official 0.6.2 release branch + e4fad45 csoler Wed, 15 Mar 2017 20:51:40 +0100 fixed layout in ConfCertDialog, removed overnumerous tabs + 2114374 csoler Wed, 15 Mar 2017 19:26:07 +0100 fixed update of Tor proxy address in hidden nodes server page + 44f2971 csoler Tue, 14 Mar 2017 20:04:22 +0100 Merge pull request #682 from csoler/v0.6-EditPosts + a0d1089 csoler Sat, 11 Mar 2017 18:15:35 +0100 added branch parameter to makeSourcePackage script + fdab480 csoler Sat, 11 Mar 2017 18:10:14 +0100 added minimum version number for debian stretch + 733b114 thunde Fri, 10 Mar 2017 15:57:40 +0100 Updated languages from Transifex + ed5779f csoler Fri, 10 Mar 2017 15:39:22 +0100 Merge pull request #743 from mestaritonttu/patch-22 + 69c3df6 csoler Fri, 10 Mar 2017 15:36:50 +0100 fixed bug in total item size estimation in pqiqosstreamer due to item slicing + c377bf3 csoler Fri, 10 Mar 2017 15:12:10 +0100 fixed debug output for groups with no data + fd84639 csoler Fri, 10 Mar 2017 15:05:41 +0100 removed some debug info + c87de3e csoler Fri, 10 Mar 2017 10:48:40 +0100 fixed mistake in pointer handling + cf2edb5 csoler Thu, 9 Mar 2017 22:47:06 +0100 fixed memory leak in deleteGroup and removed unnecessary pointer in the functions called below + a545481 csoler Thu, 9 Mar 2017 22:05:06 +0100 fixed memory leak when receving multi-chunk file lists + 5b819eb csoler Thu, 9 Mar 2017 20:59:01 +0100 added missing virtual destructor causing a memory leak + 1f8fd95 csoler Thu, 9 Mar 2017 20:48:26 +0100 fixed uninitialised memory read in chacha20 test code + d5f2ae8 csoler Thu, 9 Mar 2017 20:39:12 +0100 fixed memory leak recently introduced with openssl-1.1.0 changes + f76454d csoler Thu, 9 Mar 2017 13:05:03 +0100 updated full pipeline packaging script for debian + 999e845 mestar Wed, 8 Mar 2017 13:17:34 +0200 Fix grammar + e6cf628 csoler Tue, 7 Mar 2017 21:58:59 +0100 Merge pull request #740 from RetroPooh/trstats + 283a2ee csoler Tue, 7 Mar 2017 21:54:56 +0100 Merge pull request #717 from PhenomRetroShare/Fix_SettingListWidth + b3b2a4b csoler Tue, 7 Mar 2017 21:54:10 +0100 Merge pull request #726 from mestaritonttu/patch-8 + bbc27b2 csoler Tue, 7 Mar 2017 21:53:21 +0100 Merge pull request #736 from mestaritonttu/patch-18 + 3d0c28d csoler Tue, 7 Mar 2017 21:52:19 +0100 Merge pull request #724 from mestaritonttu/patch-6 + ed22b48 csoler Tue, 7 Mar 2017 21:51:51 +0100 Merge pull request #738 from mestaritonttu/patch-20 + 376be42 csoler Tue, 7 Mar 2017 21:51:13 +0100 Merge pull request #739 from mestaritonttu/patch-21 + b3578f6 csoler Tue, 7 Mar 2017 21:50:20 +0100 Merge pull request #734 from mestaritonttu/patch-16 + d9c084b csoler Tue, 7 Mar 2017 21:49:52 +0100 Merge pull request #730 from mestaritonttu/patch-12 + 5bad326 csoler Tue, 7 Mar 2017 21:49:14 +0100 Merge pull request #725 from mestaritonttu/patch-7 + ec21698 csoler Tue, 7 Mar 2017 21:48:30 +0100 Merge pull request #727 from mestaritonttu/patch-9 + 7d8e06b csoler Tue, 7 Mar 2017 21:47:43 +0100 Merge pull request #732 from mestaritonttu/patch-14 + f3e29bd csoler Tue, 7 Mar 2017 21:47:00 +0100 Merge pull request #731 from mestaritonttu/patch-13 + 17c44db csoler Tue, 7 Mar 2017 21:46:21 +0100 Merge pull request #733 from mestaritonttu/patch-15 + 5f9f061 csoler Tue, 7 Mar 2017 21:45:50 +0100 Merge pull request #735 from mestaritonttu/patch-17 + 8881a44 csoler Tue, 7 Mar 2017 21:45:11 +0100 Merge pull request #737 from mestaritonttu/patch-19 + 160c289 csoler Tue, 7 Mar 2017 21:44:42 +0100 Merge pull request #728 from mestaritonttu/patch-10 + 22308bc csoler Tue, 7 Mar 2017 21:44:14 +0100 Merge pull request #729 from mestaritonttu/patch-11 + fedffd7 csoler Tue, 7 Mar 2017 21:43:36 +0100 Merge pull request #723 from mestaritonttu/patch-5 + d3f0f9d RetroP Tue, 7 Mar 2017 17:50:13 +0300 router stats - mark active tunnels bold + 87f9dba mestar Tue, 7 Mar 2017 14:05:21 +0200 Improvements and typo fixes in strings + 222cf48 mestar Tue, 7 Mar 2017 14:03:05 +0200 Various improvements and fixes to strings + 83283d9 mestar Tue, 7 Mar 2017 13:58:43 +0200 Remove extra your + 7005126 mestar Tue, 7 Mar 2017 13:57:10 +0200 Added whitespace to strings + 6ec5415 mestar Tue, 7 Mar 2017 13:55:02 +0200 ASCII uppercase + 28d2e27 mestar Tue, 7 Mar 2017 13:53:08 +0200 Remove whitespace from string + 931531b mestar Tue, 7 Mar 2017 13:51:28 +0200 Fix typo + 65c7ca7 mestar Tue, 7 Mar 2017 13:49:57 +0200 Clarify sorting by posts + 21b7861 mestar Tue, 7 Mar 2017 13:48:14 +0200 Fix grammar + ba18fcd mestar Tue, 7 Mar 2017 13:45:31 +0200 Fix grammar + a4c2015 mestar Tue, 7 Mar 2017 13:41:45 +0200 Fix typos + 6b4f7e3 mestar Tue, 7 Mar 2017 13:39:39 +0200 Removed extra "to" + b444567 mestar Tue, 7 Mar 2017 13:34:53 +0200 Added period + 400dde9 mestar Tue, 7 Mar 2017 13:09:04 +0200 Added whitespace + c9a4a55 mestar Tue, 7 Mar 2017 13:06:22 +0200 Fix grammar + 86e7243 mestar Tue, 7 Mar 2017 12:56:25 +0200 Fix typos + d7dc9cc mestar Tue, 7 Mar 2017 12:53:18 +0200 Whitespace inside

+ a518225 csoler Tue, 7 Mar 2017 11:27:17 +0100 Merge pull request #716 from felisucoibi/master + 6a6bcf7 thunde Mon, 6 Mar 2017 21:46:42 +0100 Fixed Windows compile of VOIP + dc65d3f Phenom Sun, 5 Mar 2017 13:22:30 +0100 Fix Setting list width. + 0316c8c thunde Mon, 6 Mar 2017 06:34:06 +0100 Added workaround for crash on Windows 7 for Qt versions with gcc 5.3.0. The call to GetProcAddress in openssl (cryptlib.c) finds an function pointer to the not existing function _OPENSSL_isservice in the executable running on Windows 7. + 313e1b3 csoler Sun, 5 Mar 2017 20:08:53 +0100 updated translation files + 88a5c03 csoler Sun, 5 Mar 2017 20:08:36 +0100 removed some debug info + 94c9c94 thunde Sun, 5 Mar 2017 14:30:45 +0100 updated version number to 0.6.2 in rsversion.in + b71f475 csoler Sun, 5 Mar 2017 14:14:46 +0100 qick fix to allow re-advertising for known forums/channels during the same session. Will be reset at restart (probably best) + fbd72dd csoler Sun, 5 Mar 2017 13:57:49 +0100 fixed settings SoundPage + 15bb0ff felisu Sun, 5 Mar 2017 02:45:37 +0100 Update ChatPage.h + 951820f felisu Sun, 5 Mar 2017 02:45:07 +0100 Update ForumPage.h + 63174aa felisu Sun, 5 Mar 2017 02:44:18 +0100 Update PostedPage.h + ca75515 felisu Sun, 5 Mar 2017 02:43:40 +0100 Update MessagePage.h + d3cdd15 csoler Sat, 4 Mar 2017 21:20:34 +0100 fixed uninitialised memory read in GxsReputation + dec5c5c csoler Sat, 4 Mar 2017 21:13:34 +0100 suppressed uninitialised memory leak in LocalDirectoryStorage + b14e4d5 csoler Sat, 4 Mar 2017 21:08:10 +0100 removed memory leak due to missing delete for BWGraph + 0bd0056 csoler Sat, 4 Mar 2017 20:52:41 +0100 fixed memory leak in RsGxsNetService + 7111579 csoler Sat, 4 Mar 2017 20:52:06 +0100 fixed memory leak in config of msgService + 2302c46 csoler Sat, 4 Mar 2017 16:41:10 +0100 updated version number in changelog + 0024ddf csoler Sat, 4 Mar 2017 16:39:39 +0100 fixed utf8 bug in ShareManager + 3600905 csoler Sat, 4 Mar 2017 12:04:41 +0100 updated packaging files + c715b03 csoler Sat, 4 Mar 2017 11:56:51 +0100 updated version number to 0.6.2 + 5e2a253 csoler Sat, 4 Mar 2017 11:44:31 +0100 updated ubuntu changelog + bd8189c csoler Tue, 28 Feb 2017 18:05:44 +0100 added test to prevent msgs with a different name to be used as different version + 763f227 csoler Sun, 26 Feb 2017 20:39:40 +0100 merged upstream/master into v0.6-EditPosts branch + 22f2edb csoler Sat, 11 Feb 2017 10:45:30 +0100 removed debug info and added comment + ea82d26 csoler Thu, 9 Feb 2017 23:35:59 +0100 fixed signature verification bug for versionned messages + 5bf8376 csoler Thu, 9 Feb 2017 21:49:24 +0100 fixed a few more bugs in post version UI + 8deeec6 csoler Thu, 9 Feb 2017 18:45:55 +0100 fixed UI for post versions + b93130a csoler Thu, 9 Feb 2017 16:15:35 +0100 fixed a few bugs in post version collecting + f8056e5 csoler Thu, 9 Feb 2017 14:49:43 +0100 added collection of older posts versions. + 6681985 csoler Wed, 8 Feb 2017 20:40:47 +0100 merged upstream/master + dfcb66d csoler Fri, 3 Feb 2017 13:02:53 +0100 added spinbox to show older versions + 777a73e csoler Fri, 3 Feb 2017 12:48:51 +0100 added GUI for editing forum messages + + -- Retroshare Dev Team Dim, 23 Apr 2017 16:00:00 +0100 + +retroshare06 (0.6.2-1.931442~trusty) trusty; urgency=low + 931442a csoler Sat, 4 Mar 2017 00:07:51 +0100 fixed compilation b4e0a8f csoler Sat, 4 Mar 2017 00:04:52 +0100 removed unused file DirectoriesPage.{cpp,ui,h} e257563 csoler Sat, 4 Mar 2017 00:01:21 +0100 merged Directories settings page into Transfers and renamed it Files From 06e90e65494d096b8fbe760b6cc1e62935b0cb8d Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 17:49:07 +0200 Subject: [PATCH 142/230] added control file for zesty --- build_scripts/Debian+Ubuntu/control.zesty | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 build_scripts/Debian+Ubuntu/control.zesty diff --git a/build_scripts/Debian+Ubuntu/control.zesty b/build_scripts/Debian+Ubuntu/control.zesty new file mode 100644 index 000000000..9b557e3b8 --- /dev/null +++ b/build_scripts/Debian+Ubuntu/control.zesty @@ -0,0 +1,44 @@ +Source: retroshare06 +Section: devel +Priority: standard +Maintainer: Cyril Soler +Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.6, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev, qtmultimedia5-dev, qttools5-dev, libqt5x11extras5-dev, qt5-default +Standards-Version: 3.9.6 +Homepage: http://retroshare.sourceforge.net + +Package: retroshare06-voip-plugin +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare06, libspeex1, libspeexdsp1, libqt5multimedia5 +Description: RetroShare VOIP plugin + This package provides a plugin for RetroShare, a secured Friend-to-Friend communication + plateform. The plugin adds voice-over-IP functionality to the private chat window. Both + friends chatting together need the plugin installed to be able to talk together. + +Package: retroshare06-feedreader-plugin +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, retroshare06 +Description: RetroShare FeedReader plugin + This package provides a plugin for RetroShare, a secured Friend-to-Friend communication + plateform. The plugin adds a RSS feed reader tab to retroshare. + +Package: retroshare06-nogui +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring +Conflicts: retroshare06 +Description: Secure communication with friends + This is the command-line client for RetroShare network. This client + can be contacted and talked-to using SSL. Clients exist for portable + devices running e.g. Android. + +Package: retroshare06 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, gnome-keyring +Conflicts: retroshare06-nogui +Description: Secure communication with friends + RetroShare is a Open Source cross-platform, private and secure decentralised + commmunication platform. It lets you to securely chat and share files with your + friends and family, using a web-of-trust to authenticate peers and OpenSSL to + encrypt all communication. RetroShare provides filesharing, chat, messages, + forums and channels. + + From 190a638cc1076674d53d1d64dc2fef29fd28b125 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 17:53:25 +0200 Subject: [PATCH 143/230] added zesty to ubuntu releases --- build_scripts/Debian+Ubuntu/makeSourcePackage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh index 2e6f4305a..dc5892b07 100755 --- a/build_scripts/Debian+Ubuntu/makeSourcePackage.sh +++ b/build_scripts/Debian+Ubuntu/makeSourcePackage.sh @@ -54,7 +54,7 @@ while [ ${#} -gt 0 ]; do done if test "${dist}" = "" ; then - dist="precise trusty vivid xenial yakkety" + dist="precise trusty vivid xenial yakkety zesty" fi echo Attempting to get revision number... From 9d9ff567bbe4611b36bc0bd46537c9a70b5e2303 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 19:02:12 +0200 Subject: [PATCH 144/230] switched discovery2items to new serialization --- .../src/serialiser/rsdiscovery2items.cc | 179 ++++++++++++------ .../src/serialiser/rsdiscovery2items.h | 84 +++----- 2 files changed, 149 insertions(+), 114 deletions(-) diff --git a/libretroshare/src/serialiser/rsdiscovery2items.cc b/libretroshare/src/serialiser/rsdiscovery2items.cc index 90b4313b3..8cd94f9d9 100644 --- a/libretroshare/src/serialiser/rsdiscovery2items.cc +++ b/libretroshare/src/serialiser/rsdiscovery2items.cc @@ -27,6 +27,8 @@ #include "serialiser/rsdiscovery2items.h" #include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" + #if 0 #include "rsitems/rsserviceids.h" @@ -44,6 +46,121 @@ #include +RsItem *RsDiscSerialiser::create_item(uint16_t service,uint8_t item_subtype) const +{ + if(service != RS_SERVICE_TYPE_DISC) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_DISC_PGP_LIST : return new RsDiscPgpListItem() ; //= 0x01; + case RS_PKT_SUBTYPE_DISC_PGP_CERT : return new RsDiscPgpCertItem() ; //= 0x02; + case RS_PKT_SUBTYPE_DISC_CONTACT_deprecated : return NULL ; //= 0x03; +#if 0 + case RS_PKT_SUBTYPE_DISC_SERVICES : return new RsDiscServicesItem(); //= 0x04; +#endif + case RS_PKT_SUBTYPE_DISC_CONTACT : return new RsDiscContactItem(); //= 0x05; + default: + return NULL ; + } +} + +/*************************************************************************/ + +void RsDiscPgpListItem::clear() +{ + mode = DISC_PGP_LIST_MODE_NONE; + pgpIdSet.TlvClear(); +} + +void RsDiscPgpListItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mode,"mode") ; + RsTypeSerializer::serial_process(j,ctx,pgpIdSet,"pgpIdSet") ; +} + +void RsDiscPgpCertItem::clear() +{ + pgpId.clear(); + pgpCert.clear(); +} + + +void RsDiscPgpCertItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_PGPCERT,pgpCert,"pgpCert") ; +} + +void RsDiscContactItem::clear() +{ + pgpId.clear(); + sslId.clear(); + + location.clear(); + version.clear(); + + netMode = 0; + vs_disc = 0; + vs_dht = 0; + lastContact = 0; + + isHidden = false; + hiddenAddr.clear(); + hiddenPort = 0; + + localAddrV4.TlvClear(); + extAddrV4.TlvClear(); + localAddrV6.TlvClear(); + extAddrV6.TlvClear(); + + + dyndns.clear(); + + localAddrList.TlvClear(); + extAddrList.TlvClear(); +} + +void RsDiscContactItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,pgpId,"pgpId"); + RsTypeSerializer::serial_process (j,ctx,sslId,"sslId"); + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_LOCATION,location,"location"); + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_VERSION,version,"version"); + RsTypeSerializer::serial_process(j,ctx,netMode,"netMode"); + RsTypeSerializer::serial_process(j,ctx,vs_disc,"vs_disc"); + RsTypeSerializer::serial_process(j,ctx,vs_dht,"vs_dht"); + RsTypeSerializer::serial_process(j,ctx,lastContact,"lastContact"); + + // This is a hack. Normally we should have to different item types, in order to avoid this nonesense. + + if( (j == RsItem::DESERIALIZE && GetTlvType( &(((uint8_t *) ctx.mData)[ctx.mOffset]) )==TLV_TYPE_STR_DOMADDR) || isHidden) + { + isHidden = true ; + + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DOMADDR,hiddenAddr,"hiddenAddr"); + RsTypeSerializer::serial_process(j,ctx,hiddenPort,"hiddenPort"); + } + else + { + isHidden = false ; + + RsTypeSerializer::serial_process(j,ctx,localAddrV4,"localAddrV4"); + RsTypeSerializer::serial_process(j,ctx, extAddrV4,"extAddrV4"); + RsTypeSerializer::serial_process(j,ctx,localAddrV6,"localAddrV6"); + RsTypeSerializer::serial_process(j,ctx, extAddrV6,"extAddrV6"); + RsTypeSerializer::serial_process(j,ctx,currentConnectAddress,"currentConnectAddress"); + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DYNDNS,dyndns,"dyndns"); + RsTypeSerializer::serial_process (j,ctx,localAddrList,"localAddrList"); + RsTypeSerializer::serial_process (j,ctx, extAddrList,"extAddrList"); + } +} + +/*************************************************************************/ + + + +#ifdef TO_REMOVE /*************************************************************************/ uint32_t RsDiscSerialiser::size(RsItem *i) @@ -138,20 +255,6 @@ RsItem *RsDiscSerialiser::deserialise(void *data, uint32_t *pktsize) } return NULL; } - -/*************************************************************************/ - -RsDiscPgpListItem::~RsDiscPgpListItem() -{ - return; -} - -void RsDiscPgpListItem::clear() -{ - mode = DISC_PGP_LIST_MODE_NONE; - pgpIdSet.TlvClear(); -} - std::ostream &RsDiscPgpListItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsDiscPgpListItem", indent); @@ -173,7 +276,6 @@ uint32_t RsDiscSerialiser::sizePgpList(RsDiscPgpListItem *item) s += item->pgpIdSet.TlvSize(); return s; } - /* serialise the data to the buffer */ bool RsDiscSerialiser::serialisePgpList(RsDiscPgpListItem *item, void *data, uint32_t *pktsize) { @@ -273,6 +375,7 @@ RsDiscPgpListItem *RsDiscSerialiser::deserialisePgpList(void *data, uint32_t *pk return item; } +#endif /*************************************************************************/ /*************************************************************************/ @@ -410,22 +513,11 @@ RsDiscServicesItem *RsDiscSerialiser::deserialiseServices(void *data, uint32_t * return item; } -#endif - - -/*************************************************************************/ - RsDiscPgpCertItem::~RsDiscPgpCertItem() { return; } -void RsDiscPgpCertItem::clear() -{ - pgpId.clear(); - pgpCert.clear(); -} - std::ostream &RsDiscPgpCertItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsDiscPgpCertItem", indent); @@ -448,7 +540,6 @@ uint32_t RsDiscSerialiser::sizePgpCert(RsDiscPgpCertItem *item) s += GetTlvStringSize(item->pgpCert); return s; } - /* serialise the data to the buffer */ bool RsDiscSerialiser::serialisePgpCert(RsDiscPgpCertItem *item, void *data, uint32_t *pktsize) { @@ -557,35 +648,6 @@ RsDiscContactItem::~RsDiscContactItem() return; } -void RsDiscContactItem::clear() -{ - pgpId.clear(); - sslId.clear(); - - location.clear(); - version.clear(); - - netMode = 0; - vs_disc = 0; - vs_dht = 0; - lastContact = 0; - - isHidden = false; - hiddenAddr.clear(); - hiddenPort = 0; - - localAddrV4.TlvClear(); - extAddrV4.TlvClear(); - localAddrV6.TlvClear(); - extAddrV6.TlvClear(); - - - dyndns.clear(); - - localAddrList.TlvClear(); - extAddrList.TlvClear(); -} - std::ostream &RsDiscContactItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsDiscContact", indent); @@ -657,7 +719,6 @@ std::ostream &RsDiscContactItem::print(std::ostream &out, uint16_t indent) return out; } - uint32_t RsDiscSerialiser::sizeContact(RsDiscContactItem *item) { uint32_t s = 8; /* header */ @@ -893,6 +954,4 @@ RsDiscContactItem *RsDiscSerialiser::deserialiseContact(void *data, uint32_t *pk return item; } - -/*************************************************************************/ - +#endif diff --git a/libretroshare/src/serialiser/rsdiscovery2items.h b/libretroshare/src/serialiser/rsdiscovery2items.h index 26bbf1f22..fc1a944cb 100644 --- a/libretroshare/src/serialiser/rsdiscovery2items.h +++ b/libretroshare/src/serialiser/rsdiscovery2items.h @@ -33,6 +33,8 @@ #include "serialiser/rstlvaddrs.h" #include "rsitems/rsserviceids.h" +#include "serialization/rsserializer.h" + const uint8_t RS_PKT_SUBTYPE_DISC_PGP_LIST = 0x01; const uint8_t RS_PKT_SUBTYPE_DISC_PGP_CERT = 0x02; const uint8_t RS_PKT_SUBTYPE_DISC_CONTACT_deprecated = 0x03; @@ -52,18 +54,18 @@ class RsDiscItem: public RsItem class RsDiscPgpListItem: public RsDiscItem { - public: +public: - RsDiscPgpListItem() - :RsDiscItem(RS_PKT_SUBTYPE_DISC_PGP_LIST) - { + RsDiscPgpListItem() + :RsDiscItem(RS_PKT_SUBTYPE_DISC_PGP_LIST) + { setPriorityLevel(QOS_PRIORITY_RS_DISC_PGP_LIST); } -virtual ~RsDiscPgpListItem(); + virtual ~RsDiscPgpListItem(){} -virtual void clear(); -virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear(); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); uint32_t mode; RsTlvPgpIdSet pgpIdSet; @@ -73,18 +75,18 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); class RsDiscPgpCertItem: public RsDiscItem { - public: +public: - RsDiscPgpCertItem() - :RsDiscItem(RS_PKT_SUBTYPE_DISC_PGP_CERT) - { + RsDiscPgpCertItem() + :RsDiscItem(RS_PKT_SUBTYPE_DISC_PGP_CERT) + { setPriorityLevel(QOS_PRIORITY_RS_DISC_PGP_CERT); } -virtual ~RsDiscPgpCertItem(); + virtual ~RsDiscPgpCertItem(){} -virtual void clear(); -virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear(); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); RsPgpId pgpId; std::string pgpCert; @@ -93,30 +95,30 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); class RsDiscContactItem: public RsDiscItem { - public: +public: RsDiscContactItem() - :RsDiscItem(RS_PKT_SUBTYPE_DISC_CONTACT) - { - setPriorityLevel(QOS_PRIORITY_RS_DISC_CONTACT); + :RsDiscItem(RS_PKT_SUBTYPE_DISC_CONTACT) + { + setPriorityLevel(QOS_PRIORITY_RS_DISC_CONTACT); } -virtual ~RsDiscContactItem(); + virtual ~RsDiscContactItem() {} -virtual void clear(); -virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear(); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); RsPgpId pgpId; RsPeerId sslId; // COMMON - std::string location; + std::string location; std::string version; uint32_t netMode; /* Mandatory */ uint16_t vs_disc; /* Mandatory */ uint16_t vs_dht; /* Mandatory */ - uint32_t lastContact; + uint32_t lastContact; bool isHidden; /* not serialised */ @@ -126,7 +128,7 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); // STANDARD. - RsTlvIpAddress currentConnectAddress ; // used to check! + RsTlvIpAddress currentConnectAddress ; // used to check! RsTlvIpAddress localAddrV4; /* Mandatory */ RsTlvIpAddress extAddrV4; /* Mandatory */ @@ -164,40 +166,14 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); #endif -class RsDiscSerialiser: public RsSerialType +class RsDiscSerialiser: public RsSerializer { public: - RsDiscSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_DISC) - { return; } + RsDiscSerialiser() :RsSerializer(RS_SERVICE_TYPE_DISC) {} -virtual ~RsDiscSerialiser() { return; } - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizePgpList(RsDiscPgpListItem *); -virtual bool serialisePgpList(RsDiscPgpListItem *item, void *data, uint32_t *size); -virtual RsDiscPgpListItem *deserialisePgpList(void *data, uint32_t *size); - -virtual uint32_t sizePgpCert(RsDiscPgpCertItem *); -virtual bool serialisePgpCert(RsDiscPgpCertItem *item, void *data, uint32_t *size); -virtual RsDiscPgpCertItem *deserialisePgpCert(void *data, uint32_t *size); - -virtual uint32_t sizeContact(RsDiscContactItem *); -virtual bool serialiseContact(RsDiscContactItem *item, void *data, uint32_t *size); -virtual RsDiscContactItem *deserialiseContact(void *data, uint32_t *size); - -#if 0 -virtual uint32_t sizeServices(RsDiscServicesItem *); -virtual bool serialiseServices(RsDiscServicesItem *item, void *data, uint32_t *size); -virtual RsDiscServicesItem *deserialiseServices(void *data, uint32_t *size); - -#endif + virtual ~RsDiscSerialiser() {} + RsItem *create_item(uint16_t service,uint8_t item_subtype) const ; }; From 63b4b3a1f785a119b717a5c50280053967407141 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 19:07:26 +0200 Subject: [PATCH 145/230] moved discovery2 items to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- .../src/{serialiser => rsitems}/rsdiscovery2items.cc | 2 +- libretroshare/src/{serialiser => rsitems}/rsdiscovery2items.h | 0 libretroshare/src/services/p3discovery2.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsdiscovery2items.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsdiscovery2items.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 16aba6778..15ab467b3 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -481,7 +481,7 @@ HEADERS += rsitems/itempriorities.h \ serialiser/rstlvbanlist.h \ rsitems/rsbanlistitems.h \ rsitems/rsbwctrlitems.h \ - serialiser/rsdiscovery2items.h \ + rsitems/rsdiscovery2items.h \ serialiser/rsheartbeatitems.h \ serialiser/rsrttitems.h \ serialiser/rsgxsrecognitems.h \ @@ -629,7 +629,7 @@ SOURCES += serialiser/rsbaseserial.cc \ serialiser/rstlvbanlist.cc \ rsitems/rsbanlistitems.cc \ rsitems/rsbwctrlitems.cc \ - serialiser/rsdiscovery2items.cc \ + rsitems/rsdiscovery2items.cc \ serialiser/rsheartbeatitems.cc \ serialiser/rsrttitems.cc \ serialiser/rsgxsrecognitems.cc \ diff --git a/libretroshare/src/serialiser/rsdiscovery2items.cc b/libretroshare/src/rsitems/rsdiscovery2items.cc similarity index 99% rename from libretroshare/src/serialiser/rsdiscovery2items.cc rename to libretroshare/src/rsitems/rsdiscovery2items.cc index 8cd94f9d9..e1e939ffa 100644 --- a/libretroshare/src/serialiser/rsdiscovery2items.cc +++ b/libretroshare/src/rsitems/rsdiscovery2items.cc @@ -24,7 +24,7 @@ * */ -#include "serialiser/rsdiscovery2items.h" +#include "rsitems/rsdiscovery2items.h" #include "serialiser/rsbaseserial.h" #include "serialization/rstypeserializer.h" diff --git a/libretroshare/src/serialiser/rsdiscovery2items.h b/libretroshare/src/rsitems/rsdiscovery2items.h similarity index 100% rename from libretroshare/src/serialiser/rsdiscovery2items.h rename to libretroshare/src/rsitems/rsdiscovery2items.h diff --git a/libretroshare/src/services/p3discovery2.h b/libretroshare/src/services/p3discovery2.h index 2d063ee77..79ac13135 100644 --- a/libretroshare/src/services/p3discovery2.h +++ b/libretroshare/src/services/p3discovery2.h @@ -35,7 +35,7 @@ #include "pqi/p3netmgr.h" #include "pqi/pqiservicemonitor.h" -#include "serialiser/rsdiscovery2items.h" +#include "rsitems/rsdiscovery2items.h" #include "services/p3service.h" #include "pqi/authgpg.h" From 31c07f4dfd6db51fec429b332be5e87fbb11f219 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 23 Apr 2017 22:40:26 +0200 Subject: [PATCH 146/230] converted RsMsgItems to new serialization. Added format and flag members to RsSerialiser and used the later to handle signature and config serialization techniques --- libretroshare/src/chat/distributedchat.cc | 10 +- libretroshare/src/chat/rschatitems.cc | 59 +------ libretroshare/src/chat/rschatitems.h | 11 +- libretroshare/src/retroshare/rsflags.h | 9 +- libretroshare/src/serialiser/rsmsgitems.cc | 162 ++++++++++++++---- libretroshare/src/serialiser/rsmsgitems.h | 82 ++------- .../src/serialization/rsserializer.cc | 12 +- .../src/serialization/rsserializer.h | 21 ++- .../src/serialization/rstypeserializer.h | 11 +- libretroshare/src/services/p3msgservice.cc | 8 +- 10 files changed, 202 insertions(+), 183 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index c83ddde8e..f79b71a18 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); - uint32_t size = obj->serial_size_for_signature() ; + uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)obj) ; RsTemporaryMemory memory(size) ; #ifdef DEBUG_CHAT_LOBBIES @@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const std::cerr << " signature id: " << obj->signature.keyId << std::endl; #endif - if(!obj->serialize_for_signature(memory,size)) + if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)obj,memory,&size)) { std::cerr << " (EE) Cannot serialise message item. " << std::endl; return false ; @@ -239,7 +239,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const uint32_t error_status ; RsIdentityUsage use_info(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id) ; - if(!mGixs->validateData(memory,obj->serial_size_for_signature(),obj->signature,false,use_info,error_status)) + if(!mGixs->validateData(memory,size,obj->signature,false,use_info,error_status)) { bool res = false ; @@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId& // now sign the object, if the lobby expects it - uint32_t size = item.serial_size_for_signature() ; + uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)&item) ; RsTemporaryMemory memory(size) ; - if(!item.serialize_for_signature(memory,size)) + if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)&item,memory,&size)) { std::cerr << "(EE) Cannot sign message item. " << std::endl; return false ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 23f4aab25..75d90e0a4 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -80,13 +80,13 @@ RsChatAvatarItem::~RsChatAvatarItem() } } -void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx, bool include_signature) +void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,nick,"nick") ; - if(include_signature) + if(!(ctx.mFlags & RsSerializer::SERIALIZATION_FLAG_SIGNATURE)) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } @@ -94,13 +94,7 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& { RsChatMsgItem::serial_process(j,ctx) ; RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; -} -void RsChatLobbyMsgItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) -{ - RsChatMsgItem::serial_process(j,ctx) ; - RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; - RsChatLobbyBouncingObject::serial_process(j,ctx,false) ; + RsChatLobbyBouncingObject::serial_process(j,ctx) ; } void RsChatLobbyListRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) @@ -129,15 +123,7 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ; RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; - RsChatLobbyBouncingObject::serial_process(j,ctx,true) ; -} -void RsChatLobbyEventItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) -{ - RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; - RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ; - RsTypeSerializer::serial_process(j,ctx,sendTime ,"sendTime") ; - - RsChatLobbyBouncingObject::serial_process(j,ctx,false) ; + RsChatLobbyBouncingObject::serial_process(j,ctx) ; } void RsChatLobbyUnsubscribeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) { @@ -209,41 +195,4 @@ void RsPrivateChatMsgConfigItem::get(RsChatMsgItem *ci) ci->recvTime = recvTime; } -uint32_t RsChatLobbyBouncingObject::serial_size_for_signature() const -{ - SerializeContext ctx(NULL,0); - - ctx.mOffset = 8; - - const_cast(this)->serial_process_for_signature(RsItem::SIZE_ESTIMATE,ctx) ; - - return ctx.mOffset ; -} - -bool RsChatLobbyBouncingObject::serialize_for_signature(uint8_t *data,uint32_t size) const -{ - SerializeContext ctx(data,0); - - uint32_t tlvsize = serial_size_for_signature() ; - - if(tlvsize > size) - throw std::runtime_error("Cannot serialise: not enough room.") ; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; - return false ; - } - ctx.mOffset = 8; - ctx.mSize = tlvsize; - - const_cast(this)->serial_process_for_signature(RsItem::SERIALIZE,ctx) ; - - if(ctx.mSize != ctx.mOffset) - { - std::cerr << "RsChatSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl; - return false ; - } - return true ; -} diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 456ffe5b6..b357f0873 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -137,16 +137,12 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const = 0 ; - uint32_t serial_size_for_signature() const ; - bool serialize_for_signature(uint8_t *data,uint32_t size) const ; - protected: // The functions below handle the serialisation of data that is specific to the bouncing object level. // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - virtual void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature); - virtual void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx)=0; + virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx); virtual uint32_t PacketId() const= 0; }; @@ -160,7 +156,6 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyMsgItem(*this) ; } void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ; - void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand ChatLobbyMsgId parent_msg_id ; // Used for threaded chat. @@ -177,7 +172,6 @@ public: virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; } // void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); - void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand // members. // @@ -330,7 +324,8 @@ class RsChatAvatarItem: public RsChatItem class RsChatSerialiser: public RsSerializer { public: - RsChatSerialiser() :RsSerializer(RS_SERVICE_TYPE_CHAT) {} + RsChatSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) + :RsSerializer(RS_SERVICE_TYPE_CHAT,SerializeContext::FORMAT_BINARY,flags) {} virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; diff --git a/libretroshare/src/retroshare/rsflags.h b/libretroshare/src/retroshare/rsflags.h index 500ed42d4..548b1641b 100644 --- a/libretroshare/src/retroshare/rsflags.h +++ b/libretroshare/src/retroshare/rsflags.h @@ -59,11 +59,12 @@ template class t_RsFlags32 uint32_t _bits ; }; -#define FLAGS_TAG_TRANSFER_REQS 0x4228af +#define FLAGS_TAG_TRANSFER_REQS 0x4228af #define FLAGS_TAG_FILE_STORAGE 0x184738 -#define FLAGS_TAG_FILE_SEARCH 0xf29ba5 +#define FLAGS_TAG_FILE_SEARCH 0xf29ba5 #define FLAGS_TAG_SERVICE_PERM 0x380912 #define FLAGS_TAG_SERVICE_CHAT 0x839042 +#define FLAGS_TAG_SERIALIZER 0xa0338d // Flags for requesting transfers, ask for turtle, cache, speed, etc. // @@ -85,3 +86,7 @@ typedef t_RsFlags32 ServicePermissionFlags ; // typedef t_RsFlags32 ChatLobbyFlags ; +// Flags for serializer +// +typedef t_RsFlags32 SerializationFlags ; + diff --git a/libretroshare/src/serialiser/rsmsgitems.cc b/libretroshare/src/serialiser/rsmsgitems.cc index 69c1028ee..9fc3d7e40 100644 --- a/libretroshare/src/serialiser/rsmsgitems.cc +++ b/libretroshare/src/serialiser/rsmsgitems.cc @@ -30,12 +30,35 @@ #include "serialiser/rsmsgitems.h" #include "serialiser/rstlvbase.h" +#include "serialization/rstypeserializer.h" + /*** #define RSSERIAL_DEBUG 1 ***/ #include + +RsItem *RsMsgSerialiser::create_item(uint16_t service,uint8_t type) const +{ + if(service != RS_SERVICE_TYPE_MSG) + return NULL ; + + switch(type) + { + case RS_PKT_SUBTYPE_DEFAULT : return new RsMsgItem() ; //= 0x01; + case RS_PKT_SUBTYPE_MSG_TAG_TYPE : return new RsMsgTagType() ; //= 0x03; + case RS_PKT_SUBTYPE_MSG_TAGS : return new RsMsgTags() ; //= 0x04; + case RS_PKT_SUBTYPE_MSG_SRC_TAG : return new RsMsgSrcId(); //= 0x05; + case RS_PKT_SUBTYPE_MSG_PARENT_TAG : return new RsMsgParentId() ; //= 0x06; + case RS_PKT_SUBTYPE_MSG_INVITE : return new RsPublicMsgInviteConfigItem(); //= 0x07; + case RS_PKT_SUBTYPE_MSG_GROUTER_MAP : return new RsMsgGRouterMap(); //= 0x08; + case RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP : return new RsMsgDistantMessagesHashMap();//= 0x09; + default: + return NULL ; + } +} + void RsMsgItem::clear() { msgId = 0; @@ -56,6 +79,107 @@ void RsMsgItem::clear() attachment.TlvClear(); } +void RsPublicMsgInviteConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_SHA1,hash,"hash") ; + RsTypeSerializer::serial_process(j,ctx,(uint32_t&)time_stamp,"time_stamp") ; +} +void RsMsgTagType::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,text,"text") ; + RsTypeSerializer::serial_process(j,ctx,rgb_color,"rgb_color") ; + RsTypeSerializer::serial_process(j,ctx,tagId,"tagId") ; +} + +void RsMsgTags::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; + +#warning this is not the correct way to serialise here. We should directly call serial_process >() but for backward compatibility, we cannot + + if(j == RsItem::DESERIALIZE) + while(ctx.mOffset < ctx.mSize) + { + uint32_t n ; + RsTypeSerializer::serial_process(j,ctx,n,"tagIds element") ; + tagIds.push_back(n) ; + } + else + for(std::list::iterator it(tagIds.begin());it!=tagIds.end();++it) + RsTypeSerializer::serial_process(j,ctx,*it,"tagIds element") ; +} + +void RsMsgSrcId::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; + RsTypeSerializer::serial_process (j,ctx,srcId,"srcId") ; +} + +void RsMsgGRouterMap::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,ongoing_msgs,"ongoing_msgs") ; +} + +void RsMsgGRouterMap::clear() +{ + ongoing_msgs.clear() ; + + return; +} + +void RsMsgDistantMessagesHashMap::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,hash_map,"hash_map") ; +} + +void RsMsgParentId::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; + RsTypeSerializer::serial_process(j,ctx,msgParentId,"msgParentId") ; +} + +void RsMsgItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,msgFlags,"msgFlags"); + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime"); + RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime"); + + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_SUBJECT,subject,"subject"); + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,message,"message"); + + RsTypeSerializer::serial_process(j,ctx,rspeerid_msgto,"rspeerid_msgto"); + RsTypeSerializer::serial_process(j,ctx,rspeerid_msgcc,"rspeerid_msgcc"); + RsTypeSerializer::serial_process(j,ctx,rspeerid_msgbcc,"rspeerid_msgbcc"); + + RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgto,"rsgxsid_msgto"); + RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgcc,"rsgxsid_msgcc"); + RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgbcc,"rsgxsid_msgbcc"); + + RsTypeSerializer::serial_process(j,ctx,attachment,"attachment"); + + if(ctx.mFlags & RsSerializer::SERIALIZATION_FLAG_CONFIG) + RsTypeSerializer::serial_process(j,ctx,msgId,"msgId"); +} + +void RsMsgTagType::clear() +{ + text.clear(); + tagId = 0; + rgb_color = 0; +} + +void RsPublicMsgInviteConfigItem::clear() +{ + hash.clear() ; + time_stamp = 0 ; +} +void RsMsgTags::clear() +{ + msgId = 0; + tagIds.clear(); +} + +#ifdef TO_REMOVE std::ostream &RsMsgItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsMsgItem", indent); @@ -100,19 +224,6 @@ std::ostream &RsMsgItem::print(std::ostream &out, uint16_t indent) printRsItemEnd(out, "RsMsgItem", indent); return out; } - -void RsMsgTagType::clear() -{ - text.clear(); - tagId = 0; - rgb_color = 0; -} - -void RsPublicMsgInviteConfigItem::clear() -{ - hash.clear() ; - time_stamp = 0 ; -} std::ostream& RsPublicMsgInviteConfigItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsPublicMsgInviteConfigItem", indent); @@ -128,12 +239,6 @@ std::ostream& RsPublicMsgInviteConfigItem::print(std::ostream &out, uint16_t ind return out; } -void RsMsgTags::clear() -{ - msgId = 0; - tagIds.clear(); -} - std::ostream& RsMsgTagType::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsMsgTagType", indent); @@ -346,7 +451,6 @@ uint32_t RsMsgTagType::serial_size(bool) return s; } - bool RsPublicMsgInviteConfigItem::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size(config) ; @@ -382,8 +486,6 @@ bool RsPublicMsgInviteConfigItem::serialise(void *data, uint32_t& pktsize,bool c return ok; } - - bool RsMsgTagType::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size( config) ; @@ -536,7 +638,6 @@ uint32_t RsMsgTags::serial_size(bool) return s; } - bool RsMsgTags::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size( config) ; @@ -672,8 +773,6 @@ uint32_t RsMsgSrcId::serial_size(bool) return s; } - - bool RsMsgSrcId::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size(config) ; @@ -777,14 +876,6 @@ std::ostream& RsMsgGRouterMap::print(std::ostream& out, uint16_t indent) return out; } - -void RsMsgGRouterMap::clear() -{ - ongoing_msgs.clear() ; - - return; -} - uint32_t RsMsgGRouterMap::serial_size(bool) { uint32_t s = 8; /* header */ @@ -933,7 +1024,6 @@ uint32_t RsMsgDistantMessagesHashMap::serial_size(bool) return s; } - bool RsMsgDistantMessagesHashMap::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size(config) ; @@ -1073,7 +1163,6 @@ uint32_t RsMsgParentId::serial_size(bool) return s; } - bool RsMsgParentId::serialise(void *data, uint32_t& pktsize,bool config) { uint32_t tlvsize = serial_size( config) ; @@ -1198,3 +1287,6 @@ RsItem* RsMsgSerialiser::deserialise(void *data, uint32_t *pktsize) /*************************************************************************/ +#endif + + diff --git a/libretroshare/src/serialiser/rsmsgitems.h b/libretroshare/src/serialiser/rsmsgitems.h index 0d44aa501..5eb94e5b4 100644 --- a/libretroshare/src/serialiser/rsmsgitems.h +++ b/libretroshare/src/serialiser/rsmsgitems.h @@ -90,10 +90,6 @@ class RsMessageItem: public RsItem virtual ~RsMessageItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0 ; - - virtual bool serialise(void *data,uint32_t& size,bool config) = 0 ; - virtual uint32_t serial_size(bool config) = 0 ; }; @@ -105,10 +101,7 @@ class RsMsgItem: public RsMessageItem virtual ~RsMsgItem() {} virtual void clear(); - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; - - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); // ----------- Specific fields ------------- // @@ -137,10 +130,7 @@ class RsMsgTagType : public RsMessageItem public: RsMsgTagType() :RsMessageItem(RS_PKT_SUBTYPE_MSG_TAG_TYPE) {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgTagType() {} virtual void clear(); @@ -158,10 +148,7 @@ public: RsMsgTags() :RsMessageItem(RS_PKT_SUBTYPE_MSG_TAGS) {} - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; - - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgTags() {} virtual void clear(); @@ -177,13 +164,10 @@ class RsMsgSrcId : public RsMessageItem public: RsMsgSrcId() : RsMessageItem(RS_PKT_SUBTYPE_MSG_SRC_TAG) {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgSrcId() {} - virtual void clear(); + virtual void clear(){} // ----------- Specific fields ------------- // // @@ -196,10 +180,7 @@ class RsPublicMsgInviteConfigItem : public RsMessageItem public: RsPublicMsgInviteConfigItem() : RsMessageItem(RS_PKT_SUBTYPE_MSG_INVITE) {} - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; - - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsPublicMsgInviteConfigItem() {} virtual void clear(); @@ -215,10 +196,7 @@ class RsMsgGRouterMap : public RsMessageItem public: RsMsgGRouterMap() : RsMessageItem(RS_PKT_SUBTYPE_MSG_GROUTER_MAP) {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgGRouterMap() {} virtual void clear(); @@ -232,13 +210,10 @@ class RsMsgDistantMessagesHashMap : public RsMessageItem public: RsMsgDistantMessagesHashMap() : RsMessageItem(RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP) {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgDistantMessagesHashMap() {} - virtual void clear(); + virtual void clear() { hash_map.clear() ;} // ----------- Specific fields ------------- // // @@ -249,13 +224,10 @@ class RsMsgParentId : public RsMessageItem public: RsMsgParentId() : RsMessageItem(RS_PKT_SUBTYPE_MSG_PARENT_TAG) {} - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size,bool config) ; - virtual uint32_t serial_size(bool config) ; + virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); virtual ~RsMsgParentId() {} - virtual void clear(); + virtual void clear(){} // ----------- Specific fields ------------- // // @@ -263,39 +235,15 @@ class RsMsgParentId : public RsMessageItem uint32_t msgParentId; }; -class RsMsgSerialiser: public RsSerialType +class RsMsgSerialiser: public RsSerializer { public: - RsMsgSerialiser(bool bConfiguration = false) - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_MSG), m_bConfiguration (bConfiguration) {} - - RsMsgSerialiser(uint16_t type) - :RsSerialType(RS_PKT_VERSION_SERVICE, type), m_bConfiguration (false) {} + RsMsgSerialiser(SerializationFlags flags) + :RsSerializer(RS_SERVICE_TYPE_MSG,SerializeContext::FORMAT_BINARY,flags){} virtual ~RsMsgSerialiser() {} - virtual uint32_t size(RsItem *item) - { - return dynamic_cast(item)->serial_size(m_bConfiguration) ; - } - virtual bool serialise (RsItem *item, void *data, uint32_t *size) - { - return dynamic_cast(item)->serialise(data,*size,m_bConfiguration) ; - } - virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - - virtual RsMsgItem *deserialiseMsgItem(void *data, uint32_t *size); - virtual RsMsgTagType *deserialiseTagItem(void *data, uint32_t *size); - virtual RsMsgTags *deserialiseMsgTagItem(void *data, uint32_t *size); - virtual RsMsgSrcId *deserialiseMsgSrcIdItem(void *data, uint32_t *size); - virtual RsMsgParentId *deserialiseMsgParentIdItem(void *data, uint32_t *size); - virtual RsPublicMsgInviteConfigItem *deserialisePublicMsgInviteConfigItem(void *data, uint32_t *size); - virtual RsMsgGRouterMap *deserialiseMsgGRouterMap(void *data, uint32_t *size); - virtual RsMsgDistantMessagesHashMap *deserialiseMsgDistantMessageHashMap(void *data, uint32_t *size); - - bool m_bConfiguration; // is set to true for saving configuration (enables serialising msgId) + virtual RsItem *create_item(uint16_t service,uint8_t type) const ; }; /**************************************************************************/ diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 13b4435fd..85a7a9430 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -2,6 +2,10 @@ #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" +const SerializationFlags RsSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); +const SerializationFlags RsSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); +const SerializationFlags RsSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); + RsItem *RsSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; @@ -15,7 +19,7 @@ RsItem *RsSerializer::deserialise(void *data, uint32_t *size) return NULL ; } - SerializeContext ctx(const_cast(static_cast(data)),*size); + SerializeContext ctx(const_cast(static_cast(data)),*size,mFormat,mFlags); ctx.mOffset = 8 ; item->serial_process(RsItem::DESERIALIZE, ctx) ; @@ -35,7 +39,7 @@ RsItem *RsSerializer::deserialise(void *data, uint32_t *size) bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) { - SerializeContext ctx(static_cast(data),0); + SerializeContext ctx(static_cast(data),0,mFormat,mFlags); uint32_t tlvsize = this->size(item) ; @@ -62,7 +66,7 @@ bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) uint32_t RsSerializer::size(RsItem *item) { - SerializeContext ctx(NULL,0); + SerializeContext ctx(NULL,0,mFormat,mFlags); ctx.mOffset = 8 ; // header size item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; @@ -72,7 +76,7 @@ uint32_t RsSerializer::size(RsItem *item) void RsSerializer::print(RsItem *item) { - SerializeContext ctx(NULL,0); + SerializeContext ctx(NULL,0,mFormat,mFlags); std::cerr << "***** RsItem class: \"" << typeid(*item).name() << "\" *****" << std::endl; item->serial_process(RsItem::PRINT, ctx) ; diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index d8ff50b14..db765e36b 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -6,13 +6,28 @@ #include #include "serialiser/rsserial.h" +#include "serialization/rstypeserializer.h" #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " class RsSerializer: public RsSerialType { public: - RsSerializer(uint16_t service_id) : RsSerialType(RS_PKT_VERSION_SERVICE,service_id) {} + // These are convenience flags to be used by the items when processing the data. The names of the flags + // are not very important. What matters is that the serial_process() method of each item correctly + // deals with the data when it sees the flags, if the serialiser sets them. By default the flags are not + // set and shouldn't be handled. + // When deriving a new serializer, the user can set his own flags, using compatible values + + static const SerializationFlags SERIALIZATION_FLAG_NONE ; // 0x0000 + static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 + static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 + + RsSerializer(uint16_t service_id, + SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, + SerializationFlags flags = SERIALIZATION_FLAG_NONE) + + : RsSerialType(RS_PKT_VERSION_SERVICE,service_id),mFormat(format),mFlags(flags) {} /*! create_item * should be overloaded to create the correct type of item depending on the data @@ -28,6 +43,10 @@ class RsSerializer: public RsSerialType bool serialise(RsItem *item,void *data,uint32_t *size) ; uint32_t size(RsItem *item) ; void print(RsItem *item) ; + +private: + SerializeContext::SerializationFormat mFormat ; + SerializationFlags mFlags ; }; diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 1899a26fe..0693331b1 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -11,13 +11,20 @@ class SerializeContext { public: - SerializeContext(uint8_t *data,uint32_t size) - : mData(data),mSize(size),mOffset(0),mOk(true) {} + enum SerializationFormat { + FORMAT_BINARY = 0x01 , + FORMAT_JSON = 0x02 + }; + + SerializeContext(uint8_t *data,uint32_t size,SerializationFormat format,SerializationFlags flags) + : mData(data),mSize(size),mOffset(0),mOk(true),mFormat(format),mFlags(flags) {} unsigned char *mData ; uint32_t mSize ; uint32_t mOffset ; bool mOk ; + SerializationFormat mFormat ; + SerializationFlags mFlags ; }; diff --git a/libretroshare/src/services/p3msgservice.cc b/libretroshare/src/services/p3msgservice.cc index 8781e245b..44c244023 100644 --- a/libretroshare/src/services/p3msgservice.cc +++ b/libretroshare/src/services/p3msgservice.cc @@ -86,7 +86,7 @@ static const uint32_t RS_MSG_DISTANT_MESSAGE_HASH_KEEP_TIME = 2*30*86400 ; // ke p3MsgService::p3MsgService(p3ServiceControl *sc, p3IdService *id_serv) :p3Service(), p3Config(), mIdService(id_serv), mServiceCtrl(sc), mMsgMtx("p3MsgService"), mMsgUniqueId(0) { - _serialiser = new RsMsgSerialiser(); // this serialiser is used for services. It's not the same than the one returned by setupSerialiser(). We need both!! + _serialiser = new RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE); // this serialiser is used for services. It's not the same than the one returned by setupSerialiser(). We need both!! addSerialType(_serialiser); mMsgUniqueId = 1 ; // MsgIds are not transmitted, but only used locally as a storage index. As such, thay do not need to be different @@ -519,7 +519,7 @@ RsSerialiser* p3MsgService::setupSerialiser() // this serialiser is used for con { RsSerialiser *rss = new RsSerialiser ; - rss->addSerialType(new RsMsgSerialiser(true)); + rss->addSerialType(new RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_CONFIG)); rss->addSerialType(new RsGeneralConfigSerialiser()); return rss; @@ -2024,10 +2024,10 @@ void p3MsgService::sendDistantMsgItem(RsMsgItem *msgitem) // The item is serialized and turned into a generic turtle item. Use use the explicit serialiser to make sure that the msgId is not included - uint32_t msg_serialized_rssize = msgitem->serial_size(false) ; + uint32_t msg_serialized_rssize = RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE).size(msgitem) ; RsTemporaryMemory msg_serialized_data(msg_serialized_rssize) ; - if(!msgitem->serialise(msg_serialized_data,msg_serialized_rssize,false)) + if(!RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE).serialise(msgitem,msg_serialized_data,&msg_serialized_rssize)) { std::cerr << "(EE) p3MsgService::sendTurtleData(): Serialization error." << std::endl; return ; From 6313d89718cffa5133b32034b170078992af350b Mon Sep 17 00:00:00 2001 From: defnax Date: Mon, 24 Apr 2017 01:23:05 +0200 Subject: [PATCH 147/230] Improved look n feel of Profile Generation Window. --- retroshare-gui/src/gui/GenCertDialog.cpp | 40 +- retroshare-gui/src/gui/GenCertDialog.ui | 1160 ++++++-------- retroshare-gui/src/gui/images.qrc | 1331 +++++++++-------- retroshare-gui/src/gui/images/cancel.png | Bin 792 -> 640 bytes .../src/gui/images/logo/logo_spash2.png | Bin 0 -> 102946 bytes 5 files changed, 1177 insertions(+), 1354 deletions(-) create mode 100644 retroshare-gui/src/gui/images/logo/logo_spash2.png diff --git a/retroshare-gui/src/gui/GenCertDialog.cpp b/retroshare-gui/src/gui/GenCertDialog.cpp index ff8fbf909..c65c08b89 100644 --- a/retroshare-gui/src/gui/GenCertDialog.cpp +++ b/retroshare-gui/src/gui/GenCertDialog.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -45,7 +46,7 @@ #include #define IMAGE_GOOD ":/images/accepted16.png" -#define IMAGE_BAD ":/images/deletemail24.png" +#define IMAGE_BAD ":/images/cancel.png" class EntropyCollectorWidget: public QTextBrowser { @@ -133,8 +134,8 @@ GenCertDialog::GenCertDialog(bool onlyGenerateIdentity, QWidget *parent) //ui.headerFrame->setHeaderImage(QPixmap(":/icons/svg/profile.svg")); //ui.headerFrame->setHeaderText(tr("Create a new profile")); - connect(ui.reuse_existing_node_CB, SIGNAL(clicked()), this, SLOT(switchReuseExistingNode())); - connect(ui.adv_checkbox, SIGNAL(clicked()), this, SLOT(setupState())); + connect(ui.reuse_existing_node_CB, SIGNAL(triggered()), this, SLOT(switchReuseExistingNode())); + connect(ui.adv_checkbox, SIGNAL(triggered()), this, SLOT(setupState())); connect(ui.nodeType_CB, SIGNAL(currentIndexChanged(int)), this, SLOT(setupState())); connect(ui.genButton, SIGNAL(clicked()), this, SLOT(genPerson())); @@ -172,6 +173,11 @@ GenCertDialog::GenCertDialog(bool onlyGenerateIdentity, QWidget *parent) /* get all available pgp private certificates.... * mark last one as default. */ + + QMenu *menu = new QMenu(tr("Advanced options")); + menu->addAction(ui.adv_checkbox); + menu->addAction(ui.reuse_existing_node_CB); + ui.optionsButton->setMenu(menu); mAllFieldsOk = false ; mEntropyOk = false ; @@ -246,22 +252,22 @@ void GenCertDialog::setupState() genNewGPGKey = generate_new; - ui.no_node_label->setVisible(false); + //ui.no_node_label->setVisible(false); setWindowTitle(generate_new?tr("Create new profile and new Retroshare node"):tr("Create new Retroshare node")); //ui.headerFrame->setHeaderText(generate_new?tr("Create a new profile and node"):tr("Create a new node")); ui.label_nodeType->setVisible(adv_state) ; ui.nodeType_CB->setVisible(adv_state) ; - ui.reuse_existing_node_CB->setVisible(adv_state) ; + ui.reuse_existing_node_CB->setEnabled(adv_state) ; ui.importIdentity_PB->setVisible(adv_state && !generate_new) ; ui.exportIdentity_PB->setVisible(adv_state && !generate_new) ; ui.genPGPuser->setVisible(adv_state && haveGPGKeys && !generate_new) ; - ui.genprofileinfo_label->setVisible(false); - ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to create a profile and associate a node with it. To do so please fill out this form.\nAlternatively you can import a (previously exported) profile. Just uncheck \"Create a new profile\"")); - ui.no_gpg_key_label->setVisible(false); + //ui.genprofileinfo_label->setVisible(false); + //ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to create a profile and associate a node with it. To do so please fill out this form.\nAlternatively you can import a (previously exported) profile. Just uncheck \"Create a new profile\"")); + //no_gpg_key_label->setVisible(false); ui.nickname_label->setVisible(adv_state) ; ui.nickname_input->setVisible(adv_state) ; @@ -269,7 +275,7 @@ void GenCertDialog::setupState() ui.name_label->setVisible(true); ui.name_input->setVisible(generate_new); - ui.header_label->setVisible(false) ; + //ui.header_label->setVisible(false) ; ui.nickname_label->setVisible(adv_state && !mOnlyGenerateIdentity); ui.nickname_input->setVisible(adv_state && !mOnlyGenerateIdentity); @@ -300,14 +306,16 @@ void GenCertDialog::setupState() if(mEntropyOk && mAllFieldsOk) { ui.genButton->setEnabled(true) ; - ui.genButton->setIcon(QIcon(IMAGE_GOOD)) ; + //ui.genButton->setIcon(QIcon(IMAGE_GOOD)) ; ui.genButton->setToolTip(tr("Click to create your node and/or profile")) ; + ui.generate_label->setPixmap(QPixmap(IMAGE_GOOD)) ; } else { ui.genButton->setEnabled(false) ; - ui.genButton->setIcon(QIcon(IMAGE_BAD)) ; + //ui.genButton->setIcon(QIcon(IMAGE_BAD)) ; ui.genButton->setToolTip(tr("Disabled until all fields correctly set and enough randomness collected.")) ; + ui.generate_label->setPixmap(QPixmap(IMAGE_BAD)) ; } } @@ -495,9 +503,9 @@ void GenCertDialog::genPerson() } //generate a new gpg key std::string err_string; - ui.no_gpg_key_label->setText(tr("Generating new node key, please be patient: this process needs generating large prime numbers, and can take some minutes on slow computers. \n\nFill in your password when asked, to sign your new key.")); - ui.no_gpg_key_label->show(); - ui.reuse_existing_node_CB->hide(); + //_key_label->setText(tr("Generating new node key, please be patient: this process needs generating large prime numbers, and can take some minutes on slow computers. \n\nFill in your password when asked, to sign your new key.")); + //ui.no_gpg_key_label->show(); + //ui.reuse_existing_node_CB->hide(); ui.name_label->hide(); ui.name_input->hide(); ui.nickname_label->hide(); @@ -514,9 +522,9 @@ void GenCertDialog::genPerson() ui.node_input->hide(); ui.genButton->hide(); ui.importIdentity_PB->hide(); - ui.genprofileinfo_label->hide(); + //ui.genprofileinfo_label->hide(); ui.nodeType_CB->hide(); - ui.adv_checkbox->hide(); + //ui.adv_checkbox->hide(); ui.keylength_label->hide(); ui.keylength_comboBox->hide(); diff --git a/retroshare-gui/src/gui/GenCertDialog.ui b/retroshare-gui/src/gui/GenCertDialog.ui index 8325ffa3a..468c17693 100644 --- a/retroshare-gui/src/gui/GenCertDialog.ui +++ b/retroshare-gui/src/gui/GenCertDialog.ui @@ -6,8 +6,8 @@ 0 0 - 724 - 667 + 533 + 544 @@ -54,7 +54,10 @@ - :/images/logo/logo_splash.png + :/images/logo/logo_spash2.png + + + false Qt::AlignCenter @@ -77,22 +80,13 @@ - - - - 16777215 - 32 - - - - <html><head/><body><p>Use this if you need to import an existing profile, if you want to generate a new node with an already existing key, or if you want to create a TOR/I2P hidden node.</p></body></html> - + - Advanced options + Options - :/icons/settings/general.svg:/icons/settings/general.svg + :/icons/svg/options.svg:/icons/svg/options.svg @@ -100,667 +94,481 @@ 24 - + false + + true + - - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 178 - - - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 178 - - - - - - - - - 255 - 255 - 178 - - - - - - - 255 - 255 - 178 - - - - - - - - true + + + - QFrame::Box + QFrame::StyledPanel - - You can create a new profile with this form. -Alternatively you can use an existing profile. Just uncheck "Create a new profile" - - - true + + QFrame::Raised + + + + + + + + + + + + + + PGP key length + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + <html><head/><body><p>Put a strong password here. This password protects your private node key!</p></body></html> + + + + + + 1024 + + + QLineEdit::Password + + + + + + + This password is for PGP + + + Password + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + This password is for PGP + + + Password (check) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Please move your mouse around in order to collect as much randomness as possible. A minimum of 20% is needed to create your node keys.</p></body></html> + + + 24 + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + Standard node + + + + + TOR/I2P Hidden node + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + <html><head/><body><p>Your node name designates the Retroshare instance that</p><p>will run on this computer.</p></body></html> + + + 64 + + + + + + + Node name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 32 + + + + <html><head/><body><p>The profile name identifies you over the network.</p><p>It is used by your friends to accept connections from you.</p><p>You can create multiple Retroshare nodes with the</p><p>same profile on different computers.</p><p><br/></p></body></html> + + + + + + 64 + + + + + + + + 0 + 0 + + + + Your profile is associated with a PGP key pair. RetroShare currently ignores DSA keys. + + + + + + + + + + + 0 + 0 + + + + Export this profle + + + + + + + + 0 + 0 + + + + Import profile + + + + + + + + + + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Put a strong password here. This password protects your private node key!</p></body></html> + + + + + + 1024 + + + QLineEdit::Password + + + + + + + Profile name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Randomness + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Node type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + hidden address + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 6 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 32 + + + + <html><head/><body><p>This should be a Tor Onion address of the form: xa76giaf6ifda7ri63i263.onion <br/>or an I2P address in the form: [52 characters].b32.i2p </p><p>In order to get one, you must configure either Tor or I2P to create a new hidden service / server tunnel. </p><p>You can also leave this blank now, but your node will only work if you correctly set the Tor/I2P service address in Options-&gt;Network-&gt;Hidden Service configuration panel.</p></body></html> + + + 64 + + + + + + + Port + + + + + + + + 0 + 0 + + + + <html><head/><body><p>This is your connection port.</p><p>Any value between 1024 and 65535 </p><p>should be ok. You can change it later.</p></body></html> + + + 1 + + + 65535 + + + 7812 + + + + + + + + + + + + Chat identity + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + <html><head/><body><p>Identities are used when you write in chat rooms, forums and channel comments. </p><p>They also receive/send email over the Retroshare network. You can create</p><p>a signed identity now, or do it later on when you get to need it.</p></body></html> + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 12 + + + + + + + Go! + + + + 16 + 16 + + + + + + + + + + + + + + - - - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 178 - - - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 178 - - - - - - - - - 255 - 255 - 178 - - - - - - - 255 - 255 - 178 - - - - - - - - true - - - QFrame::Box - - - You can create and run Retroshare nodes on different computers using the same profile. To do so just export the selected profile, import it on the other computer and create a new node with it. - - - true - - - - - - - It looks like no profile (PGP keys) exists. Please fill in the form below to create one, or import an existing profile. - - - true - - - - - - - No node exists for this profile. - - - true - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - <html><head/><body><p>Put a strong password here. This password protects your private node key!</p></body></html> - - - - - - 1024 - - - QLineEdit::Password - - - - - - - This password is for PGP - - - Password - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - This password is for PGP - - - Password (check) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Please move your mouse around in order to collect as much randomness as possible. A minimum of 20% is needed to create your node keys.</p></body></html> - - - 24 - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - Standard node - - - - - TOR/I2P Hidden node - - - - - - - - PGP key length - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - <html><head/><body><p>Your node name designates the Retroshare instance that</p><p>will run on this computer.</p></body></html> - - - 64 - - - - - - - Node name - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 32 - - - - <html><head/><body><p>The profile name identifies you over the network.</p><p>It is used by your friends to accept connections from you.</p><p>You can create multiple Retroshare nodes with the</p><p>same profile on different computers.</p><p><br/></p></body></html> - - - - - - 64 - - - - - - - - 0 - 0 - - - - Your profile is associated with a PGP key pair. RetroShare currently ignores DSA keys. - - - - - - - - 0 - 0 - - - - Export this profle - - - - - - - - 0 - 0 - - - - Import profile - - - - - - - - 0 - 0 - - - - Re-use an existing profile - - - - - - - - - - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Put a strong password here. This password protects your private node key!</p></body></html> - - - - - - 1024 - - - QLineEdit::Password - - - - - - - Profile name - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Randomness - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Node type - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - hidden address - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - 6 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 32 - - - - <html><head/><body><p>This should be a Tor Onion address of the form: xa76giaf6ifda7ri63i263.onion <br/>or an I2P address in the form: [52 characters].b32.i2p </p><p>In order to get one, you must configure either Tor or I2P to create a new hidden service / server tunnel. </p><p>You can also leave this blank now, but your node will only work if you correctly set the Tor/I2P service address in Options-&gt;Network-&gt;Hidden Service configuration panel.</p></body></html> - - - 64 - - - - - - - Port - - - - - - - - 0 - 0 - - - - <html><head/><body><p>This is your connection port.</p><p>Any value between 1024 and 65535 </p><p>should be ok. You can change it later.</p></body></html> - - - 1 - - - 65535 - - - 7812 - - - - - - - - - - - - Chat identity - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - <html><head/><body><p>Identities are used when you write in chat rooms, forums and channel comments. </p><p>They also receive/send email over the Retroshare network. You can create</p><p>a signed identity now, or do it later on when you get to need it.</p></body></html> - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - - - Go! - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - @@ -778,27 +586,33 @@ Alternatively you can use an existing profile. Just uncheck "Create a new p + + + true + + + Advanced options + + + + + true + + + Use existing node + + - - - StyledLabel - QLabel -

gui/common/StyledLabel.h
- - name_input node_input password_input password_input_2 - adv_checkbox keylength_comboBox exportIdentity_PB - reuse_existing_node_CB genPGPuser hiddenaddr_input hiddenport_spinBox - genButton importIdentity_PB diff --git a/retroshare-gui/src/gui/images.qrc b/retroshare-gui/src/gui/images.qrc index adad4c232..fbdb66d3d 100644 --- a/retroshare-gui/src/gui/images.qrc +++ b/retroshare-gui/src/gui/images.qrc @@ -1,667 +1,668 @@ - - images/network_map.png - images/global_switch_on.png - images/global_switch_off.png - images/switch00.png - images/switch01.png - images/switch10.png - images/switch11.png - images/add_chat24.png - images/RSS_004_32.png - images/mail-encrypted-full.png - images/mail-signed-full.png - images/document-edit-sign.png - images/decrypt-mail.png - images/inbox_22.png - images/blue_lock.png - images/blue_lock_open.png - images/d-chat64.png - images/edit_24.png - images/streaming.png - images/white-bubble-64.png - images/orange-bubble-64.png - images/stock_signature_bad.png - images/stock_signature_ok.png - images/stock_signature_missing.png - images/stock_signature_unverified.png - images/anonymous_128_blue.png - images/browsable_128_green.png - images/browsable_128_blue.png - images/blank_128_green.png - images/blank_128_blue.png - images/door_in.png - images/tor-logo.png - images/help/addafriend.png - images/help/addfriendkey.png - images/help/dhtgreen.png - icons/help_64.png - images/help/natgreen.png - images/help/natred.png - images/attach.png - images/pgp.png - images/rs_wizard.png - images/avatar_request.png - images/avatar_refused.png - images/avatar_request_unknown.png - images/backblue.png - images/backchat.png - images/buttonframe.png - images/btn1.png - images/btn2.png - images/btn3.png - images/btn4.png - images/btn_26.png - images/btn_26_hover.png - images/btn_26_pressed.png - images/btn_27.png - images/btn_27_hover.png - images/btn_blue.png - images/btn_blue_hover.png - images/btn_green.png - images/btn_green_hover.png - images/btn_green_pressed.png - images/connect_creating.png - images/dht16.png - images/dht32.png - images/edit-clear-history.png - images/edit_16.png - images/feedback_arrow.png - images/feedback_arrow_hover.png - images/firewall_24.png - images/list_bullet_arrow.png - images/rc_combined.png - images/combobox_arrow.png - images/arrow-left.png - images/arrow-right.png - help/authors.html - help/licence.html - help/thanks.html - images/accepted16.png - images/add_image24.png - images/add_channel64.png - images/add_channel24.png - images/add_channel32.png - images/admin-16.png - images/admin-32.png - images/admin-24.png - images/admin-48.png - images/user/add_group22.png - images/user/add_group256.png - images/user/edit_group64.png - images/avatarstatus-bg-116.png - images/avatarstatus-bg-online-116.png - images/avatarstatus-bg-idle-116.png - images/avatarstatus-bg-away-116.png - images/avatarstatus-bg-busy-116.png - images/avatarstatus-bg-offline-116.png - images/avatarstatus-bg-70.png - images/avatarstatus-bg-online-70.png - images/avatarstatus-bg-idle-70.png - images/avatarstatus-bg-away-70.png - images/avatarstatus-bg-busy-70.png - images/avatarstatus-bg-offline-70.png - images/browse-looking.gif - images/back.png - images/backgroundl.png - images/blockdevice.png - images/blockdevice2.png - images/configure.png - images/channels.png - images/turtle.png - images/channels16.png - images/channels24.png - images/channels32.png - images/channels_new.png - images/channelsred.png - images/channelsyellow.png - images/channelsgreen.png - images/channelsblue.png - images/copyrslink.png - images/contacts24.png - images/contactsclosed24.png - images/connection.png - images/contact_new.png - images/contact_new22.png - images/contact.png - images/contact22.png - images/Client0.png - images/Client1.png - images/Client2.png - images/Client3.png - images/Client4.png - images/closenormal.png - images/closehover.png - images/closepressed.png - images/denied16.png - images/filetype-association.png - images/FileTypeAny.png - images/FileTypeArchive.png - images/FileTypeAudio.png - images/FileTypeCDImage.png - images/FileTypeDocument.png - images/FileTypePicture.png - images/FileTypeProgram.png - images/FileTypeVideo.png - images/fonts.png - images/folder16.png - images/foldermail.png - images/folderopen.png - images/fileopen.png - images/graph-downloaded.png - images/graph-downloading.png - images/graph-notdownload.png - images/graph-checking.png - images/graph-blue.png - images/add-share24.png - images/add_24x24.png - images/advsearch_24x24.png - images/amsn16.png - images/attachment.png - images/avatar_background.png - images/backgroundimage.png - images/button_cancel.png - images/calendar.png - images/chat.png - images/chat_22.png - images/chat_24.png - images/chat_32.png - images/chat_64.png - images/chat_x24.png - images/chat_red24.png - images/cancel.png - images/close-down.png - images/close_normal.png - images/console-small-down.png - images/console-small-hover.png - images/console-small-up.png - images/contact_new128.png - images/copy.png - images/delete.png - images/deleteall.png - images/deletemail-pressed.png - images/deletemail24.png - images/directoryadd_24x24_shadow.png - images/directoryremove_24x24_shadow.png - images/directoryselect_24x24_shadow.png - images/diskSave.png - images/document_save.png - images/down.png - images/down_24x24.png - images/download.png - images/download16.png - images/edit_add24.png - images/edit-bold.png - images/edit-italic.png - images/edit-underline.png - images/edit_remove24.png - images/encrypted16.png - images/encrypted22.png - images/encrypted32.png - images/encrypted48.png - images/disabled_plugin_48.png - images/evolution.png - images/exit_24x24.png - images/exit_32.png - images/expand_frame.png - images/exportpeers_16x16.png - images/extension_32.png - images/filefind.png - images/fileinfo.png - images/filename.png - images/filepriority.png - images/filecomments.png - images/filerating0.png - images/filerating1.png - images/filerating2.png - images/filerating3.png - images/filerating4.png - images/filerating5.png - images/fileshare16.png - images/fileshare24.png - images/fileshare32.png - images/fileshare48.png - images/fileshare64.png - images/find.png - images/find-16.png - images/emoticons/kopete/kopete020.png - images/flags/af.png - images/flags/bg.png - images/flags/zh_CN.png - images/flags/zh_TW.png - images/flags/ca_ES.png - images/flags/cs.png - images/flags/de.png - images/flags/da.png - images/flags/el.png - images/flags/en.png - images/flags/es.png - images/flags/fi.png - images/flags/fr.png - images/flags/hu.png - images/flags/it.png - images/flags/ja_JP.png - images/flags/ko.png - images/flags/nl.png - images/flags/pl.png - images/flags/pt.png - images/flags/ru.png - images/flags/sv.png - images/flags/sl.png - images/flags/tr.png - images/folder-draft.png - images/folder-draft24-pressed.png - images/folder-draft24.png - images/folder_inbox64.png - images/folder-inbox.png - images/folder-inbox-new.png - images/folder-outbox.png - images/folder-sent.png - images/folder-trash.png - images/folder_doments.png - images/folder_green.png - images/folder_red.png - images/folder_grey.png - images/folder_yellow.png - images/folder_open.png - images/folder_video.png - images/folder_blueshared.png - images/forward.png - images/friendsfolder24.png - images/kgames.png - images/go-down.png - images/go-top.png - images/go-up.png - images/go-bottom.png - images/graph-area.png - images/graph-line.png - images/groupchat.png - images/genbackground.png - images/gohome.png - images/gpgp_key_generate.png - images/help.png - images/help24.png - images/hide_toolbox_frame.png - images/hide_frame.png - images/highlight.png - images/hi16-app-ktorrent.png - images/hi24-app-ktorrent.png - images/hot_0.png - images/hot_1.png - images/hot_2.png - images/hot_3.png - images/hot_4.png - images/hot_5.png - images/image16.png - images/imageblocked_24.png - images/info16.png - images/im-user.png - images/im-user-offline.png - images/im-user-away.png - images/im-user-busy.png - images/im-user-inactive.png - images/informations_24x24.png - images/connect_friend.png - images/kalarm.png - images/kbackgammon.png - images/kblogger.png - images/hi48-app-kblogger.png - images/hi64-app-kblogger.png - images/transfers_new.png - images/kcmsystem24.png - images/kdmconfig.png - images/konsole.png - images/newsfeed128.png - images/newsfeed128_notify.png - images/konversation.png - images/konversation16.png - images/konversation128.png - images/konv_message2.png - images/konv_message3.png - images/konv_message64.png - images/konversation64.png - images/forums_new.png - images/ksysguard.png - images/ksysguard32.png - images/ktorrent.png - images/ktorrent32.png - images/knewsticker24.png - images/library.png - images/loadcert16.png - images/ledoff1.png - images/ledon1.png - images/locale.png - images/looknfeel.png - images/lphoto.png - images/lphoto16.png - images/lphoto24.png - images/logo/logo_16.png - images/logo/logo_24.png - images/logo/logo_24_0.png - images/logo/logo_24_1.png - images/logo/logo_24_2.png - images/logo/logo_32.png - images/logo/logo_48.png - images/logo/logo_64.png - images/logo/logo_128.png - images/logo/logo_256.png - images/logo/logo_512.png - images/logo/logo_info.png - images/logo/logo_splash.png - images/logobar/logo_bar_fill.png - images/logobar/logo_bar_start.png - images/logobar/rslogo.png - images/logobar/rslogo2.png - images/mail-message-new.png - images/mail-signed.png - images/mail-signature-unknown.png - images/mail_delete.png - images/mail_get.png - images/mail_reply.png - images/mail_replyall.png - images/mail_forward.png - images/mail_send.png - images/mail_new.png - images/mail_send24.png - images/mailforward24-hover.png - images/message-mail.png - images/message-mail-read.png - images/message-mail-imapdelete.png - images/message-mail-replied-read.png - images/message-mail-forwarded-read.png - images/message-mail-replied.png - images/message-mail-forwarded.png - images/message-mail-replied-forw.png - images/message-mail-replied-forw-read.png - images/message-state-read.png - images/message-state-unread.png - images/message-state-header.png - images/message-state-new.png - images/message-news.png - images/message_new.png - images/message.png - images/messenger.png - images/mute-off-16.png - images/mute-on-16.png - images/my_documents_16.png - images/my_documents_22.png - images/network.png - images/network16.png - images/network32.png - images/new-mail-alert.png - images/new_forum16.png - images/newmsg.png - images/no_avatar_70.png - images/no_avatar_background.png - images/openimage.png - images/office-chart-area-stacked.png - images/office-chart-line.png - images/pasterslink.png - images/package_games1.png - images/pin32.png - images/print24.png - images/priorityauto.png - images/priorityhigh.png - images/prioritylow.png - images/prioritynormal.png - images/pause.png - images/preview.png - images/player_play.png - images/quick_restart24.png - images/quote_24.png - images/redled.png - images/greenled.png - images/grayled.png - images/yellowled.png - images/rate-1.png - images/rate-2.png - images/rate-3.png - images/rate-4.png - images/rate-5.png - images/rating.png - images/records.png - images/replymail-pressed.png - images/replymail24.png - images/replymailall24-hover.png - images/reset.png - images/resume.png - images/security-high-16.png - images/security-high-48.png - images/security-low-48.png - images/security-medium-48.png - images/security-high-off-48.png - images/security-low-off-48.png - images/security-medium-off-48.png - images/save24.png - images/send24.png - images/settings.png - images/settings16.png - images/show_toolbox_frame.png - images/start.png - images/stop.png - images/star-on-16.png - images/star-off-16.png - images/StatsCumulative.png - images/StatisticsDetail.png - images/status_unknown.png - images/startall.png - images/server_24x24.png - images/sort_incr.png - images/sort_decrease.png - images/sound.png - images/tab-dock.png - images/tab-undock.png - images/tab-new.png - images/tag24.png - images/transferupdown.png - images/tools_wizard.png - images/typing.png - images/trustsettings.png - images/uploads.png - images/headerFrame.png - images/loader/indicator-16.gif - images/loader/indicator-32.gif - images/loader/circleball-16.gif - images/loader/progress.gif - images/mimetypes/pdf.png - images/mimetypes/rscollection-16.png - images/mimetypes/patch.png - images/mimetypes/source_c.png - images/mimetypes/source_cpp.png - images/mimetypes/source_h.png - images/view-certificate-copy-32.png - images/view-certificate-export-32.png - images/textedit/textbold.png - images/textedit/textitalic.png - images/textedit/textunder.png - images/textedit/textjustify.png - images/textedit/textcenter.png - images/textedit/textleft.png - images/textedit/textright.png - images/textedit/editcopy.png - images/textedit/editcut.png - images/textedit/editpaste.png - images/textedit/editredo.png - images/textedit/editundo.png - images/textedit/exportpdf.png - images/textedit/filenew.png - images/textedit/fileopen.png - images/textedit/fileprint.png - images/textedit/filesave.png - images/textedit/format-text-color.png - images/textedit/format-list-ordered.png - images/textedit/format-list-unordered.png - images/textedit/zoomin.png - images/textedit/zoomout.png - images/textedit/format_font_size_more.png - images/textedit/format_font_size_less.png - images/textedit/hi22-action-format-text-blockquote.png - images/textedit/hi22-action-format-text-code.png - images/textedit/hi22-action-insert-more-mark.png - images/toaster/chat.png - images/toaster/hangup.png - images/toaster/pickup.png - images/toaster/backgroundtoaster.png - images/thumb-default-video.png - images/user/add_user24.png - images/user/add_user48.png - images/user/remove_user24.png - images/user/deny_user48.png - images/user/friends24.png - images/user/friends32.png - images/user/friends64.png - images/user/friends24_notify.png - images/user/friend_suggestion16.png - images/user/identity16.png - images/user/identity24.png - images/user/identity24_low.png - images/user/identity32.png - images/user/identity48.png - images/user/identityinfo48.png - images/user/identityinfo64.png - images/user/identityoffline24.png - images/user/identity24away.png - images/user/identity24busy.png - images/user/identity24idle.png - images/user/identityavaiblecyan24.png - images/user/invite24.png - images/user/agt_forum24.png - images/user/agt_forum32.png - images/user/identitygray16.png - images/user/add_user16.png - images/user/personal64.png - images/user/personal128.png - images/user/kuser24.png - images/user/agt_forum64.png - images/user/agt_forum128.png - images/user/group16.png - images/user/group24.png - images/user/servicepermissions64.png - images/user/user_request16.png - images/user/user_request48.png - images/user/user_request_unknown48.png - images/up.png - images/up0down0.png - images/up0down1.png - images/up1down1.png - images/up1down0.png - images/underconstruction.png - images/user.png - images/view-certificate-sign-32.png - images/view_calendar_day.png - images/view_calendar_week.png - images/view_calendar_month.png - images/view_calendar_list.png - images/view_split_top_bottom.png - images/vote_up.png - images/vote_down.png - images/vote_neutral.png - images/window_fullscreen.png - images/window_nofullscreen.png - images/identity/identities_32.png - images/identity/identity_64.png - images/identity/identity_create_32.png - images/identity/identity_create_64.png - images/identity/identity_delete_32.png - images/identity/identity_edit_32.png - images/identity/identity_edit_64.png - qss/chat/standard/private/info.xml - qss/chat/standard/private/incoming.htm - qss/chat/standard/private/outgoing.htm - qss/chat/standard/private/hincoming.htm - qss/chat/standard/private/houtgoing.htm - qss/chat/standard/private/ooutgoing.htm - qss/chat/standard/private/system.htm - qss/chat/standard/private/main.css - qss/chat/standard/private/variants/Standard.css - qss/chat/standard/public/info.xml - qss/chat/standard/public/incoming.htm - qss/chat/standard/public/outgoing.htm - qss/chat/standard/public/hincoming.htm - qss/chat/standard/public/houtgoing.htm - qss/chat/standard/public/ooutgoing.htm - qss/chat/standard/public/system.htm - qss/chat/standard/public/main.css - qss/chat/standard/public/variants/Standard.css - qss/chat/standard/history/info.xml - qss/chat/standard/history/incoming.htm - qss/chat/standard/history/outgoing.htm - qss/chat/standard/history/hincoming.htm - qss/chat/standard/history/houtgoing.htm - qss/chat/standard/history/ooutgoing.htm - qss/chat/standard/history/system.htm - qss/chat/standard/history/main.css - qss/chat/standard/history/variants/Standard.css - qss/chat/compact/private/info.xml - qss/chat/compact/private/incoming.htm - qss/chat/compact/private/outgoing.htm - qss/chat/compact/private/hincoming.htm - qss/chat/compact/private/houtgoing.htm - qss/chat/compact/private/ooutgoing.htm - qss/chat/compact/private/system.htm - qss/chat/compact/private/main.css - qss/chat/compact/private/variants/Standard.css - qss/chat/compact/private/variants/Colored.css - qss/chat/compact/public/info.xml - qss/chat/compact/public/incoming.htm - qss/chat/compact/public/outgoing.htm - qss/chat/compact/public/hincoming.htm - qss/chat/compact/public/houtgoing.htm - qss/chat/compact/public/ooutgoing.htm - qss/chat/compact/public/system.htm - qss/chat/compact/public/main.css - qss/chat/compact/public/variants/Standard.css - qss/chat/compact/public/variants/Colored.css - qss/chat/compact/history/info.xml - qss/chat/compact/history/incoming.htm - qss/chat/compact/history/outgoing.htm - qss/chat/compact/history/hincoming.htm - qss/chat/compact/history/houtgoing.htm - qss/chat/compact/history/ooutgoing.htm - qss/chat/compact/history/system.htm - qss/chat/compact/history/main.css - qss/chat/compact/history/variants/Standard.css - qss/chat/compact/history/variants/Colored.css - qss/stylesheet/qss.default - qss/stylesheet/Standard.qss - images/connect/connectFriendWatermark.png - images/connect/connectFriendLogo.png - images/connect/connectFriendBanner.png - images/connect/connectFriendBanner1.png - images/connect/info16.png - images/connect/mail_send.png - images/tags/pgp-known.png - images/tags/pgp-unknown.png - images/tags/anon.png - images/tags/dev-ambassador.png - images/tags/dev-translator.png - images/tags/dev-patcher.png - images/tags/developer.png - images/circles/circles_32.png - images/circles/circles_64.png - images/newsfeed/news-feed-32.png - images/newsfeed/news-feed-notify-32.png - images/share-icon-16.png - help/version.html - images/view-certificate-sign-48.png - images/toasterEnable.png - images/toasterDisable.png - images/library_edit.png - images/library_view.png - images/library_add.png - images/library64.png - images/library16.png - images/btn_red_pressed.png - images/btn_red_hover.png - images/btn_red.png - images/view-feeds.png - images/view-files.png - images/emblem-web.png - images/rsmessenger16.png - images/rsmessenger32.png - images/rsmessenger48.png - images/SmileyText.png - images/SimpleText.png - images/ColoredText.png - + + images/logo/logo_spash2.png + images/network_map.png + images/global_switch_on.png + images/global_switch_off.png + images/switch00.png + images/switch01.png + images/switch10.png + images/switch11.png + images/add_chat24.png + images/RSS_004_32.png + images/mail-encrypted-full.png + images/mail-signed-full.png + images/document-edit-sign.png + images/decrypt-mail.png + images/inbox_22.png + images/blue_lock.png + images/blue_lock_open.png + images/d-chat64.png + images/edit_24.png + images/streaming.png + images/white-bubble-64.png + images/orange-bubble-64.png + images/stock_signature_bad.png + images/stock_signature_ok.png + images/stock_signature_missing.png + images/stock_signature_unverified.png + images/anonymous_128_blue.png + images/browsable_128_green.png + images/browsable_128_blue.png + images/blank_128_green.png + images/blank_128_blue.png + images/door_in.png + images/tor-logo.png + images/help/addafriend.png + images/help/addfriendkey.png + images/help/dhtgreen.png + icons/help_64.png + images/help/natgreen.png + images/help/natred.png + images/attach.png + images/pgp.png + images/rs_wizard.png + images/avatar_request.png + images/avatar_refused.png + images/avatar_request_unknown.png + images/backblue.png + images/backchat.png + images/buttonframe.png + images/btn1.png + images/btn2.png + images/btn3.png + images/btn4.png + images/btn_26.png + images/btn_26_hover.png + images/btn_26_pressed.png + images/btn_27.png + images/btn_27_hover.png + images/btn_blue.png + images/btn_blue_hover.png + images/btn_green.png + images/btn_green_hover.png + images/btn_green_pressed.png + images/connect_creating.png + images/dht16.png + images/dht32.png + images/edit-clear-history.png + images/edit_16.png + images/feedback_arrow.png + images/feedback_arrow_hover.png + images/firewall_24.png + images/list_bullet_arrow.png + images/rc_combined.png + images/combobox_arrow.png + images/arrow-left.png + images/arrow-right.png + help/authors.html + help/licence.html + help/thanks.html + images/accepted16.png + images/add_image24.png + images/add_channel64.png + images/add_channel24.png + images/add_channel32.png + images/admin-16.png + images/admin-32.png + images/admin-24.png + images/admin-48.png + images/user/add_group22.png + images/user/add_group256.png + images/user/edit_group64.png + images/avatarstatus-bg-116.png + images/avatarstatus-bg-online-116.png + images/avatarstatus-bg-idle-116.png + images/avatarstatus-bg-away-116.png + images/avatarstatus-bg-busy-116.png + images/avatarstatus-bg-offline-116.png + images/avatarstatus-bg-70.png + images/avatarstatus-bg-online-70.png + images/avatarstatus-bg-idle-70.png + images/avatarstatus-bg-away-70.png + images/avatarstatus-bg-busy-70.png + images/avatarstatus-bg-offline-70.png + images/browse-looking.gif + images/back.png + images/backgroundl.png + images/blockdevice.png + images/blockdevice2.png + images/configure.png + images/channels.png + images/turtle.png + images/channels16.png + images/channels24.png + images/channels32.png + images/channels_new.png + images/channelsred.png + images/channelsyellow.png + images/channelsgreen.png + images/channelsblue.png + images/copyrslink.png + images/contacts24.png + images/contactsclosed24.png + images/connection.png + images/contact_new.png + images/contact_new22.png + images/contact.png + images/contact22.png + images/Client0.png + images/Client1.png + images/Client2.png + images/Client3.png + images/Client4.png + images/closenormal.png + images/closehover.png + images/closepressed.png + images/denied16.png + images/filetype-association.png + images/FileTypeAny.png + images/FileTypeArchive.png + images/FileTypeAudio.png + images/FileTypeCDImage.png + images/FileTypeDocument.png + images/FileTypePicture.png + images/FileTypeProgram.png + images/FileTypeVideo.png + images/fonts.png + images/folder16.png + images/foldermail.png + images/folderopen.png + images/fileopen.png + images/graph-downloaded.png + images/graph-downloading.png + images/graph-notdownload.png + images/graph-checking.png + images/graph-blue.png + images/add-share24.png + images/add_24x24.png + images/advsearch_24x24.png + images/amsn16.png + images/attachment.png + images/avatar_background.png + images/backgroundimage.png + images/button_cancel.png + images/calendar.png + images/chat.png + images/chat_22.png + images/chat_24.png + images/chat_32.png + images/chat_64.png + images/chat_x24.png + images/chat_red24.png + images/cancel.png + images/close-down.png + images/close_normal.png + images/console-small-down.png + images/console-small-hover.png + images/console-small-up.png + images/contact_new128.png + images/copy.png + images/delete.png + images/deleteall.png + images/deletemail-pressed.png + images/deletemail24.png + images/directoryadd_24x24_shadow.png + images/directoryremove_24x24_shadow.png + images/directoryselect_24x24_shadow.png + images/diskSave.png + images/document_save.png + images/down.png + images/down_24x24.png + images/download.png + images/download16.png + images/edit_add24.png + images/edit-bold.png + images/edit-italic.png + images/edit-underline.png + images/edit_remove24.png + images/encrypted16.png + images/encrypted22.png + images/encrypted32.png + images/encrypted48.png + images/disabled_plugin_48.png + images/evolution.png + images/exit_24x24.png + images/exit_32.png + images/expand_frame.png + images/exportpeers_16x16.png + images/extension_32.png + images/filefind.png + images/fileinfo.png + images/filename.png + images/filepriority.png + images/filecomments.png + images/filerating0.png + images/filerating1.png + images/filerating2.png + images/filerating3.png + images/filerating4.png + images/filerating5.png + images/fileshare16.png + images/fileshare24.png + images/fileshare32.png + images/fileshare48.png + images/fileshare64.png + images/find.png + images/find-16.png + images/emoticons/kopete/kopete020.png + images/flags/af.png + images/flags/bg.png + images/flags/zh_CN.png + images/flags/zh_TW.png + images/flags/ca_ES.png + images/flags/cs.png + images/flags/de.png + images/flags/da.png + images/flags/el.png + images/flags/en.png + images/flags/es.png + images/flags/fi.png + images/flags/fr.png + images/flags/hu.png + images/flags/it.png + images/flags/ja_JP.png + images/flags/ko.png + images/flags/nl.png + images/flags/pl.png + images/flags/pt.png + images/flags/ru.png + images/flags/sv.png + images/flags/sl.png + images/flags/tr.png + images/folder-draft.png + images/folder-draft24-pressed.png + images/folder-draft24.png + images/folder_inbox64.png + images/folder-inbox.png + images/folder-inbox-new.png + images/folder-outbox.png + images/folder-sent.png + images/folder-trash.png + images/folder_doments.png + images/folder_green.png + images/folder_red.png + images/folder_grey.png + images/folder_yellow.png + images/folder_open.png + images/folder_video.png + images/folder_blueshared.png + images/forward.png + images/friendsfolder24.png + images/kgames.png + images/go-down.png + images/go-top.png + images/go-up.png + images/go-bottom.png + images/graph-area.png + images/graph-line.png + images/groupchat.png + images/genbackground.png + images/gohome.png + images/gpgp_key_generate.png + images/help.png + images/help24.png + images/hide_toolbox_frame.png + images/hide_frame.png + images/highlight.png + images/hi16-app-ktorrent.png + images/hi24-app-ktorrent.png + images/hot_0.png + images/hot_1.png + images/hot_2.png + images/hot_3.png + images/hot_4.png + images/hot_5.png + images/image16.png + images/imageblocked_24.png + images/info16.png + images/im-user.png + images/im-user-offline.png + images/im-user-away.png + images/im-user-busy.png + images/im-user-inactive.png + images/informations_24x24.png + images/connect_friend.png + images/kalarm.png + images/kbackgammon.png + images/kblogger.png + images/hi48-app-kblogger.png + images/hi64-app-kblogger.png + images/transfers_new.png + images/kcmsystem24.png + images/kdmconfig.png + images/konsole.png + images/newsfeed128.png + images/newsfeed128_notify.png + images/konversation.png + images/konversation16.png + images/konversation128.png + images/konv_message2.png + images/konv_message3.png + images/konv_message64.png + images/konversation64.png + images/forums_new.png + images/ksysguard.png + images/ksysguard32.png + images/ktorrent.png + images/ktorrent32.png + images/knewsticker24.png + images/library.png + images/loadcert16.png + images/ledoff1.png + images/ledon1.png + images/locale.png + images/looknfeel.png + images/lphoto.png + images/lphoto16.png + images/lphoto24.png + images/logo/logo_16.png + images/logo/logo_24.png + images/logo/logo_24_0.png + images/logo/logo_24_1.png + images/logo/logo_24_2.png + images/logo/logo_32.png + images/logo/logo_48.png + images/logo/logo_64.png + images/logo/logo_128.png + images/logo/logo_256.png + images/logo/logo_512.png + images/logo/logo_info.png + images/logo/logo_splash.png + images/logobar/logo_bar_fill.png + images/logobar/logo_bar_start.png + images/logobar/rslogo.png + images/logobar/rslogo2.png + images/mail-message-new.png + images/mail-signed.png + images/mail-signature-unknown.png + images/mail_delete.png + images/mail_get.png + images/mail_reply.png + images/mail_replyall.png + images/mail_forward.png + images/mail_send.png + images/mail_new.png + images/mail_send24.png + images/mailforward24-hover.png + images/message-mail.png + images/message-mail-read.png + images/message-mail-imapdelete.png + images/message-mail-replied-read.png + images/message-mail-forwarded-read.png + images/message-mail-replied.png + images/message-mail-forwarded.png + images/message-mail-replied-forw.png + images/message-mail-replied-forw-read.png + images/message-state-read.png + images/message-state-unread.png + images/message-state-header.png + images/message-state-new.png + images/message-news.png + images/message_new.png + images/message.png + images/messenger.png + images/mute-off-16.png + images/mute-on-16.png + images/my_documents_16.png + images/my_documents_22.png + images/network.png + images/network16.png + images/network32.png + images/new-mail-alert.png + images/new_forum16.png + images/newmsg.png + images/no_avatar_70.png + images/no_avatar_background.png + images/openimage.png + images/office-chart-area-stacked.png + images/office-chart-line.png + images/pasterslink.png + images/package_games1.png + images/pin32.png + images/print24.png + images/priorityauto.png + images/priorityhigh.png + images/prioritylow.png + images/prioritynormal.png + images/pause.png + images/preview.png + images/player_play.png + images/quick_restart24.png + images/quote_24.png + images/redled.png + images/greenled.png + images/grayled.png + images/yellowled.png + images/rate-1.png + images/rate-2.png + images/rate-3.png + images/rate-4.png + images/rate-5.png + images/rating.png + images/records.png + images/replymail-pressed.png + images/replymail24.png + images/replymailall24-hover.png + images/reset.png + images/resume.png + images/security-high-16.png + images/security-high-48.png + images/security-low-48.png + images/security-medium-48.png + images/security-high-off-48.png + images/security-low-off-48.png + images/security-medium-off-48.png + images/save24.png + images/send24.png + images/settings.png + images/settings16.png + images/show_toolbox_frame.png + images/start.png + images/stop.png + images/star-on-16.png + images/star-off-16.png + images/StatsCumulative.png + images/StatisticsDetail.png + images/status_unknown.png + images/startall.png + images/server_24x24.png + images/sort_incr.png + images/sort_decrease.png + images/sound.png + images/tab-dock.png + images/tab-undock.png + images/tab-new.png + images/tag24.png + images/transferupdown.png + images/tools_wizard.png + images/typing.png + images/trustsettings.png + images/uploads.png + images/headerFrame.png + images/loader/indicator-16.gif + images/loader/indicator-32.gif + images/loader/circleball-16.gif + images/loader/progress.gif + images/mimetypes/pdf.png + images/mimetypes/rscollection-16.png + images/mimetypes/patch.png + images/mimetypes/source_c.png + images/mimetypes/source_cpp.png + images/mimetypes/source_h.png + images/view-certificate-copy-32.png + images/view-certificate-export-32.png + images/textedit/textbold.png + images/textedit/textitalic.png + images/textedit/textunder.png + images/textedit/textjustify.png + images/textedit/textcenter.png + images/textedit/textleft.png + images/textedit/textright.png + images/textedit/editcopy.png + images/textedit/editcut.png + images/textedit/editpaste.png + images/textedit/editredo.png + images/textedit/editundo.png + images/textedit/exportpdf.png + images/textedit/filenew.png + images/textedit/fileopen.png + images/textedit/fileprint.png + images/textedit/filesave.png + images/textedit/format-text-color.png + images/textedit/format-list-ordered.png + images/textedit/format-list-unordered.png + images/textedit/zoomin.png + images/textedit/zoomout.png + images/textedit/format_font_size_more.png + images/textedit/format_font_size_less.png + images/textedit/hi22-action-format-text-blockquote.png + images/textedit/hi22-action-format-text-code.png + images/textedit/hi22-action-insert-more-mark.png + images/toaster/chat.png + images/toaster/hangup.png + images/toaster/pickup.png + images/toaster/backgroundtoaster.png + images/thumb-default-video.png + images/user/add_user24.png + images/user/add_user48.png + images/user/remove_user24.png + images/user/deny_user48.png + images/user/friends24.png + images/user/friends32.png + images/user/friends64.png + images/user/friends24_notify.png + images/user/friend_suggestion16.png + images/user/identity16.png + images/user/identity24.png + images/user/identity24_low.png + images/user/identity32.png + images/user/identity48.png + images/user/identityinfo48.png + images/user/identityinfo64.png + images/user/identityoffline24.png + images/user/identity24away.png + images/user/identity24busy.png + images/user/identity24idle.png + images/user/identityavaiblecyan24.png + images/user/invite24.png + images/user/agt_forum24.png + images/user/agt_forum32.png + images/user/identitygray16.png + images/user/add_user16.png + images/user/personal64.png + images/user/personal128.png + images/user/kuser24.png + images/user/agt_forum64.png + images/user/agt_forum128.png + images/user/group16.png + images/user/group24.png + images/user/servicepermissions64.png + images/user/user_request16.png + images/user/user_request48.png + images/user/user_request_unknown48.png + images/up.png + images/up0down0.png + images/up0down1.png + images/up1down1.png + images/up1down0.png + images/underconstruction.png + images/user.png + images/view-certificate-sign-32.png + images/view_calendar_day.png + images/view_calendar_week.png + images/view_calendar_month.png + images/view_calendar_list.png + images/view_split_top_bottom.png + images/vote_up.png + images/vote_down.png + images/vote_neutral.png + images/window_fullscreen.png + images/window_nofullscreen.png + images/identity/identities_32.png + images/identity/identity_64.png + images/identity/identity_create_32.png + images/identity/identity_create_64.png + images/identity/identity_delete_32.png + images/identity/identity_edit_32.png + images/identity/identity_edit_64.png + qss/chat/standard/private/info.xml + qss/chat/standard/private/incoming.htm + qss/chat/standard/private/outgoing.htm + qss/chat/standard/private/hincoming.htm + qss/chat/standard/private/houtgoing.htm + qss/chat/standard/private/ooutgoing.htm + qss/chat/standard/private/system.htm + qss/chat/standard/private/main.css + qss/chat/standard/private/variants/Standard.css + qss/chat/standard/public/info.xml + qss/chat/standard/public/incoming.htm + qss/chat/standard/public/outgoing.htm + qss/chat/standard/public/hincoming.htm + qss/chat/standard/public/houtgoing.htm + qss/chat/standard/public/ooutgoing.htm + qss/chat/standard/public/system.htm + qss/chat/standard/public/main.css + qss/chat/standard/public/variants/Standard.css + qss/chat/standard/history/info.xml + qss/chat/standard/history/incoming.htm + qss/chat/standard/history/outgoing.htm + qss/chat/standard/history/hincoming.htm + qss/chat/standard/history/houtgoing.htm + qss/chat/standard/history/ooutgoing.htm + qss/chat/standard/history/system.htm + qss/chat/standard/history/main.css + qss/chat/standard/history/variants/Standard.css + qss/chat/compact/private/info.xml + qss/chat/compact/private/incoming.htm + qss/chat/compact/private/outgoing.htm + qss/chat/compact/private/hincoming.htm + qss/chat/compact/private/houtgoing.htm + qss/chat/compact/private/ooutgoing.htm + qss/chat/compact/private/system.htm + qss/chat/compact/private/main.css + qss/chat/compact/private/variants/Standard.css + qss/chat/compact/private/variants/Colored.css + qss/chat/compact/public/info.xml + qss/chat/compact/public/incoming.htm + qss/chat/compact/public/outgoing.htm + qss/chat/compact/public/hincoming.htm + qss/chat/compact/public/houtgoing.htm + qss/chat/compact/public/ooutgoing.htm + qss/chat/compact/public/system.htm + qss/chat/compact/public/main.css + qss/chat/compact/public/variants/Standard.css + qss/chat/compact/public/variants/Colored.css + qss/chat/compact/history/info.xml + qss/chat/compact/history/incoming.htm + qss/chat/compact/history/outgoing.htm + qss/chat/compact/history/hincoming.htm + qss/chat/compact/history/houtgoing.htm + qss/chat/compact/history/ooutgoing.htm + qss/chat/compact/history/system.htm + qss/chat/compact/history/main.css + qss/chat/compact/history/variants/Standard.css + qss/chat/compact/history/variants/Colored.css + qss/stylesheet/qss.default + qss/stylesheet/Standard.qss + images/connect/connectFriendWatermark.png + images/connect/connectFriendLogo.png + images/connect/connectFriendBanner.png + images/connect/connectFriendBanner1.png + images/connect/info16.png + images/connect/mail_send.png + images/tags/pgp-known.png + images/tags/pgp-unknown.png + images/tags/anon.png + images/tags/dev-ambassador.png + images/tags/dev-translator.png + images/tags/dev-patcher.png + images/tags/developer.png + images/circles/circles_32.png + images/circles/circles_64.png + images/newsfeed/news-feed-32.png + images/newsfeed/news-feed-notify-32.png + images/share-icon-16.png + help/version.html + images/view-certificate-sign-48.png + images/toasterEnable.png + images/toasterDisable.png + images/library_edit.png + images/library_view.png + images/library_add.png + images/library64.png + images/library16.png + images/btn_red_pressed.png + images/btn_red_hover.png + images/btn_red.png + images/view-feeds.png + images/view-files.png + images/emblem-web.png + images/rsmessenger16.png + images/rsmessenger32.png + images/rsmessenger48.png + images/SmileyText.png + images/SimpleText.png + images/ColoredText.png + diff --git a/retroshare-gui/src/gui/images/cancel.png b/retroshare-gui/src/gui/images/cancel.png index e2db55f22d6752e10a57f07e286081ebebacfea5..87cd0b0125d6193c16c59f25b88396493e885f6b 100644 GIT binary patch delta 626 zcmbQi*1$SJvYwfNfk8u;KNv_c7dv@|aBy(ke(3)I$mJ~Xh%9DcVB8JDj8<>t*I;7bhncr0V4trO$q6BL!3~9^ez=`v3p`1_p)|3=C@- z7}^;ax)>NHGBC_wV3@RV8~-&$Yo&2VqjRrz%Wf)yIxML zNk#fnMd@KL&yxwUbLD0Bn`j+%w_hSJyhL7fiK5gJWx1ttLd)a?R;!4wSC`&wsJ2;K zexH~9VK0XhKF+7Yd>WJ$8%}w#rhL&r(*XwlRuSl!;c9-pjzSkAY#orE&d1 zL9Ro_#)o`84qI6rwKO^=#B*GT=cJw8X&3v`eqLwX+%7OMToB^992RytJmhj}!j+`B zYYDN}lM`kPYraQ8tFbY(tBE5_$)W~Sy}1J-p=iu=wVMs0a*6lae66V1{}lBO?zm@bvWb^7ao147zar?!70^UVZxV z^%o5M27y07@b~ZEfB&xL-Ae)*Fx%6`F+@VL_n@m-69WV50e+1eN@eBcN$g4G&;OoZ z_@U%HkI2G1Y&DW|L{gS~pLvn#*O$}oPDyv;)@d%@S+MWUnh6;~!r6rr_0J!v3}TiP zmj2Sd_M*wT2km`jv);P39Gh=-=K8Ceh+g@r^*SZhhb$H}`H087pLX?B)^^UB3LD?w z|E_d;s@(f#UZF$9XErfRx31(k!O_kdKc~AvNZxs~aQ62tX(>Q=GI+ZBxvXf delta 780 zcmV+n1M~cV1(*hq8Gi-<001BJ|6u?C0^dnQK~y-6rIF8XlLZ{cKi{`M*KTWR*LIyV zOM#7*DZ@=SF_3}AQA3P|gNg^^%|8H7{u4T5;)N3sh*3r~9Q0sBM3RX=h7k4($wr!W zUAMOD_O^Z7zVFuqJ$Uy?p2Kr^o;=A%RF(fDF~ob^L^ zH>W3RaM#t*fdMUmmp>n$oF`v` z);GWW<6T{X8-LfagArUWy~x7#3tYQ*U;M!9W0N|Xd56Y>dw6NVP@4PMEslKs#fSj7 z!@bq{RDZ|F(lUi+9ee>|JyA+;y-hurBRMxmp;CdWNzChEEgUAbv5jI00Q-_DfCrBw zQLTgC1pOJbJebx(GO4#fZ-Z7r7eRrwu3!}WegvSSe}9l#c7+(s&31K8ly~>o09XWHdDZnkp~*aF;j$D!ITe-Q6e zE5FW)!hazk*1n$uij^G>npNJ9C-le7yZ~4zM$>Ll2lrGks74{jp2A_CIxsel|JX5} z2U0-MZqivSF%=DI4FWAkF`A7=^pj6NYj&F^B~=F6D9{fS zS`9+mJA8chU9+i9A9v2Y$E}`j{TuWVs0Df@9)HuU&%OLZD8P+yfK`v{&nt;uZGk=p zUFr_%@5x@B5y5a!R7AFc1H);q4G;5bq430pAqPQ4uwiVfm|y%Vo*5 zPy`#n2ALh&&$;PS*vf#Tineh%3bv!^vqJ-Xn?8sGq9QmV{0nAcK6qK?z8e4l002ov KP6b4+LSTX`Yi$Pr diff --git a/retroshare-gui/src/gui/images/logo/logo_spash2.png b/retroshare-gui/src/gui/images/logo/logo_spash2.png new file mode 100644 index 0000000000000000000000000000000000000000..dab5aa9381d067df268a5f8fac5d2811c40d0dbe GIT binary patch literal 102946 zcmV)ZK&!urP)006xR1^@s7GV#9*00009a7bBm000fw z000fw0YWI7cmMzjPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00DZpN8C8Cw0j0G)1$h4xGq-r8Fj-9cS z@%-GmKj&xfy%rB+Pds&87uuk%hjaEmXYIAuxBm7yi_8o^3=x4~*JlC%n4t^M+9_b` z^f{iH$t6Z7wd-*f)#50adN|(eR*NQhyb&m!+( zIwUC#C5(vTOiI*mDNE4F)K3SRM-?Zb-4igwb+rXu22TJ1Kz9*@6Z@G~mX-)u!1~NG zz3+Q%!f^n*7XYVlQ~$UvV;M8+>vn8m!B&<)z{}F;9PpV1Um@izS;moAohizcq~j_} zWu59~m`wfjo#r{6KRIvRF3b!@1nPEywL_<5{I*%ys$z~28k*%fg_tEK%A6)kE|g_e z=Mz+CgS^I}Lt*Rmk}fSQ==BUhfKj)*NGrFVpsB4>y!FB3bmJLNzqv~7V$J}d-(00( z?x@lC+|HPKMUR1L06;#W)(>V=gQ#_@(&525z46Rzv@LB%5*sicmk?TD-!Mm#G?*!e z%&082D#VQyntbV-J7E>8@um6sMA+4OaT&6bpYsztXe#lzfyNDC+*C3WVj@d1#oAFe zQpPBh7{!(=2SqQm21n!40u)5BYlJs-yT;3RfNv`x7X~l;%V7mf0N4Ql1V<#bur)<= zP>E#BiFadM)Ql*lqKIiM_d#Sl0RUX-2P2F-P8}udcyVJ%)f0=sERdogU}&8BQPaS* zJ)Fj7bzyKc9$SDdFE8^P=3G7GX6{`pLOP_?B$ID}&;Wy>QDLqGFa&GgqW0@74!BN* zZ@PLFb8-F$qyf#p^pcyyoXeu-{Sh_%SR;2Nu8uVWfOxYM8ssRtgy@9WnI%!$1@F{p zfF=^IImFt$3!-Kb;)FxX)TTf(X-X|-&2~$I1!WYX+*i{cbG}vaV5d2(N8?`V3xnE# z2^se>*9kXHK_?SvT1=+E+6K@d6E-q6qRLVl5%CUN>Z#|RQyr*JqwA%Cn>jeo;mm6p znw@6etlBUgH|5+D3jl-&2nR|~M=Bns4iEu|31$j4GL4i_8*wQKRe&X-%7OeC!8!_> zFlY-#-aurqD2m+7920{yMrRz|#6;RGa>`npXfRyxu4$SkgnUO4Cl%IVP|JujQxygj zga!e*5j@}=f;#iw=^(hWsl%eb&V$zb!@?3G7NB%R8aS++6Pa#$PQ_R}mZ`Rw&;;N>Mr2S01f(!> zfe$)V9Gzv+YRK%1C(U`$csM!<~PY`3=3=M*LVrC^XGB~gZK}A6VhSLm(aym@fRxDlIP0#ctR1@~PscjtCVSEDFwy(Nv=r8MVzU2Y~?q31rOtmmfO#N7FgK z_fqKMC*^)Up0B@AzW<-k^O-d}U*W#B&^>WH5da4Ou^bV`m{>DbCdXtMD;lcFvj{!= zYd8HB0DS3+eEEmf0w2CP!~X|e58U;rm$>6{-!4hnHV)I;Db(HLNW67A8Mu)wNifwQ zYQfahED@OG*}HauUrC?-*L8e%JK{^L`mTWa--5dy4Ui3r~?wh~( zM!7ft%)j>l0H6Fu4^O}Hw){W*xBgX%pFMl_s%H;8@W9^qh8u1G0L;wHToZh$I>o>= zBu(b7YGoGkt@@nf^|zo?Wi!+XMJ#o|;2w+ie)YWvzpzyVY!@{q4UE6zq^UEE4XEW^0Kl=;g0Dw-XgVAW$C{I55 zBo-GJvADRn$M^j6&*Q*>1N&q>@x&7VfQKJ`7>_*i$Ueg-qX{ri5~Pz@TE>k=TN}>J zpMnnxdf6gS^|^WJ=Vdip9^o12?>=%I%I z08c&j)Kz;X!x*WyRZx>s5s-$-s)D;GU|Xk`6hQ6ESR|MAp^fdo{p@Fcd#eao-|FG+ zzx(#S&1Tz;cLWXqU-*?7eC}JjVg2!w8~FIijY~PPKQ%sa%NRcSjUN8`0~7evH+S%< zZ|>mpztrCI{N&{1JIdeK*ucid1}zT^~JT3Ar5 zAdT;A*JF}K>e62IdFx;P5&!+np8x=U@5S?&ZRh)dU#15id~lz^Z@>NaA6SL&yz@=~ zz}ngxR##WAdjH&W&+U!xzyE$b{`lj2z#e<-vAtq<8RWh9-usSeW(H$$gmN(DKr~9R zOiEWW5qiVvM-^ z?z?|1=lQ!$45|PO5p3vVJ_?YkKT}5je#UP1gyAIgSampr5toJ5gO7gg!t8IpxHk9E zIr)#-c8*Wq()fu0^}`yR83mFJ*||aRRlzc>ac(EkJ1KgpeMHN5Ec0!}VcC|plPvcx z)p>0x2Wi8S%ZQUlQV&PMU`I*4nPnjMiPdu=2PT0js}VCmfC@<1$Q)t!XNi;?5wRK= zqy&SJa3WB&WWk^nkrb+_5W*-i3QANPn>w&WSc8BufX11uso)%D0;0ji9`e^5NB1&!0L&` z$D|%YLPktXObRwpF_43@C&V1anXzS1@?a7skXkYVM*~%4D2y<&6h{O%gtMVlp=9P- zB~vpNqOw8e$AnT#Ra?f=B#;A{lBFV%-(tnZio@1eG3vYb{7m`GR~HjqFGRoJ2rCD{ zSUD$+j%PnE>KZ~C^DJ|tF|D`-qL#8WO>DPu5>v&F zd!}JKGwG%L@MyS>u=E>Hcl{jN{XC)F##-twLRW4*oX%#T_ccz@)>@NpY-QAMDrJM5 zqYg#%AR`SWZwME4&bbhku^cp!xU|YAPvAWNyO%mETkd?9knOM>exn_ zI|=);!RY@|oUUwRcNZ54IDwU0mk0|Bn0n?EZ%sAn#@4NLVQ`M8nnD0jWNht>(JOl7 zn>P>@7ah4=f~gl|8JjlLw2_!Z#3?jY>}V7dRi>l5$rMmF?77u6UWSnu*07+rJeCN~I-`;!e z`~Lmc2XdaK?C1L=nvRm`VtIzv?z)Te$rARNF@zTP2z3s5e&NxSn_o zwt9NH)xLY-U72EV?&e(?$w*8Sm%Dia1{TwxJScUmY{u@fCGB5?KK(9K^}fu0HmA>= zA)G$FC(-)(X^);*16_IjWy13EJAc0XGG71qvMu&tCsw8vUt0qo#U)oyIzB;_RETMo zvWrzo#7VT^D^07)Wofl_rHI{QOK}@8&Is#{)5F#qa=4Cu!kx@FVrIdoX0?bj(halcTnkU!qaZ zQ8yRrw;ZhwMsCH$y|5iBipUd(66dPK3`e^}92$nk1*31=~W0yOo-HFDvFtiZMok(C#geWqR zs9AKWGHXl_!f;f_It}Ve$LuU)=h_H1PeyGJG9_Yy1_PB6F^;0c7~Gaib(l?fg2Pwp zBg@NistTPDEG{Nlr42Lg5QlkZ+6ka0RQ(i~QbmM`nhn7+NS$t3X=B+hMgL+y0PFF+ z)EZiOdOgYJ_IZ+!IZacIA+dxd))k3Q3;?XCMJT#R?BG~PiIqTXFpH)pQj>&=YpIAe zMkWGj#?U!a*H!2oD{?>u;Ali8U?YMKOlcFY+6<-Jsu#GxgESg@b3;E@E>V;E#gbLTqyRI08 zETmP7B(_w1PF8ziBi)5%dXbCTcsnu+TsFniKA<{WE z>wr0fIWa^7p)y56EDQuS-?-l4*fGBP75K(&ENi?JlqDw-J)d%&7%)CR0U7E_Qg8=ILqW{@gH zCa%~}2q@G|W{jcQN*z(iD8@Fc%&FPD61N#>K#>~EF#sc0z#NFgP4zBeg@<=OhOw{J z`+Q8}$<|V_e*U$31;-<8Z)Z+>L#Yz;skjVGO#^kHmNT=nZFQCaHn2SLbGQBZ4}zs{ zkL3U5bv2*8|G~G02ixg^Nz=bkt(?C-U}biK%b)}@i$VksrOX&p$%jBs+_UsW0C-}1 zesqugFs}Ujn@ISh;piW>CD!RgXMBBOftvXx`suYx!PRL{m%3nvnv^Ot3QVMGk)OKv zhxYLJ-}?K@I5gM9!wjbLX&c-@aQm@(!HbVDycQ(zl1V=%VT4%dbya`=5QPvvZQd121ji#TQ@1+}zwO`MWv%{rBIGjg5_) zvfM2~Jow;)w>Wb1ylUN5a~)A`grZCw))D=ps}$|A!-zxWn8|T}T%o_s;WvKwlh|F< zU%m1@Tzhc&mJa{rsVOA<>>aK59sV~Tk*4+&2Ru$5JBb@NZp@rNy?ul}d-m)s-M)SM zaQEGJ?H56bsViC_LUOQu#a5Rj1!*cB6h*$@var5uao<@IC zqd%$evtRk{JN*6L&*ES^+mrdMNB;5cz5M+a_NSkkI`-yP#BYCNfCpaM!moWS!@|PC zO&EH&Ei5d|82t0kKR+w`+O=yl9)Bwa&&-KNOU*PPj$XACnueIH(%N08`4j17KNxiK zXyeY8f8p?(J0E`XseeO%T;sc6IEi2U+c)vGU-=l!^dvHjP5hN4^?rdz;P7R##W;)CLlJ>i4YYp#HMh99m~2(rcA$kii%{O%*)`RY~R(}#a>p&%c| z^N%jrrxC3e*xrt{Y=(Vt^q#DJ<@|Z>9$Vr5#mg>f6<(tz9*xxHNm^S>Eowqhy%0Nd zBox(y*@M`_>O{fQfFmOYM`j4ADFY;CBuv`@NiYYHfWT(TAU1*;lp@G#BPlIv$qr*x znlRZIph8W9Fp;Sys>lIqlAr-dMmD{#16C=~fD~^Vxt^!$Iwtv+yKR5*-kg0~Xjnf! z4gCZ<(ms+o8Wz4H?>vbMR6Em3%tRcC14mC$ys0LE)jRQG7KMyBGBH9FVV0=s0ZW)T zG3Eqj2|=fgG+l5a%xW+SHJt!Ff?)(NBQC-O9z`@Cybx&|CmNF+o|+udf}o)>W<)|T ztqDAUqYXy2L1BI~rq{=#-qHH|Gxl8#uuU{28K&%7j&DqaeLi3*9jiL2xpbbq3lJw% zJD7-BEg>?K5VH_*h)gUlnq?qsfFvhaHiZi$3_xKKpn`#MgpJ5-NN}S%RFf>BVp6)2 zs1CVfROFpQ%t+BRqNV{YkYz9ubrw+D$Q*B4tTvOf7=B=J;pPT7L+i(nQ*UvRPT>@; zv_btG)cluAJi22VL#uI1OcQaLuvEfDGT~HO#C3r(u$nRXOqfeez}8T%+ki9`mN9sW zl%RDqnmE`nz{at*F*_?#NSUT-+3S_@P^-|bw;Uz=Q$m)xiB<`*W-eG>k!2n%#tImh z1RIxi7$r@ejCx1w^DEH*He26~nhn62?MUkN^Pt`$=;LkBe_VTm59W?WsiW?O&?I3L zH#V%D9)N2MIL3s@B@$!sM(U$k>YU4BP2MOlLuy5sa6};vB`H;dG!0FRV$$A-{fo=G@lD3M45CX!cL~UACNLA}rLPbPW&|it#KPdU5h&Yid z6r~akzuF)~+q8eQm>GX_SlKhPZ(n<*m3NVQ zvHzZXeC>HbhxZ(yx#?-_o}8uf47k=)lxj zn&*L9Dzi=YlcmlE8!RN-GBNPymm8m%-s6WyQ{?yFi~YlQgv(A;Ucl#Zcn?N2IdJ$S zch*NXjpDW}?omR)BAIy*2Qr54@RSuAGw+11YGba28cR}+6P9{vgN5YF69e0}dBKK8 z9@WWlk!Ij(%9@fi8F4 z`1ExSJOexfOkR`y`Q=?cwF8brhp=^bt1kd%vHRE|nxE>@`1BZS)0F}DLYK&B@J znv$uw=Hwv<)9gh|g{M5QvCNWGib{KPeVduyV~6M9!^D$csYAZBknK*Zyoh#BPSX5| zy)@o?hI`{}9;GUn1_jgTrT=m>Et88c5H@W>y~q^nMQ$QfH!!6@lq#ml2_RK;k>Qsy z=#G0-^O)VMY+fYuRAyV>U2jW`dADh2XsUu~vS7+N$bkC6axN?uMQ|(Gy>yep%?c(C zSVifxyCaH{x~g+Fcn+coCdoA?7HK>;$;y~2uXD%7vpiR6anp94KLMNB2fqh!TICR< z+!L@)Cd*zJZ0v@yx>Km;BDs}h)4tDqMrNk>(c!rxJo2K|4`tUNk}J+K zK?PTYHbeoa*3NI$L@GoQnInUm%*@&_1!7|&OGJS$HhPV0g$FUq2Dfb1?MAiiMx<&< zO+(j$w$GqJQE}HMg(Sr^u#$^Vnx-z1cR=X4a{=P$tA>Nb?rt!UD?4YnB_e9nxMAel zKs6!_a?N!y7HX;M#wR){%qM+Tdb(}%f*o7h>%c+GViv30Ns1~`)rk$XB=$~QkI)fA z7vvp-m(E_0afFkAmEDMl-C-~gE4gJjCn9SMR0~mU$ThqeXel-4+;9kuX_Go$=gP*j z6xV2PGi>T>hkSl&@0yPJQaS*=_p!%f^Ta06tzGGIFAS&*EJd{CT!gNKCgm8N+wjDo z)gcP0oi#-)5OSg{#AL)I#AsBq5VH{zXEq`d1tE+kD>IM*XEE~Z&SFHa$fgz~Bb!PL znb&FAZ+V`P&J6Ex$q(uVCw`$*Vw!2 z7`tF}ltdIk9^oWJASV#i0AgczGv>^&?C!}CYO>To!T^qeL2Gv!1mar3HHFZ4&cpCO z$Sjjr75?dtFMqewo9l=1>8(MVx(LwH$vWb(%&=17C8@xq{E_RHj2U!BCs3CNeMcPC!%P_P_1#{;19p~n!7i4 zmR4>EB~+fU#iRM6i&RTZrZjzN&t$lzCbhoa`c(!dQ0PZy4_-2;RJZdzT^Ba2TMW98#uj55oIjqi zb!*-t(C2;?Hhb`(&(6*o0EBL1KF{VITXJg1W9V2TX3jA4+&Zp-2+U3<1PbmJKwud7 zAAa+uyX(dI=@+Ze?CdPw_w}=k3LIeeMwS)}@0Unu*$gN!3uLqUdsJ`VzI2%+BnANkFPf2n3iCIg=Ck z^S^i7yXU|AhD}H*< z!LyhA{*!Orbj94|U%h1tkDMIfbKk8lQId_ygWu`l=)&6E$;XEJA^C4_{Wtc+7fC&Rt8w4r_VS)xZ#U?ikjp?hJV)<0QNv_jSOm0^!J%e5z z2SS0O-vf8tB*TndVNi;kDdh~}eEXhjKV4@Vf72u1LX{MQq^PpuzBj)b(+_-gjVF&h zyUDGg8#TnC{4a{)3!nZ3-v0jgtZ0}n7KE+9DPNw$?c2I*GV~Y!{-Il1b=#xgAK;(A zSK-5NTq^`y7YX;j;ew%m|7+**i8rlZ5tCi)Is3oa!&E`|qnR<>aKjB)SXj7fuimt2 z6V9DGhfSL{A?FMcxx~<`5r{Kq&Ro&RSGsoNv_auD$OmLpu~?OBR2;a9oymb);-=ee zs)kdTKLMMXKZnU}+0V z!okmf9B2OR)0e&R$@{*Dr4L@J{Q3KP|M;>Q%DevKEUN7I5SG~STvBYGHMGWWRdY*{pPn|hiwK~>jh?6AD_Zv+9+$|Vf z!QcR}Wy==qc<5U%si6Siqi=Z?K6UFf&JFa6wAITglacVzH*LUQzIg-w;Oh%G)o)eS zzx&!T{NaBtuBpr8=Q8g9b{`*m<0RZ24?OSy0ASm;Z8&=LC{CO>@sc{+fddB+W5jD- z^O}`?XV0F!B&0w6^wXG|o5PMBJ1{#tdsX8M19jZdHRza-bltp*=pAJ5AWg z`IXP%OTV!b-}%^|V7{NQ_2b{f#=m&%0!%hh;+l!_vIakO>eMASa_rbK0Kf-6@B!R+ z-+j2_jynKgC8U1nLmxu7+dku;dg>|c-o1MTM*@KBufOnG@Z^(EVtjlY=gys5X{5Kk z?QNKxoWzbD7c|xnKm0ImyX`g{J$m#K{^F5G9>Mzc>n|+r@x?FV?z`_^sn63-x8U6U z_us#QGClg}qu8=#%bI(;`R1GP;DZn1uDkBSjW^!7vj4=16F7eScq^ai_mNVUa3KRwmZ z9DIbFNRNcmBkN+8;&TK5-oHJ2|j3=BS)}h{H(_gr4NO z3URFJ4+f3IvUyQ@V(9U;m>)Iu6W1&>pmYnI5&nV2Ip zW#ZbCP#}h7p;3-rn6rX~iBvO-wnjH55(2praRjL;lMxYv0Ty=>hXnxzg9Qc!N4u|u zlTC<;$-#~bX=H-8icE85rfl#G=j3LIm>M@rMBKnNfw+Nja?#`_X@o-&nU=xKVn;{d z3C97$L;|JIq!5WU5=$W_g}W8*RuFkKqQJ1AMl3;Ku0Dc73{g?>S?Z;KFw(x^M%Kd97(b4+4doh0kv}NM>ioAV9jN)3LI@jV*gGjU* zxe6WOjxbdXvt(wD18zG?yJ~B0Km`*i*QAN4)9FA7&_rNuD0In_62UT&lx(>QA(X+A zMvh#lTEWDTK+$2*$bvYDIdPjtHX>#>R~KS6aAx-mw}yxsWlnC|5OYJqjhklIkODL( zPdSd2nfqC_%9_foBMc0H4+^HqNE9j|)t)p|heSmvC`3v*l7s@RF{?xdMI#et5>^n9 zK_sfq8D?1uuB}ORMhk(&ST-XMe?xbdVivX^tst9Tscg{2D^sjcvTF$0mW*xT%NDV8KWm{ykl5H}IYv4$YWD4TO z;+}*95i2tQ%H{x>1rL^7)ruyM<(P-Km(B0EHqV@aVHS1|u(J9#{U{fGA|kpR)U%o? zZ#zi)9GjayNVAw7HWtu!jw5Xdp4o%t?;Xdk;n|i>2f}usHy1GKFvCTyDRu)56$$Hy#$Y`HbE_vW_S)cheF z+r6~12Fz--dX+O^G(H-!^W~Z2^!##%I_o3HflwF|UhXi3dYPmV&N6!JETdbDnbzuB zWn-SOz{!SGuN_-D=(Dr4EBxH3rT>S$^N*42IPUwms=D8Mv$K19%i}J8m>1I&P1AQ$ zB$Bb{$Pz`zfG7(>EJPp@TM#41j%+!G^&^06!vStjl3^%LjKH$Z#6M#p4h%7fj6jwh zkV#IGL6Ne~WZ>KhVu+IzGCb;*cYC+Hvor5?S5^M#nb}`=ydzE8f}#c%`(tKjdb(bB zRrjm!r(RN{zt~*)i$#pv2u3^H#)(6i#0}nGoZ)JtreVd1ec|=t8ZTghx^RJU9;jyL zF-Y!HV)DRIG$MFhJ@K}l;=q>+=ijSBs=z&xjB03%skC*G}O$W z<2b6Rjf)(6Yutqe>J8Q@Z4$*9cK|-j=Ck#j4boY3z0MXk7QCBneXw++E&SPWtiJoN zmht+$!~0T-9m)*dxr}cu<&$Tz0q{T+l8Pt!JG0gdG} zA&-N@K0vLy2X!B*+e}o`VYXCf>w5E(Ww#9S@Hn1WUmxd{-RsLowgzE0jA&c#J0?<} zTjuVjZhg8uOPE<=)q$7=k&0!Mhf*<5GKsx2cu;o@rnxhx{WF?IXB}Zq7dEnY&$Tw_ zZ`#V@AzOTja@{X!blR4*I9*}^;K=1)Xs?eh0*UQQ@!obEI1WsFTq&Gzx0efH>%&c6 zdtvoBKXq`P$A?3_d43RVE^>t!%vjvJ&}QO_+k)k2YchoyO{23m z9^~O8FTzRwJ8h+oM`?I7bkqj-`4FiKZk=#s=`v4GrNrD!D$~4a zM3oX}jaDmj)``erbRiiI-=Nbp=aiS0x&%ZgAFW=O9mV$uBy)wi5%79XmFe;i6qndR&F|(Mqgm z7Xo!DlH{t80yQ*JbCSfCw*(l@ZeUY!$?7o&6m?6BoNM$luYFxtc%R-V18tXXw%x)D zTmcg8(%#dZw*2MRUi+Cj(CVp^v@u&zQRQz*l!^rD#_1bwmoAl{X@!7mFp0E_@?}C9 zo3xTnRPWpGO>$pZSwS;@zJk zM$;;>M4=qqxg6+}d$w>6Rt`m66_Uj@t81>Sxh_L<8RRz4pr2Rj);7+M?9SfJx;uw_ zEAZNTBdW)htcOw6OSv-D$}CnS5{We?wHU{JG8#{=vI8_^R{>`iO|Fu7Mmn>cJjZEn zdw;2)yY<$pxf}Izsm(8Brqje9WV@^h*ePvV1TY%olUZ7rit=qV(_|(RdTJx ztv2(Dn4@J2#I(g3U^h}x4wlt9N3-NXl3PyDkSymU^Py|ky4>h6uP^p9=5Nr$XJ98* z9`M5_@AV@`CbFin!B>xSeQ=)7%VrqyYzUzjdubwRs_N`khfrizq!wLB029+E)!QBOp_9~%+mR$Cg#vt-EB#&UP4V9ExYqLK;qTc-$DH|;A-wP=l{DVZCs?- zTjOp}bZO&kGfc|dOp_osiLeilZpc~YXw3cOikY&^P{kwCj!3%^q3KQhngc+m?xOA% z8wVxy#YF`FY2dRe9s=A`# zpb=Cx$QlqDb+5&_a`y^cgd$8J1we&xtA%o#G7)uT+!?5)tX&Z_q;4eA?Tex7&bN86 zzn@XJx^aGF2cNoNFGkKZHTu1ua9OzNIM-+9`PuQ^vz&vJ=yN2aN?0=Uw&)YPb!=DHn&{O^oW(Y%N+*>WldbwH7xB^$FRBQ=+5Tu*^S0JHt<--)|xf3X8_9USIos< zhBz^Jq}UYZvDa{}2oxYDrDO|G&dRenxSWr>B_->MW{g@*+}0J3+Aeh!r1f@`bf%ZK z&#b9(cDxD}gAYQ(OF`?l!f4Qd(STxOiXI3}Ap;bn3s2NRV+Nh8!`w_bi*s_f>Wo{+PdD#p#S0S+mM^9#mr6Xp|9V?G$ z5(-GH94&wv&@`d|P%>tzn7!@Tgc%^VOdPo(O(3I8ELB@=%s%2IIK^+nR zHg-y`&Jvucvys-GdEiagM}HA`boeAKZY((t1KpXgGPKXd;7w3HS6Qwr#8_EI9T-JO z$=)N#boFua;Htu2jBX4E!`P4w8r>bc6Qx?BY}#^c+dNbCX>dc( zv*(|rg_~}+W5OcyAy#fwcLmP;tcD0WZPGZbSaujlp#4W)?OkEd+OG5+!0HVkRPWWjMiM<%2Uh6Wjn7QiHM*sb+OW z;0&kCR%KT=W>^*gTCtIaieprG4f2K{HHp`RQk=xhqq8%tbdK5G;7)KgxCnuXz)B9l zAs$RU8#E|98D%#L?oI9>+^2z@_3AvZ+Au|$We-tWU5#ATkzH#L8jhjXE;n#A;M}lq zP4LLV9S|sMQbw ziXakEWrTjHZnjkE${4f4h{jr}+pcBu_q0a}45 zI)zYB$K_r)@mRI$=B2!YGc&WnnTW~Vm;v?#7746S4j!2)vu0-&7lE>@t+Lg{jiF#?V$*Vak{AR7xd_}qfPz^ZsxYt-%*jQGT>(-DvY9D_vI80b zGl@}jJLd@i5R8SP|C=3W9Q>c?OvALU4Q+|~*_pvXgPP}-2$gY8BQXlWgU6UrWq3`L8c=A6a$}Gh@S52xcZy~n87`B;97Hz0 z=oRkdU?L(AnUj;31PNybIXQ#b!32o9vz5^n6NqP**woCLIprCSGa)xRpm6Fq)d%Nw zVd*$d;10W#pAT~tQ`-j47zwPAAQYTabPE-0u2oPANp$lFawaz}ksJUmf&mi1K*S_O z4mKwK{Wo3zJO6*=uJvB#zJ~GdykmVWk539B*7$|T`M|)0u+&Gl9%$hv;MlQaeqv?C zmrtJb?S7s|YeXrOtQ8K#?pfd@1`8Bo08{jwYbL5-lVAl6APuB^xuM67p1byd@pE2= z_SdNleYtbrUh1ZGT}jo8tEa2i|@#=#T3CUEUc)#mA^=l}hiZn*#B_k7#0mvxJ9`0(Lx z*n#>+HsTBIn^>+pvw9))qHGT10Q~^$lM_oA8y-``2b=}a2e3H~!?!7n+?1S!*qxk+ z;Vxz*M8*ywHX|p{13z;62Zra)+;FiDe(6hJ0*|Bo|8nv)Zo2kreD^$m%ZM*=-!!8a zVLaMUlDeTd7*bOYY5l^}cyu_TgR2+p#GyNE`6v*YeeP}R-p0nNV3yPkNajvX%*Nyf z;_2Hmf#AeW#?GMMf71>B>T(@=)!W{MxBlF(;4j;NQ>POiIUDfygMzsnU1NA$T^F6W zv2EK;V>V4=wsB)8jcwbuZQHgQb7I?>;G6gRJGjqz?%jKzb@pCs-Rmjy!5;V)qjSMr ziug(5M5?8)kZdg+036T@J;3D=NQ(l|xs_%qXer0m&}gowvfs~bxPxTiq!!SD-iHk9 zE9z_v3+LOh^)x4Fks|E9)N|0I+fNg$qj%rCh30{o+f<=iP~om`ZH#8}#I2p|u6XQp z7~saqXPWHJK2pdlBXt2o9;X7SLgu98LT>Pl&gX3ku4WXt-1+J>iW|qBlmjou4|l5j zF~rdA>0J`;#GeZ^pb9^-{Cq@4d>)&rx_n;W?q;~8JL9LPVmF7g7@o6>GSsW69W0b9 z1%beQ(eFTAb@kqper-9iv9P03!@pkln}E^Tf$Jnb@mu}8GrwJ<5eD1qC2T>Pg4E< z87vZ<8y}#K_QXUnSv>vZ`Sj59F-*%J8NZw2^K9+;aP!l}aeqnonWx(4;cS=+p{=!V zik+8sbF=%Z9ah-gvd`!3aE$A1<7j3lrQ1dS^?67VD`DGbx8dme>ayKpX78!T`}6+j z>239e820mEd0O8@D|$phxHI@*1XjJfDyGKk!ctvZJF{F`cT(2-e(t9o=%Qs$CFd1u z>vgH+($$JP$N*%?%F4PYc;z;OT}2^#><4MAOo2dVM8)0OwhUsZnMTnzovg_c+}8)6 zJAaqRuWSB0fuutHN@b6&>_~$)Mm0Q+V!%=C(G5!9COlw1AC39E40vuL^@du@c_Y5J zOxykGOsKvY*Fv~W%&wYpu)pnK3rqU(dOA_x`EjGdoLV~o1YFnk@N+XC2$73-u6!d% zy8VhO^bGt#kJYgrsCq-8EsrXXrLG4}i#qLB`NQ-p$G^&C<0kAW?rxeI!_kPnp9{CT~9m^}A6^F`QwV)70y zuZAK0_2tFQbLPntmBjP9FN=QC(EO%o?O|EB$5f+7J%dcTneZ*<<2dHJh}Fyd74&HF z)dPxm!3xE9oXo-b!ruhQUDm`-8ah~J^5t@6 zAj6G47}gh6z#d}Y{Q21OX@|IGSXDQCCOz_AM>hEzmDH!{vOYi-C%k!RvH;c-l*kc~jGV zuNZj}c&v-@vYOex)V8?Ra$z;-Hh6oZJkp7m1gUkqkbq-Z*!vMtOGEgo-53_t)7WvS z=3&J!=Hkmf%QDT-87dKvFBBXK5Zw3ozaS`pw>eb!yjQ4eZhqWtvD%LdrQBeoh#n+L zO(o=ct0PIzbzyqp9`^lM;?F78pEGny6Qs|#3RCZE z16WdOs5=WGK2G7d>j`{byMxr9SGqpi5S2*SV{hRt3MrO7kL@q!jUQ`6%E$Zv z6q@+6@BZcJj%0LKWmv_RI61i8~PXXFck-U#%`J+ zTPC}+KXz5MEVvGE{O5XFy|zgLP#boqK2Lmf=dT-*^qMgQ-ute$?^dR`x8FKR4_hv~ z34|Y3vxMxFkIy%Acq4M2&k?oYQ+IDFng_TtyqT-Lk6xYhe zM&~|^1hgs_{pp6Cu{&ilpR$=nd26UhdlaHLT^e$V^aV0~R#l^QIq-Lt+XCpF+XwWy zwz*3BHd9h8(DrlN?Ta=4Q;N;=0B!D}>+{cU%Ne-$7kKOc~4y9E`~^Sc1!^^y*wL1=3s#c}}Yy(Aqo`a!9 ziV$eaDfX7zt=}xRKh&8g1bECRc_4&`3wI0G7`Y`y9R6|a}VtDYz1yip0g?Vu{unXR|z#|VEsM|XjC zcXt~(PT_=~Mc*c8-X?vJLT^w*2hb9ZC144#9 z*(|5mn}@YHNv>&^VqWx&|JBZ06bxv)jc0c(P@k|o4C{W}sOcwSRrp+!ckZE*40U{h z8jO>dAr#(5bXV`*E;<*-;JUyo0}tfQ1>UX)Y+ba$;o`bjp#y`y+LuX5@!yBI7eBv1 zfG7E9)7@S#6QySaPvBIchO@4x?S5F&+PQr8BYlSGyos{eVCN)tKh8UO>bPvToPl4@ za@h*wzv^@_mF3iGPOWj9vb=7a@j{XNcg`E-0p6y=Jg&N2#{C6dE{QI?LDroI%reu0R{hE=+yfl}{tOk-|B6Z$E5SQ#sv~Zg^Den+vTq$axpYF-;fw z*4yFK?q6&|m(wAu=zTGG~LjS((7KK2>6?QWRYa9%rvg(7m^Jd0pIm#P+V zS7=>>wft2m4y$`(T1BE2jgbiD2CNDY)mDpC)XlWSeMX3vSo);Jw`bb$X;A)#6brXs z^_g~Og*qQ+zOJiZVde;F!7#1pSzOx`Npv-OaXv(%@u9hFY2@j^yUfPAHdc#EX&m0K ztrD{Qy&qG({L&2BAtk=8u5nuQx1*8QV*6!w+@<@>C-WovOy@4x1**5hrpyJ;lVg1w z zAcOZg#+94an#_B25>W4RQ~CmvwZWY8-HD$u^P4}TSKxhdqDeAYy~4TKLUkBBv*n zm1t#I5EOf`6rfg9kDy^~G?k054!t8au@jWO!*EGqiwzf;hR>$NgW21wPI5ACA{|?2 zBrB58?<>DY%L^t~j}?-M$ZbpvL37)&_DjHprhY-W4I57cvbj*Cs<71(@EW&P1aM$d z(-|AekV#u-(*SePbHRABANeuhQ|xhbjp;x+`-Rx|=K>uiWD zy^L1F2OXG&s}R}4#(h*FV|fi?-vfFbRO3j?K!Q%znL9#U1BDB8~qN}@=y$y^qhvG(!1D3F~36mnxBEmfb0 z;5GQw;g%I0%GfHzFR5gc_A{Y=lWR1GuV6yJU&8MziRTaae@E!2g2ED)669=zDxC_9 zo=PaA8ch2IqC1+pGs$ZXkl|hrQ@MtVCV@$g0oKSycH*IULPF^LIi723z^;0NWM1&g z){5!Ox>);B`~my#QS(gedYjw<%bN2lSIni2&~N~gaT%)=Z=Ejgdfzm^7l5yFIB6t) zjX~S`%P((kfdUf_H@pxlQvi*rS1PpcaPaHWJpW4C29}}(xk!W-9nk zLWo#Ic|lCjT|1{bRwpmLAtdWU@fO zNWR~KEH1pX7P<7Coq^#%DwIat5gB$4fFOREwnJgqsBIJ%zQCYXPDhrWZxD)?6rX>t zM@!)Y4aOw?$ z@DGm+2-l;PtuuUsdyxCbYZn7@$HEXvK5coZ;ZF_5SU3u37gS%Y0!D2JYSHFIesK#* zhY}*?Ma}69)5(69)jsN#)0Gs%moLCx85HPlp3qut0KZ?i7TY#_#by5Bkz}Kg_MW%i zDXeTBrhHsk?Ji<*B~Jc^HHOLSD0AL!o+)`v>TJ}WN%W)%@jwtZ?-#pYw$w)03l>m6 zX~NMEE~!($szE^S+a6V6fc4HUN4p*T81mJcCXdC33l(1}jFY>IcO1q!N`hjR*EX&t z;G|LB-C1XIQOuSoGpZZ3hPGmqDFXvpY*Pwip{d~^nJZ%1DIw{dprJ8K+oet9Hzlc* z2-`Q1{`HrpSl}P~)v>Z-9p@|g;LmMqS*=E}8@d?&aM49N5TonuhsX66vuBZgzFYWF z48xSW-YT-vL%OMloSO5rrMIaA>}SiPmGO|2=n{A<75 z_a1LA#FW>`4LeQ2#et@VkmJ>N1r>I0qnvf1dl$x4SfM^`Tzo5{idpJ+0~v85;^YF( z4pTL*D7RwyHva9?)M(?yji`2a1eL+#2{FI!ctpJv%hu7MTEx3QuqKFteDr8+&Zvl{ z5o{K+WtqKq>@ChHLBGbZ*11lrb#iB|W6vZD*M6F>gz-BRGU>1*QkjiI_yxESNJ?go znGSnefH+o@MZDTTxS7a{DBwHrw8j7a zmVoHvc_@mxS5Q?%fbg;b>k+-7rr+RF2B zQvbNkbmgTPWAt-f2TiZTGF2?NBnTjHEv4doy+teekC44IXV@r-?);u>%M7aRXK>Vt zho1+_?(li`N>&;aCw$#O*kO5q)YlnnWtgIArZ$W7-z(^wxjXQOy0@EsK(W zo(?uF{S`Rt6&l(hJio?2_a(GBntl_0+!7qGuP7&cpW70_E_=X)m*IXa0$05X#F#{5je7lv;z~?#Nc>d_*)F>Fl#pu z7IZp8+(RJcS^{5@!>V3nREju*+l|)ooFHxS=x8=jq3Gh>c+GW+@pXIsQ|3Ccxee?B zJUTe8ejO%cEIeJp&>UeDcZ@v=?jwyvb+ChK9cHogvNLSbpH8*oyI4lLH8X*(XYN)5?2o25PP4K3 zF4ZC3iJ!!#BEDXP*x?Q3K6V#0^>q?&;xc|O;m|!USD2>GxuiKKWK`Y!#YEbyq9X6? ziLwr5D7#ZCqN`wMC>V*-=c3z8eAZ2L3T>r(ml1_D>9v{8akrys!uejfNvO)(0pT$bZsU)`)hj&TZJYUmuG3EaSJ(3xJ~QD2_@R zBVvqa_(+b(eAaE89WDuO_)~_K0bCTg$j@id0)P)I+}`RxtuK=fUe<&}YRg4WXA{JC zicZvn1x|;Qyk7t04e5!QV2PM0;5+Kqg`;ZO7E2p22wx9f1u@b9M); zWDdj_yZpCOY{uors1Yd%j#jLqh=GFkh&HJc66ESW*<{$JCb{n;5`6XMjH~t>q|Qcn zTaNdlKfOosQ!fmfp7N_YT0nKq`;-suu(#;yl%^5Ivz~L9I+;9^KZI?W=leCVg3=HT zq`VGAw5f5H!s*cnF@q$HWDB+DYFE~5F#}?fa+Bu=J*?}#B3c_V zXjL`u{Wcwz5cP54epygHXh8ha^DnbFgpM>2U8br zdfCb=njj5(#_#4ha?GtsdB%(L;acpaW!09B`%LD)%VHdj_MIYNLcJ$1j>}pa52YK8k|_wG9qGcmr+F2{hWsj0jc zX}Dqr6yP0^R=u0Z3}(d}}D8EbxwSj7w zDuH5cY$INFAvzuogCsLD-_3IqRVkdQ11?H2iC|3U4;N&Ua|tZRPRa~T4oa5a1*=po z3;t!QCTl8tt5Q*a?o>0MR<_K#PI#`hOa2NCG&A+vY`~5zK4D};(`HNTtBIN}$(BqD z*n89g^J$4_P#P@g=P|xvv!9tN9l9@JXBN@b)2ZNSO*=5D-&R%#fEen~%I7cz-i&fKuVm2pzaY$D~;Z?B3b|H?UJsc4-2zLJ{G7oCB~8*gX3{Z&?ZuzAwb(63a;rU2^DK z5L~b*B{)iTVW($iil5f(H)r6vW#_e?5+#SQTU++m#cv~4!RzYiNSG>r?g`F_3wMFxw^fc;t( zSs5+)Oh$4pkSq~0z=8Kv^JHtmA2Eyvegj%jX##VjH5>L!VqXzsKj}3}jdK`qyh_)P zrXHrg8DHlB8CKqIUmIv-A&L=ShDAPPhQNVb6SW5!l(j&j?HiRfjQ!c zg!ulcp`_%3)CIqb9J%+W;eQ< zip?=RFLSbGs^a5b^OC>z!>+L?M(drCx%hO)OKC@bbNyx{r&pdHz^cVsMkeRMLJ=>; zM)~DbspVcUm&QbEC2Jo)T==!FTFY#;6#Yw8X4_vpF%!%LI{XEN_r5`)r_>XZF^X9| zVDBJ#88#&G$t1y`MkEs&{P(Klz*=_>@2X0+Tq9+L;Tpl;n{I@;Q2Ask)Jn=~WVml~ zzvw%t{HUDdcFE1l=yN5O+{FOE{>y`H3+F7= zZfATdkMK`Gd|fux ztVBSyKxypK?3^m;IO3Cs!nx{>s&yswMgH1x#KNa8uY!7qWth7b$K&78^GS`2^}6S3v+`>r=gW*Wr#eY7mjm=HN= zRaBMJ&>-7v z0axoVCK{SheBPFN%Rn|GVpE@kuEFY0?F#K%ADCY)rN{yFHP6py%A=3NluWFj1DG2i0-jNw@TdI$zLM(~sRbjT?hIS_M7i8Lge7)Y{* zSX1bcP)PFAmlE<@~oY7DXgl|>QgOK*3s%HpfsEP>C@D{3}t+ft{ zcLGhs(P}>o;_V_{9DUY@C_V= zI=!$qSMbw;*XS=wLZO#3!4Jv=T zQ0>p~`mLPqV^U)fNx%Hp-Z`ONQf=B9HKY~R4ItNsTuPQS7|JVyM2>ER%mfEVfrx^jJ(6|J z)?7ZFiHAfpF~PQa+Z3}YZo(ZhfJOF=hX~rx#latz%pkOGccc8VH#(X z7k1~%zf$WmI;!#z@x^cnRt!5CuGA(*PUgk-F~OP9ik~c}&=yFtS=jmNY(e%x)MI*4 z$_XWG6}N+T3`exBR{eMgY>Z5{WDWjt=KLB=+Wu@zmcAyuJP=AcKIf_)4zUTyzyEX< zU+tqnW$q~YLS^t~YHy|?!y4L8}loRoE1 zLHXh2=>AG^4LM&#$NVWn<6wCP1;W_y#-L@-Usz&QU@39|5Z_AirF%6OY&_w7p? z;p8ttwlqZi4P*!$rc|h4NE3Erg5$J^k~RM_EHt@7+i}E`tR1wPPcjNc#7QO-oJ=rj zYce||W^zyjX~uDZ&eDkw-A`#k4P`k&Il-F3#pIic6XiDwyuMZ9{{7QvJ|tUb?qGIa zLK*pk#V{sv3fO<(uW>uPSw@8gCrZTy54>N`5+Z~v|$H10Cidd!9Q{T1`G+HU* z!*6yighiOrj~wBuUD~<6<$4qleM4M0&?uvtSTJR9kZ_c!(9otRvMkoTjSzXsNKl-{ zQM@JR*BsykShcliHVu#*wQEm9=-Uj7n%pGHc1X7(OC68{TIdD21M1>i+l>`$PRIR? zzJx6%5lb=u^AMAziI2_w;VXSoR<0fP3(>}MMw*KW|F>6DH2zKDnDlb8)|d&KA>0AW zNExkqlWT@gQHH0rdBY6Lxn{zeDeDy!YY$0P$%SrrK|ohXQ6?WRs)H=fyygjCi>xB8U zlg;k<1FxJA#w%5jEKyS|k4$+}@^?~-f5z|rA?Or#sX{C|X@Hif6%3kx1~v)`3gUOZ zAu)NYHW6s3#0nq0(J84Vqj`Z;ogE2rDmFSln6`VwFBGu^&m}f=q#b3DU@LNENPRVG4-WxCrxvQyN)w; z?~ZNt88Tf)w-$-6I4M8@*M>|kntD&pnUkGwLP9!6S_7;pY~6upYA(x|xGnnvCLTxG z8eFMHIl!0h|`@7IR{|^~Et`6K0zOt_Qp+nSnQ@ZcbJz z$Xd)il{8u+@w9IqF{)^%Qe<^H_&=nG&o9Xp$Q@Y}AHQut}3A_R|H;Aw+)e zeHGR6K4KOFvyT|wNI-6e)zsC#VQWgy?$BU0rn47r? zP%essmvY+NGX6r$0=&;2iAioDkss=9pUj(<3{t8%4V8Z=97>EuQW4bAN#co1_u&mA z859GYCkAGxtT=pzq5?+NhR!Ut`VBtg!gp77uhD; zIKgFzhUM)m+KW4BcP%R-7=i+b?g1By!mztOayBRc!9{rc3^wM3HX4hRumbuAHDxgB zlP+7fDLcy#()sB@3!Qb!ti|5bXQ1`h!m!ce=3Ben-HEe_ONNc8jvq0&!#6QqS;V7| z*Rtx~h3&x3Aej_O*N7lS70x1Fy>Bhc@F3|X&xDc6!5D)-ea^-SsUknB>3mb$`Egp4 z?KM2Ta3!~ulLh>dvm%JLuj*hcSX2h#W&p=+u(kg@m=$^Sx6ZJgK4rVsHv=VF24N~O zlG6ksv#G9kCTC6K3G{imgjEGh(vB{jKp58E65;ogJ`Y@NTZrn; zTj@s4syb)$KI~94}gVJ&j!1aZV4lw+h zx@q9&BRww$uPRn*tfBDXOy>OX#Pk-Mv*E{WMuh9oQGM!~md`8nq|?$zpTzb1786MK zZKIg-(dV&4(DO};@ffx0eR zZIP`xOL_N?!kRA|$JTutKV#=3V?@Bl^{4CnecZ@qEd=2Dkh=$8?T^zU@V&# zDs?m9DdUCXfK5v$RAR$X4hdpfkl(>=$-eC_jdmQaArt&;lT0?n6?dTGq;h(@+xEoE zX|v%J$zZc z-0L!D^&0$|{XQ$zxibN0d-Cvv1b7$8zn>APiZab!8m{PZL{r=7^rxLfMi!+c_nzZT z;4$5clL!aAy(MD^_Y@8Gb??Y^BwrJLHio(g=vx4HKA&Sg@c`HUxSfC+pZBwoZZJZyHJ+uJW`}_}ScqW16&}xLw(e)JQ3Jh# z+c+vUkzFowd~<09gx}5>(O4WtAf+#~ItD6xpZKqYCJH#SU7cO~e3`}j%zPdZ@<8{v zZ6GdqnaR0Vog3FfYZe6_L0@M?ODk#L^h(i_~0J+`N!vkr?w zf$os^L~AbUIiasH-m}9c0`KUwK6+#o*;Zr?TXNw#MAB6`?~}N|sLw>^>&cuq&Tm~0 zJ_UFCM<%%_A6Ajs+z8p+?-#nea1c{r@J#24ua&>qrpLy3TEh6`3VHvj z#qQgW2;g6|mQCdmWa8LHC@I40Z)GiuT|+@FcuVyZiHgi^2tQKk#DdT?BQ|SAWzrNP zFp42lWSEP=EiQA_+NQ_t@hOZ&Hn2RES$YoTyew7X(MyqZxq{pCSUY3PIQMoDp~3yS5DBPkPTo1(u=VmbX6_efXYcq&Oe13U<%B zLJqP~52Z&v80+3=s3QVC^pQP2psU>opNFHLp5B7*BOVcRKU>QDZ>I0QRlU3y3?2Kt za?UyrcGY29Qo|hdPC~IpQ?>)SsL8$tuBSn34h$g?ES8B$Cl?iq598V z#A+MgG}A9A2*&d|fOHVdyJaQelF;q?U>W zfu$KW)nxsrjUW#ew+*iX+pAaHb0^^VpKU+>*=;9gcOR##gIwL)_!M9O=^Jp)@IGPP z^<=fp;d5Y%rMjKkqv=7UoA2X8->BfH;r$g0_oTgXt@c)gTGo+98N z$t#`*z@%($8v{OD3^1HfA1YSY-lw!Oq(0XZ^LxSpwOnkT{;oH#M%`%;cleBuYh~-! zB{MM|g816na%j*J^}Ldos%euKt_G^Y28et@)@S<(b{``5?-6v`19)bU4v5f880s ze7J&J&D*-;8`Em|Dh`sx!vuJzU)~N!mow|=N@c% zb-d^DNlgo^ZY>H4k)HtULz%E~2Bf9oTWz$WgBkBfa3fyZpe^p)W8LR|+{&K+tsoSmKkhEzJs1nyYI>ryey_>m|0j1K0n^iJ~mUllal=9fK6m( z@1ss!#0BoWoazKSN>5Z$p#>OfWxM`yTudGs^S1V3cSy|-)L2E8c3*MPapL-G0!RvD&!0hLg zPg2F^9k&CF4ZlCELZDOv7trIy^XN~Z`pXa2&BYfOG75HUh^P1YfA3ofd;DB8A~ zaK>42AL}-(q(S8e7b&Fk8V;Y?1L)janCPjtedZTVG4E9a@SomndDMX=f~DYpeuP{- z&Z&(U$}`m(i$$+&{~l>_xvz6s1ykNO++8Mw{GRQj?u4gubfSLJb!A=uMwL*d2votn zzHJ^FhDV2)A&r_gPqY?V&Ow4V?(SWsUcM+o8g9LHxE@%S8nq<;?uR)SV04e$RbAAd z;b*9c@{iIQZ_r~)Pt<>4#dX>t+hODAv0SYS;mYgEIPRWyuRcGn?54Pu-z1yY zy*58hTaKfzs-MYyo3itgJ6W(OjOMZ^(AAz$?y;(n*xl0*1_vYRSR&RF7t3%pb(;-C zbYY*DHaoh)ws9YOn=fZ>K=WpABx=et?%+~oruidT@xf53u8?6^9bV}Zck4BdmPAGM z;cgk&uKN!E2J+D9311^5dCMlOJrLBLXbbzj-cbEI%=WE@GzNR$(%5i$?LX1ge~<|Q z2iL*=tbp{LZdwRr%{D-aTrxUWv=1cRNbQC+s&j>z!ut8Baw zV|?EB<}RFX)|R_*z-DHIo*)0$Cf%m=5dEk50V@uCX$5xR1MXb6?y|X)BcXl&Q(u&p zBPe*Cs@!<=Jb3^B=%PK_q>)NF;L8R`QOL;1{1=$862S6`>i)?|B$l@Qc*@{XmYz5J z|0F)djbqF$8~#_`PaUpcm+es9&j(%7j>nXqw}aNhbj$165FsqUb+tSLk!y7e&5`N0d(Fb)eOSm zYO}RgU#z$6ty$I#&3v5C?7qzSe5|;nTecnNM_ezI2w{6XT@t%K3=RDdct24X;op9l zu7lomJIV^N@jBCb;+3TuhY@xdqO>!pLDcNe8bZn*q9bA3W`)zfFRj-e+#I2Hy0U9RLV^byF`mZDZ7WUKdvyOi_ivcY0@D zhII%t=ULqIfRQ)eyk*@LjEDr1^Q;}=Sip~{?&dfwEDXYS>*KLyZ%o0P%D_}4aNvKs2(c=uvs@? z?G_W*p%M12kMs>f=O$cDZz7r5b-80Js6-Gf-8zudX;}$M@Z@;? zpj!8BQeWLq(w_})+#9w~V6#D3DSnrc!>NoqpU)3b5LXQZ5L`4!|DSs2hNJ@>+wazZ z-v2U7+x?`-^?86aT17$7iAh_%h|=y?@r`NAF0+gC16i;1^?t7SCA{q1CS@iC9ij`S z`Hx9#dbO}t23g8*tUuo)NmTT!7ILaFnC0nf9D1Du1U$hR*UaWoJvEbM_&yba#8b)4 z`{PK<>+iaeg-xd9zYFL4Uq9j$?Y{i(i9f~N_I{vM@R;Y+aTO5JeY>T#167blL8)E# zj(1-Hvt>v^Qr=G;>~3(6Zssd&dNqy&y(S|Rnr`n(E}naCN^#$YyFMOIN^-nw$aDoG zZv$xsAU+>$KEGWrfHRiotg^v&gxCd$9^(pq*>*(IsL8DDx)a3n`F3}cIwAlI))V$b zA+mO&kv{jrEp?VLGBUP;bx3xPtEPKk0T{^{R!NpK0m)PA$j*P^0rJnxO`d~96~*L(^qvNvPj4_R!w2u4go7ujUdP{WDoq6u zbKdr8m$O71mjAfuUu|{qfF)o5MZ+HCi(WU>24Ff!Ky+=PD&XKJ#!OM^5C-LPMhqKF zhUzamr96Vkulw!Z2T%2+j*XWqK8&ac_X;p9mgIfBR}6C)zE=EjO1&3@Ct*9ES*YN zVsbJV6peFKjTFTQl{dPtrWP;7Id%&=pem%4%+h6rJQV&L%k6p35$f1!Na=dsj(%9_ zc^vTx%V`I`?2(NSL(Vkp8f3=$Z=1| zcM_h{OuK+z$YKPeJGTL(fbw!k&d*+2{teRgm-fsa|fusBI*65RQsriII z^aNu=QZto*NFh=g<6x&Pw9U>pCK@*$cWVQ?j&=SidO1lR!424T1$6Q#MV{z%JOxJ3 zJJ$?W#S>P){R??J`}uk9V;JQ>Yx6v7dL2reqZ{BRxx5VZQZa3n2PE|ePzIOi zLG8T9T{&5jTzYreA#uhVY2`TS@2MoNw+B-t>sGiV*Irfyzp?>(aBuZl{N{|#JkC~k zgh!%x5zBMULw~)G?oYZqO}U$jrPI%$wYFSgZ+163+1ZK9+XXbNq-DBC{n93?ZEIj2 z7Yw8O#RfO%+oT7fS6H(+Ost1Vd}L8S&*n}^gD{jv&INYnLK%W3Ab*NQPv{e%3o6Sn zM5Jd*h*;zAhZN1XQHpd=*yw1#eF(g|Z+U&?-*$D?qbpc{x$ZBnj(B04Ps7FY&=TRf-6objJi4p6`B>g zDL3DDvNVlt-x|t^039DJpC16*$f3m@5xfMPK_ExZP@Yz57*nJmLE?$O%w-t1qc77Y zZfjK}m^@@K1rMM!R7UUG9%*unuZmg?ep_HL{if`MmVrsw*5;uKrDqsmixWX4NmIvH z;-^{Jk&&=2a@UC?Z{(sD($K0>MV-?EDB1B+n^+8|XZ#-kLqWX0sEaZ219YhcY%<3g(1~}KMw^WRcb=79q0Qubf{QU>?^#DJh^x5OD4f;L1hkESu zfo3~dkA1piI@CSHjUM|b@Eh4?jy>)tX3;(u6CJ8j2EQ^<;1(r~9BPq9)|dqv6XlXP zL=+fgDG`bS!bFyk0bM^AqH)7egIG;@w39d!ktrL68tg-zv_?10>h~Zu@Km$J60*cn zmij$X*@l6^XYxKHmPXAc8v%yZMg%p0>tok4PF(LZw_yqH8tBdI;diY*Z`48~G9Yc_ zLt}HqW(Fe8f{%a?^v)ceM#Yn!I}wmiRLS&}(}eCzJ*-yd~fkIoMOkE}a{9gPeQuyglL)SljNoZmy(b1vrR z_S05uLw|Y~Ezfso;bFC|HUd=}+cbGVNXtG=v|8i^(V`#b$qrK$x)fB{I!vWZ&`Q=A>_3%Wg~+%06a3V2||{2r#Ty9Vq`#PT{kmks%4_A_DEUfV;~_V zQnQb|5GtQceSU_lX9lKRPY?!jxKS-#By8^PL~dl{u?ctO;1P$c3Ih?E#e z939L6Bf3Dcwi_Xci)PI{OA?&L36g1#h?@#AH6Rxvp{&>1$k+(jl#I>Y046pwbC*0R zh9F9ml%&|9IFmBPVe&sob2tJ%za)thpjd6S9$#2p#wDC z66zO1lLb??#8eebosgI3#V%7@mI+f+NL`|q5T*VKVPX=gPgHW3QlAJDfcA+>snyMy zs9=y*M9O_CgzD!t17M=SL~$jv1>=$e5k-p}D6@rR%tA-91LstS0GaB$CPFB{ng}7l zH4Ri@1M1f!Dzl+>oK8vzArps0jg+vQQv~ zB_Scs#9y=UC0N4XdE?cym(S9GDr&?W>Nc!HzX1+78y?GCX5@NZAspE)S(42rcLM{K1fx;G>chOONR&>v$QW}X3$w)q_{$a z4M6NNO-})_ON1$m8HOZ8z$8lUQWB!ZC^QD4N);C|zh282So0ncl_;Sc>kxsc1Ylfy zMj{&0%1BvJ9>^fh;f1Aa2%OR|)W~54)(b1hiM94TOiZTC6v$lJhiok0OVoLZI;YSWGX^JfOAJfq zmRvXrLIycBMQAF$Ov|E5Bc2?mZqNqgjVH&|;~>w%lmCI))_aTXR|6jyjqfw?0gQpa z@%)Ve08Yp9{9eMT!0ds%K)hS>pmX+0ra1t;!}k!d3H{@uYKaGip%e1= zhD?Dd$ugxLQ!CI2O8_MyD!Dgc0i*0dBT>8EhE{!2&elFOK#xSImy%l~DqHn?0F)~N zN)M69xB{{o31u;HhFeev6B82=lar`vem&y- zvjAoj5*Q6+n?-=Sei|{{P$%D9or%ra%}sLbY^eq>D=Zm^RqMIjnYx=IWx%_-<@9J! zOMRnuP)lw^g_gn0lA8uIi*0KMv%b1_O0%At70JDu%*$wAPMIyojdjnur;Z?-dpwIO z9HJ^Pb(S|`B`$L)SGXn9)JrT}5W_0rM8XBLStW205~{&YLdNW#gt+7g6*gkx#7qTg zovR55FiQjg%y4zUSxmSAyDO4uB2#ur;+C|O6rd@2k%AYA*>t(9N;LH3Cr(FO=qFz* zCLaa4XUWfUUsNcW$LK01OR6-j?U< zYUX2xVV;1K&^vU1=H}+IQP{Kz{liSd&O+1}g8@Sjrgk?Q17Hf{VZ+LRApjkues2&y z0025bSq&+l*0w2CK&K7YilE#F&_*GB;&p0}-d3a1s&{R4PeG zxB)$rc+x<8r1xh6ljlU^>Lg;8yRL!m?j+*oaQ5U*Vs%DbrS|57` z6#!X4LWD>#wdiiaOPHFvMKY685|JrYs-az^UOy>OTS=0#M2+2KEYsSXjyAat$am}* z$b1iTW)D=L9}Dn@;IBP@Z2+?Ozq;;-BjtX#1M}BiSHItIg4!r#o3P3-07I4lEZ!Xm zrvnXBIQ3Lu`GC-o#()T$Fm4Q%4iPp2)pCv6I&=Vl#yDhJxlF(`Fa=Bl9=o+ldk!Z6 zz>}Ql)bQYO^#Cm9p5GB+KQgoG`!yN2xTvk@T6f663e%H$BI zW>f*36*&Y(IyNgQXSc=K;m)oUYuawEREUbX0#?W4K_jxq4%)X!L4%kvn_4s@E^CiH z0JdwXRwQ?AC0kDB)13|8j_!+ahU?Tt=5mt;a38Iz|>iCnA5J_TICghG;)kBd)9GFStz~i$JCrct!5($ZF5@Dib zB=y__t`mq1Gy^vYCc(+w*Vsx*)H5R(+lXJe@{fTgj@ph7HX&9zG1W(|vh< zZwC6Q!?Pb4jgfpq@6Z9l+#IG4--9Nsm@E!b6&Tg>U=#vUbvem2wS>@1UFImHLL>!K zoqYxeV$zC}G6g0gjci;JX&x@D=N{xj!-=TQ7ZM`C!5zqj$b$q^t2{_ysn<7`!h)E4 za-&X>W9(?&%5k=9Fi)k~L|+>!?#uCj&va&dv8LfQu#r3Z89w_k0NCYQ7Hd$?Z>#U{ z)!4dyJFs)KJ$GVFE5B~y7qqZvHhS_YV(7dRF2JwPnN5 z$c`s+$BtfE2f#9dy7yb|?Xu%Nb)V=@dN&>Psn)coj{0JBpIu76&{aQq>QvkJ5MZ_o z-?9k5alXFR-P;`)g1m{#N00aav-j`ucAZtdF#a85JaewK_9e+qy4&}Pkatm|CQe7@uQ9b-HofqtR@z3)y4 z<1|}8S_Wa1_kS&#zI!+A1unS2=R3dEFpp7vn*IFZ*&Y5}(ME#60nH{2HiFrI=+PFgivWaO27Md^a zM)Q1fgX7R4EKix|!b%0Wh62 z^)jMmE7nlR8k0Q8lD$Narpd&Y;4!`g15>DjpR2db5`s>8)^T54 z05D=9M@KYaUc}^ zfeQBHY&C3sKW zo6S3Ep2rQINB8B@eMn>ZxW=mdy%E6In|MrX;Y7988dZ)1knh@sbFWK%4CZgS5e*f( z6>zlrhqf?vixsKUo0W-7DU*>>7qQ<%Xtf>a*5kQ!5Te1I?b(yHg4ffT=PHSoM zVUTa9eCf_Q^3DBhma@(QOFz_g4$>>ToWMQBT=rOHKwzrUkOTmob_MZX4 z3($|mTsvZ*>fW-R*Ae|54tlLljg8z{$FXX62=5skHN#^wt}qp{A~?lWBgd-q~&6Ju=?^~jred>>Wagnc#0 zfvr=ZeM`6VOh;&bYM!UFlPPqCm->rMlagN9Woa?zJjwmoXHn*C0;Eh-EEm#lx1j{m zvKSZoE?Ms4@LsP6$=vghTWLtqZd-9H+ZJ@mHFT?1%w62OluSA7qUwE#Vy=UywC4J0B=ien%9s7KpRowYsv+R=QgHxghkD*rWs ze-!wu&wVF$Hc|IfihG0&++O6+m(hkBky)}nXWU7&TIo>DplhK8<$m*G22S96X;-hG+(H?_MQ_=Cb zMVbP%bUV##8#E=!`hlerxFN0NEGc)*ys~mwa_$gkEJZ9hFeoZ>;DUe_v|$>S#93CY zQ#zAq?riQR)p|*8c`z$ix~|f)R+YQg(6LyUO=N1?idJ?uSZn`4yBAZZ+H@DbZwWrL z4I`%f1JQ3EOlmnA_k1J`F$C-(lX+Cnp4f3zK(9(ot(BIlD6i{0CTGuZ;MS4H>Oj@a zwGgNTKmz{&_@kPCNGJ^z;!J+wR$iV=LATTycW48*ghRnqD=lHH6vBZk;srA+am|-k z28FUDAP1@r#YItov&_ZdZ0<2j8`vecvfJ}qaMMr#-5 z72^tPXe{8`^_!+>aGYWDZfLypX)y;xP&b(xOkpU|$aH5hoJqT(B;GoQyR_y_H zcMh4W70&K%l9?FXB++TdIrGFVZ3n9vcoutV!)rCO6sv<`re<{8JyBdfIRi5^D<^nkm52F}3p!8?a?%88wJ{KtNDirHoX8oFdkN%=7N z_pJi{=u!Xvk=pt-w3M`jO+}WhFOo60S6I4UCZJbsvqHO7ZQeZPu4752sPoofgBSG% zHn>Z$bn6z)J&2i$o5kGnkm#fuS{8K0lg3hw#l%2kbvIb6oWrQby15C|Re9T^2A&3Y zMwP}9ItF8W0LbB?7U5(41cMukdzlJMT!gfu^h(KW#1+S%Q*J*%G!E+dC3uMl_TcL9 zz-B4e@8%lJ#Lc5yV&>%)GtabU<`K2E7LN5=ZS1Hm4g}-Cls|&szIv_hUsImo1HpVG zF8K(De7J~YgcUY0niu!qT2V#Ej$480Q_f!X<5s_Z7|@Akx)woXb~T#}6`QO&HXq?< z-wgn0ZK#SJ4yOOLH*EGf0PTt+-PvM}J1g*y06*Q{JY@Qh^XF67oD^BlyN5aJgi1^G zMDh)6))#k?dIP(&aA0<)sys4Evw0~Ssb1p{9AycW(2V9$a}Vqm-QC$ONM^2XqZ-T9 zV#_d*tCeo6HCD9P*(9qS=Q^AXjOtH8T-MZVO%o-iGG@km+)8 z9jp;-utvG3$}xAAD8wwpUZ_YbBh|=c$qLGlD*guA99{xoOQVd8#n?-Cc5`(@-f7BR zTNIQiQ;%JviepctS_8gbtFjesdS!!^ZLI`j!&n#f$|m zqKLtr1xVFma7|TtRd<-wAtyE8Fx4TAE{+(X0%v!34klGM8cXzCBN9#PWm*^2q;={V zajxJ2*kfTvnUi={9rn}fdzCY z&2bn=M2d~RTzUn3^~DXFeO%)=$4EUqQQ}53OMmHzAP*FSds{rPSnP)2JScf&;zpy7 zZQgnVYwAJf1bJYJbtNp{)~rwE@4nu$iS9 z8_`w`zj}1@4)YAgn1Q1a_NpUrzSQFR?mXvHIcJ@~rkO}C?3yO>dW)s)QmqqU%2c(?b%;8d(&sv$4IK=CoeD zzNNJai#9E7)seN@XfxB%=5I*>&AR*QD!+X#Q~rL4%F~rsUdh8CU%R_YL-MCuTLDOn zt~G%P05jtr?9l&5kC~x+BUN4-fgyGnnvOA;Lae&ML|LIpRHdI2lPMzIUl{_#FsLU^4fyN=PwHW< zI+`gJro^U1xmvlDO!=M~&rE9BwN-xmfIi#xn--6eZ@-VVJ6(CD^IF3fj?}Pmpsfxy z?VHBCwhTVL9&o>~u9GQ40`G9Qm+^Y;k!~+TZJ+?4ZUt2zHGyK}=yf4^yIIU4cSjdU zIq1ZqD$G3Sgol<76Ht7VHktU+wYi_fR1#Ff?W`mh_Qk=FigAz&anRC22)P&~t>sPv zSkhDsR;#+sR$W{HfW#e|Hm|X}u$Y$7g{A6<3R|mFOTB@q44T4wrlA!g6}AfOB9j_B zYUOe&jhyTcG}W4Ol@<#|($*%%aYVm;$GT1V`yx*;z33>aNX>ITpUmcr4Fm^Zgra? zqSO_&?zxtL?g|o(G1Y|&Bog(i4XhfF#bL0|_tj>k(6~}s+1`}E{>|vilV{s_?)ZqD zf<%a+ty7?Vn{MZNVo#XJc&WXGr{ap3j*i%lkO9a^LX4UPuox&XEErix!jL3&Voe&| zDOCOP(q3RFDF8y6F-|USuF3l0s>>{K(^Zz#s~&Zx42coxmdI2+L~u{VB{G}#`dRYh zIW>k@<+qQ-I0kQ4xi!k~}UlrqC81t9z~}n=2HVX`=b~ z&e+#=k9so08oJX-;5|~KMzmVck|=PW>K05^);-t~apGtPXYNHm-J-gUHegVdnt)zd z*IS`wg}RHnTh_KvG0^(zjj2BnRLKI7*ySiwRJS8?D`eOw7icKeG9eC@ap0IVmI#Td zh15$tFc@r2Q%9>nK1zfjhC8uY)PY9#)bpIk8^CkmNa|W|U~!8jnF>M_53!(?2JGE# zRB&5~N-bN_X2Z0`$_L##b%xbMk>P@v`WPn-)%&TvG2`i+M+a|qdeX5VkwS?5G6a&K zq(O)i$VoFM4h9Ph3Z@oBGI6!wVnQU0s@HncSDjM#RkzgBt_FE(T3PjMbGOv4cF;z; zUN5Mri9}LY4i?opQgr3aVq?lz7Eow!h)dtDN{q|P0vKwtsA5v>XinFA$I02**Qi^jR+~aYOpBasBTdZVswqcLnJmW zJ�MwJ=IPXwj($1XQfBp^C1WMm*e>2OEb?^=@37IqD3l(vgRNDwN6 zk^}*VsFpD(5L;&8z|c?w-jxDNrOlnhoEQwQ`{&nv?MK#$>sUrLFv8VS-*|5N##7zD zPF*cI1O4h>N%PjPPmK~=FfJ%HLadl!bsObwn!184 zM~G!Jh{3d^EXyl^SKU%GV9)^ts3&!>rzk83cv&Vxxh9^(Fi2Mg$t-%`J!V$ZCi9S6 z()L}q(6ZX+FLL(|Dl4SuQDmZurr9(Vbf*U7R&Cq_c23%gEHEs%2SEk&)RonkMaZJE zR0AB+=4H3ad}m@asKY9-*V8~;jWn6=CP|~STeKjNVHL;|*t1MZ^$-Iz_WGu25{N2u z)bZfl2wirFNCfP_($vkgz2Os_P3^_~s|IYkrt#SsB{GbV1f>|jni)8tvUVa>fH%*K zs97JU7}6vaB>tdl>SkMYt92Xl(VCxMu{vKlxNm1@qB!4X=j z2}g#cHOnPZ>6$Dd8}r-ENTSA;+ElON%HQEW(}^}lGae(@+;?TKbj6pxl+`7aHA`tg zU`Y92X$dbb^h8=b7>N{!>!~P#+f-`NP&QK_3`gj)?gP56QmWf;Jx@VGG zv|hzCPkw$A1T2X%CQ@z_hl1T%U{UJmx;5H~16kV03FJv*CEv5|7oNrgQ8i_y9>bJ? zE)LU_nSnbuzB-JAl`E4}iIe|XX>|)8**O|KfxWPp36~13+6!kfx<>R=^G+Vu3eJu6 zXlvMm7;r0wGBhdhRu%CyAn%D=kc=cmilL5MkXpuhD@3(SKmlYK69+ZRhS!H+fk+rI z8H`4%G9*=u0XnV5v<}R$>k%E4K#Y zjw(XMNm&BZY4kN`SpeLOrODfR|))4T@v@Bjp=LQNFOln5ckn9(Tn@nJL(h=59( z#lgCVs^;ufM@6ON6xK&~8ypgmGuF zAro{|Q&pQ-NJuTfNr=JjE>1$jn|OHcnObVIoU~MBk~*hJD8vfWMq4pB8Z5F@Aa{!v zEjn|_u;|96y2UJTsh-6Eja^cuA%DGL&kcIF`B0bDk?yL4ky>eLt{+;FkSBhB0(luc zpAexK6dWjOrbt!}aRPQ^t~7dCneZ085`@5DctV;0D_LNNl=ea^;U`%AY`o zpItY2e&pQd+H}o^Z`^bf9pxJXS;OKIja1{gCBe%vGa3U#LaKp>K!8vr=b^!cnl*z9 z8}?HJ_(*Q)HXu}y>GYX4#(5rmeM}Q|1Wpw-vL48%B~nm}-4ZvtW>AR*gL%W1PJPi* z!9?!0{Aw%`CW=~7HJv0li;)fjOO;1uE#Bs0{+BF6-FVJ;08-O?x^E-WHQS^Mi{TO$p%93C$27$*>oFd4_1MGUOMY4%oM zvR+CvDoGHEK_H>zWUfOw(@K-WEOVhipy1}|78U>#P@0cMj%wza4CctW4g{hBM9Iae zCT*udk7&Bong}b>&?E(=nP|0eRJal>t(_;6ULld);;`Q?d5A?7q^sFJp6FI$Vv~L`281%y?eqCe&Bqt<|Wr{46Q$5lLP;tqHp~+NN4vuOQ zlZOW6QsvS$P4RRP!NDL9VLbA#Ah27l)g8{&)KPag5>`}Nir|{e^`zOIx#VaO%%zK! zS|$_TO-gl(;u=d2F|;*~h(`8feJP0l`+Sm%7%$ zIZawVl2&FsB(igiS}KQny2@w>3?sJ(h+OU z@o2ClQVcaGTg!CcU4?{w>Z+&s zK%-Yf3%!{LN@S*KQfc*l5@glaC;(Ih3P8awX?$-56oWgHm{sg4F;DkN8h*5!n{Y@P z-%`4U-CZj|W*RBWGSq@EvD`9-sF+%C$%NG^kX!K7a9LcF>D~}#91J3M2NQ_Qjb%)b z5wk;+L?Rb=s8coP%qfi+hDQTf2^`I$atNiXM}jAi*V??a=%VGg2~TW_UZtJFf~Bgr z)V-#r3a7IfP?U$K-qx`ltcdUwaqP#CJBtp1oKgAVfdb4jHOp8y5GAnJ>*GT?bfP-i zUIi?x{Xw;R<3>Zadotat>s(*!YQAl=Ud>E248RU^CE;iq(;5m#c1z%gMGmrd3XV*v zNT$3NX3SAF=n%nX(A1(Sdp%;H?#Ly=>j8TJ&IV4s6Vu-l3fUIY{t}Y~_6~E|?F+Y< zW4{zYk}p*z^D`g_G8cCfxTVoFLL~c&?_rX@Tc@rp%#nX9_yBVA-bI#q};b1qodkt(@ zZeX_rF*lHyTXcsTaWER>W&xBS&OmA)GlplxEF4M2%_M-uVN!z}LISNoj!}@iyAYf~ zLU3bpkU2m;@Y7wb+Pu;XH%xO(L225$!IPu}9L`K|b7vuUhr5#@kcp8Qw6aauSTci~ zxR)v52Zb5n9thSWGa`?f!vRyPW}0fJ(_rmOzrG zB~~CeXmBgDI?V`J5N1)ez(k2aR0~0+T9YTU-BSF57z_iYadAd)1~-j`Aww68!!WJCrcXNp`hyAYI#f)VFJ6p19yiDHk4j3c$v z``V;sNkmQ>mkYv%wrYQwtc;X*H&~bg+By4j3w8=p&Bi_e=S=U#X}AD4%X{a1X8bNZZk1J0h6B_Jr3BENhxFm%=)gQn1wsBX&H?k7!TwQNXagEv<0;<#` zYVAIVb2QnDu@oG`*I?6G;>gp$cVA!GYh}u()?VwR&mN_%*A*YWV~aO8lB#Z_-&;=p9a=E=+s2m`-+sPZbA&13DVYV*EkHIY?5c?Iwq z)JZut^S|A!Nu_Xefs@rxr=bQuZ9NQ7yt3w8br7{CB;Ghx!5VXQb~Yy%GaD>LXVYx4 z1o||7NQ~S)0$@pI)bKcCs)iOKCbpY1#LWZTgqZ|@G?Y%5jDnmAZk#3;gUF4*Ji2&m zY+ko2s_bqgt{!2;6vBCV$eq}e3QpIb z8E_*WyY>b&W1RuT_b#uIgZOv`V<+@Z0H%FWoT_zn4jv5biCm1fNW7rATFn{SZQ1sVVupQ+pLjWdmLLl#^eUn4bVB#nv1tlv@4D zYF0os^WN8LT39zhsi)VBl91BZ1E5OB6M6l3{hFb^*Q*Bj4fR<`aozMm@O0jk;($p5 zxmWiALUZ5Ay?O0${}yU~XTo&)F{vF`Iu%MwH{>fhQS+NTB`i?;rJi_5o~Q`~<7BU< zKk_QMQNOqT-D%OiQXpA zAwy~a;h^e0=@J^Hjq7jyX7>&EMhBbm9~rs_nX)ZFQKnMR7Kn;2QJm;d))Atp40Yz5 z7)tD%hQK>iL|ClKX{K8iCa`%-OfHK=1R{iib{z>A*9zAL9<&(=Ghiw7W=6zS#vD#` z_J-^~k6fi=q!YiN&p-IjjgHdBz}M(XHvIl0KR5b*I?nIDuh(V#oai{u4M+T4M^Ze) zuQ$zp#che^Vx;L_X}~7rh4|tWZ0nkS`?YlL?p=Q69?XA z77FH`5v8;fi3bA(0#~V(2hQ>RY}I{FH~W9ob$g&6DchAv*51Nl;$+SyC1u2xTD)(m z&0D8-(0u0tx?>u2?ks3-c9w3qHZ}R!vjob^gEo z?Vs$@ey`~V^(Skb>KotqMqG8(RS=Pf!19pBeNeAkgao3JKuX+csTa#+NExJYzx|Xc zSd(wR3ApJTV0Lbo->~CaI(OG@zj6<#4${%CPal}VP-?B@e#j^beTf;DAtTm|STZnY zD2f~;88K%d%g8tz@V19I+Me1VF+f&TUb%rF09zf-w2{=8dy33`{=IK`(l`I^|9Q!Y zF4QHLT!N2${x+fq9fRBCbV_;^y`l_q((c24Le;{IC*B;Uw51I833bVe9mPJU&D28^6 zrQJ$YbXZS(vhv&KmSi|cx7gWETc>iGzokRxOz)++SrD)*HRs%&%=pkQwzvVn;ls!# zGj~jQ(Jh>%2lN9V1vrR}J1T(p_+ANhDl$ULyuO>zzb zK}ke_fOcG`-YvF{e(ocX=D>6}H(&h7GmJAw8F z_ZZDJy4!?%u>x-eH}akr7MxHxX)t#);;Q_S#b9Q_ZU!>M=tk_4xZtU_z};QFX@OH8 z|NO3BeagKF^3B^GjeL4z1Lj7fgDSvdNB}qvmk;^p4_ONj%yqMjg8)!x2mvUSG#3(- z;J#68XD|ksQ%5{iAnOc)ed$gtPK5!B?k3=-bFM>3bHwJ6Pi=L#C3kgi>5>t`;xh-2>v!+kHh~{GJvG<-Z~wS@2F~e|f=6r!_~ETNPM?%xZnzufOI&kv z4~L4ux^#r_;zzXc#FMgPp3mOBd+{?r^E0^p_S*pfXPj{cuDId~yzX_c8+qMFKJpR# z)KC2s0N~J}Lr4A04}9PQ_{CrR#pGb#efLpc`-n$80*4MA!pSF}jDP#Le>>`H|I2^* zFS!2t>qj1&ot?##pZsJz^{G$AD_-%6BLem0lTTjP_1V9F|M72TwG7}?yp$PPE+kMW z35`dLUiXF|+QAjjG=kv2sePo2NE?Ru==P8vg#5F8lR+TVkH{Lr)lh zc~Dy3X!8*vP?_=H>)rzi4dCAwB0hdw7jL-!AYS#EyB?5Q?|aLNf4H-cw|!+1ue$ya z;t}N9V(IvW&mP9_-MBIWascS6s#N7O`A3y6VUg@y4Bxt;J|?sdjH(q96tQv597^meluogXYuZLzx)38(U~)%)L|#8 zWKheZYUQ_Ui2Z7kO|J~8V^2?{EiC=OSwHafX(v-RXIgFrI;9h6{ua<3(|ajQ&PLCd z#OHH%OqnCPPno-Q+;W)p%}gk0h|ZIQfhpDDM0Sv&Y7UVUAd@rj zf#*EzcOUnkFTti$PQ$-{buYeq~k85*7rO~U` z9Pftvqi38v^8B4Eirrth8>Km3`;T|w>ZhNy=KFr)5tDf4nVn;P{{QvEtH(UQ@*nPQ zo?8zX{@_1t8u|BfbX>W20ZXOhwf}q=zyGw2BhTNythnl5mKsatO^=(z8IuFz(Se@f z?fgTWmydeMvUiBEh28#ive zPXY4gH@_JG@Z={y8K3*y=kT_-y$!$q>%V@?HUG(<{7Jm`z3&})>~*hu9X{}Z58!QY zdmEnr{O9AWv(8%cy|qBOCqin~d(E=wMuBqx1||j^sXqx)%lBS zI&DZ-9KC}8HevZNZ0pp`wC|PN1rJUFOcT5wm(3naPyM zn4&P)801Xq9NCy9PnC8AO6_Ef;DXfY#OaJpozot7+RR&@d2=7p9MKF>9nl=$_`*Nn z_g?m_V~IJO`r}vNtQWl+tyT-U@F>82G~iYj8jfgl3$lH$CEbVRo5qNx4&yRr896fYLGu+ONLkcP-oTqPi`~b`Q&N* z-FJKV*zE=W?B*WM+Z@mynvDJGSHHU1_*ph81U~q|58mg$-QDrN_r0%i3$|?8f_J|2 zoej{B_jvca-;I91kH7rOzr8O}QYX}Ibu z3!t%aZJqOf3}^m-KZbMO|1~`3kG_UeU-UXa!m5B<($rY(qYrCz_(;ml9JuzKzX4Uf zS2x@@=8FexuF(J+zeRnqFrV&hFl|NCTuloz4Q9la2Ex;Dw~W*Z zmy!BitCmXQv1)J}39efv^9?f-`SXqh@@S4&J@@9%rohGY+dqSo-u)$Py8Ji6n@>%e zy3y9-U~ZZ_td6+X0XeKK06z9d@4_P=`N(^9L!Le<_o>#pC&yxGtIqKohf>?Cx1K+} zuFv?bCr&l)z*@&Y{^LJ>Uo4sDJm)z8fWP>QzW@MSbImmXfM-AZ*(dy&b8~awp9np9 zQ1gte%*X~)d}1}Zh9SYAK?)6N`i~^ATVEt+mO^;BA9%65z|%R?%t4{W&aK2V+jjWA zv(RYu#nQd(Zm`%>i@DiU)t4I8eCWEvrGO)1p%yG!-7mcQV{lY+ebU2Dx_UhzFU{c` z@Z^{M5|)4GrK`+sZ~n&9XO4y2zm0#`^KyLge_c5u01RtI+>-!!$Iqk<@ZIlz_a1M^ z{$O?irj8JOe;}l;ma3HE1y%ICH+0@xJG`!Q3qvpa`uw1|XB|Pm^wLZ5(wDvzF~<89 z9CZ-xX-|6^0N_V{kc+2u|knhcxiaQ86RT0NY$2%o>@Mw*_=eP1{D%&D-ra5sgClTG`}q(;P3 zEv0Ue8ZZ(Ol|+g_OYD;k!$U z$IPVS$KU_`-^V9D@d+F_Z~!0v@Q1Nw%a)WjeD8bl(?9*wNBx{Due|c;DZd+TSXU5k zTzg-9@x}PeXFh|guDS|udCOal>$g4cdC$YQzx{0hz&qdh&Lh6=HLrQinvcKz?Qh5A zhOzm^ufA zXy>Ot9nP7arukbsG&wslI-}y!4lKAPlFuMQrA>8$$cSDyB9dn^LWVrmVzmDlmn@2w5 z@ON*UY;s_y6_u znWKKrT6y%5&3jfG&pu-?O8WB$O8n`!RsaCM_tXvR);w?d(h?R*$5T$u@KcXyk39dy zFMbivfBy5aygcf|f9zu)!&9E}l;+>VdGzBs*2<%A-kdTO`}glh2!pEYe!q{?PCE?% zaMxXTt$N>DdGztm{l+)GvF3Bf%A3vC>USK{vWeS$d4^Y`W}r7d4yABTK2AO=-ET7G~#m`e^{L4Y=*V&3+1iyh!P` zyt~2NmMFB_fGUWTPyhuHi3=$SC@KjFsSsEVJOSaHC*uz<{h@Wg=U@NzU)TNGPDtvoTluJuKdFURKX$`0wc<}aViG@kM*Dv8 z-^b5!Q_i^R!qq^>iV5EFj(6Z~Z+jbnR62ayZMR{1 zdi8nC&mUbtU31MfO;msUxap>wn)|~b2Y^;`YzV};cBmiw+zMp5 zFfA=J5i=D_2Pgp7;yTP?=i*MEUn+bWz~a=|HnVgm!W1wUBcTVlGsRBSj-~puqHh$4 zNXRJV_XN?6SQuOy3blD5IxdjMYN5M-_TNuvk*1&bI>_0N!Njv(p3MHTz{0OS?OyYd z-!qgaf5oTg@Gp1u@$uWb_^~rP-`7Cf@bSA(9^|WE^G}Cxs4%?ehGo3w+)-2VtSPxi z=l0mjY(LWTZ+zn$@y0j45s!M*qj2Y)cjDzQe|ZxuySI)@F1Z8%aQ^w{0{r&HMKi=||w_xkmt@k(>ccN)GVqv5fzmjHUQq_H! zDhhgLZYC(zh(t+jB}&i}LpZ@B&-{^I5({P1aQwD@R#*Z1dm&r>(yRo5TF zza5IWby0El^xELQ?#==`PtA|{dABbQSaYXz)@Ko1bImn)#xtIQkAM8*_c~Z=Yv9XY z{xZHConu&~T@;4T$+kV&wx`LqZQE{Ya#KyVn~ce>$u=k3How#Nw;x^mz0Tfyt@Z4+ z?&o!nX~Sgv@{jZ(zA4%YT*!`*EzX>O$wcLl$qZ_iRR`t;3(A zBt*`6w%N{fEcgKe%!-whawt#dz9TwUqD z7ZMKI0c`8}l3xE?fIl2xykC3>X!-rWDK0mAI6goG?5fcDdk_=NPcP@?t~!7a;CNEm zv<(j8_q_QF%)S=Sd16vS&JVHeu#-}7*nFW>$C96on$^s}f`rdoG4{dOQopYp8nj_gmHCsa6LYInT~4H zP>tuP-sq$O(@+7PdCp~T^QDG-v_boo)d!>&6S}_c(Gq#edkAPs;%$##^cNv zew0`jPALBNnceD_gCFq+*?!{Xr8K_dLQDklSO|cw=l-DF$9|9zvsV)ci%9u2w3d}Q??K-$@cj1vMw_|Tv!6X8 zMxqug{^fcuXgPd|Iu5TEuU1KXIy~m9dhz-AAwVgd84?4e!y0glW)8HRO1%})*5rT! z{L$YO1;Kx4OA58lJVAPG)6K^w{T<0@X;8>Y{NqPxg#>N9gFoz99;mAQr(1=y-_N+u zjwT0pHZCW2^xJ3sw^PE{y`SkGHd+OlGhHSkG6s`2{QoKUX`E|k;4Z2RiWu3v6P};= zA>DIjrzm?C@d#d?Oj@OG%^4x@#5>+{iX zuGq?yz5ALl0fbKnd5{>8?X{0;-~p;zIX><$HUj?s;GhY}8i>&A@D>|b7R7D@9{~fNOjbqK##Tv|I?|dy=_E8TBu(-uLXSlHuBe>kf5pQ+Q zy=g|rIo851L2F%|PD9}p{!3@hP${ndSq?%jxN-?oT=LuL zN4ELtA;1HCe)fYzy07%grYTx%RMY<0KoWZ$Zff;B6JpwY+c@1W_xRmBoQ$>8p^!G9 zilevK_0ra5Q-2pGc>9GP1PkpOh{68^c#cg@nwXoLkKZl`OnbXcydpYy_O=R^Q+Cbu zwB7kW%xf6L@GCe)9SAUsXM#X@RPN))sHQ)QXRi&wG~{tZRm^R`VwyB{z8E&#fEIDJ-!x1hsDMo z4x0-Lr0(`51`(73b1a2ys9E6uLvH!vy2pO-YFRC_Y>Sj&? zUMnI@Bn*Hsgj&>k&o%e0-IuFj4Y8gThsX9+3q9LJf|84ejHVu&(@#3!oLlR`cW6Y2Ymk%{`A`1D@##9<%q=gqW{_A zLc{&1_^Z)z4@$O$lg&<`p4Bw;elX}XvY-EG+o1}$rn*Y}%@6shulywNZGUrrJ->Ko zRK)}_$6`btlMJ3PS2ZNkxl+v$i)mRXBm-^8%}Ir&c-+LBL?SAzhqKwn;EW+Gr^!t5 z0iv$S*rj0+*7~`~oNL(vR@=RZi{JOns|#H0(~Fjm!$r;I|+nnIU6#Lt}h1v97MF#(&;UHz3GCmONO>tP?e z_>TMV{$Ipa;z`eQ0+x4-`kx~wVzHuqO5Co4FII_$4*V+~I-d;g5J{B5F%l#D2#B`$ zQ@v$WMVX|P8N*9R_P=YwrzX-X_f?6H{$Z`dNh`RwC3T*6D!oPyTx;7Zh<_BzNxOKS zQ{I|gJM5n;Mfr1KIgcSjOQFrFP7RI7xaQpEPb0q5Ey!=o!W z4VtNLEk&X&Xc?@(w^NAyXMH-G*K;n9a=4+DOu(--pUxAo1)%Fv4BYx28vfW0aakyO z7_E)of0860zw)0mFt^_pG3h;cfOw~zPtK%&;q@=Sqw_w@DhLsRvYLQpMNQ)96ZZ?k z(k$LwMKL#GVObM-p6+Ef>`?+g0FHbTBQOlP0Qh|M-S0$oa^InJL|a2T!&)q3Xs%dn zeuSdj<bI0d;4S#LL(7$w;W`{ z12i=?yC<^v7G(wWy!Mi~FWPVLHbEdpgB}o(v9I_ey={lfe}~KQX)k4m!NCh2iC8fD zGY1ZM{v7~EGOq$cuWk&0O1lvK>M*YMEyTyk4=-k?XE_IN6_>8!R1n3my6@k{yF34p zl!8e0BEFOfu)AFUj`mY|wL5NqI9(2w5PF`L<30X_W3NASK5(3<9^`=>3;bUP0|=PB zhGo)S0zjzL;I5~PuFpk@t~!r0jC*`yvqh^Hdzs#5n2h}WiOjUNA(=eC-mLS^e0=gA z75uLgH2UGPAN#1bpHHeKw2~hyH}G&0+<+sW(sKQ80mM&O;9A8=-nTHvWwVs6&n)bd zZHlywh57INlT_J{Z4k``VoQ#@eC!0gBA8pzOI;DvtwTW{ zH9(!4HT2m(SH31}wh8aQMk1PST4UcmB??cm^45$a;x6Mg1a7F#TaU^$2q$CxZ;Aam zo=$mX^V}+YuL?AuZax%lT7SPD`&`vzO%j)Bc=#R;PHHcD$jZqPCfVp!%Vi%RUV%&U zANzM9dko&*vSVRmXAFiKs00_S*%vIHY~@EW{*8SdiroZ}q4`z`L7);%EiJ3>-#El> zKcT4iXa8z#78y%ulT%WzKxH)gCmuON?g<3pL<5PNeOtX@wHA{^zQ-y#e=P)W()NAz zKat=gbk%)42bsa8r8M*m3`U^Q?@t?qtAO{(j~>u50sFjp!2tX_xRc$#1@B7tI{=^5 zzO9>_4}MPDr9co8UH7wYFYkJ$`(z-ph=;?B{1Hty8~1v>Gx*@3q@=tAEv7EwCrA$X zc$1uL28r1m(~qEhnQYPpRBcABPG`t0KzRUwRtf84-Wn0+E#VFd(+d?8#+6q2|c(7Ey83Z zC|dHw&V;J7kf2Ttf(czBvfKWR9kgmAAW_yRr{-ec8PZi(e2UufFQPW0+#AWXm~Arn`X772bcodGXCO; zA7w>_ra;Oiny#yUA8H7AKV^%BKm53lyt%v-dW0LP1?W9g2Vesn*JbphTmrVS0_O?qkK%v`jLiM!jmqH&0AALQ+rDPT1o5&xR$QciIEA_CSnl~O00x;>lP?w$` zvqf9$G&*NgBj2xQ`u2adyHflyYt!-^d7i z4YSkJttb2*ok$u2jQ5M##`HYaet2}8=zTusTzz8WK{?H!BZ!&2`MJaiArKxm;=0vj z@TYhic&S(a%f^R)AI{b1wq4Y9k-JG#QBjdY#kdIsd;R>|C$cj;+a4#d_vvMaXQ;pD z+|<#9yEkifEqs+wehkW(jE%~JDwc>RHN#uSIarL#?ZRV~Efqu^2z;?oP$7iotAW-y zUq(D_#`^5zaw%V2Q%{m~gS&d_g%-#eVK}kzLH|M?$g?Cy=2*5~be@l;7U16S5TO3T;XmvYj#mDMA5V+{^S-&B& zU2DYz?bC13P9gP54slzQ!J-nAJD2bt^cwMVKtkXXi`s+ik22{w zz_xI=e1hu!$y64&1_{Z})}N;g#Nbt!t+uNq3kjU`H5V2mYK&fRIX8ISCh4oIuXpWx z5CGlVe?Nt?c;3sD&f6mHv-(*@3`kJj#t1qYfoWHuU+<6C_+?8A9|&P<48lH_JBbm2 zY&dolK5iAROoZ-DBm^!%cy<0$BjjF?co*S=MJ6d<@56!J1AvZTNek*<9mmX07otWW z06jZU)ZwhIZRYKr^KPZ3Fskg|7}edxWBYE_6_`)1r7pQ}oywlJuqmwD)1YlMfyPWR zvts1P1+mOm3@Ri!THc2o{4Z6gu6rLk_9MdaoF3({cW!U8qp{m}0=VMu_!Tij@K+oE zAf$YJ{1ou8T4Lf~2+c@M?GAWx_^9+c1(`Q6%M0A8W`1&BLAN_T^ZO<82Q#PrYIsWv z&+Ej+E0Vn6lPTyIxC_U-_@tGCe4ijPz4p_{M7BYZ38K+qxQq zr&(;5gPbc+C$~Pg(P!eYvkD@egO1QUIy@L}=H^77S_7BziK~f=vx_sjGbm;t73(*< zm`|_v`!Me7r+O(qobT2%fu?6&T+01!)r$M#CjIxa1wz)^H1?L7$korYfKN)2H`J_}cj1ulBl# z!csSJ?N71c^Yi2L<7GN2t8gdYbg5Q{nhPwG1$;*N8B`16dUVA6Ae2y&JNKtvVq#MGz zFM}COL%UwqtLpixZb(vn%*qxk(Zew;l#kypfj~i4 z51;e6{!vxPhv%K>rA=uir>jV(q<##=oZ}*`1u^E104u54LsawR*ta z3@;!0`U+Vx1o)*)PMqDII1)m!FGr$pM5vJq;!P&pzj^Yft6#R((*F-OWzqAM=aYEz98s~ku6US2nq%E&ou-V(oz$a+nM6%sAR zz0JZ8?4YsJqm8!st!k=FlbAlDQ{e2N6l}pl621^5Rb)X@fR&^O_SS%lP(0j?jgUX{*eJ&*8ePuE`dyp-p$7%*hD!HJGbQm+&WKVD+YXRgHo+saY}E z>P#-B@ooyY(cws3$iqGCN+8ZuaJMS3}%?=-F>aKF4j!f2Oxnr~*-;PGsk~3{^ zOq=C_pE5z;#5HD0(ORJZno(f(`ZNvply}W(%lvPsEsEC$=Xmoe0uSv_K-}9HbluZ) zToJ2p&ENcaL0+q8@Q8(Y_xxPZG;P;9RyhIr75H;Y$x7* z)sakIM>go%=j$8lg1sioZk@*T<7WsTb+P!jP|EgeV?C|bS<9|*=A1M^TGjfzaw*5M zf99qc?h;wd9n^^_)cuzy-b9uxP5jsKWWDIjE{R%{UIDDi=-i6f;Ge@zf{S}&(F})& zG&{X6q{X7i4leoRa2UsmwHnf=Q7q$-VNIgKhLY&)*R5M1(=UO(s;VrO&Js!>sCK<$iR;?`^M z0QvdKpkom(E>f7yVhBkJ$rwOr8>;4JF*ypiTCB!dV9R@ZnM5-_jA^3ipKjPbb2WG) z6kHgD?g#>ss)=C+KgJ;#Kr=6L*tE6NBoY7$GMo?!rPm0G${nnI#ZF#-UK>55H>)H) zSIqw0cK=wGxp2!Q2^ZePMJ6euV#2!SHZvguXAFdylpT^IJf|PXE)FLH6NW(9#DIk{ zBvl5r$==hW;MTUm@vy9ha2E!!v1In8F3pF)$jTzfG?jkvdir*t6ORMT!?d?+d)E-5 zj3`_nbqR@JF|z2oRx2P}q{e<^B%f=eHAK=>Icu9uK z$yhV0bGdZ!=s8;dCB0+l0OqpML22GH(pV!VC{wjR{n>f(rT zsTB|u6@3&QxF~1=VmkN8Ydfm$cZ(MGDM`x*PDE6iM$G|M@unp3umA(Fy9Hn*0>x@O zzD>ZxA7G_)ivrEV)WGbS2Xdgw-2tcSW+g-*%~uF}ar&9S6)8HBqJxkG6ipfG!uRzf zKZv+CiW)REksn{}5s0iQP6v(}NNNJ<6uEM#NL4qa>>J))Z>`tv&J}3C1^W6Xy@f)%_0~mlbbgtdWJ^f4jmH%M+^(1)O~VW7feU2 z?@Gv+jUk;2og_Inc6 zlfAO-vt-|*B>)C+DkT77vqW<=eqzp@`;SHvHSde9bvZ8+}aDzn1S*wW3nFPhqX~y zV@bGb1%Bl{)e%r%8{9d-AasK`g1Tl70XV&}GLYO-WEFIIQ!qcJVGt%L}X4Zw=Lx!lZN%Q(ck{qmBcp+dKU&!1Q3x)|P zH(h1O5#+!C1gS7m1sZtk5#g)NjWu|-+^g+nY!8LgMpY0R!4jcj)dx8lNsbI(z2ePt zZH_3-vVX9)4xrj~YSP{$CZF+DczD*?WgTmM?4G&LlD04GgF4S$9bRy4f;w3Cf>_S< z!HL)dMq`FEH;7>@a$?dJ&RiF_*H-xmN}zo0W<0=VrD;~zCCMROnA~|Riv3L|D8_TP zB`ahTVdK%zE=SorDILEG!;j#g0rrH;(UlCRw6OxMcY%jAdYVz0_5L`PepO$I@p^hN zpwT&n$zviig~y5^AT$w;)kIKgtc%7=f!DNg8I+E*-D)L0ld3TfL5dxyVN`*_5rnxA z&!%4-{j!rTC3BlVc1D~V2~ZC1^*Uyai+Jt!g@%aT!wAXN^#gLZWWY>K*ouj1zyj1E z=EJ|`@iB&)3>#(>uKPI(H9OyggOVQtI%nGyby+{S*QkQZxg|*`&&m6Owvvfl5(?j> zy8A>2_BZPn`g-lL)c#JEyE%Tl^U+Pxg(X_!iPSlgHIptYowh+lfZx{rH4H&~dVTlF)E1Z|FRFk2+zgE1+KD>-pS)E{lk1HxiKTQ#HsN zu(D<(zeKpMC4+#<`7B) zr9(#k;Mn%f=MrDB&~f!DwGpTT{d0?~5s?8C^GOSEn`5w>!-5X7uHUI<=gYKh29RHy}mE|TPKJ3(j!d%M6k$wddRbI-n?u>ODB70|p2PTOIK`(l7SAF~B264kn zL3%1VQAxRfW!p$>9O5CzH?x8B#$}HOoEE)scF?e(U4|>(+kRNeW$* z`~uNTi<^fE$8Snlb0qAeBH5%?GnLtlyCNYXPUFcwC79$$Vinj$d8k)TlB+axqE87aLdYO8N`3vp>$wFvMCi?8_;^SlWj=%bd+1MuAT@+li!_!}--xo~)#EM-n< zZhOwy6447%ipgy_+7ycvmZ#i)j>u{kbH_3lkbE(6R|tGiwDPb3N-763ng~N?v-7To z5S#{uBgo!0uoSg2wY713xmvKOb}^)#W8tD@mDXzx80xmp?c&hrHNbV6mDlsg@QD0O z13hTGVq)V|bzn7cb}ifyo zovU|WR8H;glIIsnCB&yu#tn>G=akF>t>XssCCV89iqsJ!BM;RaU^YC3d*!(XcNa@h z^zADfT$CdKoT4#H#B*Le+p-W85b+Y)fRZl521DY{CU z9$3~K8dIcTeaZB_Au$UaSc<8wp*KI{-`5w9AO2#u-t@M1Xp!B%Ca)8+p=fnO_W*js zCOYy5Jl6ucRsw`rH&cq8SAL#Zes{;*^a(?r0jY-K!d!f@${YDs7VKN~QpI!<1)|fZomA#l z*<+2%&e$=UV`)?FSM|`B_!tpFCkxb5re|ruKex9Iw4mIP)k2sre5XO_6_b>-?rzgC z_kpzckQd~un7-^AwpCzMX7E&jQ_Um6wg}6R7<7z}Oixz@^6a4frRXJ<9XZ6aDWiMH zzpunZpLg5L7&NjIbO{0$tPn`0tUBz15wjfm3IFLi?@QkRg)K&RFR)hvdjPY?1gSeC zSn7qb`9Gu$kI|TrI`_wgi&fbul^}1IAjbiyzTo(g%u-EWVSEbPrKJ z1?D+&*R>=>wFJoy>lHM!a;KBArty9)g*pD3*ln#e-fl;P^e?15LRLqYXEWiSxvl?| z>PBpa(|#kN{?k6U$6{6CcrAWzh`_TyYt#U|$z=8*J#z}(MjnhQCM!*^^T%LWk zX`;msL_nb=KLO&5z~qj=gs1;fG-NfC!_y6q7*Bmp&OUbXmSw$;HW0fd#B9$EW zZQUC~b@~>aVi2Shq~<`nEw-CzWx5*z*QD48h*nIG@W`~hWbM8jC+XSSrIIp6@SKc} zNPj^~<#Ao=Kv<9Zo5ykaPY+ybz_D`dA-cT5ENR5LOt&ntRMI4aT`C%*fLRl>L+NJs zca)B*q-qm;$=o-Dv#Y;JcVa6xmB;5G=OKP;1|i#pSnEdt(CP6(eAGI<#s`cUq4HTU zUGmwl$h_I{`F1W`uVui71@@N;YeIO3g#}LH2dc=pBD2=Y7Cfx^sg6w;W1%`3Mb=P! zZziFq#rpHzoF5jTZGP+k!8^)8`>ha67+=;@lmfMZ|9A7Rv3GYYYPk5j2yI+Mt2eXrc;7!;bZlo5o8?u?vuys%8|(s_#Y5hA`br-z1>7;IjSB%`ZnU80mZo zUq+g>ro`DaY~0OiqoUL)>RB6;0LUM!3z#Re`xf;Cmnn@VUgu&JXl;onmRi`Wr#Db* zi~f_=xo&i`ZSfhR`~!QE?!{OXRX$!I+}S+bW@Nh6xnlxPCu&A^txqO9S zP-#ni1}nL;m>Z^}HomDeq1s7#Y0=*#Cp$sEk@4)D_Fe^@kV#~*m9U1VH?-(B59dpp z!o4zn{u*??AXEb)02=JU{z!@}9x)*KK*YNO3ot)D-qNx$nr05X#R~rg*{y0CW?4M* z-p{H+Rk&CU_dE>O@GP2|DmwGLM!6k}6o)PKQh?Z(FOdaGGjCxnzwxYr1t$Ahb4~Un zMF2cm@8Z#>DDvRo{*Iv0U`>e-;v14BV=1XJr@_g9HLx@e|m934+ri7@M%a zx2up`_g&(f-^LJ>ktB}@DJZ#{SA{ciB*-NW6)eVJmNiO7^istS#YjgK|3HOwIl`qb z8H8|zx7SW@D0{aYRyA-P=Ua%ePpG6B-C66@wZC3~s&hXQgwEAVMLzKN4nsyWw_xcI zo|{C<8%m`FS3xzW2I*dKTiU(&tHKT!k8iTxZxge>ez42w}oI=s<0hIaDJ+353X<4W+;VBakrmjfi>L>Fgm6 z{%aIylAB~Fk+qB!Op(%<0!fw{oW*9ia7;;(ds^TJd89QXxsswY$xo5w?y7IOO`u6c z9FDL~%8R*EZY#^GU1lnls{B#;s@``?us?&Xop=~y4b`GrMLj+?z*P=c`hD}|cCWGd z>zQ_2yBc+?#^#<5y;P4fR=HIq&`j81W%n(OlPxr&-iEqxLdS4gF*eLwG|dTp&F!~u zL%%Xxu+wZt+#nx0BFn;urIAE282+$Oe?u}o${0oK+nzWtx&FwO6zUPyD&w+HsiAeD zbCcgMS&1nv^wF~8cMz-?_qYgMR2{H(oCYU8JOTGD+6xoz!nzFW5uyj+eQ}h9H{^J< zneF0y$;jPEW}pEj@u_1AaF4*Oy`XYM`0v^{hO}!A9w|Y$$gzJA3`c;TG9`^j{P!Bv z7UBfbm^A3DP?)v3vb?H&-?bt{sD3zWqEBg&VTT8${)kpjyYHjLoQ)kuUt5HsM|83% z(fdxNEJFg=lTI^I4m=y!7$_!Z1g_ZOP>h9yA@EQvv872y}=mAq;egd{_ASH+LF~|uRNBZ1= zf)gINazP9oQ2B(-w*}LkL$;YXfK71skN^M#?mmEbBSaSUhREH)+KJS*D~g40W$jV6 zpPB8QC+Q7z3s|y(g^SG5`Rwo*|6+!C7VaC-)p%4Y*wf0-2kUUQTVM++2P5LNqrJjm zMR4_$?Z;0p8<6%u(gt6vhiax9il!D#=tTV?>M1pj;cNVNZX{VN&3P+pwSvnb-0L`u z6T&fPnbYLv$Fu1N0b($vOpFw_LfS$i1}2!r9s|mS5{flJ{ z%+?r^+eLM-!a!)bqQ{L3mp!T_4D4QJXYSgYeQeRqrH27)EFW zwGdLw2ZpCbX^}i_P+yH}DA3j9bR#N&o(;ot@GjZbrC9qh$m_GHh@XJ_-^`#Z4K(1E zbDnJ{<%12ox)e2w#bk-c2pVP9b#bWpc|<<7_=Xq;6v|>FJSQq1wuNW7!!D&Q16_FY z8nVhl_xL^9zqRPJ-M--h0mC}_W#62`QrpBHLdxy z{S_}*Rqw=d781Ziw=2aQ&9AFqF$A%Q(R1V}^w;ifKAr^}ebWXoKXsTmX&*mb>)y^X(;ZI4I zT^Q4bbAd*ngaf1JZ?e88_8%w_Bi}_qx{cU2W-%!WtBseGbXtn)Ge!ejF7Zod@DN9L z-E^~=YZ2f9>>NshwT*v>Bew=u@kdND(P zkfDS={OR(KITt^VA2IV~vHprLeyH>Q7t;;zwGiFbm(^s49*Kb)WhEc)IoJtfgWDjY)HNy1vDm6h%d+Inu@bE8i@f<<@fbLl)35C_AO5uU z=oCE}e}JZ6z5BX97=1xCtKo%y*HI=sK{HaF3!gwxTdUx>;@s6yN!wz3ak=GU7DjF* zUV&lr0I8K{@k${RxDofbcAJt~C?vXxg`y^O-X76hNA*w9Yo*Ejw#NLFHN*wl14SL? ze$|cQHq-*j7x@Z_j1OV(w{;9KiJP}r^J`*;Z6Q*KbQ5St`{$7&TBI7k-P6$7pzdqk zZb$Ll2*ko%l4D!p1%q5tnU)V$lw*4VhA*n-RL`}OzwT&uCL~dqn3*@PsdCtejjs{y z^c;sesNv@J@@h})f3;~&%8jw_ufvrC*JmMfhA4G)rjrYdTI+hSWF*>}XMJWf?EVBm z6}RC)bC-?l?+wufA_u*UthFsV=|L~vz{Dt}H;-utUYLb^dXy08?T~A#oEHAfi%y*( z^q>a{xJ~lzYq?r(0}Wf)H0&6RtAs(2NWC2gZEl$A#dag&p)oIT@G#hs)cW!R*Bs_qI&4vGZ65P^ z;pyDtuZN|2Pu=V0gYhHVzt?8VA&d*mx+sRa%(dVJRm;hp&X(8@@!Q*mW@vOXvJ8RT z_2zuXMxY5e>WF{hFJwqUB-O_nnv?=6r)H#H0Hz=s=s}#n0SmC-ta$uL4eVCj&p9H# ztzIa|{E2^uOj9#aSrIG_?gEH5gqWgEgYP!Goe$jyvsuU$WLMAt?>?R{nM|t&Or&cOi)oH=>j&h*gCn^{R(7+`?*S!JN-q&O$v2$n}q)~3w?#F1{M-~ICJ z$CxUk--@%i1@A@{w4G}-*)f5H0NNF8d^(tGPSDi~oNbgHOQ$(S65-YS*I_$Q$2OcD{Q9kRZ*!|ul$HZVYNJ_jCZ>irB z$J7iNtcP_W7Yto3^^+ZwW9#0Zu;^BCR5k@oznty?pa$H5juPigy{v}A_Ry9O&FQwX zSy6S9f;v_sPW5JkQ?q!Z*+VZg947u?-Pf=;i1M&~7LzD?Ibhh%=L3Ev{9kez92I1DT91cwDBIYLIq&Lyr$N zSh#%F~*eZZ+2RBuV)lZfITNe zoc`WATd>l)Ue16RfkdZf`py62q7O5v;WaPgihOew?r;|2{3UvaP_Ta(-*6K^LZ{1k z(B_pwfyfno&)Ru5)lVJjgS$@37S#GH8Br;~-Zm@mE;OaMdG7TcvO%yvgsr9JijY`B z(W9D8gOItnQoJjaldWBAs}lUBBtWv(UXN76}t7YW+86GK>YqF{}1`nQFeJ~L3UjH`wRN+(^C}GZKRG3 zy08v0Q-WW9vX%UAxT#ri7oO?PR(ggvk9`@Ux(xH-r3Kk!8=v-(cNea+ z&IftzL%kGT)^6&$E9)_qY8kQLR}8Au1GwPek{R;q&D1=u9D`ylM)r;_{nOXRJL)u; zRaFT%h7P_baO|j>4^8<299syEP>)`^Re9h4K3W_3@_p5xV|iLfC=ckI$E1KVaGH+o zU%_AHOY=#APx?drmMQg@H=`FvfkILXcq28U=L38)mFC2Z1)YeO!R9*OB))!Ho3BOo zS%j8tS1M}dl?#<^XZ1+XNkSczFpKW8 zfHDMo=K-PFmkqufX7K9{X3m;+-5_<&?hdhUGJn5h<$odSj>j`LK!vdhmx1fyPtugM zTzP*eS8%ptIH+pk$l0AW@+~Ts+9mq3lOf-yK0kLH8A177Tk3SCOg(TNe`A`(l4~dh z(XprI_}h(ZeTLB&x~nXVRle100Zkt((k8R*{Mnjoq9?2bFrKG;%ETbhJZxRFr+R05 z@=D(DR|1yo2`s_UMWpw6jhbise0&Ec1#t zJ0o`_)W><&apdP-bT^%lc7eT;K{TyfPkO_gy? zKl<<8WsNq+-RotIcx8ERJ9G~i6!|;g`O8aXR0%;oVLF{SD%#DvZB$VmnlG;C{axZ7 zz6!z{IDmlmej_&MQ7Z4WOb!L;sgAEaleYbuRd&GBnVY5lg=q=j#uGNqo4qw?1V&%+ zqeZ>-yLj8tZlt#6$u*=znYK16;HdK^Q}BC(08W5Hf$Nb^)LGF!(RMm zAy;}@*i<|Ufgysvjs+?z2F9e@gEs-z%1Q5zpA|g{=B}eq8ff`L%X(cz32asVR^U#{ zfRyO!`1HoGKdsh&Cy9J@2)7ukF^4*yt-F>NNH6oS;36ig4h7wx?5oV(#)>Y8Cd|eo zB5YpOsm82BxZzFW>6w_3@(bi6tV*fPj819#^oqfbvTUC$p?CHCzgAHyU{quiEYi1xjy{}MyCOx1jQ$Nd{Yem72u-p?J8V zibJ5!k{&*H@IO0WlR~2s%Ry$NLi#e66~l95H0`!tGZvnO~7? z^>%nO+t$leanzMW3da4XsmFD16Yz{|A$rr}QP(lJUR62ER0Q3XAD%b=_{zFj!t;m| zRTl224?hc`LY}cODu6uP4#4{S6f7oI+AlqIftR}DPNY{I*?$IXJNJG&yr2P5sDM$* zF_!DqG^fpW5yZN-A|4jHgr(l0RRkrZK;5=!#kz$8CxYNLkfX(FD!d%IRf#o5`Vzt> z2ec>toUaasWzTwpkFA%Z$JkoSo=a`hOh_#~?v1CWPgVJ?2EuvBDbW~A-()tfXG*Gi z3bl@X1#&8C#+hk-NAu}*O!HrJ#88@LsgZeADj<5FS*j;d%hN* z4|p$F%o{Is9;y6h$ezd^Aib;%m3m6t+}9-+dme0;4P2M`Nn0_Y`RD3oW2Nz@t;w@GjYZgZN;xGffRNaS$-k!Pr1OqPerGD~0x6v_%Dgg(#kQ zH{6N1vIZ3stw@1GDnlPjf!TnWxxsO&f8%lo<8mMI>(^524>8uocDeJm@cKQ|$2lKv zy>LTsa)Gu`L|zdW>|?ORH10o7?e;MMtyb&KU>z|(o#!Qxr2E_WY_0a5&Rk}LHl?_u z+Q%eO&BwY7c!;KYYS_>=7Cw&kzR#%67u*k&Lk@63CU&2^xG^P<4XqPb=Q zrdSm=0Spj(@@RHIOZm9AqLNRbImePM`z@0wYs>9YZXvubpH>$dnHFa<4`9>a+Z9h- zNo3jdkR8Hw6_&5#Y^aVh`r_jegeNwZlIMqap~O4VXx-h+je~wFRM@ zSJC;UnOG$Vwoh6Y_^7H1PWDTVM6bzsUNhbPuO^g7`ASucm7y5EQqJxUE%JkE$Jagn zpD{*fb-33mfaf{4E()w{wo7}ZIk-TD8AKYcDT?mXBV&C8_Qhs|z411Fu!pSWjiZz! z;a2hmZQ#BU@_>M9CLg5K6b|tj&-tI$`SI4o5Vn`*Y4+1hr9a@3_IkxoQ;2&)u|rJg@b+Yg$pdG(fP2Gx}Ou0(6^e+xAy zoMf<>0FjT!*crh+n3{M)r$@*2dhgDJ+sRYGenq+rGAfnqfCr=K~-C zP?_5*zeys{Q!a@QLxPgAQxC&ZG7od6@1jlkeYQx7*B5uzG4j!uy|rG+u?4?=5vc_V zr?#H$DVH+Nml7EYHAHo>$6vQL+JmXtxh-okvd7Cht|2HT#bXPvBZbT1)tM+DEiJQB zac<=jp=xc<6|YYJ`ZdpyV}5|;)?q58jCHawijXC2%-)~tI*b=^y6|7l zdW%v{Ge6Sp1R(?m>5^w9L|r1s+jSW$U3?v;i$wbG(@nBOgHAEm(j$WyU<)lWrUjl5 zdBrcNA_*ucm^}bHQB83n*uI}3dI}!pxO#Plo6SAYlrGZb z3P-v;y3O#Ge{*DT1RJ%S-^;Nt`IT= z;~svi{?!q$qGExCtb9jw?<~_70^%v_D6)8@+p6cdZkhReNQX6_a~$f`5;oe4h3Ah$=lj9*U_l8qC-Hf9JyCOkbu)9n-P+sIPnEL z@l0@hu`K8DvxNy=!kHxAevKKJ)8b&g2pLu*``6F)r=-9#YgFDqDn;=T{^B)jKgDrm zUr+0i_2I|f#*WE(qHPUus)Vuq(WN>E6$>N_LQ_PXDKk;~TbF{f6h;Y@JS?FmkG8j# z@u|~=R%M1{%f5u9C+cWpk{e{oNl|A5)Y#iM_Jz}OWz~-u0ZoCII!*Tt#2g~jvtucD zH8LV!mkSfBOBBlHUG-VeI;5bDjD zT9$8W^X0H&ESU9VW9i`XfOE&m=mNJuf7wMhNTilXKhuc;eQINqvmAzcO>QcBDxr6| zUh~ixS@1-R)5OsEVkqhF+v@ek`w=3u7WDIJfMuT{M_-5Ud^X(gy@BfI4-J_OH|Be> z?A{bJzEvcYp;2_x*HK&}`xs7#A{Yu3)d%-bsA9+*r$73ut9 zgt0H|w1m4!dT^F=f93j}Y!H@83wx_hAJ1=eGEw{+{F}<}y*M^xUh_d^k+LnfRp8VX zOYiWOaAM7bwv=4u3@V%`>ts~hZ}BU+n_`jTKptD)HP`B-{Ya3Jp9q`j8r4k1&mr8ef}08@wF zCZqy|HlLd~wd8~@HdDTb&sM7?F*P=_CB5HYAWiGQqI^m2DH_gGP&(BTeqVk5HH|CQ zf2|IJYl2k86x?d6^^sAb ztX@c`r)$sUWFcz3 zW8uPtMn%rHY}=^@4jsgnw6aLveL`NrVwYZ^>uNTcO|f&r;nk2b%18Da4-XD4mM76! zTI3X=>nai_8HWpI8H|fWj*r+3q2>y*UW460OfF8OEuJzH1sxToyp1>=yNa!>JjVCV zfQ(16{cr>EF_uC1GK{SFMlV&SlqK#bi-)k$gD>3{6W;7 zlPMB&wVGKY`(}?EDmd~HU(S%luL<TMpLMj;=ZuAiU}J*VN?1VfsQ=qL*qD;thsv!XuY+Pd#)IcczB*$MK6v7IY05|6A}E}=sXZ4XV`tUwXbCW6+rA59}OCZbHBPY6*o5~lSurXB@U z6SbfXhY5Ol=nE^760T2=ab!|MvoV27T!t*-FzY0#XR7|4zSkuIk}0|Y`A+s@g#s$g zqq@XMlTT~ZE%An|T;bB?iRgiYJ^Ad<-v-u|GGpysmzN6o%?|@I?53>y6w(NjvPj2- zsl#>E0p24MtT@54@@H}^8o3mmPKqOQ8||uBHYyweZDp<57aWB4F5M&j z4wkBL%r9DXOoo3-XubhQ9e^s8;SUgXqHRl~EAaHJ{6Y2k^o-k7RfE6V!G~qugS-U0 zY7LN4h1LodM`nt;ynqnBgaWU*EtS+9XG#Mj8(fE}X2}p}C{7kZL_RYDSDnNdnaBxm zD)v2|uQQY~OqY?v{mMma(a*pL)#GD5azV)=hl>lFr#YS~m>TR+YBIzQ;#S4O+Yy6Z zgdO9uNQLWyKIf&114qj2qSs-7Y-ATO@}>OMEY7ACvl{Nbb@P8uVth?YabMjO$UfB; zoHV@qk^8X|-hgKCzW$Po{%XgN4@M~6M=a-GuN@BEp0*FV=<8iy?Z;Wxa6F3es0LKg zv=AP4c-G-L;fSNN%r3IHQp;oz-fi+gwT~c)^7>vN!PlChtkJoe$!~4nc4bgKJyiHc zaOJX?I5aY8;k+#HRjaV@)v6{~a<}thS&z!JRB!UgHL*WjPt%fDIc%6KAJiV`iJjN9L1P4v9xv;waBWwc0amL(80Ja6P7md=36?az;;=5W!H$ zkW$DKA7xGx$;hM9b0>LJh?wW!wM=0CkU*L%WOnB4@Cw<=`vijpn^l%wLLn_)fVux0 zSkbj=$s0%qNOAWP*R1NJF>%3t0>o(3T|`&H-BC)Mz|#y@B!e z(o@w0QAVSkePG|9q+;mv9Sxo1H@vxDVkuyis8ZiOG&GsvCzm(fmZ5qVc4g*sxpCyC zs1iunc1B7CL#0`@0a2bgUSBO0u+Vt8q5_OvTvREy-J>}aVdn4@Yka0YECQpk+Tjre za)*4fSm276)@MMvEg7b>X*v*rv@gj!yR;73D=K<(MvxAniCv-Wf1|Pr&480A*&Rtm za&}|CW9e5z0MQ!pv8ylz{P5Zk;u~ym8J({2?3Q4GCXa%@@a5jPffAxz~OfoYR(%p&T#Kb4`Koig}k&^f}T$B*6;PS82&o7>R| zGnyvxo>u}^!4xbZ8U}_IKID<(BjT?hEJtUZ*52kN42U)CP+ghRw;zuF#AL# z^so}c^c+M$JU04a><|rcqx|-HPRaM_tGU-Pw*E6!%iFG+!r8 zaI&gZ#cORpX9@|jbd(CMFLs1jiUcCR+9C~&bh?fQ=>1MXUA$QKrW4!^$V7$_43UOK z*3t5`QU9W1#gh)Tla=HvM>hAiH@>@fJQ9PCn8Y4n1WHI5IA|UA{vny>XRGp zUF-~iM;|YS7loQq{mJcXPO;ojKm09~h-^^%mlgaZ7$wB>?0a0}YO+jBg(FBYbIS_3 zypIVjA4x6fm~yY+F)$>PsE)kX+u)bGbKW0`uV5!Rav;F7Ak=D<0%7r$E&F<|gMPuZ z2Sv>P8!!BRDfxNq*|H~mv^;|fwXgbs6yx4J0qb$<$dJPPU6(BQ(fPKr&tSOWVg3G+ zKCZ|*T)ro`#d2@D>A|q!;qsP`FEU25<*@1#6WiY`r9v4k1%@W)^aBro9$lt`pwm`T zb*@s!%R>e1p@I3w?gOkQ&iKuwEG5iD`>9r%@ME`zNXsH?^bqJq?^nMQ+81JcmR7iO znEi7u$vMU!0ta(7nd?7Gd|_JD_+-*0r3LZwLw=N)R48oR)wi`Jvi5{nL_Wgj#067tHOh}xuz~EWZK^bq)_1US8 z_Xq@au*xA93~0^#Ma#M9Wi+!an5catrClvo^HEzi*LR+FT9y{4$0_y!tMtTEtuYi+ zyzN*;YjLt93vck)CU~tl*pS)U*(`$UvY6kV0Q!x7xDSm_cHl!6Q@#=;i+;F()r_E| z!Vld$hoxhSCr8=`jY;tCOYjom)WwjAQo^Hf5Ta6nqf`%)cc48% z82SYTU-+5e{6?lD3*}gbpBldjM>psp;5pw@odAFA@ z6EvbuqZPOc+o*C$Jk2FLtHYl)Xq}Sje%r&gi-P~`pJb4~bu6MyO>Tru?4oryN;J_C z2qZjfYxEV&b0R@g9@z=$AV`4}sL%Dp^DQtE5e_xL?&m3O|e z^`5$zrfWBw9<~}C($X0q+KeW_MQklH@(1;K8F}E~1XFyH9w+qBoYbFAx@7u(T48^P z>0yYSU4aY1|Kx(`7_Dm+Xd|H4nxl}+tX#>I-PdvagF;f^P!C^pT+YY`t~;5lhBuC3 z{Y7?$5^4tugVKs zPQ`a8-kZ*!IlO#?+_>M|LvDVyS$^RXPrGrzoAO4pgfhJuB#C~ZN ztdAC`CpPH+(?z_Yy7360l9G)tP+-qVuZP{=95z(UqERwZ)O;;qDg)Ag3bn*Fk?Bi1 zFo_^hKZq=-U_US>cIkpR9W7ISxHN*pr_9(~xmdUU;0Mfc8~z>L>6Wcb$Qn@qKRRWM z0Ix~QVBT_aZhG=}|JUJJT&3QTi?RWNy9 z25G17%JStAmd+QW&%ftfbMj%-Ebp=MQ%mvNN`v$C(lDXq=@5evYesC8^4vs{rOORY zD5|f~v^XhVf#)v0)Jk8+t*gfeJdEaa4*@^|u0gSnk23!~C83IlgWaiVd?s=F+GXQn z6T17mE<}t?ZYq#GTn>F^HC1eA$Uy8eIm0NlpDx`GjK!#9&nZ0x1>_32QWmn_Xz7SgN+-#K5HZVwE?j2B_G{EIX zuz2D&&Rivvb>M_jue+V zl1egdE4YQ8)=frGGs&QWQ=l?J7PoKO;`YhglGI>AP0hf47D1v-O_R;FWwsU9)YHiR zGmhuKS)~dS&Kn#q#@VAwUvf`Rw(p~d%w)xaWb-|D8UjC5A1=*gZ8}QI2!bhTEwE%! z#&}FGch`%IoYKzIhR4JQ6!LUZ1N6m1Si)*E<#Hy)roU+=QH5dVDxjB`dA-J`a@3$N zZ|qm1U(QCY;ZC<(e8i^1X9uZ)9}sbOwKXzp)cev9iXdN%s?cGEAYu{goe`+w)!3u6 zlLz+D>}~2KT24G*z7jVLu~Vdi_Z>kU4Zn!U9f6D6GylKweT+op_4$f2?rcnj_kA$-Yu~p_TUqEX_&m~S za2uCsd+H+K)8J8_nZR+cw0IdB-zmo|gpl|n?Z>A&7SF(F*hE8NR64lF>4#c2Qf{uB zte6(huKoPai%RACZ$`xn?A&eC7KZIBM{^+i9OkLd+#jd@Yu!j%JN39kVhL<>2Nqku zBsIvJVw&A0WfwK}`W~|B{k5nz7E;YW2!gNf$=E(#?j7fmS;h#eBTQyAqmE@b z6ikOo$=$fJS#vS3BvltD+T|aQuY)I)?DSO$G=Mv{@N{@Qx%Wv`Jh|>3l z$iEDYdSJ)_lXXU_oyU3cq`o5jYjp6g3#08W*9{G)o0J>_VlgLG(@M6vkad`$IwcMB zVPK;~cRqC_QC8H$4$)fFvVF}E3e1s@vEek;H=~n>x%I~9w8d6U|J;F6!j$AKJ+XbM z4IU}rG_st_;fQo^m|m}7@;hHAk_o6W{Za`KkyVmIC$mdcKk~_^K{Ko|J!Uhm%^HFp z6Ohses_Q3V<^ix|3ehtn(O|&fF_F4iWbTA4P0Y>AWpzyfoV5&z@-Ag_EYF1x*ojN0 zma=l3HN5Hn%w;=p#<&h^Dl=pUxkQwdm{>H3MKu&q4Kk?@%;Qq<_acSSw19jbW8pRc zCcqDU%KimTH`bMiIer&Yc}Vgja7=yCpa=FcIi^8rMn$t~lX}0HlgyTnZIt?+<4Nsr zb|WgS&X*$^w!cXZUltK+Eq`o)lC0#5Ws^_JY_9~NtngFK|7E`)$84bi!*pj9z23!AZ7fUwvJZ(Y+TAIQGq)Z`t&Q^VF zFq18#@HH6~u0hMJQzWPPwI|U+=##9DHU_;E1cZ4Y7S->Nm zgY7j=|INRQ{RdGK6*xkS3m@E>pIL=Fq}DD=d77MFFzv)Cu3<2zzk;A_R-NS8Z|QvR zm#v(V3}SF=_)~4+56Rk9Fk-+4?>)C1F$GmTpha{;OyO$5Dmn;_SlJWvL`{uL9)_?a z>=iPdiu^J*G%=_VRg6~m%rrb@pUq|j>?slvmkMW}~vZbpYYf8-#ZI&)gIw<-r zFsgN%7Y7fu>ax>PaG5G|Zft)mecO}`)-JK$ZW=v&ULQYRo}G%#FZbyvZ|lcUnjD7Y zL<_s^qOB^Rn`3+mf^eHqwr^W>nQLj5CrB@rhz)Tf1^Ob-#ZcmzppBSaUNGHBei(W4 zN*@6D8nHH6z3UDOhjdVBuaI4dKXc7|{gdbI-t?R@>XY*qOZo7v=}5%)e8n|i_~GlR zlq zRJJ;qWBU#A@~8;|V%7KSo)JaOvh7(?_@GMt_${8;6DApjjU5# z_KTeoBTW0OxH{twxu^l5)8-BJ!ttu;HGWe%7%q|RyPE(;438VU=j^qT?}@`CVuKmq zhjV%5Uu$*OgbiAVmzL0aed0%dU_Dq3u>u7Hh5JkZwtn4~?R}{cAu%)*#MLlAy#SSz zQ6;h$yf|Oz5L5|qQ~^PX849^-R0O6pR4qmpE)C94%edh&xH*<_RDUuHMM&mL)j9ON zl3=J>P=d!e+~Cxl$zi)(KDC0BVu!kpk*6BPXzE zV${LY=}3`0m+*x$C1S&5Fu6i>sPEDnUU=Run)d7;dR}>6Eh_6H=~n|0F|bt^zJVKx z79o(B%827r4erLGmXb1RiNHl^ono)jhnWv0lGY%=axT>$MkFa}@{!w72`BUsyo z)#(Cubd8{Ty6+YB+~0#}nauXeWz?2v*`Qk3s#Zs_#)>1f=5OC;05i-~CS3EVzPAjg zI7A_bFp8?k1D#WxEDgtm&O|S`go8+(nn8xvoEKZbjam&O_qb3yZFYDBMN&Y9?RaNT z8!`X_K?b(_hFNoW@rgnmUIY*8o(m&gZcA>JTp86Zi7Tlq&BIh~^e zEVjSe?GelblvF=gx)Smg1LlDZfdk}U+ejty5z=&wGIG(U@}AEd+SWVt%&G7DLU=8# z=S#OBt*ljJ6^Qp?838=i(P4pZ4G*JII%mJ@JC3-2&er@y+WqB@J8k~tU=0X(d;8WrSM+XGjLF@im?KEhj2?sqO&8!s*#mE+M4%(f zpx`FKf*Q<^iay9l>MvHvX*EWwh#9d9bWVdV2?umM8q}3{S+HZ#5;p6xH!d!4@d6)gtdc#eywU-y+D5)!YoX{mdssEo} zgdacV@o+Ys`{B=9e7{>U741J_+oq5tuJ|J_Gohx1LTjP-fu@;blx5YCWNvtMt;o37 z@?ysaL(kQHXcYRyJJO`I5d0HwwU=T{$2VQ*+aEx;2aJ`Cryt(($)Ei7^{puUu77u- z3dXK*qy6mAqlUZ~P_;}7k;aczqF)v4^VH0U;k_29^44LDO8`*JF}qy!BzTgz7WM3zO& zD#)*ptP15@bZ_j`g`z4XP;sEl;G!TIQKK$-Zk?)~n^_NQ$6nwx|8vr>QgwEZZRnT| zqX`=k@Nf3BJ>QZVH~ZJU2ZqqfQ&92OV8W0{XA15JR$Ht@mjcL7Led0SdnXkwdx@3k z4;2t9+5RvM9u>8!k`h#K39KEayn`@wxC2BD~P?M32bT!kt;P;B#%l%*gVwfg*d4EK2DAj>apflSUee< z{d^SX7!fxgpos8bL>tfn(1ar-&8njQiG6xyDVfdKTr`r@YU6J+SC&OwDQhq}Sys`Q z;DQwe0m6c@E5coAP2o*YWK#Lvl4b*dB+i-JOinEhs1{38jJ8MRDnZH3AuT0l^DTT_ zko}F_xzH;W!T|fc=0lOQHy65pyWn((uHERa_noSIk)L!IBkDf^SNFSGyJO!4L@l=+ z(&kC}@GgaE#kg%3H2liU1IcUP5x)$e;RF0F9>ntz!d4=u&K;pkmrNE}Cd%ayDKL#1 ziXBbXNLGZLk@^w~Vr0fLL$-z*NUbiCWJ3ljtub zl%++GJ!;~a1STNqIWJXDN##&cE?ajz(ZTMkopsYSoPCxhDu0ZI;S9sXHF`_-?0%uG za(KHhR0dPKE$fhviqQA02D&0nl?WtQ0@(igf)lj1WV-IS_86}RrIC?7z^(DR{dZ$p zbX2lme_DQTvVI`g38)Ua?nVQ)0wb_#u}LZ`%y+m|<(cFP;ZtOyWad2NS3p5(Km!v~ z-q=o~!Hg^)i6nO%8d+`F2Ml7KQu=zh8L^rD4)b6oU61~jW}|yXVk3l{2+jcLv0B0Q zKz0#jY=k1!0-4pk(sIa1`_f27D}4c7LVA{NJA;IW~_P_ESMk z8i1-%fsODN4n}oKYeo1#v1)TFmkmGta5xXBbMbO7?oJyp)N2G-bXTP}2Ln6reA6%8 z1_?y25%D;b7m#lHmc9dgN#B{45c-=Oz+yk1gur4S1zfcXxM5~t_kH~i+s=^P;q372 zH<3Q2Rth0kK%(z{<9JTR`p*u|ji>hd$`g$lK1$%$m-_o$D1(rXBY6^R*Mcx2O(d!b zmGLm((8FR1BiMUKvhO`FT4LhjcA=9^pa0`VIGM*XjPFGYL0DKA?;JncE`P0E)zVq~ z^LllQ%h{}G*m#@RU238ipW%69^ybb zs|wijSe4OJ%_1>3ZX}N?>I;^U9yRH#Kogky<8MZP#o(cNWk?U^+NT@W;_pEk(l&kd zmM8a=Qoa|uQC}A6aE&2?#<@=2D1@xsfq;s@{=kA2g$Ou&!ob#?^!58AtO_R8{Qx~2 zt${KV>`prPdb@(_Zpq;rCQO$)# z?rYwAxck%ZPP61%Va||J`BSf75B?cAH!<~2B(i!CU%oxQQCI3C51WXLF^c6x)x zXc8HU@P8vCQU3FJ+K-E(=@9a!&7r>Da43Ocgv5v3^}i2LoB+8z*F*PS*RdP#Ki_lD z#AoYigzx&lqU)*l%v!a6`UQ8fj(%{C-|n)zTE9YTj`P1g?U55O#Uwe6l+ndU=7%t3vlQr>fn{tX zBE*fD)A^t7K^&+?UL5Q|$LN~{W~-f`zK$KwWl3p=-e68XzwMCytHCipq|;&m^c=i1 z;8i82w8)>*jEaMFS+xc!cutNG8AWC-A_fadEQhoGqnJiNZ@@CH9s2wT1&)9bB{)=E zu0&;PO#mDK=MHJEWl|je0)y3Xb!x7&K$&DqQd0sk;-O(-le-io^PY7rcx$>dd@e%z z{+eu>2cZyY-(b^j-nwhBdOtF~Y05)_7w?~LvW2+^cx#BL4=q;R+%Zjl>houDe@6^r z^|Tkl4CS{n{wc~r^sG@GjbN)6#KRi>EUnHEu*~%BpAn9z|18W(<_zgTQ`@SSY5Q3Y z*4hWeT;t#eIGLmy6u$)AzrVH+$so?Tz-(-ZShx zN)`?^74U@4>)|wObVCm&)AyEo-*_B;+(-fXpz4Pusqc9M`^ffxC<>I0dTDk~-|{}n z749bm7(!uQ)0IZ^W#e!%-ZhTLHAm6^Xq+0K-Z|VV&6)v;55gfxJu*rPb!`??>=bPGCYnTc(Z=0y>at*P`O!_h`0L6~Dz!_138=}@P4arBhS4BkVe^6o&OGSUo^!mQf~=UrCPKTYz+t#q zXHbJXp#LAJB`qN?rg3pky7?FTCdOCuvq2=%f_@j4(Sc{!Kcc337x}%=l~tl|H6|=! zxJdyogXx9pC0e){6)aY~i&1PDAyx=%vQz?1m^L7-yF^JiOboR4v*wEM{idzXX9nS` zA$zkCwtk(=Q}5;d@fh*C&qe(8+La%f=i5I^z5ShiT{zc=&scYP-VCii55^fygCDm) z9$2hwIXrq}i!NF39$gAE5x#JvxKTQm!HAAGmTYZ@uHFB%dbcIF+3md|X3n^+A-T?} zvGv;9lpt|Ge{GGr9=IURrmgiD$%ErseYE`0a=pC_8eVgPe$HmiBjmUaqUFk7ug0_HN@25WF-?rf~NV0hy zM&$pHB+u3ly+Ezs>wjht6jbr@gTgAC6{a7dTdY*sNp&y_6CQ>*@fQuTo(}dHLhQgV zYO0jHiwRLlQ2|3iv=r_9LX`|^iQ2T>g(VlDp^AB1DH`J-EbAIYPW%d+XodNN`MBiD zds(c6xE3kw`{=l^B2{&_dJbu+ow3I;KV@_*Bdk7%Z-9{z%VK|MAH!ua9y4q+@dwk( z92My$xM1yAXO`=Np15arEjk+jdtfKF4XrzcU4IESF}8J1qg+-1BLKU~bUzBdhyo^& zp%TEzNTR7?5+SiLPi&zn7DEeG)8rkp85Z;Z$}5IaO>yg&oGKI92eJ99vo_^>>ETNJ zULa;ANvTJUpeo6v3*&Ng*3xf${H2%RVY@TeFv42l_bUnZ z`o}x=<|FY4#KV1~pBe}kENI;XwwErkk5T!`*d*mes-AqoSIh5@THnc6`2y9I1k9sF zS-4idpYUQ#Rgt``v7X)8_xd)+Ms65XKb%=c(x?|vXiaZaNYnv zvjWNfwGPc~Mre!GYGt)y-+Vt0RE&yr+%WoKyY;PtiA`^Fz)_1{p#J+ynlovyKgOrk zvbM)vs5k@(_^T>S#$(Ek6hIxv4=YXTJoH;6^Mdx1H_Bp-Ub-Vxc@YT{eprTsf}$V) z)6&}`e;3E^&Z|QW2`&Abko>*>a2=Cu`__JD!<#6-H7F+~T&>rJ>3TH%I_ayF8iR#k zgp3x6$i&0~tRPhV1t`+wkFRRNqcg3UB%TZuHa(AkB_X1f6({DfhG-C|1eHPNWl9w3 z$dc&b18F76#+H4)+p8?{Ejj%hT?{Wa?$1h18C`53?f)+r2l2h^qw2d?G3dt9`?;k_ zKFGRGGOt6IBm(amathFmL;#LX+cU8TB49Jiq-O9qpe!dOaYSij5EbJBsawNhehtxu zDO9M~B3GlEgz{i9a8D){c-{$`v1$d(T1S9+#g-!qzj;74w`cnIJq8>r6A?MlnYNiGbx{Q)q@ zDm$-6ztx3#JTcje8s9rwd8>(Z*8dZyWooyf8xtG5vj8QV)CV#yct|y~jsbme#V8(I zL$LqKU0W~rbYKxZ$WX7#?0X9|s+wdYIhP4isR<0Bl1YA1;UX9YiSS zyafmNPf2~c4i}C2{<`$te_-bIdhmm%4`He4rpKB+|9So3+wM0mN>oB1gLbtxkBT#b zCR0#QCNl*rFf>YcCm{w5Y*6_H3Z*h#U_z)jGsWg$DzT#mtI_TTiiktD0Wxd$YAt3( zVHAjT)iz&|iEQI<#q4`xBsh@!$0}Tefnarv)FfwLHF5l{PakVI?@pZ|TYG-g3#PH3Z`n8BUUE5F zr)m9iokxhCpa$z}3Sjt*+*+&8PiZI{{ZJX9?B0x(+FlRF6~ON#{^R`Bekq>S}$fc4)onp!Ac!H7#4G%Yht=ZZopzQ~!szU3z1{|LM5suP-K0 zESLQKhCFrV|GXUUnq6|;_lKr@Xzt7VEB%XpUHfj-ME52%2*^t`m49o<4K6MalZB&0 z9YRQj3sX+RK|vrzcJ2eg1j7<|J>=73qC5A!)zOez^&t+74B-Tp-iXogGDWHyb5YtU z3{4g8XinHs9a5O&RS;pC3_|C0%r%mBGENK!3L8m2PeIWO=#LkHc5N$ND?&k6H|y8o$^m3iKDeLuyP@_ zy#@pU6#^3*D_n-w9ZJJ67?CDehEP>eBgduC#q76NDn^Im4zW@52bhu6v54{E(Yx>*tI_q+6s5<_GS$7;c}B!;?Q5(a zbOq3E*_`G4gCo+G#C7X|i1%q2VzR+>oxLDSFdJ?h@qE=w{-0nQ3|%I6If*yvIA5^o zw`2VuS^EzI@4D)F{yOFO?LYPTKL>Ef90m4e8%Y!ZP3vH^@OyvW8hv}d%Fn-oLPIt$ zm!7?Y4{MI^AvtGyo45EcGw(0TJtF-45m1DR;Clm(B@6-$v6xODmgc0~`AU0)^KEfS zTv((oo_Q)3g(5ft%+0QeBOeh1hPAd~{9;6_;nJ})GM;7o#R}D#8eT2kYg3LekW9TG z(2Nim7qEv6Y~ge2;-v{DfiJ$`>C3@oWf5~?tsS1*NINWugO1?0fd|dszVwfWiIOTTH#j__}Pvv=0RkYJ=cP~na%q~nBECHp

pLiP5elc| zi4m4Ei>D~p8R0f&!@pkSX^E}dtt|_- zaW%WY%7#zNh6i!*zh5%An!*~k-T~rPYa3)odtWY{^}jtnNnPBnNE{WuM>3pl4$-P^ zKO~;|1Kr(ss`P>u6#L1SN@YMo0KuUu5Bq|}Vh=lTlTh-j&fNg33B_Xu356Mf^h}zx z59wF%udS_k^T{-0Gc$PTfc|_9wT-)PGo?Rz!xI>KQL_EG9zZSlaiZurAOw}v6`62+ z54rOHmb~>`cyuw#zs$*hx?nS}6%#8ot)z=kB$P; ztW4s0CJpsn3P9hi1uV~(3@hx%pW;z4D03W$EJ-^eC$=BdaL(AVfU&_G$ictv`*snz zwd+?WM=x46JedRkLAnDaAItk-kMg%X-b~2iHPu`()LC@~FR~H?6BscMRiikT11dho zQ}P5ejT0uLGYq5wn_5>3vnVv9bg(OQQBtT(Oe>8x1In^Et;bY;_HS@TLU`D|V9-TO z+lL@2rk%G61bki_g_xXmW4cZ4Ze~+zZfF0Hpp(Mha;M%EeMPJh`X23eADsPeZ8`GV z`B@$k|Wt}K@Ig(WLaJTNSJeTWR7*v$+QZOJ^%daz#RId&caMvdneIj}!TK%=jqqcR$&A5QA?UDyoa#MNV6n=Z5{~(r3G2LVdJPW#%iO zkU>l#^g6F$=4kxs`8QAjIG3fB!T5qbX0UCT+&mK zw5=(`Ks7jvAQzkEz;+;41dOVhiP|oFQA5iatb`u!*xkhn1uz=p>hm!Q&vk6^R=_{B zuV*GZCfHlIuGN2E7rf5fmUhze{m=w?8&~4)J7)Yb$)TDb-`b$dagm^5_mPqDvgA#d z^jiC$X;m{y4Fq;VAf~SN;NkX|wEbG&mV@5bdBGnuHVMid9HgI>^>;|4tZZ+4UZocL z1^i~lA^lGOggV;meCO`Mc~BlQn*K`SI+Dqj3%|KNcGuN?_%EoH&M-Ce?SbpZAy3^n zOv8fB&fl5uBAZaJa~q1+&BRRqC-3>`<3LL*Kw}i{|4nlw-B%Oq>Xv~9{ zyuJMOI+6dnnu^uNI7tExsL5sQRGvb#5@6;ld@z*Ys8j=im4Q`C^z!id1VOYxy7XUd z#71PDapni`%y2Z+sQ_kF6|wyz{2OTjVrh7R6o|oUiwy1?Vu{VOL7|}q4#Y|DAZsyr zb`wBNLInb1S01GH#kl{p)CW2PCH;cqmQN!gjCNnZbV6~x(2&m3Y$MiZ7!0nY+0#7a zuBK_xNYZ6$O+)>8(Zt&rRM^>agJ@g}O&v#Ufrdcvp^q_lQJ|~MJ#Cg@6O5qwiV{uQ zmOw?tG@7G{7d4(7WEwmfVyBdtmWy1H zfI@<9d}FZ)bZS(IKUd#z4}Ux)XWUJ{k6ee>ja(!2O1w(et+9+gL$SeL$vS$Ifjj(# zo8eNl`l}bJZ$5*?_CHPts+_m1{iWU329G3&C z$ZeFL$?j}of?I1x>c98W1s)%YK5o@j!v1pt@muvD%6fdh9iw)JMuiSCH&>tm%=FI( z^v>yDzj>|cFlPN7GN!cUpry62cI1_n5*jx*%ph`+Pbam4lhL4uSBkZdri@&zR zT5z}Z_g^&}dv{TF>;K_)zv3G4Sd1)6!wi`=p#N7DK?1H&h4hc@SKpZAf?7M4#2V%% zEN6%nQ7OY51;tKEhV7IyF_&~$tT`Q4dCw8CZ(5d##CsgREi`j?&Y$$X>iF85lzlQ*1u*PzcVjw{gW z!-SDHE27omurdfw*H=weUQzU$%b z`Okb5Gex~v=-sM}TU(?fe5`$F0Nq@YNIOrzK|@C6+b?T$ok>@QO?swHTaR4R{BTgQ zGW_lygM?QM+?6zu$7Fg~+jTkc-ydnBHNE%c0FUu^=11SbFpT!w3FfK_{n!=l7dPm30|7a9T!S%?(4H&esbQ`UkxlYf}M{_h)%}Q2&GV&AK2}z0Q!%AQh3T02l9YUn20!igg2zYbwsBsuIMh3wxq;!lFotB}R#lX2>BVFFp zsRCow;9~f-l{pAo%xV!W^D%@U^^b1WpY4`{Ftl=l5Uv~Uf0cHw83>!40d@m5^jZSK z_Ka<$6r6`N){GcYGK=cJX4j~;1_BX^czG4dYNr$x-NZ8V&UeogWB(Bkq;<;+TfkX_ zg4GT+3}QBhSEGkIvbAc3zvmARu5tZ(%O)9X@;|)t$HM%!)VtG`?@gj{j>CH#g^ zg;4%Knyxx5s_yF!4Bg!=AzezR0!o*3w~|AHbazO1C?K7ZLpPEt-QC^Icjx^*-(NoX z=y2!UefC*SCbKkUKy3jK6c?*>BjU9^-je#Lur3Dy- zsm1I{4oE4oq%_DV>QH#allNinqv3BJwq;fGn5 z$oyufW5h$6<5OifPPj%WlnheqAt=(^a4cHO*!5@{+sn;$<|7aw79gH|h*ftvQP1OO zX#Yf99=cq=P|QIZf))41wF%YWEz!a4^mu$NdHdV6!BcG(*(JHf>IA-W9Bl0c1qM4E z6D2#cD&p@g47DkGZ{^MHRH)^ciGV*9@Ka1{XlyEwN@5hOjnzX7WEcpwcT%*Jz&%6M z)N`jPtm0SCCk-37j?ihQGM$y}(?rN$_v0=&hmOwC${c@-wc+K^L9TZ_V@p)G9ffwS zYpT&t>*SeNP1)JS4VR`U9xre`0%ld;Z8R5H#2`H=?aw(2-37~$h4vw5>h11J$wj)y6O z;WIFE8$b7M#44xOYH6N2&R(-3*YcjkW5(uDLo$N+mvSJTb_JK%q+uLpF)bjRA*`}u5->)WflwXC=gW7*FX`h>M)E@P-z&dTd;{O3Zs_fJ^1KVe4`TI16Lw1LFT!M0JD zNaW-;>zkFC3L)Xm!w)UPYMnS?ptuFd@iSS^2^ey!+a4eA?9dDQka^tx{FqPV`|y$6 zO5BR%VxM8_^u+$6OKq zJ$ehDwDMjrdpRunJ{*Dk52`w-!YG_RZt()c(|gwYq8tGqkEyBY_nn*81A~)p7|i;~ zme>07bTV)?W0YIP2~a)2%icy!f4cE|;lG}C4U3W!exIET$&M$Hl-Qq+ zkj4z3m1jsD)r}4?Sv^t6xstT|0~T3-36v=2Eu&f= z)US?6Ye_g@&SE<;;GetQD(oz(en{E6y)o>Ie%zhYQT-`zpY6Fe^NfZ{Ow0~OylGpG$nv6rl11DG59H(mD)rpHU_aT8n{`A1;h3sIa3ij&bfQj~4ssyez zXA2G;ZRjJ)z+~)4Am{f3^U8C$xK;>MTGu04S!5wGGGK9FVzqJf9NR$b_y2f7mYXA> z*vIg_?V+~6J~%%4FP7qzz1Q)j(=3*R4m)0+Z+Ab4-xK$Y@rGjY(ZolkLi6}*{DFo9 zEHq{$`@G8r5?T5HRn5~cvDRsTQjk!yAFYfWpY-vyW2LJSiYmgu!~()3+@#4y%1YJB z%Z1sOEL3M_46XgEq-|SDD=4Owa06CTC{-D;zI>F&=1C;(UiESrF=O&nF=ICk=Leg}U6=cGnApveJE9~H^A7`7 z(dKa~ui=vy2fvg$Eu~$g02chH;@9B}8%HcG3Wo%(vWUGz@FsGIy_(V?AK8s51R2cm zWrK~`%5~|^PD&Vf?6W8F5H%~%26eXw<>=^2(C+D2BjiMJnA)gxP}Mc`wC)$5(v2Dd ze(~>V)^GI2?t0NG?&EM3b~fe-X4>w`eTH&rAku;72>etAwrA53%2JYe#=CDvNo zPd$p%dpV-~sJ?(dh|da4q!NcrIL;oeXV&c2Q-k^7W{IgT>1^uSGGk%#yaDC9Wo~juYs7`i99_1rj;UtjRNMRh*YVrAig4AaNd&+9U#Ck5 z`a9tiJLsX^(vIRKV=V_p?ECt(!tafKBA|LI21ee}{eFUqa&Wr$c{zChWc6iESzm*u z;9?1YUfnE8&U$gOwfG6f@WGQAQBFX5aEQR8Zxw*6A5$UHW`eVF+C#?rvQ?s(wm zWQ_y#h>zmyZayFeusQ`KG94_QbiDYAJj{*vKP=yf!ElDR?$XWNS;O9N$J1O+n<+eb znl?e{DTg~Fp$5>mB6Kzo=pgx<1)-r*hfy#2(_oteoS8<#BI3#7LBCol5j|gFC;WPY zv+-LExQOIW2r(1WYJ}ubrxK&{+6A}~zsf()*Yc>4C!LwcoYV80SVliBE?3?zq^8I% zxv`LVr3etG;_aaEd(+ACCI?LCRqr+W*s+@L6Y@W5)4|7PkpoSAE2R${b04p7dfEe4 z>`^6*o`%aHJ$qhj$5G2cz4OO>71OCbcbm

v+7c1;s6hIjoF7hyMBIVHfz#!yB>8`qU?hP$fF3)2OZC>FCz;p z&u*7jS8Fg_26I*XQx>NLgTc1|>z?Lk*%wJT3y@#c9%rWi?^DJg7B%(cN+alJ5C6D;+600eLZUl$BzzPM;F9Kp`Rf(G7rDKEfTty_*?DIj z_FOQ!5S_CXXMoyI1hCLSmOXd2av%QXJ_qOL)9ORI5bqku9a?c=-w3FEqAte8sdIrP zgZ!0cT7!v|kEY%f4~KQw*Ne`|txrb|1Hgf%df2>^Gi#Y?H(@W#zmeL0S*Q%`g~P204%5Dw2l?<7y$Vax3*?N z;XJ~9o7r(k?hWwX{dz0+nznVLe6auQ^?b~~UUcLItFQ9GWXkpCA!5_^Kk>bRg0i+BzDq})?*53=ylw+1xSA3`w?%m4tq8{*Z8_t<^F z`~B41&pR%H4+~f<@ka=ZExZK`C~;=7f=KAZ9KBi{_fwC~fKR0>0GTS>O6($C045dy zY||<%2moa&4p@x?)NBlba=qHISJsI3lqzSJnQ6%cXf{4-P(;$#H4g(a$(Tu#ugh3U z4u(zJawwu$kW0(+;kgAqy)`Ld{Dg@>rZ<&W6p1=8_5m*Vi`%zX#h9a0#u?~;he(9s zItvQz^J=+9)jE?~mcZrk)hNtdSiR`2T%%;~NALBS6!3NB__*@3=`ho~C8m;_0nu>} z+FYZSnf&gxY%#?E8S+G8htpG8hvz+Z zl~NAxLkCKb@JZa+iwFMZp9f(P+UREC;{dSXgP0WD1KwNL3Kh}!3UueRyXs{tU$m^iAtI9O+w(G6D&%=+POl7*W6?*L(97^^oMQ(esuO zWRNy&707HovP{`Yly&{WbS=vM%@Eb4t5@>faG>N5hfPA5hw2Z<0QMD zDAmA?G=)tEzO#Pp5df-@FuK`e)W+~%ozxznZ4LnEdIWL%X~^w#W4i|T<`&!Df<3gN zc13vQPKiyY76C9ncsV}b?QFPKc~LgZTeJRWiUQE}R|?ljRdur6LiyD7E@bLnU z(Y!FN?GwGevhdNH|1uP?cAwG}@Noe;DF1i!e=7?U?EW)&EjpniAtTq=F9~INtVeiU zWUfSOwe4#(UC-N`wam0(Ie7GtpXOuxyk5B}uN&)zWo5uKNHm_+kW>y z{kmbv@4vDX_8?psj=-xmzFBe~xZBCi^*e^K4_4w2IxuTuUq$2ceXziyY(5S;gJyA} zja4;XRAe#FohG^dC$gZJ>QcNq2{pvLX&q+D=iuJi76e%rsji3*mT96jmHUg@^qerK>E;CU0tD;Pu#T_ z0w8TyWegE_zySH;1n>XN^2FX=c8~y3VN$%fL9{=ps8VtGw}RB-B~NWRdkxtXT|~pY zuHjjXIMvft$I62odE@oGn)vy>kstDb-xK8}wG(`(ktZMha3rTymtNF%9H-2K-wV1* zK!o+|3-xk<)zectSN&Jo9o31H zV2hlB+5x6+9T41Ds61BT{?q9JH&)2EZ@2)oFxmTCn7oYzX!~Aczo#n=qAcqoc7Ve- z^GFEr=p9rxWPHgm^#)G7qedewqodjn`OcoVYhg7&p}%9i+$;hdNrGO7`Z-UBRvUn7 z+XWExN#L(L2|g!Tg3c@p$jHdtLPA1Yu9n7sn@>7BK~zALjS>xy#PZJFnd8@hu>_3& zo+Z$ujsa#u?*qM+?z)^Sw!@kMs#zc!I!8#z$rnC16qah&m?8p^Q&qY06%Y;(ao5(u zsFybnGWKV&#cpZbfHMp&4cuwybriydaR!{yTGzP|cpLXu2Q?RC!oVk87gN00Ie3vT zUpF)Y$1K2Igtgr)lf!}#a@I$@ak~-spLs!9f4a&DyYsEj9B_g`MRc==&3CQ=iJKB| zI9@nTs(x4l4i-XK(ql7dc~kYu2zW04Wqgc{L5>tZmh6MV zojAuhpoeOAi#y^kcT7py=x|a>pcFRNJj1=WymO^AgpA>(8gxV&8Wz_FSWU8d!IP*N zWytOlT`bI`a5dUxas_Cb4ER82v4T>~Pd49J=33+w>nY3l$V#VMZtwilf1tv~+l z4>Eh}4V|ixr>E2~bVU!TRaO8D1b6_c^jnbdYOtCZPbHI`CogM&W1(N!_Z(l} zV=ZJB$f5D{Q|%{ucJ+jy&2q|o310r2r>Fl(LP%ND1fAOOa9)?j|gZ1-iIW=@!j23@>Tf7*so@~~|U+$A6~A<3!UVDL~G8l|40_mTjMt~E$8&X~e$X>Zr!$;UngUaP2 zy`+4v9BH%=RmW1U?{aJ$DP!-@2+Pn+aV3&z5_ChVi%UP2mVWYcR|Ufbfwh%+sv zqXGVbm!=Z^D;emo>L-a%FR5r6fTa2Mb8&2J44s0;58pqyC-z1$vI*;!-Zkp<-w4vP>Sp^CcmPMeh(Ejxq7gl9N3UfU?!|V2;TpIQzodw|>%2E>{f%o`0r zj=4TGp_`|;^>3wGjYdv4lQb+NA+tNPHdG*rc%I z6nKAFu)2(OCyO1nAeC*`x>>&Wd%zuN$C>8F1v`Dutz_VW&P({~$m*ROuXW&D8-3^m z0_F+0*V7&VKu;S_5Pr0066$UVfR1&bMWqVJt}A)0E0nMxmxjLaEIB7!-XD*{`Tl13`5?<` z@p|;7RZe0`h46^#;v^q7TZ6Hb)D43(qDfPsi+_qS~v{5Oh8Fs^L*Y#yyEC*wZ_jR%_& z`WV_0Q97Y{-%kh5e@DT)h}A!S?k@_evy26>*iv?W4+xiG(#U*e9j5R^`$yX=i5yNH z4<~&VVjZq94-7`Z31jDDb{4jC?!|05kM4PP1a91pFaI?bC&S0{X+of^YMz5;r;h8g2==~FLT+{!D2B()#tLB=-4C0<##BOw?TjtKL&8fY9 zqzejixpO;XZ=09bE_^Q!9Mq14FJq(Y4`|jUl$Cy?A#1D7%TFJnH!S9bNc;tjod+N~GIiGz*j1^W)!G`Y%1azjpS)5Iq& z$}?v>qnTm3&zCVK9dqmH1k*A<_J+@XqDPammQNY^cxZ{?bk=cRrS*j8X54h=tB%`q81)P?2NY~V6cjWcRDH&=Qc z{z;}B$-=!hJ}>}LUV@%w(>xoFzKIi!g~HSzfLwyX4OV#Cy6BB6ViKU4!*%=Uvt``L zY~{0lp-P}UqN#NKqBlcSx-dUfJ<$2@W?SbXLl>f^9T5|8{?`-)VnLc4S;!Hl8JV^Q z`CIx5%#V|t8Iz#}DdDkLCDS_vk;xK%UV42#*>V?p{uRnow}taX^?Cs3dLW!!zxLDS zex1Y%>2Qp&V|lM9vHqJ3bGAt{Am?wot2}dNq%+r{+!bM%HQ!u~ zb7FTrSaiwHjj5ve))9sN{z6*}`#@yBUC_krFhY;&tp24(OK!1fFm#|nqKdD=ad1++ ze^YKr|6IQaHHD{S$Wt-asdWRA zVH*ZU(69SWZ!U2X_L%v86iPL%Lk+71dh0?*@p)FQ@DnZLL}3^5pKTsT#a^rgZKUyE z4PMSq)hkHnO^3TB7vWAqmnr>I@mG_ie^;oM8H>@@=P^osi?PtR)1wDpl#A|run5hP zB>bTVJOBAs1Pd!HK6SuLA@1mZEa6jn-mvFY#Thajirf;=R_80q>e};o_t^oWbLP1E z3^b-t%2059pG5XO<7HSjO8ve0f(E2f!DWD-L*M)6tya6S>DBuW^!R4u>QnchW`rF6 zG~5ox`Ng&8H#2Y@bBJg1Ewp`_M?!?xY;}3SxuDDVugL(A+fNn_eHH=-+IOiQFP=6? z9F6ULdI$;W8sux{ljGU5ISxsCrP3K zYE_F3O=ub+Fy(!~=Dj8_(s{*evkLT(`0t29$a)|?PVxI{tRRC^JvFkF!_cA1gzwJb ziks||?HNqNsi?kiZd^$x6D&}x!v_s^t*Hr*O84UOv;E(c5NRgl3j-Gqrq?O#U{M{% zMADKG&jvAd<8i{BTC(dYI6Eji*Ya9yRqgea2IR#2*zQJXow2YeE*kmj4U)y7=o=|V zGUrYjlkff!2@%2I%0D|VZU^!Pl{O~c@}Ew0Id$_}NWSLGQOOZ5R+w#>E~u3uiyn*&8|O4i zRp>-eU7$kVw{<;!vn&PYqyyJ(*yfJ>W1=t}#-ufp!%-$N_jg=e9KkC4o7)-fi&%iU z<40$)bDvoO>YD%!Gwz9wsMxou|2V+o6W^|Vf&=X8w{(OXNZ&cf6gK65TBuI(c=pEO zC4Fx``jyVq)ROM~n`QITOh-C8Yrb^ruGb8q^lFSKs_&$5!_^o{Lqcs83gpZ;(%y0v zWZfTs4fgl<2_tyGa`j>`h0`T6ro+(m#m!Kh@Fb)1x?arn9mw&~wDhZ6?oDKm*VQ<< z&%#HKXKJ~dv6YMfnSUcg&qR?<&niRHW|O5!4D>YZv##&(e53o@QkiP%YZj0>5(Dn) zn~1s+z2Bp&i~}v)d0gtPjt~$154J;>QuhC_hI068JDjO`{G`{a1q!I) z4@%4;6@ZL+LlMh?x5{|h?;A@_PxbmDm3&zfc&ME(L?TIeLq z7QfKdYJRg=2x?j4$}$20x0*3){Ek<4<_%tr9qShsAwVv3)U04AbNyxK>H*QdHv=yF z_sxq#sD-*7D}nnpPzXCwxnXISdZ#~Og$^}SHE}uRQaPo&F$S(1=|{k!qaqS-ZF42k z-GEv;@}!y(g!qvd=TE3BLF4p$b4H9(4V6b@I(2_*iVGn|A*sGLtMGo@NIAbrqS4f4m|kO2IMbr*rZ>=##3W zZAWEDS>7$y4OHbPQ&$IF5>`=ZQnt!7F+xcEHnqmfQr}s<3zmPv!jg|s&YqEXnoyY3 z8D$@_mGJFp2y6Ku)mOUDuJ+QR931GbBLbcIl>d0y?Ts}whnB)(d$h!V6yhYgjX!*) z%#Jj(oXJ>vIfRzn^6a;|7do@Vl~m%Nb~yHhUpE!)5658ODOzO7{(Oqw2IswDV{y1u zzjk>2#W!Uu;9HfAThBT4-PVs!RH&ovMo-|+9bUO$ zWE_5K!^~dSRJ+<4>kn+?K2>&bgWqgO&edZ0Z1JcvCv%(V{Gd8iMEIbx(=@p3JZ>Fk zH?o|Ygr_=SDebtgOEO}5NWdgt!17({?uqRf`k>3;t|nyPj9MI0tkOx86j{d2ADfKd zOd=$h$AtGHRQ=m-XqtgApX*m|Iv@16gi4|tSLqkFzdtoINYj{Xex+zD?mJtgNq;ac za}=KHVssHya|sj_Nds$%cyeD38Bin+OxNWeEmCn`V=R`XpXu0p*B_3KqUg6$&LaMZ zd0-iG0Zl}wf%15dslpD5{i0EU0iskZ@dL|ndG=`uPEH11-2*G>e`67ZiGv)VB;M-{ zI*e!}^r&~*-U}|H%(N1_avPA_5x!`y*3!T1X!mM1Atn3k*siMWbCmgob~#l|z9i zu|W-RtVK^skOVOtAP`8JKf0G_2XY(J;=SlrFyJ?J6#o2k^ooYWT_3bM;&1*C*|f4m z60iMYOa9`^7Z^F7zG&9n*UsQ^AjpSkuCT+$B4+b=cMIkLg{Uwh=d&R24UR3`Ubqfe zy++*{I5Scqk#?t0lV3HZj(?DkU(XoI4vLK5yInpsjQ3weRU7&YJz0O$Z+6L^yK&C9 z&+qfuI9E(_s)>)3G+s#)dch8_vxBG8ECH3fKA_}bxR$AyYT6+7mKMmsp(C=+Hue)p zpvtK*1ftE7x`yi7NFFN{cOP+<%3)Zn@FY%d)g`QOK$e<&9q_L@ajPA=Pzj3{;-afd zb-`QbJ994@#a`knni@cB^*qzOkNEMZ1R(97*GQJvoiQdi3YOyy@h5lEQYaX&Ys#hQ z5qRc|&}*&JBR-<`(%{vP5X9qz_a5~i;4xVGC+Rac;)RENeBxt_$HPT^UHdEwnvr(Eefg8A1t%>23~$N=^NTJ2jKr3HAhY(#8k|Kkyyd3Gxe8nxPW zVmpDqKrE|Uc?9~#{brU^*0|Yp=@cVu5;jI=M7&Yk(<5B0Q}9exNu6p04jTOpxwUFz zIQ^hBSA>!Geoe9Kq#$o=#^P=KLp96&_u!H*&AlzNK_Wrl(*~U~ZQl{_;99?(rLP3} zd;-(c)?y^k=f94m`En>J9B6{Q`y~PFX}kuv2yRw5tTaV+02YiB&};h&CLzFzA@;z87M=1nv~%dRM9o2LbLNlpa2qrh?|GaUD6B z2t#>n+Q-l|u2*(${!E~-PJRV3g+w}@)V!-uwZJ5hMYH(?8>I=sd7XfO3c6lhwkZ*t znWJA6ok?g3Hhgb*5>0W6)@-NAR!7hYw4llN4-Wsx&KmGBI2nWc+k-dKAyq3WjjGA{ z$|zUCy8?4B_|`}U{)Rg4LE~?x7?$IKQLd~s$1jJ5i7g#lE4;`~Jap46_~;))CRtwp z+P4{{WkJzj&pgXp)-W5}Vsm$#J4iQkJMFuVTVdSbc@y0!$th97ZObS*_GKMcdz z;e6T*!(u3*$o~G45}4iGvT7hPkoL7g3&P`IfJmS${<}}6`&1NkpoF7LW%%%JoOqWa zDt}Ny5&a_itt9Dz72V&z?j-QC5sth8le*%}yGTBTNdm|n@V%uYZ2;{8zgpR7JYo+I zO3Q1BMN_ZjIma6#j_#0>8csx%+0*vrQ3Dxzni`)E`J>^I7)x$FJI%dXtAY}*x|2$w zBnPy2?_z@KdX2Fs`@NJ0z0lDdLQ)u!1%1m@?(CDg+KHpJVjMX?yLak!efh>^>r0;%+-vqkV^QbTCf@NEHF>&Z9Z;hP!pPLS1W5?l?qRUt_Efk z2fa#JDTPELJsf%xSYukHLRA_bvWg*q{$}jh5r+kb*qxib-*~H;@%wsusM*?~NPt|4 zmm&?`I>shtd=FT#3I5b%H6ZI_FPvxBZVa;b_}EgH4s#y-swB(1t?}EV~SvSE9Cyrw*3GWnF-^^1M3;!Xp80e01UCp*=*a_rT zH6Cs`R4?g})wT=RM=+yE`$=i=kHzAPU>d*cP_ewPGsm@p389iB;f~l9oR68mk6Bk6 z=$5AmoP7vPa4e_ba2|I6di82qo?@+*aon3={LrUD2I)jBu7cw0Zl@8hZf<&#e=Fil z#D!-XNSye$U|ie5?^i3BC-O}l_$v>-?>`M7gSYpBFug;)A8r?i% zt%&U5UgP#co3j2unLna`S2!fO8m%Ix`dSf>$8vc~kgJkXO34iY!e zb~i{H>7M5YXWgBw6T*&vO7UvV+Wih$_4V0%v{cD1d>4wg0VN zI@ZWRKzIzl+LN6Sm-x*4#W@bwfSg#;E?&f&n22U&D)$qlTcw-FPoNY1OVZA&9|Gpc zr)CGNZ0-Dm!i>2YsQVwpYtuwP0*#`pomAC!=n8=+T9ZkC8_6duZJ@5VvP&}LrC?M{7k5NF>{R?t`udk^^&2S_;? zKztshn)M)vhDIQ=TT%m4={NVXs8a3#?XzPS>}9yJ0#bC&0FTnr|E6=76gw41@^$9( zuF6=?%XpCu&v~g)L(bTUn}wu8B}){u+mV`+swRtIqdc}j%GNqP)$5Vt`o{&mW6Ab9 zuLqYduvXV*y_q`Y*S>3s*SM^GkA1{G9&>c0B9r8s8}4B*tVSv+Es%~4G9hG01bc3q zYE`Wr-)Fp!By%>?piwPJ^{jlh)TJx&;Hn}VX{Fzq2dH0pV=+QrYWsHq7HJeC<5xba z=YnVdpkD_1{e>rJb?chp+DBI9Iqor5>*%3~5~-Q(_?z5TSU{nMfI*8Y!~7){9|=j- z!II|W8D7FV{2s302=!eq_?c%Hj9G9*lt13qa6|+r@#7Dq^MusTZHe^49Y5&M8+HBR3nmi5hZqNuhCG}@+o&9v)T4Kx@+ zFqg<;xU--N4m3yBn7~4_q%?o{io>b>EhHwAqF*9`0q2v zB04LH3TI_Y|C59`q0V-5f~6ahov*~3tE2S3??5bdo+&_n)%Wd6s__I%$PGEao^2{E zlzlo;^DR=urADTJya#Plw9*pE^+PA-JVgb~77n{w`Td27TbxU5wvUg$^`iyU<3x@@{=L_QzZfve$^mtlxZ+oqFt-oCa(4OV&W?uB(EWG&mp5V4WXO?N$?Pg z956s{Rs%;UB`2b9Q(>uea*(;Rq@=V%kc+s+u>yUBTAY`2eJk7enHX+2G4P?N`i8W5 z=O^;*F^Ttw1WNxQ395^L>rg`p?B0#z3&dGrO>B^?bC$oP`5_gE3sf-5b1GaEhw=Ca z`;s;nWX|F1q5#ix9fyR|$9n_%H0w8Htk8$UD1SbTfA-gYf|K{jiO->mo+hj@e|Q~R zl?6GCJ0QCq|>9N@>hI zOfm*XwYijB_#5POz@Zi3l&6KgXb+9ExF2^@0!5oNZ5F6``_`Hls@aOkS6)<}iA0nn zpsp-1FMjJg<{9T@RWweWrT6C@D=c8*L-coMRu=(7##<$qU1OtV$!Qg#3A0HWj9|!n ziy6;`j%|>kTP`cI;43SQtB z@W_O5C+ut)s4k%thyAf3bd$d(qpTyjQ2&R7R6>TrjJbubr6FGQ9+LBFRvom|@}(Bk z#^0G5|1<>hI1H%?u=hVPJ-H$`4uBRl7E*s zPkeyyS&Injpk&7;+-qeJ&y3$T+~+sH58Jg`JA!C84dDkahy8P{u9&#kuS3mbKhgayHoF>n| zq&ZhhCaqkpO$mFi-Z6vqOlhQLe~F9pTKG;>l{3&WUT*DQo*Pm|BJKwGQ$enuI(T}e zGA#zXZ6r-5$!xrB7^^^%F8vKZB}2nTd8qfPPs;S2#*c|!Yq(7{M0<60Oj`q{2`L&S zW4dY|_~=)~SIi*5z45B}=IWQz7n{Hd>{~0+Eh|A&#@kZzm9$7oti0inszI46V< zxIk&Ege0CE)t+FEoR=Uiju^$s>zRjeS=e%$V~h<-iwj&5o){3Jp*jNjhCOJUBKr$U z@Qi)ZEE=8l6N3Y_BIn&8L0!PPIMq(no_ zzR-(V<`g7?n#@)?$VDN>95qN31R#46|FBY-c^1Yb`|Bf+2+xZYf9Evs6vRSD z{^ECCX~7@+YA$Ewcj>XEx}tm_#H7bRCV(p{z0glWeC-7HQS=%0$v>5sb>kg69549Y zbdas9yM{$C8yznz59@=Z(YSt(3j1q5SyY@dR^=@G9VwE7BQ;(R-rFvr1yZYM($Cdn zB*I8V9Bob}XF4xSzkX8?Gu*4R>Lz|FN>@u(W3<1{Nx1nFj<3qfHZPr0%1Sg!iTOr8+$ ziBnJw4dvcEgfL`r-65`uF`ig;8f82nr5Ud)`&Svcuf4@gT%ZPhr{i)*lUJoNUd}{4 z#$EScz5S}m_G?v}9^nck{RZbqgp$Uwdpcl%yEztofL$(3<;`W@8uR`g{KNw4ZVYYE zJ7lKiq%8gtG@0`rOR4(vT%Qm1@f zrzzYJD`pHibMpHIRnz(++I8-&PEqVd1phdWOZp1@@vo~H0f`p14F3ND7RplSz;Pfk z9OoIAf;snph+H@F$EX;#Ya$mWU5Af^P(t40lNzInk}LT6qu0pS_KMNi5{=7Tr-r@` zCq2Sv_m*yvS2xt%yyZD&R~S*W{P!-s@xsRyB4sAB8dfI#mJY3NiwL|4;RIW(oC zwRTs}YB$d?#OqlyBJSJ0N2t4AJVn@jrGAo5%wl!?Ncmvz`t|9{TdQXfS6poh{Moqw zvtRrklRszt6MVXFpvUMYt3+G}$S=h768?I<*3W<|8*~q%J7wBwYi~zza~LNEeU$EG zKW$d(FmCgdE_Tt{|pw3u!C~a%NespA))>1q@7-LzOr(m=u;t=W zyg=3VjkOrtv9UO)A$>&n%Yd4W8gQJGDuDWjx%m4JC{xo!5xEo_7{j7?4Ucy`ea6# zhtC65A+0;)`=sImQzNax4=XE@e>$^09@UPPGUV4<9yaAyZP}Z5T|&?|%cfYTzl}cx zBo9zMeri$zJ23hUCD{&%uxxoQ3lOO|kdP>5Rcl3ISfegqt5w%nIJGm_7kp4M`;cu$ z_86O(xP<$snttbG4yw`4ZAV}E`w$!Mf~IcZvo3Spi;1FR2Q`ur@~s(7Rr;e~-guXo ze!$WSvfGQu!?yF{(}62wC3U71Bw&D`t@i*Ot z>~(+3TojSy3eq+^PxIe^zW*{L%VJahE6hFHkb)5h*Lfjp8}rBKI3mIe3EDYEFH6eLU zXYJQ(Bx<1cBHz55@H0a2=NIe@bDU;Ir{k-aI2j-@e;8V$jb>kOrujjwbPi_0VtmqKYRZQ9<1D zDsJe(YSiaJ8R=m6Y&`p^`JcGqd7`>We5?{P4roHmd?PMri~4qj*4fv) zO(w*gZv?;UWwH`}2-R~SIa&DuWn9KG!a0pXU5$Z`;$w9xf~xm_8s0&F=A1FMs^|KQ zb{<5HRUK87i9@CLxBmL*F(0@=f8s~z1$UJ!CYD=Z$&)cOus4Ts$QH!BcP@&*xqrKxn{cC%RkeOxCHPoB#7P8xjTY!qxNGE*Z@SZv|im(Pv`B-tlPsS(GlCz zPJ$YO)ht2=gWD(U^6dU_qTL@C^ZBRiqka9|qY?Jmo!?_rw7OKH_e+~>;tpn86}ibG z`;8CV_jz&JCCqZ3$gCepw33LdP>OImoEvPrrniY@wqb3%x&d3okIDZ2e1HS-AR%LX+0zCi!C&kBkX?(VLyj>I6`mk^NHOD za27US19@TLk--~d*p5lE&rNs}qt^>~LSNmK+4`x6?vh7WTbPg}c3{NFQ8qPJq|s4K za%wvnvtcLkvPSx%K|&`}kCOS38J0ky4~~&SA3Ws1x#?(%k?okAWWoDRTlbT}TMH}|7fO0vsAY%)UHYJ;dZMIzq9OZD z$;g%_u^pJ2mK7T#6(d6&;NsnaoM-d|cHvMD01oMa-=STt)1lt2H|RzV08Xsr^P}v0 z{p@Q3UI*qq;^)Y=|CWH86H*7T{_4-)F#x;*4Djj!CrMtoS5i0W8O_&A*8yJbuSftN zHc&$P@8YBn0FRl$?qD!BpY)1ptX3=I`+aTTO?6n+0*k`GBJR}ibZ5u#7{I(~JK%6Y z7~X@K|Dh9555=3L4@TzY;}y3)7H;9555(JRlKY)l`BQCvONH4#U-{5U)R z4Cuc{p#K$Me>wP{LHgf71t@#|CF{Qo^lQ%k3w!(L%zY<%{k3cV;jR3ADG<`HRuu|7 z6$)Uj8UWx@IVf8PK{>#wbife07stl`j*Y=WB?3BYXFxCVeR(*>X<%vO=jD>UIPT5F z=tt9d7__ZXV|jA}6DAW=YIg!=D1PU`zyttn9a#FHF=q?1&ao$E3?o~|BE3^fafwMb zO7%n*d?4m--G$Fn9~_Nm?ib8X9pr9F?EISdo+lIANGN*Xyx0(8|GNU1nHc@m8r>dx8kq5R4`8L( zyg4b^Clj7>+*fAto7q@iAeoqeII%DOMw}@n_b9Ui1FUN)0eV;$8dim7+sDc|=(SO* z12LL5^})FzR#Vs*Qy-i~PWK#RWKb@2bOUjBP1vR$xaZ~O3FZ=dI@D1Bcw*os`<8?L z7KU)OU!T;q0LI3-sL}H5ZT_W#a(AzKA zzrOC%FrS*^Kl@JlZ-+wR%y08sY;WIGi-gCQ!~(;i_$-2c8viS7f8D+}z+_IU0)28J zZ==jPm+c#4&Pn#mocmUmjYE1XJNb4jfHvyxcHuaf@YtA%Nfa zob|nb`UwE|t3Q8-R{#UA@a)A4;74Qto&om^wB-vgU%t%G{u9sZ4?p}+e>l%hz??I9 z&EC_B>9B$FQiEN#v*PUgxVD(;6Y~8O@sjikq8}C8^qpc1%hj#?buzoY{yhNv1drN767$Uf0000 Date: Mon, 24 Apr 2017 10:11:24 +0200 Subject: [PATCH 148/230] fixed two memory bugs in serialization code --- libretroshare/src/chat/rschatitems.cc | 2 +- libretroshare/src/rsitems/rsdiscovery2items.cc | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 75d90e0a4..e30c401c1 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -75,7 +75,7 @@ RsChatAvatarItem::~RsChatAvatarItem() { if(image_data != NULL) { - delete[] image_data ; + free(image_data) ; image_data = NULL ; } } diff --git a/libretroshare/src/rsitems/rsdiscovery2items.cc b/libretroshare/src/rsitems/rsdiscovery2items.cc index e1e939ffa..687f32f21 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.cc +++ b/libretroshare/src/rsitems/rsdiscovery2items.cc @@ -134,17 +134,16 @@ void RsDiscContactItem::serial_process(SerializeJob j,SerializeContext& ctx) // This is a hack. Normally we should have to different item types, in order to avoid this nonesense. - if( (j == RsItem::DESERIALIZE && GetTlvType( &(((uint8_t *) ctx.mData)[ctx.mOffset]) )==TLV_TYPE_STR_DOMADDR) || isHidden) - { - isHidden = true ; + if(j == RsItem::DESERIALIZE) + isHidden = ( GetTlvType( &(((uint8_t *) ctx.mData)[ctx.mOffset]) )==TLV_TYPE_STR_DOMADDR); + if(isHidden) + { RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DOMADDR,hiddenAddr,"hiddenAddr"); RsTypeSerializer::serial_process(j,ctx,hiddenPort,"hiddenPort"); } else { - isHidden = false ; - RsTypeSerializer::serial_process(j,ctx,localAddrV4,"localAddrV4"); RsTypeSerializer::serial_process(j,ctx, extAddrV4,"extAddrV4"); RsTypeSerializer::serial_process(j,ctx,localAddrV6,"localAddrV6"); From 08867945f34be33bca05ed835c42d80441ece435 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 10:29:57 +0200 Subject: [PATCH 149/230] fixed bug caused by wrong cast in lobby msg signature validation --- libretroshare/src/chat/distributedchat.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index f79b71a18..79c41b2f2 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); - uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)obj) ; + uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(obj)) ; RsTemporaryMemory memory(size) ; #ifdef DEBUG_CHAT_LOBBIES @@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const std::cerr << " signature id: " << obj->signature.keyId << std::endl; #endif - if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)obj,memory,&size)) + if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(obj),memory,&size)) { std::cerr << " (EE) Cannot serialise message item. " << std::endl; return false ; @@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId& // now sign the object, if the lobby expects it - uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)&item) ; + uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(&item)) ; RsTemporaryMemory memory(size) ; - if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)&item,memory,&size)) + if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(&item),memory,&size)) { std::cerr << "(EE) Cannot sign message item. " << std::endl; return false ; From fc82b2083322f07940453e4a8407602a6142e034 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 10:36:22 +0200 Subject: [PATCH 150/230] removed old serialization code in msgs --- .../src/rsitems/rsdiscovery2items.cc | 663 ---------- libretroshare/src/serialiser/rsmsgitems.cc | 1111 ----------------- 2 files changed, 1774 deletions(-) diff --git a/libretroshare/src/rsitems/rsdiscovery2items.cc b/libretroshare/src/rsitems/rsdiscovery2items.cc index 687f32f21..8e4175a9e 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.cc +++ b/libretroshare/src/rsitems/rsdiscovery2items.cc @@ -156,228 +156,6 @@ void RsDiscContactItem::serial_process(SerializeJob j,SerializeContext& ctx) } /*************************************************************************/ - - - -#ifdef TO_REMOVE -/*************************************************************************/ - -uint32_t RsDiscSerialiser::size(RsItem *i) -{ - RsDiscPgpListItem *pgplist; - RsDiscPgpCertItem *pgpcert; - RsDiscContactItem *contact; - //RsDiscServicesItem *services; - - if (NULL != (pgplist = dynamic_cast(i))) - { - return sizePgpList(pgplist); - } - else if (NULL != (pgpcert = dynamic_cast(i))) - { - return sizePgpCert(pgpcert); - } - else if (NULL != (contact = dynamic_cast(i))) - { - return sizeContact(contact); - } -#if 0 - else if (NULL != (services = dynamic_cast(i))) - { - return sizeServices(services); - } -#endif - return 0; -} - -/* serialise the data to the buffer */ -bool RsDiscSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsDiscPgpListItem *pgplist; - RsDiscPgpCertItem *pgpcert; - RsDiscContactItem *contact; - //RsDiscServicesItem *services; - - if (NULL != (pgplist = dynamic_cast(i))) - { - return serialisePgpList(pgplist, data, pktsize); - } - else if (NULL != (pgpcert = dynamic_cast(i))) - { - return serialisePgpCert(pgpcert, data, pktsize); - } - else if (NULL != (contact = dynamic_cast(i))) - { - return serialiseContact(contact, data, pktsize); - } -#if 0 - else if (NULL != (services = dynamic_cast(i))) - { - return serialiseServices(services, data, pktsize); - } -#endif - - return false; -} - -RsItem *RsDiscSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_DISC != getRsItemService(rstype))) - { - std::cerr << "RsDiscSerialiser::deserialise() Wrong Type" << std::endl; - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_DISC_PGP_LIST: - return deserialisePgpList(data, pktsize); - break; - case RS_PKT_SUBTYPE_DISC_PGP_CERT: - return deserialisePgpCert(data, pktsize); - break; - case RS_PKT_SUBTYPE_DISC_CONTACT: - return deserialiseContact(data, pktsize); - break; -#if 0 - case RS_PKT_SUBTYPE_DISC_SERVICES: - return deserialiseServices(data, pktsize); - break; -#endif - default: - return NULL; - break; - } - return NULL; -} -std::ostream &RsDiscPgpListItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsDiscPgpListItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "mode: " << mode << std::endl; - pgpIdSet.print(out, int_Indent); - - printRsItemEnd(out, "RsDiscPgpList", indent); - return out; -} - - -uint32_t RsDiscSerialiser::sizePgpList(RsDiscPgpListItem *item) -{ - uint32_t s = 8; /* header */ - s += 4; /* mode */ - s += item->pgpIdSet.TlvSize(); - return s; -} -/* serialise the data to the buffer */ -bool RsDiscSerialiser::serialisePgpList(RsDiscPgpListItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizePgpList(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::serialisePgpList() Header: " << ok << std::endl; - std::cerr << "RsDiscSerialiser::serialisePgpList() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->mode); - ok &= item->pgpIdSet.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::serialisePgpList() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsDiscPgpListItem *RsDiscSerialiser::deserialisePgpList(void *data, uint32_t *pktsize) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_DISC != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_DISC_PGP_LIST != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpList() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpList() Not Enough Space" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsDiscPgpListItem *item = new RsDiscPgpListItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->mode)); - ok &= item->pgpIdSet.GetTlv(data, rssize, &offset); - - if (offset != rssize) { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpList() offset != rssize" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpList() ok = false" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -#endif - -/*************************************************************************/ -/*************************************************************************/ #if 0 RsDiscServicesItem::~RsDiscServicesItem() @@ -512,445 +290,4 @@ RsDiscServicesItem *RsDiscSerialiser::deserialiseServices(void *data, uint32_t * return item; } -RsDiscPgpCertItem::~RsDiscPgpCertItem() -{ - return; -} - -std::ostream &RsDiscPgpCertItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsDiscPgpCertItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "pgpId: " << pgpId << std::endl; - printIndent(out, int_Indent); - out << "pgpCert: " << pgpCert << std::endl; - - printRsItemEnd(out, "RsDiscPgpCert", indent); - return out; -} - - -uint32_t RsDiscSerialiser::sizePgpCert(RsDiscPgpCertItem *item) -{ - uint32_t s = 8; /* header */ - s += item->pgpId.serial_size(); - s += GetTlvStringSize(item->pgpCert); - return s; -} -/* serialise the data to the buffer */ -bool RsDiscSerialiser::serialisePgpCert(RsDiscPgpCertItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizePgpCert(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::serialisePgpCert() Header: " << ok << std::endl; - std::cerr << "RsDiscSerialiser::serialisePgpCert() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->pgpId.serialise(data, tlvsize, offset) ; - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert); - - if (offset != tlvsize) { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::serialisePgpCert() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsDiscPgpCertItem *RsDiscSerialiser::deserialisePgpCert(void *data, uint32_t *pktsize) { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_DISC != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_DISC_PGP_CERT != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpCert() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpCert() Not Enough Space" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsDiscPgpCertItem *item = new RsDiscPgpCertItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->pgpId.deserialise(data, rssize, offset) ; - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PGPCERT, item->pgpCert); - - if (offset != rssize) { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpCert() offset != rssize" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialisePgpCert() ok = false" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*************************************************************************/ - - -RsDiscContactItem::~RsDiscContactItem() -{ - return; -} - -std::ostream &RsDiscContactItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsDiscContact", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "pgpId: " << pgpId << std::endl; - - printIndent(out, int_Indent); - out << "sslId: " << sslId << std::endl; - - printIndent(out, int_Indent); - out << "location: " << location << std::endl; - - printIndent(out, int_Indent); - out << "version: " << version << std::endl; - - printIndent(out, int_Indent); - out << "netMode: " << netMode << std::endl; - - printIndent(out, int_Indent); - out << "vs_disc: " << vs_disc << std::endl; - - printIndent(out, int_Indent); - out << "vs_dht: " << vs_dht << std::endl; - - printIndent(out, int_Indent); - out << "lastContact: " << lastContact << std::endl; - - if (isHidden) - { - printIndent(out, int_Indent); - out << "hiddenAddr: " << hiddenAddr << std::endl; - - printIndent(out, int_Indent); - out << "hiddenPort: " << hiddenPort << std::endl; - } - else - { - printIndent(out, int_Indent); - out << "localAddrV4: " << std::endl; - localAddrV4.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "extAddrV4: " << std::endl; - extAddrV4.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "localAddrV6: " << std::endl; - localAddrV6.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "extAddrV6: " << std::endl; - extAddrV6.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "DynDNS: " << dyndns << std::endl; - - printIndent(out, int_Indent); - out << "localAddrList: " << std::endl; - localAddrList.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "extAddrList: " << std::endl; - extAddrList.print(out, int_Indent); - } - - printRsItemEnd(out, "RsDiscContact", indent); - return out; -} - -uint32_t RsDiscSerialiser::sizeContact(RsDiscContactItem *item) -{ - uint32_t s = 8; /* header */ - s += item->pgpId.serial_size(); - s += item->sslId.serial_size(); - - s += GetTlvStringSize(item->location); - s += GetTlvStringSize(item->version); - - s += 4; // netMode - s += 2; // vs_disc - s += 2; // vs_dht - s += 4; // last contact - - if (item->isHidden) - { - s += GetTlvStringSize(item->hiddenAddr); - s += 2; /* hidden port */ - } - else - { - s += item->localAddrV4.TlvSize(); /* localaddr */ - s += item->extAddrV4.TlvSize(); /* remoteaddr */ - - s += item->currentConnectAddress.TlvSize() ; - - s += item->localAddrV6.TlvSize(); /* localaddr */ - s += item->extAddrV6.TlvSize(); /* remoteaddr */ - - s += GetTlvStringSize(item->dyndns); - - //add the size of the ip list - s += item->localAddrList.TlvSize(); - s += item->extAddrList.TlvSize(); - } - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::sizeContact() Total Size: " << s << std::endl; -#endif - - return s; -} - -/* serialise the data to the buffer */ -bool RsDiscSerialiser::serialiseContact(RsDiscContactItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeContact(item); - uint32_t offset = 0; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::serialiseContact() tlvsize: " << tlvsize; - std::cerr << std::endl; -#endif - - if (*pktsize < tlvsize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::serialiseContact() ERROR not enough space" << std::endl; - std::cerr << "RsDiscSerialiser::serialiseContact() ERROR *pktsize: " << *pktsize << " tlvsize: " << tlvsize; - std::cerr << std::endl; -#endif - return false; /* not enough space */ - } - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::serialiseContact() Header: " << ok << std::endl; - std::cerr << "RsDiscSerialiser::serialiseContact() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->pgpId.serialise(data, tlvsize, offset) ; - ok &= item->sslId.serialise(data, tlvsize, offset) ; - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->location); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_VERSION, item->version); - - ok &= setRawUInt32(data, tlvsize, &offset, item->netMode); - ok &= setRawUInt16(data, tlvsize, &offset, item->vs_disc); - ok &= setRawUInt16(data, tlvsize, &offset, item->vs_dht); - ok &= setRawUInt32(data, tlvsize, &offset, item->lastContact); /* Mandatory */ - - if (item->isHidden) - { - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DOMADDR, item->hiddenAddr); - ok &= setRawUInt16(data, tlvsize, &offset, item->hiddenPort); - } - else - { - ok &= item->localAddrV4.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrV4.SetTlv(data, tlvsize, &offset); - ok &= item->localAddrV6.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrV6.SetTlv(data, tlvsize, &offset); - - ok &= item->currentConnectAddress.SetTlv(data, tlvsize, &offset); - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DYNDNS, item->dyndns); - - ok &= item->localAddrList.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrList.SetTlv(data, tlvsize, &offset); - } - - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::serialiseContact() Size Error: " << tlvsize << " != " << offset << std::endl; -#endif - } - - return ok; -} - -RsDiscContactItem *RsDiscSerialiser::deserialiseContact(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() Pkt Type: " << std::hex << rstype << std::dec; - std::cerr << "RsDiscSerialiser::deserialiseContact() Pkt Size: " << rssize << std::endl; -#endif - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_DISC != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_DISC_CONTACT != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() Not enough space" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsDiscContactItem *item = new RsDiscContactItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->pgpId.deserialise(data, rssize, offset) ; - ok &= item->sslId.deserialise(data, rssize, offset) ; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->location); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_VERSION, item->version); - - ok &= getRawUInt32(data, rssize, &offset, &(item->netMode)); /* Mandatory */ - ok &= getRawUInt16(data, rssize, &offset, &(item->vs_disc)); /* Mandatory */ - ok &= getRawUInt16(data, rssize, &offset, &(item->vs_dht)); /* Mandatory */ - ok &= getRawUInt32(data, rssize, &offset, &(item->lastContact)); - - if (rssize < offset + TLV_HEADER_SIZE) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() missized" << std::endl; -#endif - /* no extra */ - delete item; - return NULL; - } - - uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[offset]) ); - - if (tlvtype == TLV_TYPE_STR_DOMADDR) - { - item->isHidden = true; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DOMADDR, item->hiddenAddr); - ok &= getRawUInt16(data, rssize, &offset, &(item->hiddenPort)); /* Mandatory */ - - } - else - { - item->isHidden = false; - - ok &= item->localAddrV4.GetTlv(data, rssize, &offset); - ok &= item->extAddrV4.GetTlv(data, rssize, &offset); - ok &= item->localAddrV6.GetTlv(data, rssize, &offset); - ok &= item->extAddrV6.GetTlv(data, rssize, &offset); - - ok &= item->currentConnectAddress.GetTlv(data, rssize, &offset); - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DYNDNS, item->dyndns); - ok &= item->localAddrList.GetTlv(data, rssize, &offset); - ok &= item->extAddrList.GetTlv(data, rssize, &offset); - } - - - if (offset != rssize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() offset != rssize" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsDiscSerialiser::deserialiseContact() ok = false" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} #endif diff --git a/libretroshare/src/serialiser/rsmsgitems.cc b/libretroshare/src/serialiser/rsmsgitems.cc index 9fc3d7e40..6dee2f2be 100644 --- a/libretroshare/src/serialiser/rsmsgitems.cc +++ b/libretroshare/src/serialiser/rsmsgitems.cc @@ -179,1114 +179,3 @@ void RsMsgTags::clear() tagIds.clear(); } -#ifdef TO_REMOVE -std::ostream &RsMsgItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "msgId (not serialised): " << msgId << std::endl; - printIndent(out, int_Indent); - out << "msgFlags: " << msgFlags << std::endl; - - printIndent(out, int_Indent); - out << "sendTime: " << sendTime << std::endl; - printIndent(out, int_Indent); - out << "recvTime: " << recvTime << std::endl; - - printIndent(out, int_Indent); - out << "Message To: " << std::endl; - rspeerid_msgto.print(out, int_Indent); - rsgxsid_msgto.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "Message CC: " << std::endl; - rspeerid_msgcc.print(out, int_Indent); - rsgxsid_msgcc.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "Message BCC: " << std::endl; - rspeerid_msgbcc.print(out, int_Indent); - rsgxsid_msgbcc.print(out, int_Indent); - - printIndent(out, int_Indent); - std::string cnv_subject(subject.begin(), subject.end()); - out << "subject: " << cnv_subject << std::endl; - - printIndent(out, int_Indent); - std::string cnv_message(message.begin(), message.end()); - out << "msg: " << cnv_message << std::endl; - - printIndent(out, int_Indent); - out << "Attachment: " << std::endl; - attachment.print(out, int_Indent); - - printRsItemEnd(out, "RsMsgItem", indent); - return out; -} -std::ostream& RsPublicMsgInviteConfigItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPublicMsgInviteConfigItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "hash : " << hash << std::endl; - - printIndent(out, int_Indent); - out << "timt : " << time_stamp << std::endl; - - printRsItemEnd(out, "RsPublicMsgInviteConfigItem", indent); - - return out; -} -std::ostream& RsMsgTagType::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgTagType", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "rgb_color : " << rgb_color << std::endl; - - - printIndent(out, int_Indent); - out << "text: " << text << std::endl; - - printIndent(out, int_Indent); - out << "tagId: " << tagId << std::endl; - - printRsItemEnd(out, "RsMsgTagTypeItem", indent); - - return out; -} - -std::ostream& RsMsgTags::print(std::ostream &out, uint16_t indent) -{ - - printRsItemBase(out, "RsMsgTagsItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "msgId : " << msgId << std::endl; - - std::list::iterator it; - - for(it=tagIds.begin(); it != tagIds.end(); ++it) - { - printIndent(out, int_Indent); - out << "tagId : " << *it << std::endl; - } - - printRsItemEnd(out, "RsMsgTags", indent); - - return out; -} - -uint32_t RsMsgItem::serial_size(bool m_bConfiguration) -{ - uint32_t s = 8; /* header */ - s += 4; /* msgFlags */ - s += 4; /* sendTime */ - s += 4; /* recvTime */ - - s += GetTlvStringSize(subject); - s += GetTlvStringSize(message); - - s += rspeerid_msgto.TlvSize(); - s += rspeerid_msgcc.TlvSize(); - s += rspeerid_msgbcc.TlvSize(); - - s += rsgxsid_msgto.TlvSize(); - s += rsgxsid_msgcc.TlvSize(); - s += rsgxsid_msgbcc.TlvSize(); - - s += attachment.TlvSize(); - - if (m_bConfiguration) { - // serialise msgId too - s += 4; - } - - return s; -} - -/* serialise the data to the buffer */ -bool RsMsgItem::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size( config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, msgFlags); - ok &= setRawUInt32(data, tlvsize, &offset, sendTime); - ok &= setRawUInt32(data, tlvsize, &offset, recvTime); - - ok &= SetTlvString(data,tlvsize,&offset,TLV_TYPE_STR_SUBJECT,subject); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, message); - - ok &= rspeerid_msgto.SetTlv(data, tlvsize, &offset); - ok &= rspeerid_msgcc.SetTlv(data, tlvsize, &offset); - ok &= rspeerid_msgbcc.SetTlv(data, tlvsize, &offset); - - ok &= rsgxsid_msgto.SetTlv(data, tlvsize, &offset); - ok &= rsgxsid_msgcc.SetTlv(data, tlvsize, &offset); - ok &= rsgxsid_msgbcc.SetTlv(data, tlvsize, &offset); - - ok &= attachment.SetTlv(data, tlvsize, &offset); - - if (config) // serialise msgId too - ok &= setRawUInt32(data, tlvsize, &offset, msgId); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseItem() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgItem *RsMsgSerialiser::deserialiseMsgItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_DEFAULT != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgItem *item = new RsMsgItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->msgFlags)); - ok &= getRawUInt32(data, rssize, &offset, &(item->sendTime)); - ok &= getRawUInt32(data, rssize, &offset, &(item->recvTime)); - - ok &= GetTlvString(data,rssize,&offset,TLV_TYPE_STR_SUBJECT,item->subject); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->message); - - ok &= item->rspeerid_msgto.GetTlv(data, rssize, &offset); - ok &= item->rspeerid_msgcc.GetTlv(data, rssize, &offset); - ok &= item->rspeerid_msgbcc.GetTlv(data, rssize, &offset); - ok &= item->rsgxsid_msgto.GetTlv(data, rssize, &offset); - ok &= item->rsgxsid_msgcc.GetTlv(data, rssize, &offset); - ok &= item->rsgxsid_msgbcc.GetTlv(data, rssize, &offset); - - ok &= item->attachment.GetTlv(data, rssize, &offset); - - if (m_bConfiguration) { - // deserialise msgId too - // ok &= getRawUInt32(data, rssize, &offset, &(item->msgId)); - getRawUInt32(data, rssize, &offset, &(item->msgId)); //use this line for backward compatibility - } - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} -uint32_t RsPublicMsgInviteConfigItem::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += GetTlvStringSize(hash); - s += 4; /* time_stamp */ - - return s; -} - -uint32_t RsMsgTagType::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += GetTlvStringSize(text); - s += 4; /* color */ - s += 4; /* tag id */ - - return s; -} -bool RsPublicMsgInviteConfigItem::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size(config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= SetTlvString(data,tlvsize,&offset, TLV_TYPE_STR_HASH_SHA1, hash); - ok &= setRawUInt32(data,tlvsize,&offset, time_stamp); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size Error! " << std::endl; - } - - return ok; -} -bool RsMsgTagType::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size( config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= SetTlvString(data,tlvsize,&offset, TLV_TYPE_STR_NAME, text); - ok &= setRawUInt32(data, tlvsize, &offset, rgb_color); - ok &= setRawUInt32(data, tlvsize, &offset, tagId); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size Error! " << std::endl; - } - - return ok; -} -RsPublicMsgInviteConfigItem* RsMsgSerialiser::deserialisePublicMsgInviteConfigItem(void *data,uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_INVITE != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsPublicMsgInviteConfigItem *item = new RsPublicMsgInviteConfigItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= GetTlvString(data,rssize,&offset,TLV_TYPE_STR_HASH_SHA1,item->hash); - - uint32_t ts ; - ok &= getRawUInt32(data, rssize, &offset, &ts) ; - item->time_stamp = ts ; - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - - -RsMsgTagType* RsMsgSerialiser::deserialiseTagItem(void *data,uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_TAG_TYPE != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgTagType *item = new RsMsgTagType(); - item->clear(); - - /* skip the header */ - offset += 8; - - - /* get mandatory parts first */ - ok &= GetTlvString(data,rssize,&offset,TLV_TYPE_STR_NAME,item->text); - ok &= getRawUInt32(data, rssize, &offset, &(item->rgb_color)); - ok &= getRawUInt32(data, rssize, &offset, &(item->tagId)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -uint32_t RsMsgTags::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += 4; /* msgId */ - s += tagIds.size() * 4; /* tagIds */ - - return s; -} -bool RsMsgTags::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size( config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data,tlvsize,&offset, msgId); - - std::list::iterator mit = tagIds.begin(); - for(;mit != tagIds.end(); ++mit) - ok &= setRawUInt32(data, tlvsize, &offset, *mit); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgTagItem() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgTags* RsMsgSerialiser::deserialiseMsgTagItem(void* data, uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_TAGS != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgTags *item = new RsMsgTags(); - item->clear(); - - /* skip the header */ - offset += 8; - - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &item->msgId); - - uint32_t tagId; - while (offset != rssize) - { - tagId = 0; - - ok &= getRawUInt32(data, rssize, &offset, &tagId); - - item->tagIds.push_back(tagId); - } - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - - -/************************************** Message SrcId **********************/ - -std::ostream& RsMsgSrcId::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgSrcIdItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "msgId : " << msgId << std::endl; - - printIndent(out, int_Indent); - out << "SrcId: " << srcId << std::endl; - - - printRsItemEnd(out, "RsMsgItem", indent); - - return out; -} - -void RsMsgSrcId::clear() -{ - msgId = 0; - srcId.clear(); - - return; -} - -uint32_t RsMsgSrcId::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += 4; - s += srcId.serial_size() ; - - return s; -} -bool RsMsgSrcId::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size(config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgSrcIdItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgSrcIdItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset, msgId); - ok &= srcId.serialise(data, tlvsize, offset) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgSrcIdItem() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgSrcId* RsMsgSerialiser::deserialiseMsgSrcIdItem(void* data, uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_SRC_TAG != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgSrcId *item = new RsMsgSrcId(); - item->clear(); - - /* skip the header */ - offset += 8; - - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->msgId)); - ok &= item->srcId.deserialise(data, rssize, offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/************************* end of definition of msgSrcId serialisation functions ************************/ - -std::ostream& RsMsgGRouterMap::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgGRouterMap", indent); - uint16_t int_Indent = indent + 2; - - for(std::map::const_iterator it(ongoing_msgs.begin());it!=ongoing_msgs.end();++it) - { - printIndent(out, int_Indent); - out << " " << std::hex << it->first << std::dec << " : " << it->second << std::endl; - } - - printRsItemEnd(out, "RsMsgGRouterMap", indent); - - return out; -} -uint32_t RsMsgGRouterMap::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += 4; // number of entries - s += (8+4)*ongoing_msgs.size(); // entries - - return s; -} - -bool RsMsgGRouterMap::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size( config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgParentIdItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgParentIdItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset, ongoing_msgs.size()); - - for(std::map::const_iterator it=ongoing_msgs.begin();ok && it!=ongoing_msgs.end();++it) - { - ok &= setRawUInt64(data, tlvsize, &offset, it->first); - ok &= setRawUInt32(data, tlvsize, &offset, it->second); - } - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgGRouterMap() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgGRouterMap* RsMsgSerialiser::deserialiseMsgGRouterMap(void* data, uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_GROUTER_MAP != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgGRouterMap *item = new RsMsgGRouterMap(); - item->clear(); - - /* skip the header */ - offset += 8; - - uint32_t s=0 ; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &s); - - for(uint32_t i=0;iongoing_msgs.insert(std::make_pair(routing_id,mid)) ; - } - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/************************* end of definition of msgGRouterMap serialisation functions ************************/ - -/************************* definition of msgDistantMessageMap serialisation functions ************************/ - -std::ostream& RsMsgDistantMessagesHashMap::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgDistantMessagesHashMap", indent); - uint16_t int_Indent = indent + 2; - - for(std::map::const_iterator it(hash_map.begin());it!=hash_map.end();++it) - { - printIndent(out, int_Indent); - out << " " << std::hex << it->first << std::dec << " : " << it->second << std::endl; - } - - printRsItemEnd(out, "RsMsgDistantMessagesHashMap", indent); - - return out; -} - -void RsMsgDistantMessagesHashMap::clear() -{ - hash_map.clear() ; - - return; -} - -uint32_t RsMsgDistantMessagesHashMap::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += 4; // number of entries - s += (Sha1CheckSum::SIZE_IN_BYTES+4)*hash_map.size(); // entries - - return s; -} -bool RsMsgDistantMessagesHashMap::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size(config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgDistantMessagesHashMap() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgDistantMessagesHashMap() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset, hash_map.size()); - - for(std::map::const_iterator it=hash_map.begin();ok && it!=hash_map.end();++it) - { - ok &= it->first.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, it->second); - } - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgDistantMessagesHashMap() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgDistantMessagesHashMap* RsMsgSerialiser::deserialiseMsgDistantMessageHashMap(void* data, uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgDistantMessagesHashMap *item = new RsMsgDistantMessagesHashMap(); - item->clear(); - - /* skip the header */ - offset += 8; - - uint32_t s=0 ; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &s); - - for(uint32_t i=0;ihash_map.insert(std::make_pair(s,tm)) ; - } - - if (offset != rssize) - { - /* error */ - std::cerr << "(EE) size error in packet deserialisation: p3MsgItem, subtype " << getRsItemSubType(rstype) << ". offset=" << offset << " != rssize=" << rssize << std::endl; - delete item; - return NULL; - } - - if (!ok) - { - std::cerr << "(EE) size error in packet deserialisation: p3MsgItem, subtype " << getRsItemSubType(rstype) << std::endl; - delete item; - return NULL; - } - - return item; -} -/************************************** Message ParentId **********************/ - -std::ostream& RsMsgParentId::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsMsgParentIdItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "msgId : " << msgId << std::endl; - - printIndent(out, int_Indent); - out << "msgParentId: " << msgParentId << std::endl; - - - printRsItemEnd(out, "RsMsgParentId", indent); - - return out; -} - -void RsMsgParentId::clear() -{ - msgId = 0; - msgParentId = 0; - - return; -} - -uint32_t RsMsgParentId::serial_size(bool) -{ - uint32_t s = 8; /* header */ - - s += 4; // srcId - s += 4; // msgParentId - - return s; -} -bool RsMsgParentId::serialise(void *data, uint32_t& pktsize,bool config) -{ - uint32_t tlvsize = serial_size( config) ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialiseMsgParentIdItem() Header: " << ok << std::endl; - std::cerr << "RsMsgSerialiser::serialiseMsgParentIdItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset, msgId); - ok &= setRawUInt32(data, tlvsize, &offset, msgParentId); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsMsgSerialiser::serialiseMsgParentIdItem() Size Error! " << std::endl; - } - - return ok; -} - -RsMsgParentId* RsMsgSerialiser::deserialiseMsgParentIdItem(void* data, uint32_t* pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_MSG_PARENT_TAG != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsMsgParentId *item = new RsMsgParentId(); - item->clear(); - - /* skip the header */ - offset += 8; - - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->msgId)); - ok &= getRawUInt32(data, rssize, &offset, &(item->msgParentId)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/************************* end of definition of msgParentId serialisation functions ************************/ - -RsItem* RsMsgSerialiser::deserialise(void *data, uint32_t *pktsize) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::deserialise()" << std::endl; -#endif - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_MSG != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_DEFAULT: return deserialiseMsgItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_SRC_TAG: return deserialiseMsgSrcIdItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_PARENT_TAG: return deserialiseMsgParentIdItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_TAG_TYPE: return deserialiseTagItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_INVITE: return deserialisePublicMsgInviteConfigItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_TAGS: return deserialiseMsgTagItem(data, pktsize); - case RS_PKT_SUBTYPE_MSG_GROUTER_MAP: return deserialiseMsgGRouterMap(data, pktsize); - case RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP: return deserialiseMsgDistantMessageHashMap(data, pktsize); - default: - return NULL; - break; - } - - return NULL; -} - - -/*************************************************************************/ - -#endif - - From 5071c4bc7f30b43afe342a116217c547410291d6 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 11:00:57 +0200 Subject: [PATCH 151/230] moved msgitems to rsitems/ --- libretroshare/src/{serialiser => rsitems}/rsmsgitems.cc | 0 libretroshare/src/{serialiser => rsitems}/rsmsgitems.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsmsgitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsmsgitems.h (100%) diff --git a/libretroshare/src/serialiser/rsmsgitems.cc b/libretroshare/src/rsitems/rsmsgitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsmsgitems.cc rename to libretroshare/src/rsitems/rsmsgitems.cc diff --git a/libretroshare/src/serialiser/rsmsgitems.h b/libretroshare/src/rsitems/rsmsgitems.h similarity index 100% rename from libretroshare/src/serialiser/rsmsgitems.h rename to libretroshare/src/rsitems/rsmsgitems.h From f6aaee73827e8767c7c518c15d2de3fabc8416db Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 11:01:45 +0200 Subject: [PATCH 152/230] converted RTT items to new serialization --- libretroshare/src/chat/distantchat.cc | 18 ++++---- libretroshare/src/chat/p3chatservice.h | 2 +- libretroshare/src/libretroshare.pro | 4 +- libretroshare/src/pqi/p3historymgr.cc | 2 +- libretroshare/src/rsitems/rsmsgitems.cc | 3 +- libretroshare/src/serialiser/rsrttitems.cc | 28 +++++++++++++ libretroshare/src/serialiser/rsrttitems.h | 42 +++++++------------ libretroshare/src/serialiser/rsserial.cc | 2 +- .../src/serialization/rsserializer.h | 9 ++-- libretroshare/src/services/p3msgservice.h | 2 +- 10 files changed, 65 insertions(+), 47 deletions(-) diff --git a/libretroshare/src/chat/distantchat.cc b/libretroshare/src/chat/distantchat.cc index 8bb8b8d17..7345aa274 100644 --- a/libretroshare/src/chat/distantchat.cc +++ b/libretroshare/src/chat/distantchat.cc @@ -35,17 +35,17 @@ #include "util/rsmemory.h" #include "util/rsprint.h" -#include +#include "rsitems/rsmsgitems.h" -#include -#include -#include +#include "retroshare/rsmsgs.h" +#include "retroshare/rsidentity.h" +#include "retroshare/rsiface.h" -#include -#include -#include -#include -#include +#include "rsserver/p3face.h" +#include "services/p3idservice.h" +#include "gxs/gxssecurity.h" +#include "turtle/p3turtle.h" +#include "retroshare/rsids.h" #include "distantchat.h" //#define DEBUG_DISTANT_CHAT diff --git a/libretroshare/src/chat/p3chatservice.h b/libretroshare/src/chat/p3chatservice.h index 3096309b0..482a61c6e 100644 --- a/libretroshare/src/chat/p3chatservice.h +++ b/libretroshare/src/chat/p3chatservice.h @@ -31,7 +31,7 @@ #include #include -#include "serialiser/rsmsgitems.h" +#include "rsitems/rsmsgitems.h" #include "services/p3service.h" #include "pqi/pqiservicemonitor.h" #include "chat/distantchat.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 15ab467b3..4d94f4c71 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -458,7 +458,7 @@ HEADERS += rsitems/itempriorities.h \ serialiser/rsserviceserialiser.h \ serialiser/rsconfigitems.h \ serialiser/rshistoryitems.h \ - serialiser/rsmsgitems.h \ + rsitems/rsmsgitems.h \ serialiser/rsserial.h \ rsitems/rsserviceids.h \ serialiser/rsserviceitems.h \ @@ -612,7 +612,7 @@ SOURCES += serialiser/rsbaseserial.cc \ serialiser/rsserviceserialiser.cc \ serialiser/rsconfigitems.cc \ serialiser/rshistoryitems.cc \ - serialiser/rsmsgitems.cc \ + rsitems/rsmsgitems.cc \ serialiser/rsserial.cc \ serialiser/rsstatusitems.cc \ serialiser/rstlvaddrs.cc \ diff --git a/libretroshare/src/pqi/p3historymgr.cc b/libretroshare/src/pqi/p3historymgr.cc index d190a903b..5739ff94a 100644 --- a/libretroshare/src/pqi/p3historymgr.cc +++ b/libretroshare/src/pqi/p3historymgr.cc @@ -30,7 +30,7 @@ #include "serialiser/rsconfigitems.h" #include "retroshare/rsiface.h" #include "retroshare/rspeers.h" -#include "serialiser/rsmsgitems.h" +#include "rsitems/rsmsgitems.h" #include "rsserver/p3face.h" #include "util/rsstring.h" diff --git a/libretroshare/src/rsitems/rsmsgitems.cc b/libretroshare/src/rsitems/rsmsgitems.cc index 6dee2f2be..7405f37e0 100644 --- a/libretroshare/src/rsitems/rsmsgitems.cc +++ b/libretroshare/src/rsitems/rsmsgitems.cc @@ -27,9 +27,10 @@ #include #include #include "serialiser/rsbaseserial.h" -#include "serialiser/rsmsgitems.h" #include "serialiser/rstlvbase.h" +#include "rsitems/rsmsgitems.h" + #include "serialization/rstypeserializer.h" /*** diff --git a/libretroshare/src/serialiser/rsrttitems.cc b/libretroshare/src/serialiser/rsrttitems.cc index 8f5c136e7..5965f1068 100644 --- a/libretroshare/src/serialiser/rsrttitems.cc +++ b/libretroshare/src/serialiser/rsrttitems.cc @@ -36,7 +36,34 @@ /*************************************************************************/ +RsItem *RsRttSerialiser::create_item(uint16_t service,uint8_t type) const +{ + if(service != RS_SERVICE_TYPE_RTT) + return NULL ; + switch(type) + { + case RS_PKT_SUBTYPE_RTT_PING: return new RsRttPingItem() ; //= 0x01; + case RS_PKT_SUBTYPE_RTT_PONG: return new RsRttPongItem() ; // = 0x02; + default: + return NULL ; + } +} + +void RsRttPingItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; + RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; +} + +void RsRttPongItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; + RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; + RsTypeSerializer::serial_process(j,ctx,mPongTS,"mPongTS") ; +} + +#ifdef TO_REMOVE RsRttPingItem::~RsRttPingItem() { return; @@ -370,4 +397,5 @@ RsItem* RsRttSerialiser::deserialise(void *data, uint32_t *pktsize) /*************************************************************************/ +#endif diff --git a/libretroshare/src/serialiser/rsrttitems.h b/libretroshare/src/serialiser/rsrttitems.h index 11a6b8889..cad02062e 100644 --- a/libretroshare/src/serialiser/rsrttitems.h +++ b/libretroshare/src/serialiser/rsrttitems.h @@ -31,6 +31,8 @@ #include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" +#include "serialization/rsserializer.h" + /**************************************************************************/ const uint8_t RS_PKT_SUBTYPE_RTT_PING = 0x01; @@ -39,12 +41,11 @@ const uint8_t RS_PKT_SUBTYPE_RTT_PONG = 0x02; class RsRttItem: public RsItem { public: - RsRttItem(uint8_t chat_subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_RTT,chat_subtype) + RsRttItem(uint8_t subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_RTT,subtype) { setPriorityLevel(QOS_PRIORITY_RS_RTT_PING) ;} // should be refined later. virtual ~RsRttItem() {}; virtual void clear() {}; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0 ; }; class RsRttPingItem: public RsRttItem @@ -52,9 +53,10 @@ class RsRttPingItem: public RsRttItem public: RsRttPingItem() :RsRttItem(RS_PKT_SUBTYPE_RTT_PING) {} - virtual ~RsRttPingItem(); - virtual void clear(); - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual ~RsRttPingItem(){} + virtual void clear(){} + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); uint32_t mSeqNo; uint64_t mPingTS; @@ -65,9 +67,10 @@ class RsRttPongItem: public RsRttItem public: RsRttPongItem() :RsRttItem(RS_PKT_SUBTYPE_RTT_PONG) {} - virtual ~RsRttPongItem(); - virtual void clear(); - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual ~RsRttPongItem(){} + virtual void clear(){} + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); uint32_t mSeqNo; uint64_t mPingTS; @@ -75,29 +78,14 @@ class RsRttPongItem: public RsRttItem }; -class RsRttSerialiser: public RsSerialType +class RsRttSerialiser: public RsSerializer { public: - RsRttSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_RTT) - { return; } + RsRttSerialiser() :RsSerializer(RS_SERVICE_TYPE_RTT) {} -virtual ~RsRttSerialiser() { return; } + virtual ~RsRttSerialiser(){} -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeRttPingItem(RsRttPingItem *); -virtual bool serialiseRttPingItem (RsRttPingItem *item, void *data, uint32_t *size); -virtual RsRttPingItem *deserialiseRttPingItem(void *data, uint32_t *size); - -virtual uint32_t sizeRttPongItem(RsRttPongItem *); -virtual bool serialiseRttPongItem (RsRttPongItem *item, void *data, uint32_t *size); -virtual RsRttPongItem *deserialiseRttPongItem(void *data, uint32_t *size); - + virtual RsItem *create_item(uint16_t service,uint8_t type) const; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsserial.cc b/libretroshare/src/serialiser/rsserial.cc index 8624b5304..30fed530e 100644 --- a/libretroshare/src/serialiser/rsserial.cc +++ b/libretroshare/src/serialiser/rsserial.cc @@ -438,7 +438,7 @@ RsItem * RsSerialiser::deserialise(void *data, uint32_t *size) uint32_t failedtype = getRsItemId(data); std::cerr << "RsSerialiser::deserialise() FAILED PACKET Size: "; std::cerr << getRsItemSize(data) << " ID: "; - std::cerr << std::hex << failedtype << std::dec; + std::cerr << std::hex << failedtype << std::endl; std::cerr << "RsSerialiser::deserialise() FAILED PACKET: "; std::cerr << " Version: " << std::hex << (uint32_t) getRsItemVersion(failedtype) << std::dec; std::cerr << " Class: " << std::hex << (uint32_t) getRsItemClass(failedtype) << std::dec; diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index db765e36b..6670a377b 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -32,10 +32,11 @@ class RsSerializer: public RsSerialType /*! create_item * should be overloaded to create the correct type of item depending on the data */ - virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const - { - return NULL ; - } + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; + // { + // std::cerr << "(EE) Serializer does not overload create_item(). This is probably an error."<< std::endl; + // return NULL ; + // } // The following functions overload RsSerialType. They *should not* need to be further overloaded. diff --git a/libretroshare/src/services/p3msgservice.h b/libretroshare/src/services/p3msgservice.h index a36486514..2b7370d06 100644 --- a/libretroshare/src/services/p3msgservice.h +++ b/libretroshare/src/services/p3msgservice.h @@ -40,7 +40,7 @@ #include "pqi/p3cfgmgr.h" #include "services/p3service.h" -#include "serialiser/rsmsgitems.h" +#include "rsitems/rsmsgitems.h" #include "util/rsthreads.h" #include "retroshare/rsgxsifacetypes.h" From 26e95416d14430c8230ddde4b5fd8357e998f213 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 11:06:51 +0200 Subject: [PATCH 153/230] moved RTT items to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsrttitems.cc | 4 +--- libretroshare/src/{serialiser => rsitems}/rsrttitems.h | 0 libretroshare/src/serialization/rsserializer.h | 4 ---- libretroshare/src/services/p3rtt.cc | 2 +- libretroshare/src/services/p3rtt.h | 2 +- 6 files changed, 5 insertions(+), 11 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsrttitems.cc (98%) rename libretroshare/src/{serialiser => rsitems}/rsrttitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 4d94f4c71..e6f1a4ef4 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -483,7 +483,7 @@ HEADERS += rsitems/itempriorities.h \ rsitems/rsbwctrlitems.h \ rsitems/rsdiscovery2items.h \ serialiser/rsheartbeatitems.h \ - serialiser/rsrttitems.h \ + rsitems/rsrttitems.h \ serialiser/rsgxsrecognitems.h \ serialiser/rsgxsupdateitems.h \ serialiser/rsserviceinfoitems.h \ @@ -631,7 +631,7 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsbwctrlitems.cc \ rsitems/rsdiscovery2items.cc \ serialiser/rsheartbeatitems.cc \ - serialiser/rsrttitems.cc \ + rsitems/rsrttitems.cc \ serialiser/rsgxsrecognitems.cc \ serialiser/rsgxsupdateitems.cc \ serialiser/rsserviceinfoitems.cc \ diff --git a/libretroshare/src/serialiser/rsrttitems.cc b/libretroshare/src/rsitems/rsrttitems.cc similarity index 98% rename from libretroshare/src/serialiser/rsrttitems.cc rename to libretroshare/src/rsitems/rsrttitems.cc index 5965f1068..ce2423dd4 100644 --- a/libretroshare/src/serialiser/rsrttitems.cc +++ b/libretroshare/src/rsitems/rsrttitems.cc @@ -24,9 +24,7 @@ * */ -#include "serialiser/rsbaseserial.h" -#include "serialiser/rsrttitems.h" -//#include "serialiser/rstlvbase.h" +#include "rsitems/rsrttitems.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/serialiser/rsrttitems.h b/libretroshare/src/rsitems/rsrttitems.h similarity index 100% rename from libretroshare/src/serialiser/rsrttitems.h rename to libretroshare/src/rsitems/rsrttitems.h diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 6670a377b..92f409361 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -33,10 +33,6 @@ class RsSerializer: public RsSerialType * should be overloaded to create the correct type of item depending on the data */ virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; - // { - // std::cerr << "(EE) Serializer does not overload create_item(). This is probably an error."<< std::endl; - // return NULL ; - // } // The following functions overload RsSerialType. They *should not* need to be further overloaded. diff --git a/libretroshare/src/services/p3rtt.cc b/libretroshare/src/services/p3rtt.cc index 987467b77..8d4b2700b 100644 --- a/libretroshare/src/services/p3rtt.cc +++ b/libretroshare/src/services/p3rtt.cc @@ -32,7 +32,7 @@ #include "pqi/p3linkmgr.h" #include "services/p3rtt.h" -#include "serialiser/rsrttitems.h" +#include "rsitems/rsrttitems.h" #include diff --git a/libretroshare/src/services/p3rtt.h b/libretroshare/src/services/p3rtt.h index 9b881fba8..8714e2e02 100644 --- a/libretroshare/src/services/p3rtt.h +++ b/libretroshare/src/services/p3rtt.h @@ -30,7 +30,7 @@ #include #include -#include "serialiser/rsrttitems.h" +#include "rsitems/rsrttitems.h" #include "services/p3service.h" #include "retroshare/rsrtt.h" From 976a80a7af810f8f9583df617dd2e34200c61773 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 13:30:18 +0200 Subject: [PATCH 154/230] switch rsfilelistitems to new serialization --- .../src/file_sharing/rsfilelistitems.cc | 45 ++++++++++++++++--- .../src/file_sharing/rsfilelistitems.h | 34 ++++---------- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/libretroshare/src/file_sharing/rsfilelistitems.cc b/libretroshare/src/file_sharing/rsfilelistitems.cc index 800f2f3d8..254d89edd 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.cc +++ b/libretroshare/src/file_sharing/rsfilelistitems.cc @@ -26,6 +26,41 @@ #include "file_sharing/rsfilelistitems.h" +void RsFileListsSyncRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,entry_hash,"entry_hash") ; + RsTypeSerializer::serial_process(j,ctx,flags ,"flags") ; + RsTypeSerializer::serial_process(j,ctx,last_known_recurs_modf_TS,"last_known_recurs_modf_TS") ; + RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; +} +void RsFileListsSyncResponseItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,entry_hash,"entry_hash") ; + RsTypeSerializer::serial_process (j,ctx,checksum,"checksum") ; + RsTypeSerializer::serial_process (j,ctx,flags ,"flags") ; + RsTypeSerializer::serial_process (j,ctx,last_known_recurs_modf_TS,"last_known_recurs_modf_TS") ; + RsTypeSerializer::serial_process (j,ctx,request_id,"request_id") ; + RsTypeSerializer::serial_process(j,ctx,directory_content_data,"directory_content_data") ; +} + +RsItem *RsFileListsSerialiser::create_item(uint16_t service,uint8_t type) const +{ + if(service != RS_SERVICE_TYPE_FILE_DATABASE) + return NULL ; + + switch(type) + { + case RS_PKT_SUBTYPE_FILELISTS_SYNC_REQ_ITEM: return new RsFileListsSyncRequestItem(); + case RS_PKT_SUBTYPE_FILELISTS_SYNC_RSP_ITEM: return new RsFileListsSyncResponseItem(); + default: + return NULL ; + } +} +void RsFileListsSyncResponseItem::clear() +{ + directory_content_data.TlvClear(); +} +#ifdef TO_REMOVE RsItem* RsFileListsSerialiser::deserialise(void *data, uint32_t *size) { #ifdef RSSERIAL_DEBUG @@ -325,13 +360,7 @@ uint32_t RsFileListsSyncResponseItem::serial_size()const return s; } -void RsFileListsSyncRequestItem::clear() -{ -} -void RsFileListsSyncResponseItem::clear() -{ - directory_content_data.TlvClear(); -} + std::ostream& RsFileListsSyncRequestItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsFileListsSyncReqItem", indent); @@ -363,3 +392,5 @@ std::ostream& RsFileListsSyncResponseItem::print(std::ostream &out, uint16_t ind return out; } + +#endif diff --git a/libretroshare/src/file_sharing/rsfilelistitems.h b/libretroshare/src/file_sharing/rsfilelistitems.h index d56827527..fd9a928d5 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.h +++ b/libretroshare/src/file_sharing/rsfilelistitems.h @@ -34,6 +34,8 @@ #include "serialiser/rstlvkeys.h" #include "gxs/rsgxsdata.h" +#include "serialization/rsserializer.h" + // These items have "flag type" numbers, but this is not used. const uint8_t RS_PKT_SUBTYPE_FILELISTS_SYNC_REQ_ITEM = 0x01; @@ -54,12 +56,7 @@ public: } virtual ~RsFileListsItem(){} - virtual bool serialise(void *data,uint32_t& size) const = 0 ; - virtual uint32_t serial_size() const = 0 ; virtual void clear() = 0; - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) = 0; - - bool serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const; static const uint32_t FLAGS_SYNC_REQUEST = 0x0001 ; static const uint32_t FLAGS_SYNC_RESPONSE = 0x0002 ; @@ -79,12 +76,10 @@ public: RsFileListsSyncRequestItem() : RsFileListsItem(RS_PKT_SUBTYPE_FILELISTS_SYNC_REQ_ITEM) {} - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + virtual void clear(){} + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const ; - RsFileHash entry_hash ; // hash of the directory to sync uint32_t flags; // used to say that it's a request or a response, say that the directory has been removed, ask for further update, etc. uint32_t last_known_recurs_modf_TS; // time of last modification, computed over all files+directories below. @@ -98,10 +93,8 @@ public: RsFileListsSyncResponseItem() : RsFileListsItem(RS_PKT_SUBTYPE_FILELISTS_SYNC_RSP_ITEM) {} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsFileHash entry_hash ; // hash of the directory to sync RsFileHash checksum ; // checksum of the bindary data, for checking @@ -112,24 +105,15 @@ public: RsTlvBinaryData directory_content_data ; // encoded binary data. This allows to vary the encoding format, in a way that is transparent to the serialiser. }; -class RsFileListsSerialiser : public RsSerialType +class RsFileListsSerialiser : public RsSerializer { public: - RsFileListsSerialiser() : RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_FILE_DATABASE) {} + RsFileListsSerialiser() : RsSerializer(RS_SERVICE_TYPE_FILE_DATABASE) {} virtual ~RsFileListsSerialiser() {} - virtual uint32_t size(RsItem *item); - virtual bool serialise(RsItem *item, void *data, uint32_t *size); - virtual RsItem* deserialise(void *data, uint32_t *size); - -private: - RsFileListsSyncRequestItem *deserialFileListsSyncRequestItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_GRP */ - RsFileListsSyncResponseItem *deserialFileListsSyncResponseItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_GRP */ -// RsFileListsSyncResponseItem *deserialFileListsConfigItem (void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_GRP */ - - bool checkItemHeader(void *data, uint32_t *size, uint8_t subservice_type); + virtual RsItem *create_item(uint16_t service,uint8_t type) const ; }; From dc2df071a57c14314614c35e8b01de97e6e289e6 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 14:14:34 +0200 Subject: [PATCH 155/230] renamed RsSerializer into RsServiceSerializer --- libretroshare/src/chat/distributedchat.cc | 8 +- libretroshare/src/chat/rschatitems.cc | 2 +- libretroshare/src/chat/rschatitems.h | 4 +- .../src/file_sharing/rsfilelistitems.cc | 334 ------------------ .../src/file_sharing/rsfilelistitems.h | 4 +- libretroshare/src/ft/ftserver.cc | 2 +- libretroshare/src/ft/ftserver.h | 4 +- libretroshare/src/rsitems/rsbanlistitems.h | 4 +- libretroshare/src/rsitems/rsbwctrlitems.h | 4 +- libretroshare/src/rsitems/rsdiscovery2items.h | 4 +- .../src/rsitems/rsfiletransferitems.h | 4 +- .../src/rsitems/rsgxsreputationitems.h | 4 +- libretroshare/src/rsitems/rsmsgitems.cc | 2 +- libretroshare/src/rsitems/rsmsgitems.h | 4 +- libretroshare/src/rsitems/rsrttitems.h | 4 +- .../src/serialization/rsserializer.cc | 14 +- .../src/serialization/rsserializer.h | 4 +- libretroshare/src/services/p3msgservice.cc | 8 +- libretroshare/src/turtle/rsturtleitem.h | 4 +- .../src/turtle/turtleclientservice.h | 2 +- 20 files changed, 43 insertions(+), 377 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 79c41b2f2..696ce3058 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id)); - uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(obj)) ; + uint32_t size = RsChatSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(obj)) ; RsTemporaryMemory memory(size) ; #ifdef DEBUG_CHAT_LOBBIES @@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const std::cerr << " signature id: " << obj->signature.keyId << std::endl; #endif - if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(obj),memory,&size)) + if(!RsChatSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(obj),memory,&size)) { std::cerr << " (EE) Cannot serialise message item. " << std::endl; return false ; @@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId& // now sign the object, if the lobby expects it - uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(&item)) ; + uint32_t size = RsChatSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE).size(dynamic_cast(&item)) ; RsTemporaryMemory memory(size) ; - if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(&item),memory,&size)) + if(!RsChatSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise(dynamic_cast(&item),memory,&size)) { std::cerr << "(EE) Cannot sign message item. " << std::endl; return false ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index e30c401c1..7aa0dd4f3 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -86,7 +86,7 @@ void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, Serialize RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,nick,"nick") ; - if(!(ctx.mFlags & RsSerializer::SERIALIZATION_FLAG_SIGNATURE)) + if(!(ctx.mFlags & RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE)) RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index b357f0873..1766dbfec 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -321,11 +321,11 @@ class RsChatAvatarItem: public RsChatItem unsigned char *image_data ; // image }; -class RsChatSerialiser: public RsSerializer +class RsChatSerialiser: public RsServiceSerializer { public: RsChatSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) - :RsSerializer(RS_SERVICE_TYPE_CHAT,SerializeContext::FORMAT_BINARY,flags) {} + :RsServiceSerializer(RS_SERVICE_TYPE_CHAT,SerializeContext::FORMAT_BINARY,flags) {} virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; diff --git a/libretroshare/src/file_sharing/rsfilelistitems.cc b/libretroshare/src/file_sharing/rsfilelistitems.cc index 254d89edd..85a94488f 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.cc +++ b/libretroshare/src/file_sharing/rsfilelistitems.cc @@ -60,337 +60,3 @@ void RsFileListsSyncResponseItem::clear() { directory_content_data.TlvClear(); } -#ifdef TO_REMOVE -RsItem* RsFileListsSerialiser::deserialise(void *data, uint32_t *size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (getRsItemService(rstype) != RS_SERVICE_TYPE_FILE_DATABASE)) - return NULL; /* wrong type */ - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_FILELISTS_SYNC_REQ_ITEM: return deserialFileListsSyncRequestItem(data, size); - case RS_PKT_SUBTYPE_FILELISTS_SYNC_RSP_ITEM: return deserialFileListsSyncResponseItem(data, size); -// case RS_PKT_SUBTYPE_FILELISTS_CONFIG_ITEM: return deserialFileListsConfigItem (data, size); - - default: - { - std::cerr << "(WW) RsFileListsSerialiser::deserialise() : unhandled item type " << getRsItemSubType(rstype) << std::endl; - return NULL; - - } - } -} - -uint32_t RsFileListsSerialiser::size(RsItem *item) -{ - RsFileListsItem *flst_item = dynamic_cast(item) ; - - if(flst_item != NULL) - return flst_item->serial_size() ; - else - { - std::cerr << "RsFileListsSerialiser::serialise(): Not an RsFileListsItem!" << std::endl; - return 0; - } -} - -bool RsFileListsSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsFileListsItem *flst_item = dynamic_cast(item) ; - - if(flst_item != NULL) - return flst_item->serialise(data,*size) ; - else - { - std::cerr << "RsFileListsSerialiser::serialise(): Not an RsFileListsItem!" << std::endl; - return 0; - } -} - -bool RsFileListsItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const -{ - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; -} - -bool RsFileListsSyncRequestItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::serialiseFileListsSyncReqItem()" << std::endl; -#endif - - /* RsFileListsSyncMsgItem */ - - ok &= entry_hash.serialise(data, size, offset); - ok &= setRawUInt32(data, size, &offset, flags ); - ok &= setRawUInt32(data, size, &offset, last_known_recurs_modf_TS); - ok &= setRawUInt64(data, size, &offset, request_id); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::serialiseNxsSynMsgItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsFileListsSerialiser::serialiseNxsSynMsgItem() NOK" << std::endl; - } -#endif - - return ok; -} - -bool RsFileListsSyncResponseItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::serialiseFileListsSyncReqItem()" << std::endl; -#endif - - /* RsFileListsSyncMsgItem */ - - ok &= entry_hash.serialise(data, size, offset); - ok &= checksum.serialise(data, size, offset); - ok &= setRawUInt32(data, size, &offset, flags ); - ok &= setRawUInt32(data, size, &offset, last_known_recurs_modf_TS); - ok &= setRawUInt64(data, size, &offset, request_id); - ok &= directory_content_data.SetTlv(data,size,&offset) ; - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::serialiseNxsSynMsgItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsFileListsSerialiser::serialiseNxsSynMsgItem() NOK" << std::endl; - } -#endif - - return ok; -} - -//============================================================================================================================// -// Deserialisation // -//============================================================================================================================// - -//RsFileListsConfigItem* RsFileListsSerialiser::deserialFileListsConfigItem(void *data, uint32_t *size) -//{ -// NOT_IMPLEMENTED(); -// -// return NULL ; -//} - -RsFileListsSyncRequestItem* RsFileListsSerialiser::deserialFileListsSyncRequestItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_FILELISTS_SYNC_REQ_ITEM); - uint32_t offset = 8; - - RsFileListsSyncRequestItem* item = new RsFileListsSyncRequestItem(); - - ok &= item->entry_hash.deserialise(data, *size, offset); - ok &= getRawUInt32(data, *size, &offset, &item->flags); - ok &= getRawUInt32(data, *size, &offset, &item->last_known_recurs_modf_TS); - ok &= getRawUInt64(data, *size, &offset, &item->request_id); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::deserialNxsGrp() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::deserialNxsGrp() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsFileListsSyncResponseItem* RsFileListsSerialiser::deserialFileListsSyncResponseItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_FILELISTS_SYNC_RSP_ITEM); - uint32_t offset = 8; - - RsFileListsSyncResponseItem* item = new RsFileListsSyncResponseItem(); - - /* - uint32_t entry_index ; // index of the directory to sync - uint32_t flags; // used to say that it's a request or a response, say that the directory has been removed, ask for further update, etc. - uint32_t last_known_recurs_modf_TS; // time of last modification, computed over all files+directories below. - uint64_t request_id; // use to determine if changes that have occured since last hash - */ - - ok &= item->entry_hash.deserialise(data, *size, offset); - ok &= item->checksum.deserialise(data, *size, offset); - ok &= getRawUInt32(data, *size, &offset, &item->flags); - ok &= getRawUInt32(data, *size, &offset, &item->last_known_recurs_modf_TS); - ok &= getRawUInt64(data, *size, &offset, &item->request_id); - - ok &= item->directory_content_data.GetTlv(data,*size,&offset) ; - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::deserialNxsGrp() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::deserialNxsGrp() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -bool RsFileListsSerialiser::checkItemHeader(void *data,uint32_t *size,uint8_t subservice_type) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::checkItemHeader()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_FILE_DATABASE != getRsItemService(rstype)) || (subservice_type != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::checkItemHeader() FAIL wrong type" << std::endl; -#endif - return false; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileListsSerialiser::checkItemHeader() FAIL wrong size" << std::endl; -#endif - return false; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - return true ; -} - -//============================================================================================================================// -// Sizes // -//============================================================================================================================// - -uint32_t RsFileListsSyncRequestItem::serial_size()const -{ - - uint32_t s = 8; //header size - - s += RsFileHash::serial_size(); // entry hash - s += 4; // flags - s += 4; // last_known_recurs_modf_TS - s += 8; // request_id - - return s; -} - -uint32_t RsFileListsSyncResponseItem::serial_size()const -{ - - uint32_t s = 8; //header size - - s += RsFileHash::serial_size(); // entry hash - s += RsFileHash::serial_size(); // checksum - s += 4; // flags - s += 4; // last_known_recurs_modf_TS - s += 8; // request_id - s += directory_content_data.TlvSize(); - - return s; -} - - -std::ostream& RsFileListsSyncRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileListsSyncReqItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); out << "Entry hash: " << entry_hash << std::endl; - printIndent(out , int_Indent); out << "Flags: " << (uint32_t) flags << std::endl; - printIndent(out , int_Indent); out << "Last modf TS: " << last_known_recurs_modf_TS << std::endl; - printIndent(out , int_Indent); out << "request id: " << std::hex << request_id << std::dec << std::endl; - - printRsItemEnd(out ,"RsFileListsSyncReqItem", indent); - - return out; -} - -std::ostream& RsFileListsSyncResponseItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileListsSyncDirItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); out << "Entry hash: " << entry_hash << std::endl; - printIndent(out , int_Indent); out << "Checksum : " << checksum << std::endl; - printIndent(out , int_Indent); out << "Flags: " << (uint32_t) flags << std::endl; - printIndent(out , int_Indent); out << "Last modf TS: " << last_known_recurs_modf_TS << std::endl; - printIndent(out , int_Indent); out << "request id: " << std::hex << request_id << std::dec << std::endl; - printIndent(out , int_Indent); out << "Data size: " << directory_content_data.bin_len << std::endl; - - printRsItemEnd(out ,"RsFileListsSyncDirItem", indent); - - return out; -} - -#endif diff --git a/libretroshare/src/file_sharing/rsfilelistitems.h b/libretroshare/src/file_sharing/rsfilelistitems.h index fd9a928d5..391d3dd88 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.h +++ b/libretroshare/src/file_sharing/rsfilelistitems.h @@ -105,11 +105,11 @@ public: RsTlvBinaryData directory_content_data ; // encoded binary data. This allows to vary the encoding format, in a way that is transparent to the serialiser. }; -class RsFileListsSerialiser : public RsSerializer +class RsFileListsSerialiser : public RsServiceSerializer { public: - RsFileListsSerialiser() : RsSerializer(RS_SERVICE_TYPE_FILE_DATABASE) {} + RsFileListsSerialiser() : RsServiceSerializer(RS_SERVICE_TYPE_FILE_DATABASE) {} virtual ~RsFileListsSerialiser() {} diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index 9dcc139d4..15a44f34f 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -64,7 +64,7 @@ static const time_t FILE_TRANSFER_LOW_PRIORITY_TASKS_PERIOD = 5 ; // low priorit /* Setup */ ftServer::ftServer(p3PeerMgr *pm, p3ServiceControl *sc) - : p3Service(),RsSerializer(RS_SERVICE_TYPE_TURTLE), // should be FT, but this is for backward compatibility + : p3Service(),RsServiceSerializer(RS_SERVICE_TYPE_TURTLE), // should be FT, but this is for backward compatibility mPeerMgr(pm), mServiceCtrl(sc), mFileDatabase(NULL), mFtController(NULL), mFtExtra(NULL), diff --git a/libretroshare/src/ft/ftserver.h b/libretroshare/src/ft/ftserver.h index 23606b28e..5ad4824b5 100644 --- a/libretroshare/src/ft/ftserver.h +++ b/libretroshare/src/ft/ftserver.h @@ -68,7 +68,7 @@ class p3PeerMgr; class p3ServiceControl; class p3FileDatabase; -class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTurtleClientService, public RsSerializer +class ftServer: public p3Service, public RsFiles, public ftDataSend, public RsTurtleClientService, public RsServiceSerializer { public: @@ -98,7 +98,7 @@ public: virtual bool handleTunnelRequest(const RsFileHash& hash,const RsPeerId& peer_id) ; virtual void receiveTurtleData(RsTurtleGenericTunnelItem *item,const RsFileHash& hash,const RsPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction) ; virtual RsItem *create_item(uint16_t service,uint8_t item_type) const ; - virtual RsSerializer *serializer() { return this ; } + virtual RsServiceSerializer *serializer() { return this ; } void addVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&,RsTurtleGenericTunnelItem::Direction dir) ; void removeVirtualPeer(const TurtleFileHash&, const TurtleVirtualPeerId&) ; diff --git a/libretroshare/src/rsitems/rsbanlistitems.h b/libretroshare/src/rsitems/rsbanlistitems.h index cc3f96eeb..3fce37956 100644 --- a/libretroshare/src/rsitems/rsbanlistitems.h +++ b/libretroshare/src/rsitems/rsbanlistitems.h @@ -72,10 +72,10 @@ public: RsTlvBanList banned_peers; }; -class RsBanListSerialiser: public RsSerializer +class RsBanListSerialiser: public RsServiceSerializer { public: - RsBanListSerialiser() :RsSerializer(RS_SERVICE_TYPE_BANLIST) {} + RsBanListSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_BANLIST) {} virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; diff --git a/libretroshare/src/rsitems/rsbwctrlitems.h b/libretroshare/src/rsitems/rsbwctrlitems.h index e9262cd5b..e21410b39 100644 --- a/libretroshare/src/rsitems/rsbwctrlitems.h +++ b/libretroshare/src/rsitems/rsbwctrlitems.h @@ -57,10 +57,10 @@ public: }; -class RsBwCtrlSerialiser: public RsSerializer +class RsBwCtrlSerialiser: public RsServiceSerializer { public: - RsBwCtrlSerialiser() :RsSerializer(RS_SERVICE_TYPE_BWCTRL) {} + RsBwCtrlSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_BWCTRL) {} virtual ~RsBwCtrlSerialiser() {} RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const; diff --git a/libretroshare/src/rsitems/rsdiscovery2items.h b/libretroshare/src/rsitems/rsdiscovery2items.h index fc1a944cb..7610d534f 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.h +++ b/libretroshare/src/rsitems/rsdiscovery2items.h @@ -166,10 +166,10 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); #endif -class RsDiscSerialiser: public RsSerializer +class RsDiscSerialiser: public RsServiceSerializer { public: - RsDiscSerialiser() :RsSerializer(RS_SERVICE_TYPE_DISC) {} + RsDiscSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_DISC) {} virtual ~RsDiscSerialiser() {} diff --git a/libretroshare/src/rsitems/rsfiletransferitems.h b/libretroshare/src/rsitems/rsfiletransferitems.h index 5cfed03b9..b51e74d53 100644 --- a/libretroshare/src/rsitems/rsfiletransferitems.h +++ b/libretroshare/src/rsitems/rsfiletransferitems.h @@ -176,10 +176,10 @@ class RsFileTransferSingleChunkCrcItem: public RsFileTransferItem /**************************************************************************/ -class RsFileTransferSerialiser: public RsSerializer +class RsFileTransferSerialiser: public RsServiceSerializer { public: - RsFileTransferSerialiser(): RsSerializer(RS_SERVICE_TYPE_FILE_TRANSFER) {} + RsFileTransferSerialiser(): RsServiceSerializer(RS_SERVICE_TYPE_FILE_TRANSFER) {} virtual ~RsFileTransferSerialiser() {} diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.h b/libretroshare/src/rsitems/rsgxsreputationitems.h index cc3f64a78..1f30a5d65 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.h +++ b/libretroshare/src/rsitems/rsgxsreputationitems.h @@ -163,10 +163,10 @@ public: }; -class RsGxsReputationSerialiser: public RsSerializer +class RsGxsReputationSerialiser: public RsServiceSerializer { public: - RsGxsReputationSerialiser() :RsSerializer(RS_SERVICE_GXS_TYPE_REPUTATION){} + RsGxsReputationSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_REPUTATION){} virtual ~RsGxsReputationSerialiser(){} virtual RsItem *create_item(uint16_t service,uint8_t item_type) const; diff --git a/libretroshare/src/rsitems/rsmsgitems.cc b/libretroshare/src/rsitems/rsmsgitems.cc index 7405f37e0..8fd2f2c55 100644 --- a/libretroshare/src/rsitems/rsmsgitems.cc +++ b/libretroshare/src/rsitems/rsmsgitems.cc @@ -158,7 +158,7 @@ void RsMsgItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,attachment,"attachment"); - if(ctx.mFlags & RsSerializer::SERIALIZATION_FLAG_CONFIG) + if(ctx.mFlags & RsServiceSerializer::SERIALIZATION_FLAG_CONFIG) RsTypeSerializer::serial_process(j,ctx,msgId,"msgId"); } diff --git a/libretroshare/src/rsitems/rsmsgitems.h b/libretroshare/src/rsitems/rsmsgitems.h index 5eb94e5b4..f0916352b 100644 --- a/libretroshare/src/rsitems/rsmsgitems.h +++ b/libretroshare/src/rsitems/rsmsgitems.h @@ -235,11 +235,11 @@ class RsMsgParentId : public RsMessageItem uint32_t msgParentId; }; -class RsMsgSerialiser: public RsSerializer +class RsMsgSerialiser: public RsServiceSerializer { public: RsMsgSerialiser(SerializationFlags flags) - :RsSerializer(RS_SERVICE_TYPE_MSG,SerializeContext::FORMAT_BINARY,flags){} + :RsServiceSerializer(RS_SERVICE_TYPE_MSG,SerializeContext::FORMAT_BINARY,flags){} virtual ~RsMsgSerialiser() {} diff --git a/libretroshare/src/rsitems/rsrttitems.h b/libretroshare/src/rsitems/rsrttitems.h index cad02062e..b3e5bdec2 100644 --- a/libretroshare/src/rsitems/rsrttitems.h +++ b/libretroshare/src/rsitems/rsrttitems.h @@ -78,10 +78,10 @@ class RsRttPongItem: public RsRttItem }; -class RsRttSerialiser: public RsSerializer +class RsRttSerialiser: public RsServiceSerializer { public: - RsRttSerialiser() :RsSerializer(RS_SERVICE_TYPE_RTT) {} + RsRttSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_RTT) {} virtual ~RsRttSerialiser(){} diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 85a7a9430..0a468abf5 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -2,11 +2,11 @@ #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" -const SerializationFlags RsSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); -const SerializationFlags RsSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); -const SerializationFlags RsSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); +const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); +const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); +const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); -RsItem *RsSerializer::deserialise(void *data, uint32_t *size) +RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; @@ -37,7 +37,7 @@ RsItem *RsSerializer::deserialise(void *data, uint32_t *size) return NULL ; } -bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) +bool RsServiceSerializer::serialise(RsItem *item,void *data,uint32_t *size) { SerializeContext ctx(static_cast(data),0,mFormat,mFlags); @@ -64,7 +64,7 @@ bool RsSerializer::serialise(RsItem *item,void *data,uint32_t *size) return true ; } -uint32_t RsSerializer::size(RsItem *item) +uint32_t RsServiceSerializer::size(RsItem *item) { SerializeContext ctx(NULL,0,mFormat,mFlags); @@ -74,7 +74,7 @@ uint32_t RsSerializer::size(RsItem *item) return ctx.mOffset ; } -void RsSerializer::print(RsItem *item) +void RsServiceSerializer::print(RsItem *item) { SerializeContext ctx(NULL,0,mFormat,mFlags); diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 92f409361..60860b426 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -10,7 +10,7 @@ #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " -class RsSerializer: public RsSerialType +class RsServiceSerializer: public RsSerialType { public: // These are convenience flags to be used by the items when processing the data. The names of the flags @@ -23,7 +23,7 @@ class RsSerializer: public RsSerialType static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 - RsSerializer(uint16_t service_id, + RsServiceSerializer(uint16_t service_id, SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, SerializationFlags flags = SERIALIZATION_FLAG_NONE) diff --git a/libretroshare/src/services/p3msgservice.cc b/libretroshare/src/services/p3msgservice.cc index 44c244023..a3aacfc7b 100644 --- a/libretroshare/src/services/p3msgservice.cc +++ b/libretroshare/src/services/p3msgservice.cc @@ -86,7 +86,7 @@ static const uint32_t RS_MSG_DISTANT_MESSAGE_HASH_KEEP_TIME = 2*30*86400 ; // ke p3MsgService::p3MsgService(p3ServiceControl *sc, p3IdService *id_serv) :p3Service(), p3Config(), mIdService(id_serv), mServiceCtrl(sc), mMsgMtx("p3MsgService"), mMsgUniqueId(0) { - _serialiser = new RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE); // this serialiser is used for services. It's not the same than the one returned by setupSerialiser(). We need both!! + _serialiser = new RsMsgSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_NONE); // this serialiser is used for services. It's not the same than the one returned by setupSerialiser(). We need both!! addSerialType(_serialiser); mMsgUniqueId = 1 ; // MsgIds are not transmitted, but only used locally as a storage index. As such, thay do not need to be different @@ -519,7 +519,7 @@ RsSerialiser* p3MsgService::setupSerialiser() // this serialiser is used for con { RsSerialiser *rss = new RsSerialiser ; - rss->addSerialType(new RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_CONFIG)); + rss->addSerialType(new RsMsgSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_CONFIG)); rss->addSerialType(new RsGeneralConfigSerialiser()); return rss; @@ -2024,10 +2024,10 @@ void p3MsgService::sendDistantMsgItem(RsMsgItem *msgitem) // The item is serialized and turned into a generic turtle item. Use use the explicit serialiser to make sure that the msgId is not included - uint32_t msg_serialized_rssize = RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE).size(msgitem) ; + uint32_t msg_serialized_rssize = RsMsgSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_NONE).size(msgitem) ; RsTemporaryMemory msg_serialized_data(msg_serialized_rssize) ; - if(!RsMsgSerialiser(RsSerializer::SERIALIZATION_FLAG_NONE).serialise(msgitem,msg_serialized_data,&msg_serialized_rssize)) + if(!RsMsgSerialiser(RsServiceSerializer::SERIALIZATION_FLAG_NONE).serialise(msgitem,msg_serialized_data,&msg_serialized_rssize)) { std::cerr << "(EE) p3MsgService::sendTurtleData(): Serialization error." << std::endl; return ; diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 0249cce22..9bc3fc4bf 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -205,10 +205,10 @@ class RsTurtleGenericDataItem: public RsTurtleGenericTunnelItem /* Turtle Serialiser class */ /***********************************************************************************/ -class RsTurtleSerialiser: public RsSerializer +class RsTurtleSerialiser: public RsServiceSerializer { public: - RsTurtleSerialiser() : RsSerializer(RS_SERVICE_TYPE_TURTLE) {} + RsTurtleSerialiser() : RsServiceSerializer(RS_SERVICE_TYPE_TURTLE) {} virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const; diff --git a/libretroshare/src/turtle/turtleclientservice.h b/libretroshare/src/turtle/turtleclientservice.h index 7fa4d8b18..d9552c662 100644 --- a/libretroshare/src/turtle/turtleclientservice.h +++ b/libretroshare/src/turtle/turtleclientservice.h @@ -76,7 +76,7 @@ class RsTurtleClientService // services might only use the generic item already provided by the turtle // router: RsTurtleGenericDataItem - virtual RsSerializer *serializer() { return NULL ; } + virtual RsServiceSerializer *serializer() { return NULL ; } // These methods are called by the turtle router to add/remove virtual peers when tunnels are created/deleted // From 8da5e151801f7edb9e5afa1a569044598262d7ed Mon Sep 17 00:00:00 2001 From: Konrad Date: Mon, 24 Apr 2017 16:00:23 +0200 Subject: [PATCH 156/230] Changed: difference time to absolute time. --- libresapi/src/api/IdentityHandler.cpp | 5 ++--- libresapi/src/api/PeersHandler.cpp | 4 +--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/libresapi/src/api/IdentityHandler.cpp b/libresapi/src/api/IdentityHandler.cpp index 1306f9a54..be2e28622 100644 --- a/libresapi/src/api/IdentityHandler.cpp +++ b/libresapi/src/api/IdentityHandler.cpp @@ -418,8 +418,7 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) } resp.mDataStream << makeKeyValue("pgp_name", pgp_name); - time_t now = time(NULL); - resp.mDataStream << makeKeyValue("last_usage", difftime(now, data.mLastUsageTS)); + resp.mDataStream << makeKeyValue("last_usage", (uint32_t)data.mLastUsageTS); bool isAnonymous = false; if(!data.mPgpKnown) @@ -475,7 +474,7 @@ void IdentityHandler::handleGetIdentityDetails(Request& req, Response& resp) for(std::map::const_iterator it(details.mUseCases.begin()); it != details.mUseCases.end(); ++it) { usagesStream.getStreamToMember() - << makeKeyValue("usage_time", difftime(now, data.mLastUsageTS)) + << makeKeyValue("usage_time", (uint32_t)data.mLastUsageTS) << makeKeyValue("usage_service", (int)(it->first.mServiceId)) << makeKeyValue("usage_case", (int)(it->first.mUsageCode)); } diff --git a/libresapi/src/api/PeersHandler.cpp b/libresapi/src/api/PeersHandler.cpp index dd03f8351..6649acdcb 100644 --- a/libresapi/src/api/PeersHandler.cpp +++ b/libresapi/src/api/PeersHandler.cpp @@ -7,7 +7,6 @@ #include #include -#include #include "Operators.h" #include "ApiTypes.h" @@ -746,12 +745,11 @@ void PeersHandler::handleGetNodeOptions(Request& req, Response& resp) return; } - time_t now = time(NULL); resp.mDataStream << makeKeyValue("peer_id", detail.id.toStdString()); resp.mDataStream << makeKeyValue("name", detail.name); resp.mDataStream << makeKeyValue("location", detail.location); resp.mDataStream << makeKeyValue("pgp_id", detail.gpg_id.toStdString()); - resp.mDataStream << makeKeyValue("last_contact", difftime(now, detail.lastConnect)); + resp.mDataStream << makeKeyValue("last_contact", detail.lastConnect); std::string status_message = mRsMsgs->getCustomStateString(detail.id); resp.mDataStream << makeKeyValueReference("status_message", status_message); From 8ae6541ceb4daea26e77ea7b2b41934980ca3893 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 17:10:01 +0200 Subject: [PATCH 157/230] added two new classes for config/service serialisers and a base generic serialiser class --- .../src/serialization/rsserializer.cc | 14 ++--- .../src/serialization/rsserializer.h | 52 +++++++++++++++---- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 0a468abf5..9f14ee91e 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -2,11 +2,11 @@ #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" -const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); -const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); -const SerializationFlags RsServiceSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); +const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); +const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); +const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); -RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) +RsItem *RsGenericSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; @@ -37,7 +37,7 @@ RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) return NULL ; } -bool RsServiceSerializer::serialise(RsItem *item,void *data,uint32_t *size) +bool RsGenericSerializer::serialise(RsItem *item,void *data,uint32_t *size) { SerializeContext ctx(static_cast(data),0,mFormat,mFlags); @@ -64,7 +64,7 @@ bool RsServiceSerializer::serialise(RsItem *item,void *data,uint32_t *size) return true ; } -uint32_t RsServiceSerializer::size(RsItem *item) +uint32_t RsGenericSerializer::size(RsItem *item) { SerializeContext ctx(NULL,0,mFormat,mFlags); @@ -74,7 +74,7 @@ uint32_t RsServiceSerializer::size(RsItem *item) return ctx.mOffset ; } -void RsServiceSerializer::print(RsItem *item) +void RsGenericSerializer::print(RsItem *item) { SerializeContext ctx(NULL,0,mFormat,mFlags); diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 60860b426..33e643215 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -10,9 +10,11 @@ #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " -class RsServiceSerializer: public RsSerialType +class RsGenericSerializer: public RsSerialType { - public: +public: + + // These are convenience flags to be used by the items when processing the data. The names of the flags // are not very important. What matters is that the serial_process() method of each item correctly // deals with the data when it sees the flags, if the serialiser sets them. By default the flags are not @@ -23,13 +25,7 @@ class RsServiceSerializer: public RsSerialType static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 - RsServiceSerializer(uint16_t service_id, - SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, - SerializationFlags flags = SERIALIZATION_FLAG_NONE) - - : RsSerialType(RS_PKT_VERSION_SERVICE,service_id),mFormat(format),mFlags(flags) {} - - /*! create_item + /*! create_item * should be overloaded to create the correct type of item depending on the data */ virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; @@ -41,10 +37,48 @@ class RsServiceSerializer: public RsSerialType uint32_t size(RsItem *item) ; void print(RsItem *item) ; +protected: + RsGenericSerializer(uint8_t serial_class, + uint8_t serial_type, + SerializeContext::SerializationFormat format, + SerializationFlags flags ) + : RsSerialType(RS_PKT_VERSION1,serial_class,serial_type), mFormat(format),mFlags(flags) + {} + + RsGenericSerializer(uint16_t service, + SerializeContext::SerializationFormat format, + SerializationFlags flags ) + : RsSerialType(RS_PKT_VERSION_SERVICE,service), mFormat(format),mFlags(flags) + {} + private: SerializeContext::SerializationFormat mFormat ; SerializationFlags mFlags ; + +}; + +class RsServiceSerializer: public RsGenericSerializer +{ +public: + RsServiceSerializer(uint16_t service_id, + SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, + SerializationFlags flags = SERIALIZATION_FLAG_NONE) + + : RsGenericSerializer(service_id,format,flags) {} +}; + +class RsConfigSerializer: public RsGenericSerializer +{ +public: + RsConfigSerializer(uint8_t config_class, + uint8_t config_type, + SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, + SerializationFlags flags = RsGenericSerializer::SERIALIZATION_FLAG_NONE) + + : RsGenericSerializer(config_class,config_type,format,flags) {} }; + + From 13275820961a0509a38bc4e028f3bdb5b44041ca Mon Sep 17 00:00:00 2001 From: Phenom Date: Mon, 24 Apr 2017 17:28:25 +0200 Subject: [PATCH 158/230] Fix Relay setting values Was multiply by 1024 then divide by 1000. --- retroshare-gui/src/gui/settings/RelayPage.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/retroshare-gui/src/gui/settings/RelayPage.cpp b/retroshare-gui/src/gui/settings/RelayPage.cpp index 3124f40db..d26550c8b 100644 --- a/retroshare-gui/src/gui/settings/RelayPage.cpp +++ b/retroshare-gui/src/gui/settings/RelayPage.cpp @@ -129,15 +129,15 @@ void RelayPage::load() uint32_t bandwidth; rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_FRIENDS, count, bandwidth); whileBlocking(ui.noFriendSpinBox)->setValue(count); - whileBlocking(ui.bandFriendSpinBox)->setValue(bandwidth / 1000); + whileBlocking(ui.bandFriendSpinBox)->setValue(bandwidth / 1024); rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_FOF, count, bandwidth); whileBlocking(ui.noFOFSpinBox)->setValue(count); - whileBlocking(ui.bandFOFSpinBox)->setValue(bandwidth / 1000); + whileBlocking(ui.bandFOFSpinBox)->setValue(bandwidth / 1024); rsDht->getRelayAllowance(RSDHT_RELAY_CLASS_GENERAL, count, bandwidth); whileBlocking(ui.noGeneralSpinBox)->setValue(count); - whileBlocking(ui.bandGeneralSpinBox)->setValue(bandwidth / 1000); + whileBlocking(ui.bandGeneralSpinBox)->setValue(bandwidth / 1024); updateTotals(); From af4fcf767902c19ff3cd2d4cbef5f60ac9157b7d Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 17:33:30 +0200 Subject: [PATCH 159/230] switched rshistoryitems to new serialization --- .../src/serialiser/rshistoryitems.cc | 35 ++++++++++++++++--- libretroshare/src/serialiser/rshistoryitems.h | 24 ++++++------- .../src/serialization/rsserializer.cc | 31 +++++++++++++++- .../src/serialization/rsserializer.h | 22 ++++++++---- 4 files changed, 85 insertions(+), 27 deletions(-) diff --git a/libretroshare/src/serialiser/rshistoryitems.cc b/libretroshare/src/serialiser/rshistoryitems.cc index 2ecbf591b..6c05e9afb 100644 --- a/libretroshare/src/serialiser/rshistoryitems.cc +++ b/libretroshare/src/serialiser/rshistoryitems.cc @@ -34,7 +34,31 @@ #include -/*************************************************************************/ +void RsHistoryMsgItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + uint16_t version=0; + + RsTypeSerializer::serial_process(j,ctx,version,"version") ; + RsTypeSerializer::serial_process (j,ctx,chatPeerId,"chatPeerId") ; + RsTypeSerializer::serial_process (j,ctx,incoming,"incoming") ; + RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,peerName,"peerName") ; + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,message,"message") ; +} + +RsItem *RsHistorySerialiser::create_item(uint8_t serial_class,uint8_t serial_type) const +{ + if(serial_class != RS_PKT_CLASS_CONFIG) + return NULL ; + + if(serial_type == RS_PKT_SUBTYPE_DEFAULT) + return new RsHistoryMsgItem(); + + return NULL ; +} + RsHistoryMsgItem::RsHistoryMsgItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_HISTORY_CONFIG, RS_PKT_SUBTYPE_DEFAULT) { @@ -45,6 +69,9 @@ RsHistoryMsgItem::RsHistoryMsgItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONF saveToDisc = true; } +#ifdef TO_REMOVE + +/*************************************************************************/ RsHistoryMsgItem::~RsHistoryMsgItem() { } @@ -92,9 +119,6 @@ std::ostream& RsHistoryMsgItem::print(std::ostream &out, uint16_t indent) return out; } -RsHistorySerialiser::RsHistorySerialiser() : RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_HISTORY_CONFIG) -{ -} RsHistorySerialiser::~RsHistorySerialiser() { @@ -114,7 +138,6 @@ uint32_t RsHistorySerialiser::sizeHistoryMsgItem(RsHistoryMsgItem* item) return s; } - /* serialise the data to the buffer */ bool RsHistorySerialiser::serialiseHistoryMsgItem(RsHistoryMsgItem* item, void* data, uint32_t* pktsize) { @@ -266,3 +289,5 @@ RsItem* RsHistorySerialiser::deserialise(void *data, uint32_t *pktsize) } /*************************************************************************/ + +#endif diff --git a/libretroshare/src/serialiser/rshistoryitems.h b/libretroshare/src/serialiser/rshistoryitems.h index 72f186561..ffc5b571c 100644 --- a/libretroshare/src/serialiser/rshistoryitems.h +++ b/libretroshare/src/serialiser/rshistoryitems.h @@ -28,18 +28,21 @@ #include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" +#include "serialiser/rsconfigitems.h" #include "retroshare/rstypes.h" +#include "serialization/rsserializer.h" + /**************************************************************************/ class RsHistoryMsgItem: public RsItem { public: RsHistoryMsgItem(); - virtual ~RsHistoryMsgItem(); + virtual ~RsHistoryMsgItem() {} + virtual void clear() {} - virtual void clear(); - std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsPeerId chatPeerId; // empty for global chat bool incoming; @@ -54,20 +57,13 @@ public: bool saveToDisc; }; -class RsHistorySerialiser: public RsSerialType +class RsHistorySerialiser: public RsConfigSerializer { public: - RsHistorySerialiser(); - virtual ~RsHistorySerialiser(); - - virtual uint32_t size(RsItem*); - virtual bool serialise(RsItem* item, void* data, uint32_t* size); - virtual RsItem* deserialise(void* data, uint32_t* size); + RsHistorySerialiser() : RsConfigSerializer(RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_HISTORY_CONFIG) {} + virtual ~RsHistorySerialiser() {} -private: - virtual uint32_t sizeHistoryMsgItem(RsHistoryMsgItem*); - virtual bool serialiseHistoryMsgItem (RsHistoryMsgItem* item, void* data, uint32_t* size); - virtual RsHistoryMsgItem* deserialiseHistoryMsgItem(void* data, uint32_t* size); + virtual RsItem *create_item(uint8_t service,uint8_t type) const ; }; /**************************************************************************/ diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 9f14ee91e..ab47e9429 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -6,7 +6,7 @@ const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_NONE ( 0x0 const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE ( 0x0002 ); -RsItem *RsGenericSerializer::deserialise(void *data, uint32_t *size) +RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; @@ -36,7 +36,36 @@ RsItem *RsGenericSerializer::deserialise(void *data, uint32_t *size) delete item ; return NULL ; } +RsItem *RsConfigSerializer::deserialise(void *data, uint32_t *size) +{ + uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; + RsItem *item = create_item(getRsItemClass(rstype),getRsItemSubType(rstype)) ; + + if(!item) + { + std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; + return NULL ; + } + + SerializeContext ctx(const_cast(static_cast(data)),*size,mFormat,mFlags); + ctx.mOffset = 8 ; + + item->serial_process(RsItem::DESERIALIZE, ctx) ; + + if(ctx.mSize != ctx.mOffset) + { + std::cerr << "RsSerializer::deserialise(): ERROR. offset does not match expected size!" << std::endl; + delete item ; + return NULL ; + } + if(ctx.mOk) + return item ; + + delete item ; + return NULL ; +} bool RsGenericSerializer::serialise(RsItem *item,void *data,uint32_t *size) { SerializeContext ctx(static_cast(data),0,mFormat,mFlags); diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 33e643215..3285becf9 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -25,14 +25,9 @@ public: static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 - /*! create_item - * should be overloaded to create the correct type of item depending on the data - */ - virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; - // The following functions overload RsSerialType. They *should not* need to be further overloaded. - RsItem *deserialise(void *data,uint32_t *size) ; + RsItem *deserialise(void *data,uint32_t *size) =0; bool serialise(RsItem *item,void *data,uint32_t *size) ; uint32_t size(RsItem *item) ; void print(RsItem *item) ; @@ -51,7 +46,6 @@ protected: : RsSerialType(RS_PKT_VERSION_SERVICE,service), mFormat(format),mFlags(flags) {} -private: SerializeContext::SerializationFormat mFormat ; SerializationFlags mFlags ; @@ -65,6 +59,13 @@ public: SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsGenericSerializer(service_id,format,flags) {} + + /*! create_item + * should be overloaded to create the correct type of item depending on the data + */ + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const=0; + + RsItem *deserialise(void *data,uint32_t *size) ; }; class RsConfigSerializer: public RsGenericSerializer @@ -76,6 +77,13 @@ public: SerializationFlags flags = RsGenericSerializer::SERIALIZATION_FLAG_NONE) : RsGenericSerializer(config_class,config_type,format,flags) {} + + /*! create_item + * should be overloaded to create the correct type of item depending on the data + */ + virtual RsItem *create_item(uint8_t /* class */, uint8_t /* item_type */) const=0; + + RsItem *deserialise(void *data,uint32_t *size) ; }; From fcabe6359f7667b18e23844056f4d6dbf9464b51 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 18:51:51 +0200 Subject: [PATCH 160/230] switch RsConfigItems to new serialization --- libretroshare/src/ft/ftextralist.cc | 5 +- libretroshare/src/pqi/p3peermgr.cc | 3 +- libretroshare/src/serialiser/rsconfigitems.cc | 278 ++++++++++++++---- libretroshare/src/serialiser/rsconfigitems.h | 185 ++++-------- 4 files changed, 297 insertions(+), 174 deletions(-) diff --git a/libretroshare/src/ft/ftextralist.cc b/libretroshare/src/ft/ftextralist.cc index e63a5f1a8..8538a46a9 100644 --- a/libretroshare/src/ft/ftextralist.cc +++ b/libretroshare/src/ft/ftextralist.cc @@ -396,7 +396,8 @@ bool ftExtraList::saveList(bool &cleanup, std::list& sList) std::map::const_iterator it; for(it = mFiles.begin(); it != mFiles.end(); ++it) { - RsFileConfigItem_deprecated *fi = new RsFileConfigItem_deprecated(); + RsFileConfigItem *fi = new RsFileConfigItem(); + fi->file.path = (it->second).info.path; fi->file.name = (it->second).info.fname; fi->file.hash = (it->second).info.hash; @@ -429,7 +430,7 @@ bool ftExtraList::loadList(std::list& load) for(it = load.begin(); it != load.end(); ++it) { - RsFileConfigItem_deprecated *fi = dynamic_cast(*it); + RsFileConfigItem *fi = dynamic_cast(*it); if (!fi) { delete (*it); diff --git a/libretroshare/src/pqi/p3peermgr.cc b/libretroshare/src/pqi/p3peermgr.cc index 97e738a40..d26c4a950 100644 --- a/libretroshare/src/pqi/p3peermgr.cc +++ b/libretroshare/src/pqi/p3peermgr.cc @@ -2294,7 +2294,7 @@ bool p3PeerMgrIMPL::loadList(std::list& load) continue; } - +#ifdef TO_REMOVE RsPeerGroupItem_deprecated *gitem = dynamic_cast(*it) ; if (gitem) @@ -2331,6 +2331,7 @@ bool p3PeerMgrIMPL::loadList(std::list& load) continue; } +#endif RsNodeGroupItem *gitem2 = dynamic_cast(*it) ; diff --git a/libretroshare/src/serialiser/rsconfigitems.cc b/libretroshare/src/serialiser/rsconfigitems.cc index 9b94d454d..0c603ed3a 100644 --- a/libretroshare/src/serialiser/rsconfigitems.cc +++ b/libretroshare/src/serialiser/rsconfigitems.cc @@ -40,6 +40,37 @@ /*************************************************************************/ +RsItem *RsFileConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +{ + if(item_class != RS_PKT_CLASS_CONFIG) + return NULL ; + + switch(item_type) + { + case RS_PKT_SUBTYPE_FILE_TRANSFER: return new RsFileTransfer() ; + case RS_PKT_SUBTYPE_FILE_ITEM: return new RsFileConfigItem() ; + default: + return NULL ; + } +} +void RsFileTransfer::clear() +{ + + file.TlvClear(); + allPeerIds.TlvClear(); + cPeerId.clear() ; + state = 0; + in = false; + transferred = 0; + crate = 0; + trate = 0; + lrate = 0; + ltransfer = 0; + +} + + +#ifdef TO_REMOVE uint32_t RsFileConfigSerialiser::size(RsItem *i) { RsFileTransfer *rft; @@ -110,22 +141,6 @@ RsFileTransfer::~RsFileTransfer() return; } -void RsFileTransfer::clear() -{ - - file.TlvClear(); - allPeerIds.TlvClear(); - cPeerId.clear() ; - state = 0; - in = false; - transferred = 0; - crate = 0; - trate = 0; - lrate = 0; - ltransfer = 0; - -} - std::ostream &RsFileTransfer::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsFileTransfer", indent); @@ -231,7 +246,31 @@ uint32_t RsFileConfigSerialiser::sizeTransfer(RsFileTransfer *item) return s; } +#endif +void RsFileTransfer::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,file,"file") ; + RsTypeSerializer::serial_process(j,ctx,allPeerIds,"allPeerIds") ; + + RsTypeSerializer::serial_process (j,ctx,cPeerId,"cPeerId") ; + + RsTypeSerializer::serial_process (j,ctx,state,"state") ; + RsTypeSerializer::serial_process (j,ctx,in,"in") ; + + RsTypeSerializer::serial_process (j,ctx,transferred,"transferred") ; + + RsTypeSerializer::serial_process (j,ctx,crate,"crate") ; + RsTypeSerializer::serial_process (j,ctx,trate,"trate") ; + RsTypeSerializer::serial_process (j,ctx,lrate,"lrate") ; + RsTypeSerializer::serial_process (j,ctx,ltransfer,"ltransfer") ; + + RsTypeSerializer::serial_process (j,ctx,flags,"flags") ; + RsTypeSerializer::serial_process (j,ctx,chunk_strategy,"chunk_strategy") ; + RsTypeSerializer::serial_process (j,ctx,compressed_chunk_map,"compressed_chunk_map") ; +} + +#ifdef TO_REMOVE bool RsFileConfigSerialiser::serialiseTransfer(RsFileTransfer *item, void *data, uint32_t *pktsize) { uint32_t tlvsize = sizeTransfer(item); @@ -374,7 +413,16 @@ uint32_t RsFileConfigSerialiser::sizeFileItem(RsFileConfigItem *item) return s; } +#endif +void RsFileConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,file,"file") ; + RsTypeSerializer::serial_process (j,ctx,flags,"flags") ; + RsTypeSerializer::serial_process(j,ctx,parent_groups,"parent_groups") ; +} + +#ifdef TO_REMOVE bool RsFileConfigSerialiser::serialiseFileItem(RsFileConfigItem *item, void *data, uint32_t *pktsize) { uint32_t tlvsize = sizeFileItem(item); @@ -540,6 +588,22 @@ RsGeneralConfigSerialiser::~RsGeneralConfigSerialiser() return; } +#endif + +RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +{ + if(item_class != RS_PKT_TYPE_GENERAL_CONFIG) + return NULL ; + + switch(item_type) + { + case RS_PKT_SUBTYPE_KEY_VALUE: return new RsConfigKeyValueSet(); + default: + return NULL ; + } +} + +#ifdef TO_REMOVE uint32_t RsGeneralConfigSerialiser::size(RsItem *i) { RsConfigKeyValueSet *kvs; @@ -632,7 +696,14 @@ uint32_t RsGeneralConfigSerialiser::sizeKeyValueSet(RsConfigKeyValueSet *item return s; } +#endif +void RsConfigKeyValueSet::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,tlvkvs,"tlvkvs") ; +} + +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsGeneralConfigSerialiser::serialiseKeyValueSet(RsConfigKeyValueSet *item, void *data, uint32_t *pktsize) { @@ -745,7 +816,49 @@ RsPeerConfigSerialiser::~RsPeerConfigSerialiser() { return; } +#endif +RsItem *RsPeerConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +{ + if(item_class != RS_PKT_TYPE_PEER_CONFIG) + return NULL ; + + switch(item_type) + { + case RS_PKT_SUBTYPE_PEER_NET: return new RsPeerNetItem(); + case RS_PKT_SUBTYPE_PEER_STUN: return new RsPeerStunItem(); + case RS_PKT_SUBTYPE_NODE_GROUP: return new RsNodeGroupItem() ; + case RS_PKT_SUBTYPE_PEER_PERMISSIONS: return new RsPeerServicePermissionItem(); + case RS_PKT_SUBTYPE_PEER_BANDLIMITS: return new RsPeerBandwidthLimitsItem(); + default: + return NULL ; + } +} + +void RsPeerNetItem::clear() +{ + peerId.clear(); + pgpId.clear(); + location.clear(); + netMode = 0; + vs_disc = 0; + vs_dht = 0; + lastContact = 0; + + localAddrV4.TlvClear(); + extAddrV4.TlvClear(); + localAddrV6.TlvClear(); + extAddrV6.TlvClear(); + + dyndns.clear(); + + localAddrList.TlvClear(); + extAddrList.TlvClear(); + + domain_addr.clear(); + domain_port = 0; +} +#ifdef TO_REMOVE uint32_t RsPeerConfigSerialiser::size(RsItem *i) { RsPeerStunItem *psi; @@ -855,29 +968,7 @@ RsPeerNetItem::~RsPeerNetItem() return; } -void RsPeerNetItem::clear() -{ - peerId.clear(); - pgpId.clear(); - location.clear(); - netMode = 0; - vs_disc = 0; - vs_dht = 0; - lastContact = 0; - localAddrV4.TlvClear(); - extAddrV4.TlvClear(); - localAddrV6.TlvClear(); - extAddrV6.TlvClear(); - - dyndns.clear(); - - localAddrList.TlvClear(); - extAddrList.TlvClear(); - - domain_addr.clear(); - domain_port = 0; -} std::ostream &RsPeerNetItem::print(std::ostream &out, uint16_t indent) { @@ -963,7 +1054,34 @@ uint32_t RsPeerConfigSerialiser::sizeNet(RsPeerNetItem *i) return s; } +#endif +void RsPeerNetItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,peerId,"peerId") ; + RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LOCATION,location,"location") ; + + RsTypeSerializer::serial_process(j,ctx,netMode,"netMode") ; + RsTypeSerializer::serial_process(j,ctx,vs_disc,"vs_disc") ; + RsTypeSerializer::serial_process(j,ctx,vs_dht,"vs_dht") ; + RsTypeSerializer::serial_process(j,ctx,lastContact,"lastContact") ; + + RsTypeSerializer::serial_process(j,ctx,localAddrV4,"localAddrV4") ; + RsTypeSerializer::serial_process(j,ctx,extAddrV4,"extAddrV4") ; + RsTypeSerializer::serial_process(j,ctx,localAddrV6,"localAddrV6") ; + RsTypeSerializer::serial_process(j,ctx,extAddrV6,"extAddrV6") ; + + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DYNDNS,dyndns,"dyndns") ; + + RsTypeSerializer::serial_process(j,ctx,localAddrList,"localAddrList") ; + RsTypeSerializer::serial_process(j,ctx,extAddrList,"extAddrList") ; + + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DOMADDR,domain_addr,"domain_addr") ; + RsTypeSerializer::serial_process(j,ctx,domain_port,"domain_port") ; +} + +#ifdef TO_REMOVE bool RsPeerConfigSerialiser::serialiseNet(RsPeerNetItem *item, void *data, uint32_t *size) { uint32_t tlvsize = RsPeerConfigSerialiser::sizeNet(item); @@ -1119,7 +1237,14 @@ uint32_t RsPeerConfigSerialiser::sizePeerBandwidthLimits(RsPeerBandwidthLimitsIt return s; } +#endif +void RsPeerBandwidthLimitsItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,peers,"peers") ; +} + +#ifdef TO_REMOVE bool RsPeerConfigSerialiser::serialisePeerBandwidthLimits(RsPeerBandwidthLimitsItem *item, void *data, uint32_t *size) { uint32_t tlvsize = RsPeerConfigSerialiser::sizePeerBandwidthLimits(item); @@ -1296,7 +1421,50 @@ uint32_t RsPeerConfigSerialiser::sizeStun(RsPeerStunItem *i) return s; } +#endif +void RsPeerStunItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,stunList,"stunList") ; +} + +template<> uint32_t RsTypeSerializer::serial_size(const PeerBandwidthLimits& s) +{ + return 4+4 ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset,const PeerBandwidthLimits& s) +{ + bool ok = true ; + ok = ok && setRawUInt32(data,size,&offset,s.max_up_rate_kbs); + ok = ok && setRawUInt32(data,size,&offset,s.max_dl_rate_kbs); + return ok; +} + +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size,uint32_t& offset,PeerBandwidthLimits& s) +{ + bool ok = true ; + ok = ok && getRawUInt32(data,size,&offset,&s.max_up_rate_kbs); + ok = ok && getRawUInt32(data,size,&offset,&s.max_dl_rate_kbs); + return ok; +} + +template<> void RsTypeSerializer::print_data(const std::string& n, const PeerBandwidthLimits& s) +{ + std::cerr << " [Peer BW limit] " << s.max_up_rate_kbs << " / " << s.max_dl_rate_kbs << std::endl; +} + +RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g) + :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP) +{ + id = g.id ; + name = g.name ; + flag = g.flag ; + pgpList.ids = g.peerIds; +} + + +#ifdef TO_REMOVE bool RsPeerConfigSerialiser::serialiseStun(RsPeerStunItem *item, void *data, uint32_t *size) { uint32_t tlvsize = RsPeerConfigSerialiser::sizeStun(item); @@ -1382,18 +1550,6 @@ RsPeerStunItem *RsPeerConfigSerialiser::deserialiseStun(void *data, uint32_t *si } /*************************************************************************/ -RsNodeGroupItem::RsNodeGroupItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP) -{ -} - -RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g) - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP) -{ - id = g.id ; - name = g.name ; - flag = g.flag ; - pgpList.ids = g.peerIds; -} void RsNodeGroupItem::clear() { @@ -1531,6 +1687,20 @@ uint32_t RsPeerConfigSerialiser::sizeGroup(RsNodeGroupItem *i) return s; } +#endif + +void RsNodeGroupItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + uint32_t v=0 ; + + RsTypeSerializer::serial_process(j,ctx,v,"dummy field 0") ; + RsTypeSerializer::serial_process (j,ctx,id,"id") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,name,"name") ; + RsTypeSerializer::serial_process(j,ctx,flag,"flag") ; + RsTypeSerializer::serial_process(j,ctx,pgpList,"pgpList") ; +} + +#ifdef TO_REMOVE bool RsPeerConfigSerialiser::serialiseGroup(RsNodeGroupItem *item, void *data, uint32_t *size) { uint32_t tlvsize = RsPeerConfigSerialiser::sizeGroup(item); @@ -1650,7 +1820,14 @@ uint32_t RsPeerConfigSerialiser::sizePermissions(RsPeerServicePermissionItem *i) return s; } +#endif +void RsPeerServicePermissionItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,pgp_ids,"pgp_ids") ; +} + +#ifdef TO_REMOVE bool RsPeerConfigSerialiser::serialisePermissions(RsPeerServicePermissionItem *item, void *data, uint32_t *size) { uint32_t tlvsize = RsPeerConfigSerialiser::sizePermissions(item); @@ -1932,6 +2109,7 @@ RsItem *RsCacheConfigSerialiser::deserialise(void *data, uint32_t *size) } +#endif diff --git a/libretroshare/src/serialiser/rsconfigitems.h b/libretroshare/src/serialiser/rsconfigitems.h index 3d3d50a97..84b5a176f 100644 --- a/libretroshare/src/serialiser/rsconfigitems.h +++ b/libretroshare/src/serialiser/rsconfigitems.h @@ -37,6 +37,8 @@ #include "serialiser/rstlvkeyvalue.h" #include "serialiser/rstlvaddrs.h" +#include "serialization/rsserializer.h" + class RsGroupInfo; const uint8_t RS_PKT_TYPE_GENERAL_CONFIG = 0x01; @@ -68,21 +70,22 @@ const uint8_t RS_PKT_SUBTYPE_FILE_ITEM = 0x03; class RsPeerNetItem: public RsItem { - public: - RsPeerNetItem() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_PEER_CONFIG, - RS_PKT_SUBTYPE_PEER_NET) - { return; } -virtual ~RsPeerNetItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); +public: + RsPeerNetItem() + :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, + RS_PKT_TYPE_PEER_CONFIG, + RS_PKT_SUBTYPE_PEER_NET) {} + + virtual ~RsPeerNetItem(){} + virtual void clear(); + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); /* networking information */ RsPeerId peerId; /* Mandatory */ - RsPgpId pgpId; /* Mandatory */ - std::string location; /* Mandatory */ - uint32_t netMode; /* Mandatory */ + RsPgpId pgpId; /* Mandatory */ + std::string location; /* Mandatory */ + uint32_t netMode; /* Mandatory */ uint16_t vs_disc; /* Mandatory */ uint16_t vs_dht; /* Mandatory */ uint32_t lastContact; /* Mandatory */ @@ -92,14 +95,14 @@ std::ostream &print(std::ostream &out, uint16_t indent = 0); RsTlvIpAddress localAddrV6; /* Mandatory */ RsTlvIpAddress extAddrV6; /* Mandatory */ - std::string dyndns; + std::string dyndns; RsTlvIpAddrSet localAddrList; RsTlvIpAddrSet extAddrList; // for proxy connection. std::string domain_addr; - uint16_t domain_port; + uint16_t domain_port; }; // This item should be merged with the next item, but that is not backward compatible. @@ -114,7 +117,8 @@ class RsPeerServicePermissionItem : public RsItem pgp_ids.clear() ; service_flags.clear() ; } - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob j,SerializeContext& ctx); + /* Mandatory */ std::vector pgp_ids ; @@ -130,12 +134,13 @@ class RsPeerBandwidthLimitsItem : public RsItem { peers.clear() ; } - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(SerializeJob j,SerializeContext& ctx); /* Mandatory */ std::map peers ; }; +#ifdef TO_REMOVE class RsPeerGroupItem_deprecated : public RsItem { public: @@ -157,18 +162,20 @@ public: RsTlvPgpIdSet pgpList; }; +#endif class RsNodeGroupItem: public RsItem { public: - RsNodeGroupItem(); + RsNodeGroupItem(): RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP){} virtual ~RsNodeGroupItem() {} - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear() { pgpList.TlvClear();} explicit RsNodeGroupItem(const RsGroupInfo&) ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); + // /* set data from RsGroupInfo to RsPeerGroupItem */ // void set(RsGroupInfo &groupInfo); // /* get data from RsGroupInfo to RsPeerGroupItem */ @@ -184,63 +191,32 @@ public: class RsPeerStunItem: public RsItem { - public: - RsPeerStunItem() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_PEER_CONFIG, - RS_PKT_SUBTYPE_PEER_STUN) - { return; } -virtual ~RsPeerStunItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); +public: + RsPeerStunItem() + :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, + RS_PKT_TYPE_PEER_CONFIG, + RS_PKT_SUBTYPE_PEER_STUN) {} + virtual ~RsPeerStunItem(){} + virtual void clear() { stunList.TlvClear() ;} + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsTlvPeerIdSet stunList; /* Mandatory */ }; -class RsPeerConfigSerialiser: public RsSerialType +class RsPeerConfigSerialiser: public RsConfigSerializer { public: - RsPeerConfigSerialiser() - :RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_PEER_CONFIG) - { return; } + RsPeerConfigSerialiser() :RsConfigSerializer(RS_PKT_CLASS_CONFIG,RS_PKT_TYPE_PEER_CONFIG) {} -virtual ~RsPeerConfigSerialiser(); - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); + virtual ~RsPeerConfigSerialiser(){} - private: - - -virtual uint32_t sizeNet(RsPeerNetItem *); -virtual bool serialiseNet (RsPeerNetItem *item, void *data, uint32_t *size); -virtual RsPeerNetItem *deserialiseNet(void *data, uint32_t *size); - -virtual uint32_t sizeStun(RsPeerStunItem *); -virtual bool serialiseStun (RsPeerStunItem *item, void *data, uint32_t *size); -virtual RsPeerStunItem * deserialiseStun(void *data, uint32_t *size); - -virtual uint32_t sizeGroup(RsNodeGroupItem *); -virtual bool serialiseGroup (RsNodeGroupItem *item, void *data, uint32_t *size); -virtual RsNodeGroupItem *deserialiseGroup(void *data, uint32_t *size); -virtual RsPeerGroupItem_deprecated * deserialiseGroup_deprecated(void *data, uint32_t *size); - -virtual uint32_t sizePeerBandwidthLimits(RsPeerBandwidthLimitsItem *); -virtual bool serialisePeerBandwidthLimits (RsPeerBandwidthLimitsItem *item, void *data, uint32_t *size); -virtual RsPeerBandwidthLimitsItem *deserialisePeerBandwidthLimits(void *data, uint32_t *size); - -virtual uint32_t sizePermissions(RsPeerServicePermissionItem *); -virtual bool serialisePermissions (RsPeerServicePermissionItem *item, void *data, uint32_t *size); -virtual RsPeerServicePermissionItem * deserialisePermissions(void *data, uint32_t *size); + virtual RsItem *create_item(uint8_t item_class,uint8_t item_type) const ; }; -/**************************************************************************/ -/**************************************************************************/ - /**************************************************************************/ +#ifdef TO_REMOVE class RsCacheConfig: public RsItem { public: @@ -281,6 +257,7 @@ virtual bool serialise (RsItem *item, void *data, uint32_t *size); virtual RsItem * deserialise(void *data, uint32_t *size); }; +#endif /**************************************************************************/ @@ -299,14 +276,15 @@ class RsFileTransfer: public RsItem flags = 0; chunk_strategy = 0; } - virtual ~RsFileTransfer(); + virtual ~RsFileTransfer(){} virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsTlvFileItem file; RsTlvPeerIdSet allPeerIds; - RsPeerId cPeerId; + RsPeerId cPeerId; uint16_t state; uint16_t in; @@ -328,6 +306,7 @@ class RsFileTransfer: public RsItem const uint32_t RS_FILE_CONFIG_CLEANUP_DELETE = 0x0001; +#ifdef TO_REMOVE /* Used by ft / extralist / configdirs / anyone who wants a basic file */ class RsFileConfigItem_deprecated: public RsItem { @@ -345,18 +324,16 @@ public: uint32_t flags; std::list parent_groups ; }; +#endif class RsFileConfigItem: public RsItem { public: - RsFileConfigItem() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_FILE_CONFIG, - RS_PKT_SUBTYPE_FILE_ITEM) - {} + RsFileConfigItem() :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_FILE_CONFIG, RS_PKT_SUBTYPE_FILE_ITEM) {} virtual ~RsFileConfigItem() {} - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear() { parent_groups.TlvClear(); } + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsTlvFileItem file; uint32_t flags; @@ -364,31 +341,13 @@ public: }; /**************************************************************************/ -class RsFileConfigSerialiser: public RsSerialType +class RsFileConfigSerialiser: public RsConfigSerializer { public: - RsFileConfigSerialiser() - :RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_FILE_CONFIG) - { return; } -virtual ~RsFileConfigSerialiser() { return; } + RsFileConfigSerialiser() :RsConfigSerializer(RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_FILE_CONFIG) { } + virtual ~RsFileConfigSerialiser() {} -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeTransfer(RsFileTransfer *); -virtual bool serialiseTransfer(RsFileTransfer *item, void *data, uint32_t *size); -virtual RsFileTransfer * deserialiseTransfer(void *data, uint32_t *size); - -virtual RsFileConfigItem_deprecated * deserialiseFileItem_deprecated(void *data, uint32_t *size); - -virtual uint32_t sizeFileItem(RsFileConfigItem *); -virtual bool serialiseFileItem(RsFileConfigItem *item, void *data, uint32_t *size); -virtual RsFileConfigItem *deserialiseFileItem(void *data, uint32_t *size); - + virtual RsItem *create_item(uint8_t item_class,uint8_t item_type) const ; }; /**************************************************************************/ @@ -397,39 +356,23 @@ virtual RsFileConfigItem *deserialiseFileItem(void *data, uint32_t *size); class RsConfigKeyValueSet: public RsItem { - public: - RsConfigKeyValueSet() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_GENERAL_CONFIG, - RS_PKT_SUBTYPE_KEY_VALUE) - { return; } -virtual ~RsConfigKeyValueSet(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); +public: + RsConfigKeyValueSet() :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_GENERAL_CONFIG, RS_PKT_SUBTYPE_KEY_VALUE) {} + virtual ~RsConfigKeyValueSet(){} + virtual void clear() { tlvkvs.TlvClear();} + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsTlvKeyValueSet tlvkvs; }; -class RsGeneralConfigSerialiser: public RsSerialType +class RsGeneralConfigSerialiser: public RsConfigSerializer { public: - RsGeneralConfigSerialiser() - :RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_GENERAL_CONFIG) - { return; } - -virtual ~RsGeneralConfigSerialiser(); - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: -uint32_t sizeKeyValueSet(RsConfigKeyValueSet *item); -bool serialiseKeyValueSet(RsConfigKeyValueSet *item, void *data, uint32_t *pktsize); -RsConfigKeyValueSet *deserialiseKeyValueSet(void *data, uint32_t *pktsize); + RsGeneralConfigSerialiser() :RsConfigSerializer(RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_GENERAL_CONFIG) {} + virtual RsItem *create_item(uint8_t item_class,uint8_t item_type) const ; }; #endif /* RS_CONFIG_ITEMS_SERIALISER_H */ From 43b3b877822960dde58f33f8e52013be694d77f4 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 22:36:03 +0200 Subject: [PATCH 161/230] fixed a few bugs in config items --- libretroshare/src/serialiser/rsconfigitems.cc | 43 ++++++++++++++----- libretroshare/src/serialiser/rsconfigitems.h | 8 ++-- .../src/serialization/rsserializer.cc | 8 ++-- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/libretroshare/src/serialiser/rsconfigitems.cc b/libretroshare/src/serialiser/rsconfigitems.cc index 0c603ed3a..61b888f2c 100644 --- a/libretroshare/src/serialiser/rsconfigitems.cc +++ b/libretroshare/src/serialiser/rsconfigitems.cc @@ -40,12 +40,12 @@ /*************************************************************************/ -RsItem *RsFileConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +RsItem *RsFileConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { - if(item_class != RS_PKT_CLASS_CONFIG) + if(item_type != RS_PKT_TYPE_FILE_CONFIG) return NULL ; - switch(item_type) + switch(item_subtype) { case RS_PKT_SUBTYPE_FILE_TRANSFER: return new RsFileTransfer() ; case RS_PKT_SUBTYPE_FILE_ITEM: return new RsFileConfigItem() ; @@ -590,12 +590,12 @@ RsGeneralConfigSerialiser::~RsGeneralConfigSerialiser() #endif -RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { - if(item_class != RS_PKT_TYPE_GENERAL_CONFIG) + if(item_type != RS_PKT_TYPE_GENERAL_CONFIG) return NULL ; - switch(item_type) + switch(item_subtype) { case RS_PKT_SUBTYPE_KEY_VALUE: return new RsConfigKeyValueSet(); default: @@ -818,12 +818,12 @@ RsPeerConfigSerialiser::~RsPeerConfigSerialiser() } #endif -RsItem *RsPeerConfigSerialiser::create_item(uint8_t item_class,uint8_t item_type) const +RsItem *RsPeerConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { - if(item_class != RS_PKT_TYPE_PEER_CONFIG) + if(item_type != RS_PKT_TYPE_PEER_CONFIG) return NULL ; - switch(item_type) + switch(item_subtype) { case RS_PKT_SUBTYPE_PEER_NET: return new RsPeerNetItem(); case RS_PKT_SUBTYPE_PEER_STUN: return new RsPeerStunItem(); @@ -1824,7 +1824,30 @@ uint32_t RsPeerConfigSerialiser::sizePermissions(RsPeerServicePermissionItem *i) void RsPeerServicePermissionItem::serial_process(SerializeJob j,SerializeContext& ctx) { - RsTypeSerializer::serial_process(j,ctx,pgp_ids,"pgp_ids") ; + // We need to hack this because of backward compatibility. The correct way to do it would be: + // + // RsTypeSerializer::serial_process(j,ctx,pgp_ids,"pgp_ids") ; + // RsTypeSerializer::serial_process(j,ctx,service_flags,"service_flags") ; + + if(j == RsItem::DESERIALIZE) + { + uint32_t v=0 ; + RsTypeSerializer::serial_process(j,ctx,v,"pgp_ids.size()") ; + + pgp_ids.resize(v) ; + service_flags.resize(v) ; + } + else + { + uint32_t s = pgp_ids.size(); + RsTypeSerializer::serial_process(j,ctx,s,"pgp_ids.size()") ; + } + + for(uint32_t i=0;i + #include "util/rsprint.h" #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" @@ -14,7 +16,7 @@ RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) if(!item) { - std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << getRsItemSubType(rstype) << std::dec << std::endl; std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; return NULL ; } @@ -40,11 +42,11 @@ RsItem *RsConfigSerializer::deserialise(void *data, uint32_t *size) { uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; - RsItem *item = create_item(getRsItemClass(rstype),getRsItemSubType(rstype)) ; + RsItem *item = create_item(getRsItemType(rstype),getRsItemSubType(rstype)) ; if(!item) { - std::cerr << "(EE) cannot deserialise: unknown item type " << std::hex << rstype << std::dec << std::endl; + std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << getRsItemSubType(rstype) << std::dec << std::endl; std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; return NULL ; } From f7338d4a3de73f6f68339a0b0c0fc345dc38d1f4 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 22:39:05 +0200 Subject: [PATCH 162/230] removed old code --- libretroshare/src/serialiser/rsconfigitems.cc | 1871 ----------------- 1 file changed, 1871 deletions(-) diff --git a/libretroshare/src/serialiser/rsconfigitems.cc b/libretroshare/src/serialiser/rsconfigitems.cc index 61b888f2c..856294ca3 100644 --- a/libretroshare/src/serialiser/rsconfigitems.cc +++ b/libretroshare/src/serialiser/rsconfigitems.cc @@ -69,185 +69,6 @@ void RsFileTransfer::clear() } - -#ifdef TO_REMOVE -uint32_t RsFileConfigSerialiser::size(RsItem *i) -{ - RsFileTransfer *rft; - RsFileConfigItem *rfj; - - if (NULL != (rft = dynamic_cast(i))) - { - return sizeTransfer(rft); - } - if (NULL != (rfj = dynamic_cast(i))) - { - return sizeFileItem(rfj); - } - return 0; -} - -/* serialise the data to the buffer */ -bool RsFileConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsFileTransfer *rft; - RsFileConfigItem *rfj; - - if (NULL != (rft = dynamic_cast(i))) - { - return serialiseTransfer(rft, data, pktsize); - } - if (NULL != (rfj = dynamic_cast(i))) - { - return serialiseFileItem(rfj, data, pktsize); - } - return false; -} - -RsItem *RsFileConfigSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_FILE_TRANSFER: - return deserialiseTransfer(data, pktsize); - break; - case RS_PKT_SUBTYPE_FILE_ITEM_deprecated: - return deserialiseFileItem_deprecated(data, pktsize); - break; - case RS_PKT_SUBTYPE_FILE_ITEM: - return deserialiseFileItem(data, pktsize); - break; - default: - return NULL; - break; - } - return NULL; -} - -/*************************************************************************/ - -RsFileTransfer::~RsFileTransfer() -{ - return; -} - -std::ostream &RsFileTransfer::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransfer", indent); - uint16_t int_Indent = indent + 2; - file.print(out, int_Indent); - allPeerIds.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "cPeerId: " << cPeerId << std::endl; - - printIndent(out, int_Indent); - out << "State: " << state << std::endl; - printIndent(out, int_Indent); - out << "In/Out: " << in << std::endl; - - printIndent(out, int_Indent); - out << "Transferred: " << transferred << std::endl; - - printIndent(out, int_Indent); - out << "crate: " << crate << std::endl; - printIndent(out, int_Indent); - out << "trate: " << trate << std::endl; - printIndent(out, int_Indent); - out << "lrate: " << lrate << std::endl; - printIndent(out, int_Indent); - out << "ltransfer: " << ltransfer << std::endl; - - printRsItemEnd(out, "RsFileTransfer", indent); - return out; - -} - -/*************************************************************************/ -/*************************************************************************/ - -void RsFileConfigItem_deprecated::clear() -{ - file.TlvClear(); - flags = 0; - parent_groups.clear() ; -} - -void RsFileConfigItem::clear() -{ - file.TlvClear(); - flags = 0; - parent_groups.TlvClear() ; -} -std::ostream &RsFileConfigItem_deprecated::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileConfigItem", indent); - uint16_t int_Indent = indent + 2; - file.print(out, int_Indent); - - printIndent(out, int_Indent); out << "flags: " << flags << std::endl; - printIndent(out, int_Indent); out << "groups:" ; - - for(std::list::const_iterator it(parent_groups.begin());it!=parent_groups.end();++it) - out << (*it) << " " ; - out << std::endl; - - printRsItemEnd(out, "RsFileConfigItem", indent); - return out; -} - -std::ostream &RsFileConfigItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileConfigItem", indent); - uint16_t int_Indent = indent + 2; - file.print(out, int_Indent); - - printIndent(out, int_Indent); out << "flags: " << flags << std::endl; - printIndent(out, int_Indent); out << "groups:" ; - - for(std::set::const_iterator it(parent_groups.ids.begin());it!=parent_groups.ids.end();++it) - out << (*it) << " " ; - out << std::endl; - - printRsItemEnd(out, "RsFileConfigItem", indent); - return out; -} -/*************************************************************************/ -/*************************************************************************/ - - -uint32_t RsFileConfigSerialiser::sizeTransfer(RsFileTransfer *item) -{ - uint32_t s = 8; /* header */ - s += item->file.TlvSize(); - s += item->allPeerIds.TlvSize(); - s += RsPeerId::SIZE_IN_BYTES; - s += 2; /* state */ - s += 2; /* in/out */ - s += 8; /* transferred */ - s += 4; /* crate */ - s += 4; /* trate */ - s += 4; /* lrate */ - s += 4; /* ltransfer */ - s += 4; // chunk_strategy - s += 4; // flags - s += 4; // chunk map size - s += 4*item->compressed_chunk_map._map.size(); // compressed_chunk_map - - return s; -} -#endif - void RsFileTransfer::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,file,"file") ; @@ -270,151 +91,6 @@ void RsFileTransfer::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process (j,ctx,compressed_chunk_map,"compressed_chunk_map") ; } -#ifdef TO_REMOVE -bool RsFileConfigSerialiser::serialiseTransfer(RsFileTransfer *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeTransfer(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Header: " << ok << std::endl; - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->file.SetTlv(data, tlvsize, &offset); - ok &= item->allPeerIds.SetTlv(data, tlvsize, &offset); - - ok &= item->cPeerId.serialise(data, tlvsize, offset) ; - - ok &= setRawUInt16(data, tlvsize, &offset, item->state); - ok &= setRawUInt16(data, tlvsize, &offset, item->in); - - ok &= setRawUInt64(data, tlvsize, &offset, item->transferred); - - ok &= setRawUInt32(data, tlvsize, &offset, item->crate); - ok &= setRawUInt32(data, tlvsize, &offset, item->trate); - ok &= setRawUInt32(data, tlvsize, &offset, item->lrate); - ok &= setRawUInt32(data, tlvsize, &offset, item->ltransfer); - - ok &= setRawUInt32(data, tlvsize, &offset, item->flags); - ok &= setRawUInt32(data, tlvsize, &offset, item->chunk_strategy); - ok &= setRawUInt32(data, tlvsize, &offset, item->compressed_chunk_map._map.size()); - - for(uint32_t i=0;icompressed_chunk_map._map.size();++i) - ok &= setRawUInt32(data, tlvsize, &offset, item->compressed_chunk_map._map[i]); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsFileTransfer *RsFileConfigSerialiser::deserialiseTransfer(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_FILE_TRANSFER != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsFileTransfer *item = new RsFileTransfer(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->file.GetTlv(data, rssize, &offset); - ok &= item->allPeerIds.GetTlv(data, rssize, &offset); - - ok &= item->cPeerId.deserialise(data, rssize, offset) ; - - /* data */ - ok &= getRawUInt16(data, rssize, &offset, &(item->state)); - ok &= getRawUInt16(data, rssize, &offset, &(item->in)); - ok &= getRawUInt64(data, rssize, &offset, &(item->transferred)); - ok &= getRawUInt32(data, rssize, &offset, &(item->crate)); - ok &= getRawUInt32(data, rssize, &offset, &(item->trate)); - ok &= getRawUInt32(data, rssize, &offset, &(item->lrate)); - ok &= getRawUInt32(data, rssize, &offset, &(item->ltransfer)); - - ok &= getRawUInt32(data, rssize, &offset, &(item->flags)); - ok &= getRawUInt32(data, rssize, &offset, &(item->chunk_strategy)); - uint32_t map_size = 0 ; - ok &= getRawUInt32(data, rssize, &offset, &map_size); - - item->compressed_chunk_map._map.resize(map_size) ; - for(uint32_t i=0;icompressed_chunk_map._map[i])); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ -/*************************************************************************/ - - -uint32_t RsFileConfigSerialiser::sizeFileItem(RsFileConfigItem *item) -{ - uint32_t s = 8; /* header */ - s += item->file.TlvSize(); - s += 4; // flags - - s += item->parent_groups.TlvSize() ; - - return s; -} -#endif - void RsFileConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,file,"file") ; @@ -422,174 +98,6 @@ void RsFileConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,parent_groups,"parent_groups") ; } -#ifdef TO_REMOVE -bool RsFileConfigSerialiser::serialiseFileItem(RsFileConfigItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeFileItem(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseFileItem() Header: " << ok << std::endl; - std::cerr << "RsFileConfigSerialiser::serialiseFileItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->file.SetTlv(data, tlvsize, &offset); - ok &= setRawUInt32(data, tlvsize, &offset, item->flags); - ok &= item->parent_groups.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsFileConfigSerialiser::serialiseFileItem() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsFileConfigItem_deprecated *RsFileConfigSerialiser::deserialiseFileItem_deprecated(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_FILE_ITEM_deprecated != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsFileConfigItem_deprecated *item = new RsFileConfigItem_deprecated(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->file.GetTlv(data, rssize, &offset); - ok &= getRawUInt32(data, rssize, &offset, &(item->flags)); - - while(offset < rssize) - { - std::string tmp ; - if(GetTlvString(data, rssize, &offset, TLV_TYPE_STR_GROUPID, tmp)) - item->parent_groups.push_back(tmp) ; - else - break ; - } - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} -RsFileConfigItem *RsFileConfigSerialiser::deserialiseFileItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_FILE_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsFileConfigItem *item = new RsFileConfigItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->file.GetTlv(data, rssize, &offset); - ok &= getRawUInt32(data, rssize, &offset, &(item->flags)); - ok &= item->parent_groups.GetTlv(data, rssize, &offset) ; - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - - - - -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ - -RsGeneralConfigSerialiser::~RsGeneralConfigSerialiser() -{ - return; -} - -#endif - RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { if(item_type != RS_PKT_TYPE_GENERAL_CONFIG) @@ -603,221 +111,11 @@ RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_type,uint8_t item_su } } -#ifdef TO_REMOVE -uint32_t RsGeneralConfigSerialiser::size(RsItem *i) -{ - RsConfigKeyValueSet *kvs; - - if (NULL != (kvs = dynamic_cast(i))) - { - return sizeKeyValueSet(kvs); - } - else if (NULL != (kvs = dynamic_cast(i))) - { - return sizeKeyValueSet(kvs); - } - - return 0; -} - -/* serialise the data to the buffer */ -bool RsGeneralConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsConfigKeyValueSet *kvs; - - /* do reply first - as it is derived from Item */ - if (NULL != (kvs = dynamic_cast(i))) - { - return serialiseKeyValueSet(kvs, data, pktsize); - } - else if (NULL != (kvs = dynamic_cast(i))) - { - return serialiseKeyValueSet(kvs, data, pktsize); - } - - return false; -} - -RsItem *RsGeneralConfigSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_GENERAL_CONFIG != getRsItemType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::deserialise() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_KEY_VALUE: - return deserialiseKeyValueSet(data, pktsize); - break; - default: - return NULL; - break; - } - return NULL; -} - -/*************************************************************************/ - -RsConfigKeyValueSet::~RsConfigKeyValueSet() -{ - return; -} - -void RsConfigKeyValueSet::clear() -{ - tlvkvs.pairs.clear(); -} - -std::ostream &RsConfigKeyValueSet::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsConfigKeyValueSet", indent); - uint16_t int_Indent = indent + 2; - - tlvkvs.print(out, int_Indent); - - printRsItemEnd(out, "RsConfigKeyValueSet", indent); - return out; -} - - -uint32_t RsGeneralConfigSerialiser::sizeKeyValueSet(RsConfigKeyValueSet *item) -{ - uint32_t s = 8; /* header */ - s += item->tlvkvs.TlvSize(); - - return s; -} -#endif - void RsConfigKeyValueSet::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tlvkvs,"tlvkvs") ; } -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsGeneralConfigSerialiser::serialiseKeyValueSet(RsConfigKeyValueSet *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeKeyValueSet(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGeneralConfigSerialiser::serialiseKeyValueSet() Header: " << ok << std::endl; - std::cerr << "RsGeneralConfigSerialiser::serialiseKeyValueSet() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->tlvkvs.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::serialiseKeyValueSet() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsConfigKeyValueSet *RsGeneralConfigSerialiser::deserialiseKeyValueSet(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_GENERAL_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_KEY_VALUE != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::deserialiseKeyValueSet() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::deserialiseKeyValueSet() Not Enough Space" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsConfigKeyValueSet *item = new RsConfigKeyValueSet(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->tlvkvs.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::deserialiseKeyValueSet() offset != rssize" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsGeneralConfigSerialiser::deserialiseKeyValueSet() ok = false" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ - -RsPeerConfigSerialiser::~RsPeerConfigSerialiser() -{ - return; -} -#endif - RsItem *RsPeerConfigSerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { if(item_type != RS_PKT_TYPE_PEER_CONFIG) @@ -858,204 +156,6 @@ void RsPeerNetItem::clear() domain_addr.clear(); domain_port = 0; } -#ifdef TO_REMOVE -uint32_t RsPeerConfigSerialiser::size(RsItem *i) -{ - RsPeerStunItem *psi; - RsPeerNetItem *pni; - RsNodeGroupItem *pgi; - RsPeerServicePermissionItem *pri; - RsPeerBandwidthLimitsItem *pblitem; - - if (NULL != (pni = dynamic_cast(i))) - { - return sizeNet(pni); - } - else if (NULL != (psi = dynamic_cast(i))) - { - return sizeStun(psi); - } - else if (NULL != (pgi = dynamic_cast(i))) - { - return sizeGroup(pgi); - } - else if (NULL != (pri = dynamic_cast(i))) - { - return sizePermissions(pri); - } - else if (NULL != (pblitem = dynamic_cast(i))) - { - return sizePeerBandwidthLimits(pblitem); - } - - return 0; -} - -/* serialise the data to the buffer */ -bool RsPeerConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsPeerNetItem *pni; - RsPeerStunItem *psi; - RsNodeGroupItem *pgi; - RsPeerServicePermissionItem *pri; - RsPeerBandwidthLimitsItem *pblitem; - - if (NULL != (pni = dynamic_cast(i))) - { - return serialiseNet(pni, data, pktsize); - } - else if (NULL != (psi = dynamic_cast(i))) - { - return serialiseStun(psi, data, pktsize); - } - else if (NULL != (pgi = dynamic_cast(i))) - { - return serialiseGroup(pgi, data, pktsize); - } - else if (NULL != (pri = dynamic_cast(i))) - { - return serialisePermissions(pri, data, pktsize); - } - else if (NULL != (pblitem = dynamic_cast(i))) - { - return serialisePeerBandwidthLimits(pblitem, data, pktsize); - } - - return false; -} - -RsItem *RsPeerConfigSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialise() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_PEER_NET: - return deserialiseNet(data, pktsize); - case RS_PKT_SUBTYPE_PEER_STUN: - return deserialiseStun(data, pktsize); - case RS_PKT_SUBTYPE_PEER_GROUP_deprecated: - return deserialiseGroup_deprecated(data, pktsize); - case RS_PKT_SUBTYPE_NODE_GROUP: - return deserialiseGroup(data, pktsize); - case RS_PKT_SUBTYPE_PEER_PERMISSIONS: - return deserialisePermissions(data, pktsize); - case RS_PKT_SUBTYPE_PEER_BANDLIMITS: - return deserialisePeerBandwidthLimits(data, pktsize); - default: - return NULL; - } - return NULL; -} - - - -/****************************************************************************/ - -RsPeerNetItem::~RsPeerNetItem() -{ - return; -} - - - -std::ostream &RsPeerNetItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPeerNetItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "PeerId: " << peerId.toStdString() << std::endl; - - printIndent(out, int_Indent); - out << "PgpId: " << pgpId.toStdString() << std::endl; - - printIndent(out, int_Indent); - out << "location: " << location << std::endl; - - printIndent(out, int_Indent); - out << "netMode: " << netMode << std::endl; - - printIndent(out, int_Indent); - out << "vs_disc: " << vs_disc << std::endl; - - printIndent(out, int_Indent); - out << "vs_dht: " << vs_dht << std::endl; - - printIndent(out, int_Indent); - out << "lastContact: " << lastContact << std::endl; - - printIndent(out, int_Indent); - out << "localAddrV4: " << std::endl; - localAddrV4.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "extAddrV4: " << std::endl; - extAddrV4.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "localAddrV6: " << std::endl; - localAddrV6.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "extAddrV6: " << std::endl; - extAddrV6.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "DynDNS: " << dyndns << std::endl; - - localAddrList.print(out, int_Indent); - extAddrList.print(out, int_Indent); - - printIndent(out, int_Indent); - out << "DomainAddr: " << domain_addr; - out << ":" << domain_port << std::endl; - printRsItemEnd(out, "RsPeerNetItem", indent); - return out; -} - -/*************************************************************************/ - -uint32_t RsPeerConfigSerialiser::sizeNet(RsPeerNetItem *i) -{ - uint32_t s = 8; /* header */ - s += RsPeerId::SIZE_IN_BYTES; - s += RsPgpId::SIZE_IN_BYTES; - s += GetTlvStringSize(i->location); - s += 4; /* netMode */ - s += 2; /* vs_disc */ - s += 2; /* vs_dht */ - s += 4; /* lastContact */ - - s += i->localAddrV4.TlvSize(); /* localaddr */ - s += i->extAddrV4.TlvSize(); /* remoteaddr */ - s += i->localAddrV6.TlvSize(); /* localaddr */ - s += i->extAddrV6.TlvSize(); /* remoteaddr */ - - s += GetTlvStringSize(i->dyndns); - - //add the size of the ip list - s += i->localAddrList.TlvSize(); - s += i->extAddrList.TlvSize(); - - s += GetTlvStringSize(i->domain_addr); - s += 2; /* domain_port */ - - return s; -} -#endif - void RsPeerNetItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,peerId,"peerId") ; @@ -1081,348 +181,11 @@ void RsPeerNetItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,domain_port,"domain_port") ; } -#ifdef TO_REMOVE -bool RsPeerConfigSerialiser::serialiseNet(RsPeerNetItem *item, void *data, uint32_t *size) -{ - uint32_t tlvsize = RsPeerConfigSerialiser::sizeNet(item); - uint32_t offset = 0; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() tlvsize: " << tlvsize << std::endl; -#endif - - if(*size < tlvsize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() ERROR not enough space" << std::endl; -#endif - return false; /* not enough space */ - } - - *size = tlvsize; - - bool ok = true; - - // serialise header - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Header: " << ok << std::endl; - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Header test: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->peerId.serialise(data, tlvsize, offset); - ok &= item->pgpId.serialise(data, tlvsize, offset); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->location); /* Mandatory */ - ok &= setRawUInt32(data, tlvsize, &offset, item->netMode); /* Mandatory */ - ok &= setRawUInt16(data, tlvsize, &offset, item->vs_disc); /* Mandatory */ - ok &= setRawUInt16(data, tlvsize, &offset, item->vs_dht); /* Mandatory */ - ok &= setRawUInt32(data, tlvsize, &offset, item->lastContact); /* Mandatory */ - ok &= item->localAddrV4.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrV4.SetTlv(data, tlvsize, &offset); - ok &= item->localAddrV6.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrV6.SetTlv(data, tlvsize, &offset); - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DYNDNS, item->dyndns); - - ok &= item->localAddrList.SetTlv(data, tlvsize, &offset); - ok &= item->extAddrList.SetTlv(data, tlvsize, &offset); - - // New for V0.6. - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DOMADDR, item->domain_addr); - ok &= setRawUInt16(data, tlvsize, &offset, item->domain_port); /* Mandatory */ - - if(offset != tlvsize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Size Error! " << std::endl; -#endif - ok = false; - } - - return ok; - -} - -RsPeerNetItem *RsPeerConfigSerialiser::deserialiseNet(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() rssize: " << rssize << std::endl; -#endif - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_PEER_NET != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR not enough data" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsPeerNetItem *item = new RsPeerNetItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->peerId.deserialise(data, rssize, offset); - ok &= item->pgpId.deserialise(data, rssize, offset); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->location); /* Mandatory */ - ok &= getRawUInt32(data, rssize, &offset, &(item->netMode)); /* Mandatory */ - ok &= getRawUInt16(data, rssize, &offset, &(item->vs_disc)); /* Mandatory */ - ok &= getRawUInt16(data, rssize, &offset, &(item->vs_dht)); /* Mandatory */ - ok &= getRawUInt32(data, rssize, &offset, &(item->lastContact)); /* Mandatory */ - - ok &= item->localAddrV4.GetTlv(data, rssize, &offset); - ok &= item->extAddrV4.GetTlv(data, rssize, &offset); - ok &= item->localAddrV6.GetTlv(data, rssize, &offset); - ok &= item->extAddrV6.GetTlv(data, rssize, &offset); - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DYNDNS, item->dyndns); - ok &= item->localAddrList.GetTlv(data, rssize, &offset); - ok &= item->extAddrList.GetTlv(data, rssize, &offset); - - // New for V0.6. - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DOMADDR, item->domain_addr); - ok &= getRawUInt16(data, rssize, &offset, &(item->domain_port)); /* Mandatory */ - - if (offset != rssize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - return item; -} - -/****************************************************************************/ - -uint32_t RsPeerConfigSerialiser::sizePeerBandwidthLimits(RsPeerBandwidthLimitsItem *i) -{ - uint32_t s = 8; /* header */ - s += 4; // number of elements - s += i->peers.size() * (4 + 4 + RsPgpId::SIZE_IN_BYTES) ; - - return s; -} -#endif - void RsPeerBandwidthLimitsItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,peers,"peers") ; } -#ifdef TO_REMOVE -bool RsPeerConfigSerialiser::serialisePeerBandwidthLimits(RsPeerBandwidthLimitsItem *item, void *data, uint32_t *size) -{ - uint32_t tlvsize = RsPeerConfigSerialiser::sizePeerBandwidthLimits(item); - uint32_t offset = 0; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() tlvsize: " << tlvsize << std::endl; -#endif - - if(*size < tlvsize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() ERROR not enough space" << std::endl; -#endif - return false; /* not enough space */ - } - - *size = tlvsize; - - bool ok = true; - - // serialise header - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Header: " << ok << std::endl; - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Header test: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - ok &= setRawUInt32(data, tlvsize, &offset, item->peers.size()); /* Mandatory */ - - for(std::map::const_iterator it(item->peers.begin());it!=item->peers.end();++it) - { - ok &= it->first.serialise(data,tlvsize,offset); - - ok &= setRawUInt32(data, tlvsize, &offset, it->second.max_up_rate_kbs); /* Mandatory */ - ok &= setRawUInt32(data, tlvsize, &offset, it->second.max_dl_rate_kbs); /* Mandatory */ - } - - if(offset != tlvsize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseNet() Size Error! " << std::endl; -#endif - ok = false; - } - - return ok; - -} - -RsPeerBandwidthLimitsItem *RsPeerConfigSerialiser::deserialisePeerBandwidthLimits(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() rssize: " << rssize << std::endl; -#endif - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_PEER_BANDLIMITS != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR not enough data" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsPeerBandwidthLimitsItem *item = new RsPeerBandwidthLimitsItem(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint32_t n ; - ok &= getRawUInt32(data, rssize, &offset, &n) ; - - for(uint32_t i=0;ipeers[pgpid] = p ; - } - - if (offset != rssize) - { -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::deserialiseNet() ERROR size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - return item; -} - -std::ostream &RsPeerBandwidthLimitsItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPeerBandwidthLimitsItem", indent); - uint16_t int_Indent = indent + 2; - - for(std::map::const_iterator it(peers.begin());it!=peers.end();++it) - { - printIndent(out, int_Indent); - out << it->first << " : " << it->second.max_up_rate_kbs << " (up) " << it->second.max_dl_rate_kbs << " (dn)" << std::endl; - } - - printRsItemEnd(out, "RsPeerStunItem", indent); - return out; -} - - - -/****************************************************************************/ - -RsPeerStunItem::~RsPeerStunItem() -{ - return; -} - -void RsPeerStunItem::clear() -{ - stunList.TlvClear(); -} - -std::ostream &RsPeerStunItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPeerStunItem", indent); - uint16_t int_Indent = indent + 2; - - stunList.printHex(out, int_Indent); - - printRsItemEnd(out, "RsPeerStunItem", indent); - return out; -} - -/*************************************************************************/ - -uint32_t RsPeerConfigSerialiser::sizeStun(RsPeerStunItem *i) -{ - uint32_t s = 8; /* header */ - s += i->stunList.TlvSize(); /* stunList */ - - return s; - -} -#endif - void RsPeerStunItem::serial_process(SerializeJob j,SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,stunList,"stunList") ; @@ -1463,232 +226,6 @@ RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g) pgpList.ids = g.peerIds; } - -#ifdef TO_REMOVE -bool RsPeerConfigSerialiser::serialiseStun(RsPeerStunItem *item, void *data, uint32_t *size) -{ - uint32_t tlvsize = RsPeerConfigSerialiser::sizeStun(item); - uint32_t offset = 0; - - if(*size < tlvsize) - return false; /* not enough space */ - - *size = tlvsize; - - bool ok = true; - - // serialise header - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseStun() Header: " << ok << std::endl; - std::cerr << "RsPeerConfigSerialiser::serialiseStun() Header: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->stunList.SetTlv(data, tlvsize, &offset); /* Mandatory */ - - if(offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseStun() Size Error! " << std::endl; -#endif - } - - return ok; - -} - -RsPeerStunItem *RsPeerConfigSerialiser::deserialiseStun(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_PEER_STUN != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsPeerStunItem *item = new RsPeerStunItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= item->stunList.GetTlv(data, rssize, &offset); /* Mandatory */ - - if (offset != rssize) - { - - /* error */ - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -void RsNodeGroupItem::clear() -{ - id.clear(); - name.clear(); - flag = 0; - pgpList.ids.clear(); -} - -std::ostream &RsNodeGroupItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNodeGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "groupId: " << id << std::endl; - - printIndent(out, int_Indent); - out << "groupName: " << name << std::endl; - - printIndent(out, int_Indent); - out << "groupFlag: " << flag << std::endl; - - std::set::iterator it; - for (it = pgpList.ids.begin(); it != pgpList.ids.end(); ++it) { - printIndent(out, int_Indent); - out << "peerId: " << it->toStdString() << std::endl; - } - - printRsItemEnd(out, "RsNodeGroupItem", indent); - return out; -} - -/*************************************************************************/ -/* DEPRECATED CODE. SHOULD BE REMOVED WHEN EVERYONE USES THE NEW CLASS */ -/*************************************************************************/ - -RsPeerGroupItem_deprecated::RsPeerGroupItem_deprecated() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_PEER_GROUP_deprecated) -{ -} - -RsPeerGroupItem_deprecated::~RsPeerGroupItem_deprecated() -{ -} - -void RsPeerGroupItem_deprecated::clear() -{ - id.clear(); - name.clear(); - flag = 0; - pgpList.ids.clear(); -} - -std::ostream &RsPeerGroupItem_deprecated::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPeerGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "groupId: " << id << std::endl; - - printIndent(out, int_Indent); - out << "groupName: " << name << std::endl; - - printIndent(out, int_Indent); - out << "groupFlag: " << flag << std::endl; - - std::set::iterator it; - for (it = pgpList.ids.begin(); it != pgpList.ids.end(); ++it) { - printIndent(out, int_Indent); - out << "peerId: " << it->toStdString() << std::endl; - } - - printRsItemEnd(out, "RsPeerGroupItem", indent); - return out; -} - -RsPeerGroupItem_deprecated *RsPeerConfigSerialiser::deserialiseGroup_deprecated(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_PEER_GROUP_deprecated != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsPeerGroupItem_deprecated *item = new RsPeerGroupItem_deprecated(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint32_t version; - ok &= getRawUInt32(data, rssize, &offset, &version); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_KEY, item->id); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->name); - ok &= getRawUInt32(data, rssize, &offset, &(item->flag)); - ok &= item->pgpList.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - return item; -} -/*************************************************************************/ - -uint32_t RsPeerConfigSerialiser::sizeGroup(RsNodeGroupItem *i) -{ - uint32_t s = 8; /* header */ - s += 4; /* version */ - s += RsNodeGroupId::serial_size(); - s += GetTlvStringSize(i->name); - s += 4; /* flag */ - s += i->pgpList.TlvSize(); - return s; -} - -#endif - void RsNodeGroupItem::serial_process(SerializeJob j,SerializeContext& ctx) { uint32_t v=0 ; @@ -1700,128 +237,6 @@ void RsNodeGroupItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,pgpList,"pgpList") ; } -#ifdef TO_REMOVE -bool RsPeerConfigSerialiser::serialiseGroup(RsNodeGroupItem *item, void *data, uint32_t *size) -{ - uint32_t tlvsize = RsPeerConfigSerialiser::sizeGroup(item); - uint32_t offset = 0; - - if(*size < tlvsize) - return false; /* not enough space */ - - *size = tlvsize; - - bool ok = true; - - // serialise header - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseGroup() Header: " << ok << std::endl; - std::cerr << "RsPeerConfigSerialiser::serialiseGroup() Header: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, 0); - ok &= item->id.serialise(data, tlvsize, offset); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, item->name); - ok &= setRawUInt32(data, tlvsize, &offset, item->flag); - ok &= item->pgpList.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseGroup() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsNodeGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_NODE_GROUP != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsNodeGroupItem *item = new RsNodeGroupItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint32_t version; - ok &= getRawUInt32(data, rssize, &offset, &version); - ok &= item->id.deserialise(data, rssize, offset); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->name); - ok &= getRawUInt32(data, rssize, &offset, &(item->flag)); - ok &= item->pgpList.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - return item; -} - -/**************************************************************/ - -std::ostream& RsPeerServicePermissionItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsPeerServicePermissionItem", indent); - uint16_t int_Indent = indent + 2; - - for(uint32_t i=0;ipgp_ids.size();++j) - { - s += RsPgpId::SIZE_IN_BYTES ;//GetTlvStringSize(i->pgp_ids[j]) ; - s += 4; /* flag */ - } - - return s; -} -#endif - void RsPeerServicePermissionItem::serial_process(SerializeJob j,SerializeContext& ctx) { // We need to hack this because of backward compatibility. The correct way to do it would be: @@ -1850,289 +265,3 @@ void RsPeerServicePermissionItem::serial_process(SerializeJob j,SerializeContext } } -#ifdef TO_REMOVE -bool RsPeerConfigSerialiser::serialisePermissions(RsPeerServicePermissionItem *item, void *data, uint32_t *size) -{ - uint32_t tlvsize = RsPeerConfigSerialiser::sizePermissions(item); - uint32_t offset = 0; - - if(*size < tlvsize) - return false; /* not enough space */ - - *size = tlvsize; - - bool ok = true; - - // serialise header - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialiseGroup() Header: " << ok << std::endl; - std::cerr << "RsPeerConfigSerialiser::serialiseGroup() Header: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->pgp_ids.size()); - - for(uint32_t i=0;ipgp_ids.size();++i) - { - ok &= item->pgp_ids[i].serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, item->service_flags[i].toUInt32()); - } - - if(offset != tlvsize) - { - ok = false; - std::cerr << "(EE) Item size ERROR in RsPeerServicePermissionItem!" << std::endl; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsPeerConfigSerialiser::serialisePermissions() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsPeerServicePermissionItem *RsPeerConfigSerialiser::deserialisePermissions(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_PEER_PERMISSIONS != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsPeerServicePermissionItem *item = new RsPeerServicePermissionItem ; - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint32_t s; - ok &= getRawUInt32(data, rssize, &offset, &s); - item->pgp_ids.resize(s) ; - item->service_flags.resize(s) ; - - for(uint32_t i=0;ipgp_ids[i].deserialise(data, rssize, offset) ; - ok &= getRawUInt32(data, rssize, &offset, &flags); - - item->service_flags[i] = ServicePermissionFlags(flags) ; - } - - if (offset != rssize) - { - /* error */ - std::cerr << "(EE) Item size ERROR in RsPeerServicePermissionItem!" << std::endl; - delete item; - return NULL; - } - - return item; -} - - - -/****************************************************************************/ - - -RsCacheConfig::~RsCacheConfig() -{ - return; -} - -void RsCacheConfig::clear() -{ - pid.clear(); - cachetypeid = 0; - cachesubid = 0; - path = ""; - name = ""; - hash.clear() ; - size = 0; - recvd = 0; - -} - -std::ostream &RsCacheConfig::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsCacheConfig", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); //indent - out << "pid: " << pid << std::endl; // display value of peerid - - printIndent(out, int_Indent); //indent - out << "cacheid: " << cachetypeid << ":" << cachesubid << std::endl; // display value of cacheid - - printIndent(out, int_Indent); - out << "path: " << path << std::endl; // display value of path - - printIndent(out, int_Indent); - out << "name: " << name << std::endl; // display value of name - - printIndent(out, int_Indent); - out << "hash: " << hash << std::endl; // display value of hash - - printIndent(out, int_Indent); - out << "size: " << size << std::endl; // display value of size - - printIndent(out, int_Indent); - out << "recvd: " << recvd << std::endl; // display value of recvd - - printRsItemEnd(out, "RsCacheConfig", indent); // end of 'WRITE' check - return out; -} - -/**************************************************************************/ - - -RsCacheConfigSerialiser::~RsCacheConfigSerialiser() -{ - return; -} - -uint32_t RsCacheConfigSerialiser::size(RsItem *i) -{ - RsCacheConfig *item = (RsCacheConfig *) i; - - uint32_t s = 8; // to store calculated size, initiailize with size of header - - - s += item->pid.serial_size(); - s += 2; /* cachetypeid */ - s += 2; /* cachesubid */ - s += GetTlvStringSize(item->path); - s += GetTlvStringSize(item->name); - s += item->hash.serial_size(); - s += 8; /* size */ - s += 4; /* recvd */ - - return s; -} - -bool RsCacheConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *size) -{ - RsCacheConfig *item = (RsCacheConfig *) i; - uint32_t tlvsize = RsCacheConfigSerialiser::size(item); - uint32_t offset = 0; - - if(*size < tlvsize) - return false; /* not enough space */ - - *size = tlvsize; - - bool ok = true; - - ok &=setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsCacheConfigSerialiser::serialise() Header: " << ok << std::endl; - std::cerr << "RsCacheConfigSerialiser::serialise() Size: " << size << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add the mandatory parts first */ - - ok &= item->pid.serialise(data, tlvsize, offset) ; - ok &= setRawUInt16(data, tlvsize, &offset, item->cachetypeid); - ok &= setRawUInt16(data, tlvsize, &offset, item->cachesubid); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PATH, item->path); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, item->name); - ok &= item->hash.serialise(data, tlvsize, offset) ; - ok &= setRawUInt64(data, tlvsize, &offset, item->size); - ok &= setRawUInt32(data, tlvsize, &offset, item->recvd); - - if (offset !=tlvsize) - { - ok = false; -#ifdef RSSERIAL_ERROR_DEBUG - std::cerr << "RsConfigSerialiser::serialisertransfer() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsItem *RsCacheConfigSerialiser::deserialise(void *data, uint32_t *size) -{/* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset; - offset = 0; - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_CACHE_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_DEFAULT != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - /* ready to load */ - RsCacheConfig *item = new RsCacheConfig(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - - ok &= item->pid.deserialise(data, rssize, offset) ; - ok &= getRawUInt16(data, rssize, &offset, &(item->cachetypeid)); - ok &= getRawUInt16(data, rssize, &offset, &(item->cachesubid)); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PATH, item->path); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->name); - ok &= item->hash.deserialise(data, rssize, offset) ; - ok &= getRawUInt64(data, rssize, &offset, &(item->size)); - ok &= getRawUInt32(data, rssize, &offset, &(item->recvd)); - - - if (offset != rssize) - { - - /* error */ - delete item; - return NULL; - } - - return item; -} - - -#endif - - - From 0d7df568b49601d80dfa01946d1971a803cb43cc Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 24 Apr 2017 22:47:08 +0200 Subject: [PATCH 163/230] moved rsconfigitems and rshistoryitems to rsitems/ --- libretroshare/src/chat/p3chatservice.cc | 2 +- libretroshare/src/dht/p3bitdht_relay.cc | 2 +- libretroshare/src/ft/ftcontroller.cc | 2 +- libretroshare/src/ft/ftcontroller.h | 2 +- libretroshare/src/ft/ftextralist.cc | 2 +- libretroshare/src/grouter/p3grouter.cc | 2 +- libretroshare/src/libretroshare.pro | 8 ++++---- libretroshare/src/pqi/authgpg.cc | 2 +- libretroshare/src/pqi/authssl.cc | 2 +- libretroshare/src/pqi/p3cfgmgr.cc | 2 +- libretroshare/src/pqi/p3historymgr.cc | 4 ++-- libretroshare/src/pqi/p3historymgr.h | 2 +- libretroshare/src/pqi/p3linkmgr.cc | 3 ++- libretroshare/src/pqi/p3netmgr.cc | 3 ++- libretroshare/src/pqi/p3peermgr.cc | 2 +- .../src/{serialiser => rsitems}/rsconfigitems.cc | 2 +- libretroshare/src/{serialiser => rsitems}/rsconfigitems.h | 0 .../src/{serialiser => rsitems}/rshistoryitems.cc | 5 +++-- .../src/{serialiser => rsitems}/rshistoryitems.h | 2 +- libretroshare/src/serialiser/rspluginitems.h | 2 +- libretroshare/src/services/p3banlist.cc | 5 +++-- libretroshare/src/services/p3gxsreputation.cc | 3 ++- libretroshare/src/services/p3idservice.cc | 2 +- libretroshare/src/services/p3msgservice.cc | 3 ++- 24 files changed, 35 insertions(+), 29 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsconfigitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsconfigitems.h (100%) rename libretroshare/src/{serialiser => rsitems}/rshistoryitems.cc (95%) rename libretroshare/src/{serialiser => rsitems}/rshistoryitems.h (94%) diff --git a/libretroshare/src/chat/p3chatservice.cc b/libretroshare/src/chat/p3chatservice.cc index eb421ac31..453ec7df1 100644 --- a/libretroshare/src/chat/p3chatservice.cc +++ b/libretroshare/src/chat/p3chatservice.cc @@ -42,7 +42,7 @@ #include "services/p3idservice.h" #include "chat/p3chatservice.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" /**** * #define CHAT_DEBUG 1 diff --git a/libretroshare/src/dht/p3bitdht_relay.cc b/libretroshare/src/dht/p3bitdht_relay.cc index d71f3e7c5..d846e7691 100644 --- a/libretroshare/src/dht/p3bitdht_relay.cc +++ b/libretroshare/src/dht/p3bitdht_relay.cc @@ -29,7 +29,7 @@ #include "tcponudp/udprelay.h" #include "bitdht/bdstddht.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" /*********************************************************************************************** diff --git a/libretroshare/src/ft/ftcontroller.cc b/libretroshare/src/ft/ftcontroller.cc index 13bafa5f0..fad8642fa 100644 --- a/libretroshare/src/ft/ftcontroller.cc +++ b/libretroshare/src/ft/ftcontroller.cc @@ -60,7 +60,7 @@ #include "retroshare/rsiface.h" #include "retroshare/rspeers.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include #include /* for (u)sleep() */ #include diff --git a/libretroshare/src/ft/ftcontroller.h b/libretroshare/src/ft/ftcontroller.h index 6f41c3dc8..edeb8d82f 100644 --- a/libretroshare/src/ft/ftcontroller.h +++ b/libretroshare/src/ft/ftcontroller.h @@ -53,7 +53,7 @@ class p3ServiceControl; #include "pqi/p3cfgmgr.h" #include "retroshare/rsfiles.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include diff --git a/libretroshare/src/ft/ftextralist.cc b/libretroshare/src/ft/ftextralist.cc index 8538a46a9..7548d421c 100644 --- a/libretroshare/src/ft/ftextralist.cc +++ b/libretroshare/src/ft/ftextralist.cc @@ -30,7 +30,7 @@ #include #include #include "ft/ftextralist.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "util/rsdir.h" #include #include /* for (u)sleep() */ diff --git a/libretroshare/src/grouter/p3grouter.cc b/libretroshare/src/grouter/p3grouter.cc index 5f2b6e7d0..f14af4412 100644 --- a/libretroshare/src/grouter/p3grouter.cc +++ b/libretroshare/src/grouter/p3grouter.cc @@ -186,7 +186,7 @@ #include "util/rsrandom.h" #include "util/rsprint.h" #include "util/rsmemory.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "services/p3idservice.h" #include "turtle/p3turtle.h" #include "gxs/rsgixs.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index e6f1a4ef4..8a633c1a7 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -456,8 +456,8 @@ HEADERS += rsitems/itempriorities.h \ serialiser/rsbaseserial.h \ rsitems/rsfiletransferitems.h \ serialiser/rsserviceserialiser.h \ - serialiser/rsconfigitems.h \ - serialiser/rshistoryitems.h \ + rsitems/rsconfigitems.h \ + rsitems/rshistoryitems.h \ rsitems/rsmsgitems.h \ serialiser/rsserial.h \ rsitems/rsserviceids.h \ @@ -610,8 +610,8 @@ SOURCES += plugins/pluginmanager.cc \ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsfiletransferitems.cc \ serialiser/rsserviceserialiser.cc \ - serialiser/rsconfigitems.cc \ - serialiser/rshistoryitems.cc \ + rsitems/rsconfigitems.cc \ + rsitems/rshistoryitems.cc \ rsitems/rsmsgitems.cc \ serialiser/rsserial.cc \ serialiser/rsstatusitems.cc \ diff --git a/libretroshare/src/pqi/authgpg.cc b/libretroshare/src/pqi/authgpg.cc index 38756476c..1e20d6b85 100644 --- a/libretroshare/src/pqi/authgpg.cc +++ b/libretroshare/src/pqi/authgpg.cc @@ -41,7 +41,7 @@ #include #include #include -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #define LIMIT_CERTIFICATE_SIZE 1 #define MAX_CERTIFICATE_SIZE 10000 diff --git a/libretroshare/src/pqi/authssl.cc b/libretroshare/src/pqi/authssl.cc index 4191e0b4f..ccc176908 100644 --- a/libretroshare/src/pqi/authssl.cc +++ b/libretroshare/src/pqi/authssl.cc @@ -37,7 +37,7 @@ #include "pqinetwork.h" #include "authgpg.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "util/rsdir.h" #include "util/rsstring.h" diff --git a/libretroshare/src/pqi/p3cfgmgr.cc b/libretroshare/src/pqi/p3cfgmgr.cc index 5f9934d57..3266f68d4 100644 --- a/libretroshare/src/pqi/p3cfgmgr.cc +++ b/libretroshare/src/pqi/p3cfgmgr.cc @@ -35,7 +35,7 @@ #include #include "util/rsstring.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" /* #define CONFIG_DEBUG 1 diff --git a/libretroshare/src/pqi/p3historymgr.cc b/libretroshare/src/pqi/p3historymgr.cc index 5739ff94a..72a2640ec 100644 --- a/libretroshare/src/pqi/p3historymgr.cc +++ b/libretroshare/src/pqi/p3historymgr.cc @@ -26,8 +26,8 @@ #include #include "p3historymgr.h" -#include "serialiser/rshistoryitems.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rshistoryitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rsiface.h" #include "retroshare/rspeers.h" #include "rsitems/rsmsgitems.h" diff --git a/libretroshare/src/pqi/p3historymgr.h b/libretroshare/src/pqi/p3historymgr.h index 98d7b6eed..3f3c9a6f1 100644 --- a/libretroshare/src/pqi/p3historymgr.h +++ b/libretroshare/src/pqi/p3historymgr.h @@ -29,7 +29,7 @@ #include #include -#include "serialiser/rshistoryitems.h" +#include "rsitems/rshistoryitems.h" #include "retroshare/rshistory.h" #include "pqi/p3cfgmgr.h" diff --git a/libretroshare/src/pqi/p3linkmgr.cc b/libretroshare/src/pqi/p3linkmgr.cc index 26a27dc45..39424a21b 100644 --- a/libretroshare/src/pqi/p3linkmgr.cc +++ b/libretroshare/src/pqi/p3linkmgr.cc @@ -41,7 +41,8 @@ #include "util/rsprint.h" #include "util/rsdebug.h" #include "util/rsstring.h" -#include "serialiser/rsconfigitems.h" + +#include "rsitems/rsconfigitems.h" #include "retroshare/rsiface.h" #include "retroshare/rspeers.h" diff --git a/libretroshare/src/pqi/p3netmgr.cc b/libretroshare/src/pqi/p3netmgr.cc index 1cbabb75c..acfa32852 100644 --- a/libretroshare/src/pqi/p3netmgr.cc +++ b/libretroshare/src/pqi/p3netmgr.cc @@ -42,7 +42,8 @@ struct RsLog::logInfo p3netmgrzoneInfo = {RsLog::Default, "p3netmgr"}; #define p3netmgrzone &p3netmgrzoneInfo -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" + #include "retroshare/rsiface.h" #include "retroshare/rsconfig.h" #include "retroshare/rsbanlist.h" diff --git a/libretroshare/src/pqi/p3peermgr.cc b/libretroshare/src/pqi/p3peermgr.cc index d26c4a950..5ae948d86 100644 --- a/libretroshare/src/pqi/p3peermgr.cc +++ b/libretroshare/src/pqi/p3peermgr.cc @@ -42,7 +42,7 @@ #include "util/rsstring.h" #include "util/rsdebug.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rsiface.h" // Needed for rsicontrol (should remove this dependancy) #include "retroshare/rspeers.h" // Needed for Group Parameters. diff --git a/libretroshare/src/serialiser/rsconfigitems.cc b/libretroshare/src/rsitems/rsconfigitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsconfigitems.cc rename to libretroshare/src/rsitems/rsconfigitems.cc index 856294ca3..4ba94a8bf 100644 --- a/libretroshare/src/serialiser/rsconfigitems.cc +++ b/libretroshare/src/rsitems/rsconfigitems.cc @@ -25,7 +25,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rspeers.h" // Needed for RsGroupInfo. /*** diff --git a/libretroshare/src/serialiser/rsconfigitems.h b/libretroshare/src/rsitems/rsconfigitems.h similarity index 100% rename from libretroshare/src/serialiser/rsconfigitems.h rename to libretroshare/src/rsitems/rsconfigitems.h diff --git a/libretroshare/src/serialiser/rshistoryitems.cc b/libretroshare/src/rsitems/rshistoryitems.cc similarity index 95% rename from libretroshare/src/serialiser/rshistoryitems.cc rename to libretroshare/src/rsitems/rshistoryitems.cc index 6c05e9afb..eb50bf15e 100644 --- a/libretroshare/src/serialiser/rshistoryitems.cc +++ b/libretroshare/src/rsitems/rshistoryitems.cc @@ -23,10 +23,11 @@ * */ -#include "serialiser/rshistoryitems.h" +#include "rsitems/rshistoryitems.h" +#include "rsitems/rsconfigitems.h" + #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" -#include "serialiser/rsconfigitems.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/serialiser/rshistoryitems.h b/libretroshare/src/rsitems/rshistoryitems.h similarity index 94% rename from libretroshare/src/serialiser/rshistoryitems.h rename to libretroshare/src/rsitems/rshistoryitems.h index ffc5b571c..27a387f60 100644 --- a/libretroshare/src/serialiser/rshistoryitems.h +++ b/libretroshare/src/rsitems/rshistoryitems.h @@ -28,7 +28,7 @@ #include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rstypes.h" #include "serialization/rsserializer.h" diff --git a/libretroshare/src/serialiser/rspluginitems.h b/libretroshare/src/serialiser/rspluginitems.h index ed2bda137..02b64fc54 100644 --- a/libretroshare/src/serialiser/rspluginitems.h +++ b/libretroshare/src/serialiser/rspluginitems.h @@ -27,7 +27,7 @@ #pragma once #include "serialiser/rsserial.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "serialiser/rsbaseserial.h" #if 0 diff --git a/libretroshare/src/services/p3banlist.cc b/libretroshare/src/services/p3banlist.cc index bf72ea815..800fe697c 100644 --- a/libretroshare/src/services/p3banlist.cc +++ b/libretroshare/src/services/p3banlist.cc @@ -30,11 +30,12 @@ #include "util/rsnet.h" #include "services/p3banlist.h" -#include "rsitems/rsbanlistitems.h" -#include "serialiser/rsconfigitems.h" #include "retroshare/rsdht.h" #include "retroshare/rsbanlist.h" +#include "rsitems/rsbanlistitems.h" +#include "rsitems/rsconfigitems.h" + #include #include diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc index 609382444..d2ad1b9da 100644 --- a/libretroshare/src/services/p3gxsreputation.cc +++ b/libretroshare/src/services/p3gxsreputation.cc @@ -29,8 +29,9 @@ #include "retroshare/rspeers.h" #include "services/p3gxsreputation.h" + #include "rsitems/rsgxsreputationitems.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index 53b922327..c173dba8a 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -28,7 +28,7 @@ #include "services/p3idservice.h" #include "pgp/pgpauxutils.h" #include "serialiser/rsgxsiditems.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rsgxsflags.h" #include "util/rsrandom.h" #include "util/rsstring.h" diff --git a/libretroshare/src/services/p3msgservice.cc b/libretroshare/src/services/p3msgservice.cc index a3aacfc7b..29fad5319 100644 --- a/libretroshare/src/services/p3msgservice.cc +++ b/libretroshare/src/services/p3msgservice.cc @@ -41,7 +41,8 @@ #include "pgp/pgpkeyutil.h" #include "rsserver/p3face.h" -#include "serialiser/rsconfigitems.h" + +#include "rsitems/rsconfigitems.h" #include "grouter/p3grouter.h" #include "grouter/groutertypes.h" From 6e42cf420015a84d45b22050b1ff2dc76abd85a6 Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 11:56:25 +0200 Subject: [PATCH 164/230] Fix Clang warnings: field 'mPassword' will be initialized after field 'mPrevIsBad' warning: field 'mPassword' will be initialized after field 'mPrevIsBad' [-Wreorder] --- libresapi/src/api/RsControlModule.cpp | 4 ++-- libresapi/src/api/RsControlModule.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libresapi/src/api/RsControlModule.cpp b/libresapi/src/api/RsControlModule.cpp index cb3cdcdf2..ece94b7af 100644 --- a/libresapi/src/api/RsControlModule.cpp +++ b/libresapi/src/api/RsControlModule.cpp @@ -25,8 +25,8 @@ RsControlModule::RsControlModule(int argc, char **argv, StateTokenServer* sts, A mRunState(WAITING_INIT), mAutoLoginNextTime(false), mWantPassword(false), - mPassword(""), - mPrevIsBad(false) + mPrevIsBad(false), + mPassword("") { mStateToken = sts->getNewToken(); this->argc = argc; diff --git a/libresapi/src/api/RsControlModule.h b/libresapi/src/api/RsControlModule.h index 7e306405c..8b8b1f3f0 100644 --- a/libresapi/src/api/RsControlModule.h +++ b/libresapi/src/api/RsControlModule.h @@ -77,7 +77,7 @@ private: // to notify that a password callback is waiting // to answer the request, clear the flag and set the password bool mWantPassword; - bool mPrevIsBad; + bool mPrevIsBad ; std::string mTitle; std::string mKeyName; std::string mPassword; From 490f8d2f5462b3b4dc639b975a752703077566a3 Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 12:00:00 +0200 Subject: [PATCH 165/230] Fix Clang warnings: 'TYPE_IDENTITY' not handled warning: enumeration value 'TYPE_IDENTITY' not handled in switch [- Wswitch] --- retroshare-gui/src/util/HandleRichText.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/util/HandleRichText.cpp b/retroshare-gui/src/util/HandleRichText.cpp index 73801bd5b..c5f578d3a 100644 --- a/retroshare-gui/src/util/HandleRichText.cpp +++ b/retroshare-gui/src/util/HandleRichText.cpp @@ -230,12 +230,13 @@ bool RsHtml::canReplaceAnchor(QDomDocument &/*doc*/, QDomElement &/*element*/, c case RetroShareLink::TYPE_PERSON: case RetroShareLink::TYPE_FORUM: case RetroShareLink::TYPE_CHANNEL: - case RetroShareLink::TYPE_POSTED: case RetroShareLink::TYPE_SEARCH: case RetroShareLink::TYPE_MESSAGE: case RetroShareLink::TYPE_EXTRAFILE: case RetroShareLink::TYPE_PRIVATE_CHAT: case RetroShareLink::TYPE_PUBLIC_MSG: + case RetroShareLink::TYPE_POSTED: + case RetroShareLink::TYPE_IDENTITY: // not yet implemented break; From f22dc0f0df195524590edc378395130b7d712c8f Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 18 Apr 2017 12:02:34 +0200 Subject: [PATCH 166/230] Fix Clang warnings: unused variable 'action' warning: unused variable 'action' [-Wunused-variable] QAction *action = contextMenu- >addAction(QIcon(":/images/chat_24.png"),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; --- retroshare-gui/src/gui/Identity/IdDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/Identity/IdDialog.cpp b/retroshare-gui/src/gui/Identity/IdDialog.cpp index aac7e3ba5..755dab9c9 100644 --- a/retroshare-gui/src/gui/Identity/IdDialog.cpp +++ b/retroshare-gui/src/gui/Identity/IdDialog.cpp @@ -2408,8 +2408,8 @@ void IdDialog::IdListCustomPopupMenu( QPoint ) } } - if(n_selected_items==1) - QAction *action = contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; + if (n_selected_items==1) + contextMenu->addAction(QIcon(":/images/chat_24.png"),tr("Copy identity to clipboard"),this,SLOT(copyRetroshareLink())) ; // always allow to send messages contextMenu->addAction(QIcon(":/images/mail_new.png"), tr("Send message"), this, SLOT(sendMsg())); From ff1908eda6293d5105fbe1d60d5c41641e1bb0e8 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 11:50:24 +0200 Subject: [PATCH 167/230] Fix Clang Static Analyser: Undefined allocation of 0 bytes Unix API: Undefined allocation of 0 bytes (CERT MEM04-C; CWE-131): Call to 'malloc' has an allocation size of 0 bytes 1: Loop body executed 0 times in /home/phenom/GIT/RetroShare/trunk/ libbitdht/src/util/bdbloom.cc:223 2: Calling 'bloomFilter::getFilter' in /home/phenom/GIT/RetroShare/ trunk/libbitdht/src/util/bdbloom.cc:240 3: 'bytes' initialized to 0 in /home/phenom/GIT/RetroShare/trunk/ libbitdht/src/util/bdbloom.cc:141 4: Call to 'malloc' has an allocation size of 0 bytes in /home/phenom/ GIT/RetroShare/trunk/libbitdht/src/util/bdbloom.cc:148 --- libbitdht/src/util/bdbloom.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libbitdht/src/util/bdbloom.cc b/libbitdht/src/util/bdbloom.cc index 36f3a3bee..016808ea4 100644 --- a/libbitdht/src/util/bdbloom.cc +++ b/libbitdht/src/util/bdbloom.cc @@ -144,6 +144,11 @@ std::string bloomFilter::getFilter() bytes++; } + if (bytes==0) + { + std::cerr << "(EE) Error. Cannot allocate memory for 0 byte in " << __PRETTY_FUNCTION__ << std::endl; + return std::string(); + } // convert to binary array. uint8_t *tmparray = (uint8_t *) malloc(bytes); From b2b7d004cd4204c3ae06f1876329dd4800f38f98 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:01:35 +0200 Subject: [PATCH 168/230] Fix CSA warnings: Called C++ object pointer is null Logic error: Called C++ object pointer is null 1: 'di' initialized here in /home/phenom/GIT/RetroShare/trunk/plugins/ VOIP/gui/VOIPGUIHandler.cpp:157 2: Assuming 'di' is null in /home/phenom/GIT/RetroShare/trunk/plugins/ VOIP/gui/VOIPGUIHandler.cpp:158 3: Called C++ object pointer is null in /home/phenom/GIT/RetroShare/ trunk/plugins/VOIP/gui/VOIPGUIHandler.cpp:161 --- plugins/VOIP/gui/VOIPGUIHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VOIP/gui/VOIPGUIHandler.cpp b/plugins/VOIP/gui/VOIPGUIHandler.cpp index 6a7d7d703..f999ed437 100644 --- a/plugins/VOIP/gui/VOIPGUIHandler.cpp +++ b/plugins/VOIP/gui/VOIPGUIHandler.cpp @@ -155,7 +155,7 @@ void VOIPGUIHandler::ReceivedVoipBandwidthInfo(const RsPeerId &peer_id, int byte #endif ChatDialog *di = ChatDialog::getExistingChat(ChatId(peer_id)) ; - if(!di) + if(di) { ChatWidget *cw = di->getChatWidget(); From 90cd6233d8b3e446984ddc1b68b2e89fbf35995d Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:04:50 +0200 Subject: [PATCH 169/230] Fix CAS warnings: Potential leak of memory pointed to by 'toaster' Memory Error: Memory leak: Potential leak of memory pointed to by 'toaster' 1: Memory is allocated in /home/phenom/GIT/RetroShare/trunk/plugins/ VOIP/gui/VOIPToasterNotify.cpp:182 --- plugins/VOIP/gui/VOIPToasterNotify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VOIP/gui/VOIPToasterNotify.cpp b/plugins/VOIP/gui/VOIPToasterNotify.cpp index d2de3f6bd..eff862467 100644 --- a/plugins/VOIP/gui/VOIPToasterNotify.cpp +++ b/plugins/VOIP/gui/VOIPToasterNotify.cpp @@ -180,7 +180,7 @@ ToasterItem* VOIPToasterNotify::testToasterItem(QString tag) if (tag == "Invitation") toaster = new ToasterItem(new VOIPToasterItem(ownId, tr("Test VOIP Invitation"), VOIPToasterItem::Invitation)); #endif if (tag == "AudioCall") toaster = new ToasterItem(new VOIPToasterItem(ownId, tr("Test VOIP Audio Call"), VOIPToasterItem::AudioCall)); - if (tag == "VideoCall") toaster = new ToasterItem(new VOIPToasterItem(ownId, tr("Test VOIP Video Call"), VOIPToasterItem::VideoCall)); + if (tag == "VideoCall" || toaster == NULL) toaster = new ToasterItem(new VOIPToasterItem(ownId, tr("Test VOIP Video Call"), VOIPToasterItem::VideoCall)); return toaster; } From 30632dcfeb5a065caee5b3b9d610ad50880a65b2 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:06:56 +0200 Subject: [PATCH 170/230] Fix CSA warnings: Called C++ object pointer is null Logic error: Called C++ object pointer is null 1: Calling 'MainWindow::createNotifyIcons' in /home/phenom/GIT/ RetroShare/trunk/retroshare-gui/src/gui/MainWindow.cpp:291 2: Loop body executed 0 times in /home/phenom/GIT/RetroShare/trunk/ retroshare-gui/src/gui/MainWindow.cpp:600 3: Calling 'MainWindow::updateTrayCombine' in /home/phenom/GIT/ RetroShare/trunk/retroshare-gui/src/gui/MainWindow.cpp:605 4: Value assigned to field 'notifyMenu' in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/MainWindow.cpp:654 5: Assuming pointer value is null in /home/phenom/GIT/RetroShare/trunk/ retroshare-gui/src/gui/MainWindow.cpp:658 6: Called C++ object pointer is null in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/MainWindow.cpp:679 --- retroshare-gui/src/gui/MainWindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index 8e8534345..af2e10574 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -676,7 +676,8 @@ void MainWindow::updateTrayCombine() } } - notifyMenu->menuAction()->setVisible(visible); + if (notifyMenu) + notifyMenu->menuAction()->setVisible(visible); // update tray icon updateFriends(); From 1f16f46aad3769457561e5a5d0d26fef81beec3c Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:15:34 +0200 Subject: [PATCH 171/230] Fix CSA warnings: Called C++ object pointer is null Logic error: Called C++ object pointer is null 1: Assuming pointer value is null in /home/phenom/GIT/RetroShare/trunk/ retroshare-gui/src/gui/common/MimeTextEdit.cpp:65 2: Called C++ object pointer is null in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/common/MimeTextEdit.cpp:83 --- retroshare-gui/src/gui/common/MimeTextEdit.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/retroshare-gui/src/gui/common/MimeTextEdit.cpp b/retroshare-gui/src/gui/common/MimeTextEdit.cpp index 5ff657ce3..9c0395ffb 100644 --- a/retroshare-gui/src/gui/common/MimeTextEdit.cpp +++ b/retroshare-gui/src/gui/common/MimeTextEdit.cpp @@ -77,6 +77,7 @@ void MimeTextEdit::insertFromMimeData(const QMimeData* source) } } #endif + if (source == NULL) return; //insert retroshare links QList links; From 90aaace69c9a74509ed11992226c5c0d4c9dbcd6 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:18:35 +0200 Subject: [PATCH 172/230] Fix CSA warnings: Called C++ object pointer is null Logic error: Called C++ object pointer is null 1: Value assigned to field 'mMainAction' in /home/phenom/GIT/ RetroShare/trunk/retroshare-gui/src/gui/common/UserNotify.cpp:94 2: Assuming pointer value is null in /home/phenom/GIT/RetroShare/trunk/ retroshare-gui/src/gui/common/UserNotify.cpp:95 3: Called C++ object pointer is null in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/common/UserNotify.cpp:103 --- retroshare-gui/src/gui/common/UserNotify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/common/UserNotify.cpp b/retroshare-gui/src/gui/common/UserNotify.cpp index 96cbf554b..6c70b3c9f 100644 --- a/retroshare-gui/src/gui/common/UserNotify.cpp +++ b/retroshare-gui/src/gui/common/UserNotify.cpp @@ -99,7 +99,7 @@ void UserNotify::initialize(QToolBar *mainToolBar, QAction *mainAction, QListWid } } mListItem = listItem; - if (mListItem && !mMainAction) { + if (mListItem && mMainAction) { mButtonText = mMainAction->text(); } } From 593c0cb7e65b13a2e07d74fdc15d563e93f78e75 Mon Sep 17 00:00:00 2001 From: Phenom Date: Wed, 19 Apr 2017 14:19:54 +0200 Subject: [PATCH 173/230] Fix CSA warnings: Called C++ object pointer is null Logic error: Called C++ object pointer is null 1: Null pointer value stored to field 'mInternalTokenQueue' in /home/ phenom/GIT/RetroShare/trunk/retroshare-gui/src/gui/gxs/ GxsGroupDialog.cpp:70 2: Calling 'GxsGroupDialog::init' in /home/phenom/GIT/RetroShare/trunk/ retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp:72 3: Calling 'GxsGroupDialog::initMode' in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp:136 4: Calling 'GxsGroupDialog::requestGroup' in /home/phenom/GIT/ RetroShare/trunk/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp:190 5: Called C++ object pointer is null in /home/phenom/GIT/RetroShare/ trunk/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp:866 --- retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp index b18ab3688..cd792623d 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp @@ -863,7 +863,8 @@ void GxsGroupDialog::requestGroup(const RsGxsGroupId &groupId) std::cerr << std::endl; uint32_t token; - mInternalTokenQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds, GXSGROUP_INTERNAL_LOADGROUP); + if (mInternalTokenQueue) + mInternalTokenQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds, GXSGROUP_INTERNAL_LOADGROUP) ; } void GxsGroupDialog::loadGroup(uint32_t token) From 3592d5bf5d35aee004742d06a949e4508a26bb32 Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 21 Apr 2017 19:55:37 +0200 Subject: [PATCH 174/230] =?UTF-8?q?Fix=20GCC=20warnings:=20unused=20parame?= =?UTF-8?q?ter=20=E2=80=98names=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /libretroshare/src/pqi/pqiservice.h:80: warning: unused parameter ‘names’ [-Wunused-parameter] virtual void getItemNames(std::map& names) const {} // This does nothing by default. Service should derive it in order to give info for the UI ^~~~~ --- libretroshare/src/pqi/pqiservice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretroshare/src/pqi/pqiservice.h b/libretroshare/src/pqi/pqiservice.h index b22a34aac..41c540d4c 100644 --- a/libretroshare/src/pqi/pqiservice.h +++ b/libretroshare/src/pqi/pqiservice.h @@ -77,7 +77,7 @@ public: virtual int tick() { return 0; } - virtual void getItemNames(std::map& names) const {} // This does nothing by default. Service should derive it in order to give info for the UI + virtual void getItemNames(std::map& /*names*/) const {} // This does nothing by default. Service should derive it in order to give info for the UI private: p3ServiceServerIface *mServiceServer; // const, no need for mutex. From 078913f0f34c6246e6f61290a308fb35b7a7886e Mon Sep 17 00:00:00 2001 From: Phenom Date: Fri, 21 Apr 2017 21:29:20 +0200 Subject: [PATCH 175/230] =?UTF-8?q?Fix=20GCC=20warnings:=20enumeration=20v?= =?UTF-8?q?alue=20=E2=80=98TYPE=5FIDENTITY=E2=80=99=20not=20handled=20in?= =?UTF-8?q?=20switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit warning: enumeration value ‘TYPE_IDENTITY’ not handled in switch [- Wswitch] switch (link.type()) { ^ --- retroshare-gui/src/util/HandleRichText.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/util/HandleRichText.cpp b/retroshare-gui/src/util/HandleRichText.cpp index c5f578d3a..96fd36d73 100644 --- a/retroshare-gui/src/util/HandleRichText.cpp +++ b/retroshare-gui/src/util/HandleRichText.cpp @@ -260,12 +260,13 @@ void RsHtml::anchorStylesheetForImg(QDomDocument &/*doc*/, QDomElement &/*elemen case RetroShareLink::TYPE_PERSON: case RetroShareLink::TYPE_FORUM: case RetroShareLink::TYPE_CHANNEL: - case RetroShareLink::TYPE_POSTED: case RetroShareLink::TYPE_SEARCH: case RetroShareLink::TYPE_MESSAGE: case RetroShareLink::TYPE_EXTRAFILE: case RetroShareLink::TYPE_PRIVATE_CHAT: case RetroShareLink::TYPE_PUBLIC_MSG: + case RetroShareLink::TYPE_POSTED: + case RetroShareLink::TYPE_IDENTITY: // not yet implemented break; From 9e246c9670a23be77af01b18a8e1870a799ef0d0 Mon Sep 17 00:00:00 2001 From: Phenom Date: Tue, 25 Apr 2017 18:39:30 +0200 Subject: [PATCH 176/230] Add warning about relays bandwidth. --- retroshare-gui/src/gui/settings/RelayPage.cpp | 4 +- retroshare-gui/src/gui/settings/RelayPage.ui | 98 +++++++++++-------- retroshare-gui/src/gui/settings/ServerPage.ui | 17 +++- 3 files changed, 77 insertions(+), 42 deletions(-) diff --git a/retroshare-gui/src/gui/settings/RelayPage.cpp b/retroshare-gui/src/gui/settings/RelayPage.cpp index d26550c8b..2927d2ea5 100644 --- a/retroshare-gui/src/gui/settings/RelayPage.cpp +++ b/retroshare-gui/src/gui/settings/RelayPage.cpp @@ -209,7 +209,7 @@ void RelayPage::updateEnabled() if (ui.enableCheckBox->isChecked()) { - ui.groupBox->setEnabled(true); + ui.relayOptionGBox->setEnabled(true); if (ui.serverCheckBox->isChecked()) { std::cerr << "RelayPage::updateEnabled() Both Enabled" << std::endl; @@ -224,7 +224,7 @@ void RelayPage::updateEnabled() else { std::cerr << "RelayPage::updateEnabled() Both Disabled" << std::endl; - ui.groupBox->setEnabled(false); + ui.relayOptionGBox->setEnabled(false); ui.serverGroupBox->setEnabled(false); } diff --git a/retroshare-gui/src/gui/settings/RelayPage.ui b/retroshare-gui/src/gui/settings/RelayPage.ui index f753b0c49..d5df50626 100644 --- a/retroshare-gui/src/gui/settings/RelayPage.ui +++ b/retroshare-gui/src/gui/settings/RelayPage.ui @@ -10,9 +10,9 @@ 546 - + - + @@ -21,7 +21,7 @@ - + Qt::Horizontal @@ -41,7 +41,7 @@ - + Qt::Horizontal @@ -56,14 +56,14 @@ - + true Relay options - + 0 @@ -80,7 +80,7 @@ 0 - + Qt::Horizontal @@ -93,14 +93,14 @@ - + Number - + Qt::Horizontal @@ -113,28 +113,28 @@ - + Bandwidth per link - + Qt::Vertical - + Total Bandwidth - + Friends @@ -154,7 +154,7 @@ - + x @@ -184,7 +184,7 @@ - + Friends of Friends @@ -198,7 +198,7 @@ - + x @@ -228,7 +228,7 @@ - + General @@ -242,7 +242,7 @@ - + x @@ -272,12 +272,19 @@ - + Qt::Horizontal + + + + Total: + + + @@ -288,15 +295,8 @@ - - - - Total: - - - - + Qt::Horizontal @@ -318,6 +318,26 @@ + + + + + 0 + 0 + + + + border: 1px solid #DCDC41; + border-radius: 6px; + background: #FFFFD7; + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFFD7, stop:1 #FFFFB2); + + + + Warning: This bandwidth adds up to the max bandwidth. + + + @@ -326,7 +346,17 @@ Relay Server Setup - + + + + + HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH + + + + + + @@ -347,16 +377,6 @@ - - - - HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH - - - - - - @@ -377,7 +397,7 @@ - + Qt::Vertical diff --git a/retroshare-gui/src/gui/settings/ServerPage.ui b/retroshare-gui/src/gui/settings/ServerPage.ui index a0f16a62b..921e5b7df 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.ui +++ b/retroshare-gui/src/gui/settings/ServerPage.ui @@ -26,7 +26,7 @@ - 2 + 0 @@ -418,6 +418,21 @@ + + + + border: 1px solid #DCDC41; + border-radius: 6px; + background: #FFFFD7; + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #FFFFD7, stop:1 #FFFFB2); + + + + WARNING: +These values don't take into account the Relays. + + + From 77e809ea4b9f4a9e6e7b3cc36b016a163ecc1f74 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 25 Apr 2017 21:21:46 +0200 Subject: [PATCH 177/230] switched GRouter to new serialization --- libretroshare/src/grouter/grouteritems.cc | 262 +++++++++++++++--- libretroshare/src/grouter/grouteritems.h | 161 +++-------- libretroshare/src/grouter/p3grouter.cc | 67 +++-- libretroshare/src/pqi/pqistore.cc | 2 +- libretroshare/src/serialiser/rsserial.h | 2 +- .../src/serialization/rsserializer.cc | 43 ++- .../src/serialization/rsserializer.h | 1 + 7 files changed, 343 insertions(+), 195 deletions(-) diff --git a/libretroshare/src/grouter/grouteritems.cc b/libretroshare/src/grouter/grouteritems.cc index 3f500d615..c48dbc134 100644 --- a/libretroshare/src/grouter/grouteritems.cc +++ b/libretroshare/src/grouter/grouteritems.cc @@ -1,65 +1,71 @@ +#include "util/rsprint.h" #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" #include "grouteritems.h" -/**********************************************************************************************/ -/* SERIALISATION */ -/**********************************************************************************************/ - -bool RsGRouterItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const -{ - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; -} - /**********************************************************************************************/ /* SERIALISER STUFF */ /**********************************************************************************************/ -RsItem *RsGRouterSerialiser::deserialise(void *data, uint32_t *pktsize) +RsItem *RsGRouterSerialiser::create_item(uint16_t service_id,uint8_t subtype) const { - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_GROUTER != getRsItemService(rstype)) - { + if(RS_SERVICE_TYPE_GROUTER != service_id) return NULL; /* wrong type */ - } - switch(getRsItemSubType(rstype)) + switch(subtype) { - case RS_PKT_SUBTYPE_GROUTER_DATA: return deserialise_RsGRouterGenericDataItem (data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_TRANSACTION_CHUNK: return deserialise_RsGRouterTransactionChunkItem(data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_TRANSACTION_ACKN: return deserialise_RsGRouterTransactionAcknItem (data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_SIGNED_RECEIPT: return deserialise_RsGRouterSignedReceiptItem (data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_MATRIX_CLUES: return deserialise_RsGRouterMatrixCluesItem (data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_MATRIX_TRACK: return deserialise_RsGRouterMatrixTrackItem (data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_FRIENDS_LIST: return deserialise_RsGRouterMatrixFriendListItem(data, *pktsize); - case RS_PKT_SUBTYPE_GROUTER_ROUTING_INFO: return deserialise_RsGRouterRoutingInfoItem (data, *pktsize); + case RS_PKT_SUBTYPE_GROUTER_DATA: return new RsGRouterGenericDataItem (); + case RS_PKT_SUBTYPE_GROUTER_TRANSACTION_CHUNK: return new RsGRouterTransactionChunkItem(); + case RS_PKT_SUBTYPE_GROUTER_TRANSACTION_ACKN: return new RsGRouterTransactionAcknItem (); + case RS_PKT_SUBTYPE_GROUTER_SIGNED_RECEIPT: return new RsGRouterSignedReceiptItem (); + case RS_PKT_SUBTYPE_GROUTER_MATRIX_CLUES: return new RsGRouterMatrixCluesItem (); + case RS_PKT_SUBTYPE_GROUTER_MATRIX_TRACK: return new RsGRouterMatrixTrackItem (); + case RS_PKT_SUBTYPE_GROUTER_FRIENDS_LIST: return new RsGRouterMatrixFriendListItem(); + case RS_PKT_SUBTYPE_GROUTER_ROUTING_INFO: return new RsGRouterRoutingInfoItem (); default: - std::cerr << "RsGRouterSerialiser::deserialise(): Could not de-serialise item. SubPacket id = " << std::hex << getRsItemSubType(rstype) << " id = " << rstype << std::dec << std::endl; return NULL; } - return NULL; } + +void RsGRouterTransactionChunkItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,propagation_id,"propagation_id") ; + RsTypeSerializer::serial_process(j,ctx,chunk_start ,"chunk_start") ; + RsTypeSerializer::serial_process(j,ctx,chunk_size ,"chunk_size") ; + RsTypeSerializer::serial_process(j,ctx,total_size ,"total_size") ; + + // Hack for backward compatibility (the chunk size is not directly next to the chunk data) + + if(j == RsItem::DESERIALIZE) + { + if(chunk_size > ctx.mSize || ctx.mOffset > ctx.mSize - chunk_size) // better than if(chunk_size + offset > size) + { + std::cerr << __PRETTY_FUNCTION__ << ": Cannot read beyond item size. Serialisation error!" << std::endl; + ctx.mOk = false ; + return ; + } + if( NULL == (chunk_data = (uint8_t*)rs_malloc(chunk_size))) + { + ctx.mOk = false ; + return ; + } + + memcpy(chunk_data,&((uint8_t*)ctx.mData)[ctx.mOffset],chunk_size) ; + ctx.mOffset += chunk_size ; + } + else if(j== RsItem::SERIALIZE) + { + memcpy(&((uint8_t*)ctx.mData)[ctx.mOffset],chunk_data,chunk_size) ; + ctx.mOffset += chunk_size ; + } + else if(j== RsItem::SIZE_ESTIMATE) + ctx.mOffset += chunk_size ; + else + std::cerr << " [Binary data] " << ", length=" << chunk_size << " data=" << RsUtil::BinToHex((uint8_t*)chunk_data,std::min(50u,chunk_size)) << ((chunk_size>50)?"...":"") << std::endl; + +} +#ifdef TO_REMOVE RsGRouterTransactionChunkItem *RsGRouterSerialiser::deserialise_RsGRouterTransactionChunkItem(void *data, uint32_t tlvsize) const { uint32_t offset = 8; // skip the header @@ -104,6 +110,14 @@ RsGRouterTransactionChunkItem *RsGRouterSerialiser::deserialise_RsGRouterTransac return item; } +#endif + +void RsGRouterTransactionAcknItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,propagation_id,"propagation_id") ; +} + +#ifdef TO_REMOVE RsGRouterTransactionAcknItem *RsGRouterSerialiser::deserialise_RsGRouterTransactionAcknItem(void *data, uint32_t tlvsize) const { uint32_t offset = 8; // skip the header @@ -124,6 +138,41 @@ RsGRouterTransactionAcknItem *RsGRouterSerialiser::deserialise_RsGRouterTransact return item; } +#endif + +void RsGRouterGenericDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,routing_id,"routing_id") ; + RsTypeSerializer::serial_process (j,ctx,destination_key,"destination_key") ; + RsTypeSerializer::serial_process(j,ctx,service_id,"service_id") ; + + RsTypeSerializer::TlvMemBlock_proxy prox(data_bytes,data_size) ; + + RsTypeSerializer::serial_process(j,ctx,prox,"data") ; + + if(ctx.mFlags & RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE) + return ; + + RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; + RsTypeSerializer::serial_process(j,ctx,duplication_factor,"duplication_factor") ; + RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; + + if(j == RsItem::DESERIALIZE) // make sure the duplication factor is not altered by friends. In the worst case, the item will duplicate a bit more. + { + if(duplication_factor < 1) + { + duplication_factor = 1 ; + std::cerr << "(II) correcting GRouter item duplication factor from 0 to 1, to ensure backward compat." << std::endl; + } + if(duplication_factor > GROUTER_MAX_DUPLICATION_FACTOR) + { + std::cerr << "(WW) correcting GRouter item duplication factor of " << duplication_factor << ". This is very unexpected." << std::endl; + duplication_factor = GROUTER_MAX_DUPLICATION_FACTOR ; + } + } +} + +#ifdef TO_REMOVE RsGRouterGenericDataItem *RsGRouterSerialiser::deserialise_RsGRouterGenericDataItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -191,7 +240,23 @@ RsGRouterGenericDataItem *RsGRouterSerialiser::deserialise_RsGRouterGenericDataI return item; } +#endif +void RsGRouterSignedReceiptItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,routing_id,"routing_id") ; + RsTypeSerializer::serial_process (j,ctx,flags,"flags") ; + RsTypeSerializer::serial_process (j,ctx,destination_key,"destination_key") ; + RsTypeSerializer::serial_process (j,ctx,service_id,"service_id") ; + RsTypeSerializer::serial_process (j,ctx,data_hash,"data_hash") ; + + if(ctx.mFlags & RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE) + return ; + + RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; +} + +#ifdef TO_REMOVE RsGRouterSignedReceiptItem *RsGRouterSerialiser::deserialise_RsGRouterSignedReceiptItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -216,7 +281,76 @@ RsGRouterSignedReceiptItem *RsGRouterSerialiser::deserialise_RsGRouterSignedRece return item; } +#endif +void RsGRouterRoutingInfoItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; + RsTypeSerializer::serial_process(j,ctx,data_status,"data_status") ; + RsTypeSerializer::serial_process(j,ctx,tunnel_status,"tunnel_status") ; + RsTypeSerializer::serial_process (j,ctx,received_time_TS,"received_time_TS") ; + RsTypeSerializer::serial_process (j,ctx,last_sent_TS,"last_sent_TS") ; + + RsTypeSerializer::serial_process (j,ctx,last_tunnel_request_TS,"last_tunnel_request_TS") ; + RsTypeSerializer::serial_process(j,ctx,sending_attempts,"sending_attempts") ; + + RsTypeSerializer::serial_process(j,ctx,client_id,"client_id") ; + RsTypeSerializer::serial_process (j,ctx,item_hash,"item_hash") ; + RsTypeSerializer::serial_process (j,ctx,tunnel_hash,"tunnel_hash") ; + RsTypeSerializer::serial_process(j,ctx,routing_flags,"routing_flags") ; + + RsTypeSerializer::serial_process(j,ctx,incoming_routes,"incoming_routes") ; + + // Hack for backward compatibility. Normally we should need a single commandline to serialise/deserialise a single item here. + // But the full item is serialised, so we need the header. + + if(j == RsItem::DESERIALIZE) + { + data_item = new RsGRouterGenericDataItem() ; + + ctx.mOffset += 8 ; + data_item->serial_process(j,ctx) ; + + if(ctx.mOffset < ctx.mSize) + { + receipt_item = new RsGRouterSignedReceiptItem(); + + ctx.mOffset += 8 ; + receipt_item->serial_process(j,ctx) ; + } + else + receipt_item = NULL ; + } + else if(j == RsItem::SERIALIZE) + { + uint32_t remaining_size = ctx.mSize - ctx.mOffset; + ctx.mOk = ctx.mOk && RsGRouterSerialiser().serialise(data_item,ctx.mData,&remaining_size) ; + ctx.mOffset += RsGRouterSerialiser().size(data_item) ; + + if(receipt_item != NULL) + { + remaining_size = ctx.mSize - ctx.mOffset; + ctx.mOk = ctx.mOk && RsGRouterSerialiser().serialise(data_item,ctx.mData,&remaining_size); + ctx.mOffset += RsGRouterSerialiser().size(data_item) ; + } + } + else if(j == RsItem::PRINT) + { + std::cerr << " [Serialized data] " << std::endl; + + if(receipt_item != NULL) + std::cerr << " [Receipt item ]" << std::endl; + } + else if(j == RsItem::SIZE_ESTIMATE) + { + ctx.mOffset += RsGRouterSerialiser().size(data_item) ; + + if(receipt_item != NULL) + ctx.mOffset += RsGRouterSerialiser().size(receipt_item) ; + } +} + +#ifdef TO_REMOVE RsGRouterRoutingInfoItem *RsGRouterSerialiser::deserialise_RsGRouterRoutingInfoItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -274,6 +408,14 @@ RsGRouterRoutingInfoItem *RsGRouterSerialiser::deserialise_RsGRouterRoutingInfoI return item; } +#endif + +void RsGRouterMatrixFriendListItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,reverse_friend_indices,"reverse_friend_indices") ; +} + +#ifdef TO_REMOVE RsGRouterMatrixFriendListItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixFriendListItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -299,7 +441,16 @@ RsGRouterMatrixFriendListItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixF return item; } +#endif +void RsGRouterMatrixTrackItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,provider_id,"provider_id") ; + RsTypeSerializer::serial_process(j,ctx,message_id,"message_id") ; + RsTypeSerializer::serial_process(j,ctx,time_stamp,"time_stamp") ; +} + +#ifdef TO_REMOVE RsGRouterMatrixTrackItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixTrackItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -321,6 +472,22 @@ RsGRouterMatrixTrackItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixTrackI return item; } +#endif + +void RsGRouterMatrixCluesItem::serial_process(SerializeJob j,SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,destination_key,"destination_key") ; + RsTypeSerializer::serial_process(j,ctx,clues,"clues") ; +} + +template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,RoutingMatrixHitEntry& s,const std::string& name) +{ + RsTypeSerializer::serial_process(j,ctx,s.friend_id,name+":friend_id") ; + RsTypeSerializer::serial_process (j,ctx,s.weight,name+":weight") ; + RsTypeSerializer::serial_process (j,ctx,s.time_stamp,name+":time_stamp") ; +} + +#ifdef TO_REMOVE RsGRouterMatrixCluesItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixCluesItem(void *data, uint32_t pktsize) const { uint32_t offset = 8; // skip the header @@ -356,6 +523,8 @@ RsGRouterMatrixCluesItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixCluesI return item; } +#endif + RsGRouterGenericDataItem *RsGRouterGenericDataItem::duplicate() const { RsGRouterGenericDataItem *item = new RsGRouterGenericDataItem ; @@ -393,6 +562,8 @@ RsGRouterSignedReceiptItem *RsGRouterSignedReceiptItem::duplicate() const return item ; } + +#ifdef TO_REMOVE uint32_t RsGRouterGenericDataItem::serial_size() const { uint32_t s = 8 ; // header @@ -896,3 +1067,4 @@ std::ostream& RsGRouterMatrixFriendListItem::print(std::ostream& o, uint16_t) return o ; } +#endif diff --git a/libretroshare/src/grouter/grouteritems.h b/libretroshare/src/grouter/grouteritems.h index af78866c0..7c69d4718 100644 --- a/libretroshare/src/grouter/grouteritems.h +++ b/libretroshare/src/grouter/grouteritems.h @@ -63,14 +63,7 @@ class RsGRouterItem: public RsItem virtual ~RsGRouterItem() {} - virtual bool serialise(void *data,uint32_t& size) const = 0 ; - virtual uint32_t serial_size() const = 0 ; - virtual void clear() = 0 ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0; - - protected: - bool serialise_header(void *data, uint32_t& pktsize, uint32_t& tlvsize, uint32_t& offset) const; }; /***********************************************************************************/ @@ -100,14 +93,11 @@ public: RsGRouterAbstractMsgItem(uint8_t pkt_subtype) : RsGRouterItem(pkt_subtype) {} virtual ~RsGRouterAbstractMsgItem() {} - virtual uint32_t signed_data_size() const = 0 ; - virtual bool serialise_signed_data(void *data,uint32_t size) const = 0 ; - GRouterMsgPropagationId routing_id ; GRouterKeyId destination_key ; GRouterServiceId service_id ; RsTlvKeySignature signature ; // signs mid+destination_key+state - uint32_t flags ; // packet was delivered, not delivered, bounced, etc + uint32_t flags ; // packet was delivered, not delivered, bounced, etc }; class RsGRouterGenericDataItem: public RsGRouterAbstractMsgItem, public RsGRouterNonCopyableObject @@ -116,15 +106,13 @@ class RsGRouterGenericDataItem: public RsGRouterAbstractMsgItem, public RsGRoute RsGRouterGenericDataItem() : RsGRouterAbstractMsgItem(RS_PKT_SUBTYPE_GROUTER_DATA) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } virtual ~RsGRouterGenericDataItem() { clear() ; } - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; - virtual void clear() { free(data_bytes); data_bytes=NULL; } - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsGRouterGenericDataItem *duplicate() const ; @@ -132,35 +120,23 @@ class RsGRouterGenericDataItem: public RsGRouterAbstractMsgItem, public RsGRoute // uint32_t data_size ; uint8_t *data_bytes; - uint32_t duplication_factor ; // number of duplicates allowed. Should be capped at each de-serialise operation! - - // utility methods for signing data - virtual uint32_t signed_data_size() const ; - virtual bool serialise_signed_data(void *data, uint32_t size) const ; }; class RsGRouterSignedReceiptItem: public RsGRouterAbstractMsgItem { public: RsGRouterSignedReceiptItem() : RsGRouterAbstractMsgItem(RS_PKT_SUBTYPE_GROUTER_SIGNED_RECEIPT) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } - virtual ~RsGRouterSignedReceiptItem() {} - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual ~RsGRouterSignedReceiptItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); RsGRouterSignedReceiptItem *duplicate() const ; // packet data // - Sha1CheckSum data_hash ; // avoids an attacker to re-use a given signed receipt. This is the hash of the enceypted data. - - // utility methods for signing data - virtual uint32_t signed_data_size() const ; - virtual bool serialise_signed_data(void *data, uint32_t size) const ; + Sha1CheckSum data_hash ; // avoids an attacker to re-use a given signed receipt. This is the hash of the enceypted data. }; // Low-level data items @@ -170,62 +146,55 @@ class RsGRouterTransactionItem: public RsGRouterItem public: RsGRouterTransactionItem(uint8_t pkt_subtype) : RsGRouterItem(pkt_subtype) {} - virtual ~RsGRouterTransactionItem() {} + virtual ~RsGRouterTransactionItem() {} - virtual bool serialise(void *data,uint32_t& size) const =0; - virtual uint32_t serial_size() const =0; virtual void clear() =0; - virtual RsGRouterTransactionItem *duplicate() const = 0 ; + virtual RsGRouterTransactionItem *duplicate() const = 0 ; }; class RsGRouterTransactionChunkItem: public RsGRouterTransactionItem, public RsGRouterNonCopyableObject { - public: - RsGRouterTransactionChunkItem() : RsGRouterTransactionItem(RS_PKT_SUBTYPE_GROUTER_TRANSACTION_CHUNK) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } +public: + RsGRouterTransactionChunkItem() : RsGRouterTransactionItem(RS_PKT_SUBTYPE_GROUTER_TRANSACTION_CHUNK) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } - virtual ~RsGRouterTransactionChunkItem() { free(chunk_data) ; } + virtual ~RsGRouterTransactionChunkItem() { free(chunk_data) ; } - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void clear() {} + virtual void serial_process(SerializeJob j,SerializeContext& ctx); - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + virtual RsGRouterTransactionItem *duplicate() const + { + RsGRouterTransactionChunkItem *item = new RsGRouterTransactionChunkItem ; + *item = *this ; // copy all fields + item->chunk_data = (uint8_t*)rs_malloc(chunk_size) ; // deep copy memory chunk - virtual RsGRouterTransactionItem *duplicate() const - { - RsGRouterTransactionChunkItem *item = new RsGRouterTransactionChunkItem ; - *item = *this ; // copy all fields - item->chunk_data = (uint8_t*)rs_malloc(chunk_size) ; // deep copy memory chunk - - if(item->chunk_data == NULL) - return NULL ; - - memcpy(item->chunk_data,chunk_data,chunk_size) ; - return item ; - } + if(item->chunk_data == NULL) + return NULL ; - GRouterMsgPropagationId propagation_id ; - uint32_t chunk_start ; - uint32_t chunk_size ; - uint32_t total_size ; - uint8_t *chunk_data ; + memcpy(item->chunk_data,chunk_data,chunk_size) ; + return item ; + } + + GRouterMsgPropagationId propagation_id ; + uint32_t chunk_start ; + uint32_t chunk_size ; + uint32_t total_size ; + uint8_t *chunk_data ; }; class RsGRouterTransactionAcknItem: public RsGRouterTransactionItem { - public: - RsGRouterTransactionAcknItem() : RsGRouterTransactionItem(RS_PKT_SUBTYPE_GROUTER_TRANSACTION_ACKN) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } - virtual ~RsGRouterTransactionAcknItem() {} +public: + RsGRouterTransactionAcknItem() : RsGRouterTransactionItem(RS_PKT_SUBTYPE_GROUTER_TRANSACTION_ACKN) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } + virtual ~RsGRouterTransactionAcknItem() {} - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + virtual void clear() {} - virtual RsGRouterTransactionItem *duplicate() const { return new RsGRouterTransactionAcknItem(*this) ; } + virtual RsGRouterTransactionItem *duplicate() const { return new RsGRouterTransactionAcknItem(*this) ; } - GRouterMsgPropagationId propagation_id ; + GRouterMsgPropagationId propagation_id ; }; // Items for saving the routing matrix information. @@ -236,11 +205,8 @@ class RsGRouterMatrixCluesItem: public RsGRouterItem RsGRouterMatrixCluesItem() : RsGRouterItem(RS_PKT_SUBTYPE_GROUTER_MATRIX_CLUES) { setPriorityLevel(0) ; } // this item is never sent through the network - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); // packet data // @@ -254,17 +220,15 @@ class RsGRouterMatrixTrackItem: public RsGRouterItem RsGRouterMatrixTrackItem() : RsGRouterItem(RS_PKT_SUBTYPE_GROUTER_MATRIX_TRACK) { setPriorityLevel(0) ; } // this item is never sent through the network - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; // packet data // RsGxsMessageId message_id ; - RsPeerId provider_id ; - time_t time_stamp ; + RsPeerId provider_id ; + time_t time_stamp ; }; class RsGRouterMatrixFriendListItem: public RsGRouterItem { @@ -272,11 +236,8 @@ class RsGRouterMatrixFriendListItem: public RsGRouterItem RsGRouterMatrixFriendListItem() : RsGRouterItem(RS_PKT_SUBTYPE_GROUTER_FRIENDS_LIST) { setPriorityLevel(0) ; } // this item is never sent through the network - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; - - virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void clear() {} // packet data // @@ -291,8 +252,7 @@ class RsGRouterRoutingInfoItem: public RsGRouterItem, public GRouterRoutingInfo, virtual ~RsGRouterRoutingInfoItem() { clear() ; } - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(SerializeJob j,SerializeContext& ctx); virtual void clear() { @@ -302,47 +262,18 @@ class RsGRouterRoutingInfoItem: public RsGRouterItem, public GRouterRoutingInfo, data_item = NULL ; receipt_item = NULL ; } - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) ; }; /***********************************************************************************/ /* Serialisation */ /***********************************************************************************/ -class RsGRouterSerialiser: public RsSerialType +class RsGRouterSerialiser: public RsServiceSerializer { public: - RsGRouterSerialiser() : RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GROUTER) {} + RsGRouterSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsServiceSerializer(RS_SERVICE_TYPE_GROUTER,SerializeContext::FORMAT_BINARY,flags) {} - virtual uint32_t size (RsItem *item) - { - RsGRouterItem *gitem = dynamic_cast(item); - if (!gitem) - { - return 0; - } - return gitem->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - RsGRouterItem *gitem = dynamic_cast(item); - if (!gitem) - { - return false; - } - return gitem->serialise(data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) ; - -private: - RsGRouterGenericDataItem *deserialise_RsGRouterGenericDataItem(void *data,uint32_t size) const ; - RsGRouterTransactionChunkItem *deserialise_RsGRouterTransactionChunkItem(void *data,uint32_t size) const ; - RsGRouterTransactionAcknItem *deserialise_RsGRouterTransactionAcknItem(void *data,uint32_t size) const ; - RsGRouterSignedReceiptItem *deserialise_RsGRouterSignedReceiptItem(void *data,uint32_t size) const ; - RsGRouterMatrixCluesItem *deserialise_RsGRouterMatrixCluesItem(void *data,uint32_t size) const ; - RsGRouterMatrixTrackItem *deserialise_RsGRouterMatrixTrackItem(void *data,uint32_t size) const ; - RsGRouterMatrixFriendListItem *deserialise_RsGRouterMatrixFriendListItem(void *data,uint32_t size) const ; - RsGRouterRoutingInfoItem *deserialise_RsGRouterRoutingInfoItem(void *data,uint32_t size) const ; + virtual RsItem *create_item(uint16_t service,uint8_t subtype) const ; }; diff --git a/libretroshare/src/grouter/p3grouter.cc b/libretroshare/src/grouter/p3grouter.cc index f14af4412..998f7e636 100644 --- a/libretroshare/src/grouter/p3grouter.cc +++ b/libretroshare/src/grouter/p3grouter.cc @@ -1263,13 +1263,13 @@ bool p3GRouter::locked_sendTransactionData(const RsPeerId& pid,const RsGRouterTr #ifdef GROUTER_DEBUG std::cerr << " sending to tunnel vpid " << pid << std::endl; #endif - uint32_t turtle_data_size = trans_item.serial_size() ; + uint32_t turtle_data_size = RsGRouterSerialiser().size(const_cast(&trans_item)) ; uint8_t *turtle_data = (uint8_t*)rs_malloc(turtle_data_size) ; if(turtle_data == NULL) return false ; - if(!trans_item.serialise(turtle_data,turtle_data_size)) + if(!RsGRouterSerialiser().serialise(const_cast(&trans_item),turtle_data,&turtle_data_size)) { std::cerr << " ERROR: cannot serialise RsGRouterTransactionChunkItem." << std::endl; @@ -1428,7 +1428,7 @@ bool p3GRouter::sliceDataItem(RsGRouterAbstractMsgItem *item,std::listprint(std::cerr, 2) ; #endif - uint32_t size = item->serial_size(); + uint32_t size = RsGRouterSerialiser().size(item); RsTemporaryMemory data(size) ; // data will be freed on return, whatever the route taken. @@ -1438,7 +1438,7 @@ bool p3GRouter::sliceDataItem(RsGRouterAbstractMsgItem *item,std::listserialise(data,size)) + if(!RsGRouterSerialiser().serialise(item,data,&size)) { std::cerr << " ERROR: cannot serialise." << std::endl; throw ; @@ -1617,12 +1617,15 @@ void p3GRouter::handleIncomingReceiptItem(RsGRouterSignedReceiptItem *receipt_it Sha1CheckSum p3GRouter::computeDataItemHash(RsGRouterGenericDataItem *data_item) { - uint32_t total_size = data_item->signed_data_size() + data_item->signature.TlvSize() ; + RsGRouterSerialiser signature_serializer(RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE | RsGenericSerializer::SERIALIZATION_FLAG_SKIP_HEADER); + + uint32_t signed_data_size = signature_serializer.size(data_item); + uint32_t total_size = signed_data_size + data_item->signature.TlvSize() ; RsTemporaryMemory mem(total_size) ; uint32_t offset = 0 ; - data_item->serialise_signed_data(mem,total_size) ; - offset += data_item->signed_data_size() ; + signature_serializer.serialise(data_item,mem,&total_size) ; + offset += signed_data_size ; data_item->signature.SetTlv(mem, total_size,&offset) ; @@ -1948,28 +1951,45 @@ bool p3GRouter::signDataItem(RsGRouterAbstractMsgItem *item,const RsGxsId& signi { try { -#ifdef GROUTER_DEBUG +//#ifdef GROUTER_DEBUG std::cerr << "p3GRouter::signDataItem()" << std::endl; std::cerr << " Key ID = " << signing_id << std::endl; std::cerr << " Getting key material..." << std::endl; -#endif - uint32_t data_size = item->signed_data_size() ; - RsTemporaryMemory data(data_size) ; +//#endif + RsGRouterSerialiser signature_serializer(RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE | RsGenericSerializer::SERIALIZATION_FLAG_SKIP_HEADER) ; + uint32_t data_size = signature_serializer.size(item) ; + RsTemporaryMemory data(data_size) ; if(data == NULL) throw std::runtime_error("Cannot allocate memory for signing data.") ; - if(!item->serialise_signed_data(data,data_size)) + if(!signature_serializer.serialise(item,data,&data_size)) throw std::runtime_error("Cannot serialise signed data.") ; - uint32_t error_status ; + uint32_t error_status ; - if(!mGixs->signData(data,data_size,signing_id,item->signature,error_status)) - throw std::runtime_error("Cannot sign for id " + signing_id.toStdString() + ". Signature call failed.") ; + std::cerr << "GRouter::signing data" << std::endl; + std::cerr << " size: " << data_size << std::endl; + std::cerr << " data: " << RsUtil::BinToHex(data,data_size) << std::endl; -#ifdef GROUTER_DEBUG + if(!mGixs->signData(data,data_size,signing_id,item->signature,error_status)) + throw std::runtime_error("Cannot sign for id " + signing_id.toStdString() + ". Signature call failed.") ; + +//#ifdef GROUTER_DEBUG std::cerr << "Created signature for data hash: " << RsDirUtil::sha1sum(data,data_size) << " and key id=" << signing_id << std::endl; -#endif +//#endif + // Check signature + RsIdentityUsage::UsageCode info; + uint32_t error; + + if(verifySignedDataItem(item,info,error)) + std::cerr << "Signature checks." << std::endl; + else + { + std::cerr << "(EE) Cannot verify own signed item. Something's wrong." << std::endl; + return false ; + } + return true ; } catch(std::exception& e) @@ -1989,15 +2009,16 @@ bool p3GRouter::verifySignedDataItem(RsGRouterAbstractMsgItem *item,const RsIden std::cerr << "(WW) received global router message from banned identity " << item->signature.keyId << ". Rejecting the message." << std::endl; return false ; } + RsGRouterSerialiser signature_serializer(RsGenericSerializer::SERIALIZATION_FLAG_SIGNATURE | RsGenericSerializer::SERIALIZATION_FLAG_SKIP_HEADER); - uint32_t data_size = item->signed_data_size() ; - RsTemporaryMemory data(data_size) ; + uint32_t data_size = signature_serializer.size(item) ; + RsTemporaryMemory data(data_size) ; - if(data == NULL) - throw std::runtime_error("Cannot allocate data.") ; + if(data == NULL) + throw std::runtime_error("Cannot allocate data.") ; - if(!item->serialise_signed_data(data,data_size)) - throw std::runtime_error("Cannot serialise signed data.") ; + if(!signature_serializer.serialise(item,data,&data_size)) + throw std::runtime_error("Cannot serialise signed data.") ; RsIdentityUsage use(RS_SERVICE_TYPE_GROUTER,info) ; diff --git a/libretroshare/src/pqi/pqistore.cc b/libretroshare/src/pqi/pqistore.cc index ca6d23820..4a962cf29 100644 --- a/libretroshare/src/pqi/pqistore.cc +++ b/libretroshare/src/pqi/pqistore.cc @@ -524,7 +524,7 @@ int pqiSSLstore::readPkt(RsItem **item_out) int extralen = getRsItemSize(block) - blen; int totallen = extralen+blen; - if(totallen > 1024*1024) + if(totallen > 1024*1024 || totallen((const void*)data)) ; RsItem *item = create_item(getRsItemService(rstype),getRsItemSubType(rstype)) ; if(!item) { - std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << getRsItemSubType(rstype) << std::dec << std::endl; + std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << (int)getRsItemSubType(rstype) << std::dec << std::endl; std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; return NULL ; } @@ -40,13 +47,19 @@ RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) } RsItem *RsConfigSerializer::deserialise(void *data, uint32_t *size) { + if(mFlags & SERIALIZATION_FLAG_SKIP_HEADER) + { + std::cerr << "(EE) Cannot deserialise item with flags SERIALIZATION_FLAG_SKIP_HEADER. Check your code!" << std::endl; + return NULL ; + } + uint32_t rstype = getRsItemId(const_cast((const void*)data)) ; RsItem *item = create_item(getRsItemType(rstype),getRsItemSubType(rstype)) ; if(!item) { - std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << getRsItemSubType(rstype) << std::dec << std::endl; + std::cerr << "(EE) " << typeid(*this).name() << ": cannot deserialise unknown item subtype " << std::hex << (int)getRsItemSubType(rstype) << std::dec << std::endl; std::cerr << "(EE) Data is: " << RsUtil::BinToHex(static_cast(data),std::min(50u,*size)) << ((*size>50)?"...":"") << std::endl; return NULL ; } @@ -77,12 +90,19 @@ bool RsGenericSerializer::serialise(RsItem *item,void *data,uint32_t *size) if(tlvsize > *size) throw std::runtime_error("Cannot serialise: not enough room.") ; - if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) + + if(mFlags & SERIALIZATION_FLAG_SKIP_HEADER) + ctx.mOffset = 0; + else { - std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; - return false ; + if(!setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize)) + { + std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl; + return false ; + } + ctx.mOffset = 8; } - ctx.mOffset = 8; + ctx.mSize = tlvsize; item->serial_process(RsItem::SERIALIZE,ctx) ; @@ -99,7 +119,10 @@ uint32_t RsGenericSerializer::size(RsItem *item) { SerializeContext ctx(NULL,0,mFormat,mFlags); - ctx.mOffset = 8 ; // header size + if(mFlags & SERIALIZATION_FLAG_SKIP_HEADER) + ctx.mOffset = 0; + else + ctx.mOffset = 8 ; // header size item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; return ctx.mOffset ; diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 3285becf9..700b690f5 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -24,6 +24,7 @@ public: static const SerializationFlags SERIALIZATION_FLAG_NONE ; // 0x0000 static const SerializationFlags SERIALIZATION_FLAG_CONFIG ; // 0x0001 static const SerializationFlags SERIALIZATION_FLAG_SIGNATURE ; // 0x0002 + static const SerializationFlags SERIALIZATION_FLAG_SKIP_HEADER ; // 0x0004 // The following functions overload RsSerialType. They *should not* need to be further overloaded. From 9c610a736da2f1caefcaead5762af23ccdb24e01 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 11:40:46 +0200 Subject: [PATCH 178/230] cleaned the hierarchy of serialization classes --- libretroshare/src/chat/rschatitems.cc | 28 +++--- libretroshare/src/chat/rschatitems.h | 30 +++--- .../src/file_sharing/rsfilelistitems.cc | 6 +- .../src/file_sharing/rsfilelistitems.h | 5 +- .../src/ft/ftturtlefiletransferitem.cc | 12 +-- .../src/ft/ftturtlefiletransferitem.h | 12 +-- libretroshare/src/grouter/grouteritems.cc | 40 ++++---- libretroshare/src/grouter/grouteritems.h | 18 ++-- .../src/gxstunnel/rsgxstunnelitems.h | 5 +- libretroshare/src/libretroshare.pro | 3 +- libretroshare/src/pqi/p3servicecontrol.cc | 1 + libretroshare/src/pqi/pqi.h | 3 +- libretroshare/src/pqi/pqiqos.cc | 4 + libretroshare/src/pqi/pqistore.cc | 1 + libretroshare/src/rsitems/rsbanlistitems.cc | 4 +- libretroshare/src/rsitems/rsbanlistitems.h | 6 +- libretroshare/src/rsitems/rsbwctrlitems.cc | 2 +- libretroshare/src/rsitems/rsbwctrlitems.h | 6 +- libretroshare/src/rsitems/rsconfigitems.cc | 19 ++-- libretroshare/src/rsitems/rsconfigitems.h | 18 ++-- .../src/rsitems/rsdiscovery2items.cc | 8 +- libretroshare/src/rsitems/rsdiscovery2items.h | 8 +- .../src/rsitems/rsfiletransferitems.cc | 12 +-- .../src/rsitems/rsfiletransferitems.h | 14 +-- .../src/rsitems/rsgxsreputationitems.cc | 10 +- .../src/rsitems/rsgxsreputationitems.h | 13 ++- libretroshare/src/rsitems/rshistoryitems.cc | 4 +- libretroshare/src/rsitems/rshistoryitems.h | 2 +- libretroshare/src/rsitems/rsitem.h | 90 ++++++++++++++++++ libretroshare/src/rsitems/rsmsgitems.cc | 18 ++-- libretroshare/src/rsitems/rsmsgitems.h | 18 ++-- libretroshare/src/rsitems/rsrttitems.cc | 6 +- libretroshare/src/rsitems/rsrttitems.h | 6 +- libretroshare/src/serialiser/rsgxsitems.h | 1 + .../src/serialiser/rsgxsrecognitems.h | 3 + .../src/serialiser/rsheartbeatitems.h | 2 + libretroshare/src/serialiser/rsnxsitems.h | 1 + libretroshare/src/serialiser/rsserial.cc | 5 +- libretroshare/src/serialiser/rsserial.h | 94 +------------------ .../src/serialiser/rsserviceinfoitems.h | 3 + .../src/serialiser/rsserviceserialiser.cc | 1 + libretroshare/src/serialiser/rsstatusitems.h | 3 +- .../src/serialization/rsserializer.cc | 12 ++- .../src/serialization/rsserializer.h | 35 +++++-- .../src/serialization/rstypeserializer.h | 84 +++++++---------- libretroshare/src/services/p3service.cc | 2 + libretroshare/src/turtle/rsturtleitem.cc | 12 +-- libretroshare/src/turtle/rsturtleitem.h | 18 ++-- 48 files changed, 382 insertions(+), 326 deletions(-) create mode 100644 libretroshare/src/rsitems/rsitem.h diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 7aa0dd4f3..06bb063a7 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -62,7 +62,7 @@ RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) c } } -void RsChatMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,chatFlags,"chatflags") ; RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; @@ -80,7 +80,7 @@ RsChatAvatarItem::~RsChatAvatarItem() } } -void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx) +void RsChatLobbyBouncingObject::serial_process(RsGenericSerializer::SerializeJob j, RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ; @@ -90,19 +90,19 @@ void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, Serialize RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } -void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsChatMsgItem::serial_process(j,ctx) ; RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ; RsChatLobbyBouncingObject::serial_process(j,ctx) ; } -void RsChatLobbyListRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyListRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { // nothing to do. This is an empty item. } -template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& name) +template<> void RsTypeSerializer::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& name) { RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; @@ -112,12 +112,12 @@ template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,Serializ RsTypeSerializer::serial_process (j,ctx, info.flags,"info.flags") ; } -void RsChatLobbyListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobbies,"lobbies") ; } -void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyEventItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,event_type,"event_type") ; RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ; @@ -125,24 +125,24 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex RsChatLobbyBouncingObject::serial_process(j,ctx) ; } -void RsChatLobbyUnsubscribeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyUnsubscribeItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ; } -void RsChatLobbyConnectChallengeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyConnectChallengeItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,challenge_code,"challenge_code") ; } -void RsChatLobbyInviteItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyInviteItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx, lobby_id, "lobby_id") ; RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,lobby_name, "lobby_name") ; RsTypeSerializer::serial_process (j,ctx, lobby_flags,"lobby_flags") ; } -void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsPrivateChatMsgConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { uint32_t x=0 ; @@ -154,19 +154,19 @@ void RsPrivateChatMsgConfigItem::serial_process(RsItem::SerializeJob j,Serialize RsTypeSerializer::serial_process(j,ctx, recvTime, "recvTime") ; } -void RsChatStatusItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatStatusItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,status_string,"status_string") ; } -void RsChatAvatarItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatAvatarItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::TlvMemBlock_proxy b(image_data,image_size) ; RsTypeSerializer::serial_process(j,ctx,b,"image data") ; } -void RsChatLobbyConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsChatLobbyConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,lobby_Id,"lobby_Id") ; RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 1766dbfec..06de87c7f 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -30,6 +30,8 @@ #include "serialization/rsserializer.h" #include "serialiser/rstlvkeys.h" #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" +#include "rsitems/rsitem.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" @@ -112,7 +114,7 @@ public: // derived from RsItem - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} uint32_t chatFlags; @@ -142,7 +144,7 @@ protected: // They are called by serial_size() and serialise() from children, but should not overload the serial_size() and // serialise() methods, otherwise the wrong method will be called when serialising from this top level class. - virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual uint32_t PacketId() const= 0; }; @@ -155,7 +157,7 @@ public: virtual ~RsChatLobbyMsgItem() {} virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyMsgItem(*this) ; } - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); ChatLobbyMsgId parent_msg_id ; // Used for threaded chat. @@ -171,7 +173,7 @@ public: virtual ~RsChatLobbyEventItem() {} virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; } // - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // members. // @@ -189,7 +191,7 @@ class RsChatLobbyListRequestItem: public RsChatItem RsChatLobbyListRequestItem() : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST) {} virtual ~RsChatLobbyListRequestItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; struct VisibleChatLobbyInfo @@ -207,7 +209,7 @@ class RsChatLobbyListItem: public RsChatItem RsChatLobbyListItem() : RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_LIST) {} virtual ~RsChatLobbyListItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); std::vector lobbies ; }; @@ -219,7 +221,7 @@ class RsChatLobbyUnsubscribeItem: public RsChatItem virtual ~RsChatLobbyUnsubscribeItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint64_t lobby_id ; }; @@ -231,7 +233,7 @@ class RsChatLobbyConnectChallengeItem: public RsChatItem virtual ~RsChatLobbyConnectChallengeItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint64_t challenge_code ; }; @@ -242,7 +244,7 @@ class RsChatLobbyInviteItem: public RsChatItem RsChatLobbyInviteItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE) {} virtual ~RsChatLobbyInviteItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); ChatLobbyId lobby_id ; std::string lobby_name ; @@ -262,7 +264,7 @@ class RsPrivateChatMsgConfigItem: public RsChatItem virtual ~RsPrivateChatMsgConfigItem() {} virtual void clear() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); /* set data from RsChatMsgItem to RsPrivateChatMsgConfigItem */ void set(RsChatMsgItem *ci, const RsPeerId &peerId, uint32_t confFlags); @@ -286,7 +288,7 @@ public: virtual void clear() { lobby_Id = 0; } - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint64_t lobby_Id; uint32_t flags ; @@ -301,7 +303,7 @@ class RsChatStatusItem: public RsChatItem virtual ~RsChatStatusItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t flags ; std::string status_string; @@ -315,7 +317,7 @@ class RsChatAvatarItem: public RsChatItem RsChatAvatarItem() :RsChatItem(RS_PKT_SUBTYPE_CHAT_AVATAR) {setPriorityLevel(QOS_PRIORITY_RS_CHAT_AVATAR_ITEM) ;} virtual ~RsChatAvatarItem() ; - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t image_size ; // size of data in bytes unsigned char *image_data ; // image @@ -325,7 +327,7 @@ class RsChatSerialiser: public RsServiceSerializer { public: RsChatSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) - :RsServiceSerializer(RS_SERVICE_TYPE_CHAT,SerializeContext::FORMAT_BINARY,flags) {} + :RsServiceSerializer(RS_SERVICE_TYPE_CHAT,RsGenericSerializer::FORMAT_BINARY,flags) {} virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ; }; diff --git a/libretroshare/src/file_sharing/rsfilelistitems.cc b/libretroshare/src/file_sharing/rsfilelistitems.cc index 85a94488f..6934f29d2 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.cc +++ b/libretroshare/src/file_sharing/rsfilelistitems.cc @@ -24,16 +24,18 @@ */ #include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" + #include "file_sharing/rsfilelistitems.h" -void RsFileListsSyncRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsFileListsSyncRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,entry_hash,"entry_hash") ; RsTypeSerializer::serial_process(j,ctx,flags ,"flags") ; RsTypeSerializer::serial_process(j,ctx,last_known_recurs_modf_TS,"last_known_recurs_modf_TS") ; RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; } -void RsFileListsSyncResponseItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsFileListsSyncResponseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,entry_hash,"entry_hash") ; RsTypeSerializer::serial_process (j,ctx,checksum,"checksum") ; diff --git a/libretroshare/src/file_sharing/rsfilelistitems.h b/libretroshare/src/file_sharing/rsfilelistitems.h index 391d3dd88..8e45ef251 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.h +++ b/libretroshare/src/file_sharing/rsfilelistitems.h @@ -28,6 +28,7 @@ #include #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvitem.h" @@ -78,7 +79,7 @@ public: virtual void clear(){} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsFileHash entry_hash ; // hash of the directory to sync uint32_t flags; // used to say that it's a request or a response, say that the directory has been removed, ask for further update, etc. @@ -94,7 +95,7 @@ public: virtual void clear(); - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsFileHash entry_hash ; // hash of the directory to sync RsFileHash checksum ; // checksum of the bindary data, for checking diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index 5c343b7fa..3009fb87c 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -32,37 +32,37 @@ #include -void RsTurtleFileMapRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleFileMapRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,direction,"direction") ; } -void RsTurtleFileMapItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleFileMapItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,direction,"direction") ; RsTypeSerializer::serial_process (j,ctx,compressed_map._map,"map") ; } -void RsTurtleChunkCrcRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleChunkCrcRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; } -void RsTurtleChunkCrcItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleChunkCrcItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; RsTypeSerializer::serial_process (j,ctx,check_sum,"check_sum") ; } -void RsTurtleFileRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleFileRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_offset,"chunk_offset") ; RsTypeSerializer::serial_process(j,ctx,chunk_size,"chunk_size") ; } -void RsTurtleFileDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleFileDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_offset,"chunk_offset") ; diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.h b/libretroshare/src/ft/ftturtlefiletransferitem.h index fd8aada93..ce4a25217 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.h +++ b/libretroshare/src/ft/ftturtlefiletransferitem.h @@ -43,7 +43,7 @@ class RsTurtleFileRequestItem: public RsTurtleGenericTunnelItem void clear() {} protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleFileDataItem: public RsTurtleGenericTunnelItem @@ -67,7 +67,7 @@ class RsTurtleFileDataItem: public RsTurtleGenericTunnelItem uint32_t chunk_size ; // size of the file chunk void *chunk_data ; // actual data. - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleFileMapRequestItem: public RsTurtleGenericTunnelItem @@ -78,7 +78,7 @@ class RsTurtleFileMapRequestItem: public RsTurtleGenericTunnelItem virtual bool shouldStampTunnel() const { return false ; } void clear() {} - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem @@ -93,7 +93,7 @@ class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem // with the default file map for this source. void clear() { compressed_map._map.clear() ;} - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleChunkCrcRequestItem: public RsTurtleGenericTunnelItem @@ -107,7 +107,7 @@ class RsTurtleChunkCrcRequestItem: public RsTurtleGenericTunnelItem uint32_t chunk_number ; // id of the chunk to CRC. void clear() {} - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleChunkCrcItem: public RsTurtleGenericTunnelItem @@ -122,5 +122,5 @@ class RsTurtleChunkCrcItem: public RsTurtleGenericTunnelItem Sha1CheckSum check_sum ; void clear() { check_sum.clear() ;} - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; diff --git a/libretroshare/src/grouter/grouteritems.cc b/libretroshare/src/grouter/grouteritems.cc index c48dbc134..48da81548 100644 --- a/libretroshare/src/grouter/grouteritems.cc +++ b/libretroshare/src/grouter/grouteritems.cc @@ -3,6 +3,8 @@ #include "serialiser/rstlvbase.h" #include "grouteritems.h" +#include "serialization/rstypeserializer.h" + /**********************************************************************************************/ /* SERIALISER STUFF */ /**********************************************************************************************/ @@ -28,7 +30,7 @@ RsItem *RsGRouterSerialiser::create_item(uint16_t service_id,uint8_t subtype) co } } -void RsGRouterTransactionChunkItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterTransactionChunkItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,propagation_id,"propagation_id") ; RsTypeSerializer::serial_process(j,ctx,chunk_start ,"chunk_start") ; @@ -37,7 +39,7 @@ void RsGRouterTransactionChunkItem::serial_process(SerializeJob j,SerializeConte // Hack for backward compatibility (the chunk size is not directly next to the chunk data) - if(j == RsItem::DESERIALIZE) + if(j == RsGenericSerializer::DESERIALIZE) { if(chunk_size > ctx.mSize || ctx.mOffset > ctx.mSize - chunk_size) // better than if(chunk_size + offset > size) { @@ -54,12 +56,12 @@ void RsGRouterTransactionChunkItem::serial_process(SerializeJob j,SerializeConte memcpy(chunk_data,&((uint8_t*)ctx.mData)[ctx.mOffset],chunk_size) ; ctx.mOffset += chunk_size ; } - else if(j== RsItem::SERIALIZE) + else if(j== RsGenericSerializer::SERIALIZE) { memcpy(&((uint8_t*)ctx.mData)[ctx.mOffset],chunk_data,chunk_size) ; ctx.mOffset += chunk_size ; } - else if(j== RsItem::SIZE_ESTIMATE) + else if(j== RsGenericSerializer::SIZE_ESTIMATE) ctx.mOffset += chunk_size ; else std::cerr << " [Binary data] " << ", length=" << chunk_size << " data=" << RsUtil::BinToHex((uint8_t*)chunk_data,std::min(50u,chunk_size)) << ((chunk_size>50)?"...":"") << std::endl; @@ -112,7 +114,7 @@ RsGRouterTransactionChunkItem *RsGRouterSerialiser::deserialise_RsGRouterTransac } #endif -void RsGRouterTransactionAcknItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterTransactionAcknItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,propagation_id,"propagation_id") ; } @@ -140,7 +142,7 @@ RsGRouterTransactionAcknItem *RsGRouterSerialiser::deserialise_RsGRouterTransact } #endif -void RsGRouterGenericDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterGenericDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,routing_id,"routing_id") ; RsTypeSerializer::serial_process (j,ctx,destination_key,"destination_key") ; @@ -157,7 +159,7 @@ void RsGRouterGenericDataItem::serial_process(SerializeJob j,SerializeContext& c RsTypeSerializer::serial_process(j,ctx,duplication_factor,"duplication_factor") ; RsTypeSerializer::serial_process(j,ctx,flags,"flags") ; - if(j == RsItem::DESERIALIZE) // make sure the duplication factor is not altered by friends. In the worst case, the item will duplicate a bit more. + if(j == RsGenericSerializer::DESERIALIZE) // make sure the duplication factor is not altered by friends. In the worst case, the item will duplicate a bit more. { if(duplication_factor < 1) { @@ -242,7 +244,7 @@ RsGRouterGenericDataItem *RsGRouterSerialiser::deserialise_RsGRouterGenericDataI } #endif -void RsGRouterSignedReceiptItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterSignedReceiptItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,routing_id,"routing_id") ; RsTypeSerializer::serial_process (j,ctx,flags,"flags") ; @@ -283,7 +285,7 @@ RsGRouterSignedReceiptItem *RsGRouterSerialiser::deserialise_RsGRouterSignedRece } #endif -void RsGRouterRoutingInfoItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterRoutingInfoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; RsTypeSerializer::serial_process(j,ctx,data_status,"data_status") ; @@ -304,7 +306,7 @@ void RsGRouterRoutingInfoItem::serial_process(SerializeJob j,SerializeContext& c // Hack for backward compatibility. Normally we should need a single commandline to serialise/deserialise a single item here. // But the full item is serialised, so we need the header. - if(j == RsItem::DESERIALIZE) + if(j == RsGenericSerializer::DESERIALIZE) { data_item = new RsGRouterGenericDataItem() ; @@ -321,7 +323,7 @@ void RsGRouterRoutingInfoItem::serial_process(SerializeJob j,SerializeContext& c else receipt_item = NULL ; } - else if(j == RsItem::SERIALIZE) + else if(j == RsGenericSerializer::SERIALIZE) { uint32_t remaining_size = ctx.mSize - ctx.mOffset; ctx.mOk = ctx.mOk && RsGRouterSerialiser().serialise(data_item,ctx.mData,&remaining_size) ; @@ -330,18 +332,18 @@ void RsGRouterRoutingInfoItem::serial_process(SerializeJob j,SerializeContext& c if(receipt_item != NULL) { remaining_size = ctx.mSize - ctx.mOffset; - ctx.mOk = ctx.mOk && RsGRouterSerialiser().serialise(data_item,ctx.mData,&remaining_size); - ctx.mOffset += RsGRouterSerialiser().size(data_item) ; + ctx.mOk = ctx.mOk && RsGRouterSerialiser().serialise(receipt_item,ctx.mData,&remaining_size); + ctx.mOffset += RsGRouterSerialiser().size(receipt_item) ; } } - else if(j == RsItem::PRINT) + else if(j == RsGenericSerializer::PRINT) { std::cerr << " [Serialized data] " << std::endl; if(receipt_item != NULL) std::cerr << " [Receipt item ]" << std::endl; } - else if(j == RsItem::SIZE_ESTIMATE) + else if(j == RsGenericSerializer::SIZE_ESTIMATE) { ctx.mOffset += RsGRouterSerialiser().size(data_item) ; @@ -410,7 +412,7 @@ RsGRouterRoutingInfoItem *RsGRouterSerialiser::deserialise_RsGRouterRoutingInfoI } #endif -void RsGRouterMatrixFriendListItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterMatrixFriendListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,reverse_friend_indices,"reverse_friend_indices") ; } @@ -443,7 +445,7 @@ RsGRouterMatrixFriendListItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixF } #endif -void RsGRouterMatrixTrackItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterMatrixTrackItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,provider_id,"provider_id") ; RsTypeSerializer::serial_process(j,ctx,message_id,"message_id") ; @@ -474,13 +476,13 @@ RsGRouterMatrixTrackItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixTrackI } #endif -void RsGRouterMatrixCluesItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsGRouterMatrixCluesItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,destination_key,"destination_key") ; RsTypeSerializer::serial_process(j,ctx,clues,"clues") ; } -template<> void RsTypeSerializer::serial_process(RsItem::SerializeJob j,SerializeContext& ctx,RoutingMatrixHitEntry& s,const std::string& name) +template<> void RsTypeSerializer::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,RoutingMatrixHitEntry& s,const std::string& name) { RsTypeSerializer::serial_process(j,ctx,s.friend_id,name+":friend_id") ; RsTypeSerializer::serial_process (j,ctx,s.weight,name+":weight") ; diff --git a/libretroshare/src/grouter/grouteritems.h b/libretroshare/src/grouter/grouteritems.h index 7c69d4718..505f35361 100644 --- a/libretroshare/src/grouter/grouteritems.h +++ b/libretroshare/src/grouter/grouteritems.h @@ -112,7 +112,7 @@ class RsGRouterGenericDataItem: public RsGRouterAbstractMsgItem, public RsGRoute data_bytes=NULL; } - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGRouterGenericDataItem *duplicate() const ; @@ -130,7 +130,7 @@ class RsGRouterSignedReceiptItem: public RsGRouterAbstractMsgItem virtual ~RsGRouterSignedReceiptItem() {} virtual void clear() {} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGRouterSignedReceiptItem *duplicate() const ; @@ -161,7 +161,7 @@ public: virtual ~RsGRouterTransactionChunkItem() { free(chunk_data) ; } virtual void clear() {} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual RsGRouterTransactionItem *duplicate() const { @@ -188,7 +188,7 @@ public: RsGRouterTransactionAcknItem() : RsGRouterTransactionItem(RS_PKT_SUBTYPE_GROUTER_TRANSACTION_ACKN) { setPriorityLevel(QOS_PRIORITY_RS_GROUTER) ; } virtual ~RsGRouterTransactionAcknItem() {} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} @@ -206,7 +206,7 @@ class RsGRouterMatrixCluesItem: public RsGRouterItem { setPriorityLevel(0) ; } // this item is never sent through the network virtual void clear() {} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // packet data // @@ -220,7 +220,7 @@ class RsGRouterMatrixTrackItem: public RsGRouterItem RsGRouterMatrixTrackItem() : RsGRouterItem(RS_PKT_SUBTYPE_GROUTER_MATRIX_TRACK) { setPriorityLevel(0) ; } // this item is never sent through the network - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} @@ -236,7 +236,7 @@ class RsGRouterMatrixFriendListItem: public RsGRouterItem RsGRouterMatrixFriendListItem() : RsGRouterItem(RS_PKT_SUBTYPE_GROUTER_FRIENDS_LIST) { setPriorityLevel(0) ; } // this item is never sent through the network - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} // packet data @@ -252,7 +252,7 @@ class RsGRouterRoutingInfoItem: public RsGRouterItem, public GRouterRoutingInfo, virtual ~RsGRouterRoutingInfoItem() { clear() ; } - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() { @@ -271,7 +271,7 @@ class RsGRouterRoutingInfoItem: public RsGRouterItem, public GRouterRoutingInfo, class RsGRouterSerialiser: public RsServiceSerializer { public: - RsGRouterSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsServiceSerializer(RS_SERVICE_TYPE_GROUTER,SerializeContext::FORMAT_BINARY,flags) {} + RsGRouterSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsServiceSerializer(RS_SERVICE_TYPE_GROUTER,RsGenericSerializer::FORMAT_BINARY,flags) {} virtual RsItem *create_item(uint16_t service,uint8_t subtype) const ; }; diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.h b/libretroshare/src/gxstunnel/rsgxstunnelitems.h index ad049a753..4da26da0e 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.h +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.h @@ -27,9 +27,12 @@ #include +#include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" +#include "rsitems/rsitem.h" + #include "retroshare/rstypes.h" #include "serialiser/rstlvkeys.h" -#include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 8a633c1a7..287e6a4d7 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -452,7 +452,8 @@ HEADERS += grouter/groutercache.h \ grouter/groutertypes.h \ grouter/rsgrouterclient.h -HEADERS += rsitems/itempriorities.h \ +HEADERS += rsitems/rsitem.h \ + rsitems/itempriorities.h \ serialiser/rsbaseserial.h \ rsitems/rsfiletransferitems.h \ serialiser/rsserviceserialiser.h \ diff --git a/libretroshare/src/pqi/p3servicecontrol.cc b/libretroshare/src/pqi/p3servicecontrol.cc index f22cc44c0..0b3b1514e 100644 --- a/libretroshare/src/pqi/p3servicecontrol.cc +++ b/libretroshare/src/pqi/p3servicecontrol.cc @@ -27,6 +27,7 @@ #include "p3servicecontrol.h" #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" #include "serialiser/rsserial.h" #include "serialiser/rsbaseserial.h" #include "pqi/p3cfgmgr.h" diff --git a/libretroshare/src/pqi/pqi.h b/libretroshare/src/pqi/pqi.h index a7aa5854c..07cf00f9d 100644 --- a/libretroshare/src/pqi/pqi.h +++ b/libretroshare/src/pqi/pqi.h @@ -27,8 +27,7 @@ #ifndef PQI_TOP_HEADER #define PQI_TOP_HEADER -#include "serialiser/rsserial.h" - +#include "rsitems/rsitem.h" class P3Interface { diff --git a/libretroshare/src/pqi/pqiqos.cc b/libretroshare/src/pqi/pqiqos.cc index b2472c0b7..9fc62aa8c 100644 --- a/libretroshare/src/pqi/pqiqos.cc +++ b/libretroshare/src/pqi/pqiqos.cc @@ -11,7 +11,9 @@ const uint32_t pqiQoS::MAX_PACKET_COUNTER_VALUE = (1 << 24) ; pqiQoS::pqiQoS(uint32_t nb_levels,float alpha) : _item_queues(nb_levels),_alpha(alpha) { +#ifdef DEBUG assert(pow(alpha,nb_levels) < 1e+20) ; +#endif float c = 1.0f ; float inc = alpha ; @@ -110,7 +112,9 @@ void *pqiQoS::out_rsItem(uint32_t max_slice_size, uint32_t& size, bool& starts, if(last >= 0) { +#ifdef DEBUG assert(_nb_items > 0) ; +#endif // now chop a slice of this item diff --git a/libretroshare/src/pqi/pqistore.cc b/libretroshare/src/pqi/pqistore.cc index 4a962cf29..23201541a 100644 --- a/libretroshare/src/pqi/pqistore.cc +++ b/libretroshare/src/pqi/pqistore.cc @@ -40,6 +40,7 @@ * */ +#include "rsitems/rsitem.h" #include "pqi/pqistore.h" #include "serialiser/rsserial.h" #include diff --git a/libretroshare/src/rsitems/rsbanlistitems.cc b/libretroshare/src/rsitems/rsbanlistitems.cc index d597abcfd..85acfb96c 100644 --- a/libretroshare/src/rsitems/rsbanlistitems.cc +++ b/libretroshare/src/rsitems/rsbanlistitems.cc @@ -41,12 +41,12 @@ void RsBanListItem::clear() peerList.TlvClear(); } -void RsBanListItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsBanListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,peerList,"peerList") ; } -void RsBanListConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsBanListConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,type,"type") ; RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; diff --git a/libretroshare/src/rsitems/rsbanlistitems.h b/libretroshare/src/rsitems/rsbanlistitems.h index 3fce37956..836fe1b7e 100644 --- a/libretroshare/src/rsitems/rsbanlistitems.h +++ b/libretroshare/src/rsitems/rsbanlistitems.h @@ -29,6 +29,8 @@ #include #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" #include "serialiser/rstlvbanlist.h" #include "serialization/rsserializer.h" @@ -50,7 +52,7 @@ class RsBanListItem: public RsItem virtual ~RsBanListItem(){} virtual void clear(); - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvBanList peerList; }; @@ -64,7 +66,7 @@ public: virtual ~RsBanListConfigItem(){} virtual void clear() { banned_peers.TlvClear() ; } - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t type ; RsPeerId peerId ; diff --git a/libretroshare/src/rsitems/rsbwctrlitems.cc b/libretroshare/src/rsitems/rsbwctrlitems.cc index 747dbbbda..45c23d2c8 100644 --- a/libretroshare/src/rsitems/rsbwctrlitems.cc +++ b/libretroshare/src/rsitems/rsbwctrlitems.cc @@ -52,7 +52,7 @@ void RsBwCtrlAllowedItem::clear() allowedBw = 0; } -void RsBwCtrlAllowedItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsBwCtrlAllowedItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_BW,allowedBw,"allowedBw") ; } diff --git a/libretroshare/src/rsitems/rsbwctrlitems.h b/libretroshare/src/rsitems/rsbwctrlitems.h index e21410b39..570e0d87b 100644 --- a/libretroshare/src/rsitems/rsbwctrlitems.h +++ b/libretroshare/src/rsitems/rsbwctrlitems.h @@ -28,9 +28,9 @@ #include +#include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -#include "serialiser/rstlvbase.h" +#include "rsitems/itempriorities.h" #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" @@ -51,7 +51,7 @@ public: virtual ~RsBwCtrlAllowedItem() {} virtual void clear(); - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t allowedBw; // Units are bytes/sec => 4Gb/s; }; diff --git a/libretroshare/src/rsitems/rsconfigitems.cc b/libretroshare/src/rsitems/rsconfigitems.cc index 4ba94a8bf..743e35871 100644 --- a/libretroshare/src/rsitems/rsconfigitems.cc +++ b/libretroshare/src/rsitems/rsconfigitems.cc @@ -28,6 +28,7 @@ #include "rsitems/rsconfigitems.h" #include "retroshare/rspeers.h" // Needed for RsGroupInfo. +#include "serialization/rstypeserializer.h" /*** * #define RSSERIAL_DEBUG 1 * #define RSSERIAL_ERROR_DEBUG 1 @@ -69,7 +70,7 @@ void RsFileTransfer::clear() } -void RsFileTransfer::serial_process(SerializeJob j,SerializeContext& ctx) +void RsFileTransfer::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,file,"file") ; RsTypeSerializer::serial_process(j,ctx,allPeerIds,"allPeerIds") ; @@ -91,7 +92,7 @@ void RsFileTransfer::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process (j,ctx,compressed_chunk_map,"compressed_chunk_map") ; } -void RsFileConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsFileConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,file,"file") ; RsTypeSerializer::serial_process (j,ctx,flags,"flags") ; @@ -111,7 +112,7 @@ RsItem *RsGeneralConfigSerialiser::create_item(uint8_t item_type,uint8_t item_su } } -void RsConfigKeyValueSet::serial_process(SerializeJob j,SerializeContext& ctx) +void RsConfigKeyValueSet::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tlvkvs,"tlvkvs") ; } @@ -156,7 +157,7 @@ void RsPeerNetItem::clear() domain_addr.clear(); domain_port = 0; } -void RsPeerNetItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsPeerNetItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,peerId,"peerId") ; RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ; @@ -181,12 +182,12 @@ void RsPeerNetItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,domain_port,"domain_port") ; } -void RsPeerBandwidthLimitsItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsPeerBandwidthLimitsItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,peers,"peers") ; } -void RsPeerStunItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsPeerStunItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,stunList,"stunList") ; } @@ -226,7 +227,7 @@ RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g) pgpList.ids = g.peerIds; } -void RsNodeGroupItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsNodeGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { uint32_t v=0 ; @@ -237,14 +238,14 @@ void RsNodeGroupItem::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,pgpList,"pgpList") ; } -void RsPeerServicePermissionItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsPeerServicePermissionItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { // We need to hack this because of backward compatibility. The correct way to do it would be: // // RsTypeSerializer::serial_process(j,ctx,pgp_ids,"pgp_ids") ; // RsTypeSerializer::serial_process(j,ctx,service_flags,"service_flags") ; - if(j == RsItem::DESERIALIZE) + if(j == RsGenericSerializer::DESERIALIZE) { uint32_t v=0 ; RsTypeSerializer::serial_process(j,ctx,v,"pgp_ids.size()") ; diff --git a/libretroshare/src/rsitems/rsconfigitems.h b/libretroshare/src/rsitems/rsconfigitems.h index 6ac90c212..bc4b9e824 100644 --- a/libretroshare/src/rsitems/rsconfigitems.h +++ b/libretroshare/src/rsitems/rsconfigitems.h @@ -29,6 +29,8 @@ #include #include +#include "rsitems/rsitem.h" + #include "retroshare/rstypes.h" #include "serialiser/rsserial.h" @@ -77,7 +79,7 @@ public: virtual ~RsPeerNetItem(){} virtual void clear(); - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); /* networking information */ RsPeerId peerId; /* Mandatory */ @@ -115,7 +117,7 @@ class RsPeerServicePermissionItem : public RsItem pgp_ids.clear() ; service_flags.clear() ; } - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); /* Mandatory */ @@ -132,7 +134,7 @@ class RsPeerBandwidthLimitsItem : public RsItem { peers.clear() ; } - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); /* Mandatory */ std::map peers ; @@ -172,7 +174,7 @@ public: explicit RsNodeGroupItem(const RsGroupInfo&) ; - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // /* set data from RsGroupInfo to RsPeerGroupItem */ // void set(RsGroupInfo &groupInfo); @@ -197,7 +199,7 @@ public: virtual ~RsPeerStunItem(){} virtual void clear() { stunList.TlvClear() ;} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvPeerIdSet stunList; /* Mandatory */ }; @@ -277,7 +279,7 @@ class RsFileTransfer: public RsItem virtual ~RsFileTransfer(){} virtual void clear(); - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvFileItem file; RsTlvPeerIdSet allPeerIds; @@ -331,7 +333,7 @@ public: virtual ~RsFileConfigItem() {} virtual void clear() { parent_groups.TlvClear(); } - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvFileItem file; uint32_t flags; @@ -359,7 +361,7 @@ public: virtual ~RsConfigKeyValueSet(){} virtual void clear() { tlvkvs.TlvClear();} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvKeyValueSet tlvkvs; }; diff --git a/libretroshare/src/rsitems/rsdiscovery2items.cc b/libretroshare/src/rsitems/rsdiscovery2items.cc index 8e4175a9e..f9f19270c 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.cc +++ b/libretroshare/src/rsitems/rsdiscovery2items.cc @@ -73,7 +73,7 @@ void RsDiscPgpListItem::clear() pgpIdSet.TlvClear(); } -void RsDiscPgpListItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsDiscPgpListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mode,"mode") ; RsTypeSerializer::serial_process(j,ctx,pgpIdSet,"pgpIdSet") ; @@ -86,7 +86,7 @@ void RsDiscPgpCertItem::clear() } -void RsDiscPgpCertItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsDiscPgpCertItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,pgpId,"pgpId") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_PGPCERT,pgpCert,"pgpCert") ; @@ -121,7 +121,7 @@ void RsDiscContactItem::clear() extAddrList.TlvClear(); } -void RsDiscContactItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsDiscContactItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,pgpId,"pgpId"); RsTypeSerializer::serial_process (j,ctx,sslId,"sslId"); @@ -134,7 +134,7 @@ void RsDiscContactItem::serial_process(SerializeJob j,SerializeContext& ctx) // This is a hack. Normally we should have to different item types, in order to avoid this nonesense. - if(j == RsItem::DESERIALIZE) + if(j == RsGenericSerializer::DESERIALIZE) isHidden = ( GetTlvType( &(((uint8_t *) ctx.mData)[ctx.mOffset]) )==TLV_TYPE_STR_DOMADDR); if(isHidden) diff --git a/libretroshare/src/rsitems/rsdiscovery2items.h b/libretroshare/src/rsitems/rsdiscovery2items.h index 7610d534f..ce30a2928 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.h +++ b/libretroshare/src/rsitems/rsdiscovery2items.h @@ -32,6 +32,8 @@ #include "serialiser/rstlvidset.h" #include "serialiser/rstlvaddrs.h" #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" #include "serialization/rsserializer.h" @@ -65,7 +67,7 @@ public: virtual ~RsDiscPgpListItem(){} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); uint32_t mode; RsTlvPgpIdSet pgpIdSet; @@ -86,7 +88,7 @@ public: virtual ~RsDiscPgpCertItem(){} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); RsPgpId pgpId; std::string pgpCert; @@ -106,7 +108,7 @@ public: virtual ~RsDiscContactItem() {} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); RsPgpId pgpId; RsPeerId sslId; diff --git a/libretroshare/src/rsitems/rsfiletransferitems.cc b/libretroshare/src/rsitems/rsfiletransferitems.cc index acdadaff2..cd0ea088d 100644 --- a/libretroshare/src/rsitems/rsfiletransferitems.cc +++ b/libretroshare/src/rsitems/rsfiletransferitems.cc @@ -53,38 +53,38 @@ void RsFileTransferDataItem::clear() fd.TlvClear(); } -void RsFileTransferDataRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferDataRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,fileoffset,"fileoffset") ; RsTypeSerializer::serial_process (j,ctx,chunksize, "chunksize") ; RsTypeSerializer::serial_process(j,ctx,file, "file") ; } -void RsFileTransferDataItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,fd,"fd") ; } -void RsFileTransferChunkMapRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferChunkMapRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,is_client,"is_client") ; RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; } -void RsFileTransferChunkMapItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferChunkMapItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,is_client, "is_client") ; RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; RsTypeSerializer::serial_process (j,ctx,compressed_map,"compressed_map") ; } -void RsFileTransferSingleChunkCrcRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferSingleChunkCrcRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; } -void RsFileTransferSingleChunkCrcItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsFileTransferSingleChunkCrcItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,hash, "hash") ; RsTypeSerializer::serial_process(j,ctx,chunk_number,"chunk_number") ; diff --git a/libretroshare/src/rsitems/rsfiletransferitems.h b/libretroshare/src/rsitems/rsfiletransferitems.h index b51e74d53..b0ab0972a 100644 --- a/libretroshare/src/rsitems/rsfiletransferitems.h +++ b/libretroshare/src/rsitems/rsfiletransferitems.h @@ -30,7 +30,9 @@ #include "retroshare/rstypes.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvfileitem.h" +#include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" #include "serialization/rsserializer.h" @@ -70,7 +72,7 @@ class RsFileTransferDataRequestItem: public RsFileTransferItem virtual ~RsFileTransferDataRequestItem() {} virtual void clear(); - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // Private data part. // @@ -90,7 +92,7 @@ class RsFileTransferDataItem: public RsFileTransferItem } virtual ~RsFileTransferDataItem() { clear() ; } - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear(); @@ -109,7 +111,7 @@ class RsFileTransferChunkMapRequestItem: public RsFileTransferItem virtual ~RsFileTransferChunkMapRequestItem() {} virtual void clear() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // Private data part. // @@ -127,7 +129,7 @@ class RsFileTransferChunkMapItem: public RsFileTransferItem } virtual ~RsFileTransferChunkMapItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} // Private data part. @@ -146,7 +148,7 @@ class RsFileTransferSingleChunkCrcRequestItem: public RsFileTransferItem } virtual ~RsFileTransferSingleChunkCrcRequestItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} // Private data part. @@ -164,7 +166,7 @@ class RsFileTransferSingleChunkCrcItem: public RsFileTransferItem } virtual ~RsFileTransferSingleChunkCrcItem() {} - void serial_process(RsItem::SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear() {} // Private data part. diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.cc b/libretroshare/src/rsitems/rsgxsreputationitems.cc index 11e267654..1a50bf9dc 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.cc +++ b/libretroshare/src/rsitems/rsgxsreputationitems.cc @@ -53,21 +53,21 @@ void RsGxsReputationBannedNodeSetItem::clear() mKnownIdentities.TlvClear(); } -void RsGxsReputationConfigItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsGxsReputationConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,mPeerId,"mPeerId") ; RsTypeSerializer::serial_process(j,ctx,mLatestUpdate,"mLatestUpdate") ; RsTypeSerializer::serial_process(j,ctx,mLastQuery,"mLastQuery") ; } -void RsGxsReputationBannedNodeSetItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsGxsReputationBannedNodeSetItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,mPgpId,"mPgpId") ; RsTypeSerializer::serial_process (j,ctx,mLastActivityTS,"mLastActivityTS") ; RsTypeSerializer::serial_process(j,ctx,mKnownIdentities,"mKnownIdentities") ; } -void RsGxsReputationSetItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsGxsReputationSetItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,mGxsId,"mGxsId") ; RsTypeSerializer::serial_process(j,ctx,mOwnOpinion,"mOwnOpinion") ; @@ -78,12 +78,12 @@ void RsGxsReputationSetItem::serial_process(RsItem::SerializeJob j,SerializeCont RsTypeSerializer::serial_process (j,ctx,mOpinions,"mOpinions") ; } -void RsGxsReputationUpdateItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsGxsReputationUpdateItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mLatestUpdate,"mLatestUpdate") ; RsTypeSerializer::serial_process (j,ctx,mOpinions,"mOpinions") ; } -void RsGxsReputationRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx) +void RsGxsReputationRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mLastUpdate,"mLastUpdate") ; } diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.h b/libretroshare/src/rsitems/rsgxsreputationitems.h index 1f30a5d65..7c841bd4e 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.h +++ b/libretroshare/src/rsitems/rsgxsreputationitems.h @@ -29,6 +29,9 @@ #include #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" + #include "serialiser/rsserial.h" #include "serialiser/rstlvidset.h" #include "retroshare/rsgxsifacetypes.h" @@ -66,7 +69,7 @@ public: virtual ~RsGxsReputationConfigItem() {} virtual void clear() {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) ; RsPeerId mPeerId; uint32_t mLatestUpdate; // timestamp they returned. @@ -110,7 +113,7 @@ public: virtual ~RsGxsReputationSetItem() {} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) ; RsGxsId mGxsId; uint32_t mOwnOpinion; @@ -128,7 +131,7 @@ public: virtual ~RsGxsReputationBannedNodeSetItem() {} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) ; RsPgpId mPgpId ; uint32_t mLastActivityTS ; @@ -143,7 +146,7 @@ public: virtual ~RsGxsReputationUpdateItem() {} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) ; uint32_t mLatestUpdate; std::map mOpinions; // GxsId -> Opinion. @@ -157,7 +160,7 @@ public: virtual ~RsGxsReputationRequestItem() {} virtual void clear() {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) ; + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) ; uint32_t mLastUpdate; }; diff --git a/libretroshare/src/rsitems/rshistoryitems.cc b/libretroshare/src/rsitems/rshistoryitems.cc index eb50bf15e..38f2f0254 100644 --- a/libretroshare/src/rsitems/rshistoryitems.cc +++ b/libretroshare/src/rsitems/rshistoryitems.cc @@ -29,13 +29,15 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" +#include "serialization/rstypeserializer.h" + /*** #define RSSERIAL_DEBUG 1 ***/ #include -void RsHistoryMsgItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsHistoryMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { uint16_t version=0; diff --git a/libretroshare/src/rsitems/rshistoryitems.h b/libretroshare/src/rsitems/rshistoryitems.h index 27a387f60..56d12e559 100644 --- a/libretroshare/src/rsitems/rshistoryitems.h +++ b/libretroshare/src/rsitems/rshistoryitems.h @@ -42,7 +42,7 @@ public: virtual ~RsHistoryMsgItem() {} virtual void clear() {} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPeerId chatPeerId; // empty for global chat bool incoming; diff --git a/libretroshare/src/rsitems/rsitem.h b/libretroshare/src/rsitems/rsitem.h new file mode 100644 index 000000000..f7f6dae54 --- /dev/null +++ b/libretroshare/src/rsitems/rsitem.h @@ -0,0 +1,90 @@ +#pragma once + +#include "util/smallobject.h" +#include "retroshare/rstypes.h" +#include "serialization/rsserializer.h" + +class RsItem: public RsMemoryManagement::SmallObject +{ + public: + RsItem(uint32_t t); + RsItem(uint8_t ver, uint8_t cls, uint8_t t, uint8_t subtype); +#ifdef DO_STATISTICS + void *operator new(size_t s) ; + void operator delete(void *,size_t s) ; +#endif + + virtual ~RsItem(); + virtual void clear() = 0; + + virtual std::ostream &print(std::ostream &out, uint16_t /* indent */ = 0) + { + RsGenericSerializer::SerializeContext ctx(NULL,0,RsGenericSerializer::FORMAT_BINARY,RsGenericSerializer::SERIALIZATION_FLAG_NONE); + serial_process(RsGenericSerializer::PRINT,ctx) ; + return out; + } + + void print_string(std::string &out, uint16_t indent = 0); + + /* source / destination id */ + const RsPeerId& PeerId() const { return peerId; } + void PeerId(const RsPeerId& id) { peerId = id; } + + /* complete id */ + uint32_t PacketId() const; + + /* id parts */ + uint8_t PacketVersion(); + uint8_t PacketClass(); + uint8_t PacketType(); + uint8_t PacketSubType() const; + + /* For Service Packets */ + RsItem(uint8_t ver, uint16_t service, uint8_t subtype); + uint16_t PacketService() const; /* combined Packet class/type (mid 16bits) */ + void setPacketService(uint16_t service); + + inline uint8_t priority_level() const { return _priority_level ;} + inline void setPriorityLevel(uint8_t l) { _priority_level = l ;} + + /** + * @brief serialize this object to the given buffer + * @param Job to do: serialise or deserialize. + * @param data Chunk of memory were to dump the serialized data + * @param size Size of memory chunk + * @param offset Readed to determine at witch offset start writing data, + * written to inform caller were written data ends, the updated value + * is usually passed by the caller to serialize of another + * RsSerializable so it can write on the same chunk of memory just + * after where this RsSerializable has been serialized. + * @return true if serialization successed, false otherwise + */ + + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) + { + std::cerr << "(EE) RsItem::serial_process() called by an item using new serialization classes, but not derived! Class is " << typeid(*this).name() << std::endl; + } + + protected: + uint32_t type; + RsPeerId peerId; + uint8_t _priority_level ; +}; + +class RsRawItem: public RsItem +{ +public: + RsRawItem(uint32_t t, uint32_t size) : RsItem(t), len(size) + { data = rs_malloc(len); } + virtual ~RsRawItem() { free(data); } + + uint32_t getRawLength() { return len; } + void * getRawData() { return data; } + + virtual void clear() {} + virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + +private: + void *data; + uint32_t len; +}; diff --git a/libretroshare/src/rsitems/rsmsgitems.cc b/libretroshare/src/rsitems/rsmsgitems.cc index 8fd2f2c55..20c98ad1b 100644 --- a/libretroshare/src/rsitems/rsmsgitems.cc +++ b/libretroshare/src/rsitems/rsmsgitems.cc @@ -80,25 +80,25 @@ void RsMsgItem::clear() attachment.TlvClear(); } -void RsPublicMsgInviteConfigItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsPublicMsgInviteConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_SHA1,hash,"hash") ; RsTypeSerializer::serial_process(j,ctx,(uint32_t&)time_stamp,"time_stamp") ; } -void RsMsgTagType::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgTagType::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,text,"text") ; RsTypeSerializer::serial_process(j,ctx,rgb_color,"rgb_color") ; RsTypeSerializer::serial_process(j,ctx,tagId,"tagId") ; } -void RsMsgTags::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgTags::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; #warning this is not the correct way to serialise here. We should directly call serial_process >() but for backward compatibility, we cannot - if(j == RsItem::DESERIALIZE) + if(j == RsGenericSerializer::DESERIALIZE) while(ctx.mOffset < ctx.mSize) { uint32_t n ; @@ -110,13 +110,13 @@ void RsMsgTags::serial_process(SerializeJob j,SerializeContext& ctx) RsTypeSerializer::serial_process(j,ctx,*it,"tagIds element") ; } -void RsMsgSrcId::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgSrcId::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; RsTypeSerializer::serial_process (j,ctx,srcId,"srcId") ; } -void RsMsgGRouterMap::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgGRouterMap::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,ongoing_msgs,"ongoing_msgs") ; } @@ -128,18 +128,18 @@ void RsMsgGRouterMap::clear() return; } -void RsMsgDistantMessagesHashMap::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgDistantMessagesHashMap::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,hash_map,"hash_map") ; } -void RsMsgParentId::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgParentId::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; RsTypeSerializer::serial_process(j,ctx,msgParentId,"msgParentId") ; } -void RsMsgItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgFlags,"msgFlags"); RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime"); diff --git a/libretroshare/src/rsitems/rsmsgitems.h b/libretroshare/src/rsitems/rsmsgitems.h index f0916352b..527c43fdf 100644 --- a/libretroshare/src/rsitems/rsmsgitems.h +++ b/libretroshare/src/rsitems/rsmsgitems.h @@ -101,7 +101,7 @@ class RsMsgItem: public RsMessageItem virtual ~RsMsgItem() {} virtual void clear(); - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); // ----------- Specific fields ------------- // @@ -130,7 +130,7 @@ class RsMsgTagType : public RsMessageItem public: RsMsgTagType() :RsMessageItem(RS_PKT_SUBTYPE_MSG_TAG_TYPE) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgTagType() {} virtual void clear(); @@ -148,7 +148,7 @@ public: RsMsgTags() :RsMessageItem(RS_PKT_SUBTYPE_MSG_TAGS) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgTags() {} virtual void clear(); @@ -164,7 +164,7 @@ class RsMsgSrcId : public RsMessageItem public: RsMsgSrcId() : RsMessageItem(RS_PKT_SUBTYPE_MSG_SRC_TAG) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgSrcId() {} virtual void clear(){} @@ -180,7 +180,7 @@ class RsPublicMsgInviteConfigItem : public RsMessageItem public: RsPublicMsgInviteConfigItem() : RsMessageItem(RS_PKT_SUBTYPE_MSG_INVITE) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsPublicMsgInviteConfigItem() {} virtual void clear(); @@ -196,7 +196,7 @@ class RsMsgGRouterMap : public RsMessageItem public: RsMsgGRouterMap() : RsMessageItem(RS_PKT_SUBTYPE_MSG_GROUTER_MAP) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgGRouterMap() {} virtual void clear(); @@ -210,7 +210,7 @@ class RsMsgDistantMessagesHashMap : public RsMessageItem public: RsMsgDistantMessagesHashMap() : RsMessageItem(RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgDistantMessagesHashMap() {} virtual void clear() { hash_map.clear() ;} @@ -224,7 +224,7 @@ class RsMsgParentId : public RsMessageItem public: RsMsgParentId() : RsMessageItem(RS_PKT_SUBTYPE_MSG_PARENT_TAG) {} - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */); + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); virtual ~RsMsgParentId() {} virtual void clear(){} @@ -239,7 +239,7 @@ class RsMsgSerialiser: public RsServiceSerializer { public: RsMsgSerialiser(SerializationFlags flags) - :RsServiceSerializer(RS_SERVICE_TYPE_MSG,SerializeContext::FORMAT_BINARY,flags){} + :RsServiceSerializer(RS_SERVICE_TYPE_MSG,RsGenericSerializer::FORMAT_BINARY,flags){} virtual ~RsMsgSerialiser() {} diff --git a/libretroshare/src/rsitems/rsrttitems.cc b/libretroshare/src/rsitems/rsrttitems.cc index ce2423dd4..2ab7292e5 100644 --- a/libretroshare/src/rsitems/rsrttitems.cc +++ b/libretroshare/src/rsitems/rsrttitems.cc @@ -32,6 +32,8 @@ #include +#include "serialization/rstypeserializer.h" + /*************************************************************************/ RsItem *RsRttSerialiser::create_item(uint16_t service,uint8_t type) const @@ -48,13 +50,13 @@ RsItem *RsRttSerialiser::create_item(uint16_t service,uint8_t type) const } } -void RsRttPingItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsRttPingItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; } -void RsRttPongItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsRttPongItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; diff --git a/libretroshare/src/rsitems/rsrttitems.h b/libretroshare/src/rsitems/rsrttitems.h index b3e5bdec2..8f635c3b9 100644 --- a/libretroshare/src/rsitems/rsrttitems.h +++ b/libretroshare/src/rsitems/rsrttitems.h @@ -28,7 +28,9 @@ #include +#include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" #include "serialiser/rsserial.h" #include "serialization/rsserializer.h" @@ -56,7 +58,7 @@ class RsRttPingItem: public RsRttItem virtual ~RsRttPingItem(){} virtual void clear(){} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t mSeqNo; uint64_t mPingTS; @@ -70,7 +72,7 @@ class RsRttPongItem: public RsRttItem virtual ~RsRttPongItem(){} virtual void clear(){} - virtual void serial_process(SerializeJob j,SerializeContext& ctx); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t mSeqNo; uint64_t mPingTS; diff --git a/libretroshare/src/serialiser/rsgxsitems.h b/libretroshare/src/serialiser/rsgxsitems.h index ed6d3124d..74942d807 100644 --- a/libretroshare/src/serialiser/rsgxsitems.h +++ b/libretroshare/src/serialiser/rsgxsitems.h @@ -26,6 +26,7 @@ * */ +#include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" #include "serialiser/rsserial.h" //#include "serialiser/rstlvtypes.h" diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.h b/libretroshare/src/serialiser/rsgxsrecognitems.h index 6d0ea0ae6..aab0e3974 100644 --- a/libretroshare/src/serialiser/rsgxsrecognitems.h +++ b/libretroshare/src/serialiser/rsgxsrecognitems.h @@ -28,7 +28,10 @@ #include +#include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" + #include "serialiser/rsserial.h" #include "serialiser/rstlvkeys.h" #include "serialiser/rstlvidset.h" diff --git a/libretroshare/src/serialiser/rsheartbeatitems.h b/libretroshare/src/serialiser/rsheartbeatitems.h index 5660ba373..3a9e6e95f 100644 --- a/libretroshare/src/serialiser/rsheartbeatitems.h +++ b/libretroshare/src/serialiser/rsheartbeatitems.h @@ -30,6 +30,8 @@ #include "serialiser/rsserial.h" #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" const uint8_t RS_PKT_SUBTYPE_HEARTBEAT_PULSE = 0x01; diff --git a/libretroshare/src/serialiser/rsnxsitems.h b/libretroshare/src/serialiser/rsnxsitems.h index 259c560a6..2f4886507 100644 --- a/libretroshare/src/serialiser/rsnxsitems.h +++ b/libretroshare/src/serialiser/rsnxsitems.h @@ -31,6 +31,7 @@ #include #include "rsitems/rsserviceids.h" +#include "rsitems/itempriorities.h" #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvitem.h" diff --git a/libretroshare/src/serialiser/rsserial.cc b/libretroshare/src/serialiser/rsserial.cc index 30fed530e..1436f92fa 100644 --- a/libretroshare/src/serialiser/rsserial.cc +++ b/libretroshare/src/serialiser/rsserial.cc @@ -25,11 +25,14 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsserial.h" + #include "util/rsthreads.h" #include "util/rsstring.h" #include "util/rsprint.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" + #include #include #include diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 511eec1c3..248c0a3bc 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -34,9 +34,6 @@ #include #include -#include "util/rsmemory.h" -#include "retroshare/rstypes.h" - /******************************************************************* * This is the Top-Level serialiser/deserialise, * @@ -59,9 +56,6 @@ * 8 bits: SubType ******************************************************************/ -#include -#include "rsitems/itempriorities.h" - const uint8_t RS_PKT_VERSION1 = 0x01; const uint8_t RS_PKT_VERSION_SERVICE = 0x02; @@ -70,74 +64,7 @@ const uint8_t RS_PKT_CLASS_CONFIG = 0x02; const uint8_t RS_PKT_SUBTYPE_DEFAULT = 0x01; /* if only one subtype */ -class SerializeContext ; - -class RsItem: public RsMemoryManagement::SmallObject -{ - public: - RsItem(uint32_t t); - RsItem(uint8_t ver, uint8_t cls, uint8_t t, uint8_t subtype); -#ifdef DO_STATISTICS - void *operator new(size_t s) ; - void operator delete(void *,size_t s) ; -#endif - - virtual ~RsItem(); - virtual void clear() = 0; - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) - { - std::cerr << "(EE) RsItem::print() called by an item using new serialization classes, but not derived! " << std::endl; -#warning This method should normally call serial_process(PRINT,ctx) - return out; - } - void print_string(std::string &out, uint16_t indent = 0); - - /* source / destination id */ - const RsPeerId& PeerId() const { return peerId; } - void PeerId(const RsPeerId& id) { peerId = id; } - - /* complete id */ - uint32_t PacketId() const; - - /* id parts */ - uint8_t PacketVersion(); - uint8_t PacketClass(); - uint8_t PacketType(); - uint8_t PacketSubType() const; - - /* For Service Packets */ - RsItem(uint8_t ver, uint16_t service, uint8_t subtype); - uint16_t PacketService() const; /* combined Packet class/type (mid 16bits) */ - void setPacketService(uint16_t service); - - inline uint8_t priority_level() const { return _priority_level ;} - inline void setPriorityLevel(uint8_t l) { _priority_level = l ;} - - /** - * @brief serialize this object to the given buffer - * @param Job to do: serialise or deserialize. - * @param data Chunk of memory were to dump the serialized data - * @param size Size of memory chunk - * @param offset Readed to determine at witch offset start writing data, - * written to inform caller were written data ends, the updated value - * is usually passed by the caller to serialize of another - * RsSerializable so it can write on the same chunk of memory just - * after where this RsSerializable has been serialized. - * @return true if serialization successed, false otherwise - */ - typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03, PRINT=0x04 } SerializeJob ; - - virtual void serial_process(SerializeJob /* j */,SerializeContext& /* ctx */) - { - std::cerr << "(EE) RsItem::serial_process() called by an item using new serialization classes, but not derived! " << std::endl; - } - - protected: - uint32_t type; - RsPeerId peerId; - uint8_t _priority_level ; -}; - +class RsItem ; class RsSerialType { @@ -201,23 +128,4 @@ std::ostream &printRsItemEnd(std::ostream &o, std::string n, uint16_t i); std::ostream &printIndent(std::ostream &out, uint16_t indent); /* Wrapper class for data that is serialised somewhere else */ -class RsRawItem: public RsItem -{ -public: - RsRawItem(uint32_t t, uint32_t size) : RsItem(t), len(size) - { data = rs_malloc(len); } - virtual ~RsRawItem() { free(data); } - - uint32_t getRawLength() { return len; } - void * getRawData() { return data; } - - virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); - -private: - void *data; - uint32_t len; -}; - - #endif /* RS_BASE_SERIALISER_H */ diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.h b/libretroshare/src/serialiser/rsserviceinfoitems.h index 76b451cce..b4c9beabe 100644 --- a/libretroshare/src/serialiser/rsserviceinfoitems.h +++ b/libretroshare/src/serialiser/rsserviceinfoitems.h @@ -31,6 +31,9 @@ #include #include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" + #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rstlvgenericmap.h" diff --git a/libretroshare/src/serialiser/rsserviceserialiser.cc b/libretroshare/src/serialiser/rsserviceserialiser.cc index d99d03de1..0c953fec3 100644 --- a/libretroshare/src/serialiser/rsserviceserialiser.cc +++ b/libretroshare/src/serialiser/rsserviceserialiser.cc @@ -23,6 +23,7 @@ * */ +#include "rsitems/rsitem.h" #include "rsserviceserialiser.h" uint32_t RsServiceSerialiser::size(RsItem *i) diff --git a/libretroshare/src/serialiser/rsstatusitems.h b/libretroshare/src/serialiser/rsstatusitems.h index c6cc0c8b2..8ea99e04c 100644 --- a/libretroshare/src/serialiser/rsstatusitems.h +++ b/libretroshare/src/serialiser/rsstatusitems.h @@ -27,7 +27,8 @@ */ #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" +#include "rsitems/itempriorities.h" +#include "rsitems/rsitem.h" /**************************************************************************/ diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialization/rsserializer.cc index 3ab5770aa..f9619e839 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialization/rsserializer.cc @@ -1,5 +1,7 @@ #include +#include "rsitems/rsitem.h" + #include "util/rsprint.h" #include "serialization/rsserializer.h" #include "serialization/rstypeserializer.h" @@ -31,7 +33,7 @@ RsItem *RsServiceSerializer::deserialise(void *data, uint32_t *size) SerializeContext ctx(const_cast(static_cast(data)),*size,mFormat,mFlags); ctx.mOffset = 8 ; - item->serial_process(RsItem::DESERIALIZE, ctx) ; + item->serial_process(RsGenericSerializer::DESERIALIZE, ctx) ; if(ctx.mSize != ctx.mOffset) { @@ -67,7 +69,7 @@ RsItem *RsConfigSerializer::deserialise(void *data, uint32_t *size) SerializeContext ctx(const_cast(static_cast(data)),*size,mFormat,mFlags); ctx.mOffset = 8 ; - item->serial_process(RsItem::DESERIALIZE, ctx) ; + item->serial_process(DESERIALIZE, ctx) ; if(ctx.mSize != ctx.mOffset) { @@ -105,7 +107,7 @@ bool RsGenericSerializer::serialise(RsItem *item,void *data,uint32_t *size) ctx.mSize = tlvsize; - item->serial_process(RsItem::SERIALIZE,ctx) ; + item->serial_process(RsGenericSerializer::SERIALIZE,ctx) ; if(ctx.mSize != ctx.mOffset) { @@ -123,7 +125,7 @@ uint32_t RsGenericSerializer::size(RsItem *item) ctx.mOffset = 0; else ctx.mOffset = 8 ; // header size - item->serial_process(RsItem::SIZE_ESTIMATE, ctx) ; + item->serial_process(SIZE_ESTIMATE, ctx) ; return ctx.mOffset ; } @@ -133,7 +135,7 @@ void RsGenericSerializer::print(RsItem *item) SerializeContext ctx(NULL,0,mFormat,mFlags); std::cerr << "***** RsItem class: \"" << typeid(*item).name() << "\" *****" << std::endl; - item->serial_process(RsItem::PRINT, ctx) ; + item->serial_process(PRINT, ctx) ; std::cerr << "******************************" << std::endl; } diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialization/rsserializer.h index 700b690f5..2bea8d23f 100644 --- a/libretroshare/src/serialization/rsserializer.h +++ b/libretroshare/src/serialization/rsserializer.h @@ -5,15 +5,34 @@ #include #include +#include "retroshare/rsflags.h" #include "serialiser/rsserial.h" -#include "serialization/rstypeserializer.h" + +class RsItem ; #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " class RsGenericSerializer: public RsSerialType { public: + typedef enum { SIZE_ESTIMATE = 0x01, SERIALIZE = 0x02, DESERIALIZE = 0x03, PRINT=0x04 } SerializeJob ; + typedef enum { FORMAT_BINARY = 0x01, FORMAT_JSON = 0x02 } SerializationFormat ; + class SerializeContext + { + public: + + + SerializeContext(uint8_t *data,uint32_t size,SerializationFormat format,SerializationFlags flags) + : mData(data),mSize(size),mOffset(0),mOk(true),mFormat(format),mFlags(flags) {} + + unsigned char *mData ; + uint32_t mSize ; + uint32_t mOffset ; + bool mOk ; + SerializationFormat mFormat ; + SerializationFlags mFlags ; + }; // These are convenience flags to be used by the items when processing the data. The names of the flags // are not very important. What matters is that the serial_process() method of each item correctly @@ -36,18 +55,18 @@ public: protected: RsGenericSerializer(uint8_t serial_class, uint8_t serial_type, - SerializeContext::SerializationFormat format, + SerializationFormat format, SerializationFlags flags ) : RsSerialType(RS_PKT_VERSION1,serial_class,serial_type), mFormat(format),mFlags(flags) {} RsGenericSerializer(uint16_t service, - SerializeContext::SerializationFormat format, + SerializationFormat format, SerializationFlags flags ) : RsSerialType(RS_PKT_VERSION_SERVICE,service), mFormat(format),mFlags(flags) {} - SerializeContext::SerializationFormat mFormat ; + SerializationFormat mFormat ; SerializationFlags mFlags ; }; @@ -56,8 +75,8 @@ class RsServiceSerializer: public RsGenericSerializer { public: RsServiceSerializer(uint16_t service_id, - SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, - SerializationFlags flags = SERIALIZATION_FLAG_NONE) + SerializationFormat format = FORMAT_BINARY, + SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsGenericSerializer(service_id,format,flags) {} @@ -74,8 +93,8 @@ class RsConfigSerializer: public RsGenericSerializer public: RsConfigSerializer(uint8_t config_class, uint8_t config_type, - SerializeContext::SerializationFormat format = SerializeContext::FORMAT_BINARY, - SerializationFlags flags = RsGenericSerializer::SERIALIZATION_FLAG_NONE) + SerializationFormat format = FORMAT_BINARY, + SerializationFlags flags = SERIALIZATION_FLAG_NONE) : RsGenericSerializer(config_class,config_type,format,flags) {} diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 0693331b1..31da447f4 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -7,25 +7,7 @@ #include "retroshare/rsflags.h" #include "retroshare/rsids.h" -class SerializeContext -{ - public: - - enum SerializationFormat { - FORMAT_BINARY = 0x01 , - FORMAT_JSON = 0x02 - }; - - SerializeContext(uint8_t *data,uint32_t size,SerializationFormat format,SerializationFlags flags) - : mData(data),mSize(size),mOffset(0),mOk(true),mFormat(format),mFlags(flags) {} - - unsigned char *mData ; - uint32_t mSize ; - uint32_t mOffset ; - bool mOk ; - SerializationFormat mFormat ; - SerializationFlags mFlags ; -}; +#include "serialization/rsserializer.h" class RsTypeSerializer @@ -44,20 +26,20 @@ class RsTypeSerializer //=================================================================================================// template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,T& member,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,T& member,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: ctx.mOffset += serial_size(member) ; + case RsGenericSerializer::SIZE_ESTIMATE: ctx.mOffset += serial_size(member) ; break ; - case RsItem::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + case RsGenericSerializer::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; break ; - case RsItem::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; + case RsGenericSerializer::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,member) ; break ; - case RsItem::PRINT: + case RsGenericSerializer::PRINT: print_data(member_name,member); break; default: @@ -71,20 +53,20 @@ class RsTypeSerializer //=================================================================================================// template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,uint16_t type_id,T& member,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,uint16_t type_id,T& member,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: ctx.mOffset += serial_size(type_id,member) ; + case RsGenericSerializer::SIZE_ESTIMATE: ctx.mOffset += serial_size(type_id,member) ; break ; - case RsItem::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; + case RsGenericSerializer::DESERIALIZE: ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; break ; - case RsItem::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; + case RsGenericSerializer::SERIALIZE: ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,type_id,member) ; break ; - case RsItem::PRINT: + case RsGenericSerializer::PRINT: print_data(member_name,type_id,member); break; default: @@ -97,11 +79,11 @@ class RsTypeSerializer //=================================================================================================// template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::map& v,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,std::map& v,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: + case RsGenericSerializer::SIZE_ESTIMATE: { ctx.mOffset += 4 ; for(typename std::map::iterator it(v.begin());it!=v.end();++it) @@ -112,7 +94,7 @@ class RsTypeSerializer } break ; - case RsItem::DESERIALIZE: + case RsGenericSerializer::DESERIALIZE: { uint32_t n=0 ; ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; @@ -130,7 +112,7 @@ class RsTypeSerializer } break ; - case RsItem::SERIALIZE: + case RsGenericSerializer::SERIALIZE: { uint32_t n=v.size(); ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; @@ -143,12 +125,12 @@ class RsTypeSerializer } break ; - case RsItem::PRINT: + case RsGenericSerializer::PRINT: { if(v.empty()) - std::cerr << " Empty map"<< std::endl; + std::cerr << " Empty map \"" << member_name << "\"" << std::endl; else - std::cerr << " std::map of " << v.size() << " elements:" << std::endl; + std::cerr << " std::map of " << v.size() << " elements: \"" << member_name << "\"" << std::endl; for(typename std::map::iterator it(v.begin());it!=v.end();++it) { @@ -169,11 +151,11 @@ class RsTypeSerializer //=================================================================================================// template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::vector& v,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,std::vector& v,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: + case RsGenericSerializer::SIZE_ESTIMATE: { ctx.mOffset += 4 ; for(uint32_t i=0;i - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,std::list& v,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,std::list& v,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: + case RsGenericSerializer::SIZE_ESTIMATE: { ctx.mOffset += 4 ; for(typename std::list::iterator it(v.begin());it!=v.end();++it) @@ -235,7 +217,7 @@ class RsTypeSerializer } break ; - case RsItem::DESERIALIZE: + case RsGenericSerializer::DESERIALIZE: { uint32_t n=0 ; serial_process(j,ctx,n,"temporary size") ; @@ -248,7 +230,7 @@ class RsTypeSerializer } break ; - case RsItem::SERIALIZE: + case RsGenericSerializer::SERIALIZE: { uint32_t n=v.size(); serial_process(j,ctx,n,"temporary size") ; @@ -257,7 +239,7 @@ class RsTypeSerializer } break ; - case RsItem::PRINT: + case RsGenericSerializer::PRINT: { if(v.empty()) std::cerr << " Empty list"<< std::endl; @@ -275,14 +257,14 @@ class RsTypeSerializer //=================================================================================================// template - static void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,t_RsFlags32& v,const std::string& member_name) + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,t_RsFlags32& v,const std::string& member_name) { switch(j) { - case RsItem::SIZE_ESTIMATE: ctx.mOffset += 4 ; + case RsGenericSerializer::SIZE_ESTIMATE: ctx.mOffset += 4 ; break ; - case RsItem::DESERIALIZE: + case RsGenericSerializer::DESERIALIZE: { uint32_t n=0 ; deserialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; @@ -290,14 +272,14 @@ class RsTypeSerializer } break ; - case RsItem::SERIALIZE: + case RsGenericSerializer::SERIALIZE: { uint32_t n=v.toUInt32() ; serialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; } break ; - case RsItem::PRINT: + case RsGenericSerializer::PRINT: std::cerr << " Flags of type " << std::hex << N << " : " << v.toUInt32() << std::endl; break ; } diff --git a/libretroshare/src/services/p3service.cc b/libretroshare/src/services/p3service.cc index 469247905..bb15831d7 100644 --- a/libretroshare/src/services/p3service.cc +++ b/libretroshare/src/services/p3service.cc @@ -23,6 +23,8 @@ * */ +#include "rsitems/itempriorities.h" + #include "pqi/pqi.h" #include "util/rsstring.h" #include "services/p3service.h" diff --git a/libretroshare/src/turtle/rsturtleitem.cc b/libretroshare/src/turtle/rsturtleitem.cc index 4d5f1a2fa..2455c98e5 100644 --- a/libretroshare/src/turtle/rsturtleitem.cc +++ b/libretroshare/src/turtle/rsturtleitem.cc @@ -48,14 +48,14 @@ RsItem *RsTurtleSerialiser::create_item(uint16_t service,uint8_t item_subtype) c return NULL ; } -void RsTurtleStringSearchRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleStringSearchRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_VALUE,match_string,"match_string") ; RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; } -void RsTurtleRegExpSearchRequestItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleRegExpSearchRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; RsTypeSerializer::serial_process(j,ctx,depth,"depth") ; @@ -140,7 +140,7 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const RsRegul std::cerr << " [RegExpr ] " << n << ", tokens=" << expr._tokens.size() << " ints=" << expr._ints.size() << " strings=" << expr._strings.size() << std::endl; } -void RsTurtleSearchResultItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleSearchResultItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; @@ -193,7 +193,7 @@ template<> void RsTypeSerializer::print_data(const std::string& n, const TurtleF std::cerr << " [FileInfo ] " << n << " size=" << i.size << " hash=" << i.hash << ", name=" << i.name << std::endl; } -void RsTurtleOpenTunnelItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleOpenTunnelItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,file_hash ,"file_hash") ; RsTypeSerializer::serial_process(j,ctx,request_id ,"request_id") ; @@ -201,13 +201,13 @@ void RsTurtleOpenTunnelItem::serial_process(SerializeJob j,SerializeContext& ctx RsTypeSerializer::serial_process(j,ctx,depth ,"depth") ; } -void RsTurtleTunnelOkItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleTunnelOkItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; RsTypeSerializer::serial_process(j,ctx,request_id,"request_id") ; } -void RsTurtleGenericDataItem::serial_process(SerializeJob j,SerializeContext& ctx) +void RsTurtleGenericDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,tunnel_id ,"tunnel_id") ; diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 9bc3fc4bf..8a8a1e49c 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -1,12 +1,16 @@ #pragma once +#include "rsitems/rsserviceids.h" +#include "rsitems/rsitem.h" +#include "rsitems/itempriorities.h" + #include "serialiser/rsserial.h" #include "serialiser/rstlvbase.h" #include "serialiser/rsbaseserial.h" + #include "retroshare/rsturtle.h" #include "retroshare/rsexpr.h" #include "retroshare/rstypes.h" -#include "rsitems/rsserviceids.h" #include "turtle/turtletypes.h" #include "serialization/rsserializer.h" @@ -58,7 +62,7 @@ class RsTurtleSearchResultItem: public RsTurtleItem void clear() { result.clear() ; } protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; @@ -87,7 +91,7 @@ class RsTurtleStringSearchRequestItem: public RsTurtleSearchRequestItem void clear() { match_string.clear() ; } protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleRegExpSearchRequestItem: public RsTurtleSearchRequestItem @@ -102,7 +106,7 @@ class RsTurtleRegExpSearchRequestItem: public RsTurtleSearchRequestItem void clear() { expr = RsRegularExpression::LinearizedExpression(); } protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; /***********************************************************************************/ @@ -121,7 +125,7 @@ class RsTurtleOpenTunnelItem: public RsTurtleItem void clear() { file_hash.clear() ;} protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsTurtleTunnelOkItem: public RsTurtleItem @@ -134,7 +138,7 @@ class RsTurtleTunnelOkItem: public RsTurtleItem void clear() {} protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; /***********************************************************************************/ @@ -198,7 +202,7 @@ class RsTurtleGenericDataItem: public RsTurtleGenericTunnelItem data_size = 0; } protected: - void serial_process(SerializeJob j,SerializeContext& ctx); + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; /***********************************************************************************/ From fb34fa19c02e417397f1b9984be3037eff02d091 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 13:44:09 +0200 Subject: [PATCH 179/230] switch GxsComment item to new serialization --- .../src/serialiser/rsgxscommentitems.cc | 32 +++++++++++++ .../src/serialiser/rsgxscommentitems.h | 46 ++++++------------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/libretroshare/src/serialiser/rsgxscommentitems.cc b/libretroshare/src/serialiser/rsgxscommentitems.cc index 11832701e..4f655cc13 100644 --- a/libretroshare/src/serialiser/rsgxscommentitems.cc +++ b/libretroshare/src/serialiser/rsgxscommentitems.cc @@ -28,9 +28,25 @@ #include "rsgxscommentitems.h" #include "serialiser/rstlvbase.h" #include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" //#define GXSCOMMENT_DEBUG 1 +RsItem *RsGxsCommentSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const +{ + if(service_id != getRsItemService(PacketId())) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXSCOMMENT_COMMENT_ITEM: return new RsGxsCommentItem(getRsItemService(PacketId())) ; + case RS_PKT_SUBTYPE_GXSCOMMENT_VOTE_ITEM: return new RsGxsVoteItem(getRsItemService(PacketId())); + default: + return NULL ; + } +} + +#ifdef TO_REMOVE uint32_t RsGxsCommentSerialiser::size(RsItem *item) { @@ -152,7 +168,15 @@ uint32_t RsGxsCommentSerialiser::sizeGxsCommentItem(RsGxsCommentItem *item) return s; } +#endif + +void RsGxsCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,1,mMsg.mComment,"mMsg.mComment") ; +} + +#ifdef TO_REMOVE bool RsGxsCommentSerialiser::serialiseGxsCommentItem(RsGxsCommentItem *item, void *data, uint32_t *size) { @@ -297,7 +321,14 @@ uint32_t RsGxsCommentSerialiser::sizeGxsVoteItem(RsGxsVoteItem */*item*/) return s; } +#endif +void RsGxsVoteItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mMsg.mVoteType,"mMsg.mVoteType") ; +} + +#ifdef TO_REMOVE bool RsGxsCommentSerialiser::serialiseGxsVoteItem(RsGxsVoteItem *item, void *data, uint32_t *size) { @@ -414,3 +445,4 @@ RsGxsVoteItem* RsGxsCommentSerialiser::deserialiseGxsVoteItem(void *data, uint32 /*****************************************************************************************/ /*****************************************************************************************/ +#endif diff --git a/libretroshare/src/serialiser/rsgxscommentitems.h b/libretroshare/src/serialiser/rsgxscommentitems.h index 2ccd6d5d8..37171ce94 100644 --- a/libretroshare/src/serialiser/rsgxscommentitems.h +++ b/libretroshare/src/serialiser/rsgxscommentitems.h @@ -43,54 +43,36 @@ class RsGxsCommentItem : public RsGxsMsgItem { public: - RsGxsCommentItem(uint16_t service_type): RsGxsMsgItem(service_type, - RS_PKT_SUBTYPE_GXSCOMMENT_COMMENT_ITEM) {return; } - virtual ~RsGxsCommentItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsCommentItem(uint16_t service_type): RsGxsMsgItem(service_type, RS_PKT_SUBTYPE_GXSCOMMENT_COMMENT_ITEM) {} + virtual ~RsGxsCommentItem() {} + void clear(){} + + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); RsGxsComment mMsg; }; - class RsGxsVoteItem : public RsGxsMsgItem { public: - RsGxsVoteItem(uint16_t service_type): RsGxsMsgItem(service_type, - RS_PKT_SUBTYPE_GXSCOMMENT_VOTE_ITEM) {return; } - virtual ~RsGxsVoteItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsVoteItem(uint16_t service_type): RsGxsMsgItem(service_type, RS_PKT_SUBTYPE_GXSCOMMENT_VOTE_ITEM) {} + virtual ~RsGxsVoteItem() {} + void clear(){} + + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */); RsGxsVote mMsg; }; - -class RsGxsCommentSerialiser : public RsSerialType +class RsGxsCommentSerialiser : public RsServiceSerializer { public: - RsGxsCommentSerialiser(uint16_t service_type) - :RsSerialType(RS_PKT_VERSION_SERVICE, service_type) - { return; } - virtual ~RsGxsCommentSerialiser() { return; } - - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsCommentItem(RsGxsCommentItem *item); - bool serialiseGxsCommentItem (RsGxsCommentItem *item, void *data, uint32_t *size); - RsGxsCommentItem * deserialiseGxsCommentItem(void *data, uint32_t *size); - - - uint32_t sizeGxsVoteItem(RsGxsVoteItem *item); - bool serialiseGxsVoteItem (RsGxsVoteItem *item, void *data, uint32_t *size); - RsGxsVoteItem * deserialiseGxsVoteItem(void *data, uint32_t *size); + RsGxsCommentSerialiser(uint16_t service_type) :RsServiceSerializer(service_type) {} + virtual ~RsGxsCommentSerialiser() {} + RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; #endif /* RS_GXS_COMMENT_ITEMS_H */ From c0d8735251a3f2c25191bc461ed60f587c286818 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 14:17:38 +0200 Subject: [PATCH 180/230] switched RsGxsIdItems to new serialization --- libretroshare/src/serialiser/rsgxsiditems.cc | 70 ++++++++++++++----- libretroshare/src/serialiser/rsgxsiditems.h | 49 ++----------- .../src/serialization/rstypeserializer.h | 52 ++++++++++++++ 3 files changed, 110 insertions(+), 61 deletions(-) diff --git a/libretroshare/src/serialiser/rsgxsiditems.cc b/libretroshare/src/serialiser/rsgxsiditems.cc index f5019b7f4..2daa65a49 100644 --- a/libretroshare/src/serialiser/rsgxsiditems.cc +++ b/libretroshare/src/serialiser/rsgxsiditems.cc @@ -31,8 +31,36 @@ #include "serialiser/rstlvstring.h" #include "util/rsstring.h" +#include "serialization/rstypeserializer.h" + #define GXSID_DEBUG 1 +RsItem *RsGxsIdSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const +{ + if(service_id != RS_SERVICE_GXS_TYPE_GXSID) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXSID_GROUP_ITEM : return new RsGxsIdGroupItem (); + case RS_PKT_SUBTYPE_GXSID_LOCAL_INFO_ITEM: return new RsGxsIdLocalInfoItem() ; + default: + return NULL ; + } +} +void RsGxsIdLocalInfoItem::clear() +{ + mTimeStamps.clear() ; +} +void RsGxsIdGroupItem::clear() +{ + mPgpIdHash.clear(); + mPgpIdSign.clear(); + + mRecognTags.clear(); + mImage.TlvClear(); +} +#ifdef TO_REMOVE RsItem* RsGxsIdSerialiser::deserialise(void* data, uint32_t* size) { /* get the type and size */ @@ -84,18 +112,8 @@ bool RsGxsIdItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsiz /*****************************************************************************************/ -void RsGxsIdLocalInfoItem::clear() -{ - mTimeStamps.clear() ; -} -void RsGxsIdGroupItem::clear() -{ - mPgpIdHash.clear(); - mPgpIdSign.clear(); - mRecognTags.clear(); - mImage.TlvClear(); -} + uint32_t RsGxsIdLocalInfoItem::serial_size() { uint32_t s = 8 ; // header @@ -160,8 +178,15 @@ uint32_t RsGxsIdGroupItem::serial_size() return s; } +#endif +void RsGxsIdLocalInfoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mTimeStamps,"mTimeStamps") ; + RsTypeSerializer::serial_process(j,ctx,mContacts,"mContacts") ; +} +#ifdef TO_REMOVE bool RsGxsIdLocalInfoItem::serialise(void *data, uint32_t& size) { uint32_t tlvsize,offset=0; @@ -199,7 +224,20 @@ bool RsGxsIdLocalInfoItem::serialise(void *data, uint32_t& size) return ok; } +#endif +void RsGxsIdGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mPgpIdHash,"mPgpIdHash") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_SIGN,mPgpIdSign,"mPgpIdSign") ; + + RsTlvStringSetRef rset(TLV_TYPE_RECOGNSET,mRecognTags) ; + + RsTypeSerializer::serial_process(j,ctx,rset,"mRecognTags") ; + RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; +} + +#ifdef TO_REMOVE bool RsGxsIdGroupItem::serialise(void *data, uint32_t& size) { uint32_t tlvsize,offset=0; @@ -234,7 +272,7 @@ bool RsGxsIdGroupItem::serialise(void *data, uint32_t& size) return ok; } - +#endif bool RsGxsIdGroupItem::fromGxsIdGroup(RsGxsIdGroup &group, bool moveImage) { @@ -275,6 +313,8 @@ bool RsGxsIdGroupItem::toGxsIdGroup(RsGxsIdGroup &group, bool moveImage) } return true ; } + +#ifdef TO_REMOVE RsGxsIdGroupItem* RsGxsIdSerialiser::deserialise_GxsIdGroupItem(void *data, uint32_t *size) { /* get the type and size */ @@ -427,6 +467,7 @@ RsGxsIdLocalInfoItem *RsGxsIdSerialiser::deserialise_GxsIdLocalInfoItem(void *da return item; } +#endif /*****************************************************************************************/ @@ -692,8 +733,3 @@ RsGxsIdCommentItem* RsGxsIdSerialiser::deserialise_GxsIdCommentItem(void *data, } #endif - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - diff --git a/libretroshare/src/serialiser/rsgxsiditems.h b/libretroshare/src/serialiser/rsgxsiditems.h index 39ca6882a..19802a9a1 100644 --- a/libretroshare/src/serialiser/rsgxsiditems.h +++ b/libretroshare/src/serialiser/rsgxsiditems.h @@ -45,14 +45,6 @@ class RsGxsIdItem: public RsGxsGrpItem { public: RsGxsIdItem(uint8_t item_subtype) : RsGxsGrpItem(RS_SERVICE_GXS_TYPE_GXSID,item_subtype) {} - - virtual bool serialise(void *data,uint32_t& size) = 0 ; - virtual uint32_t serial_size() = 0 ; - - virtual void clear() = 0 ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0; - - bool serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) ; }; class RsGxsIdGroupItem : public RsGxsIdItem @@ -62,11 +54,8 @@ public: RsGxsIdGroupItem(): RsGxsIdItem(RS_PKT_SUBTYPE_GXSID_GROUP_ITEM) {} virtual ~RsGxsIdGroupItem() {} + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; bool fromGxsIdGroup(RsGxsIdGroup &group, bool moveImage); bool toGxsIdGroup(RsGxsIdGroup &group, bool moveImage); @@ -91,10 +80,8 @@ public: virtual ~RsGxsIdLocalInfoItem() {} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); std::map mTimeStamps ; std::set mContacts ; @@ -133,39 +120,13 @@ public: }; #endif -class RsGxsIdSerialiser : public RsSerialType +class RsGxsIdSerialiser : public RsServiceSerializer { public: - RsGxsIdSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_GXSID) {} + RsGxsIdSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_GXSID) {} virtual ~RsGxsIdSerialiser() {} - virtual uint32_t size (RsItem *item) - { - RsGxsIdItem *idItem = dynamic_cast(item); - if (!idItem) - { - return 0; - } - return idItem->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - RsGxsIdItem *idItem = dynamic_cast(item); - if (!idItem) - { - return false; - } - return idItem->serialise(data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) ; - -private: -#if 0 - static RsGxsIdOpinionItem *deserialise_GxsIdOpinionItem(void *data, uint32_t *size); - static RsGxsIdCommentItem *deserialise_GxsIdCommentItem(void *data, uint32_t *size); -#endif - static RsGxsIdGroupItem *deserialise_GxsIdGroupItem(void *data, uint32_t *size); - static RsGxsIdLocalInfoItem *deserialise_GxsIdLocalInfoItem(void *data, uint32_t *size); + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; #endif /* RS_GXS_IDENTITY_ITEMS_H */ diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 31da447f4..5ff9f4944 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -199,6 +199,58 @@ class RsTypeSerializer break; } } + //=================================================================================================// + // std::set // + //=================================================================================================// + + template + static void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,std::set& v,const std::string& member_name) + { + switch(j) + { + case RsGenericSerializer::SIZE_ESTIMATE: + { + ctx.mOffset += 4 ; + for(typename std::set::iterator it(v.begin());it!=v.end();++it) + serial_process(j,ctx,const_cast(*it) ,member_name) ; + } + break ; + + case RsGenericSerializer::DESERIALIZE: + { uint32_t n=0 ; + serial_process(j,ctx,n,"temporary size") ; + + for(uint32_t i=0;i(j,ctx,tmp,member_name) ; + v.insert(tmp); + } + } + break ; + + case RsGenericSerializer::SERIALIZE: + { + uint32_t n=v.size(); + serial_process(j,ctx,n,"temporary size") ; + for(typename std::set::iterator it(v.begin());it!=v.end();++it) + serial_process(j,ctx,const_cast(*it) ,member_name) ; + } + break ; + + case RsGenericSerializer::PRINT: + { + if(v.empty()) + std::cerr << " Empty set"<< std::endl; + else + std::cerr << " Set of " << v.size() << " elements:" << std::endl; + } + break; + default: + break; + } + } + //=================================================================================================// // std::list // From 97d0df0737f522bf7511bb6b616b17efeae646ec Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 14:19:34 +0200 Subject: [PATCH 181/230] added comment about serialization hack --- libretroshare/src/serialization/rstypeserializer.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 5ff9f4944..3da545df8 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -212,7 +212,7 @@ class RsTypeSerializer { ctx.mOffset += 4 ; for(typename std::set::iterator it(v.begin());it!=v.end();++it) - serial_process(j,ctx,const_cast(*it) ,member_name) ; + serial_process(j,ctx,const_cast(*it) ,member_name) ; // the const cast here is a hack to avoid serial_process to instantiate serialise(const T&) } break ; @@ -234,7 +234,7 @@ class RsTypeSerializer uint32_t n=v.size(); serial_process(j,ctx,n,"temporary size") ; for(typename std::set::iterator it(v.begin());it!=v.end();++it) - serial_process(j,ctx,const_cast(*it) ,member_name) ; + serial_process(j,ctx,const_cast(*it) ,member_name) ; // the const cast here is a hack to avoid serial_process to instantiate serialise(const T&) } break ; From 508a2e2864aaa6bcd848d7dc54d6016c947c6cfb Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 14:28:25 +0200 Subject: [PATCH 182/230] moved gxs comment and Id items to rsitems/ --- libretroshare/src/gxs/rsgds.h | 2 +- libretroshare/src/gxs/rsgxsdata.h | 25 +++++++++---------- libretroshare/src/libretroshare.pro | 12 ++++----- .../rsgxscommentitems.cc | 0 .../rsgxscommentitems.h | 0 .../{serialiser => rsitems}/rsgxsiditems.cc | 0 .../{serialiser => rsitems}/rsgxsiditems.h | 0 .../src/{serialiser => rsitems}/rsgxsitems.cc | 0 .../src/{serialiser => rsitems}/rsgxsitems.h | 0 .../src/serialiser/rsgxschannelitems.h | 8 +++--- .../src/serialiser/rsgxscircleitems.h | 4 +-- .../src/serialiser/rsgxsforumitems.h | 4 +-- libretroshare/src/serialiser/rsposteditems.h | 7 ++---- libretroshare/src/services/p3gxscommon.cc | 2 +- libretroshare/src/services/p3idservice.cc | 2 +- libretroshare/src/services/p3idservice.h | 2 +- libretroshare/src/services/p3postbase.cc | 2 +- 17 files changed, 31 insertions(+), 39 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsgxscommentitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxscommentitems.h (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsiditems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsiditems.h (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsitems.h (100%) diff --git a/libretroshare/src/gxs/rsgds.h b/libretroshare/src/gxs/rsgds.h index c56b47c12..5a82337fe 100644 --- a/libretroshare/src/gxs/rsgds.h +++ b/libretroshare/src/gxs/rsgds.h @@ -32,7 +32,7 @@ #include "inttypes.h" -#include "serialiser/rsgxsitems.h" +#include "rsitems/rsgxsitems.h" #include "serialiser/rsnxsitems.h" #include "gxs/rsgxsdata.h" #include "rsgxs.h" diff --git a/libretroshare/src/gxs/rsgxsdata.h b/libretroshare/src/gxs/rsgxsdata.h index 21fbe1445..6e85193dc 100644 --- a/libretroshare/src/gxs/rsgxsdata.h +++ b/libretroshare/src/gxs/rsgxsdata.h @@ -29,10 +29,9 @@ #include #include - -#include "serialiser/rsserial.h" #include "serialiser/rstlvkeys.h" -#include "serialiser/rsgxsitems.h" + +#include "rsitems/rsgxsitems.h" class RsGroupMetaData; class RsMsgMetaData; @@ -56,22 +55,22 @@ public: void clear(); void operator =(const RsGroupMetaData& rMeta); - //Sort data in same order than serialiser and deserializer + //Sort data in same order than serialiser and deserializer RsGxsGroupId mGroupId; RsGxsGroupId mOrigGrpId; - RsGxsGroupId mParentGrpId; + RsGxsGroupId mParentGrpId; std::string mGroupName; uint32_t mGroupFlags; // GXS_SERV::FLAG_PRIVACY_RESTRICTED | GXS_SERV::FLAG_PRIVACY_PRIVATE | GXS_SERV::FLAG_PRIVACY_PUBLIC uint32_t mPublishTs; - uint32_t mCircleType; - uint32_t mAuthenFlags; + uint32_t mCircleType; + uint32_t mAuthenFlags; RsGxsId mAuthorId; - std::string mServiceString; + std::string mServiceString; RsGxsCircleId mCircleId; RsTlvKeySignatureSet signSet; RsTlvSecurityKeySet keys; - uint32_t mSignFlags; + uint32_t mSignFlags; // BELOW HERE IS LOCAL DATA, THAT IS NOT FROM MSG. @@ -103,9 +102,9 @@ public: void clear(); void operator =(const RsMsgMetaData& rMeta); - static int refcount; - - //Sort data in same order than serialiser and deserializer + static int refcount; + + //Sort data in same order than serialiser and deserializer RsGxsGroupId mGroupId; RsGxsMessageId mMsgId; RsGxsMessageId mThreadId; @@ -121,7 +120,7 @@ public: // BELOW HERE IS LOCAL DATA, THAT IS NOT FROM MSG. // normally READ / UNREAD flags. LOCAL Data. - std::string mServiceString; + std::string mServiceString; uint32_t mMsgStatus; uint32_t mMsgSize; time_t mChildTs; diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 287e6a4d7..aa2aecf9e 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -735,7 +735,7 @@ HEADERS += serialiser/rsnxsitems.h \ retroshare/rstokenservice.h \ gxs/rsgxsdataaccess.h \ retroshare/rsgxsservice.h \ - serialiser/rsgxsitems.h \ + rsitems/rsgxsitems.h \ util/retrodb.h \ util/rsdbbind.h \ gxs/rsgxsutil.h \ @@ -753,7 +753,7 @@ SOURCES += serialiser/rsnxsitems.cc \ gxs/rsgenexchange.cc \ gxs/rsgxsnetservice.cc \ gxs/rsgxsdata.cc \ - serialiser/rsgxsitems.cc \ + rsitems/rsgxsitems.cc \ gxs/rsgxsdataaccess.cc \ util/retrodb.cc \ util/contentvalue.cc \ @@ -783,12 +783,12 @@ SOURCES += serialization/rsserializer.cc \ HEADERS += retroshare/rsidentity.h \ gxs/rsgixs.h \ services/p3idservice.h \ - serialiser/rsgxsiditems.h \ + rsitems/rsgxsiditems.h \ services/p3gxsreputation.h \ rsitems/rsgxsreputationitems.h \ SOURCES += services/p3idservice.cc \ - serialiser/rsgxsiditems.cc \ + rsitems/rsgxsiditems.cc \ services/p3gxsreputation.cc \ rsitems/rsgxsreputationitems.cc \ @@ -812,12 +812,12 @@ SOURCES += services/p3gxsforums.cc \ HEADERS += retroshare/rsgxschannels.h \ services/p3gxschannels.h \ services/p3gxscommon.h \ - serialiser/rsgxscommentitems.h \ + rsitems/rsgxscommentitems.h \ serialiser/rsgxschannelitems.h \ SOURCES += services/p3gxschannels.cc \ services/p3gxscommon.cc \ - serialiser/rsgxscommentitems.cc \ + rsitems/rsgxscommentitems.cc \ serialiser/rsgxschannelitems.cc \ wikipoos { diff --git a/libretroshare/src/serialiser/rsgxscommentitems.cc b/libretroshare/src/rsitems/rsgxscommentitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsgxscommentitems.cc rename to libretroshare/src/rsitems/rsgxscommentitems.cc diff --git a/libretroshare/src/serialiser/rsgxscommentitems.h b/libretroshare/src/rsitems/rsgxscommentitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxscommentitems.h rename to libretroshare/src/rsitems/rsgxscommentitems.h diff --git a/libretroshare/src/serialiser/rsgxsiditems.cc b/libretroshare/src/rsitems/rsgxsiditems.cc similarity index 100% rename from libretroshare/src/serialiser/rsgxsiditems.cc rename to libretroshare/src/rsitems/rsgxsiditems.cc diff --git a/libretroshare/src/serialiser/rsgxsiditems.h b/libretroshare/src/rsitems/rsgxsiditems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsiditems.h rename to libretroshare/src/rsitems/rsgxsiditems.h diff --git a/libretroshare/src/serialiser/rsgxsitems.cc b/libretroshare/src/rsitems/rsgxsitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsgxsitems.cc rename to libretroshare/src/rsitems/rsgxsitems.cc diff --git a/libretroshare/src/serialiser/rsgxsitems.h b/libretroshare/src/rsitems/rsgxsitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsitems.h rename to libretroshare/src/rsitems/rsgxsitems.h diff --git a/libretroshare/src/serialiser/rsgxschannelitems.h b/libretroshare/src/serialiser/rsgxschannelitems.h index 9a937e581..51939d576 100644 --- a/libretroshare/src/serialiser/rsgxschannelitems.h +++ b/libretroshare/src/serialiser/rsgxschannelitems.h @@ -29,14 +29,12 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" +#include "rsitems/rsgxscommentitems.h" +#include "rsitems/rsgxsitems.h" + #include "serialiser/rstlvfileitem.h" #include "serialiser/rstlvimage.h" -#include "serialiser/rsgxscommentitems.h" - -#include "rsgxsitems.h" #include "retroshare/rsgxschannels.h" #include "util/rsdir.h" diff --git a/libretroshare/src/serialiser/rsgxscircleitems.h b/libretroshare/src/serialiser/rsgxscircleitems.h index 84316b133..ba28f2782 100644 --- a/libretroshare/src/serialiser/rsgxscircleitems.h +++ b/libretroshare/src/serialiser/rsgxscircleitems.h @@ -29,12 +29,12 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" + #include "serialiser/rstlvitem.h" #include "serialiser/rstlvstring.h" #include "serialiser/rstlvidset.h" -#include "rsgxsitems.h" +#include "rsitems/rsgxsitems.h" #include "retroshare/rsgxscircles.h" const uint8_t RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM = 0x02; diff --git a/libretroshare/src/serialiser/rsgxsforumitems.h b/libretroshare/src/serialiser/rsgxsforumitems.h index 97f6dd89b..22fae7e63 100644 --- a/libretroshare/src/serialiser/rsgxsforumitems.h +++ b/libretroshare/src/serialiser/rsgxsforumitems.h @@ -29,10 +29,8 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" +#include "rsitems/rsgxsitems.h" -#include "rsgxsitems.h" #include "retroshare/rsgxsforums.h" const uint8_t RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM = 0x02; diff --git a/libretroshare/src/serialiser/rsposteditems.h b/libretroshare/src/serialiser/rsposteditems.h index a303f0d33..e78dfafe1 100644 --- a/libretroshare/src/serialiser/rsposteditems.h +++ b/libretroshare/src/serialiser/rsposteditems.h @@ -2,12 +2,9 @@ #define RSPOSTEDITEMS_H #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" +#include "rsitems/rsgxscommentitems.h" +#include "rsitems/rsgxsitems.h" -#include "serialiser/rsgxscommentitems.h" - -#include "rsgxsitems.h" #include "retroshare/rsposted.h" const uint8_t RS_PKT_SUBTYPE_POSTED_GRP_ITEM = 0x02; diff --git a/libretroshare/src/services/p3gxscommon.cc b/libretroshare/src/services/p3gxscommon.cc index ad97f1eca..822c19cdf 100644 --- a/libretroshare/src/services/p3gxscommon.cc +++ b/libretroshare/src/services/p3gxscommon.cc @@ -25,7 +25,7 @@ #include "retroshare/rsgxscommon.h" #include "services/p3gxscommon.h" -#include "serialiser/rsgxscommentitems.h" +#include "rsitems/rsgxscommentitems.h" #include "util/rsstring.h" #include diff --git a/libretroshare/src/services/p3idservice.cc b/libretroshare/src/services/p3idservice.cc index c173dba8a..37c609373 100644 --- a/libretroshare/src/services/p3idservice.cc +++ b/libretroshare/src/services/p3idservice.cc @@ -27,7 +27,7 @@ #include "services/p3idservice.h" #include "pgp/pgpauxutils.h" -#include "serialiser/rsgxsiditems.h" +#include "rsitems/rsgxsiditems.h" #include "rsitems/rsconfigitems.h" #include "retroshare/rsgxsflags.h" #include "util/rsrandom.h" diff --git a/libretroshare/src/services/p3idservice.h b/libretroshare/src/services/p3idservice.h index addff0d1b..caf29ee73 100644 --- a/libretroshare/src/services/p3idservice.h +++ b/libretroshare/src/services/p3idservice.h @@ -32,7 +32,7 @@ #include "gxs/rsgixs.h" // Internal Interfaces. #include "gxs/gxstokenqueue.h" -#include "serialiser/rsgxsiditems.h" +#include "rsitems/rsgxsiditems.h" #include #include diff --git a/libretroshare/src/services/p3postbase.cc b/libretroshare/src/services/p3postbase.cc index cb3c43fc1..077104db0 100644 --- a/libretroshare/src/services/p3postbase.cc +++ b/libretroshare/src/services/p3postbase.cc @@ -30,7 +30,7 @@ #include #include "services/p3postbase.h" -#include "serialiser/rsgxscommentitems.h" +#include "rsitems/rsgxscommentitems.h" #include "rsserver/p3face.h" #include "retroshare/rsnotify.h" From c31396a010883c4d98a80bcabf37e1536e48e534 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 14:31:15 +0200 Subject: [PATCH 183/230] moved dsdv code to unused directory --- libretroshare/src/libretroshare.pro | 14 +++++++------- libretroshare/src/{services => unused}/p3dsdv.cc | 0 libretroshare/src/{services => unused}/p3dsdv.h | 0 libretroshare/src/{retroshare => unused}/rsdsdv.h | 0 .../src/{serialiser => unused}/rsdsdvitems.cc | 0 .../src/{serialiser => unused}/rsdsdvitems.h | 0 6 files changed, 7 insertions(+), 7 deletions(-) rename libretroshare/src/{services => unused}/p3dsdv.cc (100%) rename libretroshare/src/{services => unused}/p3dsdv.h (100%) rename libretroshare/src/{retroshare => unused}/rsdsdv.h (100%) rename libretroshare/src/{serialiser => unused}/rsdsdvitems.cc (100%) rename libretroshare/src/{serialiser => unused}/rsdsdvitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index aa2aecf9e..781228027 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -61,14 +61,14 @@ file_lists { dsdv { DEFINES *= SERVICES_DSDV -HEADERS += services/p3dsdv.h \ - serialiser/rstlvdsdv.h \ - serialiser/rsdsdvitems.h \ - retroshare/rsdsdv.h +HEADERS += unused/p3dsdv.h \ + unused/rstlvdsdv.h \ + unused/rsdsdvitems.h \ + unused/rsdsdv.h -SOURCES *= serialiser/rstlvdsdv.cc \ - serialiser/rsdsdvitems.cc \ - services/p3dsdv.cc +SOURCES *= unused/rstlvdsdv.cc \ + unused/rsdsdvitems.cc \ + unused/p3dsdv.cc } bitdht { diff --git a/libretroshare/src/services/p3dsdv.cc b/libretroshare/src/unused/p3dsdv.cc similarity index 100% rename from libretroshare/src/services/p3dsdv.cc rename to libretroshare/src/unused/p3dsdv.cc diff --git a/libretroshare/src/services/p3dsdv.h b/libretroshare/src/unused/p3dsdv.h similarity index 100% rename from libretroshare/src/services/p3dsdv.h rename to libretroshare/src/unused/p3dsdv.h diff --git a/libretroshare/src/retroshare/rsdsdv.h b/libretroshare/src/unused/rsdsdv.h similarity index 100% rename from libretroshare/src/retroshare/rsdsdv.h rename to libretroshare/src/unused/rsdsdv.h diff --git a/libretroshare/src/serialiser/rsdsdvitems.cc b/libretroshare/src/unused/rsdsdvitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsdsdvitems.cc rename to libretroshare/src/unused/rsdsdvitems.cc diff --git a/libretroshare/src/serialiser/rsdsdvitems.h b/libretroshare/src/unused/rsdsdvitems.h similarity index 100% rename from libretroshare/src/serialiser/rsdsdvitems.h rename to libretroshare/src/unused/rsdsdvitems.h From 8f97647246ec30080436a8c8fb8d30743dd97895 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 15:43:00 +0200 Subject: [PATCH 184/230] fixed bug in RsGxsId deserialization --- libretroshare/src/gxs/rsgenexchange.cc | 3 ++- libretroshare/src/rsitems/rsgxsiditems.cc | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index a334f7e3d..c59da85de 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -1323,7 +1323,8 @@ bool RsGenExchange::getGroupData(const uint32_t &token, std::vector 0) - std::cerr << "(EE) RsGenExchange::getGroupData() Item type is probably not handled. Data is: " << RsUtil::BinToHex((unsigned char*)data.bin_data,std::min(50u,data.bin_len)) << ((data.bin_len>50)?"...":"") << std::endl; + //std::cerr << "(EE) RsGenExchange::getGroupData() Item type is probably not handled. Data is: " << RsUtil::BinToHex((unsigned char*)data.bin_data,std::min(50u,data.bin_len)) << ((data.bin_len>50)?"...":"") << std::endl; + std::cerr << "(EE) RsGenExchange::getGroupData() Item type is probably not handled. Data is: " << RsUtil::BinToHex((unsigned char*)data.bin_data,data.bin_len) << std::endl; delete *lit; } diff --git a/libretroshare/src/rsitems/rsgxsiditems.cc b/libretroshare/src/rsitems/rsgxsiditems.cc index 2daa65a49..cb5ed324e 100644 --- a/libretroshare/src/rsitems/rsgxsiditems.cc +++ b/libretroshare/src/rsitems/rsgxsiditems.cc @@ -234,6 +234,12 @@ void RsGxsIdGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGene RsTlvStringSetRef rset(TLV_TYPE_RECOGNSET,mRecognTags) ; RsTypeSerializer::serial_process(j,ctx,rset,"mRecognTags") ; + + // image is optional + + if(j == RsGenericSerializer::DESERIALIZE && ctx.mOffset == ctx.mSize) + return ; + RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; } From 77c2e6da8c80d1f762264bc86a753c5f897b4a64 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 18:14:10 +0200 Subject: [PATCH 185/230] improved error handlign in pqistore --- libretroshare/src/pqi/pqistore.cc | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/libretroshare/src/pqi/pqistore.cc b/libretroshare/src/pqi/pqistore.cc index 23201541a..7372529b1 100644 --- a/libretroshare/src/pqi/pqistore.cc +++ b/libretroshare/src/pqi/pqistore.cc @@ -310,24 +310,25 @@ int pqistore::readPkt(RsItem **item_out) } // workout how much more to read. - int extralen = getRsItemSize(block) - blen; - int totallen = extralen+blen; - - // make sure that totallen is not a crazy number. If so, we drop the entire stream that might be corrupted. - - if(totallen > 1024*1024) + int blocklength = getRsItemSize(block); + + // make sure that blocklength is not a crazy number. If so, we drop the entire stream that might be corrupted. + + if(blocklength < blen || blocklength > 1024*1024*10) { - std::cerr << "pqistore: ERROR: trying to realloc memory for packet of length" << totallen <<", which exceeds the allowed limit (1MB)" << std::endl ; + std::cerr << "pqistore: ERROR: trying to realloc memory for packet of length" << blocklength <<", which is either too small, or exceeds the safety limit (10 MB)" << std::endl ; free(block) ; bStopReading=true; return 0 ; } - void *tmp = realloc(block, totallen); + int extralen = blocklength - blen; + + void *tmp = realloc(block, blocklength); if (tmp == NULL) { free(block); - std::cerr << "pqistore: ERROR: trying to realloc memory for packet of length" << totallen << std::endl ; + std::cerr << "pqistore: ERROR: trying to realloc memory for packet of length" << blocklength << std::endl ; std::cerr << "Have you got enought memory?" << std::endl ; bStopReading=true; return 0 ; @@ -522,17 +523,18 @@ int pqiSSLstore::readPkt(RsItem **item_out) } // workout how much more to read. - int extralen = getRsItemSize(block) - blen; - int totallen = extralen+blen; + int blocklength = getRsItemSize(block); - if(totallen > 1024*1024 || totallen 1024*1024*10) { free(block); - std::cerr << "pqiSSLstore: ERROR: trying to realloc memory for packet of length" << totallen << ", that exceeds the limit of 1MB" << std::endl ; + std::cerr << "pqiSSLstore: ERROR: block length has invalid value " << blocklength << " (either too small, or exceeds the safety limit of 10 MB)" << std::endl ; bStopReading=true; return 0 ; } - void *tmp = realloc(block, totallen); + int extralen = blocklength - blen; + + void *tmp = realloc(block, blocklength); if (tmp == NULL) { From 69729ad7d2f6c9f049221627953fdd780f0fa1b9 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 18:55:23 +0200 Subject: [PATCH 186/230] switch Channel items to new serialization --- libretroshare/src/rsitems/rsgxscommentitems.h | 2 +- .../src/serialiser/rsgxschannelitems.cc | 78 ++++++++++++++----- .../src/serialiser/rsgxschannelitems.h | 46 ++++------- 3 files changed, 74 insertions(+), 52 deletions(-) diff --git a/libretroshare/src/rsitems/rsgxscommentitems.h b/libretroshare/src/rsitems/rsgxscommentitems.h index 37171ce94..dcb89e2de 100644 --- a/libretroshare/src/rsitems/rsgxscommentitems.h +++ b/libretroshare/src/rsitems/rsgxscommentitems.h @@ -72,7 +72,7 @@ public: RsGxsCommentSerialiser(uint16_t service_type) :RsServiceSerializer(service_type) {} virtual ~RsGxsCommentSerialiser() {} - RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; #endif /* RS_GXS_COMMENT_ITEMS_H */ diff --git a/libretroshare/src/serialiser/rsgxschannelitems.cc b/libretroshare/src/serialiser/rsgxschannelitems.cc index bad8a0a98..f540fffd7 100644 --- a/libretroshare/src/serialiser/rsgxschannelitems.cc +++ b/libretroshare/src/serialiser/rsgxschannelitems.cc @@ -29,9 +29,25 @@ #include "serialiser/rstlvbase.h" #include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" + //#define GXSCHANNEL_DEBUG 1 +RsItem *RsGxsChannelSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const +{ + if(service_id != RS_SERVICE_GXS_TYPE_CHANNELS) + return NULL ; + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM: return new RsGxsChannelGroupItem() ; + case RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM: return new RsGxsChannelPostItem(); + default: + return RsGxsCommentSerialiser::create_item(service_id,item_subtype) ; + } +} + +#ifdef TO_REMOVE uint32_t RsGxsChannelSerialiser::size(RsItem *item) { #ifdef GXSCHANNEL_DEBUG @@ -113,19 +129,6 @@ RsItem* RsGxsChannelSerialiser::deserialise(void* data, uint32_t* size) return NULL; } - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsChannelGroupItem::clear() -{ - mDescription.clear(); - mImage.TlvClear(); -} - std::ostream& RsGxsChannelGroupItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsChannelGroupItem", indent); @@ -141,6 +144,19 @@ std::ostream& RsGxsChannelGroupItem::print(std::ostream& out, uint16_t indent) return out; } +#endif + +/*****************************************************************************************/ +/*****************************************************************************************/ +/*****************************************************************************************/ + + +void RsGxsChannelGroupItem::clear() +{ + mDescription.clear(); + mImage.TlvClear(); +} + bool RsGxsChannelGroupItem::fromChannelGroup(RsGxsChannelGroup &group, bool moveImage) @@ -181,6 +197,7 @@ bool RsGxsChannelGroupItem::toChannelGroup(RsGxsChannelGroup &group, bool moveIm return true; } +#ifdef TO_REMOVE uint32_t RsGxsChannelSerialiser::sizeGxsChannelGroupItem(RsGxsChannelGroupItem *item) { @@ -191,7 +208,15 @@ uint32_t RsGxsChannelSerialiser::sizeGxsChannelGroupItem(RsGxsChannelGroupItem * return s; } +#endif +void RsGxsChannelGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DESCR,mDescription,"mDescription") ; + RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; +} + +#ifdef TO_REMOVE bool RsGxsChannelSerialiser::serialiseGxsChannelGroupItem(RsGxsChannelGroupItem *item, void *data, uint32_t *size) { @@ -312,14 +337,6 @@ RsGxsChannelGroupItem* RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem(vo /*****************************************************************************************/ /*****************************************************************************************/ - -void RsGxsChannelPostItem::clear() -{ - mMsg.clear(); - mAttachment.TlvClear(); - mThumbnail.TlvClear(); -} - std::ostream& RsGxsChannelPostItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsChannelPostItem", indent); @@ -337,6 +354,7 @@ std::ostream& RsGxsChannelPostItem::print(std::ostream& out, uint16_t indent) printRsItemEnd(out ,"RsGxsChannelPostItem", indent); return out; } +#endif bool RsGxsChannelPostItem::fromChannelPost(RsGxsChannelPost &post, bool moveImage) @@ -402,6 +420,14 @@ bool RsGxsChannelPostItem::toChannelPost(RsGxsChannelPost &post, bool moveImage) return true; } +void RsGxsChannelPostItem::clear() +{ + mMsg.clear(); + mAttachment.TlvClear(); + mThumbnail.TlvClear(); +} + +#ifdef TO_REMOVE uint32_t RsGxsChannelSerialiser::sizeGxsChannelPostItem(RsGxsChannelPostItem *item) { @@ -413,7 +439,16 @@ uint32_t RsGxsChannelSerialiser::sizeGxsChannelPostItem(RsGxsChannelPostItem *it return s; } +#endif +void RsGxsChannelPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,mMsg,"mMsg") ; + RsTypeSerializer::serial_process(j,ctx,mAttachment,"mAttachment") ; + RsTypeSerializer::serial_process(j,ctx,mThumbnail,"mThumbnail") ; +} + +#ifdef TO_REMOVE bool RsGxsChannelSerialiser::serialiseGxsChannelPostItem(RsGxsChannelPostItem *item, void *data, uint32_t *size) { @@ -533,4 +568,5 @@ RsGxsChannelPostItem* RsGxsChannelSerialiser::deserialiseGxsChannelPostItem(void /*****************************************************************************************/ /*****************************************************************************************/ /*****************************************************************************************/ +#endif diff --git a/libretroshare/src/serialiser/rsgxschannelitems.h b/libretroshare/src/serialiser/rsgxschannelitems.h index 51939d576..b4caf5197 100644 --- a/libretroshare/src/serialiser/rsgxschannelitems.h +++ b/libretroshare/src/serialiser/rsgxschannelitems.h @@ -37,22 +37,23 @@ #include "retroshare/rsgxschannels.h" +#include "serialization/rsserializer.h" + #include "util/rsdir.h" const uint8_t RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM = 0x02; -const uint8_t RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM = 0x03; +const uint8_t RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM = 0x03; class RsGxsChannelGroupItem : public RsGxsGrpItem { - public: - RsGxsChannelGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_CHANNELS, - RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM) { return;} - virtual ~RsGxsChannelGroupItem() { return;} + RsGxsChannelGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_CHANNELS, RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM) {} + virtual ~RsGxsChannelGroupItem() {} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // use conversion functions to transform: bool fromChannelGroup(RsGxsChannelGroup &group, bool moveImage); @@ -66,11 +67,11 @@ class RsGxsChannelPostItem : public RsGxsMsgItem { public: - RsGxsChannelPostItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_CHANNELS, - RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM) {return; } - virtual ~RsGxsChannelPostItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsChannelPostItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_CHANNELS, RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM) {} + virtual ~RsGxsChannelPostItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // Slightly unusual structure. // use conversion functions to transform: @@ -87,25 +88,10 @@ class RsGxsChannelSerialiser : public RsGxsCommentSerialiser { public: - RsGxsChannelSerialiser() - :RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_CHANNELS) - { return; } - virtual ~RsGxsChannelSerialiser() { return; } - - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsChannelGroupItem(RsGxsChannelGroupItem *item); - bool serialiseGxsChannelGroupItem (RsGxsChannelGroupItem *item, void *data, uint32_t *size); - RsGxsChannelGroupItem * deserialiseGxsChannelGroupItem(void *data, uint32_t *size); - - uint32_t sizeGxsChannelPostItem(RsGxsChannelPostItem *item); - bool serialiseGxsChannelPostItem (RsGxsChannelPostItem *item, void *data, uint32_t *size); - RsGxsChannelPostItem * deserialiseGxsChannelPostItem(void *data, uint32_t *size); + RsGxsChannelSerialiser() :RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_CHANNELS) {} + virtual ~RsGxsChannelSerialiser() {} + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; #endif /* RS_GXS_CHANNEL_ITEMS_H */ From db645239cbb9c90733c4a95f89c44fe18a354378 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 20:15:54 +0200 Subject: [PATCH 187/230] moved rsgxschannel items to rsitems --- libretroshare/src/libretroshare.pro | 4 +- .../src/rsitems/rsgxschannelitems.cc | 173 ++++++ .../rsgxschannelitems.h | 0 libretroshare/src/rsitems/rsgxscommentitems.h | 3 +- libretroshare/src/rsitems/rsgxsitems.h | 4 +- .../src/serialiser/rsgxschannelitems.cc | 572 ------------------ 6 files changed, 177 insertions(+), 579 deletions(-) create mode 100644 libretroshare/src/rsitems/rsgxschannelitems.cc rename libretroshare/src/{serialiser => rsitems}/rsgxschannelitems.h (100%) delete mode 100644 libretroshare/src/serialiser/rsgxschannelitems.cc diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 781228027..d13df8213 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -813,12 +813,12 @@ HEADERS += retroshare/rsgxschannels.h \ services/p3gxschannels.h \ services/p3gxscommon.h \ rsitems/rsgxscommentitems.h \ - serialiser/rsgxschannelitems.h \ + rsitems/rsgxschannelitems.h \ SOURCES += services/p3gxschannels.cc \ services/p3gxscommon.cc \ rsitems/rsgxscommentitems.cc \ - serialiser/rsgxschannelitems.cc \ + rsitems/rsgxschannelitems.cc \ wikipoos { # Wiki Service diff --git a/libretroshare/src/rsitems/rsgxschannelitems.cc b/libretroshare/src/rsitems/rsgxschannelitems.cc new file mode 100644 index 000000000..789357b4c --- /dev/null +++ b/libretroshare/src/rsitems/rsgxschannelitems.cc @@ -0,0 +1,173 @@ +/* + * libretroshare/src/serialiser: rsgxschannelitems.cc + * + * RetroShare C++ Interface. + * + * Copyright 2012-2012 by Robert Fernie + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "retroshare@lunamutt.com". + * + */ + +#include + +#include "rsgxschannelitems.h" +#include "serialiser/rstlvbase.h" +#include "serialiser/rsbaseserial.h" + +#include "serialization/rstypeserializer.h" + +RsItem *RsGxsChannelSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const +{ + if(service_id != RS_SERVICE_GXS_TYPE_CHANNELS) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM: return new RsGxsChannelGroupItem() ; + case RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM: return new RsGxsChannelPostItem(); + default: + return RsGxsCommentSerialiser::create_item(service_id,item_subtype) ; + } +} + +void RsGxsChannelGroupItem::clear() +{ + mDescription.clear(); + mImage.TlvClear(); +} + +bool RsGxsChannelGroupItem::fromChannelGroup(RsGxsChannelGroup &group, bool moveImage) +{ + clear(); + meta = group.mMeta; + mDescription = group.mDescription; + + if (moveImage) + { + mImage.binData.bin_data = group.mImage.mData; + mImage.binData.bin_len = group.mImage.mSize; + group.mImage.shallowClear(); + } + else + { + mImage.binData.setBinData(group.mImage.mData, group.mImage.mSize); + } + return true; +} + + + +bool RsGxsChannelGroupItem::toChannelGroup(RsGxsChannelGroup &group, bool moveImage) +{ + group.mMeta = meta; + group.mDescription = mDescription; + if (moveImage) + { + group.mImage.take((uint8_t *) mImage.binData.bin_data, mImage.binData.bin_len); + // mImage doesn't have a ShallowClear at the moment! + mImage.binData.TlvShallowClear(); + } + else + { + group.mImage.copy((uint8_t *) mImage.binData.bin_data, mImage.binData.bin_len); + } + return true; +} + +void RsGxsChannelGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DESCR,mDescription,"mDescription") ; + RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; +} + +bool RsGxsChannelPostItem::fromChannelPost(RsGxsChannelPost &post, bool moveImage) +{ + clear(); + meta = post.mMeta; + mMsg = post.mMsg; + + if (moveImage) + { + mThumbnail.binData.bin_data = post.mThumbnail.mData; + mThumbnail.binData.bin_len = post.mThumbnail.mSize; + post.mThumbnail.shallowClear(); + } + else + { + mThumbnail.binData.setBinData(post.mThumbnail.mData, post.mThumbnail.mSize); + } + + std::list::iterator fit; + for(fit = post.mFiles.begin(); fit != post.mFiles.end(); ++fit) + { + RsTlvFileItem fi; + fi.name = fit->mName; + fi.filesize = fit->mSize; + fi.hash = fit->mHash; + mAttachment.items.push_back(fi); + } + return true; +} + + + +bool RsGxsChannelPostItem::toChannelPost(RsGxsChannelPost &post, bool moveImage) +{ + post.mMeta = meta; + post.mMsg = mMsg; + if (moveImage) + { + post.mThumbnail.take((uint8_t *) mThumbnail.binData.bin_data, mThumbnail.binData.bin_len); + // mThumbnail doesn't have a ShallowClear at the moment! + mThumbnail.binData.TlvShallowClear(); + } + else + { + post.mThumbnail.copy((uint8_t *) mThumbnail.binData.bin_data, mThumbnail.binData.bin_len); + } + + post.mCount = 0; + post.mSize = 0; + std::list::iterator fit; + for(fit = mAttachment.items.begin(); fit != mAttachment.items.end(); ++fit) + { + RsGxsFile fi; + fi.mName = RsDirUtil::getTopDir(fit->name); + fi.mSize = fit->filesize; + fi.mHash = fit->hash; + + post.mFiles.push_back(fi); + post.mCount++; + post.mSize += fi.mSize; + } + return true; +} + +void RsGxsChannelPostItem::clear() +{ + mMsg.clear(); + mAttachment.TlvClear(); + mThumbnail.TlvClear(); +} + +void RsGxsChannelPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,mMsg,"mMsg") ; + RsTypeSerializer::serial_process(j,ctx,mAttachment,"mAttachment") ; + RsTypeSerializer::serial_process(j,ctx,mThumbnail,"mThumbnail") ; +} diff --git a/libretroshare/src/serialiser/rsgxschannelitems.h b/libretroshare/src/rsitems/rsgxschannelitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxschannelitems.h rename to libretroshare/src/rsitems/rsgxschannelitems.h diff --git a/libretroshare/src/rsitems/rsgxscommentitems.h b/libretroshare/src/rsitems/rsgxscommentitems.h index dcb89e2de..ec5d6ae2c 100644 --- a/libretroshare/src/rsitems/rsgxscommentitems.h +++ b/libretroshare/src/rsitems/rsgxscommentitems.h @@ -29,8 +29,6 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" #include "rsgxsitems.h" @@ -52,6 +50,7 @@ public: RsGxsComment mMsg; }; + class RsGxsVoteItem : public RsGxsMsgItem { public: diff --git a/libretroshare/src/rsitems/rsgxsitems.h b/libretroshare/src/rsitems/rsgxsitems.h index 74942d807..026cbca08 100644 --- a/libretroshare/src/rsitems/rsgxsitems.h +++ b/libretroshare/src/rsitems/rsgxsitems.h @@ -28,9 +28,7 @@ #include "rsitems/rsitem.h" #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" -//#include "serialiser/rstlvkeys.h" + #include "retroshare/rsgxsifacetypes.h" std::ostream &operator<<(std::ostream &out, const RsGroupMetaData &meta); diff --git a/libretroshare/src/serialiser/rsgxschannelitems.cc b/libretroshare/src/serialiser/rsgxschannelitems.cc deleted file mode 100644 index f540fffd7..000000000 --- a/libretroshare/src/serialiser/rsgxschannelitems.cc +++ /dev/null @@ -1,572 +0,0 @@ -/* - * libretroshare/src/serialiser: rsgxschannelitems.cc - * - * RetroShare C++ Interface. - * - * Copyright 2012-2012 by Robert Fernie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#include - -#include "rsgxschannelitems.h" -#include "serialiser/rstlvbase.h" -#include "serialiser/rsbaseserial.h" - -#include "serialization/rstypeserializer.h" - -//#define GXSCHANNEL_DEBUG 1 - -RsItem *RsGxsChannelSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const -{ - if(service_id != RS_SERVICE_GXS_TYPE_CHANNELS) - return NULL ; - - switch(item_subtype) - { - case RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM: return new RsGxsChannelGroupItem() ; - case RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM: return new RsGxsChannelPostItem(); - default: - return RsGxsCommentSerialiser::create_item(service_id,item_subtype) ; - } -} - -#ifdef TO_REMOVE -uint32_t RsGxsChannelSerialiser::size(RsItem *item) -{ -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::size()" << std::endl; -#endif - - RsGxsChannelGroupItem* grp_item = NULL; - RsGxsChannelPostItem* op_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return sizeGxsChannelGroupItem(grp_item); - } - else if((op_item = dynamic_cast(item)) != NULL) - { - return sizeGxsChannelPostItem(op_item); - } - else - { - return RsGxsCommentSerialiser::size(item); - } - return 0; -} - -bool RsGxsChannelSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialise()" << std::endl; -#endif - - RsGxsChannelGroupItem* grp_item = NULL; - RsGxsChannelPostItem* op_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsChannelGroupItem(grp_item, data, size); - } - else if((op_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsChannelPostItem(op_item, data, size); - } - else - { - return RsGxsCommentSerialiser::serialise(item, data, size); - } -} - -RsItem* RsGxsChannelSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype))) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialise() ERROR Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM: - return deserialiseGxsChannelGroupItem(data, size); - break; - case RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM: - return deserialiseGxsChannelPostItem(data, size); - break; - default: - return RsGxsCommentSerialiser::deserialise(data, size); - break; - } - return NULL; -} - -std::ostream& RsGxsChannelGroupItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsChannelGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Description: " << mDescription << std::endl; - - out << "Image: " << std::endl; - mImage.print(out, int_Indent); - - printRsItemEnd(out ,"RsGxsChannelGroupItem", indent); - return out; -} - -#endif - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsChannelGroupItem::clear() -{ - mDescription.clear(); - mImage.TlvClear(); -} - - - -bool RsGxsChannelGroupItem::fromChannelGroup(RsGxsChannelGroup &group, bool moveImage) -{ - clear(); - meta = group.mMeta; - mDescription = group.mDescription; - - if (moveImage) - { - mImage.binData.bin_data = group.mImage.mData; - mImage.binData.bin_len = group.mImage.mSize; - group.mImage.shallowClear(); - } - else - { - mImage.binData.setBinData(group.mImage.mData, group.mImage.mSize); - } - return true; -} - - - -bool RsGxsChannelGroupItem::toChannelGroup(RsGxsChannelGroup &group, bool moveImage) -{ - group.mMeta = meta; - group.mDescription = mDescription; - if (moveImage) - { - group.mImage.take((uint8_t *) mImage.binData.bin_data, mImage.binData.bin_len); - // mImage doesn't have a ShallowClear at the moment! - mImage.binData.TlvShallowClear(); - } - else - { - group.mImage.copy((uint8_t *) mImage.binData.bin_data, mImage.binData.bin_len); - } - return true; -} - -#ifdef TO_REMOVE - -uint32_t RsGxsChannelSerialiser::sizeGxsChannelGroupItem(RsGxsChannelGroupItem *item) -{ - uint32_t s = 8; // header - - s += GetTlvStringSize(item->mDescription); - s += item->mImage.TlvSize(); - - return s; -} -#endif - -void RsGxsChannelGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_DESCR,mDescription,"mDescription") ; - RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; -} - -#ifdef TO_REMOVE -bool RsGxsChannelSerialiser::serialiseGxsChannelGroupItem(RsGxsChannelGroupItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsChannelGroupItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() Size too small" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsChannelGroupItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->mDescription); - item->mImage.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSCHANNEL_DEBUG - if (!ok) - { - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsChannelGroupItem* RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem(void *data, uint32_t *size) -{ - -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsChannelGroupItem* item = new RsGxsChannelGroupItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->mDescription); - item->mImage.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -std::ostream& RsGxsChannelPostItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsChannelPostItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Msg: " << mMsg << std::endl; - - out << "Attachment: " << std::endl; - mAttachment.print(out, int_Indent); - - out << "Thumbnail: " << std::endl; - mThumbnail.print(out, int_Indent); - - printRsItemEnd(out ,"RsGxsChannelPostItem", indent); - return out; -} -#endif - - -bool RsGxsChannelPostItem::fromChannelPost(RsGxsChannelPost &post, bool moveImage) -{ - clear(); - meta = post.mMeta; - mMsg = post.mMsg; - - if (moveImage) - { - mThumbnail.binData.bin_data = post.mThumbnail.mData; - mThumbnail.binData.bin_len = post.mThumbnail.mSize; - post.mThumbnail.shallowClear(); - } - else - { - mThumbnail.binData.setBinData(post.mThumbnail.mData, post.mThumbnail.mSize); - } - - std::list::iterator fit; - for(fit = post.mFiles.begin(); fit != post.mFiles.end(); ++fit) - { - RsTlvFileItem fi; - fi.name = fit->mName; - fi.filesize = fit->mSize; - fi.hash = fit->mHash; - mAttachment.items.push_back(fi); - } - return true; -} - - - -bool RsGxsChannelPostItem::toChannelPost(RsGxsChannelPost &post, bool moveImage) -{ - post.mMeta = meta; - post.mMsg = mMsg; - if (moveImage) - { - post.mThumbnail.take((uint8_t *) mThumbnail.binData.bin_data, mThumbnail.binData.bin_len); - // mThumbnail doesn't have a ShallowClear at the moment! - mThumbnail.binData.TlvShallowClear(); - } - else - { - post.mThumbnail.copy((uint8_t *) mThumbnail.binData.bin_data, mThumbnail.binData.bin_len); - } - - post.mCount = 0; - post.mSize = 0; - std::list::iterator fit; - for(fit = mAttachment.items.begin(); fit != mAttachment.items.end(); ++fit) - { - RsGxsFile fi; - fi.mName = RsDirUtil::getTopDir(fit->name); - fi.mSize = fit->filesize; - fi.mHash = fit->hash; - - post.mFiles.push_back(fi); - post.mCount++; - post.mSize += fi.mSize; - } - return true; -} - -void RsGxsChannelPostItem::clear() -{ - mMsg.clear(); - mAttachment.TlvClear(); - mThumbnail.TlvClear(); -} - -#ifdef TO_REMOVE - -uint32_t RsGxsChannelSerialiser::sizeGxsChannelPostItem(RsGxsChannelPostItem *item) -{ - uint32_t s = 8; // header - - s += GetTlvStringSize(item->mMsg); // mMsg. - s += item->mAttachment.TlvSize(); - s += item->mThumbnail.TlvSize(); - - return s; -} -#endif - -void RsGxsChannelPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,mMsg,"mMsg") ; - RsTypeSerializer::serial_process(j,ctx,mAttachment,"mAttachment") ; - RsTypeSerializer::serial_process(j,ctx,mThumbnail,"mThumbnail") ; -} - -#ifdef TO_REMOVE -bool RsGxsChannelSerialiser::serialiseGxsChannelPostItem(RsGxsChannelPostItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelPostItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsChannelPostItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelPostItem() ERROR space too small" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsChannelPostItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->mMsg); - item->mAttachment.SetTlv(data, tlvsize, &offset); - item->mThumbnail.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelPostItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSCHANNEL_DEBUG - if (!ok) - { - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsChannelPostItem* RsGxsChannelSerialiser::deserialiseGxsChannelPostItem(void *data, uint32_t *size) -{ - -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelPostItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelPostItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelPostItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsChannelPostItem* item = new RsGxsChannelPostItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->mMsg); - item->mAttachment.GetTlv(data, rssize, &offset); - item->mThumbnail.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelPostItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSCHANNEL_DEBUG - std::cerr << "RsGxsChannelSerialiser::deserialiseGxsChannelPostItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ -#endif - From 559137d05b534070b0dfbaee42fedef26d5acc28 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 20:57:28 +0200 Subject: [PATCH 188/230] switched gxscircleitems to new serialization --- libretroshare/src/rsitems/rsgxsitems.h | 1 - .../src/serialiser/rsgxscircleitems.cc | 164 +++++++++++------- .../src/serialiser/rsgxscircleitems.h | 59 ++----- libretroshare/src/services/p3gxschannels.cc | 2 +- 4 files changed, 118 insertions(+), 108 deletions(-) diff --git a/libretroshare/src/rsitems/rsgxsitems.h b/libretroshare/src/rsitems/rsgxsitems.h index 026cbca08..3e7bd814c 100644 --- a/libretroshare/src/rsitems/rsgxsitems.h +++ b/libretroshare/src/rsitems/rsgxsitems.h @@ -34,7 +34,6 @@ std::ostream &operator<<(std::ostream &out, const RsGroupMetaData &meta); std::ostream &operator<<(std::ostream &out, const RsMsgMetaData &meta); - class RsGxsGrpItem : public RsItem { diff --git a/libretroshare/src/serialiser/rsgxscircleitems.cc b/libretroshare/src/serialiser/rsgxscircleitems.cc index c9cce891e..ae3dc6d69 100644 --- a/libretroshare/src/serialiser/rsgxscircleitems.cc +++ b/libretroshare/src/serialiser/rsgxscircleitems.cc @@ -26,11 +26,104 @@ #include #include "rsgxscircleitems.h" -#include "serialiser/rstlvbase.h" -#include "serialiser/rsbaseserial.h" + +#include "serialization/rstypeserializer.h" //#define CIRCLE_DEBUG 1 +RsItem *RsGxsCircleSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_GXS_TYPE_GXSCIRCLE) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM: return new RsGxsCircleGroupItem(); + case RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM: return new RsGxsCircleMsgItem(); + case RS_PKT_SUBTYPE_GXSCIRCLE_SUBSCRIPTION_REQUEST_ITEM: return new RsGxsCircleSubscriptionRequestItem(); + default: + return NULL ; + } +} + +void RsGxsCircleSubscriptionRequestItem::clear() +{ + time_stamp = 0 ; + time_out = 0 ; + subscription_type = SUBSCRIPTION_REQUEST_UNKNOWN; +} + +void RsGxsCircleMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,msg.stuff,"msg.stuff") ; +} + +void RsGxsCircleSubscriptionRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,time_stamp,"time_stamp") ; + RsTypeSerializer::serial_process(j,ctx,time_out ,"time_out") ; + RsTypeSerializer::serial_process (j,ctx,subscription_type ,"subscription_type") ; +} + +void RsGxsCircleGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,pgpIdSet,"pgpIdSet") ; + RsTypeSerializer::serial_process(j,ctx,gxsIdSet,"gxsIdSet") ; + RsTypeSerializer::serial_process(j,ctx,subCircleSet,"subCircleSet") ; +} + +void RsGxsCircleMsgItem::clear() +{ + msg.stuff.clear(); +} + +void RsGxsCircleGroupItem::clear() +{ + pgpIdSet.TlvClear(); + gxsIdSet.TlvClear(); + subCircleSet.TlvClear(); +} + +bool RsGxsCircleGroupItem::convertFrom(const RsGxsCircleGroup &group) +{ + clear(); + + meta = group.mMeta; + + // Enforce the local rules. + if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) + { + pgpIdSet.ids = group.mLocalFriends; + } + else + { + gxsIdSet.ids = group.mInvitedMembers; + } + + subCircleSet.ids = group.mSubCircles; + return true; +} + +bool RsGxsCircleGroupItem::convertTo(RsGxsCircleGroup &group) const +{ + group.mMeta = meta; + + // Enforce the local rules. + if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) + { + group.mLocalFriends = pgpIdSet.ids; + } + else + { + group.mInvitedMembers = gxsIdSet.ids; + } + + group.mSubCircles = subCircleSet.ids; + return true; +} + + +#ifdef TO_REMOVE uint32_t RsGxsCircleSerialiser::size(RsItem *item) { RsGxsCircleGroupItem* grp_item = NULL; @@ -115,14 +208,6 @@ RsItem* RsGxsCircleSerialiser::deserialise(void* data, uint32_t* size) /*****************************************************************************************/ /*****************************************************************************************/ /*****************************************************************************************/ - -void RsGxsCircleSubscriptionRequestItem::clear() -{ - time_stamp = 0 ; - time_out = 0 ; - subscription_type = SUBSCRIPTION_REQUEST_UNKNOWN; -} - std::ostream& RsGxsCircleSubscriptionRequestItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsCircleSubscriptionRequestItem", indent); @@ -135,51 +220,6 @@ std::ostream& RsGxsCircleSubscriptionRequestItem::print(std::ostream& out, uint1 return out; } -void RsGxsCircleGroupItem::clear() -{ - pgpIdSet.TlvClear(); - gxsIdSet.TlvClear(); - subCircleSet.TlvClear(); -} - -bool RsGxsCircleGroupItem::convertFrom(const RsGxsCircleGroup &group) -{ - clear(); - - meta = group.mMeta; - - // Enforce the local rules. - if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) - { - pgpIdSet.ids = group.mLocalFriends; - } - else - { - gxsIdSet.ids = group.mInvitedMembers; - } - - subCircleSet.ids = group.mSubCircles; - return true; -} - -bool RsGxsCircleGroupItem::convertTo(RsGxsCircleGroup &group) const -{ - group.mMeta = meta; - - // Enforce the local rules. - if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) - { - group.mLocalFriends = pgpIdSet.ids; - } - else - { - group.mInvitedMembers = gxsIdSet.ids; - } - - group.mSubCircles = subCircleSet.ids; - return true; -} - std::ostream& RsGxsCircleGroupItem::print(std::ostream& out, uint16_t indent) { @@ -275,7 +315,6 @@ bool RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem(RsGxsCircl return ok; } - bool RsGxsCircleSerialiser::serialiseGxsCircleGroupItem(RsGxsCircleGroupItem *item, void *data, uint32_t *size) { @@ -324,8 +363,7 @@ bool RsGxsCircleSerialiser::serialiseGxsCircleGroupItem(RsGxsCircleGroupItem *it #endif return ok; - } - +} RsGxsCircleSubscriptionRequestItem *RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem(void *data, uint32_t *size) { @@ -463,13 +501,6 @@ RsGxsCircleGroupItem* RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem(void /*****************************************************************************************/ /*****************************************************************************************/ /*****************************************************************************************/ - - -void RsGxsCircleMsgItem::clear() -{ - msg.stuff.clear(); -} - std::ostream& RsGxsCircleMsgItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsCircleMsgItem", indent); @@ -494,6 +525,7 @@ uint32_t RsGxsCircleSerialiser::sizeGxsCircleMsgItem(RsGxsCircleMsgItem *item) return s; } + bool RsGxsCircleSerialiser::serialiseGxsCircleMsgItem(RsGxsCircleMsgItem *item, void *data, uint32_t *size) { @@ -610,4 +642,4 @@ RsGxsCircleMsgItem* RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem(void *dat /*****************************************************************************************/ /*****************************************************************************************/ /*****************************************************************************************/ - +#endif diff --git a/libretroshare/src/serialiser/rsgxscircleitems.h b/libretroshare/src/serialiser/rsgxscircleitems.h index ba28f2782..5734b34cd 100644 --- a/libretroshare/src/serialiser/rsgxscircleitems.h +++ b/libretroshare/src/serialiser/rsgxscircleitems.h @@ -52,18 +52,12 @@ class RsGxsCircleGroupItem : public RsGxsGrpItem public: - RsGxsCircleGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE, - RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM) -#if 0 - pgpIdSet(GXSCIRCLE_PGPIDSET), - gxsIdSet(GXSCIRCLE_GXSIDSET), - subCircleSet(GXSCIRCLE_SUBCIRCLESET) -#endif - { return;} - virtual ~RsGxsCircleGroupItem() { return;} + RsGxsCircleGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE, RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM) {} + virtual ~RsGxsCircleGroupItem() {} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); bool convertFrom(const RsGxsCircleGroup &group); bool convertTo(RsGxsCircleGroup &group) const; @@ -78,11 +72,12 @@ class RsGxsCircleMsgItem : public RsGxsMsgItem { public: - RsGxsCircleMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE, - RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM) {return; } - virtual ~RsGxsCircleMsgItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsCircleMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE, RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM) {} + virtual ~RsGxsCircleMsgItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsGxsCircleMsg msg; }; @@ -94,7 +89,6 @@ public: virtual ~RsGxsCircleSubscriptionRequestItem() {} void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); enum { SUBSCRIPTION_REQUEST_UNKNOWN = 0x00, @@ -102,37 +96,22 @@ public: SUBSCRIPTION_REQUEST_UNSUBSCRIBE = 0x02 }; - time_t time_stamp ; - time_t time_out ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + + uint32_t time_stamp ; + uint32_t time_out ; uint8_t subscription_type ; }; -class RsGxsCircleSerialiser : public RsSerialType +class RsGxsCircleSerialiser : public RsServiceSerializer { public: RsGxsCircleSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_GXSCIRCLE) - { return; } - virtual ~RsGxsCircleSerialiser() { return; } + :RsServiceSerializer(RS_SERVICE_GXS_TYPE_GXSCIRCLE) {} + virtual ~RsGxsCircleSerialiser() {} - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsCircleSubscriptionRequestItem(RsGxsCircleSubscriptionRequestItem *item); - bool serialiseGxsCircleSubscriptionRequestItem (RsGxsCircleSubscriptionRequestItem *item, void *data, uint32_t *size); - RsGxsCircleSubscriptionRequestItem * deserialiseGxsCircleSubscriptionRequestItem(void *data, uint32_t *size); - - uint32_t sizeGxsCircleGroupItem(RsGxsCircleGroupItem *item); - bool serialiseGxsCircleGroupItem (RsGxsCircleGroupItem *item, void *data, uint32_t *size); - RsGxsCircleGroupItem * deserialiseGxsCircleGroupItem(void *data, uint32_t *size); - - uint32_t sizeGxsCircleMsgItem(RsGxsCircleMsgItem *item); - bool serialiseGxsCircleMsgItem (RsGxsCircleMsgItem *item, void *data, uint32_t *size); - RsGxsCircleMsgItem * deserialiseGxsCircleMsgItem(void *data, uint32_t *size); + virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) const; }; #endif /* RS_GXSCIRCLE_ITEMS_H */ diff --git a/libretroshare/src/services/p3gxschannels.cc b/libretroshare/src/services/p3gxschannels.cc index 6410bd396..6805bb0ab 100644 --- a/libretroshare/src/services/p3gxschannels.cc +++ b/libretroshare/src/services/p3gxschannels.cc @@ -24,7 +24,7 @@ */ #include "services/p3gxschannels.h" -#include "serialiser/rsgxschannelitems.h" +#include "rsitems/rsgxschannelitems.h" #include "util/radix64.h" #include "util/rsmemory.h" From f50670f77376e93357c7a3a139e0ceed89d5a83e Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 26 Apr 2017 20:59:59 +0200 Subject: [PATCH 189/230] moved circle items to rsitems/ --- libretroshare/src/libretroshare.pro | 4 +- libretroshare/src/rsitems/rsgxscircleitems.cc | 124 ++++ .../rsgxscircleitems.h | 0 .../src/serialiser/rsgxscircleitems.cc | 645 ------------------ libretroshare/src/services/p3gxscircles.cc | 3 +- 5 files changed, 128 insertions(+), 648 deletions(-) create mode 100644 libretroshare/src/rsitems/rsgxscircleitems.cc rename libretroshare/src/{serialiser => rsitems}/rsgxscircleitems.h (100%) delete mode 100644 libretroshare/src/serialiser/rsgxscircleitems.cc diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index d13df8213..43a0eb6dd 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -794,11 +794,11 @@ SOURCES += services/p3idservice.cc \ # GxsCircles Service HEADERS += services/p3gxscircles.h \ - serialiser/rsgxscircleitems.h \ + rsitems/rsgxscircleitems.h \ retroshare/rsgxscircles.h \ SOURCES += services/p3gxscircles.cc \ - serialiser/rsgxscircleitems.cc \ + rsitems/rsgxscircleitems.cc \ # GxsForums Service HEADERS += retroshare/rsgxsforums.h \ diff --git a/libretroshare/src/rsitems/rsgxscircleitems.cc b/libretroshare/src/rsitems/rsgxscircleitems.cc new file mode 100644 index 000000000..a5937b5ab --- /dev/null +++ b/libretroshare/src/rsitems/rsgxscircleitems.cc @@ -0,0 +1,124 @@ +/* + * libretroshare/src/serialiser: rswikiitems.cc + * + * RetroShare C++ Interface. + * + * Copyright 2012-2012 by Robert Fernie + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "retroshare@lunamutt.com". + * + */ + +#include + +#include "rsgxscircleitems.h" + +#include "serialization/rstypeserializer.h" + +//#define CIRCLE_DEBUG 1 + +RsItem *RsGxsCircleSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_GXS_TYPE_GXSCIRCLE) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM: return new RsGxsCircleGroupItem(); + case RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM: return new RsGxsCircleMsgItem(); + case RS_PKT_SUBTYPE_GXSCIRCLE_SUBSCRIPTION_REQUEST_ITEM: return new RsGxsCircleSubscriptionRequestItem(); + default: + return NULL ; + } +} + +void RsGxsCircleSubscriptionRequestItem::clear() +{ + time_stamp = 0 ; + time_out = 0 ; + subscription_type = SUBSCRIPTION_REQUEST_UNKNOWN; +} + +void RsGxsCircleMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,msg.stuff,"msg.stuff") ; +} + +void RsGxsCircleSubscriptionRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,time_stamp,"time_stamp") ; + RsTypeSerializer::serial_process(j,ctx,time_out ,"time_out") ; + RsTypeSerializer::serial_process (j,ctx,subscription_type ,"subscription_type") ; +} + +void RsGxsCircleGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,pgpIdSet,"pgpIdSet") ; + RsTypeSerializer::serial_process(j,ctx,gxsIdSet,"gxsIdSet") ; + RsTypeSerializer::serial_process(j,ctx,subCircleSet,"subCircleSet") ; +} + +void RsGxsCircleMsgItem::clear() +{ + msg.stuff.clear(); +} + +void RsGxsCircleGroupItem::clear() +{ + pgpIdSet.TlvClear(); + gxsIdSet.TlvClear(); + subCircleSet.TlvClear(); +} + +bool RsGxsCircleGroupItem::convertFrom(const RsGxsCircleGroup &group) +{ + clear(); + + meta = group.mMeta; + + // Enforce the local rules. + if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) + { + pgpIdSet.ids = group.mLocalFriends; + } + else + { + gxsIdSet.ids = group.mInvitedMembers; + } + + subCircleSet.ids = group.mSubCircles; + return true; +} + +bool RsGxsCircleGroupItem::convertTo(RsGxsCircleGroup &group) const +{ + group.mMeta = meta; + + // Enforce the local rules. + if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) + { + group.mLocalFriends = pgpIdSet.ids; + } + else + { + group.mInvitedMembers = gxsIdSet.ids; + } + + group.mSubCircles = subCircleSet.ids; + return true; +} + diff --git a/libretroshare/src/serialiser/rsgxscircleitems.h b/libretroshare/src/rsitems/rsgxscircleitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxscircleitems.h rename to libretroshare/src/rsitems/rsgxscircleitems.h diff --git a/libretroshare/src/serialiser/rsgxscircleitems.cc b/libretroshare/src/serialiser/rsgxscircleitems.cc deleted file mode 100644 index ae3dc6d69..000000000 --- a/libretroshare/src/serialiser/rsgxscircleitems.cc +++ /dev/null @@ -1,645 +0,0 @@ -/* - * libretroshare/src/serialiser: rswikiitems.cc - * - * RetroShare C++ Interface. - * - * Copyright 2012-2012 by Robert Fernie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#include - -#include "rsgxscircleitems.h" - -#include "serialization/rstypeserializer.h" - -//#define CIRCLE_DEBUG 1 - -RsItem *RsGxsCircleSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const -{ - if(service != RS_SERVICE_GXS_TYPE_GXSCIRCLE) - return NULL ; - - switch(item_sub_id) - { - case RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM: return new RsGxsCircleGroupItem(); - case RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM: return new RsGxsCircleMsgItem(); - case RS_PKT_SUBTYPE_GXSCIRCLE_SUBSCRIPTION_REQUEST_ITEM: return new RsGxsCircleSubscriptionRequestItem(); - default: - return NULL ; - } -} - -void RsGxsCircleSubscriptionRequestItem::clear() -{ - time_stamp = 0 ; - time_out = 0 ; - subscription_type = SUBSCRIPTION_REQUEST_UNKNOWN; -} - -void RsGxsCircleMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,msg.stuff,"msg.stuff") ; -} - -void RsGxsCircleSubscriptionRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process(j,ctx,time_stamp,"time_stamp") ; - RsTypeSerializer::serial_process(j,ctx,time_out ,"time_out") ; - RsTypeSerializer::serial_process (j,ctx,subscription_type ,"subscription_type") ; -} - -void RsGxsCircleGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process(j,ctx,pgpIdSet,"pgpIdSet") ; - RsTypeSerializer::serial_process(j,ctx,gxsIdSet,"gxsIdSet") ; - RsTypeSerializer::serial_process(j,ctx,subCircleSet,"subCircleSet") ; -} - -void RsGxsCircleMsgItem::clear() -{ - msg.stuff.clear(); -} - -void RsGxsCircleGroupItem::clear() -{ - pgpIdSet.TlvClear(); - gxsIdSet.TlvClear(); - subCircleSet.TlvClear(); -} - -bool RsGxsCircleGroupItem::convertFrom(const RsGxsCircleGroup &group) -{ - clear(); - - meta = group.mMeta; - - // Enforce the local rules. - if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) - { - pgpIdSet.ids = group.mLocalFriends; - } - else - { - gxsIdSet.ids = group.mInvitedMembers; - } - - subCircleSet.ids = group.mSubCircles; - return true; -} - -bool RsGxsCircleGroupItem::convertTo(RsGxsCircleGroup &group) const -{ - group.mMeta = meta; - - // Enforce the local rules. - if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) - { - group.mLocalFriends = pgpIdSet.ids; - } - else - { - group.mInvitedMembers = gxsIdSet.ids; - } - - group.mSubCircles = subCircleSet.ids; - return true; -} - - -#ifdef TO_REMOVE -uint32_t RsGxsCircleSerialiser::size(RsItem *item) -{ - RsGxsCircleGroupItem* grp_item = NULL; - RsGxsCircleMsgItem* snap_item = NULL; - RsGxsCircleSubscriptionRequestItem* subr_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return sizeGxsCircleGroupItem(grp_item); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return sizeGxsCircleMsgItem(snap_item); - } - else if((subr_item = dynamic_cast(item)) != NULL) - { - return sizeGxsCircleSubscriptionRequestItem(subr_item); - } - else - return 0 ; -} - -bool RsGxsCircleSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsGxsCircleGroupItem* grp_item = NULL; - RsGxsCircleMsgItem* snap_item = NULL; - RsGxsCircleSubscriptionRequestItem* subr_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsCircleGroupItem(grp_item, data, size); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsCircleMsgItem(snap_item, data, size); - } - else if((subr_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsCircleSubscriptionRequestItem(subr_item, data, size); - } - return false; -} - -RsItem* RsGxsCircleSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM: - return deserialiseGxsCircleGroupItem(data, size); - break; - case RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM: - return deserialiseGxsCircleMsgItem(data, size); - break; - case RS_PKT_SUBTYPE_GXSCIRCLE_SUBSCRIPTION_REQUEST_ITEM: - return deserialiseGxsCircleSubscriptionRequestItem(data, size); - break; - default: -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ -std::ostream& RsGxsCircleSubscriptionRequestItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsCircleSubscriptionRequestItem", indent); - - printRsItemBase(out, "time stmp: ", indent); out << time_stamp ; - printRsItemBase(out, "time out : ", indent); out << time_out ; - printRsItemBase(out, "Subs type: ", indent); out << subscription_type ; - - printRsItemEnd(out ,"RsGxsCircleSubscriptionRequestItem", indent); - return out; -} - - -std::ostream& RsGxsCircleGroupItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsCircleGroupItem", indent); - uint16_t int_Indent = indent + 2; - - if (meta.mCircleType == GXS_CIRCLE_TYPE_LOCAL) - { - printRsItemBase(out, "Local Circle: PGP Ids:", indent); - pgpIdSet.print(out, int_Indent); - printRsItemBase(out, "GXS Ids (should be empty):", indent); - gxsIdSet.print(out, int_Indent); - } - else - { - printRsItemBase(out, "External Circle: GXS Ids", indent); - gxsIdSet.print(out, int_Indent); - printRsItemBase(out, "PGP Ids (should be empty):", indent); - pgpIdSet.print(out, int_Indent); - } - - subCircleSet.print(out, int_Indent); - printRsItemEnd(out ,"RsGxsCircleGroupItem", indent); - return out; -} - -uint32_t RsGxsCircleSerialiser::sizeGxsCircleSubscriptionRequestItem(RsGxsCircleSubscriptionRequestItem * /* item */) -{ - uint32_t s=8 ; // header - - s += 4 ; // time_stamp serialised as uint32_t; - s += 4 ; // time_out serialised as uint32_t; - s += 1 ; // subscription_type ; - - return s ; -} - -uint32_t RsGxsCircleSerialiser::sizeGxsCircleGroupItem(RsGxsCircleGroupItem *item) -{ - uint32_t s = 8; // header - - s += item->pgpIdSet.TlvSize(); - s += item->gxsIdSet.TlvSize(); - s += item->subCircleSet.TlvSize(); - - return s; -} - -bool RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem(RsGxsCircleSubscriptionRequestItem *item, void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsCircleSubscriptionRequestItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsCircleGroupItem */ - ok &= setRawUInt32(data,tlvsize,&offset,item->time_stamp) ; - ok &= setRawUInt32(data,tlvsize,&offset,item->time_out) ; - ok &= setRawUInt8(data,tlvsize,&offset,item->subscription_type) ; - - if(offset != tlvsize) - { - //#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem() FAIL Size Error! " << std::endl; - //#endif - ok = false; - } - - //#ifdef CIRCLE_DEBUG - if (!ok) - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleSubscriptionRequestItem() NOK" << std::endl; - //#endif - - return ok; -} -bool RsGxsCircleSerialiser::serialiseGxsCircleGroupItem(RsGxsCircleGroupItem *item, void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleGroupItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsCircleGroupItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleGroupItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsCircleGroupItem */ - ok &= item->pgpIdSet.SetTlv(data, tlvsize, &offset); - ok &= item->gxsIdSet.SetTlv(data, tlvsize, &offset); - ok &= item->subCircleSet.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef CIRCLE_DEBUG - if (!ok) - { - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleGroupItem() NOK" << std::endl; - } -#endif - - return ok; -} -RsGxsCircleSubscriptionRequestItem *RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem(void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCIRCLE_SUBSCRIPTION_REQUEST_ITEM != getRsItemSubType(rstype))) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsCircleSubscriptionRequestItem* item = new RsGxsCircleSubscriptionRequestItem(); - /* skip the header */ - offset += 8; - - uint32_t tmp ; - ok &= getRawUInt32(data,rssize,&offset,&tmp) ; item->time_stamp = tmp ; - ok &= getRawUInt32(data,rssize,&offset,&tmp) ; item->time_out = tmp ; - ok &= getRawUInt8(data,rssize,&offset,&item->subscription_type) ; - - if (offset != rssize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleSubscriptionRequestItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsGxsCircleGroupItem* RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem(void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM != getRsItemSubType(rstype))) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsCircleGroupItem* item = new RsGxsCircleGroupItem(); - /* skip the header */ - offset += 8; - - ok &= item->pgpIdSet.GetTlv(data, rssize, &offset); - ok &= item->gxsIdSet.GetTlv(data, rssize, &offset); - ok &= item->subCircleSet.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ -std::ostream& RsGxsCircleMsgItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsCircleMsgItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Stuff: " << msg.stuff << std::endl; - - printRsItemEnd(out ,"RsGxsCircleMsgItem", indent); - return out; -} - - -uint32_t RsGxsCircleSerialiser::sizeGxsCircleMsgItem(RsGxsCircleMsgItem *item) -{ - - const RsGxsCircleMsg &msg = item->msg; - uint32_t s = 8; // header - - s += GetTlvStringSize(msg.stuff); - - return s; -} - - -bool RsGxsCircleSerialiser::serialiseGxsCircleMsgItem(RsGxsCircleMsgItem *item, void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleMsgItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsCircleMsgItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleMsgItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsCircleMsgItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->msg.stuff); - - if(offset != tlvsize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleMsgItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef CIRCLE_DEBUG - if (!ok) - { - std::cerr << "RsGxsCircleSerialiser::serialiseGxsCircleMsgItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsCircleMsgItem* RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem(void *data, uint32_t *size) -{ - -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM != getRsItemSubType(rstype))) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsCircleMsgItem* item = new RsGxsCircleMsgItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->msg.stuff); - - if (offset != rssize) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef CIRCLE_DEBUG - std::cerr << "RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ -#endif diff --git a/libretroshare/src/services/p3gxscircles.cc b/libretroshare/src/services/p3gxscircles.cc index cf731fcd8..0daa3d24e 100644 --- a/libretroshare/src/services/p3gxscircles.cc +++ b/libretroshare/src/services/p3gxscircles.cc @@ -23,8 +23,9 @@ * */ +#include "rsitems/rsgxscircleitems.h" + #include "services/p3gxscircles.h" -#include "serialiser/rsgxscircleitems.h" #include "retroshare/rsgxsflags.h" #include "util/rsrandom.h" #include "util/rsdir.h" From 449a4209d9b97b37fae4e3c5f7cedb432c2f5b0e Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 11:56:56 +0200 Subject: [PATCH 190/230] dwitched gxsforum items to new serialization --- libretroshare/src/rsitems/rsgxsitems.h | 1 - .../src/serialiser/rsgxsforumitems.cc | 366 +----------------- .../src/serialiser/rsgxsforumitems.h | 48 +-- 3 files changed, 32 insertions(+), 383 deletions(-) diff --git a/libretroshare/src/rsitems/rsgxsitems.h b/libretroshare/src/rsitems/rsgxsitems.h index 3e7bd814c..fa461a0e8 100644 --- a/libretroshare/src/rsitems/rsgxsitems.h +++ b/libretroshare/src/rsitems/rsgxsitems.h @@ -43,7 +43,6 @@ public: : RsItem(RS_PKT_VERSION_SERVICE, service, subtype) { return; } virtual ~RsGxsGrpItem(){} - RsGroupMetaData meta; }; diff --git a/libretroshare/src/serialiser/rsgxsforumitems.cc b/libretroshare/src/serialiser/rsgxsforumitems.cc index 731584b38..462f4fcf6 100644 --- a/libretroshare/src/serialiser/rsgxsforumitems.cc +++ b/libretroshare/src/serialiser/rsgxsforumitems.cc @@ -26,376 +26,42 @@ #include #include "rsgxsforumitems.h" -#include "serialiser/rstlvbase.h" -#include "serialiser/rsbaseserial.h" + +#include "serialization/rstypeserializer.h" //#define GXSFORUM_DEBUG 1 -uint32_t RsGxsForumSerialiser::size(RsItem *item) +RsItem *RsGxsForumSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const { - RsGxsForumGroupItem* grp_item = NULL; - RsGxsForumMsgItem* op_item = NULL; + if(service_id != RS_SERVICE_GXS_TYPE_FORUMS) + return NULL ; - if((grp_item = dynamic_cast(item)) != NULL) - { - return sizeGxsForumGroupItem(grp_item); - } - else if((op_item = dynamic_cast(item)) != NULL) - { - return sizeGxsForumMsgItem(op_item); - } - std::cerr << "RsGxsForumSerialiser::size() ERROR invalid item" << std::endl; - return 0; + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM: return new RsGxsForumGroupItem(); + case RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM: return new RsGxsForumMsgItem(); + default: + return NULL ; + } } - -bool RsGxsForumSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsGxsForumGroupItem* grp_item = NULL; - RsGxsForumMsgItem* op_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsForumGroupItem(grp_item, data, size); - } - else if((op_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsForumMsgItem(op_item, data, size); - } - std::cerr << "RsGxsForumSerialiser::serialise() ERROR invalid item" << std::endl; - return false; -} - -RsItem* RsGxsForumSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM: - return deserialiseGxsForumGroupItem(data, size); - break; - case RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM: - return deserialiseGxsForumMsgItem(data, size); - break; - default: -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - void RsGxsForumGroupItem::clear() { mGroup.mDescription.clear(); } -std::ostream& RsGxsForumGroupItem::print(std::ostream& out, uint16_t indent) +void RsGxsForumGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - printRsItemBase(out, "RsGxsForumGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Description: " << mGroup.mDescription << std::endl; - - printRsItemEnd(out ,"RsGxsForumGroupItem", indent); - return out; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR,mGroup.mDescription,"mGroup.Description"); } - - -uint32_t RsGxsForumSerialiser::sizeGxsForumGroupItem(RsGxsForumGroupItem *item) -{ - - const RsGxsForumGroup& group = item->mGroup; - uint32_t s = 8; // header - - s += GetTlvStringSize(group.mDescription); - - return s; -} - -bool RsGxsForumSerialiser::serialiseGxsForumGroupItem(RsGxsForumGroupItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumGroupItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsForumGroupItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumGroupItem() Size too small" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsForumGroupItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->mGroup.mDescription); - - if(offset != tlvsize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSFORUM_DEBUG - if (!ok) - { - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumGroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsForumGroupItem* RsGxsForumSerialiser::deserialiseGxsForumGroupItem(void *data, uint32_t *size) -{ - -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumGroupItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsForumGroupItem* item = new RsGxsForumGroupItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->mGroup.mDescription); - - if (offset != rssize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - void RsGxsForumMsgItem::clear() { mMsg.mMsg.clear(); } -std::ostream& RsGxsForumMsgItem::print(std::ostream& out, uint16_t indent) +void RsGxsForumMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - printRsItemBase(out, "RsGxsForumMsgItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Msg: " << mMsg.mMsg << std::endl; - - printRsItemEnd(out ,"RsGxsForumMsgItem", indent); - return out; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,mMsg.mMsg,"mGroup.Description"); } -uint32_t RsGxsForumSerialiser::sizeGxsForumMsgItem(RsGxsForumMsgItem *item) -{ - - const RsGxsForumMsg& msg = item->mMsg; - uint32_t s = 8; // header - - s += GetTlvStringSize(msg.mMsg); // mMsg. - - return s; -} - -bool RsGxsForumSerialiser::serialiseGxsForumMsgItem(RsGxsForumMsgItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumMsgItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsForumMsgItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumMsgItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsForumMsgItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->mMsg.mMsg); - - if(offset != tlvsize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumMsgItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSFORUM_DEBUG - if (!ok) - { - std::cerr << "RsGxsForumSerialiser::serialiseGxsForumGroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsForumMsgItem* RsGxsForumSerialiser::deserialiseGxsForumMsgItem(void *data, uint32_t *size) -{ - -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumMsgItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumMsgItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumMsgItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsForumMsgItem* item = new RsGxsForumMsgItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->mMsg.mMsg); - - if (offset != rssize) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumMsgItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSFORUM_DEBUG - std::cerr << "RsGxsForumSerialiser::deserialiseGxsForumMsgItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ diff --git a/libretroshare/src/serialiser/rsgxsforumitems.h b/libretroshare/src/serialiser/rsgxsforumitems.h index 22fae7e63..8e8d2bc24 100644 --- a/libretroshare/src/serialiser/rsgxsforumitems.h +++ b/libretroshare/src/serialiser/rsgxsforumitems.h @@ -31,9 +31,11 @@ #include "rsitems/rsserviceids.h" #include "rsitems/rsgxsitems.h" +#include "serialization/rsserializer.h" + #include "retroshare/rsgxsforums.h" -const uint8_t RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM = 0x02; +const uint8_t RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM = 0x02; const uint8_t RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM = 0x03; class RsGxsForumGroupItem : public RsGxsGrpItem @@ -41,13 +43,11 @@ class RsGxsForumGroupItem : public RsGxsGrpItem public: - RsGxsForumGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_FORUMS, - RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM) { return;} - virtual ~RsGxsForumGroupItem() { return;} - - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsForumGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_FORUMS, RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM) {} + virtual ~RsGxsForumGroupItem() {} + void clear(); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsForumGroup mGroup; }; @@ -56,38 +56,22 @@ class RsGxsForumMsgItem : public RsGxsMsgItem { public: - RsGxsForumMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_FORUMS, - RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM) {return; } - virtual ~RsGxsForumMsgItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsForumMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_FORUMS, RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM) {} + virtual ~RsGxsForumMsgItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsForumMsg mMsg; }; -class RsGxsForumSerialiser : public RsSerialType +class RsGxsForumSerialiser : public RsServiceSerializer { public: + RsGxsForumSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_FORUMS) {} + virtual ~RsGxsForumSerialiser() {} - RsGxsForumSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_FORUMS) - { return; } - virtual ~RsGxsForumSerialiser() { return; } - - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsForumGroupItem(RsGxsForumGroupItem *item); - bool serialiseGxsForumGroupItem (RsGxsForumGroupItem *item, void *data, uint32_t *size); - RsGxsForumGroupItem * deserialiseGxsForumGroupItem(void *data, uint32_t *size); - - uint32_t sizeGxsForumMsgItem(RsGxsForumMsgItem *item); - bool serialiseGxsForumMsgItem (RsGxsForumMsgItem *item, void *data, uint32_t *size); - RsGxsForumMsgItem * deserialiseGxsForumMsgItem(void *data, uint32_t *size); - + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; #endif /* RS_GXS_FORUM_ITEMS_H */ From f6e59f7dee865be575020792cd4d464b168e73c5 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 11:59:18 +0200 Subject: [PATCH 191/230] moved gxsforumitems to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsgxsforumitems.cc | 0 libretroshare/src/{serialiser => rsitems}/rsgxsforumitems.h | 0 libretroshare/src/services/p3gxsforums.cc | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsgxsforumitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsgxsforumitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 43a0eb6dd..4d2e75c7c 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -803,10 +803,10 @@ SOURCES += services/p3gxscircles.cc \ # GxsForums Service HEADERS += retroshare/rsgxsforums.h \ services/p3gxsforums.h \ - serialiser/rsgxsforumitems.h + rsitems/rsgxsforumitems.h SOURCES += services/p3gxsforums.cc \ - serialiser/rsgxsforumitems.cc \ + rsitems/rsgxsforumitems.cc \ # GxsChannels Service HEADERS += retroshare/rsgxschannels.h \ diff --git a/libretroshare/src/serialiser/rsgxsforumitems.cc b/libretroshare/src/rsitems/rsgxsforumitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsgxsforumitems.cc rename to libretroshare/src/rsitems/rsgxsforumitems.cc diff --git a/libretroshare/src/serialiser/rsgxsforumitems.h b/libretroshare/src/rsitems/rsgxsforumitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsforumitems.h rename to libretroshare/src/rsitems/rsgxsforumitems.h diff --git a/libretroshare/src/services/p3gxsforums.cc b/libretroshare/src/services/p3gxsforums.cc index 29c7ed6c7..72ad9ad46 100644 --- a/libretroshare/src/services/p3gxsforums.cc +++ b/libretroshare/src/services/p3gxsforums.cc @@ -24,7 +24,7 @@ */ #include "services/p3gxsforums.h" -#include "serialiser/rsgxsforumitems.h" +#include "rsitems/rsgxsforumitems.h" #include From 3c20a85335d88c2351175e4dafbf68db83b1dd9d Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 14:16:57 +0200 Subject: [PATCH 192/230] switched RsNxsItems to new serialization --- libretroshare/src/gxs/rsgxsnetservice.cc | 6 +- libretroshare/src/serialiser/rsnxsitems.cc | 283 +++++++++++++-------- libretroshare/src/serialiser/rsnxsitems.h | 169 ++++-------- 3 files changed, 223 insertions(+), 235 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 259d01135..1811f2658 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -3500,10 +3500,10 @@ bool RsGxsNetService::encryptSingleNxsItem(RsNxsItem *item, const RsGxsCircleId& #ifdef NXS_NET_DEBUG_7 GXSNETDEBUG_P_ (item->PeerId()) << " Encrypting..." << std::endl; #endif - uint32_t size = item->serial_size() ; + uint32_t size = RsNxsSerialiser(mServType).size(item) ; RsTemporaryMemory tempmem( size ) ; - if(!item->serialise(tempmem,size)) + if(!RsNxsSerialiser(mServType).serialise(item,tempmem,&size)) { std::cerr << " (EE) Cannot serialise item. Something went wrong." << std::endl; status = RS_NXS_ITEM_ENCRYPTION_STATUS_SERIALISATION_ERROR ; @@ -3530,7 +3530,7 @@ bool RsGxsNetService::encryptSingleNxsItem(RsNxsItem *item, const RsGxsCircleId& enc_item->transactionNumber = item->transactionNumber ; enc_item->PeerId(item->PeerId()) ; - encrypted_item = enc_item ; + encrypted_item = enc_item ; #ifdef NXS_NET_DEBUG_7 GXSNETDEBUG_P_(item->PeerId()) << " encrypted item of size " << encrypted_len << std::endl; #endif diff --git a/libretroshare/src/serialiser/rsnxsitems.cc b/libretroshare/src/serialiser/rsnxsitems.cc index d17002ca9..bfea43843 100644 --- a/libretroshare/src/serialiser/rsnxsitems.cc +++ b/libretroshare/src/serialiser/rsnxsitems.cc @@ -1,8 +1,9 @@ #include "rsnxsitems.h" -#include "rsbaseserial.h" #include "util/rsprint.h" #include +#include "serialization/rstypeserializer.h" + /*** * #define RSSERIAL_DEBUG 1 ***/ @@ -37,47 +38,181 @@ const uint16_t RsNxsTransacItem::FLAG_TYPE_GRPS = 0x1000; const uint16_t RsNxsTransacItem::FLAG_TYPE_MSGS = 0x2000; const uint16_t RsNxsTransacItem::FLAG_TYPE_ENCRYPTED_DATA = 0x4000; -RsItem* RsNxsSerialiser::deserialise(void *data, uint32_t *size) +RsItem *RsNxsSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); + if(service_id != SERVICE_TYPE) + return NULL ; - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (SERVICE_TYPE != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM: return deserialNxsSyncGrpReqItem(data, size); - case RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM: return deserialNxsSyncGrpItem(data, size); - case RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM: return deserialNxsSyncMsgReqItem(data, size); - case RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM: return deserialNxsSyncMsgItem(data, size); - case RS_PKT_SUBTYPE_NXS_GRP_ITEM: return deserialNxsGrpItem(data, size); - case RS_PKT_SUBTYPE_NXS_MSG_ITEM: return deserialNxsMsgItem(data, size); - case RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM: return deserialNxsTransacItem(data, size); - case RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM:return deserialNxsGroupPublishKeyItem(data, size); - case RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM: return deserialNxsSessionKeyItem(data, size); - case RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM: return deserialNxsEncryptedDataItem(data, size); - case RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM: return deserialNxsSyncGrpStatsItem(data, size); + switch(item_subtype) + { + case RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM: return new RsNxsSyncGrpReqItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM: return new RsNxsSyncGrpItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM: return new RsNxsSyncMsgReqItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM: return new RsNxsSyncMsgItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_GRP_ITEM: return new RsNxsGrp(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_MSG_ITEM: return new RsNxsMsg(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM: return new RsNxsTransacItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM:return new RsNxsGroupPublishKeyItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM: return new RsNxsEncryptedDataItem(SERVICE_TYPE) ; + case RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM: return new RsNxsSyncGrpStatsItem(SERVICE_TYPE) ; default: - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialise() : data has no type" - << std::endl; -#endif return NULL; - - } - } + } } +void RsNxsSyncMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,flag ,"flag") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process (j,ctx,msgId ,"msgId") ; + RsTypeSerializer::serial_process (j,ctx,authorId ,"authorId") ; +} +void RsNxsMsg::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,pos ,"pos") ; + RsTypeSerializer::serial_process (j,ctx,msgId ,"msgId") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,msg ,"msg") ; + RsTypeSerializer::serial_process(j,ctx,meta ,"meta") ; +} +void RsNxsGrp::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,pos ,"pos") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,grp ,"grp") ; + RsTypeSerializer::serial_process(j,ctx,meta ,"meta") ; +} + +void RsNxsSyncGrpStatsItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,request_type ,"request_type") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process (j,ctx,number_of_posts,"number_of_posts") ; + RsTypeSerializer::serial_process (j,ctx,last_post_TS ,"last_post_TS") ; +} + +void RsNxsSyncGrpReqItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,flag ,"flag") ; + RsTypeSerializer::serial_process(j,ctx,createdSince ,"createdSince") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_HASH_SHA1,syncHash,"syncHash") ; + RsTypeSerializer::serial_process(j,ctx,updateTS ,"updateTS") ; +} + +void RsNxsTransacItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process(j,ctx,transactFlag ,"transactFlag") ; + RsTypeSerializer::serial_process(j,ctx,nItems ,"nItems") ; + RsTypeSerializer::serial_process(j,ctx,updateTS ,"updateTS") ; +} +void RsNxsSyncGrpItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,flag ,"flag") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,publishTs ,"publishTs") ; + RsTypeSerializer::serial_process (j,ctx,authorId ,"authorId") ; +} +void RsNxsSyncMsgReqItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process (j,ctx,flag ,"flag") ; + RsTypeSerializer::serial_process(j,ctx,createdSinceTS ,"createdSinceTS") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_HASH_SHA1,syncHash,"syncHash") ; + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,updateTS ,"updateTS") ; +} +void RsNxsGroupPublishKeyItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,grpId ,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,private_key ,"private_key") ; +} +void RsNxsEncryptedDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,transactionNumber,"transactionNumber") ; + RsTypeSerializer::serial_process(j,ctx,encrypted_data, "encrypted_data") ; +} + +int RsNxsGrp::refcount = 0; +/** print and clear functions **/ +int RsNxsMsg::refcount = 0; +void RsNxsMsg::clear() +{ + + msg.TlvClear(); + meta.TlvClear(); +} + +void RsNxsGrp::clear() +{ + grpId.clear(); + grp.TlvClear(); + meta.TlvClear(); +} + +void RsNxsSyncGrpReqItem::clear() +{ + flag = 0; + createdSince = 0; + syncHash.clear(); + updateTS = 0; +} +void RsNxsGroupPublishKeyItem::clear() +{ + private_key.TlvClear(); +} +void RsNxsSyncMsgReqItem::clear() +{ + grpId.clear(); + flag = 0; + createdSinceTS = 0; + syncHash.clear(); + updateTS = 0; +} +void RsNxsSyncGrpItem::clear() +{ + flag = 0; + publishTs = 0; + grpId.clear(); + authorId.clear(); +} + +void RsNxsSyncMsgItem::clear() +{ + flag = 0; + msgId.clear(); + grpId.clear(); + authorId.clear(); +} + +void RsNxsTransacItem::clear(){ + transactFlag = 0; + nItems = 0; + updateTS = 0; + timestamp = 0; + transactionNumber = 0; +} +void RsNxsEncryptedDataItem::clear(){ + encrypted_data.TlvClear() ; +} + +#ifdef SUSPENDED_CODE_27042017 +void RsNxsSessionKeyItem::clear() +{ + for(std::map::iterator it(encrypted_session_keys.begin());it!=encrypted_session_keys.end();++it) + it->second.TlvClear() ; + + encrypted_session_keys.clear() ; +} +#endif + +#ifdef TO_REMOVE uint32_t RsNxsSerialiser::size(RsItem *item) { @@ -165,7 +300,6 @@ bool RsNxsSyncMsgItem::serialise(void *data, uint32_t& size) const return ok; } - bool RsNxsMsg::serialise(void *data, uint32_t& size) const { uint32_t tlvsize,offset=0; @@ -231,7 +365,6 @@ bool RsNxsGrp::serialise(void *data, uint32_t& size) const return ok; } - bool RsNxsSyncGrpStatsItem::serialise(void *data, uint32_t& size) const { uint32_t tlvsize,offset=0; @@ -265,7 +398,6 @@ bool RsNxsSyncGrpStatsItem::serialise(void *data, uint32_t& size) const return ok; } - bool RsNxsSyncGrpReqItem::serialise(void *data, uint32_t& size) const { uint32_t tlvsize,offset=0; @@ -297,7 +429,6 @@ bool RsNxsSyncGrpReqItem::serialise(void *data, uint32_t& size) const return ok; } - bool RsNxsTransacItem::serialise(void *data, uint32_t& size) const { uint32_t tlvsize,offset=0; @@ -361,6 +492,7 @@ bool RsNxsSyncGrpItem::serialise(void *data, uint32_t& size) const return ok; } + bool RsNxsSyncMsgReqItem::serialise(void *data, uint32_t& size) const { uint32_t tlvsize,offset=0; @@ -1065,78 +1197,6 @@ uint32_t RsNxsSessionKeyItem::serial_size() const } - - -int RsNxsGrp::refcount = 0; -/** print and clear functions **/ -int RsNxsMsg::refcount = 0; -void RsNxsMsg::clear() -{ - - msg.TlvClear(); - meta.TlvClear(); -} - -void RsNxsGrp::clear() -{ - grpId.clear(); - grp.TlvClear(); - meta.TlvClear(); -} - -void RsNxsSyncGrpReqItem::clear() -{ - flag = 0; - createdSince = 0; - syncHash.clear(); - updateTS = 0; -} -void RsNxsGroupPublishKeyItem::clear() -{ - private_key.TlvClear(); -} -void RsNxsSyncMsgReqItem::clear() -{ - grpId.clear(); - flag = 0; - createdSinceTS = 0; - syncHash.clear(); - updateTS = 0; -} -void RsNxsSyncGrpItem::clear() -{ - flag = 0; - publishTs = 0; - grpId.clear(); - authorId.clear(); -} - -void RsNxsSyncMsgItem::clear() -{ - flag = 0; - msgId.clear(); - grpId.clear(); - authorId.clear(); -} - -void RsNxsTransacItem::clear(){ - transactFlag = 0; - nItems = 0; - updateTS = 0; - timestamp = 0; - transactionNumber = 0; -} -void RsNxsEncryptedDataItem::clear(){ - encrypted_data.TlvClear() ; -} -void RsNxsSessionKeyItem::clear() -{ - for(std::map::iterator it(encrypted_session_keys.begin());it!=encrypted_session_keys.end();++it) - it->second.TlvClear() ; - - encrypted_session_keys.clear() ; -} - std::ostream& RsNxsSyncGrpReqItem::print(std::ostream &out, uint16_t indent) { @@ -1347,3 +1407,4 @@ std::ostream& RsNxsEncryptedDataItem::print(std::ostream &out, uint16_t indent) printRsItemEnd(out ,"RsNxsSessionKeyItem", indent); return out; } +#endif diff --git a/libretroshare/src/serialiser/rsnxsitems.h b/libretroshare/src/serialiser/rsnxsitems.h index 2f4886507..10eb1d835 100644 --- a/libretroshare/src/serialiser/rsnxsitems.h +++ b/libretroshare/src/serialiser/rsnxsitems.h @@ -72,20 +72,13 @@ class RsNxsItem : public RsItem { public: - RsNxsItem(uint16_t servtype, uint8_t subtype) - : RsItem(RS_PKT_VERSION_SERVICE, servtype, subtype), transactionNumber(0) + RsNxsItem(uint16_t servtype, uint8_t subtype) : RsItem(RS_PKT_VERSION_SERVICE, servtype, subtype), transactionNumber(0) { setPriorityLevel(QOS_PRIORITY_RS_GXS_NET); return; } virtual ~RsNxsItem(){} - - virtual bool serialise(void *data,uint32_t& size) const = 0 ; - virtual uint32_t serial_size() const = 0 ; virtual void clear() = 0; - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0) = 0; - - bool serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const; uint32_t transactionNumber; // set to zero if this is not a transaction item }; @@ -103,14 +96,11 @@ public: static const uint8_t FLAG_USE_SYNC_HASH; static const uint8_t FLAG_ONLY_CURRENT; // only send most current version of grps / ignores sync hash - RsNxsSyncGrpReqItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM) { clear(); return;} - + RsNxsSyncGrpReqItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM) { clear();} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const ; - + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + uint8_t flag; // advises whether to use sync hash uint32_t createdSince; // how far back to sync data uint32_t updateTS; // time of last group update @@ -127,14 +117,12 @@ public: RsNxsSyncGrpStatsItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM) {} virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t indent); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const ; - static const uint8_t GROUP_INFO_TYPE_REQUEST = 0x01; static const uint8_t GROUP_INFO_TYPE_RESPONSE = 0x02; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + uint32_t request_type; // used to determine the type of request RsGxsGroupId grpId; // id of the group uint32_t number_of_posts; // number of posts in that group @@ -149,14 +137,12 @@ public: class RsNxsGroupPublishKeyItem : public RsNxsItem { public: - RsNxsGroupPublishKeyItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM) { clear(); return;} + RsNxsGroupPublishKeyItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM) { clear(); } virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsGxsGroupId grpId ; RsTlvPrivateRSAKey private_key ; }; @@ -194,14 +180,12 @@ public: static const uint16_t FLAG_TYPE_MSGS; static const uint16_t FLAG_TYPE_ENCRYPTED_DATA; - RsNxsTransacItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM) { clear(); return; } - virtual ~RsNxsTransacItem() { return ; } + RsNxsTransacItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM) { clear(); } + virtual ~RsNxsTransacItem() {} - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const ; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint16_t transactFlag; uint32_t nItems; @@ -224,18 +208,14 @@ public: static const uint8_t FLAG_RESPONSE; static const uint8_t FLAG_USE_SYNC_HASH; - RsNxsSyncGrpItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM) { clear(); return ; } - virtual ~RsNxsSyncGrpItem() { return; } + RsNxsSyncGrpItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM) { clear();} + virtual ~RsNxsSyncGrpItem() {} - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint8_t flag; // request or response - uint32_t publishTs; // to compare to Ts of receiving peer's grp of same id /// grpId of grp held by sending peer @@ -244,6 +224,7 @@ public: }; +#ifdef SUSPENDED_CODE_27042017 /*! * Use to send to peer list of grps * held by server peer @@ -256,17 +237,14 @@ public: RsNxsSessionKeyItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM) { clear(); } virtual ~RsNxsSessionKeyItem() {} - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); /// Session key encrypted for the whole group /// uint8_t iv[EVP_MAX_IV_LENGTH] ; // initialisation vector std::map encrypted_session_keys; // encrypted session keys }; +#endif /*! * Use to send to peer list of grps * held by server peer @@ -282,12 +260,9 @@ public: clear(); } virtual ~RsNxsEncryptedDataItem() {} - - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); /// grpId of grp held by sending peer /// @@ -306,20 +281,14 @@ class RsNxsGrp : public RsNxsItem public: RsNxsGrp(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_GRP_ITEM), grp(servtype), meta(servtype), - metaData(NULL) { clear(); - //std::cout << "\nGrp refcount++ : " << ++refcount << std::endl; - return; } - virtual ~RsNxsGrp() { if(metaData) delete metaData; - //std::cout << "\nGrp refcount-- : " << --refcount << std::endl; - } + metaData(NULL) { clear();} + virtual ~RsNxsGrp() { if(metaData) delete metaData; } RsNxsGrp* clone() const; - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsGroupId grpId; /// group Id, needed to complete version Id (ncvi) static int refcount; @@ -354,13 +323,11 @@ public: #endif static const uint8_t FLAG_USE_HASHED_GROUP_ID; - RsNxsSyncMsgReqItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM) { clear(); return; } - - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; + RsNxsSyncMsgReqItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM) { clear(); } virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsGroupId grpId; uint8_t flag; @@ -380,13 +347,11 @@ public: static const uint8_t FLAG_REQUEST; static const uint8_t FLAG_RESPONSE; static const uint8_t FLAG_USE_SYNC_HASH; - RsNxsSyncMsgItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM) { clear(); return; } + RsNxsSyncMsgItem(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM) { clear(); } - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint8_t flag; // response/req RsGxsGroupId grpId; @@ -405,24 +370,12 @@ class RsNxsMsg : public RsNxsItem public: RsNxsMsg(uint16_t servtype) : RsNxsItem(servtype, RS_PKT_SUBTYPE_NXS_MSG_ITEM), meta(servtype), msg(servtype), - metaData(NULL) { - // std::cout << "\nrefcount++ : " << ++refcount << std::endl; - clear(); return; - } - virtual ~RsNxsMsg() - { - //std::cout << "\nrefcount-- : " << --refcount << std::endl; - if(metaData){ - //std::cout << "\ndeleted\n"; - delete metaData; - } - } + metaData(NULL) { clear(); } + virtual ~RsNxsMsg() { if(metaData) delete metaData; } - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint8_t pos; /// used for splitting up msg uint8_t count; /// number of split up messages @@ -453,14 +406,11 @@ class RsNxsSearchReqItem : public RsNxsItem { public: - RsNxsSearchReqItem(uint16_t servtype): RsNxsItem(servtype, RS_PKT_SUBTYPE_EXT_SEARCH_REQ), serviceSearchItem(servtype) { return; } - virtual ~RsNxsSearchReqItem() { return;} + RsNxsSearchReqItem(uint16_t servtype): RsNxsItem(servtype, RS_PKT_SUBTYPE_EXT_SEARCH_REQ), serviceSearchItem(servtype) {} + virtual ~RsNxsSearchReqItem() {} + virtual void clear() {} - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - - virtual void clear() { return;} - virtual std::ostream &print(std::ostream &out, uint16_t /*indent*/) { return out; } + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint8_t nHops; /// how many peers to jump to uint32_t token; // search token @@ -477,13 +427,11 @@ class RsNxsSearchResultMsgItem { public: - RsNxsSearchResultMsgItem() : context(0) { return;} + RsNxsSearchResultMsgItem() : context(0) {} - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - void clear() {} - std::ostream &print(std::ostream &out, uint16_t /*indent*/) { return out; } + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t token; // search token to be redeemed RsTlvBinaryData context; // used by client service @@ -504,14 +452,11 @@ public: RsNxsSearchResultGrpItem(); - virtual bool serialise(void *data,uint32_t& size) const; - virtual uint32_t serial_size() const; - void clear() {} - std::ostream &print(std::ostream &out, uint16_t /*indent*/) { return out; } + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t token; // search token to be redeemed - RsTlvBinaryData context; // used by client service std::string grpId; @@ -547,34 +492,16 @@ public: #endif -class RsNxsSerialiser : public RsSerialType +class RsNxsSerialiser : public RsServiceSerializer { public: - RsNxsSerialiser(uint16_t servtype) : - RsSerialType(RS_PKT_VERSION_SERVICE, servtype), SERVICE_TYPE(servtype) { return; } + RsNxsSerialiser(uint16_t servtype) : RsServiceSerializer(servtype), SERVICE_TYPE(servtype) {} + virtual ~RsNxsSerialiser() {} - virtual ~RsNxsSerialiser() { return; } - virtual uint32_t size(RsItem *item); - virtual bool serialise(RsItem *item, void *data, uint32_t *size); - virtual RsItem* deserialise(void *data, uint32_t *size); - -private: - RsNxsSyncGrpReqItem *deserialNxsSyncGrpReqItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_GRP */ - RsNxsSyncGrpItem *deserialNxsSyncGrpItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_GRP_ITEM */ - RsNxsSyncMsgReqItem *deserialNxsSyncMsgReqItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_MSG */ - RsNxsSyncMsgItem *deserialNxsSyncMsgItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_SYNC_MSG_ITEM */ - RsNxsGrp *deserialNxsGrpItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_GRP */ - RsNxsMsg *deserialNxsMsgItem(void *data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_MSG */ - RsNxsTransacItem *deserialNxsTransacItem(void* data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_TRANS */ - RsNxsGroupPublishKeyItem *deserialNxsGroupPublishKeyItem(void* data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY */ - RsNxsSessionKeyItem *deserialNxsSessionKeyItem(void* data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM */ - RsNxsEncryptedDataItem *deserialNxsEncryptedDataItem(void* data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM */ - RsNxsSyncGrpStatsItem *deserialNxsSyncGrpStatsItem(void* data, uint32_t *size); /* RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM */ - - bool checkItemHeader(void *data, uint32_t *size, uint8_t subservice_type); - + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; +protected: const uint16_t SERVICE_TYPE; }; From 22f6d150dfd59135038abe3c6528f87159a1e6dd Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 14:21:46 +0200 Subject: [PATCH 193/230] moved rsnxsitems.cc to rsitems/ --- libretroshare/src/gxs/gxssecurity.h | 3 ++- libretroshare/src/gxs/rsgds.h | 2 +- libretroshare/src/gxs/rsgenexchange.h | 2 +- libretroshare/src/gxs/rsgxsnetservice.h | 2 +- libretroshare/src/gxs/rsgxsnetutils.h | 2 +- libretroshare/src/gxs/rsgxsutil.h | 2 +- libretroshare/src/gxs/rsnxsobserver.h | 2 +- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsnxsitems.cc | 0 libretroshare/src/{serialiser => rsitems}/rsnxsitems.h | 0 10 files changed, 10 insertions(+), 9 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsnxsitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rsnxsitems.h (100%) diff --git a/libretroshare/src/gxs/gxssecurity.h b/libretroshare/src/gxs/gxssecurity.h index b19f81302..047094688 100644 --- a/libretroshare/src/gxs/gxssecurity.h +++ b/libretroshare/src/gxs/gxssecurity.h @@ -28,7 +28,8 @@ */ #include "serialiser/rstlvkeys.h" -#include "serialiser/rsnxsitems.h" + +#include "rsitems/rsnxsitems.h" #include #include diff --git a/libretroshare/src/gxs/rsgds.h b/libretroshare/src/gxs/rsgds.h index 5a82337fe..303d411b8 100644 --- a/libretroshare/src/gxs/rsgds.h +++ b/libretroshare/src/gxs/rsgds.h @@ -33,7 +33,7 @@ #include "inttypes.h" #include "rsitems/rsgxsitems.h" -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" #include "gxs/rsgxsdata.h" #include "rsgxs.h" #include "util/contentvalue.h" diff --git a/libretroshare/src/gxs/rsgenexchange.h b/libretroshare/src/gxs/rsgenexchange.h index 21ea4365c..8ebd40bd7 100644 --- a/libretroshare/src/gxs/rsgenexchange.h +++ b/libretroshare/src/gxs/rsgenexchange.h @@ -36,7 +36,7 @@ #include "rsgxsdataaccess.h" #include "rsnxsobserver.h" #include "retroshare/rsgxsservice.h" -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" #include "rsgxsutil.h" template diff --git a/libretroshare/src/gxs/rsgxsnetservice.h b/libretroshare/src/gxs/rsgxsnetservice.h index b14d55058..883649e57 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.h +++ b/libretroshare/src/gxs/rsgxsnetservice.h @@ -33,7 +33,7 @@ #include "rsgds.h" #include "rsnxsobserver.h" #include "pqi/p3linkmgr.h" -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" #include "serialiser/rsgxsupdateitems.h" #include "rsgxsnetutils.h" #include "pqi/p3cfgmgr.h" diff --git a/libretroshare/src/gxs/rsgxsnetutils.h b/libretroshare/src/gxs/rsgxsnetutils.h index df82cb2b3..aae2be9f8 100644 --- a/libretroshare/src/gxs/rsgxsnetutils.h +++ b/libretroshare/src/gxs/rsgxsnetutils.h @@ -28,7 +28,7 @@ #include #include "retroshare/rsgxsifacetypes.h" -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" #include "rsgixs.h" class p3ServiceControl; diff --git a/libretroshare/src/gxs/rsgxsutil.h b/libretroshare/src/gxs/rsgxsutil.h index a47b981d3..ea94fedcb 100644 --- a/libretroshare/src/gxs/rsgxsutil.h +++ b/libretroshare/src/gxs/rsgxsutil.h @@ -27,7 +27,7 @@ #define GXSUTIL_H_ #include -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" #include "rsgds.h" class RsGixs ; diff --git a/libretroshare/src/gxs/rsnxsobserver.h b/libretroshare/src/gxs/rsnxsobserver.h index 2b25fc950..087842ef0 100644 --- a/libretroshare/src/gxs/rsnxsobserver.h +++ b/libretroshare/src/gxs/rsnxsobserver.h @@ -27,7 +27,7 @@ */ #include -#include "serialiser/rsnxsitems.h" +#include "rsitems/rsnxsitems.h" class RsNxsObserver diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 4d2e75c7c..1c047a75b 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -722,7 +722,7 @@ SOURCES += zeroconf/p3zcnatassist.cc \ DEFINES *= SQLITE_HAS_CODEC DEFINES *= GXS_ENABLE_SYNC_MSGS -HEADERS += serialiser/rsnxsitems.h \ +HEADERS += rsitems/rsnxsitems.h \ gxs/rsgds.h \ gxs/rsgxs.h \ gxs/rsdataservice.h \ @@ -748,7 +748,7 @@ HEADERS += serialiser/rsnxsitems.h \ gxs/rsgxsrequesttypes.h -SOURCES += serialiser/rsnxsitems.cc \ +SOURCES += rsitems/rsnxsitems.cc \ gxs/rsdataservice.cc \ gxs/rsgenexchange.cc \ gxs/rsgxsnetservice.cc \ diff --git a/libretroshare/src/serialiser/rsnxsitems.cc b/libretroshare/src/rsitems/rsnxsitems.cc similarity index 100% rename from libretroshare/src/serialiser/rsnxsitems.cc rename to libretroshare/src/rsitems/rsnxsitems.cc diff --git a/libretroshare/src/serialiser/rsnxsitems.h b/libretroshare/src/rsitems/rsnxsitems.h similarity index 100% rename from libretroshare/src/serialiser/rsnxsitems.h rename to libretroshare/src/rsitems/rsnxsitems.h From 35ecc196777e5007066ec65bbc17061a26a752f0 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 14:41:31 +0200 Subject: [PATCH 194/230] switched rsposteditems to new serialization --- libretroshare/src/serialiser/rsposteditems.cc | 358 +----------------- libretroshare/src/serialiser/rsposteditems.h | 37 +- libretroshare/src/services/p3posted.cc | 1 + 3 files changed, 27 insertions(+), 369 deletions(-) diff --git a/libretroshare/src/serialiser/rsposteditems.cc b/libretroshare/src/serialiser/rsposteditems.cc index e5f8a666e..628a1a1ee 100644 --- a/libretroshare/src/serialiser/rsposteditems.cc +++ b/libretroshare/src/serialiser/rsposteditems.cc @@ -25,365 +25,39 @@ */ #include "serialiser/rsposteditems.h" -#include "rsbaseserial.h" -#include "rstlvbase.h" +#include "serialization/rstypeserializer.h" - -uint32_t RsGxsPostedSerialiser::size(RsItem *item) +void RsGxsPostedPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::size()" << std::endl; -#endif - - RsGxsPostedGroupItem* pgItem = NULL; - RsGxsPostedPostItem* ppItem = NULL; - - if ((pgItem = dynamic_cast(item)) != NULL) - { - return sizeGxsPostedGroupItem(pgItem); - } - else if ((ppItem = dynamic_cast(item)) != NULL) - { - return sizeGxsPostedPostItem(ppItem); - } - else - { - return RsGxsCommentSerialiser::size(item); - } + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LINK,mPost.mLink,"mPost.mLink") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG ,mPost.mNotes,"mPost.mNotes") ; } -bool RsGxsPostedSerialiser::serialise(RsItem *item, void *data, uint32_t *size) +void RsGxsPostedGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::serialise()" << std::endl; -#endif - - RsGxsPostedPostItem* ppItem = NULL; - RsGxsPostedGroupItem* pgItem = NULL; - - if ((pgItem = dynamic_cast(item)) != NULL) - { - return serialiseGxsPostedGroupItem(pgItem, data, size); - } - else if ((ppItem = dynamic_cast(item)) != NULL) - { - return serialiseGxsPostedPostItem(ppItem, data, size); - } - else - { - return RsGxsCommentSerialiser::serialise(item, data, size); - } + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR ,mGroup.mDescription,"mGroup.mDescription") ; } -RsItem* RsGxsPostedSerialiser::deserialise(void *data, uint32_t *size) +RsItem *RsGxsPostedSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); + if(service_id != RS_SERVICE_GXS_TYPE_POSTED) + return NULL ; - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype))) - { - std::cerr << "RsGxsPostedSerialiser::deserialise() ERROR Wrong Type"; - std::cerr << std::endl; - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_POSTED_GRP_ITEM: - return deserialiseGxsPostedGroupItem(data, size); - break; - case RS_PKT_SUBTYPE_POSTED_POST_ITEM: - return deserialiseGxsPostedPostItem(data, size); - break; - default: - return RsGxsCommentSerialiser::deserialise(data, size); - break; - } + switch(item_subtype) + { + case RS_PKT_SUBTYPE_POSTED_GRP_ITEM: return new RsGxsPostedGroupItem() ; + case RS_PKT_SUBTYPE_POSTED_POST_ITEM: return new RsGxsPostedPostItem() ; + default: + return RsGxsCommentSerialiser::create_item(service_id,item_subtype) ; + } } -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - void RsGxsPostedPostItem::clear() { mPost.mLink.clear(); mPost.mNotes.clear(); } - -std::ostream & RsGxsPostedPostItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPostedPostItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Link: " << mPost.mLink << std::endl; - printIndent(out, int_Indent); - out << "Notes: " << mPost.mNotes << std::endl; - - printRsItemEnd(out ,"RsGxsPostedPostItem", indent); - return out; -} - -uint32_t RsGxsPostedSerialiser::sizeGxsPostedPostItem(RsGxsPostedPostItem* item) -{ - RsPostedPost& p = item->mPost; - - uint32_t s = 8; - - s += GetTlvStringSize(p.mLink); - s += GetTlvStringSize(p.mNotes); - - return s; -} - -bool RsGxsPostedSerialiser::serialiseGxsPostedPostItem(RsGxsPostedPostItem* item, void* data, uint32_t *size) -{ - -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedPostItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsPostedPostItem(item); - uint32_t offset = 0; - - if(*size < tlvsize){ - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedPostItem() Size too small" << std::endl; - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* RsPostedPost */ - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LINK, item->mPost.mLink); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->mPost.mNotes); - - if(offset != tlvsize) - { - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedPostItem() FAIL Size Error! " << std::endl; - ok = false; - } - -#ifdef POSTED_DEBUG - if (!ok) - { - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedPostItem() NOK" << std::endl; - } -#endif - - return ok; -} - - - - -RsGxsPostedPostItem* RsGxsPostedSerialiser::deserialiseGxsPostedPostItem(void *data, uint32_t *size) -{ - -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_POSTED_POST_ITEM != getRsItemSubType(rstype))) - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() FAIL wrong type" << std::endl; - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() FAIL wrong size" << std::endl; - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsPostedPostItem* item = new RsGxsPostedPostItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LINK, item->mPost.mLink); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->mPost.mNotes); - - if (offset != rssize) - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() FAIL size mismatch" << std::endl; - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - void RsGxsPostedGroupItem::clear() { mGroup.mDescription.clear(); - return; } - -std::ostream & RsGxsPostedGroupItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPostedGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Description: " << mGroup.mDescription << std::endl; - - printRsItemEnd(out ,"RsGxsPostedGroupItem", indent); - return out; -} - - -uint32_t RsGxsPostedSerialiser::sizeGxsPostedGroupItem(RsGxsPostedGroupItem* item) -{ - RsPostedGroup& g = item->mGroup; - uint32_t s = 8; // header - - s += GetTlvStringSize(g.mDescription); - - return s; -} - -bool RsGxsPostedSerialiser::serialiseGxsPostedGroupItem(RsGxsPostedGroupItem* item, void* data, uint32_t *size) -{ - -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedGroupItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsPostedGroupItem(item); - uint32_t offset = 0; - - if(*size < tlvsize){ -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedGroupItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* PostedGroupItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->mGroup.mDescription); - - - if(offset != tlvsize) - { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef POSTED_DEBUG - if (!ok) - { - std::cerr << "RsGxsPostedSerialiser::serialiseGxsPostedGroupItem() NOK" << std::endl; - } -#endif - - return ok; -} -RsGxsPostedGroupItem* RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem(void *data, uint32_t *size) -{ - -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_POSTED_GRP_ITEM != getRsItemSubType(rstype))) - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() FAIL wrong type" << std::endl; - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() FAIL wrong size" << std::endl; - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsPostedGroupItem* item = new RsGxsPostedGroupItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->mGroup.mDescription); - - if (offset != rssize) - { - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() FAIL size mismatch" << std::endl; - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef POSTED_DEBUG - std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - diff --git a/libretroshare/src/serialiser/rsposteditems.h b/libretroshare/src/serialiser/rsposteditems.h index e78dfafe1..b78835451 100644 --- a/libretroshare/src/serialiser/rsposteditems.h +++ b/libretroshare/src/serialiser/rsposteditems.h @@ -7,18 +7,17 @@ #include "retroshare/rsposted.h" -const uint8_t RS_PKT_SUBTYPE_POSTED_GRP_ITEM = 0x02; +const uint8_t RS_PKT_SUBTYPE_POSTED_GRP_ITEM = 0x02; const uint8_t RS_PKT_SUBTYPE_POSTED_POST_ITEM = 0x03; class RsGxsPostedGroupItem : public RsGxsGrpItem { public: - RsGxsPostedGroupItem() : RsGxsGrpItem(RS_SERVICE_GXS_TYPE_POSTED, - RS_PKT_SUBTYPE_POSTED_GRP_ITEM) { return; } - virtual ~RsGxsPostedGroupItem() { return; } + RsGxsPostedGroupItem() : RsGxsGrpItem(RS_SERVICE_GXS_TYPE_POSTED, RS_PKT_SUBTYPE_POSTED_GRP_ITEM) {} + virtual ~RsGxsPostedGroupItem() {} void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPostedGroup mGroup; }; @@ -26,40 +25,24 @@ public: class RsGxsPostedPostItem : public RsGxsMsgItem { public: - RsGxsPostedPostItem() : RsGxsMsgItem(RS_SERVICE_GXS_TYPE_POSTED, - RS_PKT_SUBTYPE_POSTED_POST_ITEM) {return ; } - virtual ~RsGxsPostedPostItem() { return; } + RsGxsPostedPostItem() : RsGxsMsgItem(RS_SERVICE_GXS_TYPE_POSTED, RS_PKT_SUBTYPE_POSTED_POST_ITEM) {} + virtual ~RsGxsPostedPostItem() {} void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPostedPost mPost; }; class RsGxsPostedSerialiser : public RsGxsCommentSerialiser { - public: - RsGxsPostedSerialiser() - :RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_POSTED) - { return; } + RsGxsPostedSerialiser() :RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_POSTED) {} - virtual ~RsGxsPostedSerialiser() { return; } + virtual ~RsGxsPostedSerialiser() {} - uint32_t size(RsItem *item); - bool serialise(RsItem *item, void *data, uint32_t *size); - RsItem* deserialise(void *data, uint32_t *size); - -private: - - uint32_t sizeGxsPostedGroupItem(RsGxsPostedGroupItem* item); - bool serialiseGxsPostedGroupItem(RsGxsPostedGroupItem* item, void* data, uint32_t *size); - RsGxsPostedGroupItem* deserialiseGxsPostedGroupItem(void *data, uint32_t *size); - - uint32_t sizeGxsPostedPostItem(RsGxsPostedPostItem* item); - bool serialiseGxsPostedPostItem(RsGxsPostedPostItem* item, void* data, uint32_t *size); - RsGxsPostedPostItem* deserialiseGxsPostedPostItem(void *data, uint32_t *size); + virtual RsItem *create_item(uint16_t service_id,uint8_t item_subtype) const ; }; diff --git a/libretroshare/src/services/p3posted.cc b/libretroshare/src/services/p3posted.cc index b231149d5..1fe9dde3f 100644 --- a/libretroshare/src/services/p3posted.cc +++ b/libretroshare/src/services/p3posted.cc @@ -156,6 +156,7 @@ bool p3Posted::getPostData(const uint32_t &token, std::vector &msg std::cerr << "Not a PostedPostItem neither a RsGxsCommentItem" << " PacketService=" << std::hex << (int)msg->PacketService() << std::dec << " PacketSubType=" << std::hex << (int)msg->PacketSubType() << std::dec + << " type name =" << typeid(*msg).name() << " , deleting!" << std::endl; delete *vit; } From 349d14b354645cc33a0f44bb2671e658e91f732e Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 14:44:41 +0200 Subject: [PATCH 195/230] moved rsposteditems to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsposteditems.cc | 2 +- libretroshare/src/{serialiser => rsitems}/rsposteditems.h | 0 libretroshare/src/services/p3posted.cc | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsposteditems.cc (95%) rename libretroshare/src/{serialiser => rsitems}/rsposteditems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 1c047a75b..a86b8b9e4 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -844,11 +844,11 @@ gxsthewire { HEADERS += services/p3postbase.h \ services/p3posted.h \ retroshare/rsposted.h \ - serialiser/rsposteditems.h + rsitems/rsposteditems.h SOURCES += services/p3postbase.cc \ services/p3posted.cc \ - serialiser/rsposteditems.cc + rsitems/rsposteditems.cc gxsphotoshare { #Photo Service diff --git a/libretroshare/src/serialiser/rsposteditems.cc b/libretroshare/src/rsitems/rsposteditems.cc similarity index 95% rename from libretroshare/src/serialiser/rsposteditems.cc rename to libretroshare/src/rsitems/rsposteditems.cc index 628a1a1ee..652abed05 100644 --- a/libretroshare/src/serialiser/rsposteditems.cc +++ b/libretroshare/src/rsitems/rsposteditems.cc @@ -24,7 +24,7 @@ * */ -#include "serialiser/rsposteditems.h" +#include "rsitems/rsposteditems.h" #include "serialization/rstypeserializer.h" void RsGxsPostedPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) diff --git a/libretroshare/src/serialiser/rsposteditems.h b/libretroshare/src/rsitems/rsposteditems.h similarity index 100% rename from libretroshare/src/serialiser/rsposteditems.h rename to libretroshare/src/rsitems/rsposteditems.h diff --git a/libretroshare/src/services/p3posted.cc b/libretroshare/src/services/p3posted.cc index 1fe9dde3f..b3ad80ddf 100644 --- a/libretroshare/src/services/p3posted.cc +++ b/libretroshare/src/services/p3posted.cc @@ -24,7 +24,7 @@ */ #include "services/p3posted.h" -#include "serialiser/rsposteditems.h" +#include "rsitems/rsposteditems.h" #include From 19b4fb892c73e6db57cff5f71bfdd66fde152e4b Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 27 Apr 2017 16:42:25 +0200 Subject: [PATCH 196/230] Add Friend Time Offset news feed. --- libretroshare/src/retroshare/rsnotify.h | 17 ++--- libretroshare/src/retroshare/rsrtt.h | 3 +- libretroshare/src/services/p3rtt.cc | 32 ++++++++- libretroshare/src/services/p3rtt.h | 2 + retroshare-gui/src/gui/NewsFeed.cpp | 37 ++++++++-- retroshare-gui/src/gui/NewsFeed.h | 3 +- retroshare-gui/src/gui/feeds/PeerItem.cpp | 29 +++++++- retroshare-gui/src/gui/feeds/PeerItem.h | 3 + retroshare-gui/src/gui/feeds/PeerItem.ui | 88 ++++++++++++++++------- 9 files changed, 172 insertions(+), 42 deletions(-) diff --git a/libretroshare/src/retroshare/rsnotify.h b/libretroshare/src/retroshare/rsnotify.h index fd09218bd..7ca7385ee 100644 --- a/libretroshare/src/retroshare/rsnotify.h +++ b/libretroshare/src/retroshare/rsnotify.h @@ -78,15 +78,16 @@ const uint32_t RS_FEED_TYPE_SECURITY = 0x0800; const uint32_t RS_FEED_TYPE_POSTED = 0x1000; const uint32_t RS_FEED_TYPE_SECURITY_IP = 0x2000; -const uint32_t RS_FEED_ITEM_PEER_CONNECT = RS_FEED_TYPE_PEER | 0x0001; -const uint32_t RS_FEED_ITEM_PEER_DISCONNECT = RS_FEED_TYPE_PEER | 0x0002; -const uint32_t RS_FEED_ITEM_PEER_HELLO = RS_FEED_TYPE_PEER | 0x0003; -const uint32_t RS_FEED_ITEM_PEER_NEW = RS_FEED_TYPE_PEER | 0x0004; +const uint32_t RS_FEED_ITEM_PEER_CONNECT = RS_FEED_TYPE_PEER | 0x0001; +const uint32_t RS_FEED_ITEM_PEER_DISCONNECT = RS_FEED_TYPE_PEER | 0x0002; +const uint32_t RS_FEED_ITEM_PEER_HELLO = RS_FEED_TYPE_PEER | 0x0003; +const uint32_t RS_FEED_ITEM_PEER_NEW = RS_FEED_TYPE_PEER | 0x0004; +const uint32_t RS_FEED_ITEM_PEER_OFFSET = RS_FEED_TYPE_PEER | 0x0005; -const uint32_t RS_FEED_ITEM_SEC_CONNECT_ATTEMPT = RS_FEED_TYPE_SECURITY | 0x0001; -const uint32_t RS_FEED_ITEM_SEC_AUTH_DENIED = RS_FEED_TYPE_SECURITY | 0x0002; -const uint32_t RS_FEED_ITEM_SEC_UNKNOWN_IN = RS_FEED_TYPE_SECURITY | 0x0003; -const uint32_t RS_FEED_ITEM_SEC_UNKNOWN_OUT = RS_FEED_TYPE_SECURITY | 0x0004; +const uint32_t RS_FEED_ITEM_SEC_CONNECT_ATTEMPT = RS_FEED_TYPE_SECURITY | 0x0001; +const uint32_t RS_FEED_ITEM_SEC_AUTH_DENIED = RS_FEED_TYPE_SECURITY | 0x0002; +const uint32_t RS_FEED_ITEM_SEC_UNKNOWN_IN = RS_FEED_TYPE_SECURITY | 0x0003; +const uint32_t RS_FEED_ITEM_SEC_UNKNOWN_OUT = RS_FEED_TYPE_SECURITY | 0x0004; const uint32_t RS_FEED_ITEM_SEC_WRONG_SIGNATURE = RS_FEED_TYPE_SECURITY | 0x0005; const uint32_t RS_FEED_ITEM_SEC_BAD_CERTIFICATE = RS_FEED_TYPE_SECURITY | 0x0006; const uint32_t RS_FEED_ITEM_SEC_INTERNAL_ERROR = RS_FEED_TYPE_SECURITY | 0x0007; diff --git a/libretroshare/src/retroshare/rsrtt.h b/libretroshare/src/retroshare/rsrtt.h index aba776a17..6d9422562 100644 --- a/libretroshare/src/retroshare/rsrtt.h +++ b/libretroshare/src/retroshare/rsrtt.h @@ -2,7 +2,7 @@ #define RETROSHARE_RTT_INTERFACE_H /* - * libretroshare/src/retroshare: rsrtt.h + * libretroshare/src/retroshare: rsrtt.h * * RetroShare C++ Interface. * @@ -58,6 +58,7 @@ class RsRtt virtual ~RsRtt() { return; } virtual uint32_t getPongResults(const RsPeerId& id, int n, std::list &results) = 0; +virtual double getMeanOffset(const RsPeerId& id) = 0; }; diff --git a/libretroshare/src/services/p3rtt.cc b/libretroshare/src/services/p3rtt.cc index 987467b77..250cea007 100644 --- a/libretroshare/src/services/p3rtt.cc +++ b/libretroshare/src/services/p3rtt.cc @@ -30,11 +30,13 @@ #include "pqi/pqibin.h" #include "pqi/pqistore.h" #include "pqi/p3linkmgr.h" +#include "rsserver/p3face.h" #include "services/p3rtt.h" #include "serialiser/rsrttitems.h" #include +#include /**** * #define DEBUG_RTT 1 @@ -358,7 +360,26 @@ int p3rtt::storePongResult(const RsPeerId& id, uint32_t counter, double recv_ts, peerInfo->mPongResults.pop_front(); } - /* should do calculations */ + //Wait at least 20 pongs before compute mean time offset + if(peerInfo->mPongResults.size() > 20) + { + double mean = 0; + for(std::list::const_iterator prIt = peerInfo->mPongResults.begin(), end = peerInfo->mPongResults.end(); prIt != end; ++ prIt) + { + mean += prIt->mOffset; + } + peerInfo->mCurrentMeanOffset = mean / peerInfo->mPongResults.size(); + if(fabs(peerInfo->mCurrentMeanOffset) > 120) + { + p3Notify *notify = RsServer::notify(); + if (notify) + { + //notify->AddPopupMessage(RS_POPUP_OFFSET, eerInfo->mId.toStdString(),"", "Time Offset: "); + notify->AddFeedItem(RS_FEED_ITEM_PEER_OFFSET, peerInfo->mId.toStdString()); + } + std::cerr << "(WW) Peer:" << peerInfo->mId << " get time offset more than two minutes with you!!!" << std::endl; + } + } return 1; } @@ -379,7 +400,16 @@ uint32_t p3rtt::getPongResults(const RsPeerId& id, int n, std::listmCurrentMeanOffset; + else + return 0; +} RttPeerInfo *p3rtt::locked_GetPeerInfo(const RsPeerId& id) { diff --git a/libretroshare/src/services/p3rtt.h b/libretroshare/src/services/p3rtt.h index 9b881fba8..fdf6ef01c 100644 --- a/libretroshare/src/services/p3rtt.h +++ b/libretroshare/src/services/p3rtt.h @@ -46,6 +46,7 @@ class RttPeerInfo double mCurrentPingTS; double mCurrentPingCounter; bool mCurrentPongRecvd; + double mCurrentMeanOffset; uint32_t mLostPongs; uint32_t mSentPings; @@ -69,6 +70,7 @@ virtual RsServiceInfo getServiceInfo(); /***** overloaded from rsRtt *****/ virtual uint32_t getPongResults(const RsPeerId& id, int n, std::list &results); +virtual double getMeanOffset(const RsPeerId &id); /***** overloaded from p3Service *****/ diff --git a/retroshare-gui/src/gui/NewsFeed.cpp b/retroshare-gui/src/gui/NewsFeed.cpp index a3351d335..fc42faf7f 100644 --- a/retroshare-gui/src/gui/NewsFeed.cpp +++ b/retroshare-gui/src/gui/NewsFeed.cpp @@ -217,13 +217,17 @@ void NewsFeed::updateDisplay() if (flags & RS_FEED_TYPE_PEER) addFeedItemPeerDisconnect(fi); break; + case RS_FEED_ITEM_PEER_HELLO: + if (flags & RS_FEED_TYPE_PEER) + addFeedItemPeerHello(fi); + break; case RS_FEED_ITEM_PEER_NEW: if (flags & RS_FEED_TYPE_PEER) addFeedItemPeerNew(fi); break; - case RS_FEED_ITEM_PEER_HELLO: + case RS_FEED_ITEM_PEER_OFFSET: if (flags & RS_FEED_TYPE_PEER) - addFeedItemPeerHello(fi); + addFeedItemPeerOffset(fi); break; case RS_FEED_ITEM_SEC_CONNECT_ATTEMPT: @@ -412,8 +416,9 @@ void NewsFeed::testFeeds(uint notifyFlags) instance->addFeedItemPeerConnect(fi); instance->addFeedItemPeerDisconnect(fi); - instance->addFeedItemPeerNew(fi); instance->addFeedItemPeerHello(fi); + instance->addFeedItemPeerNew(fi); + instance->addFeedItemPeerOffset(fi); break; case RS_FEED_TYPE_SECURITY: @@ -906,6 +911,7 @@ struct AddFeedItemIfUniqueData AddFeedItemIfUniqueData(FeedItem *feedItem, int type, const RsPeerId &sslId, const std::string& ipAddr, const std::string& ipAddrReported) : mType(type), mSslId(sslId), mIpAddr(ipAddr), mIpAddrReported(ipAddrReported) { + mPeerItem = dynamic_cast(feedItem); mSecItem = dynamic_cast(feedItem); mSecurityIpItem = dynamic_cast(feedItem); } @@ -914,6 +920,7 @@ struct AddFeedItemIfUniqueData const RsPeerId &mSslId; const std::string& mIpAddr; const std::string& mIpAddrReported; + PeerItem *mPeerItem; SecurityItem *mSecItem; SecurityIpItem *mSecurityIpItem; }; @@ -925,6 +932,14 @@ static bool addFeedItemIfUniqueCallback(FeedItem *feedItem, void *data) return false; } + if (findData->mPeerItem) { + PeerItem *peerItem = dynamic_cast(feedItem); + if (peerItem && peerItem->isSame(findData->mSslId, findData->mType)) { + return true; + } + return false; + } + if (findData->mSecItem) { SecurityItem *secitem = dynamic_cast(feedItem); if (secitem && secitem->isSame(findData->mSslId, findData->mType)) { @@ -955,7 +970,7 @@ void NewsFeed::addFeedItemIfUnique(FeedItem *item, int itemType, const RsPeerId return; } - ui->feedWidget->removeFeedItem(item); + ui->feedWidget->removeFeedItem(feedItem); } addFeedItem(item); @@ -1017,6 +1032,20 @@ void NewsFeed::addFeedItemPeerNew(const RsFeedItem &fi) #endif } +void NewsFeed::addFeedItemPeerOffset(const RsFeedItem &fi) +{ + /* make new widget */ + PeerItem *pi = new PeerItem(this, NEWSFEED_PEERLIST, RsPeerId(fi.mId1), PEER_TYPE_OFFSET, false); + + /* add to layout */ + addFeedItemIfUnique(pi, PEER_TYPE_OFFSET, RsPeerId(fi.mId1), "", "", false); + +#ifdef NEWS_DEBUG + std::cerr << "NewsFeed::addFeedItemPeerOffset()"; + std::cerr << std::endl; +#endif +} + void NewsFeed::addFeedItemSecurityConnectAttempt(const RsFeedItem &fi) { /* make new widget */ diff --git a/retroshare-gui/src/gui/NewsFeed.h b/retroshare-gui/src/gui/NewsFeed.h index b49779b2b..28b8dabaa 100644 --- a/retroshare-gui/src/gui/NewsFeed.h +++ b/retroshare-gui/src/gui/NewsFeed.h @@ -87,8 +87,9 @@ private: void addFeedItemPeerConnect(const RsFeedItem &fi); void addFeedItemPeerDisconnect(const RsFeedItem &fi); - void addFeedItemPeerNew(const RsFeedItem &fi); void addFeedItemPeerHello(const RsFeedItem &fi); + void addFeedItemPeerNew(const RsFeedItem &fi); + void addFeedItemPeerOffset(const RsFeedItem &fi); void addFeedItemSecurityConnectAttempt(const RsFeedItem &fi); void addFeedItemSecurityAuthDenied(const RsFeedItem &fi); diff --git a/retroshare-gui/src/gui/feeds/PeerItem.cpp b/retroshare-gui/src/gui/feeds/PeerItem.cpp index 62e92e5c1..3eddd5718 100644 --- a/retroshare-gui/src/gui/feeds/PeerItem.cpp +++ b/retroshare-gui/src/gui/feeds/PeerItem.cpp @@ -34,6 +34,7 @@ #include #include +#include /***** * #define DEBUG_ITEM 1 @@ -68,6 +69,16 @@ PeerItem::PeerItem(FeedHolder *parent, uint32_t feedId, const RsPeerId &peerId, } +bool PeerItem::isSame(const RsPeerId &peerId, uint32_t type) +{ + if ((mPeerId == peerId) && (mType == type)) + { + return true; + } + return false; +} + + void PeerItem::updateItemStatic() { if (!rsPeers) @@ -95,6 +106,9 @@ void PeerItem::updateItemStatic() case PEER_TYPE_NEW_FOF: title = tr("Friend of Friend"); break; + case PEER_TYPE_OFFSET: + title = tr("Friend Time Offset"); + break; default: title = tr("Peer"); break; @@ -111,8 +125,14 @@ void PeerItem::updateItemStatic() /* expanded Info */ nameLabel->setText(QString::fromUtf8(details.name.c_str())); - idLabel->setText(QString::fromStdString(details.id.toStdString())); + idLabel->setText(QString::fromStdString(details.id.toStdString())); locLabel->setText(QString::fromUtf8(details.location.c_str())); + + if (rsRtt) + { + double offset = rsRtt->getMeanOffset(RsPeerId(mPeerId)); + offsetLabel->setText(QString::number(offset,'f',2).append(" s")); + } } else { @@ -187,6 +207,13 @@ void PeerItem::updateItem() { sendmsgButton->setEnabled(false); } + + if (rsRtt) + { + double offset = rsRtt->getMeanOffset(RsPeerId(mPeerId)); + offsetLabel->setText(QString::number(offset,'f',2).append(" s")); + } + } /* slow Tick */ diff --git a/retroshare-gui/src/gui/feeds/PeerItem.h b/retroshare-gui/src/gui/feeds/PeerItem.h index 6f8f9a85d..9bccaeb1c 100644 --- a/retroshare-gui/src/gui/feeds/PeerItem.h +++ b/retroshare-gui/src/gui/feeds/PeerItem.h @@ -30,6 +30,7 @@ const uint32_t PEER_TYPE_STD = 0x0001; const uint32_t PEER_TYPE_CONNECT = 0x0002; const uint32_t PEER_TYPE_HELLO = 0x0003; /* failed Connect Attempt */ const uint32_t PEER_TYPE_NEW_FOF = 0x0004; /* new Friend of Friend */ +const uint32_t PEER_TYPE_OFFSET = 0x0005; /* received time offset */ class FeedHolder; @@ -43,6 +44,8 @@ public: void updateItemStatic(); + bool isSame(const RsPeerId &peerId, uint32_t type); + protected: /* FeedItem */ virtual void doExpand(bool open); diff --git a/retroshare-gui/src/gui/feeds/PeerItem.ui b/retroshare-gui/src/gui/feeds/PeerItem.ui index 49eb48937..dc37abc28 100644 --- a/retroshare-gui/src/gui/feeds/PeerItem.ui +++ b/retroshare-gui/src/gui/feeds/PeerItem.ui @@ -7,11 +7,20 @@ 0 0 476 - 247 + 250 - - + + + 1 + + + 1 + + + 1 + + 1 @@ -95,13 +104,13 @@ QFrame::Sunken - + 0 - + 0 @@ -128,7 +137,7 @@ - + @@ -165,9 +174,9 @@ - + - + Qt::Horizontal @@ -204,9 +213,9 @@ - + - + Qt::Horizontal @@ -317,13 +326,13 @@ - + - + - + - + 75 @@ -336,7 +345,7 @@ - + 75 @@ -349,7 +358,7 @@ - + 0 @@ -368,7 +377,7 @@ - + 75 @@ -381,7 +390,7 @@ - + 75 @@ -394,7 +403,7 @@ - + 75 @@ -407,7 +416,7 @@ - + 0 @@ -426,10 +435,30 @@ + + + + + 0 + 0 + + + + + 75 + true + true + + + + Time offset: + + + - + @@ -509,6 +538,13 @@ + + + + TextLabel + + + @@ -531,17 +567,17 @@ + + StyledLabel + QLabel +
gui/common/StyledLabel.h
+
AvatarWidget QLabel
gui/common/AvatarWidget.h
1
- - StyledLabel - QLabel -
gui/common/StyledLabel.h
-
From 8a9edb2905d57601e52fb9353a68bad3be3552f7 Mon Sep 17 00:00:00 2001 From: Phenom Date: Thu, 27 Apr 2017 17:03:53 +0200 Subject: [PATCH 197/230] Create a Gxs Identity by default. --- retroshare-gui/src/gui/GenCertDialog.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/retroshare-gui/src/gui/GenCertDialog.cpp b/retroshare-gui/src/gui/GenCertDialog.cpp index c65c08b89..11bd8f7dd 100644 --- a/retroshare-gui/src/gui/GenCertDialog.cpp +++ b/retroshare-gui/src/gui/GenCertDialog.cpp @@ -22,6 +22,7 @@ #include "GenCertDialog.h" #include +#include #include #include #include @@ -269,9 +270,6 @@ void GenCertDialog::setupState() //ui.no_gpg_key_label->setText(tr("Welcome to Retroshare. Before you can proceed you need to create a profile and associate a node with it. To do so please fill out this form.\nAlternatively you can import a (previously exported) profile. Just uncheck \"Create a new profile\"")); //no_gpg_key_label->setVisible(false); - ui.nickname_label->setVisible(adv_state) ; - ui.nickname_input->setVisible(adv_state) ; - ui.name_label->setVisible(true); ui.name_input->setVisible(generate_new); @@ -421,7 +419,15 @@ void GenCertDialog::genPerson() RsPgpId PGPId; bool isHiddenLoc = false; - mGXSNickname = ui.nickname_input->text(); + if(ui.nickname_input->isVisible()) + { + mGXSNickname = ui.nickname_input->text(); + } + else + { + mGXSNickname = ui.node_input->text(); + } + if (!mGXSNickname.isEmpty()) { if (mGXSNickname.size() < RSID_MINIMUM_NICKNAME_SIZE) From 9adbab32816a5ce1c4a205fb835fb27e8f673073 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 21:10:22 +0200 Subject: [PATCH 198/230] switched heartbeatitems to new serialization --- libretroshare/src/libretroshare.pro | 3 +- .../src/serialiser/rsheartbeatitems.cc | 7 ++-- .../src/serialiser/rsheartbeatitems.h | 34 ++++++++----------- libretroshare/src/services/p3heartbeat.cc | 2 +- 4 files changed, 19 insertions(+), 27 deletions(-) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index a86b8b9e4..de265a388 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -483,7 +483,7 @@ HEADERS += rsitems/rsitem.h \ rsitems/rsbanlistitems.h \ rsitems/rsbwctrlitems.h \ rsitems/rsdiscovery2items.h \ - serialiser/rsheartbeatitems.h \ + rsitems/rsheartbeatitems.h \ rsitems/rsrttitems.h \ serialiser/rsgxsrecognitems.h \ serialiser/rsgxsupdateitems.h \ @@ -631,7 +631,6 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsbanlistitems.cc \ rsitems/rsbwctrlitems.cc \ rsitems/rsdiscovery2items.cc \ - serialiser/rsheartbeatitems.cc \ rsitems/rsrttitems.cc \ serialiser/rsgxsrecognitems.cc \ serialiser/rsgxsupdateitems.cc \ diff --git a/libretroshare/src/serialiser/rsheartbeatitems.cc b/libretroshare/src/serialiser/rsheartbeatitems.cc index 0151525a2..f3a1db0c0 100644 --- a/libretroshare/src/serialiser/rsheartbeatitems.cc +++ b/libretroshare/src/serialiser/rsheartbeatitems.cc @@ -24,6 +24,7 @@ * */ +#ifdef TO_REMOVE #include "serialiser/rsbaseserial.h" #include "rsitems/rsserviceids.h" #include "serialiser/rsheartbeatitems.h" @@ -91,10 +92,6 @@ RsItem *RsHeartbeatSerialiser::deserialise(void *data, uint32_t *pktsize) /*************************************************************************/ -void RsHeartbeatItem::clear() -{ -} - std::ostream &RsHeartbeatItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsHeartbeatItem", indent); @@ -204,3 +201,5 @@ RsHeartbeatItem *RsHeartbeatSerialiser::deserialiseHeartbeat(void *data, uint32_ /*************************************************************************/ + +#endif diff --git a/libretroshare/src/serialiser/rsheartbeatitems.h b/libretroshare/src/serialiser/rsheartbeatitems.h index 3a9e6e95f..87d480b3e 100644 --- a/libretroshare/src/serialiser/rsheartbeatitems.h +++ b/libretroshare/src/serialiser/rsheartbeatitems.h @@ -28,9 +28,8 @@ #ifndef RS_HEARTBEAT_ITEMS_H #define RS_HEARTBEAT_ITEMS_H -#include "serialiser/rsserial.h" -#include "rsitems/rsserviceids.h" #include "rsitems/rsitem.h" +#include "rsitems/rsserviceids.h" #include "rsitems/itempriorities.h" const uint8_t RS_PKT_SUBTYPE_HEARTBEAT_PULSE = 0x01; @@ -43,30 +42,25 @@ public: setPriorityLevel(QOS_PRIORITY_RS_HEARTBEAT_PULSE) ; } virtual ~RsHeartbeatItem() {} + virtual void serial_process(RsGenericSerializer::SerializeJob /* j */,RsGenericSerializer::SerializeContext& /* ctx */) {} - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void clear(){} }; -class RsHeartbeatSerialiser: public RsSerialType +class RsHeartbeatSerialiser: public RsServiceSerializer { - public: - RsHeartbeatSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_HEARTBEAT) - { return; } +public: + RsHeartbeatSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_HEARTBEAT) {} -virtual ~RsHeartbeatSerialiser() { return; } - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeHeartbeat(RsHeartbeatItem *); -virtual bool serialiseHeartbeat(RsHeartbeatItem *item, void *data, uint32_t *size); -virtual RsHeartbeatItem *deserialiseHeartbeat(void *data, uint32_t *size); + virtual ~RsHeartbeatSerialiser() {} + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const + { + if(service == RS_SERVICE_TYPE_HEARTBEAT && item_subtype == RS_PKT_SUBTYPE_HEARTBEAT_PULSE) + return new RsHeartbeatItem() ; + else + return NULL ; + } }; diff --git a/libretroshare/src/services/p3heartbeat.cc b/libretroshare/src/services/p3heartbeat.cc index 40a510165..498a88cfa 100644 --- a/libretroshare/src/services/p3heartbeat.cc +++ b/libretroshare/src/services/p3heartbeat.cc @@ -26,7 +26,7 @@ #include #include "services/p3heartbeat.h" -#include "serialiser/rsheartbeatitems.h" +#include "rsitems/rsheartbeatitems.h" #include "pqi/p3servicecontrol.h" #include "pqi/pqipersongrp.h" From 07a93be1b2de5500a95857401c12e30763d00a10 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 21:11:10 +0200 Subject: [PATCH 199/230] moved heartbeatitem.h to rsitems/ --- .../rsheartbeatitems.h | 0 .../src/serialiser/rsheartbeatitems.cc | 205 ------------------ 2 files changed, 205 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsheartbeatitems.h (100%) delete mode 100644 libretroshare/src/serialiser/rsheartbeatitems.cc diff --git a/libretroshare/src/serialiser/rsheartbeatitems.h b/libretroshare/src/rsitems/rsheartbeatitems.h similarity index 100% rename from libretroshare/src/serialiser/rsheartbeatitems.h rename to libretroshare/src/rsitems/rsheartbeatitems.h diff --git a/libretroshare/src/serialiser/rsheartbeatitems.cc b/libretroshare/src/serialiser/rsheartbeatitems.cc deleted file mode 100644 index f3a1db0c0..000000000 --- a/libretroshare/src/serialiser/rsheartbeatitems.cc +++ /dev/null @@ -1,205 +0,0 @@ - -/* - * libretroshare/src/serialiser: rsheartbeatitems.cc - * - * RetroShare Serialiser. - * - * Copyright 2013-2013 by Robert Fernie. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#ifdef TO_REMOVE -#include "serialiser/rsbaseserial.h" -#include "rsitems/rsserviceids.h" -#include "serialiser/rsheartbeatitems.h" - -/*** - * #define HEART_DEBUG 1 - ***/ - -#define HEART_DEBUG 1 - -#include - -/*************************************************************************/ - -uint32_t RsHeartbeatSerialiser::size(RsItem *i) -{ - RsHeartbeatItem *beat; - - if (NULL != (beat = dynamic_cast(i))) - { - return sizeHeartbeat(beat); - } - return 0; -} - -/* serialise the data to the buffer */ -bool RsHeartbeatSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsHeartbeatItem *beat; - - if (NULL != (beat = dynamic_cast(i))) - { - return serialiseHeartbeat(beat, data, pktsize); - } - return false; -} - -RsItem *RsHeartbeatSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_HEARTBEAT != getRsItemService(rstype))) - { - -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::deserialise() Wrong Type" << std::endl; -#endif - return NULL; - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_HEARTBEAT_PULSE: - return deserialiseHeartbeat(data, pktsize); - break; - default: - return NULL; - break; - } - return NULL; -} - -/*************************************************************************/ - - -std::ostream &RsHeartbeatItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsHeartbeatItem", indent); - printRsItemEnd(out, "RsHeartbeatItem", indent); - return out; -} - -uint32_t RsHeartbeatSerialiser::sizeHeartbeat(RsHeartbeatItem */*item*/) -{ - uint32_t s = 8; /* header */ - return s; -} - -/* serialise the data to the buffer */ -bool RsHeartbeatSerialiser::serialiseHeartbeat(RsHeartbeatItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeHeartbeat(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::serialiseHeartbeat() Not enough space" << std::endl; -#endif - return false; /* not enough space */ - } - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, *pktsize, item->PacketId(), *pktsize); - - /* skip the header */ - offset += 8; - - if (offset != tlvsize) - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::serialiseHeartbeat() size error" << std::endl; -#endif - ok = false; - } - - return ok; -} - -RsHeartbeatItem *RsHeartbeatSerialiser::deserialiseHeartbeat(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_HEARTBEAT != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_HEARTBEAT_PULSE != getRsItemSubType(rstype))) - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::deserialiseHeartbeat() Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::deserialiseHeartbeat() size error" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsHeartbeatItem *item = new RsHeartbeatItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - if (offset != rssize) - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::deserialiseHeartbeat() size error2" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef HEART_DEBUG - std::cerr << "RsHeartbeatSerialiser::deserialiseHeartbeat() ok = false" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*************************************************************************/ - -#endif From 87018edeb2907fc2ed6172bc707785984411697e Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 21:20:30 +0200 Subject: [PATCH 200/230] switched rsstatusitem to new serializer --- libretroshare/src/serialiser/rsstatusitems.cc | 3 ++ libretroshare/src/serialiser/rsstatusitems.h | 49 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libretroshare/src/serialiser/rsstatusitems.cc b/libretroshare/src/serialiser/rsstatusitems.cc index e39c4f56c..d41d8c7ba 100644 --- a/libretroshare/src/serialiser/rsstatusitems.cc +++ b/libretroshare/src/serialiser/rsstatusitems.cc @@ -23,6 +23,7 @@ * */ +#ifdef TO_REMOVE #include "serialiser/rsstatusitems.h" #include "serialiser/rsbaseserial.h" @@ -173,3 +174,5 @@ RsItem *RsStatusSerialiser::deserialise(void *data, uint32_t *pktsize) } /*************************************************************************/ + +#endif diff --git a/libretroshare/src/serialiser/rsstatusitems.h b/libretroshare/src/serialiser/rsstatusitems.h index 8ea99e04c..8c0316a9b 100644 --- a/libretroshare/src/serialiser/rsstatusitems.h +++ b/libretroshare/src/serialiser/rsstatusitems.h @@ -30,49 +30,46 @@ #include "rsitems/itempriorities.h" #include "rsitems/rsitem.h" +#include "serialization/rstypeserializer.h" + /**************************************************************************/ class RsStatusItem: public RsItem { - public: - RsStatusItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_STATUS, - RS_PKT_SUBTYPE_DEFAULT) +public: + RsStatusItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_STATUS, RS_PKT_SUBTYPE_DEFAULT) { setPriorityLevel(QOS_PRIORITY_RS_STATUS_ITEM); } -virtual ~RsStatusItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsStatusItem() {} + virtual void clear() {} + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) + { + RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime") ; + RsTypeSerializer::serial_process(j,ctx,status ,"status") ; + } uint32_t sendTime; - uint32_t status; /* not serialised */ uint32_t recvTime; }; -class RsStatusSerialiser: public RsSerialType +class RsStatusSerialiser: public RsServiceSerializer { - public: - RsStatusSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_STATUS) - { return; } -virtual ~RsStatusSerialiser() - { return; } - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeItem(RsStatusItem *); -virtual bool serialiseItem (RsStatusItem *item, void *data, uint32_t *size); -virtual RsStatusItem *deserialiseItem(void *data, uint32_t *size); - +public: + RsStatusSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_STATUS) {} + virtual ~RsStatusSerialiser() {} + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const + { + if(service == RS_SERVICE_TYPE_STATUS && item_subtype == RS_PKT_SUBTYPE_DEFAULT) + return new RsStatusItem(); + else + return NULL ; + } }; /**************************************************************************/ From 5995e508c567f4e28f35c5d29e8fa2e81d5371be Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 27 Apr 2017 21:24:27 +0200 Subject: [PATCH 201/230] moved rsstatusitem.h to rsitems/ --- libretroshare/src/libretroshare.pro | 3 +- .../{serialiser => rsitems}/rsstatusitems.h | 0 libretroshare/src/serialiser/rsstatusitems.cc | 178 ------------------ libretroshare/src/services/p3statusservice.cc | 2 +- libretroshare/src/services/p3statusservice.h | 2 +- 5 files changed, 3 insertions(+), 182 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsstatusitems.h (100%) delete mode 100644 libretroshare/src/serialiser/rsstatusitems.cc diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index de265a388..455ad9d33 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -463,7 +463,7 @@ HEADERS += rsitems/rsitem.h \ serialiser/rsserial.h \ rsitems/rsserviceids.h \ serialiser/rsserviceitems.h \ - serialiser/rsstatusitems.h \ + rsitems/rsstatusitems.h \ serialiser/rstlvaddrs.h \ serialiser/rstlvbase.h \ serialiser/rstlvitem.h \ @@ -615,7 +615,6 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rshistoryitems.cc \ rsitems/rsmsgitems.cc \ serialiser/rsserial.cc \ - serialiser/rsstatusitems.cc \ serialiser/rstlvaddrs.cc \ serialiser/rstlvbase.cc \ serialiser/rstlvitem.cc \ diff --git a/libretroshare/src/serialiser/rsstatusitems.h b/libretroshare/src/rsitems/rsstatusitems.h similarity index 100% rename from libretroshare/src/serialiser/rsstatusitems.h rename to libretroshare/src/rsitems/rsstatusitems.h diff --git a/libretroshare/src/serialiser/rsstatusitems.cc b/libretroshare/src/serialiser/rsstatusitems.cc deleted file mode 100644 index d41d8c7ba..000000000 --- a/libretroshare/src/serialiser/rsstatusitems.cc +++ /dev/null @@ -1,178 +0,0 @@ -/* - * libretroshare/src/serialiser: rsstatusitems.cc - * - * RetroShare Serialiser. - * - * Copyright 2007-2008 by Vinny Do. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#ifdef TO_REMOVE -#include "serialiser/rsstatusitems.h" -#include "serialiser/rsbaseserial.h" - -/*** -#define RSSERIAL_DEBUG 1 -***/ - -#include - -/*************************************************************************/ - -RsStatusItem::~RsStatusItem() -{ - return; -} - -void RsStatusItem::clear() -{ - sendTime = 0; - status = 0; -} - -std::ostream &RsStatusItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsStatusItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "sendTime: " << sendTime << std::endl; - - printIndent(out, int_Indent); - out << "status: " << status << std::endl; - - printRsItemEnd(out, "RsStatusItem", indent); - return out; -} - -uint32_t RsStatusSerialiser::sizeItem(RsStatusItem */*item*/) -{ - uint32_t s = 8; /* header */ - s += 4; /* sendTime */ - s += 4; /* status */ - - return s; -} - -/* serialise the data to the buffer */ -bool RsStatusSerialiser::serialiseItem(RsStatusItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeItem(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsStatusSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsStatusSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->sendTime); - ok &= setRawUInt32(data, tlvsize, &offset, item->status); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsStatusSerialiser::serialiseItem() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsStatusItem *RsStatusSerialiser::deserialiseItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_STATUS != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_DEFAULT != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsStatusItem *item = new RsStatusItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->sendTime)); - ok &= getRawUInt32(data, rssize, &offset, &(item->status)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -uint32_t RsStatusSerialiser::size(RsItem *item) -{ - return sizeItem((RsStatusItem *) item); -} - -bool RsStatusSerialiser::serialise(RsItem *item, void *data, uint32_t *pktsize) -{ - return serialiseItem((RsStatusItem *) item, data, pktsize); -} - -RsItem *RsStatusSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - return deserialiseItem(data, pktsize); -} - -/*************************************************************************/ - -#endif diff --git a/libretroshare/src/services/p3statusservice.cc b/libretroshare/src/services/p3statusservice.cc index c80740462..54184f4db 100644 --- a/libretroshare/src/services/p3statusservice.cc +++ b/libretroshare/src/services/p3statusservice.cc @@ -24,7 +24,7 @@ */ #include "services/p3statusservice.h" -#include "serialiser/rsstatusitems.h" +#include "rsitems/rsstatusitems.h" #include "rsserver/p3face.h" #include "retroshare/rsiface.h" diff --git a/libretroshare/src/services/p3statusservice.h b/libretroshare/src/services/p3statusservice.h index 16395976e..c4f730b0d 100644 --- a/libretroshare/src/services/p3statusservice.h +++ b/libretroshare/src/services/p3statusservice.h @@ -29,7 +29,7 @@ #include #include -#include "serialiser/rsstatusitems.h" +#include "rsitems/rsstatusitems.h" #include "retroshare/rsstatus.h" #include "services/p3service.h" #include "pqi/p3cfgmgr.h" From 2e6766569d4e7f4f07503f88174d8163a0a97c30 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 16:26:59 +0200 Subject: [PATCH 202/230] switched MsgUpdate items to new serialization --- .../src/serialiser/rsgxsupdateitems.cc | 660 ++---------------- .../src/serialiser/rsgxsupdateitems.h | 75 +- .../src/serialization/rstypeserializer.h | 20 +- 3 files changed, 71 insertions(+), 684 deletions(-) diff --git a/libretroshare/src/serialiser/rsgxsupdateitems.cc b/libretroshare/src/serialiser/rsgxsupdateitems.cc index 0074b23c9..f0a7912b3 100644 --- a/libretroshare/src/serialiser/rsgxsupdateitems.cc +++ b/libretroshare/src/serialiser/rsgxsupdateitems.cc @@ -23,9 +23,32 @@ * */ +#include "serialization/rstypeserializer.h" + #include "rsgxsupdateitems.h" #include "rsbaseserial.h" +/**********************************************************************************************/ +/* SERIALIZER */ +/**********************************************************************************************/ + +RsItem* RsGxsUpdateSerialiser::create_item(uint16_t service,uint8_t item_subtype) const +{ + if(service != SERVICE_TYPE) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXS_MSG_UPDATE: return new RsGxsMsgUpdateItem(SERVICE_TYPE); + case RS_PKT_SUBTYPE_GXS_GRP_UPDATE: return new RsGxsGrpUpdateItem(SERVICE_TYPE); + case RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE: return new RsGxsServerGrpUpdateItem(SERVICE_TYPE); + case RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE: return new RsGxsServerMsgUpdateItem(SERVICE_TYPE); + case RS_PKT_SUBTYPE_GXS_GRP_CONFIG: return new RsGxsGrpConfigItem(SERVICE_TYPE); + default: + return NULL ; + } +} + /**********************************************************************************************/ /* CLEAR */ /**********************************************************************************************/ @@ -53,642 +76,63 @@ void RsGxsServerGrpUpdateItem::clear() grpUpdateTS = 0; } - - /**********************************************************************************************/ -/* PRINT */ +/* SERIALISER */ /**********************************************************************************************/ -std::ostream& RsGxsMsgUpdateItem::print(std::ostream& out, uint16_t indent) +void RsGxsGrpUpdateItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - RsPeerId peerId; - std::map msgUpdateTS; - - printRsItemBase(out, "RsGxsMsgUpdateItem", indent); - uint16_t int_Indent = indent + 2; - out << "peerId: " << peerId << std::endl; - printIndent(out, int_Indent); - - std::map::const_iterator cit = msgUpdateInfos.begin(); - out << "msgUpdateTS map:" << std::endl; - int_Indent += 2; - for(; cit != msgUpdateInfos.end(); ++cit) - { - out << "grpId: " << cit->first << std::endl; - printIndent(out, int_Indent); - out << "Msg time stamp: " << cit->second.time_stamp << std::endl; - printIndent(out, int_Indent); - out << "posts available: " << cit->second.message_count << std::endl; - printIndent(out, int_Indent); - } - - return out; -} -std::ostream& RsGxsGrpUpdateItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsGrpUpdateItem", indent); - uint16_t int_Indent = indent + 2; - out << "peerId: " << peerID << std::endl; - printIndent(out, int_Indent); - out << "grpUpdateTS: " << grpUpdateTS << std::endl; - printIndent(out, int_Indent); - return out ; + RsTypeSerializer::serial_process (j,ctx,peerID,"peerID"); + RsTypeSerializer::serial_process(j,ctx,grpUpdateTS,"grpUpdateTS"); } -std::ostream& RsGxsServerMsgUpdateItem::print(std::ostream& out, uint16_t indent) +void RsGxsServerGrpUpdateItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - printRsItemBase(out, "RsGxsServerMsgUpdateItem", indent); - uint16_t int_Indent = indent + 2; - out << "grpId: " << grpId << std::endl; - printIndent(out, int_Indent); - out << "msgUpdateTS: " << msgUpdateTS << std::endl; - printIndent(out, int_Indent); - return out; + RsTypeSerializer::serial_process(j,ctx,grpUpdateTS,"grpUpdateTS"); } - -std::ostream& RsGxsServerGrpUpdateItem::print(std::ostream& out, uint16_t indent) +void RsGxsMsgUpdateItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - printRsItemBase(out, "RsGxsServerGrpUpdateItem", indent); - uint16_t int_Indent = indent + 2; - out << "grpUpdateTS: " << grpUpdateTS << std::endl; - printIndent(out, int_Indent); - - return out; + RsTypeSerializer::serial_process(j,ctx,peerID,"peerID"); + RsTypeSerializer::serial_process(j,ctx,msgUpdateInfos,"msgUpdateInfos"); } -/**********************************************************************************************/ -/* SERIALISER */ -/**********************************************************************************************/ - -bool RsGxsNetServiceItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const RsGxsMsgUpdateItem::MsgUpdateInfo& info) { - tlvsize = serial_size() ; - offset = 0; + bool ok = true ; - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; -} -RsItem* RsGxsUpdateSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype))) - return NULL; /* wrong type */ - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_GXS_MSG_UPDATE: return deserialGxsMsgUpdate(data, size); - case RS_PKT_SUBTYPE_GXS_GRP_UPDATE: return deserialGxsGrpUpddate(data, size); - case RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE: return deserialGxsServerGrpUpddate(data, size); - case RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE: return deserialGxsServerMsgUpdate(data, size); - case RS_PKT_SUBTYPE_GXS_GRP_CONFIG: return deserialGxsGrpConfig(data, size); - - default: - { -# ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialise() : data has no type" - << std::endl; -# endif - return NULL; - - } - } -} - -/**********************************************************************************************/ -/* SERIAL_SIZE() */ -/**********************************************************************************************/ - - -uint32_t RsGxsGrpUpdateItem::serial_size() const -{ - uint32_t s = 8; // header size - s += peerID.serial_size(); - s += 4; // mUpdateTS - return s; -} - -uint32_t RsGxsServerGrpUpdateItem::serial_size() const -{ - uint32_t s = 8; // header size - s += 4; // time stamp - return s; -} - -uint32_t RsGxsMsgUpdateItem::serial_size() const -{ - uint32_t s = 8; // header size - s += peerID.serial_size() ;//GetTlvStringSize(item->peerId); - - s += msgUpdateInfos.size() * (4 + 4 + RsGxsGroupId::serial_size()); - s += 4; // number of map items - - return s; -} - -uint32_t RsGxsServerMsgUpdateItem::serial_size() const -{ - uint32_t s = 8; // header size - s += grpId.serial_size(); - s += 4; // grp TS - - return s; -} -uint32_t RsGxsGrpConfigItem::serial_size() const -{ - uint32_t s = 8; // header size - s += grpId.serial_size(); - s += 4; // msg_keep_delay - s += 4; // msg_send_delay - s += 4; // msg_req_delay - - return s; -} - -/**********************************************************************************************/ -/* SERIALISE() */ -/**********************************************************************************************/ - -bool RsGxsGrpUpdateItem::serialise(void* data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= peerID.serialise(data, size, offset) ; - ok &= setRawUInt32(data, size, &offset, grpUpdateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::serialiseGxsGrpUpdate() FAIL Size Error! " << std::endl; -#endif - ok = false; - } + ok = ok && setRawUInt32(data,size,&offset,info.time_stamp); + ok = ok && setRawUInt32(data,size,&offset,info.message_count); return ok; } - -bool RsGxsServerGrpUpdateItem::serialise(void* data, uint32_t& size) const +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, RsGxsMsgUpdateItem::MsgUpdateInfo& info) { - uint32_t tlvsize,offset=0; - bool ok = true; + bool ok = true ; - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* RsGxsServerGrpUpdateItem */ - - ok &= setRawUInt32(data, size, &offset, grpUpdateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerGrpUpdate() FAIL Size Error! " << std::endl; -#endif - ok = false; - } + ok = ok && getRawUInt32(data,size,&offset,&info.time_stamp); + ok = ok && getRawUInt32(data,size,&offset,&info.message_count); return ok; } -bool RsGxsMsgUpdateItem::serialise(void* data, uint32_t& size) const +template<> uint32_t RsTypeSerializer::serial_size(const RsGxsMsgUpdateItem::MsgUpdateInfo& /* info */) { return 8; } + +template<> void RsTypeSerializer::print_data(const std::string& name,const RsGxsMsgUpdateItem::MsgUpdateInfo& info) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= peerID.serialise(data, size, offset) ; - - std::map::const_iterator cit(msgUpdateInfos.begin()); - - uint32_t numItems = msgUpdateInfos.size(); - ok &= setRawUInt32(data, size, &offset, numItems); - - for(; cit != msgUpdateInfos.end(); ++cit) - { - ok &= cit->first.serialise(data, size, offset); - ok &= setRawUInt32(data, size, &offset, cit->second.time_stamp); - ok &= setRawUInt32(data, size, &offset, cit->second.message_count); - } - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::serialiseGxsMsgUpdate() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - - return ok; + std::cerr << "[MsgUpdateInfo]: " << name << ": " << info.time_stamp << ", " << info.message_count << std::endl; } -bool RsGxsServerMsgUpdateItem::serialise( void* data, uint32_t& size) const +void RsGxsServerMsgUpdateItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= grpId.serialise(data, size, offset) ; - ok &= setRawUInt32(data, size, &offset, msgUpdateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - - return ok; + RsTypeSerializer::serial_process (j,ctx,grpId,"grpId"); + RsTypeSerializer::serial_process(j,ctx,msgUpdateTS,"msgUpdateTS"); } - -bool RsGxsGrpConfigItem::serialise( void* data, uint32_t& size) const +void RsGxsGrpConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= grpId.serialise(data, size, offset) ; - ok &= setRawUInt32(data, size, &offset, msg_keep_delay); - ok &= setRawUInt32(data, size, &offset, msg_send_delay); - ok &= setRawUInt32(data, size, &offset, msg_req_delay); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::serialiseGxsServerMsgUpdate() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - - return ok; + RsTypeSerializer::serial_process (j,ctx,grpId,"grpId") ; + RsTypeSerializer::serial_process(j,ctx,msg_keep_delay,"msg_keep_delay") ; + RsTypeSerializer::serial_process(j,ctx,msg_send_delay,"msg_send_delay") ; + RsTypeSerializer::serial_process(j,ctx,msg_req_delay,"msg_req_delay") ; } -/**********************************************************************************************/ -/* DESERIALISE() */ -/**********************************************************************************************/ - -RsGxsGrpConfigItem* RsGxsUpdateSerialiser::deserialGxsGrpConfig(void* data, uint32_t* size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_GXS_GRP_CONFIG != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsGrpConfigItem* item = new RsGxsGrpConfigItem(getRsItemService(rstype)); - - /* skip the header */ - offset += 8; - - ok &= item->grpId.deserialise(data, *size, offset) ; - ok &= getRawUInt32(data, *size, &offset, &(item->msg_keep_delay)); - ok &= getRawUInt32(data, *size, &offset, &(item->msg_send_delay)); - ok &= getRawUInt32(data, *size, &offset, &(item->msg_req_delay)); - - if (offset != rssize) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxxGrpUpdate() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsGxsGrpUpdateItem* RsGxsUpdateSerialiser::deserialGxsGrpUpddate(void* data, uint32_t* size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (SERVICE_TYPE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXS_GRP_UPDATE != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsGrpUpdateItem* item = new RsGxsGrpUpdateItem(getRsItemService(rstype)); - - /* skip the header */ - offset += 8; - - ok &= item->peerID.deserialise(data, *size, offset) ; - ok &= getRawUInt32(data, *size, &offset, &(item->grpUpdateTS)); - - if (offset != rssize) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxxGrpUpdate() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsGrpUpdate() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -RsGxsServerGrpUpdateItem* RsGxsUpdateSerialiser::deserialGxsServerGrpUpddate(void* data, uint32_t* size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_GXS_SERVER_GRP_UPDATE != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsServerGrpUpdateItem* item = new RsGxsServerGrpUpdateItem(getRsItemService(rstype)); - - /* skip the header */ - offset += 8; - - ok &= getRawUInt32(data, *size, &offset, &(item->grpUpdateTS)); - - if (offset != rssize) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerGrpUpdate() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -RsGxsMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsMsgUpdate(void* data, uint32_t* size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_GXS_MSG_UPDATE != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsMsgUpdateItem* item = new RsGxsMsgUpdateItem(getRsItemService(rstype)); - - /* skip the header */ - offset += 8; - - ok &= item->peerID.deserialise(data, *size, offset) ; - uint32_t numUpdateItems; - ok &= getRawUInt32(data, *size, &offset, &(numUpdateItems)); - std::map& msgUpdateInfos = item->msgUpdateInfos; - RsGxsGroupId pId; - - RsGxsMsgUpdateItem::MsgUpdateInfo info ; - - for(uint32_t i = 0; i < numUpdateItems; i++) - { - ok &= pId.deserialise(data, *size, offset); - - if(!ok) - break; - - ok &= getRawUInt32(data, *size, &offset, &(info.time_stamp)); - ok &= getRawUInt32(data, *size, &offset, &(info.message_count)); - - if(!ok) - break; - - msgUpdateInfos.insert(std::make_pair(pId, info)); - } - - if (offset != rssize) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsMsgUpdate() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -RsGxsServerMsgUpdateItem* RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate(void* data, uint32_t* size) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_GXS_SERVER_MSG_UPDATE != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsServerMsgUpdateItem* item = new RsGxsServerMsgUpdateItem(getRsItemService(rstype)); - - /* skip the header */ - offset += 8; - - ok &= item->grpId.deserialise(data, *size, offset) ; - ok &= getRawUInt32(data, *size, &offset, &(item->msgUpdateTS)); - - if (offset != rssize) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsUpdateSerialiser::deserialGxsServerMsgUpdate() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - diff --git a/libretroshare/src/serialiser/rsgxsupdateitems.h b/libretroshare/src/serialiser/rsgxsupdateitems.h index 7d6c89907..8ea020fe5 100644 --- a/libretroshare/src/serialiser/rsgxsupdateitems.h +++ b/libretroshare/src/serialiser/rsgxsupdateitems.h @@ -55,15 +55,7 @@ public: RsGxsNetServiceItem(uint16_t serv_type,uint8_t subtype) : RsItem(RS_PKT_VERSION_SERVICE, serv_type, subtype) {} virtual ~RsGxsNetServiceItem() {} - - virtual bool serialise(void *data,uint32_t& size) const = 0 ; - virtual uint32_t serial_size() const = 0 ; - virtual void clear() = 0 ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0; - -protected: - bool serialise_header(void *data, uint32_t& pktsize, uint32_t& tlvsize, uint32_t& offset) const; }; class RsGxsGrpConfig @@ -96,10 +88,7 @@ public: virtual ~RsGxsGrpConfigItem() {} virtual void clear() {} - virtual std::ostream &print(std::ostream &out, uint16_t /*indent*/) { return out;} - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsGroupId grpId ; }; @@ -121,10 +110,7 @@ public: virtual ~RsGxsGrpUpdateItem() {} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPeerId peerID; }; @@ -145,11 +131,8 @@ public: virtual ~RsGxsServerGrpUpdateItem() {} - virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void clear(); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); }; class RsGxsMsgUpdate @@ -175,10 +158,7 @@ public: virtual ~RsGxsMsgUpdateItem() {} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPeerId peerID; }; @@ -199,58 +179,21 @@ public: virtual ~RsGxsServerMsgUpdateItem() {} virtual void clear(); - virtual std::ostream &print(std::ostream &out, uint16_t indent); - - virtual bool serialise(void *data,uint32_t& size) const ; - virtual uint32_t serial_size() const ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsGxsGroupId grpId; }; -class RsGxsUpdateSerialiser : public RsSerialType +class RsGxsUpdateSerialiser : public RsServiceSerializer { public: - RsGxsUpdateSerialiser(uint16_t servtype) : RsSerialType(RS_PKT_VERSION_SERVICE, servtype), SERVICE_TYPE(servtype) {} + RsGxsUpdateSerialiser(uint16_t servtype) : RsServiceSerializer(servtype), SERVICE_TYPE(servtype) {} virtual ~RsGxsUpdateSerialiser() {} - virtual uint32_t size(RsItem *item) - { - RsGxsNetServiceItem *gitem = dynamic_cast(item); - - if (!gitem) - { - std::cerr << "(EE) trying to serialise/size an item that is not a RsGxsNetServiceItem!" << std::endl; - return 0; - } - - return gitem->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - RsGxsNetServiceItem *gitem = dynamic_cast(item); - - if (!gitem) - { - std::cerr << "(EE) trying to serialise an item that is not a RsGxsNetServiceItem!" << std::endl; - return false; - } - - return gitem->serialise(data,*size) ; - } - - virtual RsItem* deserialise(void *data, uint32_t *size); - -private: - RsGxsGrpConfigItem *deserialGxsGrpConfig(void *data, uint32_t *size); - RsGxsServerMsgUpdateItem *deserialGxsServerMsgUpdate(void *data, uint32_t *size); - RsGxsMsgUpdateItem *deserialGxsMsgUpdate(void *data, uint32_t *size); - RsGxsServerGrpUpdateItem *deserialGxsServerGrpUpddate(void *data, uint32_t *size); - RsGxsGrpUpdateItem *deserialGxsGrpUpddate(void *data, uint32_t *size); - - bool checkItemHeader(void *data, uint32_t *size, uint16_t service_type,uint8_t subservice_type); + virtual RsItem* create_item(uint16_t service,uint8_t item_subtype) const ; const uint16_t SERVICE_TYPE; }; diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 3da545df8..3ed0e9c16 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -88,8 +88,8 @@ class RsTypeSerializer ctx.mOffset += 4 ; for(typename std::map::iterator it(v.begin());it!=v.end();++it) { - ctx.mOffset += serial_size(it->first) ; - ctx.mOffset += serial_size(it->second) ; + serial_process(j,ctx,const_cast(it->first),"map::*it->first") ; + serial_process(j,ctx,const_cast(it->second),"map::*it->second") ; } } break ; @@ -97,15 +97,15 @@ class RsTypeSerializer case RsGenericSerializer::DESERIALIZE: { uint32_t n=0 ; - ctx.mOk = ctx.mOk && deserialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + serial_process(j,ctx,n,"temporary size"); for(uint32_t i=0;ifirst") ; + serial_process(j,ctx,u,"map::*it->second") ; v[t] = u ; } @@ -115,12 +115,12 @@ class RsTypeSerializer case RsGenericSerializer::SERIALIZE: { uint32_t n=v.size(); - ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,n) ; + serial_process(j,ctx,n,"temporary size"); for(typename std::map::iterator it(v.begin());it!=v.end();++it) { - ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,it->first) ; - ctx.mOk = ctx.mOk && serialize(ctx.mData,ctx.mSize,ctx.mOffset,it->second) ; + serial_process(j,ctx,const_cast(it->first),"map::*it->first") ; + serial_process(j,ctx,const_cast(it->second),"map::*it->second") ; } } break ; @@ -136,8 +136,8 @@ class RsTypeSerializer { std::cerr << " " ; - print_data("first",it->first) ; - print_data("second",it->second) ; + serial_process(j,ctx,const_cast(it->first),"map::*it->first") ; + serial_process(j,ctx,const_cast(it->second),"map::*it->second") ; } } break; From 45eaf27deb3bcf51e6d722f432fffa8fca30fe36 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 16:30:33 +0200 Subject: [PATCH 203/230] moved rsgxsupdateitems to rsitems/ --- libretroshare/src/gxs/rsgxsnetservice.h | 2 +- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsgxsupdateitems.cc | 2 +- libretroshare/src/{serialiser => rsitems}/rsgxsupdateitems.h | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsgxsupdateitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsgxsupdateitems.h (100%) diff --git a/libretroshare/src/gxs/rsgxsnetservice.h b/libretroshare/src/gxs/rsgxsnetservice.h index 883649e57..b74e53998 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.h +++ b/libretroshare/src/gxs/rsgxsnetservice.h @@ -34,7 +34,7 @@ #include "rsnxsobserver.h" #include "pqi/p3linkmgr.h" #include "rsitems/rsnxsitems.h" -#include "serialiser/rsgxsupdateitems.h" +#include "rsitems/rsgxsupdateitems.h" #include "rsgxsnetutils.h" #include "pqi/p3cfgmgr.h" #include "rsgixs.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 455ad9d33..ca5a07442 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -486,7 +486,7 @@ HEADERS += rsitems/rsitem.h \ rsitems/rsheartbeatitems.h \ rsitems/rsrttitems.h \ serialiser/rsgxsrecognitems.h \ - serialiser/rsgxsupdateitems.h \ + rsitems/rsgxsupdateitems.h \ serialiser/rsserviceinfoitems.h \ HEADERS += services/p3msgservice.h \ @@ -632,7 +632,7 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsdiscovery2items.cc \ rsitems/rsrttitems.cc \ serialiser/rsgxsrecognitems.cc \ - serialiser/rsgxsupdateitems.cc \ + rsitems/rsgxsupdateitems.cc \ serialiser/rsserviceinfoitems.cc \ SOURCES += services/p3msgservice.cc \ diff --git a/libretroshare/src/serialiser/rsgxsupdateitems.cc b/libretroshare/src/rsitems/rsgxsupdateitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsgxsupdateitems.cc rename to libretroshare/src/rsitems/rsgxsupdateitems.cc index f0a7912b3..259cd1b4a 100644 --- a/libretroshare/src/serialiser/rsgxsupdateitems.cc +++ b/libretroshare/src/rsitems/rsgxsupdateitems.cc @@ -24,9 +24,9 @@ */ #include "serialization/rstypeserializer.h" +#include "serialiser/rsbaseserial.h" #include "rsgxsupdateitems.h" -#include "rsbaseserial.h" /**********************************************************************************************/ /* SERIALIZER */ diff --git a/libretroshare/src/serialiser/rsgxsupdateitems.h b/libretroshare/src/rsitems/rsgxsupdateitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsupdateitems.h rename to libretroshare/src/rsitems/rsgxsupdateitems.h From d32a8caf0650bb5686e35fea80983eec838acf81 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 16:39:54 +0200 Subject: [PATCH 204/230] switched PluginItems to new serialization --- libretroshare/src/serialiser/rsphotoitems.h | 4 +- libretroshare/src/serialiser/rspluginitems.cc | 3 ++ libretroshare/src/serialiser/rspluginitems.h | 48 ++++++++----------- 3 files changed, 24 insertions(+), 31 deletions(-) diff --git a/libretroshare/src/serialiser/rsphotoitems.h b/libretroshare/src/serialiser/rsphotoitems.h index a935472e6..814ea52bc 100644 --- a/libretroshare/src/serialiser/rsphotoitems.h +++ b/libretroshare/src/serialiser/rsphotoitems.h @@ -34,8 +34,8 @@ #include "rsgxsitems.h" #include "retroshare/rsphoto.h" -const uint8_t RS_PKT_SUBTYPE_PHOTO_ITEM = 0x02; -const uint8_t RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM = 0x03; +const uint8_t RS_PKT_SUBTYPE_PHOTO_ITEM = 0x02; +const uint8_t RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM = 0x03; const uint8_t RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM = 0x04; class RsGxsPhotoAlbumItem : public RsGxsGrpItem diff --git a/libretroshare/src/serialiser/rspluginitems.cc b/libretroshare/src/serialiser/rspluginitems.cc index d671d1a1c..f09046d9f 100644 --- a/libretroshare/src/serialiser/rspluginitems.cc +++ b/libretroshare/src/serialiser/rspluginitems.cc @@ -1,5 +1,6 @@ #include "rspluginitems.h" +#ifdef TO_REMOVE #ifndef WINDOWS_SYS #include #endif @@ -130,3 +131,5 @@ std::ostream& RsPluginHashSetItem::print(std::ostream& o, uint16_t) } + +#endif diff --git a/libretroshare/src/serialiser/rspluginitems.h b/libretroshare/src/serialiser/rspluginitems.h index 02b64fc54..d21533c68 100644 --- a/libretroshare/src/serialiser/rspluginitems.h +++ b/libretroshare/src/serialiser/rspluginitems.h @@ -26,14 +26,10 @@ #pragma once -#include "serialiser/rsserial.h" +#include "rsitems/rsitem.h" #include "rsitems/rsconfigitems.h" -#include "serialiser/rsbaseserial.h" -#if 0 -#include "serialiser/rstlvbase.h" -#include "serialiser/rstlvtypes.h" -#endif +#include "serialization/rstypeserializer.h" const uint8_t RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET = 0x01 ; @@ -43,41 +39,35 @@ class RsPluginItem: public RsItem RsPluginItem(uint8_t plugin_item_subtype): RsItem(RS_PKT_VERSION1,RS_PKT_CLASS_CONFIG,RS_PKT_TYPE_PLUGIN_CONFIG,plugin_item_subtype) {} virtual ~RsPluginItem() {} - virtual bool serialise(void *data,uint32_t& size) = 0 ; // Isn't it better that items can serialise themselves ? - virtual uint32_t serial_size() = 0 ; // deserialise is handled using a constructor - virtual void clear() {} }; -class RsPluginSerialiser: public RsSerialType -{ - public: - RsPluginSerialiser() : RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PLUGIN_CONFIG) {} - - virtual uint32_t size (RsItem *item) - { - return dynamic_cast(item)->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - return dynamic_cast(item)->serialise(data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) ; -}; - class RsPluginHashSetItem: public RsPluginItem { public: RsPluginHashSetItem() : RsPluginItem(RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET) {} RsPluginHashSetItem(void *data,uint32_t size) ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) + { + RsTypeSerializer::serial_process(j,ctx,hashes,"hashes"); + } + RsTlvHashSet hashes ; +}; - virtual std::ostream& print(std::ostream& o, uint16_t) ; +class RsPluginSerialiser: public RsConfigSerializer +{ + public: + RsPluginSerialiser() : RsConfigSerializer(RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PLUGIN_CONFIG) {} - protected: - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; + virtual RsItem *create_item(uint8_t class_type, uint8_t item_type) const + { + if(class_type == RS_PKT_TYPE_PLUGIN_CONFIG && item_type == RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET) + return new RsPluginHashSetItem() ; + + return NULL ; + } }; From c33c34b17527081b15abcbd6d9622f4ccfa6643e Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 16:44:04 +0200 Subject: [PATCH 205/230] moved rspluginitems to rsitems/ --- libretroshare/src/libretroshare.pro | 5 +- libretroshare/src/plugins/pluginmanager.cc | 5 +- .../{serialiser => rsitems}/rspluginitems.h | 0 libretroshare/src/serialiser/rspluginitems.cc | 135 ------------------ 4 files changed, 4 insertions(+), 141 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rspluginitems.h (100%) delete mode 100644 libretroshare/src/serialiser/rspluginitems.cc diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index ca5a07442..2b7a1b96f 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -143,7 +143,7 @@ PUBLIC_HEADERS = retroshare/rsdisc.h \ HEADERS += plugins/pluginmanager.h \ plugins/dlfcn_win32.h \ - serialiser/rspluginitems.h \ + rsitems/rspluginitems.h \ util/rsinitedptr.h HEADERS += $$PUBLIC_HEADERS @@ -605,8 +605,7 @@ SOURCES += grouter/p3grouter.cc \ grouter/groutermatrix.cc SOURCES += plugins/pluginmanager.cc \ - plugins/dlfcn_win32.cc \ - serialiser/rspluginitems.cc + plugins/dlfcn_win32.cc SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsfiletransferitems.cc \ diff --git a/libretroshare/src/plugins/pluginmanager.cc b/libretroshare/src/plugins/pluginmanager.cc index 431b6c2f8..bbc1761fb 100644 --- a/libretroshare/src/plugins/pluginmanager.cc +++ b/libretroshare/src/plugins/pluginmanager.cc @@ -9,8 +9,7 @@ #include #endif -#include - +#include #include #include @@ -34,7 +33,7 @@ std::string RsPluginManager::_plugin_entry_symbol = "RETROSHARE_PLUGIN_provide" ; std::string RsPluginManager::_plugin_revision_symbol = "RETROSHARE_PLUGIN_revision" ; -std::string RsPluginManager::_plugin_API_symbol = "RETROSHARE_PLUGIN_api" ; +std::string RsPluginManager::_plugin_API_symbol = "RETROSHARE_PLUGIN_api" ; std::string RsPluginManager::_local_cache_dir ; std::string RsPluginManager::_remote_cache_dir ; diff --git a/libretroshare/src/serialiser/rspluginitems.h b/libretroshare/src/rsitems/rspluginitems.h similarity index 100% rename from libretroshare/src/serialiser/rspluginitems.h rename to libretroshare/src/rsitems/rspluginitems.h diff --git a/libretroshare/src/serialiser/rspluginitems.cc b/libretroshare/src/serialiser/rspluginitems.cc deleted file mode 100644 index f09046d9f..000000000 --- a/libretroshare/src/serialiser/rspluginitems.cc +++ /dev/null @@ -1,135 +0,0 @@ -#include "rspluginitems.h" - -#ifdef TO_REMOVE -#ifndef WINDOWS_SYS -#include -#endif - -bool RsPluginHashSetItem::serialise(void *data,uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size(); - uint32_t offset = 0; - -#ifdef P3TURTLE_DEBUG - std::cerr << "RsPluginSerialiser::serialising HashSet packet (size=" << tlvsize << ")" << std::endl; -#endif - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - - ok &= hashes.SetTlv(data,tlvsize,&offset) ; - - if (offset != tlvsize) - { - ok = false; -#ifdef P3TURTLE_DEBUG - std::cerr << "RsPluginHashSetItem::serialise() Size Error! (offset=" << offset << ", tlvsize=" << tlvsize << ")" << std::endl; -#endif - } - - return ok ; -} - -RsPluginHashSetItem::RsPluginHashSetItem(void *data,uint32_t size) - : RsPluginItem(RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - hashes.ids.clear() ; - - ok &= hashes.GetTlv(data,size,&offset) ; - - if (offset != rssize) - { -#ifdef TLV_DEBUG - std::cerr << "RsTlvPeerIdSet::GetTlv() Warning extra bytes at end of item"; - std::cerr << std::endl; -#endif - ok = false ; - } - -#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs). - UNREFERENCED_LOCAL_VARIABLE(rssize); -#else - if (!ok) - throw std::runtime_error("Unknown error while deserializing.") ; -#endif - -} - -RsItem *RsPluginSerialiser::deserialise(void *data, uint32_t *size) -{ - // look what we have... - - /* get the type */ - uint32_t rstype = getRsItemId(data); -#ifdef P3TURTLE_DEBUG - std::cerr << "p3turtle: deserialising packet: " << std::endl ; -#endif - if ( (RS_PKT_VERSION1 != getRsItemVersion(rstype)) - || (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) - || (RS_PKT_TYPE_PLUGIN_CONFIG != getRsItemType(rstype))) - { -#ifdef P3TURTLE_DEBUG - std::cerr << " Wrong type !!" << std::endl ; -#endif - return NULL; /* wrong type */ - } - -#ifndef WINDOWS_SYS - try - { -#endif - switch(getRsItemSubType(rstype)) - { - case RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET : return new RsPluginHashSetItem(data,*size) ; - - default: - std::cerr << "Unknown packet type in RsPluginSerialiser. Type = " << rstype << std::endl; - return NULL ; - } -#ifndef WINDOWS_SYS - } - catch(std::exception& e) - { - std::cerr << "Exception raised: " << e.what() << std::endl ; - return NULL ; - } -#endif -} - -uint32_t RsPluginHashSetItem::serial_size() -{ - uint32_t size = 8 ; - - size += hashes.TlvSize() ; - - return size ; -} - -std::ostream& RsPluginHashSetItem::print(std::ostream& o, uint16_t) -{ - o << "Item type: RsPluginHashSetItem" << std::endl; - o << " Hash list: " << std::endl; - - for(std::set::const_iterator it(hashes.ids.begin());it!=hashes.ids.end();++it) - o << " " << *it << std::endl; - - return o ; -} - - - -#endif From 2d19783296276c1e99f14c420f1c6af97050c403 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 17:44:45 +0200 Subject: [PATCH 206/230] switched serviceinfo items to new serialization --- .../src/serialiser/rsserviceinfoitems.cc | 51 +++++++++-------- .../src/serialiser/rsserviceinfoitems.h | 57 +++++-------------- .../src/serialiser/rstlvgenericmap.inl | 1 + 3 files changed, 43 insertions(+), 66 deletions(-) diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.cc b/libretroshare/src/serialiser/rsserviceinfoitems.cc index 8efc0eb87..a538273de 100644 --- a/libretroshare/src/serialiser/rsserviceinfoitems.cc +++ b/libretroshare/src/serialiser/rsserviceinfoitems.cc @@ -25,6 +25,7 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rsserviceinfoitems.h" +#include "serialization/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 @@ -35,8 +36,7 @@ /*************************************************************************/ /***** RsServiceInfo ****/ -template<> -std::ostream &RsTlvParamRef::print(std::ostream &out, uint16_t /*indent*/) const +template<> std::ostream& RsTlvParamRef::print(std::ostream &out, uint16_t /*indent*/) const { out << "RsServiceInfo: " << mParam.mServiceType << " name " << mParam.mServiceName; out << std::endl; @@ -138,38 +138,19 @@ template class RsTlvParamRef; /*************************************************************************/ -RsServiceInfoListItem::~RsServiceInfoListItem() -{ - return; -} - void RsServiceInfoListItem::clear() { mServiceInfo.clear(); } -std::ostream &RsServiceInfoListItem::print(std::ostream &out, uint16_t indent) +void RsServiceInfoListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - printRsItemBase(out, "RsServiceInfoListItem", indent); - uint16_t int_Indent = indent + 2; RsTlvServiceInfoMapRef map(mServiceInfo); - map.print(out, int_Indent); - out << std::endl; - printRsItemEnd(out, "RsServiceInfoListItem", indent); - return out; -} - - -uint32_t RsServiceInfoSerialiser::sizeInfo(RsServiceInfoListItem *item) -{ - uint32_t s = 8; /* header */ - RsTlvServiceInfoMapRef map(item->mServiceInfo); - s += map.TlvSize(); - - return s; + RsTypeSerializer::serial_process(j,ctx,map,"map") ; } +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsServiceInfoSerialiser::serialiseInfo(RsServiceInfoListItem *item, void *data, uint32_t *pktsize) { @@ -291,7 +272,14 @@ uint32_t RsServiceInfoSerialiser::sizePermissions(RsServiceInfoPermissionsIte return s; } +#endif +void RsServiceInfoPermissionsItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,allowedBw,"allowedBw") ; +} + +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsServiceInfoSerialiser::serialisePermissions(RsServiceInfoPermissionsItem *item, void *data, uint32_t *pktsize) { @@ -440,6 +428,21 @@ RsItem *RsServiceInfoSerialiser::deserialise(void *data, uint32_t *pktsize) } /*************************************************************************/ +#endif + +RsItem *RsServiceInfoSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_TYPE_SERVICEINFO) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_SERVICELIST_ITEM: return new RsServiceInfoListItem() ; + case RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM: return new RsServiceInfoPermissionsItem() ; + default: + return NULL ; + } +} diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.h b/libretroshare/src/serialiser/rsserviceinfoitems.h index b4c9beabe..04a524331 100644 --- a/libretroshare/src/serialiser/rsserviceinfoitems.h +++ b/libretroshare/src/serialiser/rsserviceinfoitems.h @@ -34,8 +34,6 @@ #include "rsitems/rsitem.h" #include "rsitems/itempriorities.h" -#include "serialiser/rsserial.h" -#include "serialiser/rstlvbase.h" #include "serialiser/rstlvgenericmap.h" #include "retroshare/rsservicecontrol.h" @@ -63,72 +61,47 @@ public: } }; - - class RsServiceInfoListItem: public RsItem { public: - RsServiceInfoListItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICEINFO, - RS_PKT_SUBTYPE_SERVICELIST_ITEM) + RsServiceInfoListItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICEINFO, RS_PKT_SUBTYPE_SERVICELIST_ITEM) { setPriorityLevel(QOS_PRIORITY_RS_SERVICE_INFO_ITEM); return; } -virtual ~RsServiceInfoListItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsServiceInfoListItem(){} + virtual void clear(); - std::map mServiceInfo; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + + std::map mServiceInfo; }; - class RsServiceInfoPermissionsItem: public RsItem { public: - RsServiceInfoPermissionsItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICEINFO, - RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM) + RsServiceInfoPermissionsItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICEINFO, RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM) { setPriorityLevel(QOS_PRIORITY_RS_SERVICE_INFO_ITEM); return; } -virtual ~RsServiceInfoPermissionsItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsServiceInfoPermissionsItem(){} + virtual void clear(){} + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t allowedBw; // Units are bytes/sec => 4Gb/s; - }; - -class RsServiceInfoSerialiser: public RsSerialType +class RsServiceInfoSerialiser: public RsServiceSerializer { public: - RsServiceInfoSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICEINFO) - { return; } -virtual ~RsServiceInfoSerialiser() - { return; } + RsServiceInfoSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_SERVICEINFO) {} + virtual ~RsServiceInfoSerialiser() {} -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeInfo(RsServiceInfoListItem *); -virtual bool serialiseInfo(RsServiceInfoListItem *item, void *data, uint32_t *size); -virtual RsServiceInfoListItem *deserialiseInfo(void *data, uint32_t *size); - - -virtual uint32_t sizePermissions(RsServiceInfoPermissionsItem *); -virtual bool serialisePermissions(RsServiceInfoPermissionsItem *item, void *data, uint32_t *size); -virtual RsServiceInfoPermissionsItem *deserialisePermissions(void *data, uint32_t *size); - - + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rstlvgenericmap.inl b/libretroshare/src/serialiser/rstlvgenericmap.inl index 87e0d8b04..540ee5d2e 100644 --- a/libretroshare/src/serialiser/rstlvgenericmap.inl +++ b/libretroshare/src/serialiser/rstlvgenericmap.inl @@ -24,6 +24,7 @@ * */ +#include "serialiser/rstlvbase.h" // Must be different - as this is inline in headers. //#define TLV_GENERICMAP_DEBUG 1 From 22e2416f3ea50460a9f944a14ac1e2b5b29f8be3 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 17:47:41 +0200 Subject: [PATCH 207/230] moved rsserviceinfo items to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- .../src/{serialiser => rsitems}/rsserviceinfoitems.cc | 2 +- .../src/{serialiser => rsitems}/rsserviceinfoitems.h | 0 libretroshare/src/services/p3serviceinfo.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsserviceinfoitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsserviceinfoitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 2b7a1b96f..a72b2d246 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -487,7 +487,7 @@ HEADERS += rsitems/rsitem.h \ rsitems/rsrttitems.h \ serialiser/rsgxsrecognitems.h \ rsitems/rsgxsupdateitems.h \ - serialiser/rsserviceinfoitems.h \ + rsitems/rsserviceinfoitems.h \ HEADERS += services/p3msgservice.h \ services/p3service.h \ @@ -632,7 +632,7 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsrttitems.cc \ serialiser/rsgxsrecognitems.cc \ rsitems/rsgxsupdateitems.cc \ - serialiser/rsserviceinfoitems.cc \ + rsitems/rsserviceinfoitems.cc \ SOURCES += services/p3msgservice.cc \ services/p3service.cc \ diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.cc b/libretroshare/src/rsitems/rsserviceinfoitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsserviceinfoitems.cc rename to libretroshare/src/rsitems/rsserviceinfoitems.cc index a538273de..e09160db8 100644 --- a/libretroshare/src/serialiser/rsserviceinfoitems.cc +++ b/libretroshare/src/rsitems/rsserviceinfoitems.cc @@ -24,8 +24,8 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialiser/rsserviceinfoitems.h" #include "serialization/rstypeserializer.h" +#include "rsitems/rsserviceinfoitems.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/serialiser/rsserviceinfoitems.h b/libretroshare/src/rsitems/rsserviceinfoitems.h similarity index 100% rename from libretroshare/src/serialiser/rsserviceinfoitems.h rename to libretroshare/src/rsitems/rsserviceinfoitems.h diff --git a/libretroshare/src/services/p3serviceinfo.h b/libretroshare/src/services/p3serviceinfo.h index 4d776e44e..210731af1 100644 --- a/libretroshare/src/services/p3serviceinfo.h +++ b/libretroshare/src/services/p3serviceinfo.h @@ -36,7 +36,7 @@ #include "services/p3service.h" -#include "serialiser/rsserviceinfoitems.h" +#include "rsitems/rsserviceinfoitems.h" //!The ServiceInfo service. /** From d3c960e4e7a97d2b21188bee462573249988bd8f Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 17:48:54 +0200 Subject: [PATCH 208/230] removed old code --- .../src/rsitems/rsserviceinfoitems.cc | 345 ++---------------- 1 file changed, 35 insertions(+), 310 deletions(-) diff --git a/libretroshare/src/rsitems/rsserviceinfoitems.cc b/libretroshare/src/rsitems/rsserviceinfoitems.cc index e09160db8..35ba6d02d 100644 --- a/libretroshare/src/rsitems/rsserviceinfoitems.cc +++ b/libretroshare/src/rsitems/rsserviceinfoitems.cc @@ -35,6 +35,41 @@ /*************************************************************************/ /***** RsServiceInfo ****/ +/*************************************************************************/ + +void RsServiceInfoListItem::clear() +{ + mServiceInfo.clear(); +} + +void RsServiceInfoListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTlvServiceInfoMapRef map(mServiceInfo); + + RsTypeSerializer::serial_process(j,ctx,map,"map") ; +} + +void RsServiceInfoPermissionsItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,allowedBw,"allowedBw") ; +} + +RsItem *RsServiceInfoSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_TYPE_SERVICEINFO) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_SERVICELIST_ITEM: return new RsServiceInfoListItem() ; + case RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM: return new RsServiceInfoPermissionsItem() ; + default: + return NULL ; + } +} + + + template<> std::ostream& RsTlvParamRef::print(std::ostream &out, uint16_t /*indent*/) const { @@ -136,313 +171,3 @@ bool RsTlvParamRef::GetTlv(void *data, uint32_t size, uint32_t *o template class RsTlvParamRef; -/*************************************************************************/ - -void RsServiceInfoListItem::clear() -{ - mServiceInfo.clear(); -} - -void RsServiceInfoListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTlvServiceInfoMapRef map(mServiceInfo); - - RsTypeSerializer::serial_process(j,ctx,map,"map") ; -} - -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsServiceInfoSerialiser::serialiseInfo(RsServiceInfoListItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeInfo(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsServiceInfoSerialiser::serialiseInfo() Header: " << ok << std::endl; - std::cerr << "RsServiceInfoSerialiser::serialiseInfo() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - RsTlvServiceInfoMapRef map(item->mServiceInfo); - ok &= map.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsServiceInfoSerialiser::serialiseInfo() Size Error! " << std::endl; -#endif - } - return ok; -} - -RsServiceInfoListItem *RsServiceInfoSerialiser::deserialiseInfo(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_SERVICEINFO != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_SERVICELIST_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsServiceInfoListItem *item = new RsServiceInfoListItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - RsTlvServiceInfoMapRef map(item->mServiceInfo); - ok &= map.GetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ -/*************************************************************************/ - -RsServiceInfoPermissionsItem::~RsServiceInfoPermissionsItem() -{ - return; -} - -void RsServiceInfoPermissionsItem::clear() -{ - allowedBw = 0; -} - -std::ostream &RsServiceInfoPermissionsItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsServiceInfoPermissionsItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "AllowedBw: " << allowedBw; - out << std::endl; - - printRsItemEnd(out, "RsServiceInfoPermissionsItem", indent); - return out; -} - - -uint32_t RsServiceInfoSerialiser::sizePermissions(RsServiceInfoPermissionsItem * /*item*/) -{ - uint32_t s = 8; /* header */ - s += GetTlvUInt32Size(); - - return s; -} -#endif - -void RsServiceInfoPermissionsItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) -{ - RsTypeSerializer::serial_process(j,ctx,allowedBw,"allowedBw") ; -} - -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsServiceInfoSerialiser::serialisePermissions(RsServiceInfoPermissionsItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizePermissions(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsServiceInfoSerialiser::serialisePermissions() Header: " << ok << std::endl; - std::cerr << "RsServiceInfoSerialiser::serialisePermissions() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= SetTlvUInt32(data, tlvsize, &offset, TLV_TYPE_UINT32_BW, item->allowedBw); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsServiceInfoSerialiser::serialisePermissions() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsServiceInfoPermissionsItem *RsServiceInfoSerialiser::deserialisePermissions(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_SERVICEINFO != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsServiceInfoPermissionsItem *item = new RsServiceInfoPermissionsItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= GetTlvUInt32(data, tlvsize, &offset, TLV_TYPE_UINT32_BW, &(item->allowedBw)); - - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -uint32_t RsServiceInfoSerialiser::size(RsItem *i) -{ - RsServiceInfoListItem *sli; - RsServiceInfoPermissionsItem *spi; - - if (NULL != (sli = dynamic_cast(i))) - { - return sizeInfo(sli); - } - if (NULL != (spi = dynamic_cast(i))) - { - return sizePermissions(spi); - } - return 0; -} - -bool RsServiceInfoSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsServiceInfoListItem *sli; - RsServiceInfoPermissionsItem *spi; - - if (NULL != (sli = dynamic_cast(i))) - { - return serialiseInfo(sli, data, pktsize); - } - if (NULL != (spi = dynamic_cast(i))) - { - return serialisePermissions(spi, data, pktsize); - } - return false; -} - -RsItem *RsServiceInfoSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_SERVICEINFO != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_SERVICELIST_ITEM: - return deserialiseInfo(data, pktsize); - break; - case RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM: - return deserialisePermissions(data, pktsize); - break; - default: - return NULL; - break; - } -} - -/*************************************************************************/ -#endif - -RsItem *RsServiceInfoSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const -{ - if(service != RS_SERVICE_TYPE_SERVICEINFO) - return NULL ; - - switch(item_sub_id) - { - case RS_PKT_SUBTYPE_SERVICELIST_ITEM: return new RsServiceInfoListItem() ; - case RS_PKT_SUBTYPE_SERVICEPERMISSIONS_ITEM: return new RsServiceInfoPermissionsItem() ; - default: - return NULL ; - } -} - - - From 634efb6142d7ccb14a13178a9e03d61cc89a56bb Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 18:42:11 +0200 Subject: [PATCH 209/230] switched rsphotoitems to new serialization --- .../src/retroshare/rsgxsifacetypes.h | 1 + libretroshare/src/serialiser/rsphotoitems.cc | 87 ++++++++++++++++--- libretroshare/src/serialiser/rsphotoitems.h | 56 +++++------- libretroshare/src/serialiser/rstlvbinary.cc | 84 ++++++++++++++++++ libretroshare/src/serialiser/rstlvbinary.h | 19 ++++ 5 files changed, 200 insertions(+), 47 deletions(-) diff --git a/libretroshare/src/retroshare/rsgxsifacetypes.h b/libretroshare/src/retroshare/rsgxsifacetypes.h index 6fd907898..0b1682327 100644 --- a/libretroshare/src/retroshare/rsgxsifacetypes.h +++ b/libretroshare/src/retroshare/rsgxsifacetypes.h @@ -14,6 +14,7 @@ #include #include +#include typedef GXSGroupId RsGxsGroupId; typedef Sha1CheckSum RsGxsMessageId; diff --git a/libretroshare/src/serialiser/rsphotoitems.cc b/libretroshare/src/serialiser/rsphotoitems.cc index 3ff10cf8e..6971793d1 100644 --- a/libretroshare/src/serialiser/rsphotoitems.cc +++ b/libretroshare/src/serialiser/rsphotoitems.cc @@ -33,6 +33,22 @@ #define GXS_PHOTO_SERIAL_DEBUG +virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_GXS_TYPE_PHOTO) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM: return new RsGxsPhotoCommentItem() ; + case RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM: return new RsGxsPhotoAlbumItem() ; + case RS_PKT_SUBTYPE_PHOTO_ITEM: return new RsGxsPhotoPhotoItem() ; + default: + return NULL ; + } +} + +#ifdef TO_REMOVE uint32_t RsGxsPhotoSerialiser::size(RsItem* item) { RsGxsPhotoPhotoItem* ppItem = NULL; @@ -161,7 +177,27 @@ uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoCommentItem(RsGxsPhotoCommentItem return s; } +#endif +void RsGxsPhotoAlbumItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_CAPTION, album.mCaption, "mCaption"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_CATEGORY, album.mCategory, "mCategory"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR, album.mDescription, "mDescription"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG, album.mHashTags, "mHashTags"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG, album.mOther, "mOther"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_PATH, album.mPhotoPath, "mPhotoPath"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME, album.mPhotographer, "mPhotographer"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DATE, album.mWhen, "mWhen"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_LOCATION, album.mWhere, "mWhere"); + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_PIC_TYPE, album.mThumbnail.type,"mThumbnail.type"); + + RsTlvBinaryDataRef b(RS_SERVICE_GXS_TYPE_PHOTO, album.mThumbnail.data,album.mThumbnail.size); + + RsTypeSerializer::serial_process(j,ctx,b,"thumbnail binary data") ; +} + +#ifdef TO_REMOVE bool RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item, void* data, uint32_t* size) { @@ -326,7 +362,25 @@ uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoPhotoItem(RsGxsPhotoPhotoItem* item) return s; } +#endif +void RsGxsPhotoPhotoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_CAPTION, photo.mCaption); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_CATEGORY, photo.mCategory); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_DESCR, photo.mDescription); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_HASH_TAG, photo.mHashTags); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_MSG, photo.mOther); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_PIC_AUTH, photo.mPhotographer); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_DATE, photo.mWhen); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_LOCATION, photo.mWhere); + RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_PIC_TYPE, photo.mThumbnail.type); + + RsTlvBinaryDataRef b(RS_SERVICE_GXS_TYPE_PHOTO,photo.mThumbnail.data, photo.mThumbnail.size); + RsTypeSerializer::serial_process(j,ctx, b, "mThumbnail") ; +} + +#ifdef TO_REMOVE bool RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem(RsGxsPhotoPhotoItem* item, void* data, uint32_t* size) { @@ -468,8 +522,15 @@ RsGxsPhotoPhotoItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem(void* da return item; } +#endif +void RsGxsPhotoCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_COMMENT,comment.mComment,"mComment"); + RsTypeSerializer::serial_process(j,ctx,comment.mCommentFlag,"mCommentFlag"); +} +#ifdef TO_REMOVE bool RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem (RsGxsPhotoCommentItem *item, void *data, uint32_t *size) { @@ -586,6 +647,7 @@ RsGxsPhotoCommentItem * RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem( return item; } +#endif void RsGxsPhotoAlbumItem::clear() { @@ -607,6 +669,7 @@ void RsGxsPhotoCommentItem::clear() comment.mCommentFlag = 0; } +#ifdef TO_REMOVE std::ostream& RsGxsPhotoCommentItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsPhotoCommentItem", indent); @@ -628,6 +691,19 @@ std::ostream& RsGxsPhotoAlbumItem::print(std::ostream& out, uint16_t indent) return out; } +std::ostream& RsGxsPhotoPhotoItem::print(std::ostream& out, uint16_t indent) +{ + printRsItemBase(out, "RsGxsPhotoPhotoItem", indent); + uint16_t int_Indent = indent + 2; + + + printRsItemEnd(out ,"RsGxsPhotoPhotoItem", indent); + return out; +} + + +#endif + void RsGxsPhotoPhotoItem::clear() { photo.mCaption.clear(); @@ -640,14 +716,3 @@ void RsGxsPhotoPhotoItem::clear() photo.mWhere.clear(); photo.mThumbnail.deleteImage(); } - -std::ostream& RsGxsPhotoPhotoItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPhotoPhotoItem", indent); - uint16_t int_Indent = indent + 2; - - - printRsItemEnd(out ,"RsGxsPhotoPhotoItem", indent); - return out; -} - diff --git a/libretroshare/src/serialiser/rsphotoitems.h b/libretroshare/src/serialiser/rsphotoitems.h index 814ea52bc..cbaf29700 100644 --- a/libretroshare/src/serialiser/rsphotoitems.h +++ b/libretroshare/src/serialiser/rsphotoitems.h @@ -29,9 +29,11 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" +#include "rsitems/rsgxsitems.h" + +#include "serialiser/rsserial.h" +#include "serialization/rsserializer.h" -#include "rsgxsitems.h" #include "retroshare/rsphoto.h" const uint8_t RS_PKT_SUBTYPE_PHOTO_ITEM = 0x02; @@ -50,6 +52,7 @@ public: void clear(); std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsPhotoAlbum album; }; @@ -58,11 +61,12 @@ class RsGxsPhotoPhotoItem : public RsGxsMsgItem { public: - RsGxsPhotoPhotoItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO, - RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM) {return; } - virtual ~RsGxsPhotoPhotoItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsPhotoPhotoItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO, RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM) {} + virtual ~RsGxsPhotoPhotoItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsPhotoPhoto photo; }; @@ -70,43 +74,23 @@ class RsGxsPhotoCommentItem : public RsGxsMsgItem { public: - RsGxsPhotoCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO, - RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM) { return; } - virtual ~RsGxsPhotoCommentItem() { return; } + RsGxsPhotoCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO, RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM) {} + virtual ~RsGxsPhotoCommentItem() {} void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsPhotoComment comment; - - }; -class RsGxsPhotoSerialiser : public RsSerialType +class RsGxsPhotoSerialiser : public RsServiceSerializer { public: - RsGxsPhotoSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_PHOTO) - { return; } - virtual ~RsGxsPhotoSerialiser() { return; } - - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsPhotoAlbumItem(RsGxsPhotoAlbumItem *item); - bool serialiseGxsPhotoAlbumItem (RsGxsPhotoAlbumItem *item, void *data, uint32_t *size); - RsGxsPhotoAlbumItem * deserialiseGxsPhotoAlbumItem(void *data, uint32_t *size); - - uint32_t sizeGxsPhotoPhotoItem(RsGxsPhotoPhotoItem *item); - bool serialiseGxsPhotoPhotoItem (RsGxsPhotoPhotoItem *item, void *data, uint32_t *size); - RsGxsPhotoPhotoItem * deserialiseGxsPhotoPhotoItem(void *data, uint32_t *size); - - uint32_t sizeGxsPhotoCommentItem(RsGxsPhotoCommentItem *item); - bool serialiseGxsPhotoCommentItem (RsGxsPhotoCommentItem *item, void *data, uint32_t *size); - RsGxsPhotoCommentItem * deserialiseGxsPhotoCommentItem(void *data, uint32_t *size); + RsGxsPhotoSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_PHOTO) {} + virtual ~RsGxsPhotoSerialiser() {} + virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) const; }; #endif /* RSPHOTOV2ITEMS_H_ */ diff --git a/libretroshare/src/serialiser/rstlvbinary.cc b/libretroshare/src/serialiser/rstlvbinary.cc index 5b601a234..258da0d9a 100644 --- a/libretroshare/src/serialiser/rstlvbinary.cc +++ b/libretroshare/src/serialiser/rstlvbinary.cc @@ -218,5 +218,89 @@ std::ostream &RsTlvBinaryData::print(std::ostream &out, uint16_t indent) const } +bool RsTlvBinaryDataRef::SetTlv(void *data, uint32_t size, uint32_t *offset) const +{ + /* must check sizes */ + uint32_t tlvsize = TlvSize(); + uint32_t tlvend = *offset + tlvsize; + if (size < tlvend) + return false; /* not enough space */ + bool ok = true; + + /* start at data[offset] */ + ok &= SetTlvBase(data, tlvend, offset, tlvtype, tlvsize); + + /* add mandatory data */ + + // Warning: this is actually not an error if bin_len=0, as it does not + // corrupt the packet structure. We thus still return true in this case. + // + if (mDataRef != NULL && mSizeRef > 0) + { + memcpy(&(((uint8_t *) data)[*offset]), mDataRef, mSizeRef); + *offset += mSizeRef; + } + return ok; +} +bool RsTlvBinaryDataRef::GetTlv(void *data, uint32_t size, uint32_t *offset) +{ + if (size < *offset + TLV_HEADER_SIZE) + { + return false; /* not enough space to get the header */ + } + + uint16_t tlvtype_in = GetTlvType( &(((uint8_t *) data)[*offset]) ); + uint32_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) ); + uint32_t tlvend = *offset + tlvsize; + + if (size < tlvend) /* check size */ + return false; /* not enough space */ + + if (tlvsize < TLV_HEADER_SIZE) + return false; /* bad tlv size */ + + if (tlvtype != tlvtype_in) /* check type */ + return false; + + /* skip the header */ + (*offset) += TLV_HEADER_SIZE; + + mDataRef = (uint8_t*)rs_malloc(tlvsize - TLV_HEADER_SIZE) ; + + if(mDataRef == NULL) + return false ; + + mSizeRef = tlvsize - TLV_HEADER_SIZE; + + memcpy(mDataRef,&(((uint8_t *) data)[*offset]), tlvsize - TLV_HEADER_SIZE); + *offset += mSizeRef; + + /*************************************************************************** + * NB: extra components could be added (for future expansion of the type). + * or be present (if this code is reading an extended version). + * + * We must chew up the extra characters to conform with TLV specifications + ***************************************************************************/ + if (*offset != tlvend) + { +#ifdef TLV_DEBUG + std::cerr << "RsTlvBinaryData::GetTlv() Warning extra bytes at end of item"; + std::cerr << std::endl; +#endif + *offset = tlvend; + } + + return true; +} + +uint32_t RsTlvBinaryDataRef::TlvSize() const +{ + uint32_t s = TLV_HEADER_SIZE; /* header */ + + if (mDataRef != NULL) + s += mSizeRef; // len is the size of data + + return s; +} diff --git a/libretroshare/src/serialiser/rstlvbinary.h b/libretroshare/src/serialiser/rstlvbinary.h index addac7f46..49a5d00f3 100644 --- a/libretroshare/src/serialiser/rstlvbinary.h +++ b/libretroshare/src/serialiser/rstlvbinary.h @@ -64,4 +64,23 @@ public: void *bin_data; /// mandatory }; +// This class is mainly used for on-the-fly serialization + +class RsTlvBinaryDataRef: public RsTlvItem +{ +public: + RsTlvBinaryDataRef(uint16_t type,uint8_t *& data_ref,uint32_t& size_ref) : mDataRef(data_ref),mSizeRef(size_ref),tlvtype(type) {} + virtual ~RsTlvBinaryDataRef() {} + + virtual uint32_t TlvSize() const; + virtual void TlvClear(){} + virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const; + virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); + + uint8_t *& mDataRef ; + uint32_t & mSizeRef ; + uint16_t tlvtype ; +}; + + From 688813fbf58a22bee997a09c2a9146a045803ec1 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 18:51:35 +0200 Subject: [PATCH 210/230] moved photo items to rsitems/ --- libretroshare/src/libretroshare.pro | 4 +-- libretroshare/src/retroshare/rsphoto.h | 2 +- .../{serialiser => rsitems}/rsphotoitems.cc | 8 +++--- .../{serialiser => rsitems}/rsphotoitems.h | 0 libretroshare/src/serialiser/rstlvbinary.cc | 28 +++++++++++++++++++ libretroshare/src/serialiser/rstlvbinary.h | 2 ++ libretroshare/src/services/p3photoservice.cc | 2 +- 7 files changed, 38 insertions(+), 8 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsphotoitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsphotoitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index a72b2d246..60fad8f7b 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -851,10 +851,10 @@ gxsphotoshare { #Photo Service HEADERS += services/p3photoservice.h \ retroshare/rsphoto.h \ - serialiser/rsphotoitems.h \ + rsitems/rsphotoitems.h \ SOURCES += services/p3photoservice.cc \ - serialiser/rsphotoitems.cc \ + rsitems/rsphotoitems.cc \ } diff --git a/libretroshare/src/retroshare/rsphoto.h b/libretroshare/src/retroshare/rsphoto.h index 7d3c1ae09..5a27a491b 100644 --- a/libretroshare/src/retroshare/rsphoto.h +++ b/libretroshare/src/retroshare/rsphoto.h @@ -52,7 +52,7 @@ class RsPhotoThumbnail // Holds Thumbnail image. uint8_t *data; - int size; + uint32_t size; std::string type; }; diff --git a/libretroshare/src/serialiser/rsphotoitems.cc b/libretroshare/src/rsitems/rsphotoitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsphotoitems.cc rename to libretroshare/src/rsitems/rsphotoitems.cc index 6971793d1..e2f3c279a 100644 --- a/libretroshare/src/serialiser/rsphotoitems.cc +++ b/libretroshare/src/rsitems/rsphotoitems.cc @@ -25,15 +25,15 @@ #include -#include "serialiser/rsphotoitems.h" -#include "serialiser/rstlvbase.h" +#include "rsitems/rsphotoitems.h" + #include "serialiser/rstlvbinary.h" -#include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" #define GXS_PHOTO_SERIAL_DEBUG -virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) const +RsItem *RsGxsPhotoSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const { if(service != RS_SERVICE_GXS_TYPE_PHOTO) return NULL ; diff --git a/libretroshare/src/serialiser/rsphotoitems.h b/libretroshare/src/rsitems/rsphotoitems.h similarity index 100% rename from libretroshare/src/serialiser/rsphotoitems.h rename to libretroshare/src/rsitems/rsphotoitems.h diff --git a/libretroshare/src/serialiser/rstlvbinary.cc b/libretroshare/src/serialiser/rstlvbinary.cc index 258da0d9a..7eaa58ae2 100644 --- a/libretroshare/src/serialiser/rstlvbinary.cc +++ b/libretroshare/src/serialiser/rstlvbinary.cc @@ -188,6 +188,34 @@ bool RsTlvBinaryData::GetTlv(void *data, uint32_t size, uint32_t *offset) return ok; } +std::ostream &RsTlvBinaryDataRef::print(std::ostream &out, uint16_t indent) const +{ + uint16_t int_Indent = indent + 2; + + uint32_t i; + std::ostringstream sout; + printIndent(sout, indent); + sout << "RsTlvBinaryData: Type: " << tlvtype << " Size: " << mSizeRef; + sout << std::hex; + + for(i = 0; i < mSizeRef; i++) + { + if (i % 16 == 0) + { + sout << std::endl; + printIndent(sout, int_Indent); + } + sout << std::setw(2) << std::setfill('0') + << (int) (((unsigned char *) mDataRef)[i]) << ":"; + } + + sout << std::endl; + out << sout.str(); + + printEnd(out, "RsTlvBinaryData", indent); + return out; + +} std::ostream &RsTlvBinaryData::print(std::ostream &out, uint16_t indent) const { diff --git a/libretroshare/src/serialiser/rstlvbinary.h b/libretroshare/src/serialiser/rstlvbinary.h index 49a5d00f3..a22269e0f 100644 --- a/libretroshare/src/serialiser/rstlvbinary.h +++ b/libretroshare/src/serialiser/rstlvbinary.h @@ -72,6 +72,8 @@ public: RsTlvBinaryDataRef(uint16_t type,uint8_t *& data_ref,uint32_t& size_ref) : mDataRef(data_ref),mSizeRef(size_ref),tlvtype(type) {} virtual ~RsTlvBinaryDataRef() {} + virtual std::ostream &print(std::ostream &out, uint16_t indent) const; + virtual uint32_t TlvSize() const; virtual void TlvClear(){} virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const; diff --git a/libretroshare/src/services/p3photoservice.cc b/libretroshare/src/services/p3photoservice.cc index 759f5ad18..519f10c68 100644 --- a/libretroshare/src/services/p3photoservice.cc +++ b/libretroshare/src/services/p3photoservice.cc @@ -1,5 +1,5 @@ #include "p3photoservice.h" -#include "serialiser/rsphotoitems.h" +#include "rsitems/rsphotoitems.h" #include "retroshare/rsgxsflags.h" RsPhoto *rsPhoto = NULL; From 8341c683885caa032c9d0a1d0392aa5dffa2318b Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 18:54:07 +0200 Subject: [PATCH 211/230] removed old code --- libretroshare/src/rsitems/rsphotoitems.cc | 598 ---------------------- 1 file changed, 598 deletions(-) diff --git a/libretroshare/src/rsitems/rsphotoitems.cc b/libretroshare/src/rsitems/rsphotoitems.cc index e2f3c279a..9c2f217d9 100644 --- a/libretroshare/src/rsitems/rsphotoitems.cc +++ b/libretroshare/src/rsitems/rsphotoitems.cc @@ -48,137 +48,6 @@ RsItem *RsGxsPhotoSerialiser::create_item(uint16_t service, uint8_t item_sub_id) } } -#ifdef TO_REMOVE -uint32_t RsGxsPhotoSerialiser::size(RsItem* item) -{ - RsGxsPhotoPhotoItem* ppItem = NULL; - RsGxsPhotoAlbumItem* paItem = NULL; - RsGxsPhotoCommentItem* cItem = NULL; - - if((ppItem = dynamic_cast(item)) != NULL) - { - return sizeGxsPhotoPhotoItem(ppItem); - } - else if((paItem = dynamic_cast(item)) != NULL) - { - return sizeGxsPhotoAlbumItem(paItem); - } - else if((cItem = dynamic_cast(item)) != NULL) - { - return sizeGxsPhotoCommentItem(cItem); - } - else - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - -#endif - return NULL; - } - -} - -bool RsGxsPhotoSerialiser::serialise(RsItem* item, void* data, uint32_t* size) -{ - - RsGxsPhotoPhotoItem* ppItem = NULL; - RsGxsPhotoAlbumItem* paItem = NULL; - RsGxsPhotoCommentItem* cItem = NULL; - - if((ppItem = dynamic_cast(item)) != NULL) - { - return serialiseGxsPhotoPhotoItem(ppItem, data, size); - } - else if((paItem = dynamic_cast(item)) != NULL) - { - return serialiseGxsPhotoAlbumItem(paItem, data, size); - }else if((cItem = dynamic_cast(item)) != NULL) - { - return serialiseGxsPhotoCommentItem(cItem, data, size); - } - else - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - -#endif - return false; - } - -} - -RsItem* RsGxsPhotoSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM: - return deserialiseGxsPhotoPhotoItem(data, size); - case RS_PKT_SUBTYPE_PHOTO_ITEM: - return deserialiseGxsPhotoAlbumItem(data, size); - case RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM: - return deserialiseGxsPhotoCommentItem(data, size); - default: - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialise(): subtype could not be dealt with" - << std::endl; -#endif - break; - } - } - return NULL; -} - -uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item) -{ - - const RsPhotoAlbum& album = item->album; - uint32_t s = 8; // header - - s += GetTlvStringSize(album.mCaption); - s += GetTlvStringSize(album.mCategory); - s += GetTlvStringSize(album.mDescription); - s += GetTlvStringSize(album.mHashTags); - s += GetTlvStringSize(album.mOther); - s += GetTlvStringSize(album.mPhotoPath); - s += GetTlvStringSize(album.mPhotographer); - s += GetTlvStringSize(album.mWhen); - s += GetTlvStringSize(album.mWhere); - - RsTlvBinaryData b(item->PacketService()); // TODO, need something more persisitent - b.setBinData(album.mThumbnail.data, album.mThumbnail.size); - s += GetTlvStringSize(album.mThumbnail.type); - s += b.TlvSize(); - - return s; -} - -uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoCommentItem(RsGxsPhotoCommentItem *item) -{ - - const RsPhotoComment& comment = item->comment; - uint32_t s = 8; // header - - s += GetTlvStringSize(comment.mComment); - s += 4; // mflags - - return s; - -} -#endif - void RsGxsPhotoAlbumItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_CAPTION, album.mCaption, "mCaption"); @@ -196,174 +65,6 @@ void RsGxsPhotoAlbumItem::serial_process(RsGenericSerializer::SerializeJob j,RsG RsTypeSerializer::serial_process(j,ctx,b,"thumbnail binary data") ; } - -#ifdef TO_REMOVE -bool RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item, void* data, - uint32_t* size) -{ - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsPhotoAlbumItem(item); - uint32_t offset = 0; - - if(*size < tlvsize){ -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsPhotoAlbumItem */ - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_CAPTION, item->album.mCaption); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_CATEGORY, item->album.mCategory); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->album.mDescription); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_HASH_TAG, item->album.mHashTags); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->album.mOther); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PATH, item->album.mPhotoPath); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, item->album.mPhotographer); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DATE, item->album.mWhen); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->album.mWhere); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->album.mThumbnail.type); - RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent - b.setBinData(item->album.mThumbnail.data, item->album.mThumbnail.size); - ok &= b.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXS_PHOTO_SERIAL_DEBUG - if (!ok) - { - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem() NOK" << std::endl; - } -#endif - - return ok; -} - -RsGxsPhotoAlbumItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem(void* data, - uint32_t* size) -{ - - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_PHOTO_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsPhotoAlbumItem* item = new RsGxsPhotoAlbumItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_CAPTION, item->album.mCaption); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_CATEGORY, item->album.mCategory); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->album.mDescription); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_HASH_TAG, item->album.mHashTags); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->album.mOther); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PATH, item->album.mPhotoPath); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->album.mPhotographer); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DATE, item->album.mWhen); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->album.mWhere); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PIC_TYPE, item->album.mThumbnail.type); - - RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent - ok &= b.GetTlv(data, rssize, &offset); - item->album.mThumbnail.data = (uint8_t*)b.bin_data; - item->album.mThumbnail.size = b.bin_len; - b.TlvShallowClear(); - - if (offset != rssize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -uint32_t RsGxsPhotoSerialiser::sizeGxsPhotoPhotoItem(RsGxsPhotoPhotoItem* item) -{ - - const RsPhotoPhoto& photo = item->photo; - - uint32_t s = 8; // header size - s += GetTlvStringSize(photo.mCaption); - s += GetTlvStringSize(photo.mCategory); - s += GetTlvStringSize(photo.mDescription); - s += GetTlvStringSize(photo.mHashTags); - s += GetTlvStringSize(photo.mOther); - s += GetTlvStringSize(photo.mPhotographer); - s += GetTlvStringSize(photo.mWhen); - s += GetTlvStringSize(photo.mWhere); - - RsTlvBinaryData b(item->PacketService()); // TODO, need something more persisitent - b.setBinData(photo.mThumbnail.data, photo.mThumbnail.size); - s += GetTlvStringSize(photo.mThumbnail.type); - s += b.TlvSize(); - - return s; -} -#endif - void RsGxsPhotoPhotoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx, TLV_TYPE_STR_CAPTION, photo.mCaption); @@ -379,276 +80,12 @@ void RsGxsPhotoPhotoItem::serial_process(RsGenericSerializer::SerializeJob j,RsG RsTlvBinaryDataRef b(RS_SERVICE_GXS_TYPE_PHOTO,photo.mThumbnail.data, photo.mThumbnail.size); RsTypeSerializer::serial_process(j,ctx, b, "mThumbnail") ; } - -#ifdef TO_REMOVE -bool RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem(RsGxsPhotoPhotoItem* item, void* data, - uint32_t* size) -{ - - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsPhotoPhotoItem(item); - uint32_t offset = 0; - - if(*size < tlvsize){ -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsPhotoAlbumItem */ - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_CAPTION, item->photo.mCaption); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_CATEGORY, item->photo.mCategory); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->photo.mDescription); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_HASH_TAG, item->photo.mHashTags); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->photo.mOther); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_AUTH, item->photo.mPhotographer); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DATE, item->photo.mWhen); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_LOCATION, item->photo.mWhere); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->photo.mThumbnail.type); - RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent - b.setBinData(item->photo.mThumbnail.data, item->photo.mThumbnail.size); - ok &= b.SetTlv(data, tlvsize, &offset); - - if(offset != tlvsize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXS_PHOTO_SERIAL_DEBUG - if (!ok) - { - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem() NOK" << std::endl; - } -#endif - - return ok; -} - -RsGxsPhotoPhotoItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem(void* data, - uint32_t* size) -{ - - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsPhotoPhotoItem* item = new RsGxsPhotoPhotoItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_CAPTION, item->photo.mCaption); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_CATEGORY, item->photo.mCategory); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->photo.mDescription); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_HASH_TAG, item->photo.mHashTags); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->photo.mOther); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PIC_AUTH, item->photo.mPhotographer); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DATE, item->photo.mWhen); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->photo.mWhere); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PIC_TYPE, item->photo.mThumbnail.type); - - RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent - ok &= b.GetTlv(data, rssize, &offset); - item->photo.mThumbnail.data = (uint8_t*)(b.bin_data); - item->photo.mThumbnail.size = b.bin_len; - b.TlvShallowClear(); - - if (offset != rssize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -#endif - void RsGxsPhotoCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_COMMENT,comment.mComment,"mComment"); RsTypeSerializer::serial_process(j,ctx,comment.mCommentFlag,"mCommentFlag"); } -#ifdef TO_REMOVE -bool RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem (RsGxsPhotoCommentItem *item, void *data, uint32_t *size) -{ - - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsPhotoCommentItem(item); - uint32_t offset = 0; - - if(*size < tlvsize){ -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsPhotoAlbumItem */ - - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - ok &= setRawUInt32(data, tlvsize, &offset, item->comment.mCommentFlag); - - if(offset != tlvsize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXS_PHOTO_SERIAL_DEBUG - if (!ok) - { - std::cerr << "RsGxsPhotoSerialiser::serialiseGxsPhotoCommentItem() NOK" << std::endl; - } -#endif - - return ok; -} - -RsGxsPhotoCommentItem * RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem(void *data, uint32_t *size) -{ - - -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsPhotoCommentItem* item = new RsGxsPhotoCommentItem(); - - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - ok &= getRawUInt32(data, rssize, &offset, &(item->comment.mCommentFlag)); - - if (offset != rssize) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXS_PHOTO_SERIAL_DEBUG - std::cerr << "RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -#endif - void RsGxsPhotoAlbumItem::clear() { album.mCaption.clear(); @@ -669,41 +106,6 @@ void RsGxsPhotoCommentItem::clear() comment.mCommentFlag = 0; } -#ifdef TO_REMOVE -std::ostream& RsGxsPhotoCommentItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPhotoCommentItem", indent); - uint16_t int_Indent = indent + 2; - - - printRsItemEnd(out ,"RsGxsPhotoCommentItem", indent); - return out; -} - -std::ostream& RsGxsPhotoAlbumItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPhotoAlbumItem", indent); - uint16_t int_Indent = indent + 2; - - out << album << std::endl; - - printRsItemEnd(out ,"RsGxsPhotoAlbumItem", indent); - return out; -} - -std::ostream& RsGxsPhotoPhotoItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsPhotoPhotoItem", indent); - uint16_t int_Indent = indent + 2; - - - printRsItemEnd(out ,"RsGxsPhotoPhotoItem", indent); - return out; -} - - -#endif - void RsGxsPhotoPhotoItem::clear() { photo.mCaption.clear(); From 23492698d4c38595045e6270136fbd3eec7b6112 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 23:28:56 +0200 Subject: [PATCH 212/230] switch rsrecognitems to new serialization --- .../src/serialiser/rsgxsrecognitems.cc | 64 ++++++++++++++- .../src/serialiser/rsgxsrecognitems.h | 82 +++++++------------ 2 files changed, 89 insertions(+), 57 deletions(-) diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.cc b/libretroshare/src/serialiser/rsgxsrecognitems.cc index 11317ad3c..a95cf8f60 100644 --- a/libretroshare/src/serialiser/rsgxsrecognitems.cc +++ b/libretroshare/src/serialiser/rsgxsrecognitems.cc @@ -25,6 +25,7 @@ #include "serialiser/rsgxsrecognitems.h" #include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 @@ -34,9 +35,19 @@ /*************************************************************************/ -RsGxsRecognReqItem::~RsGxsRecognReqItem() +RsItem *RsGxsRecognSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const { - return; + if(service != RS_SERVICE_TYPE_GXS_RECOGN) + return NULL ; + + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_RECOGN_REQ: return new RsGxsRecognReqItem(); + case RS_PKT_SUBTYPE_RECOGN_SIGNER: return new RsGxsRecognSignerItem(); + case RS_PKT_SUBTYPE_RECOGN_TAG: return new RsGxsRecognTagItem(); + default: + return NULL ; + } } void RsGxsRecognReqItem::clear() @@ -53,6 +64,12 @@ void RsGxsRecognReqItem::clear() sign.TlvClear(); } +#ifdef TO_REMOVE +RsGxsRecognReqItem::~RsGxsRecognReqItem() +{ + return; +} + std::ostream &RsGxsRecognReqItem::print(std::ostream &out, uint16_t indent) { @@ -104,6 +121,21 @@ uint32_t RsGxsRecognSerialiser::sizeReq(RsGxsRecognReqItem *item) return s; } +#endif + +void RsGxsRecognReqItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,issued_at ,"issued_at") ; + RsTypeSerializer::serial_process (j,ctx,period ,"period") ; + RsTypeSerializer::serial_process (j,ctx,tag_class ,"tag_class") ; + RsTypeSerializer::serial_process (j,ctx,tag_type ,"tag_type") ; + RsTypeSerializer::serial_process (j,ctx,identity ,"identity") ; + RsTypeSerializer::serial_process (j,ctx,1,nickname ,"nickname") ; + RsTypeSerializer::serial_process (j,ctx,1,comment ,"comment") ; + RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; +} + +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsGxsRecognSerialiser::serialiseReq(RsGxsRecognReqItem *item, void *data, uint32_t *pktsize) { @@ -217,6 +249,7 @@ RsGxsRecognTagItem::~RsGxsRecognTagItem() { return; } +#endif void RsGxsRecognTagItem::clear() { @@ -232,6 +265,7 @@ void RsGxsRecognTagItem::clear() sign.TlvClear(); } +#ifdef TO_REMOVE std::ostream &RsGxsRecognTagItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsGxsRecognTagItem", indent); @@ -279,7 +313,20 @@ uint32_t RsGxsRecognSerialiser::sizeTag(RsGxsRecognTagItem *item) return s; } +#endif +void RsGxsRecognTagItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,valid_from ,"valid_from") ; + RsTypeSerializer::serial_process (j,ctx,valid_to ,"valid_to") ; + RsTypeSerializer::serial_process (j,ctx,tag_class ,"tag_class") ; + RsTypeSerializer::serial_process (j,ctx,tag_type ,"tag_type") ; + RsTypeSerializer::serial_process (j,ctx,identity ,"identity"); + RsTypeSerializer::serial_process (j,ctx,1,nickname ,"nickname") ; + RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; +} + +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsGxsRecognSerialiser::serialiseTag(RsGxsRecognTagItem *item, void *data, uint32_t *pktsize) { @@ -393,6 +440,7 @@ RsGxsRecognSignerItem::~RsGxsRecognSignerItem() { return; } +#endif void RsGxsRecognSignerItem::clear() { @@ -401,6 +449,7 @@ void RsGxsRecognSignerItem::clear() sign.TlvClear(); } +#ifdef TO_REMOVE std::ostream &RsGxsRecognSignerItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsGxsRecognSignerItem", indent); @@ -435,7 +484,16 @@ uint32_t RsGxsRecognSerialiser::sizeSigner(RsGxsRecognSignerItem *item) return s; } +#endif +void RsGxsRecognSignerItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,signing_classes ,"signing_classes") ; + RsTypeSerializer::serial_process(j,ctx,key ,"key"); + RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; +} + +#ifdef TO_REMOVE /* serialise the data to the buffer */ bool RsGxsRecognSerialiser::serialiseSigner(RsGxsRecognSignerItem *item, void *data, uint32_t *pktsize) { @@ -604,6 +662,6 @@ RsItem *RsGxsRecognSerialiser::deserialise(void *data, uint32_t *pktsize) } /*************************************************************************/ - +#endif diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.h b/libretroshare/src/serialiser/rsgxsrecognitems.h index aab0e3974..e072477ce 100644 --- a/libretroshare/src/serialiser/rsgxsrecognitems.h +++ b/libretroshare/src/serialiser/rsgxsrecognitems.h @@ -32,7 +32,6 @@ #include "rsitems/rsserviceids.h" #include "rsitems/itempriorities.h" -#include "serialiser/rsserial.h" #include "serialiser/rstlvkeys.h" #include "serialiser/rstlvidset.h" @@ -46,25 +45,23 @@ /**************************************************************************/ -#define RS_PKT_SUBTYPE_RECOGN_REQ 0x01 -#define RS_PKT_SUBTYPE_RECOGN_TAG 0x02 -#define RS_PKT_SUBTYPE_RECOGN_SIGNER 0x03 +#define RS_PKT_SUBTYPE_RECOGN_REQ 0x01 +#define RS_PKT_SUBTYPE_RECOGN_TAG 0x02 +#define RS_PKT_SUBTYPE_RECOGN_SIGNER 0x03 class RsGxsRecognReqItem: public RsItem { - public: - RsGxsRecognReqItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, - RS_PKT_SUBTYPE_RECOGN_REQ) - { +public: + RsGxsRecognReqItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, RS_PKT_SUBTYPE_RECOGN_REQ) + { setPriorityLevel(QOS_PRIORITY_DEFAULT); - return; + return; } -virtual ~RsGxsRecognReqItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsGxsRecognReqItem(){} + virtual void clear(); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t issued_at; uint32_t period; @@ -82,16 +79,15 @@ std::ostream &print(std::ostream &out, uint16_t indent = 0); class RsGxsRecognTagItem: public RsItem { public: - RsGxsRecognTagItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, - RS_PKT_SUBTYPE_RECOGN_TAG) + RsGxsRecognTagItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, RS_PKT_SUBTYPE_RECOGN_TAG) { setPriorityLevel(QOS_PRIORITY_DEFAULT); return; } -virtual ~RsGxsRecognTagItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsGxsRecognTagItem(){} + virtual void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t valid_from; uint32_t valid_to; @@ -107,52 +103,30 @@ std::ostream &print(std::ostream &out, uint16_t indent = 0); class RsGxsRecognSignerItem: public RsItem { - public: - RsGxsRecognSignerItem() - :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, - RS_PKT_SUBTYPE_RECOGN_SIGNER) - { +public: + RsGxsRecognSignerItem() :RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN, RS_PKT_SUBTYPE_RECOGN_SIGNER) + { setPriorityLevel(QOS_PRIORITY_DEFAULT); - return; + return; } -virtual ~RsGxsRecognSignerItem(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual ~RsGxsRecognSignerItem(){} + virtual void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsTlvServiceIdSet signing_classes; - RsTlvPublicRSAKey key; // has from->to, and flags. + RsTlvPublicRSAKey key; // has from->to, and flags. RsTlvKeySignature sign; }; -class RsGxsRecognSerialiser: public RsSerialType +class RsGxsRecognSerialiser: public RsServiceSerializer { public: - RsGxsRecognSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_RECOGN) - { return; } -virtual ~RsGxsRecognSerialiser() - { return; } - - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - - private: - -virtual uint32_t sizeReq(RsGxsRecognReqItem *); -virtual bool serialiseReq(RsGxsRecognReqItem *item, void *data, uint32_t *size); -virtual RsGxsRecognReqItem *deserialiseReq(void *data, uint32_t *size); - -virtual uint32_t sizeTag(RsGxsRecognTagItem *); -virtual bool serialiseTag(RsGxsRecognTagItem *item, void *data, uint32_t *size); -virtual RsGxsRecognTagItem *deserialiseTag(void *data, uint32_t *size); - -virtual uint32_t sizeSigner(RsGxsRecognSignerItem *); -virtual bool serialiseSigner(RsGxsRecognSignerItem *item, void *data, uint32_t *size); -virtual RsGxsRecognSignerItem *deserialiseSigner(void *data, uint32_t *size); + RsGxsRecognSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_GXS_RECOGN) {} + virtual ~RsGxsRecognSerialiser() {} + virtual RsItem *create_item(uint16_t service, uint8_t item_sub_id) const; }; /**************************************************************************/ From 5cba0059c85ac7df40f4681199b5794d13a05097 Mon Sep 17 00:00:00 2001 From: csoler Date: Fri, 28 Apr 2017 23:32:47 +0200 Subject: [PATCH 213/230] moved recognitems to rsitems/ --- libretroshare/src/libretroshare.pro | 4 ++-- libretroshare/src/{serialiser => rsitems}/rsgxsrecognitems.cc | 3 +-- libretroshare/src/{serialiser => rsitems}/rsgxsrecognitems.h | 0 libretroshare/src/services/p3idservice.h | 2 +- libretroshare/src/util/rsrecogn.h | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rsgxsrecognitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rsgxsrecognitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 60fad8f7b..679e7c31a 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -485,7 +485,7 @@ HEADERS += rsitems/rsitem.h \ rsitems/rsdiscovery2items.h \ rsitems/rsheartbeatitems.h \ rsitems/rsrttitems.h \ - serialiser/rsgxsrecognitems.h \ + rsitems/rsgxsrecognitems.h \ rsitems/rsgxsupdateitems.h \ rsitems/rsserviceinfoitems.h \ @@ -630,7 +630,7 @@ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsbwctrlitems.cc \ rsitems/rsdiscovery2items.cc \ rsitems/rsrttitems.cc \ - serialiser/rsgxsrecognitems.cc \ + rsitems/rsgxsrecognitems.cc \ rsitems/rsgxsupdateitems.cc \ rsitems/rsserviceinfoitems.cc \ diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.cc b/libretroshare/src/rsitems/rsgxsrecognitems.cc similarity index 99% rename from libretroshare/src/serialiser/rsgxsrecognitems.cc rename to libretroshare/src/rsitems/rsgxsrecognitems.cc index a95cf8f60..100ede2ba 100644 --- a/libretroshare/src/serialiser/rsgxsrecognitems.cc +++ b/libretroshare/src/rsitems/rsgxsrecognitems.cc @@ -23,8 +23,7 @@ * */ -#include "serialiser/rsgxsrecognitems.h" -#include "serialiser/rsbaseserial.h" +#include "rsitems/rsgxsrecognitems.h" #include "serialization/rstypeserializer.h" /*** diff --git a/libretroshare/src/serialiser/rsgxsrecognitems.h b/libretroshare/src/rsitems/rsgxsrecognitems.h similarity index 100% rename from libretroshare/src/serialiser/rsgxsrecognitems.h rename to libretroshare/src/rsitems/rsgxsrecognitems.h diff --git a/libretroshare/src/services/p3idservice.h b/libretroshare/src/services/p3idservice.h index caf29ee73..f745aca83 100644 --- a/libretroshare/src/services/p3idservice.h +++ b/libretroshare/src/services/p3idservice.h @@ -43,7 +43,7 @@ #include "pqi/authgpg.h" -#include "serialiser/rsgxsrecognitems.h" +#include "rsitems/rsgxsrecognitems.h" class PgpAuxUtils; diff --git a/libretroshare/src/util/rsrecogn.h b/libretroshare/src/util/rsrecogn.h index 6909a34ce..4f7b7cd2e 100644 --- a/libretroshare/src/util/rsrecogn.h +++ b/libretroshare/src/util/rsrecogn.h @@ -33,7 +33,7 @@ #include #include -#include "serialiser/rsgxsrecognitems.h" +#include "rsitems/rsgxsrecognitems.h" #include "retroshare/rsgxsifacetypes.h" namespace RsRecogn { From 77adc82aa278f958d4b16befb44fdbfc1eb57c32 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 29 Apr 2017 17:32:23 +0200 Subject: [PATCH 214/230] Fix Missing messages when mark all as read. If message get olders versions, these ones was not marked as read. So it left unread messages on thread despite nothing appears on tree view. --- libretroshare/src/gxs/rsgxsdata.cc | 10 +++++++--- .../src/gui/gxsforums/GxsForumThreadWidget.cpp | 14 +++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsdata.cc b/libretroshare/src/gxs/rsgxsdata.cc index 090a7b602..de1ce4024 100644 --- a/libretroshare/src/gxs/rsgxsdata.cc +++ b/libretroshare/src/gxs/rsgxsdata.cc @@ -239,17 +239,21 @@ void RsGxsMsgMetaData::clear() mMsgId.clear(); mThreadId.clear(); mParentId.clear(); - mAuthorId.clear(); mOrigMsgId.clear(); - mMsgName.clear(); - mServiceString.clear(); + mAuthorId.clear(); signSet.TlvClear(); + mMsgName.clear(); mPublishTs = 0; mMsgFlags = 0; + + mServiceString.clear(); mMsgStatus = 0; + mMsgSize = 0; mChildTs = 0; recvTS = 0; + mHash.clear(); + validated = false; } bool RsGxsMsgMetaData::serialise(void *data, uint32_t *size) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index 6afa8dbdd..6402d130a 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -1844,11 +1844,23 @@ void GxsForumThreadWidget::setMsgReadStatus(QList &rows, bool // LIKE THIS BELOW... //std::string grpId = (*Row)->data(COLUMN_THREAD_DATA, ROLE_THREAD_GROUPID).toString().toStdString(); - RsGxsGrpMsgIdPair msgPair = std::make_pair(groupId(), RsGxsMessageId(msgId)); + RsGxsGrpMsgIdPair msgPair = std::make_pair( groupId(), RsGxsMessageId(msgId) ); uint32_t token; rsGxsForums->setMessageReadStatus(token, msgPair, read); + // Look if older version exist to mark them too + QMap > >::const_iterator it = mPostVersions.find(mOrigThreadId) ; + if(it != mPostVersions.end()) + { + std::cerr << (*it).size() << " versions found " << std::endl; + for(int i=0;i<(*it).size();++i) + { + msgPair = std::make_pair( groupId(), (*it)[i].second ); + rsGxsForums->setMessageReadStatus(token, msgPair, read); + } + } + /* Add message id to ignore list for the next updateDisplay */ mIgnoredMsgId.push_back(RsGxsMessageId(msgId)); From d58c638af893d68dcd7ba5fcd1d4d423fbe7ec58 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 29 Apr 2017 21:46:54 +0200 Subject: [PATCH 215/230] switched wiki and wire items to new serialization --- libretroshare/src/serialiser/rswikiitems.cc | 47 +++++++++++++++ libretroshare/src/serialiser/rswikiitems.h | 66 +++++++-------------- libretroshare/src/serialiser/rswireitems.cc | 39 +++++++++++- libretroshare/src/serialiser/rswireitems.h | 42 +++++-------- 4 files changed, 120 insertions(+), 74 deletions(-) diff --git a/libretroshare/src/serialiser/rswikiitems.cc b/libretroshare/src/serialiser/rswikiitems.cc index fa4b2be72..dbd747b9a 100644 --- a/libretroshare/src/serialiser/rswikiitems.cc +++ b/libretroshare/src/serialiser/rswikiitems.cc @@ -31,7 +31,22 @@ #define GXSID_DEBUG 1 +RsItem *RsGxsWikiSerialiser::create_item(uint16_t service, uint8_t item_sub_id) const +{ + if(service != RS_SERVICE_GXS_TYPE_WIKI) + return NULL ; + switch(item_sub_id) + { + case RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM: return new RsGxsWikiCollectionItem(); + case RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM: return new RsGxsWikiCommentItem(); + case RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM: return new RsGxsWikiSnapshotItem(); + default: + return NULL ; + } +} + +#ifdef TO_REMOVE uint32_t RsGxsWikiSerialiser::size(RsItem *item) { RsGxsWikiCollectionItem* grp_item = NULL; @@ -117,6 +132,7 @@ RsItem* RsGxsWikiSerialiser::deserialise(void* data, uint32_t* size) /*****************************************************************************************/ /*****************************************************************************************/ +#endif void RsGxsWikiCollectionItem::clear() { @@ -125,6 +141,7 @@ void RsGxsWikiCollectionItem::clear() collection.mHashTags.clear(); } +#ifdef TO_REMOVE std::ostream& RsGxsWikiCollectionItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsWikiCollectionItem", indent); @@ -154,7 +171,16 @@ uint32_t RsGxsWikiSerialiser::sizeGxsWikiCollectionItem(RsGxsWikiCollectionItem return s; } +#endif +void RsGxsWikiCollectionItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR ,collection.mDescription,"collection.mDescription") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_CATEGORY,collection.mCategory ,"collection.mCategory") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG,collection.mHashTags ,"collection.mHashTags") ; +} + +#ifdef TO_REMOVE bool RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem(RsGxsWikiCollectionItem *item, void *data, uint32_t *size) { @@ -277,6 +303,7 @@ RsGxsWikiCollectionItem* RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem(v /*****************************************************************************************/ /*****************************************************************************************/ +#endif void RsGxsWikiSnapshotItem::clear() { @@ -284,6 +311,7 @@ void RsGxsWikiSnapshotItem::clear() snapshot.mHashTags.clear(); } +#ifdef TO_REMOVE std::ostream& RsGxsWikiSnapshotItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsWikiSnapshotItem", indent); @@ -311,7 +339,15 @@ uint32_t RsGxsWikiSerialiser::sizeGxsWikiSnapshotItem(RsGxsWikiSnapshotItem *ite return s; } +#endif +void RsGxsWikiSnapshotItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_WIKI_PAGE,snapshot.mPage,"snapshot.mPage") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG ,snapshot.mPage,"snapshot.mHashTags") ; +} + +#ifdef TO_REMOVE bool RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem(RsGxsWikiSnapshotItem *item, void *data, uint32_t *size) { @@ -431,12 +467,14 @@ RsGxsWikiSnapshotItem* RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem(void /*****************************************************************************************/ /*****************************************************************************************/ +#endif void RsGxsWikiCommentItem::clear() { comment.mComment.clear(); } +#ifdef TO_REMOVE std::ostream& RsGxsWikiCommentItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsWikiCommentItem", indent); @@ -460,7 +498,14 @@ uint32_t RsGxsWikiSerialiser::sizeGxsWikiCommentItem(RsGxsWikiCommentItem *item) return s; } +#endif +void RsGxsWikiCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_COMMENT,comment.mComment,"comment.mComment") ; +} + +#ifdef TO_REMOVE bool RsGxsWikiSerialiser::serialiseGxsWikiCommentItem(RsGxsWikiCommentItem *item, void *data, uint32_t *size) { @@ -578,3 +623,5 @@ RsGxsWikiCommentItem* RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem(void *d /*****************************************************************************************/ /*****************************************************************************************/ + +#endif diff --git a/libretroshare/src/serialiser/rswikiitems.h b/libretroshare/src/serialiser/rswikiitems.h index 4247f9d3b..a50102ab4 100644 --- a/libretroshare/src/serialiser/rswikiitems.h +++ b/libretroshare/src/serialiser/rswikiitems.h @@ -29,28 +29,24 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" -//#include "serialiser/rstlvtypes.h" +#include "rsitems/rsitem.h" -#include "rsgxsitems.h" +#include "serialiser/rsgxsitems.h" #include "retroshare/rswiki.h" const uint8_t RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM = 0x02; -const uint8_t RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM = 0x03; -const uint8_t RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM = 0x04; +const uint8_t RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM = 0x03; +const uint8_t RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM = 0x04; class RsGxsWikiCollectionItem : public RsGxsGrpItem { - public: + RsGxsWikiCollectionItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIKI, RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM) {} + virtual ~RsGxsWikiCollectionItem() {} - RsGxsWikiCollectionItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIKI, - RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM) { return;} - virtual ~RsGxsWikiCollectionItem() { return;} - - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void clear(); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsWikiCollection collection; }; @@ -59,11 +55,12 @@ class RsGxsWikiSnapshotItem : public RsGxsMsgItem { public: - RsGxsWikiSnapshotItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI, - RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM) {return; } - virtual ~RsGxsWikiSnapshotItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsWikiSnapshotItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI, RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM) {} + virtual ~RsGxsWikiSnapshotItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsWikiSnapshot snapshot; }; @@ -71,42 +68,23 @@ class RsGxsWikiCommentItem : public RsGxsMsgItem { public: - RsGxsWikiCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI, - RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM) { return; } - virtual ~RsGxsWikiCommentItem() { return; } + RsGxsWikiCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI, RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM) {} + virtual ~RsGxsWikiCommentItem() {} void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsWikiComment comment; }; -class RsGxsWikiSerialiser : public RsSerialType +class RsGxsWikiSerialiser : public RsServiceSerializer { public: - RsGxsWikiSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_WIKI) - { return; } - virtual ~RsGxsWikiSerialiser() { return; } - - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsWikiCollectionItem(RsGxsWikiCollectionItem *item); - bool serialiseGxsWikiCollectionItem (RsGxsWikiCollectionItem *item, void *data, uint32_t *size); - RsGxsWikiCollectionItem * deserialiseGxsWikiCollectionItem(void *data, uint32_t *size); - - uint32_t sizeGxsWikiSnapshotItem(RsGxsWikiSnapshotItem *item); - bool serialiseGxsWikiSnapshotItem (RsGxsWikiSnapshotItem *item, void *data, uint32_t *size); - RsGxsWikiSnapshotItem * deserialiseGxsWikiSnapshotItem(void *data, uint32_t *size); - - uint32_t sizeGxsWikiCommentItem(RsGxsWikiCommentItem *item); - bool serialiseGxsWikiCommentItem (RsGxsWikiCommentItem *item, void *data, uint32_t *size); - RsGxsWikiCommentItem * deserialiseGxsWikiCommentItem(void *data, uint32_t *size); + RsGxsWikiSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_WIKI) {} + virtual ~RsGxsWikiSerialiser() {} + virtual RsItem *create_item(uint16_t /* service */, uint8_t /* item_sub_id */) const; }; #endif /* RS_WIKI_ITEMS_H */ diff --git a/libretroshare/src/serialiser/rswireitems.cc b/libretroshare/src/serialiser/rswireitems.cc index 68ec68741..988189b60 100644 --- a/libretroshare/src/serialiser/rswireitems.cc +++ b/libretroshare/src/serialiser/rswireitems.cc @@ -26,12 +26,27 @@ #include #include "rswireitems.h" -#include "serialiser/rstlvbase.h" -#include "serialiser/rsbaseserial.h" + +#include "serialization/rstypeserializer.h" #define WIRE_DEBUG 1 +RsItem *RsGxsWireSerialiser::create_item(uint16_t service,uint8_t item_subtype) const +{ + if(service != RS_SERVICE_GXS_TYPE_WIRE) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_WIRE_GROUP_ITEM: return new RsGxsWireGroupItem(); + case RS_PKT_SUBTYPE_WIRE_PULSE_ITEM: return new RsGxsWirePulseItem(); + default: + return NULL ; + } +} + +#ifdef TO_REMOVE uint32_t RsGxsWireSerialiser::size(RsItem *item) { RsGxsWireGroupItem* grp_item = NULL; @@ -104,12 +119,14 @@ RsItem* RsGxsWireSerialiser::deserialise(void* data, uint32_t* size) /*****************************************************************************************/ /*****************************************************************************************/ +#endif void RsGxsWireGroupItem::clear() { group.mDescription.clear(); } +#ifdef TO_REMOVE std::ostream& RsGxsWireGroupItem::print(std::ostream& out, uint16_t indent) { printRsItemBase(out, "RsGxsWireGroupItem", indent); @@ -134,6 +151,14 @@ uint32_t RsGxsWireSerialiser::sizeGxsWireGroupItem(RsGxsWireGroupItem *item) return s; } +#endif + +void RsGxsWireGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR,group.mDescription,"group.mDescription") ; +} + +#ifdef TO_REMOVE bool RsGxsWireSerialiser::serialiseGxsWireGroupItem(RsGxsWireGroupItem *item, void *data, uint32_t *size) { @@ -287,6 +312,15 @@ uint32_t RsGxsWireSerialiser::sizeGxsWirePulseItem(RsGxsWirePulseItem *item) return s; } +#endif + +void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mPulseText,"pulse.mPulseText") ; + RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG,pulse.mHashTags,"pulse.mHashTags") ; +} + +#ifdef TO_REMOVE bool RsGxsWireSerialiser::serialiseGxsWirePulseItem(RsGxsWirePulseItem *item, void *data, uint32_t *size) { @@ -406,3 +440,4 @@ RsGxsWirePulseItem* RsGxsWireSerialiser::deserialiseGxsWirePulseItem(void *data, /*****************************************************************************************/ /*****************************************************************************************/ +#endif diff --git a/libretroshare/src/serialiser/rswireitems.h b/libretroshare/src/serialiser/rswireitems.h index 77258707a..137619aa6 100644 --- a/libretroshare/src/serialiser/rswireitems.h +++ b/libretroshare/src/serialiser/rswireitems.h @@ -43,13 +43,12 @@ class RsGxsWireGroupItem : public RsGxsGrpItem public: - RsGxsWireGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIRE, - RS_PKT_SUBTYPE_WIRE_GROUP_ITEM) { return;} - virtual ~RsGxsWireGroupItem() { return;} + RsGxsWireGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIRE, RS_PKT_SUBTYPE_WIRE_GROUP_ITEM) {} + virtual ~RsGxsWireGroupItem() {} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + void clear(); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); RsWireGroup group; }; @@ -58,36 +57,23 @@ class RsGxsWirePulseItem : public RsGxsMsgItem { public: - RsGxsWirePulseItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIRE, - RS_PKT_SUBTYPE_WIRE_PULSE_ITEM) {return; } - virtual ~RsGxsWirePulseItem() { return;} - void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); + RsGxsWirePulseItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIRE, RS_PKT_SUBTYPE_WIRE_PULSE_ITEM) {} + virtual ~RsGxsWirePulseItem() {} + void clear(); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + RsWirePulse pulse; }; -class RsGxsWireSerialiser : public RsSerialType +class RsGxsWireSerialiser : public RsServiceSerializer { public: - RsGxsWireSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_WIRE) - { return; } - virtual ~RsGxsWireSerialiser() { return; } + RsGxsWireSerialiser() :RsServiceSerializer(RS_SERVICE_GXS_TYPE_WIRE) {} + virtual ~RsGxsWireSerialiser() {} - uint32_t size(RsItem *item); - bool serialise (RsItem *item, void *data, uint32_t *size); - RsItem * deserialise(void *data, uint32_t *size); - - private: - - uint32_t sizeGxsWireGroupItem(RsGxsWireGroupItem *item); - bool serialiseGxsWireGroupItem (RsGxsWireGroupItem *item, void *data, uint32_t *size); - RsGxsWireGroupItem * deserialiseGxsWireGroupItem(void *data, uint32_t *size); - - uint32_t sizeGxsWirePulseItem(RsGxsWirePulseItem *item); - bool serialiseGxsWirePulseItem (RsGxsWirePulseItem *item, void *data, uint32_t *size); - RsGxsWirePulseItem * deserialiseGxsWirePulseItem(void *data, uint32_t *size); + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const ; }; #endif /* RS_WIKI_ITEMS_H */ From 1159c863a228ca8bd0dcb8664637c737f1df8f41 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 29 Apr 2017 21:50:55 +0200 Subject: [PATCH 216/230] moved wiki and wire items to rsitems/ --- libretroshare/src/libretroshare.pro | 8 ++++---- libretroshare/src/{serialiser => rsitems}/rswikiitems.cc | 4 ++-- libretroshare/src/{serialiser => rsitems}/rswikiitems.h | 2 +- libretroshare/src/{serialiser => rsitems}/rswireitems.cc | 0 libretroshare/src/{serialiser => rsitems}/rswireitems.h | 0 libretroshare/src/services/p3wiki.cc | 2 +- libretroshare/src/services/p3wire.cc | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) rename libretroshare/src/{serialiser => rsitems}/rswikiitems.cc (99%) rename libretroshare/src/{serialiser => rsitems}/rswikiitems.h (98%) rename libretroshare/src/{serialiser => rsitems}/rswireitems.cc (100%) rename libretroshare/src/{serialiser => rsitems}/rswireitems.h (100%) diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 679e7c31a..2c503532a 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -821,20 +821,20 @@ wikipoos { # Wiki Service HEADERS += retroshare/rswiki.h \ services/p3wiki.h \ - serialiser/rswikiitems.h + rsitems/rswikiitems.h SOURCES += services/p3wiki.cc \ - serialiser/rswikiitems.cc \ + rsitems/rswikiitems.cc \ } gxsthewire { # Wire Service HEADERS += retroshare/rswire.h \ services/p3wire.h \ - serialiser/rswireitems.h + rsitems/rswireitems.h SOURCES += services/p3wire.cc \ - serialiser/rswireitems.cc \ + rsitems/rswireitems.cc \ } # Posted Service diff --git a/libretroshare/src/serialiser/rswikiitems.cc b/libretroshare/src/rsitems/rswikiitems.cc similarity index 99% rename from libretroshare/src/serialiser/rswikiitems.cc rename to libretroshare/src/rsitems/rswikiitems.cc index dbd747b9a..8da92ab58 100644 --- a/libretroshare/src/serialiser/rswikiitems.cc +++ b/libretroshare/src/rsitems/rswikiitems.cc @@ -25,9 +25,9 @@ #include -#include "rswikiitems.h" +#include "rsitems/rswikiitems.h" #include "serialiser/rstlvbase.h" -#include "serialiser/rsbaseserial.h" +#include "serialization/rstypeserializer.h" #define GXSID_DEBUG 1 diff --git a/libretroshare/src/serialiser/rswikiitems.h b/libretroshare/src/rsitems/rswikiitems.h similarity index 98% rename from libretroshare/src/serialiser/rswikiitems.h rename to libretroshare/src/rsitems/rswikiitems.h index a50102ab4..378b77e5a 100644 --- a/libretroshare/src/serialiser/rswikiitems.h +++ b/libretroshare/src/rsitems/rswikiitems.h @@ -30,8 +30,8 @@ #include "rsitems/rsserviceids.h" #include "rsitems/rsitem.h" +#include "rsitems/rsgxsitems.h" -#include "serialiser/rsgxsitems.h" #include "retroshare/rswiki.h" const uint8_t RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM = 0x02; diff --git a/libretroshare/src/serialiser/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc similarity index 100% rename from libretroshare/src/serialiser/rswireitems.cc rename to libretroshare/src/rsitems/rswireitems.cc diff --git a/libretroshare/src/serialiser/rswireitems.h b/libretroshare/src/rsitems/rswireitems.h similarity index 100% rename from libretroshare/src/serialiser/rswireitems.h rename to libretroshare/src/rsitems/rswireitems.h diff --git a/libretroshare/src/services/p3wiki.cc b/libretroshare/src/services/p3wiki.cc index d91e3d5df..a707596c1 100644 --- a/libretroshare/src/services/p3wiki.cc +++ b/libretroshare/src/services/p3wiki.cc @@ -25,7 +25,7 @@ #include "services/p3wiki.h" #include "retroshare/rsgxsflags.h" -#include "serialiser/rswikiitems.h" +#include "rsitems/rswikiitems.h" #include "util/rsrandom.h" diff --git a/libretroshare/src/services/p3wire.cc b/libretroshare/src/services/p3wire.cc index 0e525d689..7edce4a4d 100644 --- a/libretroshare/src/services/p3wire.cc +++ b/libretroshare/src/services/p3wire.cc @@ -24,7 +24,7 @@ */ #include "services/p3wire.h" -#include "serialiser/rswireitems.h" +#include "rsitems/rswireitems.h" #include "util/rsrandom.h" From 4fbcc1e85f6f5ca3f7cd89ae865719bbf9a20c04 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sat, 29 Apr 2017 19:47:29 +0200 Subject: [PATCH 217/230] Add Double Click on Name for Chat to add their name in text writer. --- retroshare-gui/src/gui/chat/ChatWidget.cpp | 47 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/retroshare-gui/src/gui/chat/ChatWidget.cpp b/retroshare-gui/src/gui/chat/ChatWidget.cpp index 37e2b589e..ead335091 100644 --- a/retroshare-gui/src/gui/chat/ChatWidget.cpp +++ b/retroshare-gui/src/gui/chat/ChatWidget.cpp @@ -48,6 +48,7 @@ #include "gui/common/FilesDefs.h" #include "gui/common/Emoticons.h" #include "gui/chat/ChatLobbyDialog.h" +#include "gui/gxs/GxsIdDetails.h" #include "util/misc.h" #include "util/HandleRichText.h" #include "gui/chat/ChatUserNotify.h"//For BradCast @@ -65,6 +66,8 @@ #define FMM 2.5//fontMetricsMultiplicator +#define PERSONID "PersonId:" + /***** * #define CHAT_DEBUG 1 *****/ @@ -587,6 +590,9 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event) if (ui->textBrowser->checkImage(helpEvent->pos(), imageStr)) { toolTipText = imageStr; } + } else if (toolTipText.startsWith(PERSONID)){ + toolTipText = toolTipText.replace(PERSONID, tr("Person id: ") ); + toolTipText = toolTipText.append(tr("\nDouble click on it to add his name on text writer.") ); } } if (!toolTipText.isEmpty()){ @@ -664,6 +670,39 @@ bool ChatWidget::eventFilter(QObject *obj, QEvent *event) } } } + } else if (obj == ui->textBrowser->viewport()) { + if (event->type() == QEvent::MouseButtonDblClick) { + + QMouseEvent* mouseEvent = static_cast(event); + QTextCursor cursor = ui->textBrowser->cursorForPosition(mouseEvent->pos()); + cursor.select(QTextCursor::WordUnderCursor); + if (!cursor.selectedText().isEmpty()){ + QRegExp rx("getIdDetails(mId, details)){ + QString text = QString("@").append(GxsIdDetails::getName(details)).append(" "); + ui->chatTextEdit->textCursor().insertText(text); + } + } + } + } + + } + + } } else { if (event->type() == QEvent::WindowActivate) { if (isVisible() && (window() == NULL || window()->isActiveWindow())) { @@ -963,9 +1002,13 @@ void ChatWidget::addChatMsg(bool incoming, const QString &name, const RsGxsId gx formatMsg.replace(QString(""),QString("").arg(timeStamp)); //replace Name anchors with GXS Id QString strGxsId = ""; - if (!gxsId.isNull()) + if (!gxsId.isNull()) { strGxsId = QString::fromStdString(gxsId.toStdString()); - formatMsg.replace(QString(""),QString("").arg(strGxsId)); + formatMsg.replace(QString("") + ,QString("").arg(strGxsId) ); + } else { + formatMsg.replace(QString(""),""); + } QTextCursor textCursor = QTextCursor(ui->textBrowser->textCursor()); textCursor.movePosition(QTextCursor::End); From 4f92f483fa017598ffa20c7a75ce5509874344b3 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 29 Apr 2017 23:02:44 +0200 Subject: [PATCH 218/230] dwicthed GxsTunnel items to new serialization --- libretroshare/src/gxstunnel/p3gxstunnel.cc | 12 ++- .../src/gxstunnel/rsgxstunnelitems.cc | 91 +++++++++++++++++++ .../src/gxstunnel/rsgxstunnelitems.h | 41 ++------- .../src/serialization/rstypeserializer.h | 16 ++-- 4 files changed, 115 insertions(+), 45 deletions(-) diff --git a/libretroshare/src/gxstunnel/p3gxstunnel.cc b/libretroshare/src/gxstunnel/p3gxstunnel.cc index 3ad4198a9..75f50c7d9 100644 --- a/libretroshare/src/gxstunnel/p3gxstunnel.cc +++ b/libretroshare/src/gxstunnel/p3gxstunnel.cc @@ -1185,7 +1185,9 @@ bool p3GxsTunnelService::locked_sendClearTunnelData(RsGxsTunnelDHPublicKeyItem * // RsTurtleGenericDataItem *gitem = new RsTurtleGenericDataItem ; - uint32_t rssize = item->serial_size() ; + RsGxsTunnelSerialiser ser ; + + uint32_t rssize = ser.size(item); gitem->data_size = rssize + 8 ; gitem->data_bytes = rs_malloc(rssize+8) ; @@ -1198,7 +1200,7 @@ bool p3GxsTunnelService::locked_sendClearTunnelData(RsGxsTunnelDHPublicKeyItem * // by convention, we use a IV of 0 for unencrypted data. memset(gitem->data_bytes,0,8) ; - if(!item->serialise(&((uint8_t*)gitem->data_bytes)[8],rssize)) + if(!ser.serialise(item,&((uint8_t*)gitem->data_bytes)[8],&rssize)) { std::cerr << "(EE) Could not serialise item!!!" << std::endl; delete gitem ; @@ -1220,10 +1222,12 @@ bool p3GxsTunnelService::locked_sendClearTunnelData(RsGxsTunnelDHPublicKeyItem * bool p3GxsTunnelService::locked_sendEncryptedTunnelData(RsGxsTunnelItem *item) { - uint32_t rssize = item->serial_size(); + RsGxsTunnelSerialiser ser; + + uint32_t rssize = ser.size(item); RsTemporaryMemory buff(rssize) ; - if(!item->serialise(buff,rssize)) + if(!ser.serialise(item,buff,&rssize)) { std::cerr << "(EE) GxsTunnelService::sendEncryptedTunnelData(): Could not serialise item!" << std::endl; return false; diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc index be0ff42c7..5f14fe079 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc @@ -28,6 +28,7 @@ #include #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" +#include "serialization/rstypeserializer.h" #include "util/rsprint.h" #include "util/rsmemory.h" @@ -35,6 +36,23 @@ //#define GXS_TUNNEL_ITEM_DEBUG 1 +RsItem *RsGxsTunnelSerialiser::create_item(uint16_t service,uint8_t item_subtype) const +{ + if(service != RS_SERVICE_TYPE_GXS_TUNNEL) + return NULL ; + + switch(item_subtype) + { + case RS_PKT_SUBTYPE_GXS_TUNNEL_DATA: return new RsGxsTunnelDataItem(); + case RS_PKT_SUBTYPE_GXS_TUNNEL_DATA_ACK: return new RsGxsTunnelDataAckItem(); + case RS_PKT_SUBTYPE_GXS_TUNNEL_DH_PUBLIC_KEY: return new RsGxsTunnelDHPublicKeyItem(); + case RS_PKT_SUBTYPE_GXS_TUNNEL_STATUS: return new RsGxsTunnelStatusItem(); + default: + return NULL ; + } +} + +#ifdef TO_REMOVE std::ostream& RsGxsTunnelDHPublicKeyItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsGxsTunnelDHPublicKeyItem", indent); @@ -87,12 +105,14 @@ std::ostream& RsGxsTunnelStatusItem::print(std::ostream &out, uint16_t indent) } /*************************************************************************/ +#endif RsGxsTunnelDHPublicKeyItem::~RsGxsTunnelDHPublicKeyItem() { BN_free(public_key) ; } +#ifdef TO_REMOVE /*************************************************************************/ RsItem *RsGxsTunnelSerialiser::deserialise(void *data, uint32_t *pktsize) @@ -176,7 +196,54 @@ uint32_t RsGxsTunnelStatusItem::serial_size() return s ; } /*************************************************************************/ +#endif +void RsGxsTunnelDHPublicKeyItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process (j,ctx,public_key,"public_key") ; + RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; + RsTypeSerializer::serial_process(j,ctx,gxs_key,"gxs_key") ; +} + +template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, BIGNUM * const & member) +{ + uint32_t s = BN_num_bytes(member) ; + + if(size < offset + 4 + s) + return false ; + + bool ok = true ; + ok &= setRawUInt32(data, size, &offset, s); + + BN_bn2bin(member,&((unsigned char *)data)[offset]) ; + offset += s ; + + return ok; +} +template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, BIGNUM *& member) +{ + uint32_t s=0 ; + bool ok = true ; + ok &= getRawUInt32(data, size, &offset, &s); + + if(s > size || size - s < offset) + return false ; + + member = BN_bin2bn(&((unsigned char *)data)[offset],s,NULL) ; + offset += s ; + + return ok; +} +template<> uint32_t RsTypeSerializer::serial_size(BIGNUM * const & member) +{ + return 4 + BN_num_bytes(member) ; +} +template<> void RsTypeSerializer::print_data(const std::string& name,BIGNUM * const & /* member */) +{ + std::cerr << "[BIGNUM] : " << name << std::endl; +} + +#ifdef TO_REMOVE bool RsGxsTunnelDHPublicKeyItem::serialise(void *data,uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -211,7 +278,14 @@ bool RsGxsTunnelDHPublicKeyItem::serialise(void *data,uint32_t& pktsize) } return ok ; } +#endif +void RsGxsTunnelStatusItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,status,"status") ; +} + +#ifdef TO_REMOVE bool RsGxsTunnelStatusItem::serialise(void *data, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -249,7 +323,23 @@ bool RsGxsTunnelStatusItem::serialise(void *data, uint32_t& pktsize) return ok; } +#endif +void RsGxsTunnelDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,unique_item_counter,"unique_item_counter") ; + RsTypeSerializer::serial_process(j,ctx,flags ,"flags") ; + RsTypeSerializer::serial_process(j,ctx,service_id ,"service_id") ; + + RsTypeSerializer::TlvMemBlock_proxy mem(data,data_size) ; + RsTypeSerializer::serial_process(j,ctx,mem,"data") ; +} +void RsGxsTunnelDataAckItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,unique_item_counter,"unique_item_counter") ; +} + +#ifdef TO_REMOVE bool RsGxsTunnelDataItem::serialise(void *dt, uint32_t& pktsize) { uint32_t tlvsize = serial_size() ; @@ -489,6 +579,7 @@ RsGxsTunnelStatusItem *RsGxsTunnelSerialiser::deserialise_RsGxsTunnelStatusItem( return item ; } +#endif diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.h b/libretroshare/src/gxstunnel/rsgxstunnelitems.h index 4da26da0e..1bec905c8 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.h +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.h @@ -60,10 +60,6 @@ class RsGxsTunnelItem: public RsItem virtual ~RsGxsTunnelItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0 ; - - virtual bool serialise(void *data,uint32_t& size) = 0 ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() = 0 ; // deserialise is handled using a constructor }; /*! @@ -81,10 +77,8 @@ public: virtual ~RsGxsTunnelDataItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint64_t unique_item_counter; // this allows to make the item unique uint32_t flags; // mainly NEEDS_HACK? @@ -103,10 +97,8 @@ class RsGxsTunnelStatusItem: public RsGxsTunnelItem RsGxsTunnelStatusItem(void *data,uint32_t size) ; // deserialization virtual ~RsGxsTunnelStatusItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t status ; }; @@ -120,12 +112,10 @@ class RsGxsTunnelDataAckItem: public RsGxsTunnelItem RsGxsTunnelDataAckItem(void *data,uint32_t size) ; // deserialization virtual ~RsGxsTunnelDataAckItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); - uint64_t unique_item_counter ; // unique identifier for that item + uint64_t unique_item_counter ; // unique identifier for that item }; @@ -139,10 +129,8 @@ class RsGxsTunnelDHPublicKeyItem: public RsGxsTunnelItem RsGxsTunnelDHPublicKeyItem(void *data,uint32_t size) ; // deserialization virtual ~RsGxsTunnelDHPublicKeyItem() ; - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); - virtual bool serialise(void *data,uint32_t& size) ; // Isn't it better that items can serialize themselves ? - virtual uint32_t serial_size() ; // deserialise is handled using a constructor + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); // Private data to DH public key item // @@ -157,24 +145,11 @@ class RsGxsTunnelDHPublicKeyItem: public RsGxsTunnelItem const RsGxsTunnelDHPublicKeyItem& operator=(const RsGxsTunnelDHPublicKeyItem&) { return *this ;} }; -class RsGxsTunnelSerialiser: public RsSerialType +class RsGxsTunnelSerialiser: public RsServiceSerializer { public: - RsGxsTunnelSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_GXS_TUNNEL) {} + RsGxsTunnelSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_GXS_TUNNEL) {} - virtual uint32_t size (RsItem *item) - { - return static_cast(item)->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - return static_cast(item)->serialise(data,*size) ; - } - RsItem *deserialise(void *data, uint32_t *pktsize); -private: - static RsGxsTunnelDataAckItem *deserialise_RsGxsTunnelDataAckItem (void *data, uint32_t size) ; - static RsGxsTunnelDataItem *deserialise_RsGxsTunnelDataItem (void *data, uint32_t size) ; - static RsGxsTunnelStatusItem *deserialise_RsGxsTunnelStatusItem (void *data, uint32_t size) ; - static RsGxsTunnelDHPublicKeyItem *deserialise_RsGxsTunnelDHPublicKeyItem(void *data, uint32_t size) ; + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const ; }; diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialization/rstypeserializer.h index 3ed0e9c16..a999a24d0 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialization/rstypeserializer.h @@ -339,15 +339,15 @@ class RsTypeSerializer } protected: - template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); - template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); - template static uint32_t serial_size(const T& /* member */); - template static void print_data(const std::string& name,const T& /* member */); + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const T& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, T& member); + template static uint32_t serial_size(const T& /* member */); + template static void print_data(const std::string& name,const T& /* member */); - template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, uint16_t type_id,const T& member); - template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset,uint16_t type_id, T& member); - template static uint32_t serial_size(uint16_t type_id,const T& /* member */); - template static void print_data(const std::string& name,uint16_t type_id,const T& /* member */); + template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, uint16_t type_id,const T& member); + template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset,uint16_t type_id, T& member); + template static uint32_t serial_size(uint16_t type_id,const T& /* member */); + template static void print_data(const std::string& name,uint16_t type_id,const T& /* member */); template static bool serialize (uint8_t data[], uint32_t size, uint32_t &offset, const t_RsGenericIdType& member); template static bool deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, t_RsGenericIdType& member); From e401b90e023d9cbc86fdbb58a5cbc5b396244f4f Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 30 Apr 2017 16:05:37 +0200 Subject: [PATCH 219/230] moved rsserializer and rstypeserializer to serialiser/ --- libretroshare/src/chat/rschatitems.cc | 2 +- libretroshare/src/chat/rschatitems.h | 2 +- .../src/file_sharing/rsfilelistitems.cc | 2 +- .../src/file_sharing/rsfilelistitems.h | 2 +- .../src/ft/ftturtlefiletransferitem.cc | 2 +- libretroshare/src/grouter/grouteritems.cc | 2 +- .../src/gxstunnel/rsgxstunnelitems.cc | 2 +- libretroshare/src/libretroshare.pro | 8 +- libretroshare/src/rsitems/rsbanlistitems.cc | 2 +- libretroshare/src/rsitems/rsbanlistitems.h | 2 +- libretroshare/src/rsitems/rsbwctrlitems.h | 4 +- libretroshare/src/rsitems/rsconfigitems.cc | 2 +- libretroshare/src/rsitems/rsconfigitems.h | 2 +- .../src/rsitems/rsdiscovery2items.cc | 2 +- libretroshare/src/rsitems/rsdiscovery2items.h | 2 +- .../src/rsitems/rsfiletransferitems.cc | 2 +- .../src/rsitems/rsfiletransferitems.h | 2 +- .../src/rsitems/rsgxschannelitems.cc | 2 +- libretroshare/src/rsitems/rsgxschannelitems.h | 2 +- libretroshare/src/rsitems/rsgxscircleitems.cc | 2 +- .../src/rsitems/rsgxscommentitems.cc | 2 +- libretroshare/src/rsitems/rsgxsforumitems.cc | 2 +- libretroshare/src/rsitems/rsgxsforumitems.h | 2 +- libretroshare/src/rsitems/rsgxsiditems.cc | 2 +- libretroshare/src/rsitems/rsgxsrecognitems.cc | 2 +- .../src/rsitems/rsgxsreputationitems.cc | 2 +- .../src/rsitems/rsgxsreputationitems.h | 2 +- libretroshare/src/rsitems/rsgxsupdateitems.cc | 2 +- libretroshare/src/rsitems/rshistoryitems.cc | 2 +- libretroshare/src/rsitems/rshistoryitems.h | 2 +- libretroshare/src/rsitems/rsitem.h | 2 +- libretroshare/src/rsitems/rsmsgitems.cc | 2 +- libretroshare/src/rsitems/rsnxsitems.cc | 2 +- libretroshare/src/rsitems/rsphotoitems.cc | 2 +- libretroshare/src/rsitems/rsphotoitems.h | 2 +- libretroshare/src/rsitems/rspluginitems.h | 2 +- libretroshare/src/rsitems/rsposteditems.cc | 2 +- libretroshare/src/rsitems/rsrttitems.cc | 2 +- libretroshare/src/rsitems/rsrttitems.h | 2 +- .../src/rsitems/rsserviceinfoitems.cc | 2 +- libretroshare/src/rsitems/rsstatusitems.h | 2 +- libretroshare/src/rsitems/rswikiitems.cc | 2 +- libretroshare/src/rsitems/rswireitems.cc | 2 +- .../rsserializer.cc | 4 +- .../rsserializer.h | 0 .../rstypeserializer.cc | 0 .../rstypeserializer.h | 2 +- .../src/serialization/serial_test.cc | 196 ------------------ libretroshare/src/turtle/rsturtleitem.cc | 2 +- libretroshare/src/turtle/rsturtleitem.h | 2 +- 50 files changed, 52 insertions(+), 248 deletions(-) rename libretroshare/src/{serialization => serialiser}/rsserializer.cc (98%) rename libretroshare/src/{serialization => serialiser}/rsserializer.h (100%) rename libretroshare/src/{serialization => serialiser}/rstypeserializer.cc (100%) rename libretroshare/src/{serialization => serialiser}/rstypeserializer.h (99%) delete mode 100644 libretroshare/src/serialization/serial_test.cc diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 06bb063a7..2b7dd67d8 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -29,7 +29,7 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #include "chat/rschatitems.h" diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index 06de87c7f..ddc0a2b86 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -27,7 +27,7 @@ #include "openssl/bn.h" #include "retroshare/rstypes.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #include "serialiser/rstlvkeys.h" #include "rsitems/rsserviceids.h" #include "rsitems/itempriorities.h" diff --git a/libretroshare/src/file_sharing/rsfilelistitems.cc b/libretroshare/src/file_sharing/rsfilelistitems.cc index 6934f29d2..7d91549d4 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.cc +++ b/libretroshare/src/file_sharing/rsfilelistitems.cc @@ -24,7 +24,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #include "file_sharing/rsfilelistitems.h" diff --git a/libretroshare/src/file_sharing/rsfilelistitems.h b/libretroshare/src/file_sharing/rsfilelistitems.h index 8e45ef251..51e40b9c3 100644 --- a/libretroshare/src/file_sharing/rsfilelistitems.h +++ b/libretroshare/src/file_sharing/rsfilelistitems.h @@ -35,7 +35,7 @@ #include "serialiser/rstlvkeys.h" #include "gxs/rsgxsdata.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" // These items have "flag type" numbers, but this is not used. diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index 3009fb87c..44722af4b 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -30,7 +30,7 @@ #include #include -#include +#include void RsTurtleFileMapRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { diff --git a/libretroshare/src/grouter/grouteritems.cc b/libretroshare/src/grouter/grouteritems.cc index 48da81548..c856132db 100644 --- a/libretroshare/src/grouter/grouteritems.cc +++ b/libretroshare/src/grouter/grouteritems.cc @@ -3,7 +3,7 @@ #include "serialiser/rstlvbase.h" #include "grouteritems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /**********************************************************************************************/ /* SERIALISER STUFF */ diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc index 5f14fe079..bb56e93cc 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc @@ -28,7 +28,7 @@ #include #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #include "util/rsprint.h" #include "util/rsmemory.h" diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index 2c503532a..f8ea1f6a7 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -770,11 +770,11 @@ SOURCES += gxstunnel/p3gxstunnel.cc \ gxstunnel/rsgxstunnelitems.cc # new serialization code -HEADERS += serialization/rsserializer.h \ - serialization/rstypeserializer.h +HEADERS += serialiser/rsserializer.h \ + serialiser/rstypeserializer.h -SOURCES += serialization/rsserializer.cc \ - serialization/rstypeserializer.cc +SOURCES += serialiser/rsserializer.cc \ + serialiser/rstypeserializer.cc # Identity Service HEADERS += retroshare/rsidentity.h \ diff --git a/libretroshare/src/rsitems/rsbanlistitems.cc b/libretroshare/src/rsitems/rsbanlistitems.cc index 85acfb96c..358d20961 100644 --- a/libretroshare/src/rsitems/rsbanlistitems.cc +++ b/libretroshare/src/rsitems/rsbanlistitems.cc @@ -26,7 +26,7 @@ #include "serialiser/rsbaseserial.h" #include "rsitems/rsbanlistitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsbanlistitems.h b/libretroshare/src/rsitems/rsbanlistitems.h index 836fe1b7e..e5660e55c 100644 --- a/libretroshare/src/rsitems/rsbanlistitems.h +++ b/libretroshare/src/rsitems/rsbanlistitems.h @@ -32,7 +32,7 @@ #include "rsitems/rsitem.h" #include "rsitems/itempriorities.h" #include "serialiser/rstlvbanlist.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #define RS_PKT_SUBTYPE_BANLIST_ITEM_deprecated 0x01 #define RS_PKT_SUBTYPE_BANLIST_CONFIG_ITEM_deprecated 0x02 diff --git a/libretroshare/src/rsitems/rsbwctrlitems.h b/libretroshare/src/rsitems/rsbwctrlitems.h index 570e0d87b..71ec641e1 100644 --- a/libretroshare/src/rsitems/rsbwctrlitems.h +++ b/libretroshare/src/rsitems/rsbwctrlitems.h @@ -32,8 +32,8 @@ #include "rsitems/rsserviceids.h" #include "rsitems/itempriorities.h" -#include "serialization/rsserializer.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rsserializer.h" +#include "serialiser/rstypeserializer.h" #define RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM 0x01 diff --git a/libretroshare/src/rsitems/rsconfigitems.cc b/libretroshare/src/rsitems/rsconfigitems.cc index 743e35871..15a8dd624 100644 --- a/libretroshare/src/rsitems/rsconfigitems.cc +++ b/libretroshare/src/rsitems/rsconfigitems.cc @@ -28,7 +28,7 @@ #include "rsitems/rsconfigitems.h" #include "retroshare/rspeers.h" // Needed for RsGroupInfo. -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** * #define RSSERIAL_DEBUG 1 * #define RSSERIAL_ERROR_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsconfigitems.h b/libretroshare/src/rsitems/rsconfigitems.h index bc4b9e824..d4ea41898 100644 --- a/libretroshare/src/rsitems/rsconfigitems.h +++ b/libretroshare/src/rsitems/rsconfigitems.h @@ -39,7 +39,7 @@ #include "serialiser/rstlvkeyvalue.h" #include "serialiser/rstlvaddrs.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" class RsGroupInfo; diff --git a/libretroshare/src/rsitems/rsdiscovery2items.cc b/libretroshare/src/rsitems/rsdiscovery2items.cc index f9f19270c..0d1d3a493 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.cc +++ b/libretroshare/src/rsitems/rsdiscovery2items.cc @@ -27,7 +27,7 @@ #include "rsitems/rsdiscovery2items.h" #include "serialiser/rsbaseserial.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #if 0 diff --git a/libretroshare/src/rsitems/rsdiscovery2items.h b/libretroshare/src/rsitems/rsdiscovery2items.h index ce30a2928..012ebe1b5 100644 --- a/libretroshare/src/rsitems/rsdiscovery2items.h +++ b/libretroshare/src/rsitems/rsdiscovery2items.h @@ -35,7 +35,7 @@ #include "rsitems/rsitem.h" #include "rsitems/itempriorities.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" const uint8_t RS_PKT_SUBTYPE_DISC_PGP_LIST = 0x01; const uint8_t RS_PKT_SUBTYPE_DISC_PGP_CERT = 0x02; diff --git a/libretroshare/src/rsitems/rsfiletransferitems.cc b/libretroshare/src/rsitems/rsfiletransferitems.cc index cd0ea088d..7579c9560 100644 --- a/libretroshare/src/rsitems/rsfiletransferitems.cc +++ b/libretroshare/src/rsitems/rsfiletransferitems.cc @@ -28,7 +28,7 @@ #include "serialiser/rstlvbase.h" #include "rsitems/rsfiletransferitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** * #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsfiletransferitems.h b/libretroshare/src/rsitems/rsfiletransferitems.h index b0ab0972a..85f6d5eab 100644 --- a/libretroshare/src/rsitems/rsfiletransferitems.h +++ b/libretroshare/src/rsitems/rsfiletransferitems.h @@ -34,7 +34,7 @@ #include "rsitems/rsserviceids.h" #include "rsitems/itempriorities.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" const uint8_t RS_PKT_SUBTYPE_FT_DATA_REQUEST = 0x01; const uint8_t RS_PKT_SUBTYPE_FT_DATA = 0x02; diff --git a/libretroshare/src/rsitems/rsgxschannelitems.cc b/libretroshare/src/rsitems/rsgxschannelitems.cc index 789357b4c..a8cc067b1 100644 --- a/libretroshare/src/rsitems/rsgxschannelitems.cc +++ b/libretroshare/src/rsitems/rsgxschannelitems.cc @@ -29,7 +29,7 @@ #include "serialiser/rstlvbase.h" #include "serialiser/rsbaseserial.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" RsItem *RsGxsChannelSerialiser::create_item(uint16_t service_id,uint8_t item_subtype) const { diff --git a/libretroshare/src/rsitems/rsgxschannelitems.h b/libretroshare/src/rsitems/rsgxschannelitems.h index b4caf5197..b0fc67987 100644 --- a/libretroshare/src/rsitems/rsgxschannelitems.h +++ b/libretroshare/src/rsitems/rsgxschannelitems.h @@ -37,7 +37,7 @@ #include "retroshare/rsgxschannels.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #include "util/rsdir.h" diff --git a/libretroshare/src/rsitems/rsgxscircleitems.cc b/libretroshare/src/rsitems/rsgxscircleitems.cc index a5937b5ab..40ae6cf5f 100644 --- a/libretroshare/src/rsitems/rsgxscircleitems.cc +++ b/libretroshare/src/rsitems/rsgxscircleitems.cc @@ -27,7 +27,7 @@ #include "rsgxscircleitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" //#define CIRCLE_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxscommentitems.cc b/libretroshare/src/rsitems/rsgxscommentitems.cc index 4f655cc13..407f64204 100644 --- a/libretroshare/src/rsitems/rsgxscommentitems.cc +++ b/libretroshare/src/rsitems/rsgxscommentitems.cc @@ -28,7 +28,7 @@ #include "rsgxscommentitems.h" #include "serialiser/rstlvbase.h" #include "serialiser/rsbaseserial.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" //#define GXSCOMMENT_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxsforumitems.cc b/libretroshare/src/rsitems/rsgxsforumitems.cc index 462f4fcf6..fb5b8f632 100644 --- a/libretroshare/src/rsitems/rsgxsforumitems.cc +++ b/libretroshare/src/rsitems/rsgxsforumitems.cc @@ -27,7 +27,7 @@ #include "rsgxsforumitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" //#define GXSFORUM_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxsforumitems.h b/libretroshare/src/rsitems/rsgxsforumitems.h index 8e8d2bc24..5ce8a84ee 100644 --- a/libretroshare/src/rsitems/rsgxsforumitems.h +++ b/libretroshare/src/rsitems/rsgxsforumitems.h @@ -31,7 +31,7 @@ #include "rsitems/rsserviceids.h" #include "rsitems/rsgxsitems.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #include "retroshare/rsgxsforums.h" diff --git a/libretroshare/src/rsitems/rsgxsiditems.cc b/libretroshare/src/rsitems/rsgxsiditems.cc index cb5ed324e..5bf55b549 100644 --- a/libretroshare/src/rsitems/rsgxsiditems.cc +++ b/libretroshare/src/rsitems/rsgxsiditems.cc @@ -31,7 +31,7 @@ #include "serialiser/rstlvstring.h" #include "util/rsstring.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #define GXSID_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxsrecognitems.cc b/libretroshare/src/rsitems/rsgxsrecognitems.cc index 100ede2ba..81b8d866b 100644 --- a/libretroshare/src/rsitems/rsgxsrecognitems.cc +++ b/libretroshare/src/rsitems/rsgxsrecognitems.cc @@ -24,7 +24,7 @@ */ #include "rsitems/rsgxsrecognitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.cc b/libretroshare/src/rsitems/rsgxsreputationitems.cc index 1a50bf9dc..2a559b052 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.cc +++ b/libretroshare/src/rsitems/rsgxsreputationitems.cc @@ -28,7 +28,7 @@ #include "serialiser/rsbaseserial.h" #include "rsitems/rsgxsreputationitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.h b/libretroshare/src/rsitems/rsgxsreputationitems.h index 7c841bd4e..d4134f745 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.h +++ b/libretroshare/src/rsitems/rsgxsreputationitems.h @@ -37,7 +37,7 @@ #include "retroshare/rsgxsifacetypes.h" #include "retroshare/rsreputations.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01 #define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated2 0x02 diff --git a/libretroshare/src/rsitems/rsgxsupdateitems.cc b/libretroshare/src/rsitems/rsgxsupdateitems.cc index 259cd1b4a..50f154cb2 100644 --- a/libretroshare/src/rsitems/rsgxsupdateitems.cc +++ b/libretroshare/src/rsitems/rsgxsupdateitems.cc @@ -23,7 +23,7 @@ * */ -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #include "serialiser/rsbaseserial.h" #include "rsgxsupdateitems.h" diff --git a/libretroshare/src/rsitems/rshistoryitems.cc b/libretroshare/src/rsitems/rshistoryitems.cc index 38f2f0254..3280f8eba 100644 --- a/libretroshare/src/rsitems/rshistoryitems.cc +++ b/libretroshare/src/rsitems/rshistoryitems.cc @@ -29,7 +29,7 @@ #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rshistoryitems.h b/libretroshare/src/rsitems/rshistoryitems.h index 56d12e559..04d3e9ca7 100644 --- a/libretroshare/src/rsitems/rshistoryitems.h +++ b/libretroshare/src/rsitems/rshistoryitems.h @@ -31,7 +31,7 @@ #include "rsitems/rsconfigitems.h" #include "retroshare/rstypes.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" /**************************************************************************/ diff --git a/libretroshare/src/rsitems/rsitem.h b/libretroshare/src/rsitems/rsitem.h index f7f6dae54..8dbda2fb3 100644 --- a/libretroshare/src/rsitems/rsitem.h +++ b/libretroshare/src/rsitems/rsitem.h @@ -2,7 +2,7 @@ #include "util/smallobject.h" #include "retroshare/rstypes.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" class RsItem: public RsMemoryManagement::SmallObject { diff --git a/libretroshare/src/rsitems/rsmsgitems.cc b/libretroshare/src/rsitems/rsmsgitems.cc index 20c98ad1b..09f305fc7 100644 --- a/libretroshare/src/rsitems/rsmsgitems.cc +++ b/libretroshare/src/rsitems/rsmsgitems.cc @@ -31,7 +31,7 @@ #include "rsitems/rsmsgitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsnxsitems.cc b/libretroshare/src/rsitems/rsnxsitems.cc index bfea43843..d6eb8b143 100644 --- a/libretroshare/src/rsitems/rsnxsitems.cc +++ b/libretroshare/src/rsitems/rsnxsitems.cc @@ -2,7 +2,7 @@ #include "util/rsprint.h" #include -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*** * #define RSSERIAL_DEBUG 1 diff --git a/libretroshare/src/rsitems/rsphotoitems.cc b/libretroshare/src/rsitems/rsphotoitems.cc index 9c2f217d9..9c9ff2d02 100644 --- a/libretroshare/src/rsitems/rsphotoitems.cc +++ b/libretroshare/src/rsitems/rsphotoitems.cc @@ -28,7 +28,7 @@ #include "rsitems/rsphotoitems.h" #include "serialiser/rstlvbinary.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #define GXS_PHOTO_SERIAL_DEBUG diff --git a/libretroshare/src/rsitems/rsphotoitems.h b/libretroshare/src/rsitems/rsphotoitems.h index cbaf29700..3819edb88 100644 --- a/libretroshare/src/rsitems/rsphotoitems.h +++ b/libretroshare/src/rsitems/rsphotoitems.h @@ -32,7 +32,7 @@ #include "rsitems/rsgxsitems.h" #include "serialiser/rsserial.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" #include "retroshare/rsphoto.h" diff --git a/libretroshare/src/rsitems/rspluginitems.h b/libretroshare/src/rsitems/rspluginitems.h index d21533c68..f5ff61321 100644 --- a/libretroshare/src/rsitems/rspluginitems.h +++ b/libretroshare/src/rsitems/rspluginitems.h @@ -29,7 +29,7 @@ #include "rsitems/rsitem.h" #include "rsitems/rsconfigitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" const uint8_t RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET = 0x01 ; diff --git a/libretroshare/src/rsitems/rsposteditems.cc b/libretroshare/src/rsitems/rsposteditems.cc index 652abed05..378153df3 100644 --- a/libretroshare/src/rsitems/rsposteditems.cc +++ b/libretroshare/src/rsitems/rsposteditems.cc @@ -25,7 +25,7 @@ */ #include "rsitems/rsposteditems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" void RsGxsPostedPostItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { diff --git a/libretroshare/src/rsitems/rsrttitems.cc b/libretroshare/src/rsitems/rsrttitems.cc index 2ab7292e5..c4c499f79 100644 --- a/libretroshare/src/rsitems/rsrttitems.cc +++ b/libretroshare/src/rsitems/rsrttitems.cc @@ -32,7 +32,7 @@ #include -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /*************************************************************************/ diff --git a/libretroshare/src/rsitems/rsrttitems.h b/libretroshare/src/rsitems/rsrttitems.h index 8f635c3b9..35cf85bae 100644 --- a/libretroshare/src/rsitems/rsrttitems.h +++ b/libretroshare/src/rsitems/rsrttitems.h @@ -33,7 +33,7 @@ #include "rsitems/itempriorities.h" #include "serialiser/rsserial.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" /**************************************************************************/ diff --git a/libretroshare/src/rsitems/rsserviceinfoitems.cc b/libretroshare/src/rsitems/rsserviceinfoitems.cc index 35ba6d02d..d0d2070ab 100644 --- a/libretroshare/src/rsitems/rsserviceinfoitems.cc +++ b/libretroshare/src/rsitems/rsserviceinfoitems.cc @@ -24,7 +24,7 @@ */ #include "serialiser/rsbaseserial.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #include "rsitems/rsserviceinfoitems.h" /*** diff --git a/libretroshare/src/rsitems/rsstatusitems.h b/libretroshare/src/rsitems/rsstatusitems.h index 8c0316a9b..8a8a946b7 100644 --- a/libretroshare/src/rsitems/rsstatusitems.h +++ b/libretroshare/src/rsitems/rsstatusitems.h @@ -30,7 +30,7 @@ #include "rsitems/itempriorities.h" #include "rsitems/rsitem.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" /**************************************************************************/ diff --git a/libretroshare/src/rsitems/rswikiitems.cc b/libretroshare/src/rsitems/rswikiitems.cc index 8da92ab58..ec42e14f0 100644 --- a/libretroshare/src/rsitems/rswikiitems.cc +++ b/libretroshare/src/rsitems/rswikiitems.cc @@ -27,7 +27,7 @@ #include "rsitems/rswikiitems.h" #include "serialiser/rstlvbase.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #define GXSID_DEBUG 1 diff --git a/libretroshare/src/rsitems/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc index 988189b60..55a56a803 100644 --- a/libretroshare/src/rsitems/rswireitems.cc +++ b/libretroshare/src/rsitems/rswireitems.cc @@ -27,7 +27,7 @@ #include "rswireitems.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" #define WIRE_DEBUG 1 diff --git a/libretroshare/src/serialization/rsserializer.cc b/libretroshare/src/serialiser/rsserializer.cc similarity index 98% rename from libretroshare/src/serialization/rsserializer.cc rename to libretroshare/src/serialiser/rsserializer.cc index f9619e839..bc1c9f92a 100644 --- a/libretroshare/src/serialization/rsserializer.cc +++ b/libretroshare/src/serialiser/rsserializer.cc @@ -3,8 +3,8 @@ #include "rsitems/rsitem.h" #include "util/rsprint.h" -#include "serialization/rsserializer.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rsserializer.h" +#include "serialiser/rstypeserializer.h" const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_NONE ( 0x0000 ); const SerializationFlags RsGenericSerializer::SERIALIZATION_FLAG_CONFIG ( 0x0001 ); diff --git a/libretroshare/src/serialization/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h similarity index 100% rename from libretroshare/src/serialization/rsserializer.h rename to libretroshare/src/serialiser/rsserializer.h diff --git a/libretroshare/src/serialization/rstypeserializer.cc b/libretroshare/src/serialiser/rstypeserializer.cc similarity index 100% rename from libretroshare/src/serialization/rstypeserializer.cc rename to libretroshare/src/serialiser/rstypeserializer.cc diff --git a/libretroshare/src/serialization/rstypeserializer.h b/libretroshare/src/serialiser/rstypeserializer.h similarity index 99% rename from libretroshare/src/serialization/rstypeserializer.h rename to libretroshare/src/serialiser/rstypeserializer.h index a999a24d0..6ad237be9 100644 --- a/libretroshare/src/serialization/rstypeserializer.h +++ b/libretroshare/src/serialiser/rstypeserializer.h @@ -7,7 +7,7 @@ #include "retroshare/rsflags.h" #include "retroshare/rsids.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" class RsTypeSerializer diff --git a/libretroshare/src/serialization/serial_test.cc b/libretroshare/src/serialization/serial_test.cc deleted file mode 100644 index a8d89a25f..000000000 --- a/libretroshare/src/serialization/serial_test.cc +++ /dev/null @@ -1,196 +0,0 @@ -// COMPILE_LINE: g++ -g serial_test.cc -I.. -o serial_test ../lib/libretroshare.a -lssl -lcrypto -lstdc++ -lpthread -// -// - -#include -#include - -#include "util/rsmemory.h" -#include "util/rsprint.h" -#include "serialiser/rsserial.h" - -#include "rsserializer.h" -#include "rstypeserializer.h" - -#define GET_VARIABLE_NAME(str) #str - -static const uint16_t RS_SERVICE_TYPE_TEST = 0xffff; -static const uint8_t RS_ITEM_SUBTYPE_TEST1 = 0x01 ; - -// Template serialization of RsTypeSerialiser::serial_process() for unknown/new types -// Here we do it for std::set as an example. -// -template<> uint32_t RsTypeSerializer::serial_size(const std::set& s) -{ - return s.size() * 4 + 4 ; -} -template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, const std::set& member) -{ - uint32_t tlvsize = serial_size(member) ; - bool ok = true ; - uint32_t offset_save = offset ; - - if(tlvsize + offset > size) - { - std::cerr << "RsTypeSerializer::serialize: error. tlvsize+offset > size, where tlvsize=" << tlvsize << ", offset=" << offset << ", size=" << size << std::endl; - return false ; - } - - ok = ok && RsTypeSerializer::serialize(data,size,offset,member.size()) ; - - for(std::set::const_iterator it(member.begin());it!=member.end();++it) - ok = ok && RsTypeSerializer::serialize(data,size,offset,*it) ; - - if(!ok) - { - std::cerr << "(EE) Cannot serialize std::set" << std::endl; - offset = offset_save ; // return the data in the same condition - } - return ok ; -} - -template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, std::set& member) -{ - bool ok = true ; - uint32_t n = 0 ; - uint32_t offset_save = offset ; - member.clear(); - - ok = ok && RsTypeSerializer::deserialize(data,size,offset,n); - - for(uint32_t i=0;i" << std::endl; - offset = offset_save ; // return the data in the same condition - } - return ok; -} - -template<> void RsTypeSerializer::print_data(const std::string& s,const std::set& set) -{ - std::cerr << " [set] " << s << " : set of size " << set.size() << std::endl; -} - -// New item class. This class needs to define: -// - a serial_process method that tells which members to serialize -// - overload the clear() and print() methods of RsItem -// -class RsTestItem: public RsItem -{ - public: - RsTestItem() : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_TEST,RS_ITEM_SUBTYPE_TEST1) - { - str = "test string"; - ts = time(NULL) ; - - int_set.push_back(lrand48()) ; - int_set.push_back(lrand48()) ; - int_set.push_back(lrand48()) ; - } - - // Derived from RsItem - // - virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx) - { - RsTypeSerializer::TlvString_proxy tt(str,TLV_TYPE_STR_DESCR) ; - - RsTypeSerializer::serial_process(j,ctx,ts ,GET_VARIABLE_NAME(ts) ) ; - RsTypeSerializer::serial_process(j,ctx,tt ,GET_VARIABLE_NAME(str) ) ; - RsTypeSerializer::serial_process(j,ctx,int_set,GET_VARIABLE_NAME(int_set) ) ; - } - - // Derived from RsItem, because they are pure virtuals. Normally print() should disappear soon. - // - virtual void clear() {} - virtual std::ostream& print(std::ostream&,uint16_t) {} - - private: - std::string str ; - uint64_t ts ; - std::vector int_set ; - - friend int main(int argc,char *argv[]); -}; - -// New user-defined serializer class. -// The only required member is the create_item() method, which creates the correct RsItem -// that corresponds to a specific (service,subtype) couple. -// -class RsTestSerializer: public RsSerializer -{ - public: - RsTestSerializer() : RsSerializer(RS_SERVICE_TYPE_TEST) {} - - virtual RsItem *create_item(uint16_t service_id,uint8_t subtype) - { - if(service_id != RS_SERVICE_TYPE_TEST) - return NULL ; - - switch(subtype) - { - case RS_ITEM_SUBTYPE_TEST1: return new RsTestItem(); - - default: - return NULL ; - } - } -}; - -// Methods to check the equality of items. -// -void check(const std::string& s1,const std::string& s2) { assert(s1 == s2) ; } -void check(const uint64_t& s1,const uint64_t& s2) { assert(s1 == s2) ; } -void check(const std::set& s1,const std::set& s2) { assert(s1 == s2) ; } -void check(const std::vector& s1,const std::vector& s2) { assert(s1 == s2) ; } - -int main(int argc,char *argv[]) -{ - try - { - RsTestItem t1 ; - - uint32_t size = RsTestSerializer().size(&t1); - - std::cerr << "t1.serial_size() = " << size << std::endl; - - // Allocate some memory to serialise to - // - RsTemporaryMemory mem1(size); - - std::cerr << "Item to be serialized:" << std::endl; - - RsTestSerializer().print(&t1) ; - RsTestSerializer().serialise(&t1,mem1,&size); - - std::cerr << "Serialized t1: " << RsUtil::BinToHex(mem1,mem1.size()) << std::endl; - - // Now deserialise into a new item - // - RsItem *t2 = RsTestSerializer().deserialise(mem1,&size); - - // make sure t1 is equal to t2 - // - check(t1.str,dynamic_cast(t2)->str) ; - check(t1.ts,dynamic_cast(t2)->ts) ; - check(t1.int_set,dynamic_cast(t2)->int_set) ; - - delete t2; - - return 0; - } - catch(std::exception& e) - { - std::cerr << "Exception caught: " << e.what() << std::endl; - return 1; - } -} - - diff --git a/libretroshare/src/turtle/rsturtleitem.cc b/libretroshare/src/turtle/rsturtleitem.cc index 2455c98e5..35b250117 100644 --- a/libretroshare/src/turtle/rsturtleitem.cc +++ b/libretroshare/src/turtle/rsturtleitem.cc @@ -6,7 +6,7 @@ #include "rsturtleitem.h" #include "turtleclientservice.h" -#include "serialization/rstypeserializer.h" +#include "serialiser/rstypeserializer.h" //#define P3TURTLE_DEBUG // -----------------------------------------------------------------------------------// diff --git a/libretroshare/src/turtle/rsturtleitem.h b/libretroshare/src/turtle/rsturtleitem.h index 8a8a1e49c..78f6155d8 100644 --- a/libretroshare/src/turtle/rsturtleitem.h +++ b/libretroshare/src/turtle/rsturtleitem.h @@ -13,7 +13,7 @@ #include "retroshare/rstypes.h" #include "turtle/turtletypes.h" -#include "serialization/rsserializer.h" +#include "serialiser/rsserializer.h" const uint8_t RS_TURTLE_SUBTYPE_STRING_SEARCH_REQUEST = 0x01 ; const uint8_t RS_TURTLE_SUBTYPE_SEARCH_RESULT = 0x02 ; From 14076de1e011212eff4f206cd79abf4fde47012f Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 30 Apr 2017 19:17:44 +0200 Subject: [PATCH 220/230] moved code of rsservicerserialiser into rsserializer.h/cc and renamed it into RsRawSerializer --- libretroshare/src/pqi/pqipersongrp.cc | 4 +- libretroshare/src/pqi/pqisslpersongrp.cc | 6 +- libretroshare/src/serialiser/rsserial.h | 19 +-- libretroshare/src/serialiser/rsserializer.cc | 73 +++++++++ libretroshare/src/serialiser/rsserializer.h | 150 +++++++++++++++++- .../src/serialiser/rsserviceserialiser.cc | 74 --------- .../src/serialiser/rsserviceserialiser.h | 10 -- .../src/serialiser/rstypeserializer.cc | 5 +- 8 files changed, 230 insertions(+), 111 deletions(-) diff --git a/libretroshare/src/pqi/pqipersongrp.cc b/libretroshare/src/pqi/pqipersongrp.cc index a30eb2738..dd9e645a3 100644 --- a/libretroshare/src/pqi/pqipersongrp.cc +++ b/libretroshare/src/pqi/pqipersongrp.cc @@ -699,7 +699,7 @@ pqiperson * pqipersongrpDummy::locked_createPerson(const RsPeerId& id, pqilisten NetBinDummy *d1 = new NetBinDummy(pqip, id, PQI_CONNECT_TCP); RsSerialiser *rss = new RsSerialiser(); - rss->addSerialType(new RsServiceSerialiser()); + rss->addSerialType(new RsRawSerialiser()); pqiconnect *pqic = new pqiconnect(pqip, rss, d1); @@ -709,7 +709,7 @@ pqiperson * pqipersongrpDummy::locked_createPerson(const RsPeerId& id, pqilisten NetBinDummy *d2 = new NetBinDummy(pqip, id, PQI_CONNECT_UDP); RsSerialiser *rss2 = new RsSerialiser(); - rss2->addSerialType(new RsServiceSerialiser()); + rss2->addSerialType(new RsRawSerialiser()); pqiconnect *pqic2 = new pqiconnect(pqip, rss2, d2); diff --git a/libretroshare/src/pqi/pqisslpersongrp.cc b/libretroshare/src/pqi/pqisslpersongrp.cc index a1173fd93..ad6ad098c 100644 --- a/libretroshare/src/pqi/pqisslpersongrp.cc +++ b/libretroshare/src/pqi/pqisslpersongrp.cc @@ -87,7 +87,7 @@ pqiperson * pqisslpersongrp::locked_createPerson(const RsPeerId& id, pqilistener RsSerialiser *rss = new RsSerialiser(); - rss->addSerialType(new RsServiceSerialiser()); + rss->addSerialType(new RsRawSerialiser()); pqiconnect *pqisc = new pqiconnect(pqip, rss, pqis); @@ -141,7 +141,7 @@ pqiperson * pqisslpersongrp::locked_createPerson(const RsPeerId& id, pqilistener ssl_tunnels[id] = pqis ; // keeps for getting crypt info per peer. RsSerialiser *rss = new RsSerialiser(); - rss->addSerialType(new RsServiceSerialiser()); + rss->addSerialType(new RsRawSerialiser()); pqiconnect *pqisc = new pqiconnect(pqip, rss, pqis); @@ -151,7 +151,7 @@ pqiperson * pqisslpersongrp::locked_createPerson(const RsPeerId& id, pqilistener pqissludp *pqius = new pqissludp(pqip, mLinkMgr); RsSerialiser *rss2 = new RsSerialiser(); - rss2->addSerialType(new RsServiceSerialiser()); + rss2->addSerialType(new RsRawSerialiser()); pqiconnect *pqiusc = new pqiconnect(pqip, rss2, pqius); diff --git a/libretroshare/src/serialiser/rsserial.h b/libretroshare/src/serialiser/rsserial.h index 248c0a3bc..206f69608 100644 --- a/libretroshare/src/serialiser/rsserial.h +++ b/libretroshare/src/serialiser/rsserial.h @@ -65,24 +65,7 @@ const uint8_t RS_PKT_CLASS_CONFIG = 0x02; const uint8_t RS_PKT_SUBTYPE_DEFAULT = 0x01; /* if only one subtype */ class RsItem ; - -class RsSerialType -{ - public: - RsSerialType(uint32_t t); /* only uses top 24bits */ - RsSerialType(uint8_t ver, uint8_t cls, uint8_t t); - RsSerialType(uint8_t ver, uint16_t service); - -virtual ~RsSerialType(); - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - -uint32_t PacketId() const; - private: -uint32_t type; -}; +class RsSerialType ; class RsSerialiser diff --git a/libretroshare/src/serialiser/rsserializer.cc b/libretroshare/src/serialiser/rsserializer.cc index bc1c9f92a..ef85008aa 100644 --- a/libretroshare/src/serialiser/rsserializer.cc +++ b/libretroshare/src/serialiser/rsserializer.cc @@ -139,4 +139,77 @@ void RsGenericSerializer::print(RsItem *item) std::cerr << "******************************" << std::endl; } +uint32_t RsRawSerialiser::size(RsItem *i) +{ + RsRawItem *item = dynamic_cast(i); + + if (item) + { + return item->getRawLength(); + } + return 0; +} + +/* serialise the data to the buffer */ +bool RsRawSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) +{ + RsRawItem *item = dynamic_cast(i); + if (!item) + { + return false; + } + + #ifdef RSSERIAL_DEBUG + std::cerr << "RsRawSerialiser::serialise() serializing raw item. pktsize : " << *pktsize; + #endif + + uint32_t tlvsize = item->getRawLength(); + #ifdef RSSERIAL_DEBUG + std::cerr << "tlvsize : " << tlvsize << std::endl; + #endif + + if (*pktsize < tlvsize) + return false; /* not enough space */ + + if (tlvsize > getRsPktMaxSize()) + { + std::cerr << "(EE) Serialised packet is too big. Maximum allowed size is " << getRsPktMaxSize() << ". Serialised size is " << tlvsize << ". Please tune your service to correctly split packets" << std::endl; + return false; /* packet too big */ + } + + *pktsize = tlvsize; + + /* its serialised already!!! */ + memcpy(data, item->getRawData(), tlvsize); + + return true; +} + +RsItem *RsRawSerialiser::deserialise(void *data, uint32_t *pktsize) +{ + /* get the type and size */ + uint32_t rstype = getRsItemId(data); + uint32_t rssize = getRsItemSize(data); + + if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) + { + return NULL; /* wrong type */ + } + + if (*pktsize < rssize) /* check size */ + return NULL; /* not enough data */ + + if (rssize > getRsPktMaxSize()) + return NULL; /* packet too big */ + + /* set the packet length */ + *pktsize = rssize; + + RsRawItem *item = new RsRawItem(rstype, rssize); + void *item_data = item->getRawData(); + + memcpy(item_data, data, rssize); + + return item; +} diff --git a/libretroshare/src/serialiser/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h index 2bea8d23f..639c75806 100644 --- a/libretroshare/src/serialiser/rsserializer.h +++ b/libretroshare/src/serialiser/rsserializer.h @@ -1,5 +1,124 @@ #pragma once +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Retroshare Serialization code // +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Classes +// ======= +// +// RsSerialiser ----------------+ std::map +// +// RsSerialType +// | +// +----------- RsRawSerializer +// | +// +----------- RsGenericSerializer +// | +// +----------- RsConfigSerializer +// | | +// | +----------- Specific config serializers +// | +----------- ... +// | +// +----------- RsServiceSerializer +// | +// +----------- Specific service serializers +// +----------- ... +// +----------- ... +// +// +// Steps to derive a serializer for a new service: +// ============================================== +// +// 1 - create a serializer class, and overload create_item() to create a new item of your own service for each item type constant: +// +// class MyServiceSerializer: public RsServiceSerializer +// { +// MyServiceSerializer() : RsServiceSerializer(MY_SERVICE_IDENTIFIER) {} +// +// RsItem *create_item(uint16_t service,uint8_t item_subtype) +// { +// if(service != MY_SERVICE_IDENTIFIER) return NULL ; +// +// switch(item_subtype) +// { +// case MY_ITEM_SUBTYPE_01: return new MyServiceItem(); +// default: +// return NULL ; +// } +// } +// } +// +// 2 - create your own items, and overload serial_process in order to define the serialized structure: +// +// class MyServiceItem: public RsItem +// { +// virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +// { +// RsTypeSerializer::serial_process (j,ctx,count,"count") ; // uint32_t is not really needed here, except for explicitly avoiding int types convertion +// RsTypeSerializer::serial_process (j,ctx,update_times,"update_times") ; // will serialize the map and its content +// RsTypeSerializer::serial_process(j,ctx,key,"key") ; // note the explicit call to TlvItem +// RsTypeSerializer::serial_process (j,ctx,dh_key,"dh_key") ; // template will automatically require serialise/deserialise/size/print_data for your type +// } +// +// private: +// uint32_t count ; // example of an int type. All int sizes are supported +// std::map update_times ; // example of a std::map. All std containers are supported. +// RsTlvSecurityKey key ; // example of a TlvItem class. +// BIGNUM *dh_key; // example of a class that needs its own serializer (see below) +// }; +// +// Some types may not be already handled by RsTypeSerializer, so in this case, you need to specialise the template for your own type. But this is quite unlikely to +// happen. In most cases, for instance in your structure types, serialization is directly done by calling RsTypeSerializer::serial_process() on each member of the type. +// In case you really need a specific serialization for soe particular type, here is how to do it, with the example of BIGNUM* (a crypto primitive): +// +// template<> bool RsTypeSerializer::serialize(uint8_t data[], uint32_t size, uint32_t &offset, BIGNUM * const & member) +// { +// uint32_t s = BN_num_bytes(member) ; +// +// if(size < offset + 4 + s) +// return false ; +// +// bool ok = true ; +// ok &= setRawUInt32(data, size, &offset, s); +// +// BN_bn2bin(member,&((unsigned char *)data)[offset]) ; +// offset += s ; +// +// return ok; +// } +// template<> bool RsTypeSerializer::deserialize(const uint8_t data[], uint32_t size, uint32_t &offset, BIGNUM *& member) +// { +// uint32_t s=0 ; +// bool ok = true ; +// ok &= getRawUInt32(data, size, &offset, &s); +// +// if(s > size || size - s < offset) +// return false ; +// +// member = BN_bin2bn(&((unsigned char *)data)[offset],s,NULL) ; +// offset += s ; +// +// return ok; +// } +// template<> uint32_t RsTypeSerializer::serial_size(BIGNUM * const & member) +// { +// return 4 + BN_num_bytes(member) ; +// } +// template<> void RsTypeSerializer::print_data(const std::string& name,BIGNUM * const & /* member */) +// { +// std::cerr << "[BIGNUM] : " << name << std::endl; +// } +// +// 3 - in your service, overload the serialiser declaration to add your own: +// +// MyService::MyService() +// { +// addSerialType(new MyServiceSerializer()) ; +// } +// +// 4 - in your service, recieve and send items by calling recvItem() and sendItem() respectively. +// #include #include #include @@ -12,6 +131,36 @@ class RsItem ; #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " +class RsSerialType +{ +public: + RsSerialType(uint32_t t); /* only uses top 24bits */ + RsSerialType(uint8_t ver, uint8_t cls, uint8_t t); + RsSerialType(uint8_t ver, uint16_t service); + + virtual ~RsSerialType(); + + virtual uint32_t size(RsItem *)=0; + virtual bool serialise (RsItem *item, void *data, uint32_t *size)=0; + virtual RsItem * deserialise(void *data, uint32_t *size)=0; + + uint32_t PacketId() const; +private: + uint32_t type; +}; + + +class RsRawSerialiser: public RsSerialType +{ + public: + RsRawSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, 0, 0) {} + virtual ~RsRawSerialiser() { } + + virtual uint32_t size(RsItem *); + virtual bool serialise (RsItem *item, void *data, uint32_t *size); + virtual RsItem * deserialise(void *data, uint32_t *size); +}; + class RsGenericSerializer: public RsSerialType { public: @@ -109,4 +258,3 @@ public: - diff --git a/libretroshare/src/serialiser/rsserviceserialiser.cc b/libretroshare/src/serialiser/rsserviceserialiser.cc index 0c953fec3..abdd3e64f 100644 --- a/libretroshare/src/serialiser/rsserviceserialiser.cc +++ b/libretroshare/src/serialiser/rsserviceserialiser.cc @@ -26,78 +26,4 @@ #include "rsitems/rsitem.h" #include "rsserviceserialiser.h" -uint32_t RsServiceSerialiser::size(RsItem *i) -{ - RsRawItem *item = dynamic_cast(i); - - if (item) - { - return item->getRawLength(); - } - return 0; -} - -/* serialise the data to the buffer */ -bool RsServiceSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsRawItem *item = dynamic_cast(i); - if (!item) - { - return false; - } - - #ifdef RSSERIAL_DEBUG - std::cerr << "RsServiceSerialiser::serialise() serializing raw item. pktsize : " << *pktsize; - #endif - - uint32_t tlvsize = item->getRawLength(); - #ifdef RSSERIAL_DEBUG - std::cerr << "tlvsize : " << tlvsize << std::endl; - #endif - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - if (tlvsize > getRsPktMaxSize()) - { - std::cerr << "(EE) Serialised packet is too big. Maximum allowed size is " << getRsPktMaxSize() << ". Serialised size is " << tlvsize << ". Please tune your service to correctly split packets" << std::endl; - return false; /* packet too big */ - } - - *pktsize = tlvsize; - - /* its serialised already!!! */ - memcpy(data, item->getRawData(), tlvsize); - - return true; -} - -RsItem *RsServiceSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - if (rssize > getRsPktMaxSize()) - return NULL; /* packet too big */ - - /* set the packet length */ - *pktsize = rssize; - - RsRawItem *item = new RsRawItem(rstype, rssize); - void *item_data = item->getRawData(); - - memcpy(item_data, data, rssize); - - return item; -} - diff --git a/libretroshare/src/serialiser/rsserviceserialiser.h b/libretroshare/src/serialiser/rsserviceserialiser.h index 9bc7d728d..7c00ee3c0 100644 --- a/libretroshare/src/serialiser/rsserviceserialiser.h +++ b/libretroshare/src/serialiser/rsserviceserialiser.h @@ -27,14 +27,4 @@ #include "rsserial.h" -class RsServiceSerialiser: public RsSerialType -{ - public: - RsServiceSerialiser() :RsSerialType(RS_PKT_VERSION_SERVICE, 0, 0) { } - virtual ~RsServiceSerialiser() { } - - virtual uint32_t size(RsItem *); - virtual bool serialise (RsItem *item, void *data, uint32_t *size); - virtual RsItem * deserialise(void *data, uint32_t *size); -}; diff --git a/libretroshare/src/serialiser/rstypeserializer.cc b/libretroshare/src/serialiser/rstypeserializer.cc index 64ba46f68..fab8c7b2e 100644 --- a/libretroshare/src/serialiser/rstypeserializer.cc +++ b/libretroshare/src/serialiser/rstypeserializer.cc @@ -1,6 +1,5 @@ -#include "serialization/rsserializer.h" -#include "serialization/rstypeserializer.h" - +#include "serialiser/rsserializer.h" +#include "serialiser/rstypeserializer.h" #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvkeys.h" From 24c7c38016efd71f1f1a232c189173ef96250ce2 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 30 Apr 2017 20:08:30 +0200 Subject: [PATCH 221/230] removed old file rssrviceserialiser.h/cc --- libretroshare/src/libretroshare.pro | 2 -- libretroshare/src/pqi/pqipersongrp.cc | 2 +- libretroshare/src/pqi/pqisslpersongrp.cc | 2 +- libretroshare/src/serialiser/rsserializer.h | 8 ++++- .../src/serialiser/rsserviceserialiser.cc | 29 ------------------ .../src/serialiser/rsserviceserialiser.h | 30 ------------------- 6 files changed, 9 insertions(+), 64 deletions(-) delete mode 100644 libretroshare/src/serialiser/rsserviceserialiser.cc delete mode 100644 libretroshare/src/serialiser/rsserviceserialiser.h diff --git a/libretroshare/src/libretroshare.pro b/libretroshare/src/libretroshare.pro index f8ea1f6a7..dce14eafd 100644 --- a/libretroshare/src/libretroshare.pro +++ b/libretroshare/src/libretroshare.pro @@ -456,7 +456,6 @@ HEADERS += rsitems/rsitem.h \ rsitems/itempriorities.h \ serialiser/rsbaseserial.h \ rsitems/rsfiletransferitems.h \ - serialiser/rsserviceserialiser.h \ rsitems/rsconfigitems.h \ rsitems/rshistoryitems.h \ rsitems/rsmsgitems.h \ @@ -609,7 +608,6 @@ SOURCES += plugins/pluginmanager.cc \ SOURCES += serialiser/rsbaseserial.cc \ rsitems/rsfiletransferitems.cc \ - serialiser/rsserviceserialiser.cc \ rsitems/rsconfigitems.cc \ rsitems/rshistoryitems.cc \ rsitems/rsmsgitems.cc \ diff --git a/libretroshare/src/pqi/pqipersongrp.cc b/libretroshare/src/pqi/pqipersongrp.cc index dd9e645a3..a8afa2b84 100644 --- a/libretroshare/src/pqi/pqipersongrp.cc +++ b/libretroshare/src/pqi/pqipersongrp.cc @@ -27,7 +27,7 @@ #include "pqi/p3linkmgr.h" #include "util/rsdebug.h" #include "util/rsprint.h" -#include "serialiser/rsserviceserialiser.h" +#include "serialiser/rsserializer.h" #include diff --git a/libretroshare/src/pqi/pqisslpersongrp.cc b/libretroshare/src/pqi/pqisslpersongrp.cc index ad6ad098c..3670fb5fe 100644 --- a/libretroshare/src/pqi/pqisslpersongrp.cc +++ b/libretroshare/src/pqi/pqisslpersongrp.cc @@ -23,7 +23,7 @@ * */ -#include "serialiser/rsserviceserialiser.h" +#include "serialiser/rsserializer.h" #include "util/rsdebug.h" #include "pqi/pqisslpersongrp.h" diff --git a/libretroshare/src/serialiser/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h index 639c75806..4559b6582 100644 --- a/libretroshare/src/serialiser/rsserializer.h +++ b/libretroshare/src/serialiser/rsserializer.h @@ -117,7 +117,13 @@ // addSerialType(new MyServiceSerializer()) ; // } // -// 4 - in your service, recieve and send items by calling recvItem() and sendItem() respectively. +// If needed, you may serialize your own items by calling: +// +// uint32_t size = MySerializer().size(item) ; +// uint8_t *data = (uint8_t*)malloc(size); +// MySerializer().serialise(item,data,size) ; +// +// 4 - in your service, receive and send items by calling recvItem() and sendItem() respectively. // #include #include diff --git a/libretroshare/src/serialiser/rsserviceserialiser.cc b/libretroshare/src/serialiser/rsserviceserialiser.cc deleted file mode 100644 index abdd3e64f..000000000 --- a/libretroshare/src/serialiser/rsserviceserialiser.cc +++ /dev/null @@ -1,29 +0,0 @@ -/* - * libretroshare/src/serialiser: rsserviceserialiser.cc - * - * 3P/PQI network interface for RetroShare. - * - * Copyright 2013-2013 by Cyril Soler & Robert Fernie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#include "rsitems/rsitem.h" -#include "rsserviceserialiser.h" - - diff --git a/libretroshare/src/serialiser/rsserviceserialiser.h b/libretroshare/src/serialiser/rsserviceserialiser.h deleted file mode 100644 index 7c00ee3c0..000000000 --- a/libretroshare/src/serialiser/rsserviceserialiser.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * libretroshare/src/serialiser: rsserviceserialiser.h - * - * 3P/PQI network interface for RetroShare. - * - * Copyright 2013-2013 by Cyril Soler & Robert Fernie - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License Version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA. - * - * Please report all bugs and problems to "retroshare@lunamutt.com". - * - */ - -#pragma once - -#include "rsserial.h" - - From 16b8947af134da32be7a0a33e5bc5efe2d5ebe90 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 30 Apr 2017 20:31:43 +0200 Subject: [PATCH 222/230] improved serializer documentation --- libretroshare/src/serialiser/rsserializer.cc | 25 ++++++++++++++ libretroshare/src/serialiser/rsserializer.h | 33 +++++++++++++++++++ .../src/serialiser/rstypeserializer.cc | 24 ++++++++++++++ .../src/serialiser/rstypeserializer.h | 24 ++++++++++++++ 4 files changed, 106 insertions(+) diff --git a/libretroshare/src/serialiser/rsserializer.cc b/libretroshare/src/serialiser/rsserializer.cc index ef85008aa..ea6bdd33c 100644 --- a/libretroshare/src/serialiser/rsserializer.cc +++ b/libretroshare/src/serialiser/rsserializer.cc @@ -1,3 +1,28 @@ +/* + * libretroshare/src/serialiser: rsserializer.cc + * + * RetroShare Serialiser. + * + * Copyright 2016 by Cyril Soler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "csoler@users.sourceforge.net". + * + */ + #include #include "rsitems/rsitem.h" diff --git a/libretroshare/src/serialiser/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h index 4559b6582..4a325fdab 100644 --- a/libretroshare/src/serialiser/rsserializer.h +++ b/libretroshare/src/serialiser/rsserializer.h @@ -1,3 +1,27 @@ +/* + * libretroshare/src/serialiser: rsserializer.h + * + * RetroShare Serialiser. + * + * Copyright 2016 by Cyril Soler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "csoler@users.sourceforge.net". + * + */ #pragma once /////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -137,6 +161,8 @@ class RsItem ; #define SERIALIZE_ERROR() std::cerr << __PRETTY_FUNCTION__ << " : " +// This is the base class for serializers. + class RsSerialType { public: @@ -155,6 +181,7 @@ private: uint32_t type; }; +// This class is only used internally to p3service. It should not be used explicitely otherwise. class RsRawSerialiser: public RsSerialType { @@ -167,6 +194,8 @@ class RsRawSerialiser: public RsSerialType virtual RsItem * deserialise(void *data, uint32_t *size); }; +// Top class for all services and config serializers. + class RsGenericSerializer: public RsSerialType { public: @@ -226,6 +255,8 @@ protected: }; +// Top class for service serializers. Derive your on service serializer from this class and overload creat_item(). + class RsServiceSerializer: public RsGenericSerializer { public: @@ -243,6 +274,8 @@ public: RsItem *deserialise(void *data,uint32_t *size) ; }; +// Top class for config serializers. Config serializers are only used internally by RS core. The development of new services or plugins do not need this. + class RsConfigSerializer: public RsGenericSerializer { public: diff --git a/libretroshare/src/serialiser/rstypeserializer.cc b/libretroshare/src/serialiser/rstypeserializer.cc index fab8c7b2e..661897b4b 100644 --- a/libretroshare/src/serialiser/rstypeserializer.cc +++ b/libretroshare/src/serialiser/rstypeserializer.cc @@ -1,3 +1,27 @@ +/* + * libretroshare/src/serialiser: rstypeserializer.cc + * + * RetroShare Serialiser. + * + * Copyright 2017 by Cyril Soler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "csoler@users.sourceforge.net". + * + */ #include "serialiser/rsserializer.h" #include "serialiser/rstypeserializer.h" #include "serialiser/rsbaseserial.h" diff --git a/libretroshare/src/serialiser/rstypeserializer.h b/libretroshare/src/serialiser/rstypeserializer.h index 6ad237be9..333f1a364 100644 --- a/libretroshare/src/serialiser/rstypeserializer.h +++ b/libretroshare/src/serialiser/rstypeserializer.h @@ -1,3 +1,27 @@ +/* + * libretroshare/src/serialiser: rstypeserializer.h + * + * RetroShare Serialiser. + * + * Copyright 2017 by Cyril Soler + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "csoler@users.sourceforge.net". + * + */ #pragma once #include "serialiser/rsserial.h" From 07201e894c66aaf3fb72f669b450701fc6a291ae Mon Sep 17 00:00:00 2001 From: Phenom Date: Mon, 1 May 2017 12:48:11 +0200 Subject: [PATCH 223/230] Fix FriendList Import/Export filename and error message. --- retroshare-gui/src/gui/common/FriendList.cpp | 39 ++++++++++---------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/retroshare-gui/src/gui/common/FriendList.cpp b/retroshare-gui/src/gui/common/FriendList.cpp index 1bac53b0a..3035cec64 100644 --- a/retroshare-gui/src/gui/common/FriendList.cpp +++ b/retroshare-gui/src/gui/common/FriendList.cpp @@ -1816,25 +1816,26 @@ void FriendList::importFriendlistClicked() */ bool FriendList::importExportFriendlistFileDialog(QString &fileName, bool import) { - if(!misc::getSaveFileName(this, - RshareSettings::LASTDIR_CERT, - (import ? tr("Select file for importing your friendlist from") : - tr("Select a file for exporting your friendlist to")), - tr("XML File (*.xml);;All Files (*)"), - fileName, - NULL, - (import ? QFileDialog::DontConfirmOverwrite : (QFileDialog::Options)0) - )) { - // show error to user - QMessageBox mbox; - mbox.setIcon(QMessageBox::Warning); - mbox.setText(tr("Error")); - mbox.setInformativeText(tr("Failed to get a file!")); - mbox.setStandardButtons(QMessageBox::Ok); - mbox.exec(); - return false; - } - return true; + bool res = true; + if (import) { + res = misc::getOpenFileName(this, RshareSettings::LASTDIR_CERT + , tr("Select file for importing your friendlist from") + , tr("XML File (*.xml);;All Files (*)") + , fileName + , QFileDialog::DontConfirmOverwrite + ); + } else { + res = misc::getSaveFileName(this, RshareSettings::LASTDIR_CERT + , tr("Select a file for exporting your friendlist to") + , tr("XML File (*.xml);;All Files (*)") + , fileName, NULL + , (QFileDialog::Options)0 + ); + } + if ( res && !fileName.endsWith(".xml",Qt::CaseInsensitive) ) + fileName = fileName.append(".xml"); + + return res; } /** From 99d8b7d5d8d26f47368857126be49aabc1a1627f Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 1 May 2017 21:23:34 +0200 Subject: [PATCH 224/230] switched service control items to new serialization --- libretroshare/src/gxs/rsgenexchange.cc | 5 +- libretroshare/src/pqi/p3servicecontrol.cc | 181 ++------------------ libretroshare/src/serialiser/rsserializer.h | 2 +- 3 files changed, 22 insertions(+), 166 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index b946b5931..a970971ff 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -36,6 +36,7 @@ #include "retroshare/rsgrouter.h" #include "retroshare/rsidentity.h" #include "retroshare/rspeers.h" +#include "rsitems/rsnxsitems.h" #include "rsgixs.h" #include "rsgxsutil.h" #include "rsserver/p3face.h" @@ -1293,7 +1294,7 @@ bool RsGenExchange::getSerializedGroupData(const uint32_t &token, RsGxsGroupId& } RsNxsGrp *nxs_grp = *(nxsGrps.begin()); - size = nxs_grp->serial_size() ; + size = RsNxsSerialiser(mServType).size(nxs_grp); id = nxs_grp->metaData->mGroupId ; if(size > 1024*1024 || NULL==(data = (unsigned char *)rs_malloc(size))) @@ -1303,7 +1304,7 @@ bool RsGenExchange::getSerializedGroupData(const uint32_t &token, RsGxsGroupId& return false ; } - return nxs_grp->serialise(data,size) ; + return RsNxsSerialiser(mServType).serialise(nxs_grp,data,&size) ; } bool RsGenExchange::deserializeGroupData(unsigned char *data,uint32_t size) diff --git a/libretroshare/src/pqi/p3servicecontrol.cc b/libretroshare/src/pqi/p3servicecontrol.cc index d0d9acbdc..3942232c4 100644 --- a/libretroshare/src/pqi/p3servicecontrol.cc +++ b/libretroshare/src/pqi/p3servicecontrol.cc @@ -28,9 +28,8 @@ #include "p3servicecontrol.h" #include "rsitems/rsserviceids.h" #include "rsitems/rsitem.h" -#include "serialiser/rsserial.h" -#include "serialiser/rsbaseserial.h" -#include "serialiser/rsnxsitems.h" +#include "serialiser/rstypeserializer.h" +#include "rsitems/rsnxsitems.h" #include "pqi/p3cfgmgr.h" #include "pqi/pqiservice.h" @@ -44,184 +43,40 @@ class RsServiceControlItem: public RsItem { public: RsServiceControlItem(uint8_t item_subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_SERVICE_CONTROL,item_subtype) {} - - virtual uint32_t serial_size() const =0; - virtual bool serialise(uint8_t *data,uint32_t size) const =0; - - bool serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const - { - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } - #ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; - #endif - offset += 8; - - return true ; - } }; + class RsServicePermissionItem: public RsServiceControlItem, public RsServicePermissions { public: - RsServicePermissionItem() - : RsServiceControlItem(RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS) {} - RsServicePermissionItem(const RsServicePermissions& perms) - : RsServiceControlItem(RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS), - RsServicePermissions(perms) {} + RsServicePermissionItem(): RsServiceControlItem(RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS) {} + RsServicePermissionItem(const RsServicePermissions& perms) : RsServiceControlItem(RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS), RsServicePermissions(perms) {} - virtual uint32_t serial_size() const + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { - uint32_t s = 8 ; // header + RsTypeSerializer::serial_process(j,ctx,mServiceId,"mServiceId") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,mServiceName,"mServiceName") ; + RsTypeSerializer::serial_process (j,ctx,mDefaultAllowed,"mDefaultAllowed") ; - s += 4 ; // mServiceId - s += GetTlvStringSize(mServiceName) ; - s += 1 ; // mDefaultAllowed - s += 4 ; // mPeersAllowed.size() - s += mPeersAllowed.size() * RsPeerId::serial_size() ; - s += 4 ; // mPeersAllowed.size() - s += mPeersDenied.size() * RsPeerId::serial_size() ; - - return s ; - } - virtual bool serialise(uint8_t *data,uint32_t size) const - { - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, mServiceId); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, mServiceName); - ok &= setRawUInt8(data, tlvsize, &offset, mDefaultAllowed); - ok &= setRawUInt32(data, tlvsize, &offset, mPeersAllowed.size()); - - for(std::set::const_iterator it(mPeersAllowed.begin());it!=mPeersAllowed.end();++it) - (*it).serialise(data,tlvsize,offset) ; - - ok &= setRawUInt32(data, tlvsize, &offset, mPeersDenied.size()); - - for(std::set::const_iterator it(mPeersDenied.begin());it!=mPeersDenied.end();++it) - (*it).serialise(data,tlvsize,offset) ; - - if(offset != tlvsize) - { - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() FAIL Size Error! " << std::endl; - ok = false; - } - - if (!ok) - std::cerr << "RsGxsChannelSerialiser::serialiseGxsChannelGroupItem() NOK" << std::endl; - - return ok; - } - - static RsServicePermissionItem *deserialise(uint8_t *data, uint32_t size) - { - RsServicePermissionItem *item = new RsServicePermissionItem ; - - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - if(rssize > size) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - return NULL ; - } - - /* add mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &item->mServiceId); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->mServiceName); - - uint8_t v; - ok &= getRawUInt8(data, rssize, &offset, &v) ; - - if (v != 0 && v != 1) - ok = false; - else - item->mDefaultAllowed = (bool)v ; - - uint32_t tmp ; - ok &= getRawUInt32(data, rssize, &offset, &tmp); - - for(uint32_t i=0;imPeersAllowed.insert(peer_id) ; - } - - ok &= getRawUInt32(data, rssize, &offset, &tmp); - - for(uint32_t i=0;imPeersDenied.insert(peer_id) ; - } - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete(item); - return NULL ; - } - - return item; + RsTypeSerializer::serial_process (j,ctx,mPeersAllowed,"mPeersAllowed"); + RsTypeSerializer::serial_process (j,ctx,mPeersDenied ,"mPeersDenied"); } virtual void clear() {} - virtual std::ostream& print(std::ostream& out,uint16_t) - { - std::cerr << __PRETTY_FUNCTION__ << ": not implemented!" << std::endl; - return out ; - } }; -class ServiceControlSerialiser: public RsSerialType +class ServiceControlSerialiser: public RsServiceSerializer { public: - ServiceControlSerialiser() : RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_SERVICE_CONTROL) {} + ServiceControlSerialiser() : RsServiceSerializer(RS_SERVICE_TYPE_SERVICE_CONTROL) {} - virtual uint32_t size (RsItem *item) + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const { - RsServiceControlItem *scitem = dynamic_cast(item); - if (!scitem) - { - return 0; - } - return scitem->serial_size() ; - } - virtual bool serialise(RsItem *item, void *data, uint32_t *size) - { - RsServiceControlItem *scitem = dynamic_cast(item); - if (!scitem) - { - return false; - } - return scitem->serialise((uint8_t*)data,*size) ; - } - virtual RsItem *deserialise (void *data, uint32_t *size) - { - uint32_t rstype = getRsItemId(data); + if(RS_SERVICE_TYPE_SERVICE_CONTROL != service) + return NULL; - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_SERVICE_CONTROL != getRsItemService(rstype)) { return NULL; /* wrong type */ } - - switch(getRsItemSubType(rstype)) + switch(item_subtype) { - case RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS:return RsServicePermissionItem::deserialise((uint8_t*)data, *size); + case RS_PKT_SUBTYPE_SERVICE_CONTROL_SERVICE_PERMISSIONS: return new RsServicePermissionItem(); default: return NULL ; } diff --git a/libretroshare/src/serialiser/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h index 4a325fdab..c9f1f6403 100644 --- a/libretroshare/src/serialiser/rsserializer.h +++ b/libretroshare/src/serialiser/rsserializer.h @@ -60,7 +60,7 @@ // { // MyServiceSerializer() : RsServiceSerializer(MY_SERVICE_IDENTIFIER) {} // -// RsItem *create_item(uint16_t service,uint8_t item_subtype) +// RsItem *create_item(uint16_t service,uint8_t item_subtype) const // mind the "const"! // { // if(service != MY_SERVICE_IDENTIFIER) return NULL ; // From 861dc165f70e200a3184e84f39c6eae74e9383a9 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 2 May 2017 22:05:54 +0200 Subject: [PATCH 225/230] switched VOIP to new serialization --- plugins/FeedReader/services/p3FeedReader.cc | 2 +- plugins/VOIP/services/p3VOIP.cc | 2 +- plugins/VOIP/services/p3VOIP.h | 2 +- plugins/VOIP/services/rsVOIPItems.cc | 529 ++------------------ plugins/VOIP/services/rsVOIPItems.h | 63 +-- 5 files changed, 52 insertions(+), 546 deletions(-) diff --git a/plugins/FeedReader/services/p3FeedReader.cc b/plugins/FeedReader/services/p3FeedReader.cc index f4f287790..efa3b6688 100644 --- a/plugins/FeedReader/services/p3FeedReader.cc +++ b/plugins/FeedReader/services/p3FeedReader.cc @@ -22,7 +22,7 @@ #include "rsFeedReaderItems.h" #include "p3FeedReader.h" #include "p3FeedReaderThread.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "retroshare/rsiface.h" #include "retroshare/rsgxsforums.h" #include "util/rsstring.h" diff --git a/plugins/VOIP/services/p3VOIP.cc b/plugins/VOIP/services/p3VOIP.cc index b2c3f27bf..4921fe0cc 100644 --- a/plugins/VOIP/services/p3VOIP.cc +++ b/plugins/VOIP/services/p3VOIP.cc @@ -25,7 +25,7 @@ #include "pqi/pqistore.h" #include "pqi/p3linkmgr.h" #include -#include +#include #include // for std::istringstream diff --git a/plugins/VOIP/services/p3VOIP.h b/plugins/VOIP/services/p3VOIP.h index 961496019..4be04af12 100644 --- a/plugins/VOIP/services/p3VOIP.h +++ b/plugins/VOIP/services/p3VOIP.h @@ -27,7 +27,7 @@ #include "services/rsVOIPItems.h" #include "services/p3service.h" #include "serialiser/rstlvbase.h" -#include "serialiser/rsconfigitems.h" +#include "rsitems/rsconfigitems.h" #include "plugins/rspqiservice.h" #include diff --git a/plugins/VOIP/services/rsVOIPItems.cc b/plugins/VOIP/services/rsVOIPItems.cc index cd3132dfd..cf4aefed7 100644 --- a/plugins/VOIP/services/rsVOIPItems.cc +++ b/plugins/VOIP/services/rsVOIPItems.cc @@ -20,8 +20,7 @@ ****************************************************************/ #include -#include "serialiser/rsbaseserial.h" -#include "serialiser/rstlvbase.h" +#include "serialiser/rstypeserializer.h" #include "services/rsVOIPItems.h" @@ -31,505 +30,47 @@ #include -/*************************************************************************/ - -std::ostream& RsVOIPPingItem::print(std::ostream &out, uint16_t indent) +RsItem *RsVOIPSerialiser::create_item(uint16_t service,uint8_t item_subtype) const { - printRsItemBase(out, "RsVOIPPingItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "SeqNo: " << mSeqNo << std::endl; - - printIndent(out, int_Indent); - out << "PingTS: " << std::hex << mPingTS << std::dec << std::endl; - - printRsItemEnd(out, "RsVOIPPingItem", indent); - return out; -} - -std::ostream& RsVOIPPongItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsVOIPPongItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "SeqNo: " << mSeqNo << std::endl; - - printIndent(out, int_Indent); - out << "PingTS: " << std::hex << mPingTS << std::dec << std::endl; - - printIndent(out, int_Indent); - out << "PongTS: " << std::hex << mPongTS << std::dec << std::endl; - - printRsItemEnd(out, "RsVOIPPongItem", indent); - return out; -} -std::ostream& RsVOIPProtocolItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsVOIPProtocolItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "flags: " << flags << std::endl; - - printIndent(out, int_Indent); - out << "protocol: " << std::hex << (uint32_t)protocol << std::dec << std::endl; - - printRsItemEnd(out, "RsVOIPProtocolItem", indent); - return out; -} -std::ostream& RsVOIPBandwidthItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsVOIPBandwidthItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "flags: " << std::hex << flags << std::dec << std::endl; - - printIndent(out, int_Indent); - out << "speed: " << bytes_per_sec << std::endl; - - printRsItemEnd(out, "RsVOIPBandwidthItem", indent); - return out; -} -std::ostream& RsVOIPDataItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsVOIPDataItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "flags: " << flags << std::endl; - - printIndent(out, int_Indent); - out << "data size: " << std::hex << data_size << std::dec << std::endl; - - printRsItemEnd(out, "RsVOIPDataItem", indent); - return out; -} - -/*************************************************************************/ -uint32_t RsVOIPDataItem::serial_size() const -{ - uint32_t s = 8; /* header */ - s += 4; /* flags */ - s += 4; /* data_size */ - s += data_size; /* data */ - - return s; -} -uint32_t RsVOIPBandwidthItem::serial_size() const -{ - uint32_t s = 8; /* header */ - s += 4; /* flags */ - s += 4; /* bandwidth */ - - return s; -} -uint32_t RsVOIPProtocolItem::serial_size() const -{ - uint32_t s = 8; /* header */ - s += 4; /* flags */ - s += 4; /* protocol */ - - return s; -} -uint32_t RsVOIPPingItem::serial_size() const -{ - uint32_t s = 8; /* header */ - s += 4; /* seqno */ - s += 8; /* pingTS */ - - return s; -} -bool RsVOIPProtocolItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::serialiseVOIPDataItem() Header: " << ok << std::endl; - std::cerr << "RsVOIPSerialiser::serialiseVOIPDataItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, (uint32_t)protocol); - ok &= setRawUInt32(data, tlvsize, &offset, flags); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPingItem() Size Error! " << std::endl; - } - - return ok; -} -bool RsVOIPBandwidthItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::serialiseVOIPBandwidthItem() Header: " << ok << std::endl; - std::cerr << "RsVOIPSerialiser::serialiseVOIPBandwidthItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, flags); - ok &= setRawUInt32(data, tlvsize, &offset, bytes_per_sec); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsVOIPSerialiser::serialiseVOIPBandwidthItem() Size Error! " << std::endl; - } - - return ok; -} -/* serialise the data to the buffer */ -bool RsVOIPDataItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::serialiseVOIPDataItem() Header: " << ok << std::endl; - std::cerr << "RsVOIPSerialiser::serialiseVOIPDataItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, flags); - ok &= setRawUInt32(data, tlvsize, &offset, data_size); - - memcpy( &((uint8_t*)data)[offset],voip_data,data_size) ; - offset += data_size ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPingItem() Size Error! " << std::endl; - } - - return ok; -} -/* serialise the data to the buffer */ -bool RsVOIPPingItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::serialiseVOIPPingItem() Header: " << ok << std::endl; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPingItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, mSeqNo); - ok &= setRawUInt64(data, tlvsize, &offset, mPingTS); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPingItem() Size Error! " << std::endl; - } - - return ok; -} - -RsVOIPProtocolItem::RsVOIPProtocolItem(void *data, uint32_t pktsize) - : RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PROTOCOL) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_VOIP_PROTOCOL != getRsItemSubType(rstype))) - throw std::runtime_error("Wrong packet type!") ; - - if (pktsize < rssize) /* check size */ - throw std::runtime_error("Not enough size!") ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint32_t uint_Protocol; - ok &= getRawUInt32(data, rssize, &offset, &uint_Protocol); - protocol = static_cast(uint_Protocol); - ok &= getRawUInt32(data, rssize, &offset, &flags); - - if (offset != rssize) - throw std::runtime_error("Deserialisation error!") ; - - if (!ok) - throw std::runtime_error("Deserialisation error!") ; -} -RsVOIPBandwidthItem::RsVOIPBandwidthItem(void *data, uint32_t pktsize) - : RsVOIPItem(RS_PKT_SUBTYPE_VOIP_BANDWIDTH) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_VOIP_BANDWIDTH != getRsItemSubType(rstype))) - throw std::runtime_error("Wrong packet type!") ; - - if (pktsize < rssize) /* check size */ - throw std::runtime_error("Not enough size!") ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &flags); - ok &= getRawUInt32(data, rssize, &offset, &bytes_per_sec); - - if (offset != rssize) - throw std::runtime_error("Deserialisation error!") ; - - if (!ok) - throw std::runtime_error("Deserialisation error!") ; -} -RsVOIPPingItem::RsVOIPPingItem(void *data, uint32_t pktsize) - : RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PING) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_VOIP_PING != getRsItemSubType(rstype))) - throw std::runtime_error("Wrong packet type!") ; - - if (pktsize < rssize) /* check size */ - throw std::runtime_error("Not enough size!") ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &mSeqNo); - ok &= getRawUInt64(data, rssize, &offset, &mPingTS); - - if (offset != rssize) - throw std::runtime_error("Deserialisation error!") ; - - if (!ok) - throw std::runtime_error("Deserialisation error!") ; -} - -/*************************************************************************/ -/*************************************************************************/ - - -uint32_t RsVOIPPongItem::serial_size() const -{ - uint32_t s = 8; /* header */ - s += 4; /* seqno */ - s += 8; /* pingTS */ - s += 8; /* pongTS */ - - return s; -} - -/* serialise the data to the buffer */ -bool RsVOIPPongItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::serialiseVOIPPongItem() Header: " << ok << std::endl; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPongItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, mSeqNo); - ok &= setRawUInt64(data, tlvsize, &offset, mPingTS); - ok &= setRawUInt64(data, tlvsize, &offset, mPongTS); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsVOIPSerialiser::serialiseVOIPPongItem() Size Error! " << std::endl; - } - - return ok; -} -RsVOIPDataItem::RsVOIPDataItem(void *data, uint32_t pktsize) - : RsVOIPItem(RS_PKT_SUBTYPE_VOIP_DATA) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_VOIP_DATA != getRsItemSubType(rstype))) - throw std::runtime_error("Wrong packet subtype") ; - - if (pktsize < rssize) /* check size */ - throw std::runtime_error("Not enough space") ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &flags); - ok &= getRawUInt32(data, rssize, &offset, &data_size); - - if(data_size > rssize || rssize - data_size < offset) - throw std::runtime_error("Not enough space.") ; - - voip_data = rs_malloc(data_size) ; - - if(!voip_data) - throw std::runtime_error("Serialization error.") ; - - memcpy(voip_data,&((uint8_t*)data)[offset],data_size) ; - offset += data_size ; - - if (offset != rssize) - throw std::runtime_error("Serialization error.") ; - - if (!ok) - throw std::runtime_error("Serialization error.") ; -} -RsVOIPPongItem::RsVOIPPongItem(void *data, uint32_t pktsize) - : RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PONG) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype)) || (RS_PKT_SUBTYPE_VOIP_PONG != getRsItemSubType(rstype))) - throw std::runtime_error("Wrong packet subtype") ; - - if (pktsize < rssize) /* check size */ - throw std::runtime_error("Not enough space") ; - - bool ok = true; - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &mSeqNo); - ok &= getRawUInt64(data, rssize, &offset, &mPingTS); - ok &= getRawUInt64(data, rssize, &offset, &mPongTS); - - if (offset != rssize) - throw std::runtime_error("Serialization error.") ; - - if (!ok) - throw std::runtime_error("Serialization error.") ; -} - -/*************************************************************************/ - -RsItem* RsVOIPSerialiser::deserialise(void *data, uint32_t *pktsize) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsVOIPSerialiser::deserialise()" << std::endl; -#endif - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_VOIP_PLUGIN != getRsItemService(rstype))) + if(service != RS_SERVICE_TYPE_VOIP_PLUGIN) return NULL ; - - try - { - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_VOIP_PING: return new RsVOIPPingItem(data, *pktsize); - case RS_PKT_SUBTYPE_VOIP_PONG: return new RsVOIPPongItem(data, *pktsize); - case RS_PKT_SUBTYPE_VOIP_PROTOCOL: return new RsVOIPProtocolItem(data, *pktsize); - case RS_PKT_SUBTYPE_VOIP_DATA: return new RsVOIPDataItem(data, *pktsize); - default: - return NULL; - } - } - catch(std::exception& e) + switch(item_subtype) { - std::cerr << "RsVOIPSerialiser: deserialization error: " << e.what() << std::endl; - return NULL; + case RS_PKT_SUBTYPE_VOIP_PING: return new RsVOIPPingItem(); + case RS_PKT_SUBTYPE_VOIP_PONG: return new RsVOIPPongItem(); + case RS_PKT_SUBTYPE_VOIP_PROTOCOL: return new RsVOIPProtocolItem(); + case RS_PKT_SUBTYPE_VOIP_DATA: return new RsVOIPDataItem(); + default: + return NULL ; } } +void RsVOIPProtocolItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,protocol,"protocol") ; + RsTypeSerializer::serial_process(j,ctx,flags ,"flags") ; +} + +void RsVOIPPingItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; + RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; +} +void RsVOIPPongItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,mSeqNo,"mSeqNo") ; + RsTypeSerializer::serial_process(j,ctx,mPingTS,"mPingTS") ; + RsTypeSerializer::serial_process(j,ctx,mPongTS,"mPongTS") ; +} +void RsVOIPDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx,flags ,"flags") ; + + RsTypeSerializer::TlvMemBlock_proxy prox((uint8_t*&)voip_data,data_size) ; + + RsTypeSerializer::serial_process(j,ctx,prox,"data") ; +} /*************************************************************************/ diff --git a/plugins/VOIP/services/rsVOIPItems.h b/plugins/VOIP/services/rsVOIPItems.h index a685f9ef6..222412853 100644 --- a/plugins/VOIP/services/rsVOIPItems.h +++ b/plugins/VOIP/services/rsVOIPItems.h @@ -49,7 +49,7 @@ #include #include "rsitems/rsserviceids.h" -#include "serialiser/rsserial.h" +#include "rsitems/rsitem.h" /**************************************************************************/ @@ -70,31 +70,22 @@ const uint32_t RS_VOIP_FLAGS_AUDIO_DATA = 0x0002 ; class RsVOIPItem: public RsItem { public: - RsVOIPItem(uint8_t voip_subtype) - : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_VOIP_PLUGIN,voip_subtype) + RsVOIPItem(uint8_t voip_subtype) : RsItem(RS_PKT_VERSION_SERVICE,RS_SERVICE_TYPE_VOIP_PLUGIN,voip_subtype) { setPriorityLevel(QOS_PRIORITY_RS_VOIP) ; } virtual ~RsVOIPItem() {} virtual void clear() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) = 0 ; - - virtual bool serialise(void *data,uint32_t& size) = 0 ; // Isn't it better that items can serialise themselves ? - virtual uint32_t serial_size() const = 0 ; // deserialise is handled using a constructor }; class RsVOIPPingItem: public RsVOIPItem { public: RsVOIPPingItem() :RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PING), mSeqNo(0), mPingTS(0) {} - RsVOIPPingItem(void *data,uint32_t size) ; - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() const ; - virtual ~RsVOIPPingItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t mSeqNo; uint64_t mPingTS; @@ -104,17 +95,13 @@ class RsVOIPDataItem: public RsVOIPItem { public: RsVOIPDataItem() :RsVOIPItem(RS_PKT_SUBTYPE_VOIP_DATA) {} - RsVOIPDataItem(void *data,uint32_t size) ; // de-serialization - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() const ; virtual ~RsVOIPDataItem() { free(voip_data) ; voip_data = NULL ; } - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t flags ; uint32_t data_size ; @@ -122,37 +109,31 @@ class RsVOIPDataItem: public RsVOIPItem void *voip_data ; }; +#ifdef TODO class RsVOIPBandwidthItem: public RsVOIPItem { public: RsVOIPBandwidthItem() :RsVOIPItem(RS_PKT_SUBTYPE_VOIP_BANDWIDTH) {} - RsVOIPBandwidthItem(void *data,uint32_t size) ; // de-serialization - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() const ; virtual ~RsVOIPBandwidthItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); uint32_t flags ; // is that incoming or expected bandwidth? uint32_t bytes_per_sec ; // bandwidth in bytes per sec. }; +#endif class RsVOIPProtocolItem: public RsVOIPItem { public: RsVOIPProtocolItem() :RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PROTOCOL) {} - RsVOIPProtocolItem(void *data,uint32_t size) ; typedef enum { VoipProtocol_Ring = 1, VoipProtocol_Ackn = 2, VoipProtocol_Close = 3, VoipProtocol_Bandwidth = 4 } en_Protocol; - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() const ; - virtual ~RsVOIPProtocolItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); - en_Protocol protocol ; + uint32_t protocol ; uint32_t flags ; }; @@ -160,38 +141,22 @@ class RsVOIPPongItem: public RsVOIPItem { public: RsVOIPPongItem() :RsVOIPItem(RS_PKT_SUBTYPE_VOIP_PONG) {} - RsVOIPPongItem(void *data,uint32_t size) ; - - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() const ; + virtual void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); virtual ~RsVOIPPongItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0); uint32_t mSeqNo; uint64_t mPingTS; uint64_t mPongTS; }; -class RsVOIPSerialiser: public RsSerialType +class RsVOIPSerialiser: public RsServiceSerializer { public: - RsVOIPSerialiser() - :RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_TYPE_VOIP_PLUGIN) - { - } + RsVOIPSerialiser() :RsServiceSerializer(RS_SERVICE_TYPE_VOIP_PLUGIN) {} virtual ~RsVOIPSerialiser() {} - virtual uint32_t size (RsItem *item) - { - return dynamic_cast(item)->serial_size() ; - } - - virtual bool serialise (RsItem *item, void *data, uint32_t *size) - { - return dynamic_cast(item)->serialise(data,*size) ; - } - virtual RsItem *deserialise(void *data, uint32_t *size); + virtual RsItem *create_item(uint16_t service,uint8_t item_subtype) const ; }; /**************************************************************************/ From 4bee52c406de7cf6a3c11f97d73f4e5da678861d Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 2 May 2017 22:34:45 +0200 Subject: [PATCH 226/230] removed old unused serialization code --- libretroshare/src/grouter/grouteritems.cc | 822 ------------ libretroshare/src/grouter/p3grouter.cc | 20 - .../src/gxstunnel/rsgxstunnelitems.cc | 459 ------- libretroshare/src/pqi/p3peermgr.cc | 38 - libretroshare/src/rsitems/rsbwctrlitems.cc | 138 -- libretroshare/src/rsitems/rsconfigitems.h | 89 -- .../src/rsitems/rsgxscommentitems.cc | 389 ------ libretroshare/src/rsitems/rsgxsiditems.cc | 616 --------- libretroshare/src/rsitems/rsgxsrecognitems.cc | 548 -------- .../src/rsitems/rsgxsreputationitems.cc | 519 ------- libretroshare/src/rsitems/rshistoryitems.cc | 221 --- libretroshare/src/rsitems/rsnxsitems.cc | 1195 ----------------- libretroshare/src/rsitems/rsrttitems.cc | 334 ----- libretroshare/src/rsitems/rswikiitems.cc | 543 -------- libretroshare/src/rsitems/rswireitems.cc | 379 ------ 15 files changed, 6310 deletions(-) diff --git a/libretroshare/src/grouter/grouteritems.cc b/libretroshare/src/grouter/grouteritems.cc index c856132db..5fc4813a7 100644 --- a/libretroshare/src/grouter/grouteritems.cc +++ b/libretroshare/src/grouter/grouteritems.cc @@ -67,81 +67,11 @@ void RsGRouterTransactionChunkItem::serial_process(RsGenericSerializer::Serializ std::cerr << " [Binary data] " << ", length=" << chunk_size << " data=" << RsUtil::BinToHex((uint8_t*)chunk_data,std::min(50u,chunk_size)) << ((chunk_size>50)?"...":"") << std::endl; } -#ifdef TO_REMOVE -RsGRouterTransactionChunkItem *RsGRouterSerialiser::deserialise_RsGRouterTransactionChunkItem(void *data, uint32_t tlvsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - if(tlvsize < rssize) - { - std::cerr << __PRETTY_FUNCTION__ << ": wrong encoding of item size. Serialisation error!" << std::endl; - return NULL ; - } - - RsGRouterTransactionChunkItem *item = new RsGRouterTransactionChunkItem() ; - - /* add mandatory parts first */ - ok &= getRawUInt64(data, tlvsize, &offset, &item->propagation_id); - ok &= getRawUInt32(data, tlvsize, &offset, &item->chunk_start); - ok &= getRawUInt32(data, tlvsize, &offset, &item->chunk_size); - ok &= getRawUInt32(data, tlvsize, &offset, &item->total_size); - - if(item->chunk_size > rssize || offset > rssize - item->chunk_size) // better than if(item->chunk_size + offset > rssize) - { - std::cerr << __PRETTY_FUNCTION__ << ": Cannot read beyond item size. Serialisation error!" << std::endl; - delete item; - return NULL ; - } - if( NULL == (item->chunk_data = (uint8_t*)rs_malloc(item->chunk_size))) - { - delete item; - return NULL ; - } - - memcpy(item->chunk_data,&((uint8_t*)data)[offset],item->chunk_size) ; - offset += item->chunk_size ; - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterTransactionAcknItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,propagation_id,"propagation_id") ; } -#ifdef TO_REMOVE -RsGRouterTransactionAcknItem *RsGRouterSerialiser::deserialise_RsGRouterTransactionAcknItem(void *data, uint32_t tlvsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterTransactionAcknItem *item = new RsGRouterTransactionAcknItem() ; - - /* add mandatory parts first */ - ok &= getRawUInt64(data, tlvsize, &offset, &item->propagation_id); - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterGenericDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,routing_id,"routing_id") ; @@ -174,76 +104,6 @@ void RsGRouterGenericDataItem::serial_process(RsGenericSerializer::SerializeJob } } -#ifdef TO_REMOVE -RsGRouterGenericDataItem *RsGRouterSerialiser::deserialise_RsGRouterGenericDataItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - if(pktsize < rssize) - { - std::cerr << __PRETTY_FUNCTION__ << ": wrong encoding of item size. Serialisation error!" << std::endl; - return NULL ; - } - RsGRouterGenericDataItem *item = new RsGRouterGenericDataItem() ; - - ok &= getRawUInt64(data, pktsize, &offset, &item->routing_id); - ok &= item->destination_key.deserialise(data, pktsize, offset) ; - ok &= getRawUInt32(data, pktsize, &offset, &item->service_id); - ok &= getRawUInt32(data, pktsize, &offset, &item->data_size); - - if(item->data_size > 0) // This happens when the item data has been deleted from the cache - { - if(item->data_size > rssize || offset > rssize - item->data_size) // better than if(item->data_size + offset > rssize) - { - std::cerr << __PRETTY_FUNCTION__ << ": Cannot read beyond item size. Serialisation error!" << std::endl; - delete item; - return NULL ; - } - - if( NULL == (item->data_bytes = (uint8_t*)rs_malloc(item->data_size))) - { - delete item; - return NULL ; - } - - memcpy(item->data_bytes,&((uint8_t*)data)[offset],item->data_size) ; - offset += item->data_size ; - } - else - item->data_bytes = NULL ; - - ok &= item->signature.GetTlv(data, pktsize, &offset) ; - - ok &= getRawUInt32(data, pktsize, &offset, &item->duplication_factor); - - // make sure the duplication factor is not altered by friends. In the worst case, the item will duplicate a bit more. - - if(item->duplication_factor < 1) - { - item->duplication_factor = 1 ; - std::cerr << "(II) correcting GRouter item duplication factor from 0 to 1, to ensure backward compat." << std::endl; - } - if(item->duplication_factor > GROUTER_MAX_DUPLICATION_FACTOR) - { - std::cerr << "(WW) correcting GRouter item duplication factor of " << item->duplication_factor << ". This is very unexpected." << std::endl; - item->duplication_factor = GROUTER_MAX_DUPLICATION_FACTOR ; - } - - ok &= getRawUInt32(data, pktsize, &offset, &item->flags); - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterSignedReceiptItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,routing_id,"routing_id") ; @@ -258,33 +118,6 @@ void RsGRouterSignedReceiptItem::serial_process(RsGenericSerializer::SerializeJo RsTypeSerializer::serial_process(j,ctx,signature,"signature") ; } -#ifdef TO_REMOVE -RsGRouterSignedReceiptItem *RsGRouterSerialiser::deserialise_RsGRouterSignedReceiptItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterSignedReceiptItem *item = new RsGRouterSignedReceiptItem() ; - - ok &= getRawUInt64(data, pktsize, &offset, &item->routing_id); - ok &= getRawUInt32(data, pktsize, &offset, &item->flags); - ok &= item->destination_key.deserialise(data, pktsize, offset); - ok &= getRawUInt32(data, pktsize, &offset, &item->service_id); - ok &= item->data_hash.deserialise(data, pktsize, offset); - ok &= item->signature.GetTlv(data, pktsize, &offset); // signature - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterRoutingInfoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,peerId,"peerId") ; @@ -352,99 +185,11 @@ void RsGRouterRoutingInfoItem::serial_process(RsGenericSerializer::SerializeJob } } -#ifdef TO_REMOVE -RsGRouterRoutingInfoItem *RsGRouterSerialiser::deserialise_RsGRouterRoutingInfoItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterRoutingInfoItem *item = new RsGRouterRoutingInfoItem() ; - - RsPeerId peer_id ; - ok &= peer_id.deserialise(data, pktsize, offset) ; - item->PeerId(peer_id) ; - - ok &= getRawUInt32(data, pktsize, &offset, &item->data_status); - ok &= getRawUInt32(data, pktsize, &offset, &item->tunnel_status); - ok &= getRawTimeT(data, pktsize, &offset, item->received_time_TS); - ok &= getRawTimeT(data, pktsize, &offset, item->last_sent_TS); - - ok &= getRawTimeT(data, pktsize, &offset, item->last_tunnel_request_TS); - ok &= getRawUInt32(data, pktsize, &offset, &item->sending_attempts); - - ok &= getRawUInt32(data, pktsize, &offset, &item->client_id); - ok &= item->item_hash.deserialise(data, pktsize, offset) ; - ok &= item->tunnel_hash.deserialise(data, pktsize, offset) ; - ok &= getRawUInt32(data, pktsize, &offset, &item->routing_flags) ; - - ok &= item->incoming_routes.GetTlv(data,pktsize,&offset) ; - - item->data_item = deserialise_RsGRouterGenericDataItem(&((uint8_t*)data)[offset],pktsize - offset) ; - if(item->data_item != NULL) - offset += item->data_item->serial_size() ; - else - ok = false ; - - // Receipt item is optional. - - if (offset < pktsize) - { // - item->receipt_item = deserialise_RsGRouterSignedReceiptItem(&((uint8_t*)data)[offset],pktsize - offset); - if (item->receipt_item != NULL) - offset += item->receipt_item->serial_size(); - else // - ok = false; - } - else // - item->receipt_item = NULL; - - - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterMatrixFriendListItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,reverse_friend_indices,"reverse_friend_indices") ; } -#ifdef TO_REMOVE -RsGRouterMatrixFriendListItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixFriendListItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterMatrixFriendListItem *item = new RsGRouterMatrixFriendListItem() ; - - uint32_t nb_friends = 0 ; - ok &= getRawUInt32(data, pktsize, &offset, &nb_friends); // file hash - - item->reverse_friend_indices.resize(nb_friends) ; - - for(uint32_t i=0;ok && ireverse_friend_indices[i].deserialise(data, pktsize, offset) ; - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterMatrixTrackItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,provider_id,"provider_id") ; @@ -452,30 +197,6 @@ void RsGRouterMatrixTrackItem::serial_process(RsGenericSerializer::SerializeJob RsTypeSerializer::serial_process(j,ctx,time_stamp,"time_stamp") ; } -#ifdef TO_REMOVE -RsGRouterMatrixTrackItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixTrackItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterMatrixTrackItem *item = new RsGRouterMatrixTrackItem() ; - - ok &= item->provider_id.deserialise(data, pktsize, offset) ; - ok &= item->message_id.deserialise(data,pktsize,offset) ; - ok &= getRawTimeT(data, pktsize, &offset, item->time_stamp) ; - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - void RsGRouterMatrixCluesItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,destination_key,"destination_key") ; @@ -489,44 +210,6 @@ template<> void RsTypeSerializer::serial_process(RsGenericSerializer::SerializeJ RsTypeSerializer::serial_process (j,ctx,s.time_stamp,name+":time_stamp") ; } -#ifdef TO_REMOVE -RsGRouterMatrixCluesItem *RsGRouterSerialiser::deserialise_RsGRouterMatrixCluesItem(void *data, uint32_t pktsize) const -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGRouterMatrixCluesItem *item = new RsGRouterMatrixCluesItem() ; - - ok &= item->destination_key.deserialise(data,pktsize,offset) ; - - uint32_t nb_clues = 0 ; - ok &= getRawUInt32(data, pktsize, &offset, &nb_clues); - - item->clues.clear() ; - - for(uint32_t j=0;jclues.push_back(HitE) ; - } - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -#endif - RsGRouterGenericDataItem *RsGRouterGenericDataItem::duplicate() const { RsGRouterGenericDataItem *item = new RsGRouterGenericDataItem ; @@ -565,508 +248,3 @@ RsGRouterSignedReceiptItem *RsGRouterSignedReceiptItem::duplicate() const return item ; } -#ifdef TO_REMOVE -uint32_t RsGRouterGenericDataItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += sizeof(GRouterMsgPropagationId) ; // routing id - s += destination_key.serial_size() ; // destination_key - s += 4 ; // data_size - s += 4 ; // service id - s += data_size ; // data - s += signature.TlvSize() ; // signature - s += 4 ; // duplication_factor - s += 4 ; // flags - - return s ; -} -uint32_t RsGRouterGenericDataItem::signed_data_size() const -{ - uint32_t s = 0 ; // no header - s += sizeof(GRouterMsgPropagationId) ; // routing id - s += destination_key.serial_size() ; // destination_key - s += 4 ; // data_size - s += 4 ; // service id - s += data_size ; // data - - return s ; -} -uint32_t RsGRouterSignedReceiptItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += sizeof(GRouterMsgPropagationId) ; // routing id - s += destination_key.serial_size() ; // destination_key - s += data_hash.serial_size() ; - s += 4 ; // state - s += 4 ; // service_id - s += signature.TlvSize() ; // signature - - return s ; -} -uint32_t RsGRouterSignedReceiptItem::signed_data_size() const -{ - uint32_t s = 0 ; // no header - s += sizeof(GRouterMsgPropagationId) ; // routing id - s += destination_key.serial_size() ; // destination_key - s += data_hash.serial_size() ; - s += 4 ; // service_id - s += 4 ; // state - - return s ; -} -uint32_t RsGRouterTransactionChunkItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += sizeof(GRouterMsgPropagationId) ; // routing id - s += 4 ; // chunk_start - s += 4 ; // chunk_size - s += 4 ; // total_size - s += chunk_size ; // data - - return s; -} -uint32_t RsGRouterTransactionAcknItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += sizeof(GRouterMsgPropagationId) ; // routing id - - return s; -} -bool RsGRouterTransactionChunkItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, propagation_id); - ok &= setRawUInt32(data, tlvsize, &offset, chunk_start); - ok &= setRawUInt32(data, tlvsize, &offset, chunk_size); - ok &= setRawUInt32(data, tlvsize, &offset, total_size); - - memcpy(&((uint8_t*)data)[offset],chunk_data,chunk_size) ; - offset += chunk_size ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterGenericDataItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGRouterGenericDataItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, routing_id); - ok &= destination_key.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, service_id); - ok &= setRawUInt32(data, tlvsize, &offset, data_size); - - memcpy(&((uint8_t*)data)[offset],data_bytes,data_size) ; - offset += data_size ; - - ok &= signature.SetTlv(data, tlvsize, &offset) ; - - ok &= setRawUInt32(data, tlvsize, &offset, duplication_factor) ; - ok &= setRawUInt32(data, tlvsize, &offset, flags) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterGenericDataItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGRouterTransactionAcknItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, propagation_id); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterGenericDataItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGRouterGenericDataItem::serialise_signed_data(void *data,uint32_t size) const -{ - bool ok = true; - - uint32_t offset = 0; - uint32_t tlvsize = signed_data_size() ; - - if(tlvsize > size) - { - ok = false; - std::cerr << "RsGRouterReceiptItem::serialisedata() size error! Not enough size in supplied container." << std::endl; - } - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, routing_id); - ok &= destination_key.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, service_id); - ok &= setRawUInt32(data, tlvsize, &offset, data_size); - - memcpy(&((uint8_t*)data)[offset],data_bytes,data_size) ; - offset += data_size ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterGenericDataItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGRouterSignedReceiptItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, routing_id); - ok &= setRawUInt32(data, tlvsize, &offset, flags); - ok &= destination_key.serialise(data,tlvsize,offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, service_id); - ok &= data_hash.serialise(data,tlvsize,offset) ; - ok &= signature.SetTlv(data,tlvsize,&offset) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterReceiptItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGRouterSignedReceiptItem::serialise_signed_data(void *data,uint32_t size) const -{ - bool ok = true; - - uint32_t offset=0; - uint32_t tlvsize = signed_data_size() ; - - if(tlvsize > size) - { - ok = false; - std::cerr << "RsGRouterReceiptItem::serialisedata() size error! Not enough size in supplied container." << std::endl; - } - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, routing_id); - ok &= setRawUInt32(data, tlvsize, &offset, flags); - ok &= destination_key.serialise(data,tlvsize,offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, service_id); - ok &= data_hash.serialise(data,tlvsize,offset) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterReceiptItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -/* serialise the data to the buffer */ -uint32_t RsGRouterMatrixCluesItem::serial_size() const -{ - uint32_t s = 8 ; // header - - s += destination_key.serial_size() ; // Key size - s += 4 ; // list::size() - s += (4+4+8) * clues.size() ; - - return s ; -} -uint32_t RsGRouterMatrixFriendListItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += 4 ; // reverse_friend_indices.size() - s += RsPeerId::SIZE_IN_BYTES * reverse_friend_indices.size() ; // sha1 for published_key - - return s ; -} - -uint32_t RsGRouterMatrixTrackItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += 8 ; // time_stamp - s += RsPeerId::SIZE_IN_BYTES; // provider_id - s += RsMessageId::SIZE_IN_BYTES; // message_id - - return s ; -} - -uint32_t RsGRouterRoutingInfoItem::serial_size() const -{ - uint32_t s = 8 ; // header - s += PeerId().serial_size() ; - - s += 4 ; // data status_flags - s += 4 ; // tunnel status_flags - s += 8 ; // received_time - s += 8 ; // last_sent_TS - - s += 8 ; // last_TR_TS - s += 4 ; // sending attempts - - s += sizeof(GRouterServiceId) ; // service_id - s += tunnel_hash.serial_size() ; - s += item_hash.serial_size() ; - - s += 4 ; // routing_flags - s += incoming_routes.TlvSize() ; // incoming_routes - - s += data_item->serial_size(); // data_item - - if(receipt_item != NULL) - s += receipt_item->serial_size(); // receipt_item - - return s ; -} - -bool RsGRouterMatrixFriendListItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, reverse_friend_indices.size()); - - for(uint32_t i=0;ok && i::const_iterator it2(clues.begin());it2!=clues.end();++it2) - { - ok &= setRawUInt32(data, tlvsize, &offset, (*it2).friend_id) ; - ok &= setRawUFloat32(data, tlvsize, &offset, (*it2).weight) ; - ok &= setRawTimeT(data, tlvsize, &offset, (*it2).time_stamp) ; - } - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterMatrixCluesItem::serialisedata() size error! " << std::endl; - } - - return ok; -} - -bool RsGRouterMatrixTrackItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= provider_id.serialise(data, tlvsize, offset) ; - ok &= message_id.serialise(data,tlvsize,offset) ; - ok &= setRawTimeT(data, tlvsize, &offset, time_stamp) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterMatrixTrackItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool FriendTrialRecord::deserialise(void *data,uint32_t& offset,uint32_t size) -{ - bool ok = true ; - ok &= friend_id.deserialise(data, size, offset) ; - ok &= getRawTimeT(data, size, &offset, time_stamp) ; - ok &= getRawUFloat32(data, size, &offset, probability) ; - ok &= getRawUInt32(data, size, &offset, &nb_friends) ; - return ok ; -} -bool FriendTrialRecord::serialise(void *data,uint32_t& offset,uint32_t size) const -{ - bool ok = true ; - ok &= friend_id.serialise(data, size, offset) ; - ok &= setRawTimeT(data, size, &offset, time_stamp) ; - ok &= setRawUFloat32(data, size, &offset, probability) ; - ok &= setRawUInt32(data, size, &offset, nb_friends) ; - return ok ; -} -bool RsGRouterRoutingInfoItem::serialise(void *data,uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= PeerId().serialise(data, tlvsize, offset) ; // we keep this. - ok &= setRawUInt32(data, tlvsize, &offset, data_status) ; - ok &= setRawUInt32(data, tlvsize, &offset, tunnel_status) ; - ok &= setRawTimeT(data, tlvsize, &offset, received_time_TS) ; - ok &= setRawTimeT(data, tlvsize, &offset, last_sent_TS) ; - ok &= setRawTimeT(data, tlvsize, &offset, last_tunnel_request_TS) ; - ok &= setRawUInt32(data, tlvsize, &offset, sending_attempts) ; - - ok &= setRawUInt32(data, tlvsize, &offset, client_id) ; - ok &= item_hash.serialise(data, tlvsize, offset) ; - ok &= tunnel_hash.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, routing_flags) ; - - ok &= incoming_routes.SetTlv(data,tlvsize,&offset) ; - - uint32_t ns = size - offset ; - ok &= data_item->serialise( &((uint8_t*)data)[offset], ns) ; - offset += data_item->serial_size() ; - - if(receipt_item != NULL) - { - uint32_t ns = size - offset ; - ok &= receipt_item->serialise( &((uint8_t*)data)[offset], ns) ; - offset += receipt_item->serial_size() ; - } - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGRouterRoutingInfoItem::serialisedata() size error! " << std::endl; - } - - return ok; -} - -// -----------------------------------------------------------------------------------// -// ------------------------------------- IO --------------------------------------- // -// -----------------------------------------------------------------------------------// -// - -std::ostream& RsGRouterSignedReceiptItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterReceiptItem:" << std::endl ; - o << " direct origin: \""<< PeerId() << "\"" << std::endl ; - o << " Mid: " << std::hex << routing_id << std::dec << std::endl ; - o << " State: " << flags << std::endl ; - o << " Dest: " << destination_key << std::endl ; - o << " Sign: " << signature.keyId << std::endl ; - - return o ; -} -std::ostream& RsGRouterGenericDataItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterGenericDataItem:" << std::endl ; - o << " Direct origin: \""<< PeerId() << "\"" << std::endl ; - o << " Routing ID: " << std::hex << routing_id << std::dec << "\"" << std::endl ; - o << " Key: " << destination_key.toStdString() << std::endl ; - o << " Data size: " << data_size << std::endl ; - o << " Data hash: " << RsDirUtil::sha1sum(data_bytes,data_size) << std::endl ; - o << " signature key: " << signature.keyId << std::endl; - o << " duplication fac:" << duplication_factor << std::endl; - o << " flags: " << flags << std::endl; - - return o ; -} - -std::ostream& RsGRouterRoutingInfoItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterRoutingInfoItem:" << std::endl ; - o << " direct origin: "<< PeerId() << std::endl ; - o << " data status: "<< std::hex<< data_status << std::dec << std::endl ; - o << " tunnel status: "<< tunnel_status << std::endl ; - o << " recv time: "<< received_time_TS << std::endl ; - o << " Last sent: "<< last_sent_TS << std::endl ; - o << " Sending attempts:"<< sending_attempts << std::endl ; - o << " destination key: "<< data_item->destination_key << std::endl ; - o << " Client id: "<< client_id << std::endl ; - o << " item hash: "<< item_hash << std::endl ; - o << " tunnel hash: "<< tunnel_hash << std::endl ; - o << " Data size: "<< data_item->data_size << std::endl ; - o << " Signed receipt: "<< (void*)receipt_item << std::endl ; - - return o ; -} - -std::ostream& RsGRouterMatrixTrackItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterMatrixTrackItem:" << std::endl ; - o << " provider_id: " << provider_id << std::endl; - o << " message_id: " << message_id << std::endl; - o << " time_stamp: " << time_stamp << std::endl; - - return o ; -} -std::ostream& RsGRouterMatrixCluesItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterMatrixCluesItem:" << std::endl ; - o << " destination k: " << destination_key.toStdString() << std::endl; - o << " routing clues: " << clues.size() << std::endl; - - for(std::list::const_iterator it(clues.begin());it!=clues.end();++it) - o << " " << (*it).friend_id << " " << (*it).time_stamp << " " << (*it).weight << std::endl; - - return o ; -} -std::ostream& RsGRouterTransactionChunkItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterTransactionChunkItem:" << std::endl ; - o << " total_size: " << total_size << std::endl; - o << " chunk_size: " << chunk_size << std::endl; - o << " chunk_start: " << chunk_start << std::endl; - - return o ; -} -std::ostream& RsGRouterTransactionAcknItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterTransactionAcknItem:" << std::endl ; - o << " routing id: " << propagation_id << std::endl; - - return o ; -} -std::ostream& RsGRouterMatrixFriendListItem::print(std::ostream& o, uint16_t) -{ - o << "RsGRouterMatrixCluesItem:" << std::endl ; - o << " friends: " << reverse_friend_indices.size() << std::endl; - - return o ; -} -#endif diff --git a/libretroshare/src/grouter/p3grouter.cc b/libretroshare/src/grouter/p3grouter.cc index 998f7e636..d77903df8 100644 --- a/libretroshare/src/grouter/p3grouter.cc +++ b/libretroshare/src/grouter/p3grouter.cc @@ -2205,26 +2205,6 @@ Sha1CheckSum p3GRouter::makeTunnelHash(const RsGxsId& destination,const GRouterS return RsDirUtil::sha1sum(bytes,20) ; } -#ifdef TO_REMOVE -bool p3GRouter::locked_getGxsOwnIdAndClientIdFromHash(const TurtleFileHash& sum,RsGxsId& gxs_id,GRouterServiceId& client_id) -{ - assert( gxs_id.SIZE_IN_BYTES == 16) ; - assert(Sha1CheckSum::SIZE_IN_BYTES == 20) ; - - //gxs_id = RsGxsId(sum.toByteArray());// takes the first 16 bytes - //client_id = sum.toByteArray()[19] + (sum.toByteArray()[18] << 8) ; - - std::map::const_iterator it = _owned_key_ids.find(sum); - - if(it == _owned_key_ids.end()) - return false ; - - gxs_id = it->second.authentication_key ; - client_id = it->second.service_id ; - - return true ; -} -#endif bool p3GRouter::loadList(std::list& items) { { diff --git a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc index bb56e93cc..8e488c190 100644 --- a/libretroshare/src/gxstunnel/rsgxstunnelitems.cc +++ b/libretroshare/src/gxstunnel/rsgxstunnelitems.cc @@ -52,152 +52,11 @@ RsItem *RsGxsTunnelSerialiser::create_item(uint16_t service,uint8_t item_subtype } } -#ifdef TO_REMOVE -std::ostream& RsGxsTunnelDHPublicKeyItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsTunnelDHPublicKeyItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << " Signature Key ID: " << signature.keyId << std::endl ; - out << " Public Key ID: " << gxs_key.keyId << std::endl ; - - printRsItemEnd(out, "RsGxsTunnelMsgItem", indent); - return out; -} - -std::ostream& RsGxsTunnelDataItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsTunnelDataItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << " message id : " << std::hex << unique_item_counter << std::dec << std::endl ; - out << " service id : " << std::hex << service_id << std::dec << std::endl ; - out << " flags : " << std::hex << flags << std::dec << std::endl ; - out << " size : " << data_size << std::endl ; - out << " data : " << RsUtil::BinToHex(data,std::min(50u,data_size)) << ((data_size>50u)?"...":"") << std::endl ; - - printRsItemEnd(out, "RsGxsTunnelDataItem", indent); - return out; -} -std::ostream& RsGxsTunnelDataAckItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsTunnelDataItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << " message id : " << std::hex << unique_item_counter << std::dec << std::endl ; - - printRsItemEnd(out, "RsGxsTunnelDataAckItem", indent); - return out; -} -std::ostream& RsGxsTunnelStatusItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsTunnelDataItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << " flags : " << std::hex << status << std::dec << std::endl ; - - printRsItemEnd(out, "RsGxsTunnelStatusItem", indent); - return out; -} - -/*************************************************************************/ -#endif - RsGxsTunnelDHPublicKeyItem::~RsGxsTunnelDHPublicKeyItem() { BN_free(public_key) ; } -#ifdef TO_REMOVE -/*************************************************************************/ - -RsItem *RsGxsTunnelSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "deserializing packet..."<< std::endl ; -#endif - // look what we have... - if (*pktsize < rssize) /* check size */ - { - std::cerr << "GxsTunnel deserialisation: not enough size: pktsize=" << *pktsize << ", rssize=" << rssize << std::endl ; - return NULL; /* not enough data */ - } - - /* set the packet length */ - *pktsize = rssize; - - /* ready to load */ - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_GXS_TUNNEL != getRsItemService(rstype))) - { -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "GxsTunnel deserialisation: wrong type !" << std::endl ; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_GXS_TUNNEL_DH_PUBLIC_KEY: return deserialise_RsGxsTunnelDHPublicKeyItem(data,*pktsize) ; - case RS_PKT_SUBTYPE_GXS_TUNNEL_DATA: return deserialise_RsGxsTunnelDataItem (data,*pktsize) ; - case RS_PKT_SUBTYPE_GXS_TUNNEL_DATA_ACK: return deserialise_RsGxsTunnelDataAckItem (data,*pktsize) ; - case RS_PKT_SUBTYPE_GXS_TUNNEL_STATUS: return deserialise_RsGxsTunnelStatusItem (data,*pktsize) ; - default: - std::cerr << "Unknown packet type in chat!" << std::endl ; - return NULL ; - } -} - -/*************************************************************************/ - -uint32_t RsGxsTunnelDHPublicKeyItem::serial_size() -{ - uint32_t s = 8 ; // header - s += 4 ; // BN size - s += BN_num_bytes(public_key) ; // public_key - s += signature.TlvSize() ; // signature - s += gxs_key.TlvSize() ; // gxs_key - - return s ; -} - -uint32_t RsGxsTunnelDataItem::serial_size() -{ - uint32_t s = 8 ; // header - s += 8 ; // counter - s += 4 ; // flags - s += 4 ; // service id - s += 4 ; // data_size - s += data_size; // data - - return s ; -} - -uint32_t RsGxsTunnelDataAckItem::serial_size() -{ - uint32_t s = 8 ; // header - s += 8 ; // counter - - return s ; -} - -uint32_t RsGxsTunnelStatusItem::serial_size() -{ - uint32_t s = 8 ; // header - s += 4 ; // flags - - return s ; -} -/*************************************************************************/ -#endif - void RsGxsTunnelDHPublicKeyItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,public_key,"public_key") ; @@ -243,88 +102,11 @@ template<> void RsTypeSerializer::print_data(const std::string& name,BIGNUM std::cerr << "[BIGNUM] : " << name << std::endl; } -#ifdef TO_REMOVE -bool RsGxsTunnelDHPublicKeyItem::serialise(void *data,uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - uint32_t s = BN_num_bytes(public_key) ; - - ok &= setRawUInt32(data, tlvsize, &offset, s); - - BN_bn2bin(public_key,&((unsigned char *)data)[offset]) ; - offset += s ; - - ok &= signature.SetTlv(data, tlvsize, &offset); - ok &= gxs_key.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsTunnelDHPublicKeyItem::serialiseItem() Size Error! offset=" << offset << ", tlvsize=" << tlvsize << std::endl; - } - return ok ; -} -#endif - void RsGxsTunnelStatusItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,status,"status") ; } -#ifdef TO_REMOVE -bool RsGxsTunnelStatusItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "RsGxsTunnelSerialiser serialising chat status item." << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, status); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size Error! " << std::endl; - } -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "computed size: " << 256*((unsigned char*)data)[6]+((unsigned char*)data)[7] << std::endl ; -#endif - - return ok; -} -#endif - void RsGxsTunnelDataItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,unique_item_counter,"unique_item_counter") ; @@ -339,247 +121,6 @@ void RsGxsTunnelDataAckItem::serial_process(RsGenericSerializer::SerializeJob j, RsTypeSerializer::serial_process(j,ctx,unique_item_counter,"unique_item_counter") ; } -#ifdef TO_REMOVE -bool RsGxsTunnelDataItem::serialise(void *dt, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(dt, tlvsize, PacketId(), tlvsize); - -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "RsGxsTunnelSerialiser serialising chat status item." << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt64(dt, tlvsize, &offset, unique_item_counter); - ok &= setRawUInt32(dt, tlvsize, &offset, flags); - ok &= setRawUInt32(dt, tlvsize, &offset, service_id); - ok &= setRawUInt32(dt, tlvsize, &offset, data_size); - - if(offset + data_size <= tlvsize) - { - memcpy(&((uint8_t*)dt)[offset],data,data_size) ; - offset += data_size ; - } - else - ok = false ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size Error! " << std::endl; - } - - return ok; -} -bool RsGxsTunnelDataAckItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize = serial_size() ; - uint32_t offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); - -#ifdef GXS_TUNNEL_ITEM_DEBUG - std::cerr << "RsGxsTunnelSerialiser serialising chat status item." << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt64(data, tlvsize, &offset, unique_item_counter); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsTunnelSerialiser::serialiseItem() Size Error! " << std::endl; - } - - return ok; -} - -/*************************************************************************/ - -RsGxsTunnelDHPublicKeyItem *RsGxsTunnelSerialiser::deserialise_RsGxsTunnelDHPublicKeyItem(void *data,uint32_t /*size*/) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsTunnelDHPublicKeyItem *item = new RsGxsTunnelDHPublicKeyItem() ; - - uint32_t s=0 ; - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &s); - - if(s > rssize || rssize - s < offset) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - - item->public_key = BN_bin2bn(&((unsigned char *)data)[offset],s,NULL) ; - offset += s ; - - ok &= item->signature.GetTlv(data, rssize, &offset) ; - ok &= item->gxs_key.GetTlv(data, rssize, &offset) ; - - if (offset != rssize) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - if (!ok) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Unknown error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - - return item ; -} - -RsGxsTunnelDataItem *RsGxsTunnelSerialiser::deserialise_RsGxsTunnelDataItem(void *dat,uint32_t size) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(dat); - bool ok = true ; - - if(rssize > size) - { - std::cerr << "RsGxsTunnelDataItem::() Size error while deserializing." << std::endl ; - return NULL ; - } - - RsGxsTunnelDataItem *item = new RsGxsTunnelDataItem(); - - /* get mandatory parts first */ - - ok &= getRawUInt64(dat, rssize, &offset, &item->unique_item_counter); - ok &= getRawUInt32(dat, rssize, &offset, &item->flags); - ok &= getRawUInt32(dat, rssize, &offset, &item->service_id); - ok &= getRawUInt32(dat, rssize, &offset, &item->data_size); - - if(item->data_size > rssize || rssize < offset + item->data_size) - { - std::cerr << "RsGxsTunnelDataItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - item->data = (unsigned char*)rs_malloc(item->data_size) ; - - if(item->data == NULL) - { - delete item ; - return NULL ; - } - - memcpy(item->data,&((uint8_t*)dat)[offset],item->data_size) ; - offset += item->data_size ; - - - if (offset != rssize) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - if (!ok) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Unknown error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - - return item ; -} - -RsGxsTunnelDataAckItem *RsGxsTunnelSerialiser::deserialise_RsGxsTunnelDataAckItem(void *dat,uint32_t /* size */) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(dat); - bool ok = true ; - - RsGxsTunnelDataAckItem *item = new RsGxsTunnelDataAckItem(); - - /* get mandatory parts first */ - - ok &= getRawUInt64(dat, rssize, &offset, &item->unique_item_counter); - - if (offset != rssize) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - if (!ok) - { - std::cerr << "RsGxsTunnelDHPublicKeyItem::() Unknown error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - - return item ; -} - -RsGxsTunnelStatusItem *RsGxsTunnelSerialiser::deserialise_RsGxsTunnelStatusItem(void *dat, uint32_t size) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(dat); - bool ok = true ; - - if(rssize > size) - { - std::cerr << "RsGxsTunnelStatusItem::() Size error while deserializing." << std::endl ; - return NULL ; - } - - RsGxsTunnelStatusItem *item = new RsGxsTunnelStatusItem(); - - /* get mandatory parts first */ - - ok &= getRawUInt32(dat, rssize, &offset, &item->status); - - if (offset != rssize) - { - std::cerr << "RsGxsTunnelStatusItem::() Size error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - if (!ok) - { - std::cerr << "RsGxsTunnelStatusItem::() Unknown error while deserializing." << std::endl ; - delete item ; - return NULL ; - } - - return item ; -} -#endif diff --git a/libretroshare/src/pqi/p3peermgr.cc b/libretroshare/src/pqi/p3peermgr.cc index 5ae948d86..cad91f30b 100644 --- a/libretroshare/src/pqi/p3peermgr.cc +++ b/libretroshare/src/pqi/p3peermgr.cc @@ -2294,44 +2294,6 @@ bool p3PeerMgrIMPL::loadList(std::list& load) continue; } -#ifdef TO_REMOVE - RsPeerGroupItem_deprecated *gitem = dynamic_cast(*it) ; - - if (gitem) - { - RsStackMutex stack(mPeerMtx); /****** STACK LOCK MUTEX *******/ - -#ifdef PEER_DEBUG - std::cerr << "p3PeerMgrIMPL::loadList() Peer group item:" << std::endl; - gitem->print(std::cerr, 10); - std::cerr << std::endl; -#endif - RsGroupInfo ginfo ; - ginfo.flag = gitem->flag ; - ginfo.name = gitem->name ; - ginfo.peerIds = gitem->pgpList.ids ; - - do { ginfo.id = RsNodeGroupId::random(); } while(groupList.find(ginfo.id) != groupList.end()) ; - - // Ensure backward compatibility when loading the group in old format. The id must matchthe standard default id. - - if(gitem->id == std::string(RS_GROUP_DEFAULT_NAME_FRIENDS )) ginfo.id = RS_GROUP_ID_FRIENDS ; - if(gitem->id == std::string(RS_GROUP_DEFAULT_NAME_COWORKERS)) ginfo.id = RS_GROUP_ID_COWORKERS ; - if(gitem->id == std::string(RS_GROUP_DEFAULT_NAME_FAMILY )) ginfo.id = RS_GROUP_ID_FAMILY ; - if(gitem->id == std::string(RS_GROUP_DEFAULT_NAME_FAVORITES)) ginfo.id = RS_GROUP_ID_FAVORITES ; - if(gitem->id == std::string(RS_GROUP_DEFAULT_NAME_OTHERS )) ginfo.id = RS_GROUP_ID_OTHERS ; - - if(!ginfo.id.isNull()) - { - groupList[ginfo.id] = ginfo ; - std::cerr << "(II) Creating new group for old format local group \"" << gitem->name << "\". Id=" << ginfo.id << std::endl; - } - else - std::cerr << "(EE) no group corresponding to old format group with ID=\"" << gitem->id << "\"" << std::endl; - - continue; - } -#endif RsNodeGroupItem *gitem2 = dynamic_cast(*it) ; diff --git a/libretroshare/src/rsitems/rsbwctrlitems.cc b/libretroshare/src/rsitems/rsbwctrlitems.cc index 45c23d2c8..bfa172b45 100644 --- a/libretroshare/src/rsitems/rsbwctrlitems.cc +++ b/libretroshare/src/rsitems/rsbwctrlitems.cc @@ -57,143 +57,5 @@ void RsBwCtrlAllowedItem::serial_process(RsGenericSerializer::SerializeJob j,RsG RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_UINT32_BW,allowedBw,"allowedBw") ; } -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsBwCtrlSerialiser::serialiseAllowed(RsBwCtrlAllowedItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeAllowed(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsBwCtrlSerialiser::serialiseRoute() Header: " << ok << std::endl; - std::cerr << "RsBwCtrlSerialiser::serialiseRoute() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= SetTlvUInt32(data, tlvsize, &offset, TLV_TYPE_UINT32_BW, item->allowedBw); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsBwCtrlSerialiser::serialiseRoute() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsBwCtrlAllowedItem *RsBwCtrlSerialiser::deserialiseAllowed(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_BWCTRL != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsBwCtrlAllowedItem *item = new RsBwCtrlAllowedItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= GetTlvUInt32(data, tlvsize, &offset, TLV_TYPE_UINT32_BW, &(item->allowedBw)); - - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -uint32_t RsBwCtrlSerialiser::size(RsItem *i) -{ - RsBwCtrlAllowedItem *dri; - - if (NULL != (dri = dynamic_cast(i))) - { - return sizeAllowed(dri); - } - return 0; -} - -bool RsBwCtrlSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsBwCtrlAllowedItem *dri; - - if (NULL != (dri = dynamic_cast(i))) - { - return serialiseAllowed(dri, data, pktsize); - } - return false; -} - -RsItem *RsBwCtrlSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_BWCTRL != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_BWCTRL_ALLOWED_ITEM: - return deserialiseAllowed(data, pktsize); - break; - default: - return NULL; - break; - } -} - -/*************************************************************************/ -#endif - diff --git a/libretroshare/src/rsitems/rsconfigitems.h b/libretroshare/src/rsitems/rsconfigitems.h index d4ea41898..4e31b2d43 100644 --- a/libretroshare/src/rsitems/rsconfigitems.h +++ b/libretroshare/src/rsitems/rsconfigitems.h @@ -140,30 +140,6 @@ class RsPeerBandwidthLimitsItem : public RsItem std::map peers ; }; -#ifdef TO_REMOVE -class RsPeerGroupItem_deprecated : public RsItem -{ -public: - RsPeerGroupItem_deprecated(); - virtual ~RsPeerGroupItem_deprecated(); - - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - /* set data from RsGroupInfo to RsPeerGroupItem */ - void set(RsGroupInfo &groupInfo); - /* get data from RsGroupInfo to RsPeerGroupItem */ - void get(RsGroupInfo &groupInfo); - - /* Mandatory */ - std::string id; - std::string name; - uint32_t flag; - - RsTlvPgpIdSet pgpList; -}; -#endif - class RsNodeGroupItem: public RsItem { public: @@ -216,51 +192,6 @@ class RsPeerConfigSerialiser: public RsConfigSerializer /**************************************************************************/ -#ifdef TO_REMOVE -class RsCacheConfig: public RsItem -{ - public: - RsCacheConfig() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_CACHE_CONFIG, - RS_PKT_SUBTYPE_DEFAULT) - { return; } -virtual ~RsCacheConfig(); -virtual void clear(); -std::ostream &print(std::ostream &out, uint16_t indent = 0); - - RsPeerId pid; /* Mandatory */ - uint16_t cachetypeid; /* Mandatory */ - uint16_t cachesubid; /* Mandatory */ - - std::string path; /* Mandatory */ - std::string name; /* Mandatory */ - RsFileHash hash; /* Mandatory */ - uint64_t size; /* Mandatory */ - - uint32_t recvd; /* Mandatory */ -}; - - -class RsCacheConfigSerialiser: public RsSerialType -{ - public: - RsCacheConfigSerialiser() - :RsSerialType(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_CACHE_CONFIG) - { return; } - -virtual ~RsCacheConfigSerialiser(); - -virtual uint32_t size(RsItem *); -virtual bool serialise (RsItem *item, void *data, uint32_t *size); -virtual RsItem * deserialise(void *data, uint32_t *size); - -}; -#endif - -/**************************************************************************/ - class RsFileTransfer: public RsItem { public: @@ -306,26 +237,6 @@ class RsFileTransfer: public RsItem const uint32_t RS_FILE_CONFIG_CLEANUP_DELETE = 0x0001; -#ifdef TO_REMOVE -/* Used by ft / extralist / configdirs / anyone who wants a basic file */ -class RsFileConfigItem_deprecated: public RsItem -{ -public: - RsFileConfigItem_deprecated() - :RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, - RS_PKT_TYPE_FILE_CONFIG, - RS_PKT_SUBTYPE_FILE_ITEM_deprecated) - {} - virtual ~RsFileConfigItem_deprecated() {} - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - RsTlvFileItem file; - uint32_t flags; - std::list parent_groups ; -}; -#endif - class RsFileConfigItem: public RsItem { public: diff --git a/libretroshare/src/rsitems/rsgxscommentitems.cc b/libretroshare/src/rsitems/rsgxscommentitems.cc index 407f64204..8c175a1bd 100644 --- a/libretroshare/src/rsitems/rsgxscommentitems.cc +++ b/libretroshare/src/rsitems/rsgxscommentitems.cc @@ -46,403 +46,14 @@ RsItem *RsGxsCommentSerialiser::create_item(uint16_t service_id,uint8_t item_sub } } -#ifdef TO_REMOVE - -uint32_t RsGxsCommentSerialiser::size(RsItem *item) -{ -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::size()" << std::endl; -#endif - - RsGxsCommentItem* com_item = NULL; - RsGxsVoteItem* vote_item = NULL; - - if((com_item = dynamic_cast(item)) != NULL) - { - return sizeGxsCommentItem(com_item); - } - else if((vote_item = dynamic_cast(item)) != NULL) - { - return sizeGxsVoteItem(vote_item); - } - std::cerr << "RsGxsCommentSerialiser::size() ERROR invalid item" << std::endl; - return 0; -} - -bool RsGxsCommentSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialise()" << std::endl; -#endif - - RsGxsCommentItem* com_item = NULL; - RsGxsVoteItem* vote_item = NULL; - - if((com_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsCommentItem(com_item, data, size); - } - else if((vote_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsVoteItem(vote_item, data, size); - } - std::cerr << "RsGxsCommentSerialiser::serialise() ERROR invalid item" << std::endl; - return false; -} - -RsItem* RsGxsCommentSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (getRsItemService(PacketId()) != getRsItemService(rstype))) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialise() ERROR Wrong Type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_GXSCOMMENT_COMMENT_ITEM: - return deserialiseGxsCommentItem(data, size); - break; - case RS_PKT_SUBTYPE_GXSCOMMENT_VOTE_ITEM: - return deserialiseGxsVoteItem(data, size); - break; - default: -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsCommentItem::clear() -{ - mMsg.mComment.clear(); -} - -std::ostream& RsGxsCommentItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsCommentItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Comment: " << mMsg.mComment << std::endl; - - printRsItemEnd(out ,"RsGxsCommentItem", indent); - return out; -} - - -uint32_t RsGxsCommentSerialiser::sizeGxsCommentItem(RsGxsCommentItem *item) -{ - - const RsGxsComment& msg = item->mMsg; - uint32_t s = 8; // header - - s += GetTlvStringSize(msg.mComment); // mMsg. - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::sizeGxsCommentItem() is: " << s << std::endl; - msg.print(std::cerr); -#endif - - return s; -} -#endif - void RsGxsCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,1,mMsg.mComment,"mMsg.mComment") ; } -#ifdef TO_REMOVE -bool RsGxsCommentSerialiser::serialiseGxsCommentItem(RsGxsCommentItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsCommentItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsCommentItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsCommentItem() Failed size too small" << std::endl; -#endif - - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsCommentItem */ - ok &= SetTlvString(data, tlvsize, &offset, 1, item->mMsg.mComment); - - if(offset != tlvsize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsCommentItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSCOMMENT_DEBUG - if (!ok) - { - std::cerr << "RsGxsCommentSerialiser::serialiseGxsCommentItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsCommentItem* RsGxsCommentSerialiser::deserialiseGxsCommentItem(void *data, uint32_t *size) -{ - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsCommentItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (getRsItemService(PacketId()) != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCOMMENT_COMMENT_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsCommentItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsCommentItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsCommentItem* item = new RsGxsCommentItem(getRsItemService(PacketId())); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, 1, item->mMsg.mComment); - - if (offset != rssize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsCommentItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsCommentItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsVoteItem::clear() -{ - mMsg.mVoteType = 0; -} - -std::ostream& RsGxsVoteItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsVoteItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "VoteType: " << mMsg.mVoteType << std::endl; - - printRsItemEnd(out ,"RsGxsVoteItem", indent); - return out; -} - - -uint32_t RsGxsCommentSerialiser::sizeGxsVoteItem(RsGxsVoteItem */*item*/) -{ - uint32_t s = 8; // header - - s += 4; // vote flags. - - return s; -} -#endif - void RsGxsVoteItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mMsg.mVoteType,"mMsg.mVoteType") ; } -#ifdef TO_REMOVE -bool RsGxsCommentSerialiser::serialiseGxsVoteItem(RsGxsVoteItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsVoteItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsVoteItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsVoteItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsVoteItem */ - ok &= setRawUInt32(data, tlvsize, &offset, item->mMsg.mVoteType); - - if(offset != tlvsize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::serialiseGxsVoteItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSCOMMENT_DEBUG - if (!ok) - { - std::cerr << "RsGxsCommentSerialiser::serialiseGxsVoteItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsVoteItem* RsGxsCommentSerialiser::deserialiseGxsVoteItem(void *data, uint32_t *size) -{ - -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsVoteItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (getRsItemService(PacketId()) != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSCOMMENT_VOTE_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsVoteItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsVoteItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsVoteItem* item = new RsGxsVoteItem(getRsItemService(PacketId())); - /* skip the header */ - offset += 8; - - ok &= getRawUInt32(data, rssize, &offset, &(item->mMsg.mVoteType)); - - if (offset != rssize) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsVoteItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSCOMMENT_DEBUG - std::cerr << "RsGxsCommentSerialiser::deserialiseGxsVoteItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif diff --git a/libretroshare/src/rsitems/rsgxsiditems.cc b/libretroshare/src/rsitems/rsgxsiditems.cc index 5bf55b549..1a4eac4e8 100644 --- a/libretroshare/src/rsitems/rsgxsiditems.cc +++ b/libretroshare/src/rsitems/rsgxsiditems.cc @@ -60,172 +60,12 @@ void RsGxsIdGroupItem::clear() mRecognTags.clear(); mImage.TlvClear(); } -#ifdef TO_REMOVE -RsItem* RsGxsIdSerialiser::deserialise(void* data, uint32_t* size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype))) - return NULL; /* wrong type */ - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_GXSID_GROUP_ITEM: return deserialise_GxsIdGroupItem(data, size); - case RS_PKT_SUBTYPE_GXSID_LOCAL_INFO_ITEM: return deserialise_GxsIdLocalInfoItem(data, size); -#if 0 - case RS_PKT_SUBTYPE_GXSID_OPINION_ITEM: return deserialise_GxsIdOpinionItem(data, size); - case RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM: return deserialise_GxsIdCommentItem(data, size); -#endif - default: -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - -bool RsGxsIdItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) -{ - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } - offset += 8; - - return true ; -} - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - - - -uint32_t RsGxsIdLocalInfoItem::serial_size() -{ - uint32_t s = 8 ; // header - s += 4 ; // number of items - s += mTimeStamps.size() * (RsGxsId::SIZE_IN_BYTES + 8) ; - s += 4 ; // number of contacts - s += mContacts.size() * RsGxsId::SIZE_IN_BYTES ; - - return s; -} - -std::ostream& RsGxsIdLocalInfoItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsIdLocalInfoItem", indent); - - // convert from binary to hex. - for(std::map::const_iterator it(mTimeStamps.begin());it!=mTimeStamps.end();++it) - out << it->first << " : " << it->second << std::endl; - - printRsItemEnd(out ,"RsGxsIdLocalInfoItem", indent); - return out; -} -std::ostream& RsGxsIdGroupItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsIdGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "MetaData: " << meta << std::endl; - printIndent(out, int_Indent); - out << "PgpIdHash: " << mPgpIdHash << std::endl; - printIndent(out, int_Indent); - - std::string signhex; - // convert from binary to hex. - for(unsigned int i = 0; i < mPgpIdSign.length(); i++) - { - rs_sprintf_append(signhex, "%02x", (uint32_t) ((uint8_t) mPgpIdSign[i])); - } - out << "PgpIdSign: " << signhex << std::endl; - printIndent(out, int_Indent); - out << "RecognTags:" << std::endl; - - RsTlvStringSetRef set(TLV_TYPE_RECOGNSET, mRecognTags); - set.print(out, int_Indent + 2); - - printRsItemEnd(out ,"RsGxsIdGroupItem", indent); - return out; -} - - -uint32_t RsGxsIdGroupItem::serial_size() -{ - uint32_t s = 8; // header - - s += Sha1CheckSum::SIZE_IN_BYTES; - s += GetTlvStringSize(mPgpIdSign); - - RsTlvStringSetRef set(TLV_TYPE_RECOGNSET, mRecognTags); - s += set.TlvSize(); - s += mImage.TlvSize() ; - - return s; -} -#endif - void RsGxsIdLocalInfoItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mTimeStamps,"mTimeStamps") ; RsTypeSerializer::serial_process(j,ctx,mContacts,"mContacts") ; } -#ifdef TO_REMOVE -bool RsGxsIdLocalInfoItem::serialise(void *data, uint32_t& size) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, tlvsize, &offset, mTimeStamps.size()) ; - - for(std::map::const_iterator it = mTimeStamps.begin();it!=mTimeStamps.end();++it) - { - ok &= it->first.serialise(data,tlvsize,offset) ; - ok &= setRawTimeT(data,tlvsize,&offset,it->second) ; - } - ok &= setRawUInt32(data, tlvsize, &offset, mContacts.size()) ; - - for(std::set::const_iterator it(mContacts.begin());it!=mContacts.end();++it) - ok &= (*it).serialise(data,tlvsize,offset) ; - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdgroupItem() NOK" << std::endl; - } -#endif - - return ok; -} -#endif - void RsGxsIdGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,mPgpIdHash,"mPgpIdHash") ; @@ -243,43 +83,6 @@ void RsGxsIdGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGene RsTypeSerializer::serial_process(j,ctx,mImage,"mImage") ; } -#ifdef TO_REMOVE -bool RsGxsIdGroupItem::serialise(void *data, uint32_t& size) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* GxsIdGroupItem */ - ok &= mPgpIdHash.serialise(data, tlvsize, offset); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_SIGN, mPgpIdSign); - - RsTlvStringSetRef set(TLV_TYPE_RECOGNSET, mRecognTags); - ok &= set.SetTlv(data, tlvsize, &offset); - - ok &= mImage.SetTlv(data,tlvsize,&offset) ; - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdgroupItem() NOK" << std::endl; - } -#endif - - return ok; -} -#endif - bool RsGxsIdGroupItem::fromGxsIdGroup(RsGxsIdGroup &group, bool moveImage) { clear(); @@ -320,422 +123,3 @@ bool RsGxsIdGroupItem::toGxsIdGroup(RsGxsIdGroup &group, bool moveImage) return true ; } -#ifdef TO_REMOVE -RsGxsIdGroupItem* RsGxsIdSerialiser::deserialise_GxsIdGroupItem(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSID_GROUP_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsIdGroupItem* item = new RsGxsIdGroupItem(); - /* skip the header */ - offset += 8; - - ok &= item->mPgpIdHash.deserialise(data, rssize, offset); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_SIGN, item->mPgpIdSign); - - RsTlvStringSetRef set(TLV_TYPE_RECOGNSET, item->mRecognTags); - ok &= set.GetTlv(data, rssize, &offset); - - // image is optional,so that we can continue reading old items. - if(offset < rssize) - ok &= item->mImage.GetTlv(data,rssize,&offset) ; - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsGxsIdLocalInfoItem *RsGxsIdSerialiser::deserialise_GxsIdLocalInfoItem(void *data, uint32_t *size) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSID_LOCAL_INFO_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsIdLocalInfoItem* item = new RsGxsIdLocalInfoItem(); - /* skip the header */ - offset += 8; - - uint32_t n=0 ; - ok &= getRawUInt32(data, rssize, &offset, &n) ; - - for(uint32_t i=0;ok && imTimeStamps[gxsid] = TS ; - } - - if (offset < rssize) // backward compatibility, making that section optional. - { - ok &= getRawUInt32(data, rssize, &offset, &n) ; - RsGxsId gxsid ; - - for(uint32_t i=0;ok && imContacts.insert(gxsid) ; - } - } - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -#endif - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#if 0 - -void RsGxsIdOpinionItem::clear() -{ - opinion.mOpinion = 0; - opinion.mReputation = 0; - opinion.mComment = ""; -} - -std::ostream& RsGxsIdOpinionItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsIdOpinionItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Opinion: " << opinion.mOpinion << std::endl; - printIndent(out, int_Indent); - out << "Reputation: " << opinion.mReputation << std::endl; - printIndent(out, int_Indent); - out << "Comment: " << opinion.mComment << std::endl; - - printRsItemEnd(out ,"RsGxsIdOpinionItem", indent); - return out; -} - - -uint32_t RsGxsIdOpinionItem::serial_size() -{ - - const RsGxsIdOpinion& opinion = item->opinion; - uint32_t s = 8; // header - - s += 4; // mOpinion. - s += 4; // mReputation. - s += GetTlvStringSize(opinion.mComment); - - return s; -} - -bool RsGxsIdOpinionItem::serialise(void *data, uint32_t *size) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* GxsIdOpinionItem */ - ok &= setRawUInt32(data, tlvsize, &offset, item->opinion.mOpinion); - ok &= setRawUInt32(data, tlvsize, &offset, item->opinion.mReputation); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_COMMENT, item->opinion.mComment); - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdOpinionItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdgroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsIdOpinionItem* RsGxsIdSerialiser::deserialise_GxsIdOpinionItem(void *data, uint32_t *size) -{ - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSID_OPINION_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdOpinionItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdOpinionItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsIdOpinionItem* item = new RsGxsIdOpinionItem(); - /* skip the header */ - offset += 8; - - ok &= getRawUInt32(data, rssize, &offset, &(item->opinion.mOpinion)); - ok &= getRawUInt32(data, rssize, &offset, &(item->opinion.mReputation)); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_COMMENT, item->opinion.mComment); - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdOpinionItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdOpinionItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsIdCommentItem::clear() -{ - comment.mComment.clear(); -} - -std::ostream& RsGxsIdCommentItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsIdCommentItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Comment: " << comment.mComment << std::endl; - - printRsItemEnd(out ,"RsGxsIdCommentItem", indent); - return out; -} - - -uint32_t RsGxsIdCommentItem::serial_size() -{ - - const RsGxsIdComment& comment = item->comment; - uint32_t s = 8; // header - - s += GetTlvStringSize(comment.mComment); - - return s; -} - -bool RsGxsIdCommentItem::serialise(void *data, uint32_t *size) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* GxsIdCommentItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdCommentItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsIdSerialiser::serialiseGxsIdgroupItem() NOK" << std::endl; - } -#endif - - return ok; -} - -RsGxsIdCommentItem* RsGxsIdSerialiser::deserialise_GxsIdCommentItem(void *data, uint32_t *size) -{ - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdCommentItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdCommentItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsIdCommentItem* item = new RsGxsIdCommentItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdCommentItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsIdSerialiser::deserialiseGxsIdCommentItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -#endif diff --git a/libretroshare/src/rsitems/rsgxsrecognitems.cc b/libretroshare/src/rsitems/rsgxsrecognitems.cc index 81b8d866b..bb6a40ca8 100644 --- a/libretroshare/src/rsitems/rsgxsrecognitems.cc +++ b/libretroshare/src/rsitems/rsgxsrecognitems.cc @@ -63,65 +63,6 @@ void RsGxsRecognReqItem::clear() sign.TlvClear(); } -#ifdef TO_REMOVE -RsGxsRecognReqItem::~RsGxsRecognReqItem() -{ - return; -} - - -std::ostream &RsGxsRecognReqItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsRecognReqItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "issued_at: " << issued_at << std::endl; - - printIndent(out, int_Indent); - out << "period: " << period << std::endl; - - printIndent(out, int_Indent); - out << "tag_class: " << tag_class << std::endl; - - printIndent(out, int_Indent); - out << "tag_type: " << tag_type << std::endl; - - printIndent(out, int_Indent); - out << "identity: " << identity << std::endl; - - printIndent(out, int_Indent); - out << "nickname: " << nickname << std::endl; - - printIndent(out, int_Indent); - out << "comment: " << comment << std::endl; - - printIndent(out, int_Indent); - out << "signature: " << std::endl; - sign.print(out, int_Indent + 2); - - printRsItemEnd(out, "RsGxsRecognReqItem", indent); - return out; -} - - -uint32_t RsGxsRecognSerialiser::sizeReq(RsGxsRecognReqItem *item) -{ - uint32_t s = 8; /* header */ - s += 4; // issued_at; - s += 4; // period; - s += 2; // tag_class; - s += 2; // tag_type; - s += item->identity.serial_size(); - s += GetTlvStringSize(item->nickname); - s += GetTlvStringSize(item->comment); - s += item->sign.TlvSize(); - - return s; -} - -#endif - void RsGxsRecognReqItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,issued_at ,"issued_at") ; @@ -134,122 +75,6 @@ void RsGxsRecognReqItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; } -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsGxsRecognSerialiser::serialiseReq(RsGxsRecognReqItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeReq(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseReq() Header: " << ok << std::endl; - std::cerr << "RsGxsRecognSerialiser::serialiseReq() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->issued_at); - ok &= setRawUInt32(data, tlvsize, &offset, item->period); - ok &= setRawUInt16(data, tlvsize, &offset, item->tag_class); - ok &= setRawUInt16(data, tlvsize, &offset, item->tag_type); - - - ok &= item->identity.serialise(data, tlvsize, offset); - ok &= SetTlvString(data, tlvsize, &offset, 1, item->nickname); - ok &= SetTlvString(data, tlvsize, &offset, 1, item->comment); - - ok &= item->sign.SetTlv(data, tlvsize, &offset); - - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseReq() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsGxsRecognReqItem *RsGxsRecognSerialiser::deserialiseReq(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_GXS_RECOGN != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_RECOGN_REQ != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsGxsRecognReqItem *item = new RsGxsRecognReqItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= getRawUInt32(data, tlvsize, &offset, &(item->issued_at)); - ok &= getRawUInt32(data, tlvsize, &offset, &(item->period)); - ok &= getRawUInt16(data, tlvsize, &offset, &(item->tag_class)); - ok &= getRawUInt16(data, tlvsize, &offset, &(item->tag_type)); - - - ok &= item->identity.serialise(data, tlvsize, offset); - ok &= GetTlvString(data, tlvsize, &offset, 1, item->nickname); - ok &= GetTlvString(data, tlvsize, &offset, 1, item->comment); - ok &= item->sign.GetTlv(data, tlvsize, &offset); - - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -RsGxsRecognTagItem::~RsGxsRecognTagItem() -{ - return; -} -#endif - void RsGxsRecognTagItem::clear() { valid_from = 0; @@ -264,56 +89,6 @@ void RsGxsRecognTagItem::clear() sign.TlvClear(); } -#ifdef TO_REMOVE -std::ostream &RsGxsRecognTagItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsRecognTagItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "valid_from: " << valid_from << std::endl; - - printIndent(out, int_Indent); - out << "valid_to: " << valid_to << std::endl; - - printIndent(out, int_Indent); - out << "tag_class: " << tag_class << std::endl; - - printIndent(out, int_Indent); - out << "tag_type: " << tag_type << std::endl; - - printIndent(out, int_Indent); - out << "identity: " << identity << std::endl; - - printIndent(out, int_Indent); - out << "nickname: " << nickname << std::endl; - - printIndent(out, int_Indent); - out << "signature: " << std::endl; - sign.print(out, int_Indent + 2); - - printRsItemEnd(out, "RsGxsRecognTagItem", indent); - return out; -} - - -uint32_t RsGxsRecognSerialiser::sizeTag(RsGxsRecognTagItem *item) -{ - uint32_t s = 8; /* header */ - s += 4; // valid_from; - s += 4; // valid_to; - s += 2; // tag_class; - s += 2; // tag_type; - - s += item->identity.serial_size(); - s += GetTlvStringSize(item->nickname); - - s += item->sign.TlvSize(); - - return s; -} -#endif - void RsGxsRecognTagItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process (j,ctx,valid_from ,"valid_from") ; @@ -325,122 +100,6 @@ void RsGxsRecognTagItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; } -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsGxsRecognSerialiser::serialiseTag(RsGxsRecognTagItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeTag(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseTag() Header: " << ok << std::endl; - std::cerr << "RsGxsRecognSerialiser::serialiseTag() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->valid_from); - ok &= setRawUInt32(data, tlvsize, &offset, item->valid_to); - - ok &= setRawUInt16(data, tlvsize, &offset, item->tag_class); - ok &= setRawUInt16(data, tlvsize, &offset, item->tag_type); - - - ok &= item->identity.serialise(data, tlvsize, offset); - ok &= SetTlvString(data, tlvsize, &offset, 1, item->nickname); - - ok &= item->sign.SetTlv(data, tlvsize, &offset); - - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseTag() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsGxsRecognTagItem *RsGxsRecognSerialiser::deserialiseTag(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_GXS_RECOGN != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_RECOGN_TAG != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsGxsRecognTagItem *item = new RsGxsRecognTagItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= getRawUInt32(data, tlvsize, &offset, &(item->valid_from)); - ok &= getRawUInt32(data, tlvsize, &offset, &(item->valid_to)); - - ok &= getRawUInt16(data, tlvsize, &offset, &(item->tag_class)); - ok &= getRawUInt16(data, tlvsize, &offset, &(item->tag_type)); - - - ok &= item->identity.deserialise(data, tlvsize, offset); - ok &= GetTlvString(data, tlvsize, &offset, 1, item->nickname); - ok &= item->sign.GetTlv(data, tlvsize, &offset); - - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -RsGxsRecognSignerItem::~RsGxsRecognSignerItem() -{ - return; -} -#endif - void RsGxsRecognSignerItem::clear() { signing_classes.TlvClear(); @@ -448,43 +107,6 @@ void RsGxsRecognSignerItem::clear() sign.TlvClear(); } -#ifdef TO_REMOVE -std::ostream &RsGxsRecognSignerItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsRecognSignerItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "signing_classes: " << std::endl; - signing_classes.print(out, int_Indent + 2); - - printIndent(out, int_Indent); - out << "key: " << std::endl; - key.print(out, int_Indent + 2); - - printIndent(out, int_Indent); - out << "signature: " << std::endl; - sign.print(out, int_Indent + 2); - - - printRsItemEnd(out, "RsGxsRecognSignerItem", indent); - return out; -} - - - - -uint32_t RsGxsRecognSerialiser::sizeSigner(RsGxsRecognSignerItem *item) -{ - uint32_t s = 8; /* header */ - s += item->signing_classes.TlvSize(); - s += item->key.TlvSize(); - s += item->sign.TlvSize(); - - return s; -} -#endif - void RsGxsRecognSignerItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,signing_classes ,"signing_classes") ; @@ -492,175 +114,5 @@ void RsGxsRecognSignerItem::serial_process(RsGenericSerializer::SerializeJob j,R RsTypeSerializer::serial_process(j,ctx,sign ,"sign") ; } -#ifdef TO_REMOVE -/* serialise the data to the buffer */ -bool RsGxsRecognSerialiser::serialiseSigner(RsGxsRecognSignerItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeSigner(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseSigner() Header: " << ok << std::endl; - std::cerr << "RsGxsRecognSerialiser::serialiseSigner() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->signing_classes.SetTlv(data, tlvsize, &offset); - ok &= item->key.SetTlv(data, tlvsize, &offset); - ok &= item->sign.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsGxsRecognSerialiser::serialiseSigner() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsGxsRecognSignerItem *RsGxsRecognSerialiser::deserialiseSigner(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t tlvsize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_GXS_RECOGN != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_RECOGN_SIGNER != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < tlvsize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = tlvsize; - - bool ok = true; - - /* ready to load */ - RsGxsRecognSignerItem *item = new RsGxsRecognSignerItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= item->signing_classes.GetTlv(data, tlvsize, &offset); - ok &= item->key.GetTlv(data, tlvsize, &offset); - ok &= item->sign.GetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - - -/*************************************************************************/ - -uint32_t RsGxsRecognSerialiser::size(RsItem *i) -{ - RsGxsRecognReqItem *rqi; - RsGxsRecognTagItem *rti; - RsGxsRecognSignerItem *rsi; - - if (NULL != (rqi = dynamic_cast(i))) - { - return sizeReq(rqi); - } - if (NULL != (rti = dynamic_cast(i))) - { - return sizeTag(rti); - } - if (NULL != (rsi = dynamic_cast(i))) - { - return sizeSigner(rsi); - } - return 0; -} - -bool RsGxsRecognSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ - RsGxsRecognReqItem *rri; - RsGxsRecognTagItem *rti; - RsGxsRecognSignerItem *rsi; - - if (NULL != (rri = dynamic_cast(i))) - { - return serialiseReq(rri, data, pktsize); - } - if (NULL != (rti = dynamic_cast(i))) - { - return serialiseTag(rti, data, pktsize); - } - if (NULL != (rsi = dynamic_cast(i))) - { - return serialiseSigner(rsi, data, pktsize); - } - return false; -} - -RsItem *RsGxsRecognSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - if (*pktsize < getRsPktBaseSize()) - return NULL ; - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_GXS_RECOGN != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_RECOGN_REQ: - return deserialiseReq(data, pktsize); - break; - case RS_PKT_SUBTYPE_RECOGN_TAG: - return deserialiseTag(data, pktsize); - break; - case RS_PKT_SUBTYPE_RECOGN_SIGNER: - return deserialiseSigner(data, pktsize); - break; - default: - return NULL; - break; - } -} - -/*************************************************************************/ -#endif diff --git a/libretroshare/src/rsitems/rsgxsreputationitems.cc b/libretroshare/src/rsitems/rsgxsreputationitems.cc index 2a559b052..7b558131a 100644 --- a/libretroshare/src/rsitems/rsgxsreputationitems.cc +++ b/libretroshare/src/rsitems/rsgxsreputationitems.cc @@ -88,525 +88,6 @@ void RsGxsReputationRequestItem::serial_process(RsGenericSerializer::SerializeJo RsTypeSerializer::serial_process(j,ctx,mLastUpdate,"mLastUpdate") ; } -#ifdef TO_REMOVE -// re-defined here, in order to avoid cross-includes -#define REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE 0x0100 - -/*************************************************************************/ -/*************************************************************************/ -/*************************************************************************/ - -std::ostream& RsGxsReputationConfigItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsReputationConfigItem", indent); - - out << "mPeerId: " << mPeerId << std::endl; - out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl; - out << "last query : " << time(NULL) - mLastQuery << " secs ago." << std::endl; - - printRsItemEnd(out, "RsReputationConfigItem", indent); - return out; -} - -std::ostream& RsGxsReputationSetItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsReputationSetItem", indent); - - out << "GxsId: " << mGxsId << std::endl; - out << "Owner: " << mOwnerNodeId << std::endl; - out << "mOwnOpinion: " << mOwnOpinion << std::endl; - out << "mOwnOpinionTS : " << time(NULL) - mOwnOpinionTS << " secs ago." << std::endl; - out << "Opinions from neighbors: " << std::endl; - - for(std::map::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it) - out << " " << it->first << ": " << it->second << std::endl; - - printRsItemEnd(out, "RsReputationSetItem", indent); - return out; -} -std::ostream& RsGxsReputationUpdateItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsReputationUpdateItem", indent); - - out << "from: " << PeerId() << std::endl; - out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl; - - for(std::map::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it) - out << " " << it->first << ": " << it->second << std::endl; - - printRsItemEnd(out, "RsReputationUpdateItem", indent); - return out; -} -std::ostream& RsGxsReputationRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsReputationRequestItem", indent); - - out << "last update: " << time(NULL) - mLastUpdate << " secs ago." << std::endl; - - printRsItemEnd(out, "RsReputationRequestItem", indent); - return out; -} -std::ostream& RsGxsReputationBannedNodeSetItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsReputationBannedNodeSetItem", indent); - - out << "last update: " << time(NULL) - mLastActivityTS << " secs ago." << std::endl; - out << "PGP id: " << mPgpId << std::endl; - out << "Known ids: " << mKnownIdentities.ids.size() << std::endl; - - printRsItemEnd(out, "RsReputationRequestItem", indent); - return out; -} -/*************************************************************************/ - -uint32_t RsGxsReputationConfigItem::serial_size() const -{ - uint32_t s = 8; /* header */ - - s += mPeerId.serial_size() ; // PeerId - s += 4 ; // mLatestUpdate - s += 4 ; // mLastQuery - - return s ; -} - -uint32_t RsGxsReputationSetItem::serial_size() const -{ - uint32_t s = 8; /* header */ - - s += mGxsId.serial_size() ; - s += 4 ; // mOwnOpinion - s += 4 ; // mOwnOpinionTS - s += 4 ; // mIdentityFlags - s += 4 ; // mLastUsedTS - s += mOwnerNodeId.serial_size() ; - - s += 4 ; // mOpinions.size() - - s += (4+RsPeerId::serial_size()) * mOpinions.size() ; - - return s ; -} - -uint32_t RsGxsReputationBannedNodeSetItem::serial_size() const -{ - uint32_t s = 8; /* header */ - - s += RsPgpId::serial_size() ; // mPgpId - s += 4 ; // mLastActivityTS; - s += mKnownIdentities.TlvSize(); // mKnownIdentities - - return s ; -} - -uint32_t RsGxsReputationUpdateItem::serial_size() const -{ - uint32_t s = 8; /* header */ - - s += 4 ; // mLatestUpdate - s += 4 ; // mOpinions.size(); - - s += (RsGxsId::serial_size() + 4) * mOpinions.size() ; - - return s ; -} - -uint32_t RsGxsReputationRequestItem::serial_size() const -{ - uint32_t s = 8; /* header */ - - s += 4 ; // mLastUpdate - - return s; -} - -/*************************************************************************/ - -bool RsGxsReputationConfigItem::serialise(void *data, uint32_t& pktsize) const -{ - uint32_t tlvsize ; - uint32_t offset=0; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - bool ok = true; - - ok &= mPeerId.serialise(data,tlvsize,offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, mLatestUpdate); - ok &= setRawUInt32(data, tlvsize, &offset, mLastQuery); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsReputationConfigItem::serialisedata() size error! " << std::endl; - } - - return ok; -} - -bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const -{ - uint32_t tlvsize ; - uint32_t offset=0; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - bool ok = true; - - ok &= mGxsId.serialise(data,tlvsize,offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinion); - ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinionTS); - ok &= setRawUInt32(data, tlvsize, &offset, mIdentityFlags) ; - ok &= setRawUInt32(data, tlvsize, &offset, mLastUsedTS) ; - ok &= mOwnerNodeId.serialise(data,tlvsize,offset) ; - - ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size()); - - for(std::map::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it) - { - ok &= it->first.serialise(data,tlvsize,offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, it->second) ; - } - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsReputationSetItem::serialisedata() size error! " << std::endl; - } - - return ok; -} - -bool RsGxsReputationBannedNodeSetItem::serialise(void *data, uint32_t& pktsize) const -{ - uint32_t tlvsize ; - uint32_t offset=0; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - bool ok = true; - - ok &= mPgpId.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, mLastActivityTS); - ok &= mKnownIdentities.SetTlv(data, tlvsize, &offset) ; - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsReputationSetItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -bool RsGxsReputationUpdateItem::serialise(void *data, uint32_t& pktsize) const -{ - uint32_t tlvsize ; - uint32_t offset=0; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - bool ok = true; - - ok &= setRawUInt32(data, tlvsize, &offset, mLatestUpdate); - ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size()); - - for(std::map::const_iterator it(mOpinions.begin());ok && it!=mOpinions.end();++it) - { - ok &= it->first.serialise(data, tlvsize, offset) ; - ok &= setRawUInt32(data, tlvsize, &offset, it->second) ; - } - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsReputationUpdateItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -/* serialise the data to the buffer */ -bool RsGxsReputationRequestItem::serialise(void *data, uint32_t& pktsize) const -{ - uint32_t tlvsize ; - uint32_t offset=0; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - bool ok = true; - - ok &= setRawUInt32(data, tlvsize, &offset, mLastUpdate); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsGxsReputationRequestItem::serialisedata() size error! " << std::endl; - } - - return ok; -} -/*************************************************************************/ - -RsGxsReputationConfigItem *RsGxsReputationSerialiser::deserialiseReputationConfigItem(void *data,uint32_t size) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationConfigItem *item = new RsGxsReputationConfigItem() ; - - /* add mandatory parts first */ - ok &= item->mPeerId.deserialise(data, size, offset) ; - ok &= getRawUInt32(data, size, &offset, &item->mLatestUpdate); - ok &= getRawUInt32(data, size, &offset, &item->mLastQuery); - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} - -RsGxsReputationBannedNodeSetItem *RsGxsReputationSerialiser::deserialiseReputationBannedNodeSetItem(void *data,uint32_t size) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationBannedNodeSetItem *item = new RsGxsReputationBannedNodeSetItem() ; - - /* add mandatory parts first */ - ok &= item->mPgpId.deserialise(data, size, offset) ; - ok &= getRawUInt32(data, size, &offset, &item->mLastActivityTS); - ok &= item->mKnownIdentities.GetTlv(data,size,&offset) ; - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} - - -RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem_deprecated(void *data,uint32_t tlvsize) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationSetItem *item = new RsGxsReputationSetItem() ; - - /* add mandatory parts first */ - ok &= item->mGxsId.deserialise(data, tlvsize, offset) ; - - item->mOwnerNodeId.clear(); // clears up, for backward compat. - - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags); - - uint32_t S ; - ok &= getRawUInt32(data, tlvsize, &offset, &S); - - for(uint32_t i = 0; ok && (i < S); ++i) - { - RsPeerId pid ; - uint32_t op ; - - ok &= pid.deserialise(data, tlvsize, offset) ; - ok &= getRawUInt32(data, tlvsize, &offset, &op); - - if(ok) - item->mOpinions[pid] = op ; - } - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -RsGxsReputationSetItem_deprecated3 *RsGxsReputationSerialiser::deserialiseReputationSetItem_deprecated3(void *data,uint32_t tlvsize) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationSetItem_deprecated3 *item = new RsGxsReputationSetItem_deprecated3() ; - - /* add mandatory parts first */ - ok &= item->mGxsId.deserialise(data, tlvsize, offset) ; - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags); - ok &= item->mOwnerNodeId.deserialise(data, tlvsize, offset) ; - - uint32_t S ; - ok &= getRawUInt32(data, tlvsize, &offset, &S); - - for(uint32_t i = 0; ok && (i < S); ++i) - { - RsPeerId pid ; - uint32_t op ; - - ok &= pid.deserialise(data, tlvsize, offset) ; - ok &= getRawUInt32(data, tlvsize, &offset, &op); - - if(ok) - item->mOpinions[pid] = op ; - } - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} -RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem(void *data,uint32_t tlvsize) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationSetItem *item = new RsGxsReputationSetItem() ; - - /* add mandatory parts first */ - ok &= item->mGxsId.deserialise(data, tlvsize, offset) ; - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags); - ok &= getRawUInt32(data, tlvsize, &offset, &item->mLastUsedTS); - ok &= item->mOwnerNodeId.deserialise(data, tlvsize, offset) ; - - uint32_t S ; - ok &= getRawUInt32(data, tlvsize, &offset, &S); - - for(uint32_t i = 0; ok && (i < S); ++i) - { - RsPeerId pid ; - uint32_t op ; - - ok &= pid.deserialise(data, tlvsize, offset) ; - ok &= getRawUInt32(data, tlvsize, &offset, &op); - - if(ok) - item->mOpinions[pid] = op ; - } - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} - -RsGxsReputationUpdateItem *RsGxsReputationSerialiser::deserialiseReputationUpdateItem(void *data,uint32_t tlvsize) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationUpdateItem *item = new RsGxsReputationUpdateItem() ; - - /* add mandatory parts first */ - ok &= getRawUInt32(data, tlvsize, &offset, &item->mLatestUpdate); - - uint32_t S ; - ok &= getRawUInt32(data, tlvsize, &offset, &S) ; - - for(uint32_t i=0;ok && imOpinions[gid] = op ; - - } - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} - -RsGxsReputationRequestItem *RsGxsReputationSerialiser::deserialiseReputationRequestItem(void *data,uint32_t tlvsize) -{ - uint32_t offset = 8; // skip the header - uint32_t rssize = getRsItemSize(data); - bool ok = true ; - - RsGxsReputationRequestItem *item = new RsGxsReputationRequestItem() ; - - /* add mandatory parts first */ - ok &= getRawUInt32(data, tlvsize, &offset, &item->mLastUpdate); - - if (offset != rssize || !ok) - { - std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl; - delete item; - return NULL ; - } - - return item; -} - -/*************************************************************************/ - -RsItem *RsGxsReputationSerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_GXS_TYPE_REPUTATION != getRsItemService(rstype))) - { - std::cerr << "RsReputationSerialiser::deserialise(): wrong item type " << std::hex << rstype << std::dec << std::endl; - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return deserialiseReputationSetItem (data, *pktsize); - case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated3: return deserialiseReputationSetItem_deprecated3(data, *pktsize); - case RS_PKT_SUBTYPE_GXS_REPUTATION_BANNED_NODE_SET_ITEM: return deserialiseReputationBannedNodeSetItem (data, *pktsize); - case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return deserialiseReputationUpdateItem (data, *pktsize); - case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM : return deserialiseReputationRequestItem (data, *pktsize); - case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return deserialiseReputationConfigItem (data, *pktsize); - - default: - std::cerr << "RsGxsReputationSerialiser::deserialise(): unknown item subtype " << std::hex<< rstype << std::dec << std::endl; - return NULL; - break; - } -} -#endif - /*************************************************************************/ RsItem *RsGxsReputationSerialiser::create_item(uint16_t service,uint8_t subtype) const diff --git a/libretroshare/src/rsitems/rshistoryitems.cc b/libretroshare/src/rsitems/rshistoryitems.cc index 3280f8eba..23aa9e38f 100644 --- a/libretroshare/src/rsitems/rshistoryitems.cc +++ b/libretroshare/src/rsitems/rshistoryitems.cc @@ -72,225 +72,4 @@ RsHistoryMsgItem::RsHistoryMsgItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONF saveToDisc = true; } -#ifdef TO_REMOVE -/*************************************************************************/ -RsHistoryMsgItem::~RsHistoryMsgItem() -{ -} - -void RsHistoryMsgItem::clear() -{ - incoming = false; - peerId.clear(); - peerName.clear(); - sendTime = 0; - recvTime = 0; - message.clear(); - msgId = 0; - saveToDisc = true; -} - -std::ostream& RsHistoryMsgItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsHistoryMsgItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "chatPeerid: " << chatPeerId << std::endl; - - printIndent(out, int_Indent); - out << "incoming: " << (incoming ? "1" : "0") << std::endl; - - printIndent(out, int_Indent); - out << "peerId: " << peerId << std::endl; - - printIndent(out, int_Indent); - out << "peerName: " << peerName << std::endl; - - printIndent(out, int_Indent); - out << "sendTime: " << sendTime << std::endl; - - printIndent(out, int_Indent); - out << "recvTime: " << recvTime << std::endl; - - printIndent(out, int_Indent); - std::string cnv_message(message.begin(), message.end()); - out << "message: " << cnv_message << std::endl; - - printRsItemEnd(out, "RsHistoryMsgItem", indent); - return out; -} - - -RsHistorySerialiser::~RsHistorySerialiser() -{ -} - -uint32_t RsHistorySerialiser::sizeHistoryMsgItem(RsHistoryMsgItem* item) -{ - uint32_t s = 8; /* header */ - s += 2; /* version */ - s += item->chatPeerId.serial_size(); - s += 1; /* incoming */ - s += item->peerId.serial_size(); - s += GetTlvStringSize(item->peerName); - s += 4; /* sendTime */ - s += 4; /* recvTime */ - s += GetTlvStringSize(item->message); - - return s; -} -/* serialise the data to the buffer */ -bool RsHistorySerialiser::serialiseHistoryMsgItem(RsHistoryMsgItem* item, void* data, uint32_t* pktsize) -{ - uint32_t tlvsize = sizeHistoryMsgItem(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsHistorySerialiser::serialiseItem() Header: " << ok << std::endl; - std::cerr << "RsHistorySerialiser::serialiseItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt16(data, tlvsize, &offset, 0); // version - ok &= item->chatPeerId.serialise(data, tlvsize, offset) ; - uint8_t dummy = item->incoming ? 1 : 0; - ok &= setRawUInt8(data, tlvsize, &offset, dummy); - ok &= item->peerId.serialise(data, tlvsize, offset) ; - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, item->peerName); - ok &= setRawUInt32(data, tlvsize, &offset, item->sendTime); - ok &= setRawUInt32(data, tlvsize, &offset, item->recvTime); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->message); - - if (offset != tlvsize) - { - ok = false; -#ifdef RSSERIAL_DEBUG - std::cerr << "RsHistorySerialiser::serialiseItem() Size Error! " << std::endl; -#endif - } - - return ok; -} - -RsHistoryMsgItem *RsHistorySerialiser::deserialiseHistoryMsgItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_HISTORY_CONFIG != getRsItemType(rstype)) || - (RS_PKT_SUBTYPE_DEFAULT != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsHistoryMsgItem *item = new RsHistoryMsgItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - uint16_t version = 0; - ok &= getRawUInt16(data, rssize, &offset, &version); - ok &= item->chatPeerId.deserialise(data, rssize, offset) ; - uint8_t dummy; - ok &= getRawUInt8(data, rssize, &offset, &dummy); - item->incoming = (dummy == 1); - ok &= item->peerId.deserialise(data, rssize, offset) ; - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->peerName); - ok &= getRawUInt32(data, rssize, &offset, &(item->sendTime)); - ok &= getRawUInt32(data, rssize, &offset, &(item->recvTime)); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->message); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -uint32_t RsHistorySerialiser::size(RsItem *item) -{ - RsHistoryMsgItem* hi; - - if (NULL != (hi = dynamic_cast(item))) - { - return sizeHistoryMsgItem(hi); - } - - return 0; -} - -bool RsHistorySerialiser::serialise(RsItem *item, void *data, uint32_t *pktsize) -{ - RsHistoryMsgItem* hi; - - if (NULL != (hi = dynamic_cast(item))) - { - return serialiseHistoryMsgItem(hi, data, pktsize); - } - - return false; -} - -RsItem* RsHistorySerialiser::deserialise(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) || - (RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) || - (RS_PKT_TYPE_HISTORY_CONFIG != getRsItemType(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_DEFAULT: - return deserialiseHistoryMsgItem(data, pktsize); - } - - return NULL; -} - -/*************************************************************************/ - -#endif diff --git a/libretroshare/src/rsitems/rsnxsitems.cc b/libretroshare/src/rsitems/rsnxsitems.cc index d6eb8b143..104935930 100644 --- a/libretroshare/src/rsitems/rsnxsitems.cc +++ b/libretroshare/src/rsitems/rsnxsitems.cc @@ -212,1199 +212,4 @@ void RsNxsSessionKeyItem::clear() } #endif -#ifdef TO_REMOVE -uint32_t RsNxsSerialiser::size(RsItem *item) -{ - RsNxsItem *nxs_item = dynamic_cast(item) ; - - if(nxs_item != NULL) - return nxs_item->serial_size() ; - else - { - std::cerr << "RsNxsSerialiser::serialise(): Not an RsNxsItem!" << std::endl; - return 0; - } -} - -bool RsNxsSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsNxsItem *nxs_item = dynamic_cast(item) ; - - if(nxs_item != NULL) - return nxs_item->serialise(data,*size) ; - else - { - std::cerr << "RsNxsSerialiser::serialise(): Not an RsNxsItem!" << std::endl; - return 0; - } -} - -bool RsNxsItem::serialise_header(void *data,uint32_t& pktsize,uint32_t& tlvsize, uint32_t& offset) const -{ - tlvsize = serial_size() ; - offset = 0; - - if (pktsize < tlvsize) - return false; /* not enough space */ - - pktsize = tlvsize; - - if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize)) - { - std::cerr << "RsFileTransferItem::serialise_header(): ERROR. Not enough size!" << std::endl; - return false ; - } -#ifdef RSSERIAL_DEBUG - std::cerr << "RsFileItemSerialiser::serialiseData() Header: " << ok << std::endl; -#endif - offset += 8; - - return true ; -} - -bool RsNxsSyncMsgItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsSynMsgItem()" << std::endl; -#endif - - /* RsNxsSyncMsgItem */ - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, flag); - ok &= grpId.serialise(data, size, offset); - ok &= msgId.serialise(data, size, offset); - ok &= authorId.serialise(data, size, offset); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsSynMsgItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsSynMsgItem() NOK" << std::endl; - } -#endif - - return ok; -} - -bool RsNxsMsg::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, pos); - ok &= msgId.serialise(data, size, offset); - ok &= grpId.serialise(data, size, offset); - ok &= msg.SetTlv(data, size, &offset); - ok &= meta.SetTlv(data, size, &offset); - - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsMsg() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsMsg() NOK" << std::endl; - } -#endif - - return ok; -} - - -bool RsNxsGrp::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - // grp id - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, pos); - ok &= grpId.serialise(data, size, offset); - ok &= grp.SetTlv(data, size, &offset); - ok &= meta.SetTlv(data, size, &offset); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsGrp() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsGrp() NOK" << std::endl; - } -#endif - - return ok; -} -bool RsNxsSyncGrpStatsItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsSyncGrpStats()" << std::endl; -#endif - - ok &= setRawUInt32(data, size, &offset, request_type); - ok &= grpId.serialise(data, size, offset) ; - ok &= setRawUInt32(data, size, &offset, number_of_posts); - ok &= setRawUInt32(data, size, &offset, last_post_TS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseSyncGrpStats() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseSyncGrpStats() NOK" << std::endl; - } -#endif - - return ok; -} -bool RsNxsSyncGrpReqItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, flag); - ok &= setRawUInt32(data, size, &offset, createdSince); - ok &= SetTlvString(data, size, &offset, TLV_TYPE_STR_HASH_SHA1, syncHash); - ok &= setRawUInt32(data, size, &offset, updateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseSyncGrp() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseSyncGrp() NOK" << std::endl; - } -#endif - - return ok; -} - -bool RsNxsTransacItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt16(data, size, &offset, transactFlag); - ok &= setRawUInt32(data, size, &offset, nItems); - ok &= setRawUInt32(data, size, &offset, updateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsTrans() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsTrans() NOK" << std::endl; - } -#endif - - return ok; -} - -bool RsNxsSyncGrpItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - /* RsNxsSyncm */ - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, flag); - ok &= grpId.serialise(data, size, offset); - ok &= setRawUInt32(data, size, &offset, publishTs); - ok &= authorId.serialise(data, size, offset); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsSyncm( FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsSyncm() NOK" << std::endl; - } -#endif - - return ok; -} - - -bool RsNxsSyncMsgReqItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= setRawUInt8(data, size, &offset, flag); - ok &= setRawUInt32(data, size, &offset, createdSinceTS); - ok &= SetTlvString(data, size, &offset, TLV_TYPE_STR_HASH_SHA1, syncHash); - ok &= grpId.serialise(data, size, offset); - ok &= setRawUInt32(data, size, &offset, updateTS); - - if(offset != tlvsize){ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::serialiseNxsSyncMsg() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef RSSERIAL_DEBUG - if (!ok) - { - std::cerr << "RsNxsSerialiser::serialiseNxsSyncMsg( NOK" << std::endl; - } -#endif - - return ok; -} - - -bool RsNxsGroupPublishKeyItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= grpId.serialise(data, size, offset) ; - ok &= private_key.SetTlv(data, size, &offset) ; - - if(offset != tlvsize) - { - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem() FAIL Size Error! " << std::endl; - ok = false; - } - - if (!ok) - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem( NOK" << std::endl; - - return ok; -} - -bool RsNxsSessionKeyItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - - if(offset + EVP_MAX_IV_LENGTH >= size) - { - std::cerr << "RsNxsSessionKeyItem::serialize(): error. Not enough room for IV !" << std::endl; - return false ; - } - memcpy(&((uint8_t*)data)[offset],iv,EVP_MAX_IV_LENGTH) ; - offset += EVP_MAX_IV_LENGTH ; - - ok &= setRawUInt32(data, size, &offset, encrypted_session_keys.size()); - - for(std::map::const_iterator it(encrypted_session_keys.begin());it!=encrypted_session_keys.end();++it) - { - ok &= it->first.serialise(data, size, offset) ; - ok &= it->second.SetTlv(data, size, &offset) ; - } - - if(offset != tlvsize) - { - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem() FAIL Size Error! " << std::endl; - ok = false; - } - - if (!ok) - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem( NOK" << std::endl; - - return ok; -} -bool RsNxsEncryptedDataItem::serialise(void *data, uint32_t& size) const -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,size,tlvsize,offset)) - return false ; - - ok &= setRawUInt32(data, size, &offset, transactionNumber); - ok &= encrypted_data.SetTlv(data, size, &offset) ; - - if(offset != tlvsize) - { - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem() FAIL Size Error! " << std::endl; - ok = false; - } - - if (!ok) - std::cerr << "RsNxsSerialiser::serialiseGroupPublishKeyItem( NOK" << std::endl; - - return ok; -} - - - -/*** deserialisation ***/ - -RsNxsGrp* RsNxsSerialiser::deserialNxsGrpItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_GRP_ITEM); - uint32_t offset = 8; - - RsNxsGrp* item = new RsNxsGrp(SERVICE_TYPE); - - /* skip the header */ - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->pos)); - ok &= item->grpId.deserialise(data, *size, offset); - ok &= item->grp.GetTlv(data, *size, &offset); - ok &= item->meta.GetTlv(data, *size, &offset); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGrp() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGrp() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -RsNxsMsg* RsNxsSerialiser::deserialNxsMsgItem(void *data, uint32_t *size){ - - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_MSG_ITEM); - uint32_t offset = 8; - - RsNxsMsg* item = new RsNxsMsg(SERVICE_TYPE); - /* skip the header */ - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->pos)); - ok &= item->msgId.deserialise(data, *size, offset); - ok &= item->grpId.deserialise(data, *size, offset); - ok &= item->msg.GetTlv(data, *size, &offset); - ok &= item->meta.GetTlv(data, *size, &offset); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsMsg() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsMsg() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -RsNxsSyncGrpStatsItem* RsNxsSerialiser::deserialNxsSyncGrpStatsItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SYNC_GRP_STATS_ITEM); - uint32_t offset = 8; - - RsNxsSyncGrpStatsItem* item = new RsNxsSyncGrpStatsItem(SERVICE_TYPE) ; - /* skip the header */ - - ok &= getRawUInt32(data, *size, &offset, &(item->request_type)); - ok &= item->grpId.deserialise(data, *size, offset) ; - ok &= getRawUInt32(data, *size, &offset, &(item->number_of_posts)); - ok &= getRawUInt32(data, *size, &offset, &(item->last_post_TS)); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrpStats() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrpStats() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -bool RsNxsSerialiser::checkItemHeader(void *data,uint32_t *size,uint8_t subservice_type) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::checkItemHeader()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (SERVICE_TYPE != getRsItemService(rstype)) || (subservice_type != getRsItemSubType(rstype))) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::checkItemHeader() FAIL wrong type" << std::endl; -#endif - return false; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::checkItemHeader() FAIL wrong size" << std::endl; -#endif - return false; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - return true ; -} - -RsNxsSyncGrpReqItem* RsNxsSerialiser::deserialNxsSyncGrpReqItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SYNC_GRP_REQ_ITEM); - - RsNxsSyncGrpReqItem* item = new RsNxsSyncGrpReqItem(SERVICE_TYPE); - /* skip the header */ - uint32_t offset = 8; - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->flag)); - ok &= getRawUInt32(data, *size, &offset, &(item->createdSince)); - ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash); - ok &= getRawUInt32(data, *size, &offset, &(item->updateTS)); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrp() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrp() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -RsNxsSyncGrpItem* RsNxsSerialiser::deserialNxsSyncGrpItem(void *data, uint32_t *size){ - - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SYNC_GRP_ITEM); - - RsNxsSyncGrpItem* item = new RsNxsSyncGrpItem(SERVICE_TYPE); - /* skip the header */ - uint32_t offset = 8; - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->flag)); - ok &= item->grpId.deserialise(data, *size, offset); - ok &= getRawUInt32(data, *size, &offset, &(item->publishTs)); - ok &= item->authorId.deserialise(data, *size, offset); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrpItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncGrpItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -RsNxsTransacItem* RsNxsSerialiser::deserialNxsTransacItem(void *data, uint32_t *size){ - - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_TRANSAC_ITEM); - uint32_t offset = 8 ; - - RsNxsTransacItem* item = new RsNxsTransacItem(SERVICE_TYPE); - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt16(data, *size, &offset, &(item->transactFlag)); - ok &= getRawUInt32(data, *size, &offset, &(item->nItems)); - ok &= getRawUInt32(data, *size, &offset, &(item->updateTS)); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsTrans() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsTrans() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; - - -} - -RsNxsSyncMsgItem* RsNxsSerialiser::deserialNxsSyncMsgItem(void *data, uint32_t *size){ - - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SYNC_MSG_ITEM); - uint32_t offset = 8 ; - - RsNxsSyncMsgItem* item = new RsNxsSyncMsgItem(SERVICE_TYPE); - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->flag)); - ok &= item->grpId.deserialise(data, *size, offset); - ok &= item->msgId.deserialise(data, *size, offset); - ok &= item->authorId.deserialise(data, *size, offset); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncMsgItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncMsgItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -RsNxsSyncMsgReqItem* RsNxsSerialiser::deserialNxsSyncMsgReqItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SYNC_MSG_REQ_ITEM); - uint32_t offset = 8 ; - - RsNxsSyncMsgReqItem* item = new RsNxsSyncMsgReqItem(SERVICE_TYPE); - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - ok &= getRawUInt8(data, *size, &offset, &(item->flag)); - ok &= getRawUInt32(data, *size, &offset, &(item->createdSinceTS)); - ok &= GetTlvString(data, *size, &offset, TLV_TYPE_STR_HASH_SHA1, item->syncHash); - ok &= item->grpId.deserialise(data, *size, offset); - ok &= getRawUInt32(data, *size, &offset, &(item->updateTS)); - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncMsg() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsSyncMsg() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsNxsGroupPublishKeyItem* RsNxsSerialiser::deserialNxsGroupPublishKeyItem(void *data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_GRP_PUBLISH_KEY_ITEM); - uint32_t offset = 8 ; - - RsNxsGroupPublishKeyItem* item = new RsNxsGroupPublishKeyItem(SERVICE_TYPE); - - ok &= item->grpId.deserialise(data, *size, offset); - ok &= item->private_key.GetTlv(data, *size, &offset) ; - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -RsNxsSessionKeyItem *RsNxsSerialiser::deserialNxsSessionKeyItem(void* data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_SESSION_KEY_ITEM); - uint32_t offset = 8 ; - - RsNxsSessionKeyItem* item = new RsNxsSessionKeyItem(SERVICE_TYPE); - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - - if(offset + EVP_MAX_IV_LENGTH >= *size) - { - std::cerr << __PRETTY_FUNCTION__ << ": not enough room for IV." << std::endl; - return NULL ; - } - memcpy(item->iv,&((uint8_t*)data)[offset],EVP_MAX_IV_LENGTH) ; - offset += EVP_MAX_IV_LENGTH ; - - uint32_t n ; - ok &= getRawUInt32(data, *size, &offset, &n) ; - - for(uint32_t i=0;ok && iencrypted_session_keys[gxs_id] = bdata ; - } - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} -RsNxsEncryptedDataItem *RsNxsSerialiser::deserialNxsEncryptedDataItem(void* data, uint32_t *size) -{ - bool ok = checkItemHeader(data,size,RS_PKT_SUBTYPE_NXS_ENCRYPTED_DATA_ITEM); - uint32_t offset = 8 ; - - RsNxsEncryptedDataItem* item = new RsNxsEncryptedDataItem(SERVICE_TYPE); - - ok &= getRawUInt32(data, *size, &offset, &(item->transactionNumber)); - item->encrypted_data.tlvtype = TLV_TYPE_BIN_ENCRYPTED ; - - ok &= item->encrypted_data.GetTlv(data,*size,&offset) ; - - if (offset != *size) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef RSSERIAL_DEBUG - std::cerr << "RsNxsSerialiser::deserialNxsGroupPublishKeyItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - -/*** size functions ***/ - - -uint32_t RsNxsMsg::serial_size()const -{ - - uint32_t s = 8; //header size - - s += 4; // transaction number - s += 1; // pos - s += grpId.serial_size(); - s += msgId.serial_size(); - s += msg.TlvSize(); - s += meta.TlvSize(); - - return s; -} - -uint32_t RsNxsGrp::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += 1; // pos - s += grpId.serial_size(); - s += grp.TlvSize(); - s += meta.TlvSize(); - - return s; -} - -uint32_t RsNxsGroupPublishKeyItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += grpId.serial_size() ; - s += private_key.TlvSize(); - - return s; -} -uint32_t RsNxsSyncGrpReqItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += 1; // flag - s += 4; // sync age - s += GetTlvStringSize(syncHash); - s += 4; // updateTS - - return s; -} -uint32_t RsNxsSyncGrpStatsItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // request type - s += grpId.serial_size(); - s += 4; // number_of_posts - s += 4; // last_post_TS - - return s; -} - -uint32_t RsNxsSyncGrpItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += 4; // publishTs - s += 1; // flag - s += grpId.serial_size(); - s += authorId.serial_size(); - - return s; -} - - -uint32_t RsNxsSyncMsgReqItem::serial_size() const -{ - - uint32_t s = 8; - - s += 4; // transaction number - s += 1; // flag - s += 4; // age - s += grpId.serial_size(); - s += GetTlvStringSize(syncHash); - s += 4; // updateTS - - return s; -} - - -uint32_t RsNxsSyncMsgItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += 1; // flag - s += grpId.serial_size(); - s += msgId.serial_size(); - s += authorId.serial_size(); - - return s; -} - -uint32_t RsNxsTransacItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += 2; // flag - s += 4; // nMsgs - s += 4; // updateTS - - return s; -} -uint32_t RsNxsEncryptedDataItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += encrypted_data.TlvSize() ; - - return s; -} -uint32_t RsNxsSessionKeyItem::serial_size() const -{ - uint32_t s = 8; // header size - - s += 4; // transaction number - s += EVP_MAX_IV_LENGTH ; // iv - s += 4 ; // encrypted_session_keys.size() ; - - for(std::map::const_iterator it(encrypted_session_keys.begin());it!=encrypted_session_keys.end();++it) - s += it->first.serial_size() + it->second.TlvSize() ; - - return s; -} - - -std::ostream& RsNxsSyncGrpReqItem::print(std::ostream &out, uint16_t indent) -{ - - printRsItemBase(out, "RsNxsSyncGrp", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); - out << "Hash: " << syncHash << std::endl; - printIndent(out , int_Indent); - out << "Sync Age: " << createdSince << std::endl; - printIndent(out , int_Indent); - out << "flag: " << (uint32_t) flag << std::endl; - printIndent(out , int_Indent); - out << "updateTS: " << updateTS << std::endl; - - printRsItemEnd(out ,"RsNxsSyncGrp", indent); - - return out; -} -std::ostream& RsNxsGroupPublishKeyItem::print(std::ostream &out, uint16_t indent) -{ - - printRsItemBase(out, "RsNxsGroupPublishKeyItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); - out << "GroupId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "keyId: " << private_key.keyId << std::endl; - - printRsItemEnd(out ,"RsNxsGroupPublishKeyItem", indent); - - return out; -} - - -std::ostream& RsNxsSyncMsgReqItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNxsSyncMsg", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); - out << "GrpId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "createdSince: " << createdSinceTS << std::endl; - printIndent(out , int_Indent); - out << "syncHash: " << syncHash << std::endl; - printIndent(out , int_Indent); - out << "flag: " << (uint32_t) flag << std::endl; - printIndent(out , int_Indent); - out << "updateTS: " << updateTS << std::endl; - - printRsItemEnd(out, "RsNxsSyncMsg", indent); - return out; -} - -std::ostream& RsNxsSyncGrpItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNxsSyncGrpItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); - out << "flag: " << (uint32_t) flag << std::endl; - printIndent(out , int_Indent); - out << "grpId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "publishTs: " << publishTs << std::endl; - printIndent(out , int_Indent); - out << "authorId: " << authorId << std::endl; - - printRsItemEnd(out , "RsNxsSyncGrpItem", indent); - return out; -} - - - -std::ostream& RsNxsSyncMsgItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNxsSyncMsgItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out , int_Indent); - out << "flag: " << (uint32_t) flag << std::endl; - printIndent(out , int_Indent); - out << "grpId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "msgId: " << msgId << std::endl; - printIndent(out , int_Indent); - out << "authorId: " << authorId << std::endl; - printIndent(out , int_Indent); - - printRsItemEnd(out ,"RsNxsSyncMsgItem", indent); - return out; -} - -RsNxsGrp* RsNxsGrp::clone() const { - RsNxsGrp* grp = new RsNxsGrp(PacketService()); - *grp = *this; - - if(this->metaData) - { - grp->metaData = new RsGxsGrpMetaData(); -// *(grp->metaData) = *(this->metaData); - } - - return grp; -} - -std::ostream& RsNxsGrp::print(std::ostream &out, uint16_t indent){ - - printRsItemBase(out, "RsNxsGrp", indent); - uint16_t int_Indent = indent + 2; - - out << "grpId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "grp: " << std::endl; - printIndent(out , int_Indent); - out << "pos: " << pos << std::endl; - grp.print(out, int_Indent); - out << "meta: " << std::endl; - meta.print(out, int_Indent); - - printRsItemEnd(out, "RsNxsGrp", indent); - return out; -} - -std::ostream& RsNxsMsg::print(std::ostream &out, uint16_t indent){ - - printRsItemBase(out, "RsNxsMsg", indent); - uint16_t int_Indent = indent + 2; - - out << "msgId: " << msgId << std::endl; - printIndent(out , int_Indent); - out << "grpId: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "pos: " << pos << std::endl; - printIndent(out , int_Indent); - out << "msg: " << std::endl; - msg.print(out, indent); - out << "meta: " << std::endl; - meta.print(out, int_Indent); - - printRsItemEnd(out ,"RsNxsMsg", indent); - return out; -} - -std::ostream& RsNxsSyncGrpStatsItem::print(std::ostream &out, uint16_t indent){ - - printRsItemBase(out, "RsNxsSyncGrpStats", indent); - uint16_t int_Indent = indent + 2; - - out << "available posts: " << number_of_posts << std::endl; - printIndent(out , int_Indent); - out << "last update: " << last_post_TS << std::endl; - printIndent(out , int_Indent); - out << "group ID: " << grpId << std::endl; - printIndent(out , int_Indent); - out << "request type: " << request_type << std::endl; - printIndent(out , int_Indent); - - printRsItemEnd(out ,"RsNxsSyncGrpStats", indent); - return out; -} -std::ostream& RsNxsTransacItem::print(std::ostream &out, uint16_t indent){ - - printRsItemBase(out, "RsNxsTransac", indent); - uint16_t int_Indent = indent + 2; - - out << "transactFlag: " << transactFlag << std::endl; - printIndent(out , int_Indent); - out << "nItems: " << nItems << std::endl; - printIndent(out , int_Indent); - out << "timeout: " << timestamp << std::endl; - printIndent(out , int_Indent); - out << "updateTS: " << updateTS << std::endl; - printIndent(out , int_Indent); - out << "transactionNumber: " << transactionNumber << std::endl; - printIndent(out , int_Indent); - - printRsItemEnd(out ,"RsNxsTransac", indent); - return out; -} -std::ostream& RsNxsSessionKeyItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNxsSessionKeyItem", indent); - - out << " iv: " << RsUtil::BinToHex((char*)iv,EVP_MAX_IV_LENGTH) << std::endl; - - out << " encrypted keys: " << std::endl; - - for(std::map::const_iterator it(encrypted_session_keys.begin());it!=encrypted_session_keys.end();++it) - out << " id=" << it->first << ": ekey=" << RsUtil::BinToHex((char*)it->second.bin_data,it->second.bin_len) << std::endl; - - printRsItemEnd(out ,"RsNxsSessionKeyItem", indent); - return out; -} -std::ostream& RsNxsEncryptedDataItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsNxsEncryptedDataItem", indent); - - out << " encrypted data: " << RsUtil::BinToHex((char*)encrypted_data.bin_data,std::min(50u,encrypted_data.bin_len)) ; - - if(encrypted_data.bin_len > 50u) - out << "..." ; - - out << std::endl; - - printRsItemEnd(out ,"RsNxsSessionKeyItem", indent); - return out; -} -#endif diff --git a/libretroshare/src/rsitems/rsrttitems.cc b/libretroshare/src/rsitems/rsrttitems.cc index c4c499f79..033975a3b 100644 --- a/libretroshare/src/rsitems/rsrttitems.cc +++ b/libretroshare/src/rsitems/rsrttitems.cc @@ -63,339 +63,5 @@ void RsRttPongItem::serial_process(RsGenericSerializer::SerializeJob j,RsGeneric RsTypeSerializer::serial_process(j,ctx,mPongTS,"mPongTS") ; } -#ifdef TO_REMOVE -RsRttPingItem::~RsRttPingItem() -{ - return; -} -void RsRttPingItem::clear() -{ - mSeqNo = 0; - mPingTS = 0; -} - -std::ostream& RsRttPingItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsRttPingItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "SeqNo: " << mSeqNo << std::endl; - - printIndent(out, int_Indent); - out << "PingTS: " << std::hex << mPingTS << std::dec << std::endl; - - printRsItemEnd(out, "RsRttPingItem", indent); - return out; -} - - - - - -RsRttPongItem::~RsRttPongItem() -{ - return; -} - -void RsRttPongItem::clear() -{ - mSeqNo = 0; - mPingTS = 0; - mPongTS = 0; -} - - -std::ostream& RsRttPongItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsRttPongItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "SeqNo: " << mSeqNo << std::endl; - - printIndent(out, int_Indent); - out << "PingTS: " << std::hex << mPingTS << std::dec << std::endl; - - printIndent(out, int_Indent); - out << "PongTS: " << std::hex << mPongTS << std::dec << std::endl; - - printRsItemEnd(out, "RsRttPongItem", indent); - return out; -} - - -/*************************************************************************/ - - -uint32_t RsRttSerialiser::sizeRttPingItem(RsRttPingItem */*item*/) -{ - uint32_t s = 8; /* header */ - s += 4; /* seqno */ - s += 8; /* pingTS */ - - return s; -} - -/* serialise the data to the buffer */ -bool RsRttSerialiser::serialiseRttPingItem(RsRttPingItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeRttPingItem(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsRttSerialiser::serialiseRttPingItem() Header: " << ok << std::endl; - std::cerr << "RsRttSerialiser::serialiseRttPingItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->mSeqNo); - ok &= setRawUInt64(data, tlvsize, &offset, item->mPingTS); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsRttSerialiser::serialiseRttPingItem() Size Error! " << std::endl; - } - - return ok; -} - -RsRttPingItem *RsRttSerialiser::deserialiseRttPingItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_RTT != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_RTT_PING != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsRttPingItem *item = new RsRttPingItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->mSeqNo)); - ok &= getRawUInt64(data, rssize, &offset, &(item->mPingTS)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ -/*************************************************************************/ - - -uint32_t RsRttSerialiser::sizeRttPongItem(RsRttPongItem */*item*/) -{ - uint32_t s = 8; /* header */ - s += 4; /* seqno */ - s += 8; /* pingTS */ - s += 8; /* pongTS */ - - return s; -} - -/* serialise the data to the buffer */ -bool RsRttSerialiser::serialiseRttPongItem(RsRttPongItem *item, void *data, uint32_t *pktsize) -{ - uint32_t tlvsize = sizeRttPongItem(item); - uint32_t offset = 0; - - if (*pktsize < tlvsize) - return false; /* not enough space */ - - *pktsize = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - -#ifdef RSSERIAL_DEBUG - std::cerr << "RsRttSerialiser::serialiseRttPongItem() Header: " << ok << std::endl; - std::cerr << "RsRttSerialiser::serialiseRttPongItem() Size: " << tlvsize << std::endl; -#endif - - /* skip the header */ - offset += 8; - - /* add mandatory parts first */ - ok &= setRawUInt32(data, tlvsize, &offset, item->mSeqNo); - ok &= setRawUInt64(data, tlvsize, &offset, item->mPingTS); - ok &= setRawUInt64(data, tlvsize, &offset, item->mPongTS); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsRttSerialiser::serialiseRttPongItem() Size Error! " << std::endl; - } - - return ok; -} - -RsRttPongItem *RsRttSerialiser::deserialiseRttPongItem(void *data, uint32_t *pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_RTT != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_RTT_PONG != getRsItemSubType(rstype))) - { - return NULL; /* wrong type */ - } - - if (*pktsize < rssize) /* check size */ - return NULL; /* not enough data */ - - /* set the packet length */ - *pktsize = rssize; - - bool ok = true; - - /* ready to load */ - RsRttPongItem *item = new RsRttPongItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt32(data, rssize, &offset, &(item->mSeqNo)); - ok &= getRawUInt64(data, rssize, &offset, &(item->mPingTS)); - ok &= getRawUInt64(data, rssize, &offset, &(item->mPongTS)); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - -/*************************************************************************/ - -uint32_t RsRttSerialiser::size(RsItem *i) -{ - RsRttPingItem *ping; - RsRttPongItem *pong; - - if (NULL != (ping = dynamic_cast(i))) - { - return sizeRttPingItem(ping); - } - else if (NULL != (pong = dynamic_cast(i))) - { - return sizeRttPongItem(pong); - } - return 0; -} - -bool RsRttSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsMsgSerialiser::serialise()" << std::endl; -#endif - - RsRttPingItem *ping; - RsRttPongItem *pong; - - if (NULL != (ping = dynamic_cast(i))) - { - return serialiseRttPingItem(ping, data, pktsize); - } - else if (NULL != (pong = dynamic_cast(i))) - { - return serialiseRttPongItem(pong, data, pktsize); - } - return false; -} - -RsItem* RsRttSerialiser::deserialise(void *data, uint32_t *pktsize) -{ -#ifdef RSSERIAL_DEBUG - std::cerr << "RsRttSerialiser::deserialise()" << std::endl; -#endif - - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_TYPE_RTT != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - case RS_PKT_SUBTYPE_RTT_PING: - return deserialiseRttPingItem(data, pktsize); - break; - case RS_PKT_SUBTYPE_RTT_PONG: - return deserialiseRttPongItem(data, pktsize); - break; - default: - return NULL; - break; - } - - return NULL; -} - - -/*************************************************************************/ -#endif diff --git a/libretroshare/src/rsitems/rswikiitems.cc b/libretroshare/src/rsitems/rswikiitems.cc index ec42e14f0..96f9e2768 100644 --- a/libretroshare/src/rsitems/rswikiitems.cc +++ b/libretroshare/src/rsitems/rswikiitems.cc @@ -46,94 +46,6 @@ RsItem *RsGxsWikiSerialiser::create_item(uint16_t service, uint8_t item_sub_id) } } -#ifdef TO_REMOVE -uint32_t RsGxsWikiSerialiser::size(RsItem *item) -{ - RsGxsWikiCollectionItem* grp_item = NULL; - RsGxsWikiSnapshotItem* snap_item = NULL; - RsGxsWikiCommentItem* com_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return sizeGxsWikiCollectionItem(grp_item); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return sizeGxsWikiSnapshotItem(snap_item); - } - else if((com_item = dynamic_cast(item)) != NULL) - { - return sizeGxsWikiCommentItem(com_item); - } - return 0; -} - -bool RsGxsWikiSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsGxsWikiCollectionItem* grp_item = NULL; - RsGxsWikiSnapshotItem* snap_item = NULL; - RsGxsWikiCommentItem* com_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsWikiCollectionItem(grp_item, data, size); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsWikiSnapshotItem(snap_item, data, size); - } - else if((com_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsWikiCommentItem(com_item, data, size); - } - return false; -} - -RsItem* RsGxsWikiSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM: - return deserialiseGxsWikiCollectionItem(data, size); - break; - case RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM: - return deserialiseGxsWikiSnapshotItem(data, size); - break; - case RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM: - return deserialiseGxsWikiCommentItem(data, size); - break; - default: -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif - void RsGxsWikiCollectionItem::clear() { collection.mDescription.clear(); @@ -141,38 +53,6 @@ void RsGxsWikiCollectionItem::clear() collection.mHashTags.clear(); } -#ifdef TO_REMOVE -std::ostream& RsGxsWikiCollectionItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsWikiCollectionItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Description: " << collection.mDescription << std::endl; - printIndent(out, int_Indent); - out << "Category: " << collection.mCategory << std::endl; - printIndent(out, int_Indent); - out << "HashTags: " << collection.mHashTags << std::endl; - - printRsItemEnd(out ,"RsGxsWikiCollectionItem", indent); - return out; -} - - -uint32_t RsGxsWikiSerialiser::sizeGxsWikiCollectionItem(RsGxsWikiCollectionItem *item) -{ - - const RsWikiCollection& collection = item->collection; - uint32_t s = 8; // header - - s += GetTlvStringSize(collection.mDescription); - s += GetTlvStringSize(collection.mCategory); - s += GetTlvStringSize(collection.mHashTags); - - return s; -} -#endif - void RsGxsWikiCollectionItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR ,collection.mDescription,"collection.mDescription") ; @@ -180,448 +60,25 @@ void RsGxsWikiCollectionItem::serial_process(RsGenericSerializer::SerializeJob j RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG,collection.mHashTags ,"collection.mHashTags") ; } -#ifdef TO_REMOVE -bool RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem(RsGxsWikiCollectionItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsWikiCollectionItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsWikiCollectionItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->collection.mDescription); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_CATEGORY, item->collection.mCategory); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_HASH_TAG, item->collection.mHashTags); - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCollectionItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsWikiCollectionItem* RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem(void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsWikiCollectionItem* item = new RsGxsWikiCollectionItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->collection.mDescription); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_CATEGORY, item->collection.mCategory); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_HASH_TAG, item->collection.mHashTags); - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif - void RsGxsWikiSnapshotItem::clear() { snapshot.mPage.clear(); snapshot.mHashTags.clear(); } -#ifdef TO_REMOVE -std::ostream& RsGxsWikiSnapshotItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsWikiSnapshotItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Page: " << snapshot.mPage << std::endl; - - printIndent(out, int_Indent); - out << "HashTags: " << snapshot.mHashTags << std::endl; - - printRsItemEnd(out ,"RsGxsWikiSnapshotItem", indent); - return out; -} - - -uint32_t RsGxsWikiSerialiser::sizeGxsWikiSnapshotItem(RsGxsWikiSnapshotItem *item) -{ - - const RsWikiSnapshot& snapshot = item->snapshot; - uint32_t s = 8; // header - - s += GetTlvStringSize(snapshot.mPage); - s += GetTlvStringSize(snapshot.mHashTags); - - return s; -} -#endif - void RsGxsWikiSnapshotItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_WIKI_PAGE,snapshot.mPage,"snapshot.mPage") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG ,snapshot.mPage,"snapshot.mHashTags") ; } -#ifdef TO_REMOVE -bool RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem(RsGxsWikiSnapshotItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsWikiSnapshotItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsWikiSnapshotItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_WIKI_PAGE, item->snapshot.mPage); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_HASH_TAG, item->snapshot.mHashTags); - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiSnapshotItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsWikiSnapshotItem* RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem(void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsWikiSnapshotItem* item = new RsGxsWikiSnapshotItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_WIKI_PAGE, item->snapshot.mPage); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_HASH_TAG, item->snapshot.mHashTags); - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif - void RsGxsWikiCommentItem::clear() { comment.mComment.clear(); } -#ifdef TO_REMOVE -std::ostream& RsGxsWikiCommentItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsWikiCommentItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Comment: " << comment.mComment << std::endl; - - printRsItemEnd(out ,"RsGxsWikiCommentItem", indent); - return out; -} - - -uint32_t RsGxsWikiSerialiser::sizeGxsWikiCommentItem(RsGxsWikiCommentItem *item) -{ - - const RsWikiComment& comment = item->comment; - uint32_t s = 8; // header - - s += GetTlvStringSize(comment.mComment); - - return s; -} -#endif - void RsGxsWikiCommentItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_COMMENT,comment.mComment,"comment.mComment") ; } -#ifdef TO_REMOVE -bool RsGxsWikiSerialiser::serialiseGxsWikiCommentItem(RsGxsWikiCommentItem *item, void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCommentItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsWikiCommentItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCommentItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsWikiCommentItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - - if(offset != tlvsize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCommentItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef GXSID_DEBUG - if (!ok) - { - std::cerr << "RsGxsWikiSerialiser::serialiseGxsWikiCommentItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsWikiCommentItem* RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem(void *data, uint32_t *size) -{ - -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM != getRsItemSubType(rstype))) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsWikiCommentItem* item = new RsGxsWikiCommentItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_COMMENT, item->comment.mComment); - - if (offset != rssize) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef GXSID_DEBUG - std::cerr << "RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -#endif diff --git a/libretroshare/src/rsitems/rswireitems.cc b/libretroshare/src/rsitems/rswireitems.cc index 55a56a803..7a8008ff8 100644 --- a/libretroshare/src/rsitems/rswireitems.cc +++ b/libretroshare/src/rsitems/rswireitems.cc @@ -46,398 +46,19 @@ RsItem *RsGxsWireSerialiser::create_item(uint16_t service,uint8_t item_subtype) } } -#ifdef TO_REMOVE -uint32_t RsGxsWireSerialiser::size(RsItem *item) -{ - RsGxsWireGroupItem* grp_item = NULL; - RsGxsWirePulseItem* snap_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return sizeGxsWireGroupItem(grp_item); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return sizeGxsWirePulseItem(snap_item); - } - return 0; -} - -bool RsGxsWireSerialiser::serialise(RsItem *item, void *data, uint32_t *size) -{ - RsGxsWireGroupItem* grp_item = NULL; - RsGxsWirePulseItem* snap_item = NULL; - - if((grp_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsWireGroupItem(grp_item, data, size); - } - else if((snap_item = dynamic_cast(item)) != NULL) - { - return serialiseGxsWirePulseItem(snap_item, data, size); - } - return false; -} - -RsItem* RsGxsWireSerialiser::deserialise(void* data, uint32_t* size) -{ - -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialise()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype))) - { - return NULL; /* wrong type */ - } - - switch(getRsItemSubType(rstype)) - { - - case RS_PKT_SUBTYPE_WIRE_GROUP_ITEM: - return deserialiseGxsWireGroupItem(data, size); - break; - case RS_PKT_SUBTYPE_WIRE_PULSE_ITEM: - return deserialiseGxsWirePulseItem(data, size); - break; - default: -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialise(): unknown subtype"; - std::cerr << std::endl; -#endif - break; - } - return NULL; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif - void RsGxsWireGroupItem::clear() { group.mDescription.clear(); } -#ifdef TO_REMOVE -std::ostream& RsGxsWireGroupItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsWireGroupItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Description: " << group.mDescription << std::endl; - - printRsItemEnd(out ,"RsGxsWireGroupItem", indent); - return out; -} - - -uint32_t RsGxsWireSerialiser::sizeGxsWireGroupItem(RsGxsWireGroupItem *item) -{ - - const RsWireGroup& group = item->group; - uint32_t s = 8; // header - - s += GetTlvStringSize(group.mDescription); - - return s; -} - -#endif - void RsGxsWireGroupItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_DESCR,group.mDescription,"group.mDescription") ; } -#ifdef TO_REMOVE -bool RsGxsWireSerialiser::serialiseGxsWireGroupItem(RsGxsWireGroupItem *item, void *data, uint32_t *size) -{ - -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWireGroupItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsWireGroupItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWireGroupItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsWireGroupItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DESCR, item->group.mDescription); - - if(offset != tlvsize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWireGroupItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef WIRE_DEBUG - if (!ok) - { - std::cerr << "RsGxsWireSerialiser::serialiseGxsWireGroupItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsWireGroupItem* RsGxsWireSerialiser::deserialiseGxsWireGroupItem(void *data, uint32_t *size) -{ - -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWireGroupItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_WIRE_GROUP_ITEM != getRsItemSubType(rstype))) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWireGroupItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWireGroupItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsWireGroupItem* item = new RsGxsWireGroupItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_DESCR, item->group.mDescription); - - if (offset != rssize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWireGroupItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWireGroupItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - - -void RsGxsWirePulseItem::clear() -{ - pulse.mPulseText.clear(); - pulse.mHashTags.clear(); -} - -std::ostream& RsGxsWirePulseItem::print(std::ostream& out, uint16_t indent) -{ - printRsItemBase(out, "RsGxsWirePulseItem", indent); - uint16_t int_Indent = indent + 2; - - printIndent(out, int_Indent); - out << "Page: " << pulse.mPulseText << std::endl; - - printIndent(out, int_Indent); - out << "HashTags: " << pulse.mHashTags << std::endl; - - printRsItemEnd(out ,"RsGxsWirePulseItem", indent); - return out; -} - - -uint32_t RsGxsWireSerialiser::sizeGxsWirePulseItem(RsGxsWirePulseItem *item) -{ - - const RsWirePulse& pulse = item->pulse; - uint32_t s = 8; // header - - s += GetTlvStringSize(pulse.mPulseText); - s += GetTlvStringSize(pulse.mHashTags); - - return s; -} - -#endif - void RsGxsWirePulseItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_MSG,pulse.mPulseText,"pulse.mPulseText") ; RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_TAG,pulse.mHashTags,"pulse.mHashTags") ; } -#ifdef TO_REMOVE -bool RsGxsWireSerialiser::serialiseGxsWirePulseItem(RsGxsWirePulseItem *item, void *data, uint32_t *size) -{ - -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWirePulseItem()" << std::endl; -#endif - - uint32_t tlvsize = sizeGxsWirePulseItem(item); - uint32_t offset = 0; - - if(*size < tlvsize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWirePulseItem()" << std::endl; -#endif - return false; - } - - *size = tlvsize; - - bool ok = true; - - ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize); - - /* skip the header */ - offset += 8; - - /* GxsWirePulseItem */ - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->pulse.mPulseText); - ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_HASH_TAG, item->pulse.mHashTags); - - if(offset != tlvsize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::serialiseGxsWirePulseItem() FAIL Size Error! " << std::endl; -#endif - ok = false; - } - -#ifdef WIRE_DEBUG - if (!ok) - { - std::cerr << "RsGxsWireSerialiser::serialiseGxsWirePulseItem() NOK" << std::endl; - } -#endif - - return ok; - } - -RsGxsWirePulseItem* RsGxsWireSerialiser::deserialiseGxsWirePulseItem(void *data, uint32_t *size) -{ - -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWirePulseItem()" << std::endl; -#endif - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || - (RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype)) || - (RS_PKT_SUBTYPE_WIRE_PULSE_ITEM != getRsItemSubType(rstype))) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWirePulseItem() FAIL wrong type" << std::endl; -#endif - return NULL; /* wrong type */ - } - - if (*size < rssize) /* check size */ - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWirePulseItem() FAIL wrong size" << std::endl; -#endif - return NULL; /* not enough data */ - } - - /* set the packet length */ - *size = rssize; - - bool ok = true; - - RsGxsWirePulseItem* item = new RsGxsWirePulseItem(); - /* skip the header */ - offset += 8; - - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->pulse.mPulseText); - ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_HASH_TAG, item->pulse.mHashTags); - - if (offset != rssize) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWirePulseItem() FAIL size mismatch" << std::endl; -#endif - /* error */ - delete item; - return NULL; - } - - if (!ok) - { -#ifdef WIRE_DEBUG - std::cerr << "RsGxsWireSerialiser::deserialiseGxsWirePulseItem() NOK" << std::endl; -#endif - delete item; - return NULL; - } - - return item; -} - - -/*****************************************************************************************/ -/*****************************************************************************************/ -/*****************************************************************************************/ - -#endif From 214aaa7c9b08c9a1106497c30ce2006ffa68b838 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 3 May 2017 22:20:58 +0200 Subject: [PATCH 227/230] added safety check for null chunks in TlvMemBlock_proxy deserialization --- .../src/serialiser/rstypeserializer.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/libretroshare/src/serialiser/rstypeserializer.cc b/libretroshare/src/serialiser/rstypeserializer.cc index 661897b4b..f4cfc0d62 100644 --- a/libretroshare/src/serialiser/rstypeserializer.cc +++ b/libretroshare/src/serialiser/rstypeserializer.cc @@ -32,6 +32,7 @@ #include static const uint32_t MAX_SERIALIZED_ARRAY_SIZE = 500 ; +static const uint32_t MAX_SERIALIZED_CHUNK_SIZE = 10*1024*1024 ; // 10 MB. //=================================================================================================// // Integer types // @@ -231,9 +232,25 @@ template<> bool RsTypeSerializer::deserialize(const uint8_t data[],uint32_t size bool ok = deserialize(data,size,offset,r.second) ; + if(r.second == 0) + { + r.first = NULL ; + + if(!ok) + offset = saved_offset ; + + return ok ; + } + if(r.second > MAX_SERIALIZED_CHUNK_SIZE) + { + std::cerr << "(EE) RsTypeSerializer::deserialize(): data chunk has size larger than safety size (" << MAX_SERIALIZED_CHUNK_SIZE << "). Item will be dropped." << std::endl; + offset = saved_offset ; + return false ; + } + r.first = (uint8_t*)rs_malloc(r.second) ; - ok = ok && NULL != r.first; + ok = ok && (NULL != r.first); memcpy(r.first,&data[offset],r.second) ; offset += r.second ; From 4f4240d570ae6982e2ae475559ab0b026d31d0a9 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 3 May 2017 22:43:16 +0200 Subject: [PATCH 228/230] fixed bug in history serializer --- libretroshare/src/rsitems/rshistoryitems.cc | 6 +++--- libretroshare/src/rsitems/rshistoryitems.h | 2 +- libretroshare/src/serialiser/rsserializer.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libretroshare/src/rsitems/rshistoryitems.cc b/libretroshare/src/rsitems/rshistoryitems.cc index 23aa9e38f..a66299b51 100644 --- a/libretroshare/src/rsitems/rshistoryitems.cc +++ b/libretroshare/src/rsitems/rshistoryitems.cc @@ -51,12 +51,12 @@ void RsHistoryMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGene RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,message,"message") ; } -RsItem *RsHistorySerialiser::create_item(uint8_t serial_class,uint8_t serial_type) const +RsItem *RsHistorySerialiser::create_item(uint8_t item_type,uint8_t item_subtype) const { - if(serial_class != RS_PKT_CLASS_CONFIG) + if(item_type != RS_PKT_TYPE_HISTORY_CONFIG) return NULL ; - if(serial_type == RS_PKT_SUBTYPE_DEFAULT) + if(item_subtype == RS_PKT_SUBTYPE_DEFAULT) return new RsHistoryMsgItem(); return NULL ; diff --git a/libretroshare/src/rsitems/rshistoryitems.h b/libretroshare/src/rsitems/rshistoryitems.h index 04d3e9ca7..802754e91 100644 --- a/libretroshare/src/rsitems/rshistoryitems.h +++ b/libretroshare/src/rsitems/rshistoryitems.h @@ -63,7 +63,7 @@ public: RsHistorySerialiser() : RsConfigSerializer(RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_HISTORY_CONFIG) {} virtual ~RsHistorySerialiser() {} - virtual RsItem *create_item(uint8_t service,uint8_t type) const ; + virtual RsItem *create_item(uint8_t item_type,uint8_t item_subtype) const ; }; /**************************************************************************/ diff --git a/libretroshare/src/serialiser/rsserializer.h b/libretroshare/src/serialiser/rsserializer.h index c9f1f6403..2cae93ab7 100644 --- a/libretroshare/src/serialiser/rsserializer.h +++ b/libretroshare/src/serialiser/rsserializer.h @@ -289,7 +289,7 @@ public: /*! create_item * should be overloaded to create the correct type of item depending on the data */ - virtual RsItem *create_item(uint8_t /* class */, uint8_t /* item_type */) const=0; + virtual RsItem *create_item(uint8_t /* item_type */, uint8_t /* item_sub_type */) const=0; RsItem *deserialise(void *data,uint32_t *size) ; }; From 6484ea66f7f8119cdb9b06c938367cdd774a493a Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 4 May 2017 21:19:23 +0200 Subject: [PATCH 229/230] improved graph widget --- .../src/gui/common/RSGraphWidget.cpp | 32 +++++++++++++++++-- retroshare-gui/src/gui/common/RSGraphWidget.h | 9 ++++-- .../gui/statistics/BandwidthStatsWidget.cpp | 2 ++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.cpp b/retroshare-gui/src/gui/common/RSGraphWidget.cpp index b7759d846..d0bbaa1dc 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.cpp +++ b/retroshare-gui/src/gui/common/RSGraphWidget.cpp @@ -259,6 +259,7 @@ RSGraphWidget::RSGraphWidget(QWidget *parent) _maxPoints = getNumPoints(); _maxValue = MINUSER_SCALE; + _linewidthscale = 1.0f; _opacity = 0.6 ; _flags = 0; _time_scale = 5.0f ; // in pixels per second. @@ -414,12 +415,16 @@ void RSGraphWidget::paintData() /* Plot the bandwidth as solid lines. If the graph style is currently an * area graph, we end up outlining the integrals. */ - paintLine(points, getColor(i)); + + if(_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS) + paintDots(points, getColor(i)); + else + paintLine(points, getColor(i)); } if(_maxValue > 0.0f) { if(_flags & RSGRAPH_FLAGS_LOG_SCALE_Y) - _y_scale = _rec.height()*0.8 / log(_maxValue) ; + _y_scale = _rec.height()*0.8 / log(std::max(2.0,_maxValue)) ; else _y_scale = _rec.height()*0.8/_maxValue ; } @@ -539,11 +544,27 @@ void RSGraphWidget::paintLine(const QVector& points, QColor color, Qt:: { /* Save the current brush, plot the line, and restore the old brush */ QPen oldPen = _painter->pen(); - _painter->setPen(QPen(color, lineStyle)); + + QPen newPen(color, lineStyle); + newPen.setWidth(2.0f*_linewidthscale); + _painter->setPen(newPen); _painter->drawPolyline(points.data(), points.size()); _painter->setPen(oldPen); } +void RSGraphWidget::paintDots(const QVector& points, QColor color) +{ + /* Save the current brush, plot the line, and restore the old brush */ + QPen oldPen = _painter->pen(); + _painter->setPen(QPen(color, oldPen.style())); + QBrush oldBrush = _painter->brush(); + _painter->setBrush(QBrush(color)); + for(int i=0;idrawEllipse(QRect(points[i].x(),points[i].y(),5*_linewidthscale,5*_linewidthscale)) ; + + _painter->setPen(oldPen); + _painter->setBrush(oldBrush); +} /** Paints selected total indicators on the graph. */ void RSGraphWidget::paintTotals() { @@ -641,6 +662,11 @@ void RSGraphWidget::wheelEvent(QWheelEvent *e) _time_filter *= 1.1 ; else _time_filter /= 1.1 ; + else if(e->modifiers() & Qt::ControlModifier) + if(e->delta() > 0) + _linewidthscale *= 1.2 ; + else + _linewidthscale /= 1.2 ; else if(e->delta() > 0) _time_scale *= 1.1 ; diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.h b/retroshare-gui/src/gui/common/RSGraphWidget.h index 2159ba0dc..b57833d51 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.h +++ b/retroshare-gui/src/gui/common/RSGraphWidget.h @@ -126,6 +126,7 @@ public: static const uint32_t RSGRAPH_FLAGS_SHOW_LEGEND = 0x0010 ;// show legend in the graph static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes static const uint32_t RSGRAPH_FLAGS_LEGEND_CUMULATED = 0x0040 ;// show the total in the legend rather than current values + static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_DOTS = 0x0080 ;// use dots /** Bandwidth graph style. */ enum GraphStyle @@ -191,8 +192,11 @@ private: void pointsFromData(const std::vector& values, QVector &points ) ; /** Paints a line with the data in points. */ - void paintLine(const QVector& points, QColor color, - Qt::PenStyle lineStyle = Qt::SolidLine); + void paintLine(const QVector& points, QColor color, Qt::PenStyle lineStyle = Qt::SolidLine); + + /** Paint a series of large dots **/ + void paintDots(const QVector& points, QColor color); + /** Paints an integral using the supplied data. */ void paintIntegral(const QVector& points, QColor color, qreal alpha = 1.0); @@ -214,6 +218,7 @@ private: qreal _time_scale ; // horizontal scale in pixels per sec. qreal _time_filter ; // time filter. Goes from 0 to infinity. Will be converted into 1-1/(1+f) + float _linewidthscale ; /** Show the respective lines and counters. */ //bool _showRSDHT; diff --git a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp index 6ae112803..9fd2dfa3c 100644 --- a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp +++ b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp @@ -201,11 +201,13 @@ void BandwidthStatsWidget::updateUnitSelection(int n) if(n==0) { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ; + ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_PAINT_STYLE_DOTS); ui.legend_CB->setItemText(1,tr("Average")); } else { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_COUNT) ; + ui.bwgraph_BW->setFlags(RSGraphWidget::RSGRAPH_FLAGS_PAINT_STYLE_DOTS); ui.legend_CB->setItemText(1,tr("Total")); } } From e913f3689a62ba5992238db9b7cab6fd1a67e49d Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 4 May 2017 21:40:32 +0200 Subject: [PATCH 230/230] fixed crash when trying to deserialize an empty buffer in rsrecogn --- libretroshare/src/util/rsrecogn.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libretroshare/src/util/rsrecogn.cc b/libretroshare/src/util/rsrecogn.cc index f42a4dd6f..8580c7780 100644 --- a/libretroshare/src/util/rsrecogn.cc +++ b/libretroshare/src/util/rsrecogn.cc @@ -552,6 +552,9 @@ RsGxsRecognTagItem *RsRecogn::extractTag(const std::string &encoded) std::vector buffer = Radix64::decode(encoded); pktsize = buffer.size(); + if(buffer.empty()) + return NULL ; + RsGxsRecognSerialiser serialiser; RsItem *item = serialiser.deserialise(buffer.data(), &pktsize);