RetroShare/tests/unittests/libretroshare/services/gxs/gxstestservice.cc

293 lines
7.3 KiB
C++
Raw Normal View History

/*
* libretroshare/src/services p3wiki.cc
*
* Wiki interface for RetroShare.
*
* 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 "gxstestservice.h"
#include "retroshare/rsgxsflags.h"
#include "rsgxstestitems.h"
#include "util/rsrandom.h"
GxsTestService::GxsTestService(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs, uint32_t testMode)
:RsGenExchange(gds, nes, new RsGxsTestSerialiser(), RS_SERVICE_GXS_TYPE_TEST, gixs, testAuthenPolicy(testMode)),
RsGxsIfaceHelper(this),
mTestMode(testMode)
{
}
const std::string GXS_TEST_APP_NAME = "gxstest";
const uint16_t GXS_TEST_APP_MAJOR_VERSION = 1;
const uint16_t GXS_TEST_APP_MINOR_VERSION = 0;
const uint16_t GXS_TEST_MIN_MAJOR_VERSION = 1;
const uint16_t GXS_TEST_MIN_MINOR_VERSION = 0;
RsServiceInfo GxsTestService::getServiceInfo()
{
return RsServiceInfo(RS_SERVICE_GXS_TYPE_TEST,
GXS_TEST_APP_NAME,
GXS_TEST_APP_MAJOR_VERSION,
GXS_TEST_APP_MINOR_VERSION,
GXS_TEST_MIN_MAJOR_VERSION,
GXS_TEST_MIN_MINOR_VERSION);
}
uint32_t GxsTestService::testAuthenPolicy(uint32_t testMode)
{
uint32_t policy = 0;
uint8_t flag = 0;
// Edits generally need an authors signature.
flag = GXS_SERV::MSG_AUTHEN_ROOT_PUBLISH_SIGN | GXS_SERV::MSG_AUTHEN_CHILD_AUTHOR_SIGN;
RsGenExchange::setAuthenPolicyFlag(flag, policy, RsGenExchange::PUBLIC_GRP_BITS);
flag |= GXS_SERV::MSG_AUTHEN_CHILD_PUBLISH_SIGN;
RsGenExchange::setAuthenPolicyFlag(flag, policy, RsGenExchange::RESTRICTED_GRP_BITS);
RsGenExchange::setAuthenPolicyFlag(flag, policy, RsGenExchange::PRIVATE_GRP_BITS);
flag = 0;
RsGenExchange::setAuthenPolicyFlag(flag, policy, RsGenExchange::GRP_OPTION_BITS);
return policy;
}
void GxsTestService::service_tick()
{
RsTickEvent::tick_events();
return;
}
void GxsTestService::notifyChanges(std::vector<RsGxsNotify*>& changes)
{
std::cerr << "GxsTestService::notifyChanges() New stuff";
std::cerr << std::endl;
RsGxsIfaceHelper::receiveChanges(changes);
}
/* Specific Service Data */
bool GxsTestService::getTestGroups(const uint32_t &token, std::vector<RsTestGroup> &groups)
{
std::cerr << "GxsTestService::getTestGroups()";
std::cerr << std::endl;
std::vector<RsGxsGrpItem*> grpData;
bool ok = RsGenExchange::getGroupData(token, grpData);
if(ok)
{
std::vector<RsGxsGrpItem*>::iterator vit = grpData.begin();
for(; vit != grpData.end(); vit++)
{
RsGxsTestGroupItem* item = dynamic_cast<RsGxsTestGroupItem*>(*vit);
if (item)
{
RsTestGroup group = item->group;
group.mMeta = item->meta;
delete item;
groups.push_back(group);
std::cerr << "GxsTestService::getTestGroups() Adding Group to Vector: ";
std::cerr << std::endl;
std::cerr << group;
std::cerr << std::endl;
}
else
{
std::cerr << "Not a TestGroupItem, deleting!" << std::endl;
delete *vit;
}
}
}
return ok;
}
bool GxsTestService::getTestMsgs(const uint32_t &token, std::vector<RsTestMsg> &msgs)
{
GxsMsgDataMap msgData;
bool ok = RsGenExchange::getMsgData(token, msgData);
if(ok)
{
GxsMsgDataMap::iterator mit = msgData.begin();
for(; mit != msgData.end(); mit++)
{
RsGxsGroupId grpId = mit->first;
std::vector<RsGxsMsgItem*>& msgItems = mit->second;
std::vector<RsGxsMsgItem*>::iterator vit = msgItems.begin();
for(; vit != msgItems.end(); vit++)
{
RsGxsTestMsgItem* item = dynamic_cast<RsGxsTestMsgItem*>(*vit);
if(item)
{
RsTestMsg msg = item->msg;
msg.mMeta = item->meta;
msgs.push_back(msg);
delete item;
}
else
{
std::cerr << "Not a TestMsg Item, deleting!" << std::endl;
delete *vit;
}
}
}
}
return ok;
}
bool GxsTestService::getRelatedMsgs(const uint32_t &token, std::vector<RsTestMsg> &msgs)
{
GxsMsgRelatedDataMap msgData;
bool ok = RsGenExchange::getMsgRelatedData(token, msgData);
if(ok)
{
GxsMsgRelatedDataMap::iterator mit = msgData.begin();
for(; mit != msgData.end(); mit++)
{
std::vector<RsGxsMsgItem*>& msgItems = mit->second;
std::vector<RsGxsMsgItem*>::iterator vit = msgItems.begin();
for(; vit != msgItems.end(); vit++)
{
RsGxsTestMsgItem* item = dynamic_cast<RsGxsTestMsgItem*>(*vit);
if(item)
{
RsTestMsg msg = item->msg;
msg.mMeta = item->meta;
msgs.push_back(msg);
delete item;
}
else
{
std::cerr << "Not a TestMsg Item, deleting!" << std::endl;
delete *vit;
}
}
}
}
return ok;
}
bool GxsTestService::submitTestGroup(uint32_t &token, RsTestGroup &group)
{
RsGxsTestGroupItem* groupItem = new RsGxsTestGroupItem();
groupItem->group = group;
groupItem->meta = group.mMeta;
std::cerr << "GxsTestService::submitTestGroup(): ";
std::cerr << std::endl;
std::cerr << group;
std::cerr << std::endl;
std::cerr << "GxsTestService::submitTestGroup() pushing to RsGenExchange";
std::cerr << std::endl;
RsGenExchange::publishGroup(token, groupItem);
return true;
}
bool GxsTestService::submitTestMsg(uint32_t &token, RsTestMsg &msg)
{
std::cerr << "GxsTestService::submitTestMsg(): " << msg;
std::cerr << std::endl;
RsGxsTestMsgItem* msgItem = new RsGxsTestMsgItem();
msgItem->msg = msg;
msgItem->meta = msg.mMeta;
RsGenExchange::publishMsg(token, msgItem);
return true;
}
bool GxsTestService::updateTestGroup(uint32_t &token, RsTestGroup &group)
{
std::cerr << "GxsTestService::updateTestGroup()" << std::endl;
RsGxsTestGroupItem* grpItem = new RsGxsTestGroupItem();
grpItem->group = group;
grpItem->meta = group.mMeta;
RsGenExchange::updateGroup(token, grpItem);
return true;
}
std::ostream &operator<<(std::ostream &out, const RsTestGroup &group)
{
out << "RsTestGroup [ ";
out << " Name: " << group.mMeta.mGroupName;
out << " TestString: " << group.mTestString;
out << " ]";
return out;
}
std::ostream &operator<<(std::ostream &out, const RsTestMsg &msg)
{
out << "RsTestMsg [ ";
out << " Name: " << msg.mMeta.mMsgName;
out << " TestString: " << msg.mTestString;
out << "]";
return out;
}
// Overloaded from RsTickEvent for Event callbacks.
void GxsTestService::handle_event(uint32_t event_type, const std::string &elabel)
{
std::cerr << "GxsTestService::handle_event(" << event_type << ")";
std::cerr << std::endl;
// stuff.
switch(event_type)
{
default:
/* error */
std::cerr << "GxsTestService::handle_event() Unknown Event Type: " << event_type;
std::cerr << std::endl;
break;
}
}