mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-19 14:30:43 -04:00
fixed up tlv serialisers:
- Added RsTvlUnit: public RsTlvItem, which handles some of the infrstructure. - made TlvSize() SetTlv() and print() const. - split rstlvtypes into its bits and cleaned up header files. - added templated RsTlvList, imilar to cyrils id one. - removed GXS_GEN_TESTNET - cleanedup rsserviceids. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7215 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
1042744685
commit
600639db51
86 changed files with 2464 additions and 2444 deletions
|
@ -27,8 +27,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include <retroshare/rstypes.h>
|
||||||
|
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "serialiser/rstlvkeys.h"
|
#include "serialiser/rstlvkeys.h"
|
||||||
#include "serialiser/rsgxsitems.h"
|
#include "serialiser/rsgxsitems.h"
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ TARGET = retroshare
|
||||||
# This should be disabled for releases until further notice.
|
# This should be disabled for releases until further notice.
|
||||||
CONFIG += gxs debug
|
CONFIG += gxs debug
|
||||||
|
|
||||||
#CONFIG += dsdv
|
CONFIG += dsdv
|
||||||
|
|
||||||
profiling {
|
profiling {
|
||||||
QMAKE_CXXFLAGS -= -fomit-frame-pointer
|
QMAKE_CXXFLAGS -= -fomit-frame-pointer
|
||||||
|
@ -399,12 +399,18 @@ HEADERS += serialiser/rsbaseserial.h \
|
||||||
serialiser/rsstatusitems.h \
|
serialiser/rsstatusitems.h \
|
||||||
serialiser/rstlvaddrs.h \
|
serialiser/rstlvaddrs.h \
|
||||||
serialiser/rstlvbase.h \
|
serialiser/rstlvbase.h \
|
||||||
|
serialiser/rstlvitem.h \
|
||||||
|
serialiser/rstlvidset.h \
|
||||||
|
serialiser/rstlvfileitem.h \
|
||||||
|
serialiser/rstlvimage.h \
|
||||||
|
serialiser/rstlvstring.h \
|
||||||
|
serialiser/rstlvbinary.h \
|
||||||
serialiser/rstlvkeys.h \
|
serialiser/rstlvkeys.h \
|
||||||
serialiser/rstlvkvwide.h \
|
serialiser/rstlvkeyvalue.h \
|
||||||
serialiser/rstlvtypes.h \
|
|
||||||
serialiser/rstlvgenericparam.h \
|
serialiser/rstlvgenericparam.h \
|
||||||
serialiser/rstlvgenericmap.h \
|
serialiser/rstlvgenericmap.h \
|
||||||
serialiser/rstlvgenericmap.inl \
|
serialiser/rstlvgenericmap.inl \
|
||||||
|
serialiser/rstlvlist.h \
|
||||||
serialiser/rstlvmaps.h \
|
serialiser/rstlvmaps.h \
|
||||||
serialiser/rstlvutil.h \
|
serialiser/rstlvutil.h \
|
||||||
serialiser/rstlvbanlist.h \
|
serialiser/rstlvbanlist.h \
|
||||||
|
@ -541,11 +547,14 @@ SOURCES += serialiser/rsbaseserial.cc \
|
||||||
serialiser/rsstatusitems.cc \
|
serialiser/rsstatusitems.cc \
|
||||||
serialiser/rstlvaddrs.cc \
|
serialiser/rstlvaddrs.cc \
|
||||||
serialiser/rstlvbase.cc \
|
serialiser/rstlvbase.cc \
|
||||||
|
serialiser/rstlvitem.cc \
|
||||||
|
serialiser/rstlvidset.cc \
|
||||||
serialiser/rstlvfileitem.cc \
|
serialiser/rstlvfileitem.cc \
|
||||||
serialiser/rstlvimage.cc \
|
serialiser/rstlvimage.cc \
|
||||||
|
serialiser/rstlvstring.cc \
|
||||||
|
serialiser/rstlvbinary.cc \
|
||||||
serialiser/rstlvkeys.cc \
|
serialiser/rstlvkeys.cc \
|
||||||
serialiser/rstlvkvwide.cc \
|
serialiser/rstlvkeyvalue.cc \
|
||||||
serialiser/rstlvtypes.cc \
|
|
||||||
serialiser/rstlvgenericparam.cc \
|
serialiser/rstlvgenericparam.cc \
|
||||||
serialiser/rstlvutil.cc \
|
serialiser/rstlvutil.cc \
|
||||||
serialiser/rstlvbanlist.cc \
|
serialiser/rstlvbanlist.cc \
|
||||||
|
@ -640,8 +649,6 @@ SOURCES += zeroconf/p3zcnatassist.cc \
|
||||||
gxs {
|
gxs {
|
||||||
DEFINES *= RS_ENABLE_GXS
|
DEFINES *= RS_ENABLE_GXS
|
||||||
DEFINES *= SQLITE_HAS_CODEC
|
DEFINES *= SQLITE_HAS_CODEC
|
||||||
|
|
||||||
DEFINES *= GXS_DEV_TESTNET
|
|
||||||
DEFINES *= GXS_ENABLE_SYNC_MSGS
|
DEFINES *= GXS_ENABLE_SYNC_MSGS
|
||||||
|
|
||||||
HEADERS += serialiser/rsnxsitems.h \
|
HEADERS += serialiser/rsnxsitems.h \
|
||||||
|
|
|
@ -2,10 +2,16 @@
|
||||||
|
|
||||||
#include "pluginmanager.h"
|
#include "pluginmanager.h"
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include <serialiser/rsserial.h>
|
#include <serialiser/rsserial.h>
|
||||||
#include <serialiser/rstlvbase.h>
|
#include <serialiser/rstlvbase.h>
|
||||||
#include <serialiser/rstlvtypes.h>
|
#include <serialiser/rstlvtypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <serialiser/rspluginitems.h>
|
#include <serialiser/rspluginitems.h>
|
||||||
|
|
||||||
|
|
||||||
#include <rsserver/p3face.h>
|
#include <rsserver/p3face.h>
|
||||||
#include <util/rsdir.h>
|
#include <util/rsdir.h>
|
||||||
#include <util/folderiterator.h>
|
#include <util/folderiterator.h>
|
||||||
|
|
|
@ -164,7 +164,8 @@ void pqiIpAddrList::extractFromTlv(const RsTlvIpAddrSet &tlvAddrs)
|
||||||
{
|
{
|
||||||
std::list<RsTlvIpAddressInfo>::const_iterator it;
|
std::list<RsTlvIpAddressInfo>::const_iterator it;
|
||||||
|
|
||||||
for(it = tlvAddrs.addrs.begin(); it != tlvAddrs.addrs.end() ; ++it)
|
//for(it = tlvAddrs.addrs.begin(); it != tlvAddrs.addrs.end() ; ++it)
|
||||||
|
for(it = tlvAddrs.mList.begin(); it != tlvAddrs.mList.end() ; ++it)
|
||||||
{
|
{
|
||||||
pqiIpAddress addr;
|
pqiIpAddress addr;
|
||||||
addr.mAddr = it->addr.addr;
|
addr.mAddr = it->addr.addr;
|
||||||
|
@ -186,7 +187,8 @@ void pqiIpAddrList::loadTlv(RsTlvIpAddrSet &tlvAddrs) const
|
||||||
addr.seenTime = it->mSeenTime;
|
addr.seenTime = it->mSeenTime;
|
||||||
addr.source = it->mSrc;
|
addr.source = it->mSrc;
|
||||||
|
|
||||||
tlvAddrs.addrs.push_back(addr);
|
//tlvAddrs.addrs.push_back(addr);
|
||||||
|
tlvAddrs.mList.push_back(addr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,9 +96,9 @@ void RsServer::rsGlobalShutDown()
|
||||||
if(mGxsChannels) mGxsChannels->join();
|
if(mGxsChannels) mGxsChannels->join();
|
||||||
if(mGxsIdService) mGxsIdService->join();
|
if(mGxsIdService) mGxsIdService->join();
|
||||||
if(mPosted) mPosted->join();
|
if(mPosted) mPosted->join();
|
||||||
//if(mPhoto) mPhoto->join();
|
|
||||||
if(mWiki) mWiki->join();
|
if(mWiki) mWiki->join();
|
||||||
if(mWire) mWire->join();
|
//if(mPhoto) mPhoto->join();
|
||||||
|
//if(mWire) mWire->join();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AuthGPG::exit();
|
AuthGPG::exit();
|
||||||
|
|
|
@ -1300,29 +1300,9 @@ int RsServer::StartupRetroShare()
|
||||||
|
|
||||||
#ifdef RS_ENABLE_GXS
|
#ifdef RS_ENABLE_GXS
|
||||||
|
|
||||||
// The idea is that if priorGxsDir is non
|
std::string currGxsDir = rsAccounts.PathAccountDirectory() + "/gxs";
|
||||||
// empty and matches an exist directory location
|
currGxsDir += "_FINALTESTS";
|
||||||
// the given ssl user id then this directory is cleaned
|
|
||||||
// and deleted
|
|
||||||
std::string priorGxsDir = "./" + mLinkMgr->getOwnId().toStdString() + "/";
|
|
||||||
std::string currGxsDir = rsAccounts.PathAccountDirectory() + "/GXS_phase2";
|
|
||||||
|
|
||||||
#ifdef GXS_DEV_TESTNET // Different Directory for testing.
|
|
||||||
currGxsDir += "_TESTNET10";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(!priorGxsDir.empty())
|
|
||||||
RsDirUtil::checkDirectory(priorGxsDir);
|
|
||||||
|
|
||||||
std::set<std::string> filesToKeep;
|
|
||||||
bool cleanUpSuccess = RsDirUtil::cleanupDirectory(priorGxsDir, filesToKeep);
|
|
||||||
|
|
||||||
if(!cleanUpSuccess)
|
|
||||||
std::cerr << "RsInit::StartupRetroShare() Clean up of Old Gxs Dir Failed!";
|
|
||||||
else
|
|
||||||
rmdir(priorGxsDir.c_str());
|
|
||||||
|
|
||||||
// TODO: temporary to store GXS service data, remove
|
|
||||||
RsDirUtil::checkCreateDirectory(currGxsDir);
|
RsDirUtil::checkCreateDirectory(currGxsDir);
|
||||||
|
|
||||||
RsNxsNetMgr* nxsMgr = new RsNxsNetMgrImpl(serviceCtrl);
|
RsNxsNetMgr* nxsMgr = new RsNxsNetMgrImpl(serviceCtrl);
|
||||||
|
@ -1330,23 +1310,19 @@ int RsServer::StartupRetroShare()
|
||||||
/**** Identity service ****/
|
/**** Identity service ****/
|
||||||
|
|
||||||
RsGeneralDataService* gxsid_ds = new RsDataService(currGxsDir + "/", "gxsid_db",
|
RsGeneralDataService* gxsid_ds = new RsDataService(currGxsDir + "/", "gxsid_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_GXSID, NULL, RsInitConfig::gxs_passwd);
|
RS_SERVICE_GXS_TYPE_GXSID, NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
gxsid_ds->resetDataStore();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// init gxs services
|
// init gxs services
|
||||||
mGxsIdService = new p3IdService(gxsid_ds, NULL);
|
mGxsIdService = new p3IdService(gxsid_ds, NULL);
|
||||||
|
|
||||||
RsGeneralDataService* gxscircles_ds = new RsDataService(currGxsDir + "/", "gxscircles_db",
|
RsGeneralDataService* gxscircles_ds = new RsDataService(currGxsDir + "/", "gxscircles_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_GXSCIRCLE, NULL, RsInitConfig::gxs_passwd);
|
RS_SERVICE_GXS_TYPE_GXSCIRCLE, NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
mGxsCircles = new p3GxsCircles(gxscircles_ds, NULL, mGxsIdService);
|
mGxsCircles = new p3GxsCircles(gxscircles_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS ID service
|
// create GXS ID service
|
||||||
RsGxsNetService* gxsid_ns = new RsGxsNetService(
|
RsGxsNetService* gxsid_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_GXSID, gxsid_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_GXSID, gxsid_ds, nxsMgr,
|
||||||
mGxsIdService, mGxsIdService->getServiceInfo(),
|
mGxsIdService, mGxsIdService->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,
|
||||||
false); // don't synchronise group automatic (need explicit group request)
|
false); // don't synchronise group automatic (need explicit group request)
|
||||||
|
@ -1355,54 +1331,29 @@ int RsServer::StartupRetroShare()
|
||||||
/**** GxsCircle service ****/
|
/**** GxsCircle service ****/
|
||||||
|
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
gxscircles_ds->resetDataStore();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// init gxs services
|
// init gxs services
|
||||||
mGxsCircles = new p3GxsCircles(gxscircles_ds, NULL, mGxsIdService);
|
mGxsCircles = new p3GxsCircles(gxscircles_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS Circle service
|
// create GXS Circle service
|
||||||
RsGxsNetService* gxscircles_ns = new RsGxsNetService(
|
RsGxsNetService* gxscircles_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_GXSCIRCLE, gxscircles_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_GXSCIRCLE, gxscircles_ds, nxsMgr,
|
||||||
mGxsCircles, mGxsCircles->getServiceInfo(),
|
mGxsCircles, mGxsCircles->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles);
|
mGxsIdService, mGxsCircles);
|
||||||
|
|
||||||
|
|
||||||
/**** Photo service ****/
|
|
||||||
RsGeneralDataService* photo_ds = new RsDataService(currGxsDir + "/", "photoV2_db",
|
|
||||||
RS_SERVICE_GXSV2_TYPE_PHOTO, NULL, RsInitConfig::gxs_passwd);
|
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
photo_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// init gxs services
|
|
||||||
mPhoto = new p3PhotoService(photo_ds, NULL, mGxsIdService);
|
|
||||||
|
|
||||||
// create GXS photo service
|
|
||||||
RsGxsNetService* photo_ns = new RsGxsNetService(
|
|
||||||
RS_SERVICE_GXSV2_TYPE_PHOTO, photo_ds, nxsMgr,
|
|
||||||
mPhoto, mPhoto->getServiceInfo(),
|
|
||||||
mGxsIdService, mGxsCircles);
|
|
||||||
|
|
||||||
/**** Posted GXS service ****/
|
/**** Posted GXS service ****/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RsGeneralDataService* posted_ds = new RsDataService(currGxsDir + "/", "posted_db",
|
RsGeneralDataService* posted_ds = new RsDataService(currGxsDir + "/", "posted_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_POSTED,
|
RS_SERVICE_GXS_TYPE_POSTED,
|
||||||
NULL, RsInitConfig::gxs_passwd);
|
NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
posted_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mPosted = new p3Posted(posted_ds, NULL, mGxsIdService);
|
mPosted = new p3Posted(posted_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS photo service
|
// create GXS photo service
|
||||||
RsGxsNetService* posted_ns = new RsGxsNetService(
|
RsGxsNetService* posted_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_POSTED, posted_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_POSTED, posted_ds, nxsMgr,
|
||||||
mPosted, mPosted->getServiceInfo(),
|
mPosted, mPosted->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles);
|
mGxsIdService, mGxsCircles);
|
||||||
|
|
||||||
|
@ -1410,56 +1361,29 @@ int RsServer::StartupRetroShare()
|
||||||
|
|
||||||
|
|
||||||
RsGeneralDataService* wiki_ds = new RsDataService(currGxsDir + "/", "wiki_db",
|
RsGeneralDataService* wiki_ds = new RsDataService(currGxsDir + "/", "wiki_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_WIKI,
|
RS_SERVICE_GXS_TYPE_WIKI,
|
||||||
NULL, RsInitConfig::gxs_passwd);
|
NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
wiki_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mWiki = new p3Wiki(wiki_ds, NULL, mGxsIdService);
|
mWiki = new p3Wiki(wiki_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS photo service
|
// create GXS photo service
|
||||||
RsGxsNetService* wiki_ns = new RsGxsNetService(
|
RsGxsNetService* wiki_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_WIKI, wiki_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_WIKI, wiki_ds, nxsMgr,
|
||||||
mWiki, mWiki->getServiceInfo(),
|
mWiki, mWiki->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles);
|
mGxsIdService, mGxsCircles);
|
||||||
|
|
||||||
|
|
||||||
/**** Wire GXS service ****/
|
|
||||||
|
|
||||||
|
|
||||||
RsGeneralDataService* wire_ds = new RsDataService(currGxsDir + "/", "wire_db",
|
|
||||||
RS_SERVICE_GXSV2_TYPE_WIRE,
|
|
||||||
NULL, RsInitConfig::gxs_passwd);
|
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
wire_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mWire = new p3Wire(wire_ds, NULL, mGxsIdService);
|
|
||||||
|
|
||||||
// create GXS photo service
|
|
||||||
RsGxsNetService* wire_ns = new RsGxsNetService(
|
|
||||||
RS_SERVICE_GXSV2_TYPE_WIRE, wire_ds, nxsMgr,
|
|
||||||
mWire, mWire->getServiceInfo(),
|
|
||||||
mGxsIdService, mGxsCircles);
|
|
||||||
|
|
||||||
|
|
||||||
/**** Forum GXS service ****/
|
/**** Forum GXS service ****/
|
||||||
|
|
||||||
RsGeneralDataService* gxsforums_ds = new RsDataService(currGxsDir + "/", "gxsforums_db",
|
RsGeneralDataService* gxsforums_ds = new RsDataService(currGxsDir + "/", "gxsforums_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_FORUMS, NULL, RsInitConfig::gxs_passwd);
|
RS_SERVICE_GXS_TYPE_FORUMS, NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
gxsforums_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mGxsForums = new p3GxsForums(gxsforums_ds, NULL, mGxsIdService);
|
mGxsForums = new p3GxsForums(gxsforums_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS photo service
|
// create GXS photo service
|
||||||
RsGxsNetService* gxsforums_ns = new RsGxsNetService(
|
RsGxsNetService* gxsforums_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_FORUMS, gxsforums_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_FORUMS, gxsforums_ds, nxsMgr,
|
||||||
mGxsForums, mGxsForums->getServiceInfo(),
|
mGxsForums, mGxsForums->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles);
|
mGxsIdService, mGxsCircles);
|
||||||
|
|
||||||
|
@ -1467,28 +1391,55 @@ int RsServer::StartupRetroShare()
|
||||||
/**** Channel GXS service ****/
|
/**** Channel GXS service ****/
|
||||||
|
|
||||||
RsGeneralDataService* gxschannels_ds = new RsDataService(currGxsDir + "/", "gxschannels_db",
|
RsGeneralDataService* gxschannels_ds = new RsDataService(currGxsDir + "/", "gxschannels_db",
|
||||||
RS_SERVICE_GXSV2_TYPE_CHANNELS, NULL, RsInitConfig::gxs_passwd);
|
RS_SERVICE_GXS_TYPE_CHANNELS, NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
gxschannels_ds->resetDataStore(); //TODO: remove, new service data per RS session, for testing
|
|
||||||
#endif
|
|
||||||
|
|
||||||
mGxsChannels = new p3GxsChannels(gxschannels_ds, NULL, mGxsIdService);
|
mGxsChannels = new p3GxsChannels(gxschannels_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
// create GXS photo service
|
// create GXS photo service
|
||||||
RsGxsNetService* gxschannels_ns = new RsGxsNetService(
|
RsGxsNetService* gxschannels_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXSV2_TYPE_CHANNELS, gxschannels_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_CHANNELS, gxschannels_ds, nxsMgr,
|
||||||
mGxsChannels, mGxsChannels->getServiceInfo(),
|
mGxsChannels, mGxsChannels->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles);
|
mGxsIdService, mGxsCircles);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0 // PHOTO IS DISABLED FOR THE MOMENT
|
||||||
|
/**** Photo service ****/
|
||||||
|
RsGeneralDataService* photo_ds = new RsDataService(currGxsDir + "/", "photoV2_db",
|
||||||
|
RS_SERVICE_GXS_TYPE_PHOTO, NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
|
// init gxs services
|
||||||
|
mPhoto = new p3PhotoService(photo_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
|
// create GXS photo service
|
||||||
|
RsGxsNetService* photo_ns = new RsGxsNetService(
|
||||||
|
RS_SERVICE_GXS_TYPE_PHOTO, photo_ds, nxsMgr,
|
||||||
|
mPhoto, mPhoto->getServiceInfo(),
|
||||||
|
mGxsIdService, mGxsCircles);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0 // WIRE IS DISABLED FOR THE MOMENT
|
||||||
|
/**** Wire GXS service ****/
|
||||||
|
RsGeneralDataService* wire_ds = new RsDataService(currGxsDir + "/", "wire_db",
|
||||||
|
RS_SERVICE_GXS_TYPE_WIRE,
|
||||||
|
NULL, RsInitConfig::gxs_passwd);
|
||||||
|
|
||||||
|
mWire = new p3Wire(wire_ds, NULL, mGxsIdService);
|
||||||
|
|
||||||
|
// create GXS photo service
|
||||||
|
RsGxsNetService* wire_ns = new RsGxsNetService(
|
||||||
|
RS_SERVICE_GXS_TYPE_WIRE, wire_ds, nxsMgr,
|
||||||
|
mWire, mWire->getServiceInfo(),
|
||||||
|
mGxsIdService, mGxsCircles);
|
||||||
|
#endif
|
||||||
// now add to p3service
|
// now add to p3service
|
||||||
pqih->addService(gxsid_ns, true);
|
pqih->addService(gxsid_ns, true);
|
||||||
pqih->addService(gxscircles_ns, true);
|
pqih->addService(gxscircles_ns, true);
|
||||||
pqih->addService(photo_ns, true);
|
|
||||||
pqih->addService(posted_ns, true);
|
pqih->addService(posted_ns, true);
|
||||||
pqih->addService(wiki_ns, true);
|
pqih->addService(wiki_ns, true);
|
||||||
pqih->addService(gxsforums_ns, true);
|
pqih->addService(gxsforums_ns, true);
|
||||||
pqih->addService(gxschannels_ns, true);
|
pqih->addService(gxschannels_ns, true);
|
||||||
|
//pqih->addService(photo_ns, true);
|
||||||
|
|
||||||
// remove pword from memory
|
// remove pword from memory
|
||||||
RsInitConfig::gxs_passwd = "";
|
RsInitConfig::gxs_passwd = "";
|
||||||
|
@ -1652,9 +1603,9 @@ int RsServer::StartupRetroShare()
|
||||||
mConfigMgr->addConfiguration("gxschannels.cfg", gxschannels_ns);
|
mConfigMgr->addConfiguration("gxschannels.cfg", gxschannels_ns);
|
||||||
mConfigMgr->addConfiguration("gxscircles.cfg", gxscircles_ns);
|
mConfigMgr->addConfiguration("gxscircles.cfg", gxscircles_ns);
|
||||||
mConfigMgr->addConfiguration("posted.cfg", posted_ns);
|
mConfigMgr->addConfiguration("posted.cfg", posted_ns);
|
||||||
mConfigMgr->addConfiguration("wire.cfg", wire_ns);
|
|
||||||
mConfigMgr->addConfiguration("wiki.cfg", wiki_ns);
|
mConfigMgr->addConfiguration("wiki.cfg", wiki_ns);
|
||||||
mConfigMgr->addConfiguration("photo.cfg", photo_ns);
|
//mConfigMgr->addConfiguration("photo.cfg", photo_ns);
|
||||||
|
//mConfigMgr->addConfiguration("wire.cfg", wire_ns);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mPluginsManager->addConfigurations(mConfigMgr) ;
|
mPluginsManager->addConfigurations(mConfigMgr) ;
|
||||||
|
@ -1763,31 +1714,33 @@ int RsServer::StartupRetroShare()
|
||||||
rsGxsCircles = mGxsCircles;
|
rsGxsCircles = mGxsCircles;
|
||||||
rsWiki = mWiki;
|
rsWiki = mWiki;
|
||||||
rsPosted = mPosted;
|
rsPosted = mPosted;
|
||||||
rsPhoto = mPhoto;
|
|
||||||
rsGxsForums = mGxsForums;
|
rsGxsForums = mGxsForums;
|
||||||
rsGxsChannels = mGxsChannels;
|
rsGxsChannels = mGxsChannels;
|
||||||
rsWire = mWire;
|
//rsPhoto = mPhoto;
|
||||||
|
//rsWire = mWire;
|
||||||
|
|
||||||
/*** start up GXS core runner ***/
|
/*** start up GXS core runner ***/
|
||||||
createThread(*mGxsIdService);
|
createThread(*mGxsIdService);
|
||||||
createThread(*mGxsCircles);
|
createThread(*mGxsCircles);
|
||||||
createThread(*mPhoto);
|
|
||||||
createThread(*mPosted);
|
createThread(*mPosted);
|
||||||
createThread(*mWiki);
|
createThread(*mWiki);
|
||||||
createThread(*mWire);
|
|
||||||
createThread(*mGxsForums);
|
createThread(*mGxsForums);
|
||||||
createThread(*mGxsChannels);
|
createThread(*mGxsChannels);
|
||||||
|
|
||||||
|
//createThread(*mPhoto);
|
||||||
|
//createThread(*mWire);
|
||||||
|
|
||||||
// cores ready start up GXS net servers
|
// cores ready start up GXS net servers
|
||||||
createThread(*gxsid_ns);
|
createThread(*gxsid_ns);
|
||||||
createThread(*gxscircles_ns);
|
createThread(*gxscircles_ns);
|
||||||
createThread(*photo_ns);
|
|
||||||
createThread(*posted_ns);
|
createThread(*posted_ns);
|
||||||
createThread(*wiki_ns);
|
createThread(*wiki_ns);
|
||||||
createThread(*wire_ns);
|
|
||||||
createThread(*gxsforums_ns);
|
createThread(*gxsforums_ns);
|
||||||
createThread(*gxschannels_ns);
|
createThread(*gxschannels_ns);
|
||||||
|
|
||||||
|
//createThread(*photo_ns);
|
||||||
|
//createThread(*wire_ns);
|
||||||
|
|
||||||
#endif // RS_ENABLE_GXS
|
#endif // RS_ENABLE_GXS
|
||||||
|
|
||||||
ftserver->StartupThreads();
|
ftserver->StartupThreads();
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "serialiser/rstlvbanlist.h"
|
#include "serialiser/rstlvbanlist.h"
|
||||||
|
|
||||||
#define RS_PKT_SUBTYPE_BANLIST_ITEM 0x01
|
#define RS_PKT_SUBTYPE_BANLIST_ITEM 0x01
|
||||||
|
|
|
@ -31,9 +31,16 @@
|
||||||
|
|
||||||
#include "retroshare/rstypes.h"
|
#include "retroshare/rstypes.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
|
|
||||||
|
#include "serialiser/rstlvidset.h"
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
|
#include "serialiser/rstlvkeyvalue.h"
|
||||||
|
#include "serialiser/rstlvaddrs.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rstlvaddrs.h"
|
#endif
|
||||||
|
|
||||||
class RsGroupInfo;
|
class RsGroupInfo;
|
||||||
|
|
||||||
|
|
|
@ -24,14 +24,16 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsdiscovery2items.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsdiscovery2items.h"
|
|
||||||
|
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* #define RSSERIAL_DEBUG 1
|
* #define RSSERIAL_DEBUG 1
|
||||||
|
|
|
@ -29,10 +29,9 @@
|
||||||
#define RS_DISC_ITEMS_H
|
#define RS_DISC_ITEMS_H
|
||||||
|
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvidset.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvaddrs.h"
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsconfigitems.h"
|
|
||||||
|
|
||||||
const uint8_t RS_PKT_SUBTYPE_DISC_PGP_LIST = 0x01;
|
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_PGP_CERT = 0x02;
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvbinary.h"
|
||||||
#include "serialiser/rstlvdsdv.h"
|
#include "serialiser/rstlvdsdv.h"
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
|
@ -29,9 +29,11 @@
|
||||||
|
|
||||||
#include "retroshare/rstypes.h"
|
#include "retroshare/rstypes.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
|
|
||||||
|
|
||||||
const uint8_t RS_PKT_SUBTYPE_FT_DATA_REQUEST = 0x01;
|
const uint8_t RS_PKT_SUBTYPE_FT_DATA_REQUEST = 0x01;
|
||||||
const uint8_t RS_PKT_SUBTYPE_FT_DATA = 0x02;
|
const uint8_t RS_PKT_SUBTYPE_FT_DATA = 0x02;
|
||||||
const uint8_t RS_PKT_SUBTYPE_FT_CHUNK_MAP_REQUEST = 0x04;
|
const uint8_t RS_PKT_SUBTYPE_FT_CHUNK_MAP_REQUEST = 0x04;
|
||||||
|
|
|
@ -89,7 +89,7 @@ RsItem* RsGxsChannelSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_CHANNELS != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSCHANNEL_DEBUG
|
#ifdef GXSCHANNEL_DEBUG
|
||||||
std::cerr << "RsGxsChannelSerialiser::deserialise() ERROR Wrong Type" << std::endl;
|
std::cerr << "RsGxsChannelSerialiser::deserialise() ERROR Wrong Type" << std::endl;
|
||||||
|
@ -255,7 +255,7 @@ RsGxsChannelGroupItem* RsGxsChannelSerialiser::deserialiseGxsChannelGroupItem(vo
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_CHANNELS != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSCHANNEL_DEBUG
|
#ifdef GXSCHANNEL_DEBUG
|
||||||
|
@ -478,7 +478,7 @@ RsGxsChannelPostItem* RsGxsChannelSerialiser::deserialiseGxsChannelPostItem(void
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_CHANNELS != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_CHANNELS != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSCHANNEL_DEBUG
|
#ifdef GXSCHANNEL_DEBUG
|
||||||
|
|
|
@ -30,7 +30,9 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
|
#include "serialiser/rstlvimage.h"
|
||||||
|
|
||||||
#include "serialiser/rsgxscommentitems.h"
|
#include "serialiser/rsgxscommentitems.h"
|
||||||
|
|
||||||
|
@ -47,7 +49,7 @@ class RsGxsChannelGroupItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsChannelGroupItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_CHANNELS,
|
RsGxsChannelGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_CHANNELS,
|
||||||
RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM) { return;}
|
RS_PKT_SUBTYPE_GXSCHANNEL_GROUP_ITEM) { return;}
|
||||||
virtual ~RsGxsChannelGroupItem() { return;}
|
virtual ~RsGxsChannelGroupItem() { return;}
|
||||||
|
|
||||||
|
@ -66,7 +68,7 @@ class RsGxsChannelPostItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsChannelPostItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_CHANNELS,
|
RsGxsChannelPostItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_CHANNELS,
|
||||||
RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM) {return; }
|
RS_PKT_SUBTYPE_GXSCHANNEL_POST_ITEM) {return; }
|
||||||
virtual ~RsGxsChannelPostItem() { return;}
|
virtual ~RsGxsChannelPostItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -88,7 +90,7 @@ class RsGxsChannelSerialiser : public RsGxsCommentSerialiser
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsChannelSerialiser()
|
RsGxsChannelSerialiser()
|
||||||
:RsGxsCommentSerialiser(RS_SERVICE_GXSV2_TYPE_CHANNELS)
|
:RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_CHANNELS)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsChannelSerialiser() { return; }
|
virtual ~RsGxsChannelSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ RsItem* RsGxsCircleSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -277,7 +277,7 @@ RsGxsCircleGroupItem* RsGxsCircleSerialiser::deserialiseGxsCircleGroupItem(void
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef CIRCLE_DEBUG
|
#ifdef CIRCLE_DEBUG
|
||||||
|
@ -427,7 +427,7 @@ RsGxsCircleMsgItem* RsGxsCircleSerialiser::deserialiseGxsCircleMsgItem(void *dat
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_GXSCIRCLE != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef CIRCLE_DEBUG
|
#ifdef CIRCLE_DEBUG
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "serialiser/rstlvstring.h"
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rsgxscircles.h"
|
#include "retroshare/rsgxscircles.h"
|
||||||
|
@ -47,7 +48,7 @@ class RsGxsCircleGroupItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsCircleGroupItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE,
|
RsGxsCircleGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE,
|
||||||
RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM),
|
RS_PKT_SUBTYPE_GXSCIRCLE_GROUP_ITEM),
|
||||||
pgpIdSet(GXSCIRCLE_PGPIDSET),
|
pgpIdSet(GXSCIRCLE_PGPIDSET),
|
||||||
gxsIdSet(GXSCIRCLE_GXSIDSET),
|
gxsIdSet(GXSCIRCLE_GXSIDSET),
|
||||||
|
@ -70,7 +71,7 @@ class RsGxsCircleMsgItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsCircleMsgItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE,
|
RsGxsCircleMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_GXSCIRCLE,
|
||||||
RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM) {return; }
|
RS_PKT_SUBTYPE_GXSCIRCLE_MSG_ITEM) {return; }
|
||||||
virtual ~RsGxsCircleMsgItem() { return;}
|
virtual ~RsGxsCircleMsgItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -83,7 +84,7 @@ class RsGxsCircleSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsCircleSerialiser()
|
RsGxsCircleSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_GXSCIRCLE)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_GXSCIRCLE)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsCircleSerialiser() { return; }
|
virtual ~RsGxsCircleSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ RsItem* RsGxsForumSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_FORUMS != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ RsGxsForumGroupItem* RsGxsForumSerialiser::deserialiseGxsForumGroupItem(void *da
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_FORUMS != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSFORUM_DEBUG
|
#ifdef GXSFORUM_DEBUG
|
||||||
|
@ -346,7 +346,7 @@ RsGxsForumMsgItem* RsGxsForumSerialiser::deserialiseGxsForumMsgItem(void *data,
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_FORUMS != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_FORUMS != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSFORUM_DEBUG
|
#ifdef GXSFORUM_DEBUG
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rsgxsforums.h"
|
#include "retroshare/rsgxsforums.h"
|
||||||
|
@ -43,7 +43,7 @@ class RsGxsForumGroupItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsForumGroupItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_FORUMS,
|
RsGxsForumGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_FORUMS,
|
||||||
RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM) { return;}
|
RS_PKT_SUBTYPE_GXSFORUM_GROUP_ITEM) { return;}
|
||||||
virtual ~RsGxsForumGroupItem() { return;}
|
virtual ~RsGxsForumGroupItem() { return;}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class RsGxsForumMsgItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsForumMsgItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_FORUMS,
|
RsGxsForumMsgItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_FORUMS,
|
||||||
RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM) {return; }
|
RS_PKT_SUBTYPE_GXSFORUM_MESSAGE_ITEM) {return; }
|
||||||
virtual ~RsGxsForumMsgItem() { return;}
|
virtual ~RsGxsForumMsgItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -72,7 +72,7 @@ class RsGxsForumSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsForumSerialiser()
|
RsGxsForumSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_FORUMS)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_FORUMS)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsForumSerialiser() { return; }
|
virtual ~RsGxsForumSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "rsgxsiditems.h"
|
#include "rsgxsiditems.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
#include "serialiser/rstlvstring.h"
|
||||||
|
|
||||||
#define GXSID_DEBUG 1
|
#define GXSID_DEBUG 1
|
||||||
|
|
||||||
|
@ -91,7 +92,7 @@ RsItem* RsGxsIdSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSID != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -236,7 +237,7 @@ RsGxsIdGroupItem* RsGxsIdSerialiser::deserialiseGxsIdGroupItem(void *data, uint3
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSID != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSID_GROUP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSID_GROUP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
@ -394,7 +395,7 @@ RsGxsIdOpinionItem* RsGxsIdSerialiser::deserialiseGxsIdOpinionItem(void *data, u
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSID != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSID_OPINION_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSID_OPINION_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
@ -536,7 +537,7 @@ RsGxsIdCommentItem* RsGxsIdSerialiser::deserialiseGxsIdCommentItem(void *data, u
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_GXSID != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_GXSID != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rsidentity.h"
|
#include "retroshare/rsidentity.h"
|
||||||
|
@ -44,7 +43,7 @@ class RsGxsIdGroupItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsIdGroupItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_GXSID,
|
RsGxsIdGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_GXSID,
|
||||||
RS_PKT_SUBTYPE_GXSID_GROUP_ITEM) { return;}
|
RS_PKT_SUBTYPE_GXSID_GROUP_ITEM) { return;}
|
||||||
virtual ~RsGxsIdGroupItem() { return;}
|
virtual ~RsGxsIdGroupItem() { return;}
|
||||||
|
|
||||||
|
@ -60,7 +59,7 @@ class RsGxsIdOpinionItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsIdOpinionItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_GXSID,
|
RsGxsIdOpinionItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_GXSID,
|
||||||
RS_PKT_SUBTYPE_GXSID_OPINION_ITEM) {return; }
|
RS_PKT_SUBTYPE_GXSID_OPINION_ITEM) {return; }
|
||||||
virtual ~RsGxsIdOpinionItem() { return;}
|
virtual ~RsGxsIdOpinionItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -72,7 +71,7 @@ class RsGxsIdCommentItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsIdCommentItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_GXSID,
|
RsGxsIdCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_GXSID,
|
||||||
RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM) { return; }
|
RS_PKT_SUBTYPE_GXSID_COMMENT_ITEM) { return; }
|
||||||
virtual ~RsGxsIdCommentItem() { return; }
|
virtual ~RsGxsIdCommentItem() { return; }
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -87,7 +86,7 @@ class RsGxsIdSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsIdSerialiser()
|
RsGxsIdSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_GXSID)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_GXSID)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsIdSerialiser() { return; }
|
virtual ~RsGxsIdSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,8 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rstlvkeys.h"
|
//#include "serialiser/rstlvkeys.h"
|
||||||
#include "retroshare/rsgxsifacetypes.h"
|
#include "retroshare/rsgxsifacetypes.h"
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const RsGroupMetaData &meta);
|
std::ostream &operator<<(std::ostream &out, const RsGroupMetaData &meta);
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "serialiser/rsbaseserial.h"
|
|
||||||
#include "serialiser/rsgxsrecognitems.h"
|
#include "serialiser/rsgxsrecognitems.h"
|
||||||
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
/***
|
/***
|
||||||
#define RSSERIAL_DEBUG 1
|
#define RSSERIAL_DEBUG 1
|
||||||
|
|
|
@ -30,9 +30,14 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
|
#include "serialiser/rstlvkeys.h"
|
||||||
|
#include "serialiser/rstlvidset.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rstlvkeys.h"
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "retroshare/rsgxsifacetypes.h"
|
#include "retroshare/rsgxsifacetypes.h"
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "retroshare/rsgxsifacetypes.h"
|
#include "retroshare/rsgxsifacetypes.h"
|
||||||
|
|
||||||
#define RS_PKT_SUBTYPE_GXSREPUTATION_CONFIG_ITEM 0x01
|
#define RS_PKT_SUBTYPE_GXSREPUTATION_CONFIG_ITEM 0x01
|
||||||
|
@ -44,7 +43,7 @@ class RsGxsReputationConfigItem: public RsItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsReputationConfigItem()
|
RsGxsReputationConfigItem()
|
||||||
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_REPUTATION,
|
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION,
|
||||||
RS_PKT_SUBTYPE_GXSREPUTATION_CONFIG_ITEM)
|
RS_PKT_SUBTYPE_GXSREPUTATION_CONFIG_ITEM)
|
||||||
{
|
{
|
||||||
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
||||||
|
@ -64,7 +63,7 @@ class RsGxsReputationSetItem: public RsItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsReputationSetItem()
|
RsGxsReputationSetItem()
|
||||||
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_REPUTATION,
|
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION,
|
||||||
RS_PKT_SUBTYPE_GXSREPUTATION_SET_ITEM)
|
RS_PKT_SUBTYPE_GXSREPUTATION_SET_ITEM)
|
||||||
{
|
{
|
||||||
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
||||||
|
@ -86,7 +85,7 @@ class RsGxsReputationUpdateItem: public RsItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsReputationUpdateItem()
|
RsGxsReputationUpdateItem()
|
||||||
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_REPUTATION,
|
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION,
|
||||||
RS_PKT_SUBTYPE_GXSREPUTATION_UPDATE_ITEM)
|
RS_PKT_SUBTYPE_GXSREPUTATION_UPDATE_ITEM)
|
||||||
{
|
{
|
||||||
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
||||||
|
@ -105,7 +104,7 @@ class RsGxsReputationRequestItem: public RsItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsReputationRequestItem()
|
RsGxsReputationRequestItem()
|
||||||
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_REPUTATION,
|
:RsItem(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION,
|
||||||
RS_PKT_SUBTYPE_GXSREPUTATION_REQUEST_ITEM)
|
RS_PKT_SUBTYPE_GXSREPUTATION_REQUEST_ITEM)
|
||||||
{
|
{
|
||||||
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
setPriorityLevel(QOS_PRIORITY_RS_GXSREPUTATION_ITEM);
|
||||||
|
@ -124,7 +123,7 @@ class RsGxsReputationSerialiser: public RsSerialType
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsReputationSerialiser()
|
RsGxsReputationSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_REPUTATION)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_REPUTATION)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsReputationSerialiser()
|
virtual ~RsGxsReputationSerialiser()
|
||||||
{ return; }
|
{ return; }
|
||||||
|
|
|
@ -27,13 +27,16 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#include <map>
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rstlvkeys.h"
|
#include "serialiser/rstlvkeys.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gxs/rsgxsdata.h"
|
#include "gxs/rsgxsdata.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,14 @@
|
||||||
#include "retroshare/rstypes.h"
|
#include "retroshare/rstypes.h"
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
|
|
||||||
|
#include "serialiser/rstlvidset.h"
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvitem.h"
|
||||||
#include "serialiser/rstlvkeys.h"
|
#include "serialiser/rstlvkeys.h"
|
||||||
#include "gxs/rsgxsdata.h"
|
#include "gxs/rsgxsdata.h"
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,9 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "rsphotoitems.h"
|
#include "serialiser/rsphotoitems.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvbinary.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
#define GXS_PHOTO_SERIAL_DEBUG
|
#define GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
@ -98,7 +99,7 @@ RsItem* RsGxsPhotoSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_PHOTO != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -200,7 +201,7 @@ bool RsGxsPhotoSerialiser::serialiseGxsPhotoAlbumItem(RsGxsPhotoAlbumItem* item,
|
||||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DATE, item->album.mWhen);
|
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_LOCATION, item->album.mWhere);
|
||||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->album.mThumbnail.type);
|
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->album.mThumbnail.type);
|
||||||
RsTlvBinaryData b(RS_SERVICE_GXSV2_TYPE_PHOTO); // TODO, need something more persisitent
|
RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent
|
||||||
b.setBinData(item->album.mThumbnail.data, item->album.mThumbnail.size);
|
b.setBinData(item->album.mThumbnail.data, item->album.mThumbnail.size);
|
||||||
ok &= b.SetTlv(data, tlvsize, &offset);
|
ok &= b.SetTlv(data, tlvsize, &offset);
|
||||||
|
|
||||||
|
@ -238,7 +239,7 @@ RsGxsPhotoAlbumItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem(void* da
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_PHOTO != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_PHOTO_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_PHOTO_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
@ -275,7 +276,7 @@ RsGxsPhotoAlbumItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoAlbumItem(void* da
|
||||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->album.mWhere);
|
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);
|
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PIC_TYPE, item->album.mThumbnail.type);
|
||||||
|
|
||||||
RsTlvBinaryData b(RS_SERVICE_GXSV2_TYPE_PHOTO); // TODO, need something more persisitent
|
RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent
|
||||||
ok &= b.GetTlv(data, rssize, &offset);
|
ok &= b.GetTlv(data, rssize, &offset);
|
||||||
item->album.mThumbnail.data = (uint8_t*)b.bin_data;
|
item->album.mThumbnail.data = (uint8_t*)b.bin_data;
|
||||||
item->album.mThumbnail.size = b.bin_len;
|
item->album.mThumbnail.size = b.bin_len;
|
||||||
|
@ -365,7 +366,7 @@ bool RsGxsPhotoSerialiser::serialiseGxsPhotoPhotoItem(RsGxsPhotoPhotoItem* item,
|
||||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_DATE, item->photo.mWhen);
|
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_LOCATION, item->photo.mWhere);
|
||||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->photo.mThumbnail.type);
|
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_PIC_TYPE, item->photo.mThumbnail.type);
|
||||||
RsTlvBinaryData b(RS_SERVICE_GXSV2_TYPE_PHOTO); // TODO, need something more persisitent
|
RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent
|
||||||
b.setBinData(item->photo.mThumbnail.data, item->photo.mThumbnail.size);
|
b.setBinData(item->photo.mThumbnail.data, item->photo.mThumbnail.size);
|
||||||
ok &= b.SetTlv(data, tlvsize, &offset);
|
ok &= b.SetTlv(data, tlvsize, &offset);
|
||||||
|
|
||||||
|
@ -403,7 +404,7 @@ RsGxsPhotoPhotoItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem(void* da
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_PHOTO != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
@ -439,7 +440,7 @@ RsGxsPhotoPhotoItem* RsGxsPhotoSerialiser::deserialiseGxsPhotoPhotoItem(void* da
|
||||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_LOCATION, item->photo.mWhere);
|
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);
|
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_PIC_TYPE, item->photo.mThumbnail.type);
|
||||||
|
|
||||||
RsTlvBinaryData b(RS_SERVICE_GXSV2_TYPE_PHOTO); // TODO, need something more persisitent
|
RsTlvBinaryData b(RS_SERVICE_GXS_TYPE_PHOTO); // TODO, need something more persisitent
|
||||||
ok &= b.GetTlv(data, rssize, &offset);
|
ok &= b.GetTlv(data, rssize, &offset);
|
||||||
item->photo.mThumbnail.data = (uint8_t*)(b.bin_data);
|
item->photo.mThumbnail.data = (uint8_t*)(b.bin_data);
|
||||||
item->photo.mThumbnail.size = b.bin_len;
|
item->photo.mThumbnail.size = b.bin_len;
|
||||||
|
@ -534,7 +535,7 @@ RsGxsPhotoCommentItem * RsGxsPhotoSerialiser::deserialiseGxsPhotoCommentItem(
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_PHOTO != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_PHOTO != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
#ifdef GXS_PHOTO_SERIAL_DEBUG
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rsphoto.h"
|
#include "retroshare/rsphoto.h"
|
||||||
|
@ -44,7 +43,7 @@ class RsGxsPhotoAlbumItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsPhotoAlbumItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_PHOTO,
|
RsGxsPhotoAlbumItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_PHOTO,
|
||||||
RS_PKT_SUBTYPE_PHOTO_ITEM) { return;}
|
RS_PKT_SUBTYPE_PHOTO_ITEM) { return;}
|
||||||
virtual ~RsGxsPhotoAlbumItem() { return;}
|
virtual ~RsGxsPhotoAlbumItem() { return;}
|
||||||
|
|
||||||
|
@ -59,7 +58,7 @@ class RsGxsPhotoPhotoItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsPhotoPhotoItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_PHOTO,
|
RsGxsPhotoPhotoItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO,
|
||||||
RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM) {return; }
|
RS_PKT_SUBTYPE_PHOTO_SHOW_ITEM) {return; }
|
||||||
virtual ~RsGxsPhotoPhotoItem() { return;}
|
virtual ~RsGxsPhotoPhotoItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -71,7 +70,7 @@ class RsGxsPhotoCommentItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsPhotoCommentItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_PHOTO,
|
RsGxsPhotoCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_PHOTO,
|
||||||
RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM) { return; }
|
RS_PKT_SUBTYPE_PHOTO_COMMENT_ITEM) { return; }
|
||||||
virtual ~RsGxsPhotoCommentItem() { return; }
|
virtual ~RsGxsPhotoCommentItem() { return; }
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -86,7 +85,7 @@ class RsGxsPhotoSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsPhotoSerialiser()
|
RsGxsPhotoSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_PHOTO)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_PHOTO)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsPhotoSerialiser() { return; }
|
virtual ~RsGxsPhotoSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,14 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "serialiser/rsconfigitems.h"
|
#include "serialiser/rsconfigitems.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvtypes.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
const uint8_t RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET = 0x01 ;
|
const uint8_t RS_PKT_CLASS_PLUGIN_SUBTYPE_HASHSET = 0x01 ;
|
||||||
|
|
||||||
class RsPluginItem: public RsItem
|
class RsPluginItem: public RsItem
|
||||||
|
|
|
@ -87,7 +87,7 @@ RsItem* RsGxsPostedSerialiser::deserialise(void *data, uint32_t *size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_POSTED != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
std::cerr << "RsGxsPostedSerialiser::deserialise() ERROR Wrong Type";
|
std::cerr << "RsGxsPostedSerialiser::deserialise() ERROR Wrong Type";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
@ -207,7 +207,7 @@ RsGxsPostedPostItem* RsGxsPostedSerialiser::deserialiseGxsPostedPostItem(void *d
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_POSTED != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_POSTED_POST_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_POSTED_POST_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() FAIL wrong type" << std::endl;
|
std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedPostItem() FAIL wrong type" << std::endl;
|
||||||
|
@ -347,7 +347,7 @@ RsGxsPostedGroupItem* RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem(void
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_POSTED != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_POSTED != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_POSTED_GRP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_POSTED_GRP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() FAIL wrong type" << std::endl;
|
std::cerr << "RsGxsPostedSerialiser::deserialiseGxsPostedGroupItem() FAIL wrong type" << std::endl;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
|
||||||
#include "serialiser/rsgxscommentitems.h"
|
#include "serialiser/rsgxscommentitems.h"
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ const uint8_t RS_PKT_SUBTYPE_POSTED_POST_ITEM = 0x03;
|
||||||
class RsGxsPostedGroupItem : public RsGxsGrpItem
|
class RsGxsPostedGroupItem : public RsGxsGrpItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsPostedGroupItem() : RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_POSTED,
|
RsGxsPostedGroupItem() : RsGxsGrpItem(RS_SERVICE_GXS_TYPE_POSTED,
|
||||||
RS_PKT_SUBTYPE_POSTED_GRP_ITEM) { return; }
|
RS_PKT_SUBTYPE_POSTED_GRP_ITEM) { return; }
|
||||||
virtual ~RsGxsPostedGroupItem() { return; }
|
virtual ~RsGxsPostedGroupItem() { return; }
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public:
|
||||||
class RsGxsPostedPostItem : public RsGxsMsgItem
|
class RsGxsPostedPostItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsGxsPostedPostItem() : RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_POSTED,
|
RsGxsPostedPostItem() : RsGxsMsgItem(RS_SERVICE_GXS_TYPE_POSTED,
|
||||||
RS_PKT_SUBTYPE_POSTED_POST_ITEM) {return ; }
|
RS_PKT_SUBTYPE_POSTED_POST_ITEM) {return ; }
|
||||||
virtual ~RsGxsPostedPostItem() { return; }
|
virtual ~RsGxsPostedPostItem() { return; }
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class RsGxsPostedSerialiser : public RsGxsCommentSerialiser
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsPostedSerialiser()
|
RsGxsPostedSerialiser()
|
||||||
:RsGxsCommentSerialiser(RS_SERVICE_GXSV2_TYPE_POSTED)
|
:RsGxsCommentSerialiser(RS_SERVICE_GXS_TYPE_POSTED)
|
||||||
{ return; }
|
{ return; }
|
||||||
|
|
||||||
virtual ~RsGxsPostedSerialiser() { return; }
|
virtual ~RsGxsPostedSerialiser() { return; }
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
#include "serialiser/rsrttitems.h"
|
#include "serialiser/rsrttitems.h"
|
||||||
#include "serialiser/rstlvbase.h"
|
//#include "serialiser/rstlvbase.h"
|
||||||
|
|
||||||
/***
|
/***
|
||||||
#define RSSERIAL_DEBUG 1
|
#define RSSERIAL_DEBUG 1
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -50,27 +50,43 @@ const uint16_t RS_SERVICE_TYPE_HEARTBEAT = 0x0016;
|
||||||
const uint16_t RS_SERVICE_TYPE_FILE_TRANSFER = 0x0017;
|
const uint16_t RS_SERVICE_TYPE_FILE_TRANSFER = 0x0017;
|
||||||
const uint16_t RS_SERVICE_TYPE_GROUTER = 0x0018;
|
const uint16_t RS_SERVICE_TYPE_GROUTER = 0x0018;
|
||||||
|
|
||||||
/* BanList Still Testing at the moment - Service Only */
|
const uint16_t RS_SERVICE_TYPE_SERVICEINFO = 0x0020;
|
||||||
const uint16_t RS_SERVICE_TYPE_BANLIST = 0x0101;
|
/* Bandwidth Control */
|
||||||
|
const uint16_t RS_SERVICE_TYPE_BWCTRL = 0x0021;
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_TYPE_SERVICEINFO = 0x0201;
|
// Non essential services.
|
||||||
|
const uint16_t RS_SERVICE_TYPE_BANLIST = 0x0101;
|
||||||
|
const uint16_t RS_SERVICE_TYPE_STATUS = 0x0102;
|
||||||
|
|
||||||
/* Caches based on p3distrib (Cache Only)
|
/* New Cache Services */
|
||||||
* Unfortunately, noone changed the DUMMY IDS... so we are stuck with them!
|
/* Rs Network Exchange Service */
|
||||||
*/
|
const uint16_t RS_SERVICE_TYPE_NXS = 0x0200;
|
||||||
const uint16_t RS_SERVICE_TYPE_DISTRIB = 0xf110;
|
|
||||||
const uint16_t RS_SERVICE_TYPE_FORUM = 0xf120;
|
const uint16_t RS_SERVICE_GXS_TYPE_GXSID = 0x0211;
|
||||||
const uint16_t RS_SERVICE_TYPE_CHANNEL = 0xf130;
|
const uint16_t RS_SERVICE_GXS_TYPE_PHOTO = 0x0212;
|
||||||
const uint16_t RS_SERVICE_TYPE_CHANNEL_SOCKET = 0xf140;
|
const uint16_t RS_SERVICE_GXS_TYPE_WIKI = 0x0213;
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_WIRE = 0x0214;
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_FORUMS = 0x0215;
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_POSTED = 0x0216;
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_CHANNELS = 0x0217;
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_GXSCIRCLE = 0x0218;
|
||||||
|
// not gxs, but used with identities.
|
||||||
|
const uint16_t RS_SERVICE_GXS_TYPE_REPUTATION = 0x0219;
|
||||||
|
const uint16_t RS_SERVICE_TYPE_GXS_RECOGN = 0x0220;
|
||||||
|
|
||||||
|
// Experimental Services.
|
||||||
|
/* DSDV Testing at the moment - Service Only */
|
||||||
|
const uint16_t RS_SERVICE_TYPE_DSDV = 0x1010;
|
||||||
|
/* Latency RTT Measurements */
|
||||||
|
const uint16_t RS_SERVICE_TYPE_RTT = 0x1011;
|
||||||
|
|
||||||
/* Status - Service only */
|
|
||||||
const uint16_t RS_SERVICE_TYPE_STATUS = 0xf020;
|
|
||||||
|
|
||||||
/***************** IDS ALLOCATED FOR PLUGINS ******************/
|
/***************** IDS ALLOCATED FOR PLUGINS ******************/
|
||||||
|
// 2000+
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_ARADO_ID = 0x0401;
|
const uint16_t RS_SERVICE_TYPE_PLUGIN_ARADO_ID = 0x2001;
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_QCHESS_ID = 0x0402;
|
const uint16_t RS_SERVICE_TYPE_PLUGIN_QCHESS_ID = 0x2002;
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_FEEDREADER = 0x0403;
|
const uint16_t RS_SERVICE_TYPE_PLUGIN_FEEDREADER = 0x2003;
|
||||||
|
|
||||||
|
|
||||||
/****************** BELOW ARE ONLY THEORETICAL (CAN BE CHANGED) *****/
|
/****************** BELOW ARE ONLY THEORETICAL (CAN BE CHANGED) *****/
|
||||||
|
@ -93,82 +109,36 @@ const uint16_t RS_SERVICE_TYPE_PLUGIN_FEEDREADER = 0x0403;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*! for Qblog service (Cache Only) */
|
/*! for Qblog service (Cache Only) */
|
||||||
const uint16_t RS_SERVICE_TYPE_QBLOG = 0xf010;
|
//const uint16_t RS_SERVICE_TYPE_QBLOG = 0xf010;
|
||||||
|
|
||||||
/* TEST VOIP - Service only */
|
/* TEST VOIP - Service only */
|
||||||
// NOT SURE WHATS HAPPENING WITH THIS ONE?
|
// NOT SURE WHATS HAPPENING WITH THIS ONE?
|
||||||
// SHOULD BE DEFINED IN PLUGIN SECTION!
|
// SHOULD BE DEFINED IN PLUGIN SECTION!
|
||||||
//const uint16_t RS_SERVICE_TYPE_VOIP = 0xf011;
|
//const uint16_t RS_SERVICE_TYPE_VOIP = 0xf011;
|
||||||
|
|
||||||
/* Status - Service only */
|
|
||||||
//const uint16_t RS_SERVICE_TYPE_STATUS = 0xf020;
|
|
||||||
|
|
||||||
/* Proxy - Service only */
|
/* Proxy - Service only */
|
||||||
const uint16_t RS_SERVICE_TYPE_PROXY = 0xf030;
|
//const uint16_t RS_SERVICE_TYPE_PROXY = 0xf030;
|
||||||
|
|
||||||
/* DSDV Testing at the moment - Service Only */
|
|
||||||
const uint16_t RS_SERVICE_TYPE_DSDV = 0xf050;
|
|
||||||
/* Latency RTT Measurements */
|
|
||||||
const uint16_t RS_SERVICE_TYPE_RTT = 0xf051;
|
|
||||||
|
|
||||||
/* Bandwidth Testing at the moment - Service Only */
|
|
||||||
const uint16_t RS_SERVICE_TYPE_BWCTRL = 0xf060;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//const uint16_t RS_SERVICE_TYPE_DISTRIB = 0xf110;
|
|
||||||
//const uint16_t RS_SERVICE_TYPE_FORUM = 0xf120;
|
|
||||||
//const uint16_t RS_SERVICE_TYPE_CHANNEL = 0xf130;
|
|
||||||
//const uint16_t RS_SERVICE_TYPE_CHANNEL_SOCKET = 0xf140;
|
|
||||||
|
|
||||||
/* Games/External Apps - Service Only */
|
/* Games/External Apps - Service Only */
|
||||||
const uint16_t RS_SERVICE_TYPE_GAME_LAUNCHER = 0xf200;
|
//const uint16_t RS_SERVICE_TYPE_GAME_LAUNCHER = 0xf200;
|
||||||
const uint16_t RS_SERVICE_TYPE_PORT = 0xf201;
|
//const uint16_t RS_SERVICE_TYPE_PORT = 0xf201;
|
||||||
|
|
||||||
/* Example Games (NOT USED YET!) */
|
/* Example Games (NOT USED YET!) */
|
||||||
/* Board Games */
|
/* Board Games */
|
||||||
const uint16_t RS_SERVICE_TYPE_GAME_QTCHESS = 0xf211;
|
//const uint16_t RS_SERVICE_TYPE_GAME_QTCHESS = 0xf211;
|
||||||
const uint16_t RS_SERVICE_TYPE_GAME_QGO = 0xf212;
|
//const uint16_t RS_SERVICE_TYPE_GAME_QGO = 0xf212;
|
||||||
|
|
||||||
/* Card Games */
|
/* Card Games */
|
||||||
const uint16_t RS_SERVICE_TYPE_GAME_BIGTWO = 0xf213;
|
//const uint16_t RS_SERVICE_TYPE_GAME_BIGTWO = 0xf213;
|
||||||
const uint16_t RS_SERVICE_TYPE_GAME_POKER = 0xf214;
|
//const uint16_t RS_SERVICE_TYPE_GAME_POKER = 0xf214;
|
||||||
|
|
||||||
/* New Cache Services */
|
|
||||||
/* Rs Network Exchange Service */
|
|
||||||
const uint16_t RS_SERVICE_TYPE_NXS = 0xf300;
|
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_GXSID = 0xf311;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_GXSCIRCLE = 0xf312;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_PHOTO = 0xf313;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_WIKI = 0xf314;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_WIRE = 0xf315;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_FORUMS = 0xf316;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_POSTED = 0xf317;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_CHANNELS = 0xf318;
|
|
||||||
const uint16_t RS_SERVICE_GXSV2_TYPE_REPUTATION = 0xf319;
|
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_GXSID = 0xf321;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_PHOTO = 0xf322;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_WIKI = 0xf323;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_WIRE = 0xf324;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_FORUMS = 0xf325;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_POSTED = 0xf326;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_CHANNELS = 0xf327;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_GXSCIRCLE = 0xf328;
|
|
||||||
const uint16_t RS_SERVICE_GXSV3_TYPE_REPUTATION = 0xf329;
|
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_TYPE_GXS_RECOGN = 0xf331;
|
|
||||||
|
|
||||||
/***************** IDS ALLOCATED FOR PLUGINS ******************/
|
/***************** IDS ALLOCATED FOR PLUGINS ******************/
|
||||||
|
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_ARADO_TEST_ID1 = 0xf401;
|
//const uint16_t RS_SERVICE_TYPE_PLUGIN_ARADO_TEST_ID1 = 0xf401;
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_QCHESS_TEST_ID1 = 0xf402;
|
//const uint16_t RS_SERVICE_TYPE_PLUGIN_QCHESS_TEST_ID1 = 0xf402;
|
||||||
|
|
||||||
// test
|
// test
|
||||||
const uint16_t RS_SERVICE_TYPE_PLUGIN_SIMPLE_FORUM = 0xf403;
|
//const uint16_t RS_SERVICE_TYPE_PLUGIN_SIMPLE_FORUM = 0xf403;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* RS_SERVICE_IDS_H */
|
#endif /* RS_SERVICE_IDS_H */
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
/***** RsServiceInfo ****/
|
/***** RsServiceInfo ****/
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream &RsTlvParamRef<RsServiceInfo>::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvParamRef<RsServiceInfo>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
out << "RsServiceInfo: " << mParam.mServiceType << " name " << mParam.mServiceName;
|
out << "RsServiceInfo: " << mParam.mServiceType << " name " << mParam.mServiceName;
|
||||||
out << std::endl;
|
out << std::endl;
|
||||||
|
@ -47,7 +47,7 @@ std::ostream &RsTlvParamRef<RsServiceInfo>::print(std::ostream &out, uint16_t in
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<RsServiceInfo>::TlvSize()
|
uint32_t RsTlvParamRef<RsServiceInfo>::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ void RsTlvParamRef<RsServiceInfo>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<RsServiceInfo>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<RsServiceInfo>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
|
|
@ -24,15 +24,17 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvaddrs.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvaddrs.h"
|
||||||
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
#if 0
|
||||||
#include "rstlvtypes.h"
|
#include "rstlvtypes.h"
|
||||||
#include "rsbaseserial.h"
|
|
||||||
#include "util/rsprint.h"
|
#include "util/rsprint.h"
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvIpAddress ************************************/
|
/************************************* RsTlvIpAddress ************************************/
|
||||||
|
@ -49,7 +51,7 @@ void RsTlvIpAddress::TlvClear()
|
||||||
sockaddr_storage_clear(addr);
|
sockaddr_storage_clear(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvIpAddress::TlvSize()
|
uint32_t RsTlvIpAddress::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE;
|
uint32_t s = TLV_HEADER_SIZE;
|
||||||
switch(addr.ss_family)
|
switch(addr.ss_family)
|
||||||
|
@ -67,7 +69,7 @@ uint32_t RsTlvIpAddress::TlvSize()
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvIpAddress::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddress::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -101,7 +103,7 @@ bool RsTlvIpAddress::SetTlv(void *data, uint32_t size, uint32_t *offset) /* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvIpAddress::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddress::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -163,7 +165,7 @@ bool RsTlvIpAddress::GetTlv(void *data, uint32_t size, uint32_t *offset) /* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvIpAddress::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvIpAddress::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvIpAddress", indent);
|
printBase(out, "RsTlvIpAddress", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -194,7 +196,7 @@ void RsTlvIpAddressInfo::TlvClear()
|
||||||
source = 0;
|
source = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvIpAddressInfo::TlvSize()
|
uint32_t RsTlvIpAddressInfo::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + IpAddr + 8 for time & 4 for size */
|
uint32_t s = TLV_HEADER_SIZE; /* header + IpAddr + 8 for time & 4 for size */
|
||||||
|
|
||||||
|
@ -206,7 +208,7 @@ uint32_t RsTlvIpAddressInfo::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvIpAddressInfo::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddressInfo::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -231,7 +233,7 @@ bool RsTlvIpAddressInfo::SetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvIpAddressInfo::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddressInfo::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -279,7 +281,7 @@ bool RsTlvIpAddressInfo::GetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvIpAddressInfo::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvIpAddressInfo::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvIpAddressInfo", indent);
|
printBase(out, "RsTlvIpAddressInfo", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -300,7 +302,7 @@ std::ostream &RsTlvIpAddressInfo::print(std::ostream &out, uint16_t indent)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
/************************************* RsTlvIpAddrSet ************************************/
|
/************************************* RsTlvIpAddrSet ************************************/
|
||||||
|
|
||||||
void RsTlvIpAddrSet::TlvClear()
|
void RsTlvIpAddrSet::TlvClear()
|
||||||
|
@ -308,7 +310,7 @@ void RsTlvIpAddrSet::TlvClear()
|
||||||
addrs.clear();
|
addrs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvIpAddrSet::TlvSize()
|
uint32_t RsTlvIpAddrSet::TlvSize() const
|
||||||
{
|
{
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
@ -327,7 +329,7 @@ uint32_t RsTlvIpAddrSet::TlvSize()
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvIpAddrSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddrSet::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -355,7 +357,7 @@ return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvIpAddrSet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvIpAddrSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -427,7 +429,7 @@ bool RsTlvIpAddrSet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
// prints out contents of RsTlvIpAddrSet
|
// prints out contents of RsTlvIpAddrSet
|
||||||
std::ostream &RsTlvIpAddrSet::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvIpAddrSet::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvIpAddrSet", indent);
|
printBase(out, "RsTlvIpAddrSet", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -443,3 +445,4 @@ std::ostream &RsTlvIpAddrSet::print(std::ostream &out, uint16_t indent)
|
||||||
|
|
||||||
/************************************* RsTlvIpAddressInfo ************************************/
|
/************************************* RsTlvIpAddressInfo ************************************/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef RS_TLV_ADDRS_TYPES_H
|
#pragma once
|
||||||
#define RS_TLV_ADDRS_TYPES_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvaddrs.h
|
* libretroshare/src/serialiser: rstlvaddrs.h
|
||||||
|
@ -30,20 +29,22 @@
|
||||||
* These are the Compound TLV structures that must be (un)packed.
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#include <map>
|
#include "serialiser/rstlvitem.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "util/rsnet.h"
|
#include "util/rsnet.h"
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
#include "serialiser/rstlvlist.h"
|
||||||
|
|
||||||
class RsTlvIpAddress: public RsTlvItem
|
class RsTlvIpAddress: public RsTlvItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RsTlvIpAddress();
|
RsTlvIpAddress();
|
||||||
virtual ~RsTlvIpAddress() { return; }
|
virtual ~RsTlvIpAddress() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
struct sockaddr_storage addr; // Mandatory :
|
struct sockaddr_storage addr; // Mandatory :
|
||||||
};
|
};
|
||||||
|
@ -54,17 +55,20 @@ class RsTlvIpAddressInfo: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvIpAddressInfo();
|
RsTlvIpAddressInfo();
|
||||||
virtual ~RsTlvIpAddressInfo() { return; }
|
virtual ~RsTlvIpAddressInfo() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
RsTlvIpAddress addr; // Mandatory :
|
RsTlvIpAddress addr; // Mandatory :
|
||||||
uint64_t seenTime; // Mandatory :
|
uint64_t seenTime; // Mandatory :
|
||||||
uint32_t source; // Mandatory :
|
uint32_t source; // Mandatory :
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef t_RsTlvList<RsTlvIpAddressInfo,TLV_TYPE_ADDRESS_SET> RsTlvIpAddrSet;
|
||||||
|
|
||||||
|
#if 0
|
||||||
class RsTlvIpAddrSet: public RsTlvItem
|
class RsTlvIpAddrSet: public RsTlvItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -78,7 +82,6 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
|
|
||||||
std::list<RsTlvIpAddressInfo> addrs; // Mandatory :
|
std::list<RsTlvIpAddressInfo> addrs; // Mandatory :
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,15 +24,10 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvbanlist.h"
|
#include "serialiser/rstlvbanlist.h"
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
#include "rstlvtypes.h"
|
|
||||||
#include "rsbaseserial.h"
|
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvBanListEntry ************************************/
|
/************************************* RsTlvBanListEntry ************************************/
|
||||||
|
@ -51,7 +46,7 @@ void RsTlvBanListEntry::TlvClear()
|
||||||
age = 0;
|
age = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvBanListEntry::TlvSize()
|
uint32_t RsTlvBanListEntry::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE;
|
uint32_t s = TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
@ -64,7 +59,7 @@ uint32_t RsTlvBanListEntry::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvBanListEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvBanListEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -89,7 +84,7 @@ bool RsTlvBanListEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvBanListEntry::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvBanListEntry::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -137,7 +132,7 @@ bool RsTlvBanListEntry::GetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvBanListEntry::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvBanListEntry::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvBanListEntry", indent);
|
printBase(out, "RsTlvBanListEntry", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -163,151 +158,3 @@ std::ostream &RsTlvBanListEntry::print(std::ostream &out, uint16_t indent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvBanList ************************************/
|
|
||||||
|
|
||||||
RsTlvBanList::RsTlvBanList()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsTlvBanList::TlvClear()
|
|
||||||
{
|
|
||||||
entries.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvBanList::TlvSize()
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
std::list<RsTlvBanListEntry>::iterator it;
|
|
||||||
|
|
||||||
|
|
||||||
if(!entries.empty())
|
|
||||||
{
|
|
||||||
|
|
||||||
for(it = entries.begin(); it != entries.end() ; ++it)
|
|
||||||
s += it->TlvSize();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvBanList::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, TLV_TYPE_BAN_LIST , tlvsize);
|
|
||||||
|
|
||||||
if(!entries.empty())
|
|
||||||
{
|
|
||||||
std::list<RsTlvBanListEntry>::iterator it;
|
|
||||||
|
|
||||||
for(it = entries.begin(); it != entries.end() ; ++it)
|
|
||||||
ok &= it->SetTlv(data, size, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvBanList::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE_BAN_LIST) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
switch(tlvsubtype)
|
|
||||||
{
|
|
||||||
case TLV_TYPE_BAN_ENTRY:
|
|
||||||
{
|
|
||||||
RsTlvBanListEntry entry;
|
|
||||||
ok &= entry.GetTlv(data, size, offset);
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
entries.push_back(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvBanList::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
// prints out contents of RsTlvBanList
|
|
||||||
std::ostream &RsTlvBanList::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvBanList", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
std::list<RsTlvBanListEntry>::iterator it;
|
|
||||||
for(it = entries.begin(); it != entries.end() ; ++it)
|
|
||||||
it->print(out, int_Indent);
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvBanList", indent);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvBanList ************************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef RS_TLV_BANLIST_TYPES_H
|
#pragma once
|
||||||
#define RS_TLV_BANLIST_TYPES_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvbanlist.h
|
* libretroshare/src/serialiser: rstlvbanlist.h
|
||||||
|
@ -30,10 +29,10 @@
|
||||||
* These are the Compound TLV structures that must be (un)packed.
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#include <map>
|
#include "serialiser/rstlvitem.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "serialiser/rstlvaddrs.h"
|
#include "serialiser/rstlvaddrs.h"
|
||||||
#include "util/rsnet.h"
|
#include "serialiser/rstlvlist.h"
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
|
||||||
#define RSDSDV_MAX_ROUTE_TABLE 1000
|
#define RSDSDV_MAX_ROUTE_TABLE 1000
|
||||||
|
|
||||||
|
@ -42,11 +41,11 @@ class RsTlvBanListEntry: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvBanListEntry();
|
RsTlvBanListEntry();
|
||||||
virtual ~RsTlvBanListEntry() { return; }
|
virtual ~RsTlvBanListEntry() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
RsTlvIpAddress addr;
|
RsTlvIpAddress addr;
|
||||||
uint32_t level;
|
uint32_t level;
|
||||||
|
@ -54,20 +53,8 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
uint32_t age;
|
uint32_t age;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsTlvBanList: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvBanList();
|
|
||||||
virtual ~RsTlvBanList() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::list<RsTlvBanListEntry> entries;
|
typedef t_RsTlvList<RsTlvBanListEntry,TLV_TYPE_BAN_LIST> RsTlvBanList;
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef RS_TLV_BASE_H
|
#pragma once
|
||||||
#define RS_TLV_BASE_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvbase.h
|
* libretroshare/src/serialiser: rstlvbase.h
|
||||||
|
@ -62,11 +61,11 @@
|
||||||
*
|
*
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <inttypes.h>
|
||||||
#include <string.h>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "util/rsnet.h"
|
#include "util/rsnet.h"
|
||||||
|
|
||||||
|
|
||||||
/* 0b 0000 0000 0001 XXXX UInt8 */
|
/* 0b 0000 0000 0001 XXXX UInt8 */
|
||||||
/* 0b 0000 0000 0010 XXXX UInt16 */
|
/* 0b 0000 0000 0010 XXXX UInt16 */
|
||||||
/* 0b 0000 0000 0011 XXXX UInt32 */
|
/* 0b 0000 0000 0011 XXXX UInt32 */
|
||||||
|
@ -105,11 +104,6 @@ const uint32_t TLV_HEADER_LEN_SIZE = 4;
|
||||||
const uint32_t TLV_HEADER_SIZE = TLV_HEADER_TYPE_SIZE + TLV_HEADER_LEN_SIZE;
|
const uint32_t TLV_HEADER_SIZE = TLV_HEADER_TYPE_SIZE + TLV_HEADER_LEN_SIZE;
|
||||||
/* TLV HEADER SIZE (Reference) *******************************/
|
/* TLV HEADER SIZE (Reference) *******************************/
|
||||||
|
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_UINT8_SERID = 0x0010;
|
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_UINT16_SERID = 0x0020;
|
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_UINT32_SIZE = 0x0030;
|
const uint16_t TLV_TYPE_UINT32_SIZE = 0x0030;
|
||||||
const uint16_t TLV_TYPE_UINT32_POP = 0x0031;
|
const uint16_t TLV_TYPE_UINT32_POP = 0x0031;
|
||||||
const uint16_t TLV_TYPE_UINT32_AGE = 0x0032;
|
const uint16_t TLV_TYPE_UINT32_AGE = 0x0032;
|
||||||
|
@ -141,22 +135,6 @@ const uint16_t TLV_TYPE_STR_CERT_SSL = 0x005e;
|
||||||
const uint16_t TLV_TYPE_STR_VERSION = 0x005f;
|
const uint16_t TLV_TYPE_STR_VERSION = 0x005f;
|
||||||
const uint16_t TLV_TYPE_STR_PARAM = 0x0054; /* same as VALUE ---- TO FIX */
|
const uint16_t TLV_TYPE_STR_PARAM = 0x0054; /* same as VALUE ---- TO FIX */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Wide Chars (4 bytes per char) for internationalisation */
|
|
||||||
const uint16_t TLV_TYPE_WSTR_PEERID = 0x0060;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_NAME = 0x0061;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_PATH = 0x0062;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_KEY = 0x0063;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_VALUE = 0x0064;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_COMMENT = 0x0065;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_TITLE = 0x0066;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_MSG = 0x0067;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_SUBJECT = 0x0068;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_LINK = 0x0069;
|
|
||||||
const uint16_t TLV_TYPE_WSTR_GENID = 0x006a;
|
|
||||||
|
|
||||||
/* Hashs are always strings */
|
/* Hashs are always strings */
|
||||||
const uint16_t TLV_TYPE_STR_HASH_SHA1 = 0x0070;
|
const uint16_t TLV_TYPE_STR_HASH_SHA1 = 0x0070;
|
||||||
const uint16_t TLV_TYPE_STR_HASH_ED2K = 0x0071;
|
const uint16_t TLV_TYPE_STR_HASH_ED2K = 0x0071;
|
||||||
|
@ -178,8 +156,6 @@ const uint16_t TLV_TYPE_STR_PARENTID = 0x00a2;
|
||||||
const uint16_t TLV_TYPE_STR_THREADID = 0x00a3;
|
const uint16_t TLV_TYPE_STR_THREADID = 0x00a3;
|
||||||
const uint16_t TLV_TYPE_STR_KEYID = 0x00a4;
|
const uint16_t TLV_TYPE_STR_KEYID = 0x00a4;
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_WSTR_CATEGORY = 0x00b0;
|
|
||||||
|
|
||||||
/* even MORE string Ids for GXS services */
|
/* even MORE string Ids for GXS services */
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_STR_CAPTION = 0x00b1;
|
const uint16_t TLV_TYPE_STR_CAPTION = 0x00b1;
|
||||||
|
@ -220,9 +196,7 @@ const uint16_t TLV_TYPE_FILESET = 0x1001;
|
||||||
const uint16_t TLV_TYPE_FILEDATA = 0x1002;
|
const uint16_t TLV_TYPE_FILEDATA = 0x1002;
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_KEYVALUE = 0x1010;
|
const uint16_t TLV_TYPE_KEYVALUE = 0x1010;
|
||||||
const uint16_t TLV_TYPE_WKEYVALUE = 0x1012;
|
|
||||||
const uint16_t TLV_TYPE_KEYVALUESET = 0x1011;
|
const uint16_t TLV_TYPE_KEYVALUESET = 0x1011;
|
||||||
const uint16_t TLV_TYPE_WKEYVALUESET = 0x1013;
|
|
||||||
|
|
||||||
const uint16_t TLV_TYPE_STRINGSET = 0x1020; /* dummy non-existant */
|
const uint16_t TLV_TYPE_STRINGSET = 0x1020; /* dummy non-existant */
|
||||||
const uint16_t TLV_TYPE_PEERSET = 0x1021;
|
const uint16_t TLV_TYPE_PEERSET = 0x1021;
|
||||||
|
@ -255,6 +229,7 @@ const uint16_t TLV_TYPE_BAN_ENTRY = 0x1090;
|
||||||
const uint16_t TLV_TYPE_BAN_LIST = 0x1091;
|
const uint16_t TLV_TYPE_BAN_LIST = 0x1091;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint32_t RSTLV_IMAGE_TYPE_PNG = 0x0001;
|
const uint32_t RSTLV_IMAGE_TYPE_PNG = 0x0001;
|
||||||
const uint32_t RSTLV_IMAGE_TYPE_JPG = 0x0002;
|
const uint32_t RSTLV_IMAGE_TYPE_JPG = 0x0002;
|
||||||
|
|
||||||
|
@ -317,4 +292,3 @@ above(SetTlvbinData) is partially implemented
|
||||||
bool GetTlvBinData(void* data, uint32_t size, uint32_t* offset, uint16_t type, void* data_bin, uint32_t len_tlv)
|
bool GetTlvBinData(void* data, uint32_t size, uint32_t* offset, uint16_t type, void* data_bin, uint32_t len_tlv)
|
||||||
|
|
||||||
*************************************/
|
*************************************/
|
||||||
#endif
|
|
||||||
|
|
213
libretroshare/src/serialiser/rstlvbinary.cc
Normal file
213
libretroshare/src/serialiser/rstlvbinary.cc
Normal file
|
@ -0,0 +1,213 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvbinary.cc
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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 "serialiser/rstlvbinary.h"
|
||||||
|
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
#define TLV_DEBUG 1
|
||||||
|
|
||||||
|
/*!********************************** RsTlvFileBinaryData **********************************/
|
||||||
|
|
||||||
|
|
||||||
|
RsTlvBinaryData::RsTlvBinaryData(uint16_t t)
|
||||||
|
:tlvtype(t), bin_len(0), bin_data(NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsTlvBinaryData::RsTlvBinaryData(const RsTlvBinaryData &b)
|
||||||
|
: tlvtype(b.tlvtype), bin_len(0) , bin_data(NULL) {
|
||||||
|
|
||||||
|
setBinData(b.bin_data, b.bin_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
RsTlvBinaryData::~RsTlvBinaryData()
|
||||||
|
{
|
||||||
|
TlvClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RsTlvBinaryData::operator =(const RsTlvBinaryData& b){
|
||||||
|
|
||||||
|
setBinData(b.bin_data, b.bin_len);
|
||||||
|
tlvtype = b.tlvtype;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// used to allocate memory andinitialize binary data member
|
||||||
|
bool RsTlvBinaryData::setBinData(const void *data, uint32_t size)
|
||||||
|
{
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* get mandatory */
|
||||||
|
/* the rest of the TLV size binary data */
|
||||||
|
bin_len = size;
|
||||||
|
if (bin_len == 0)
|
||||||
|
{
|
||||||
|
bin_data = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bin_data = malloc(bin_len);
|
||||||
|
memcpy(bin_data, data, bin_len);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RsTlvBinaryData::TlvClear()
|
||||||
|
{
|
||||||
|
if (bin_data)
|
||||||
|
{
|
||||||
|
free(bin_data);
|
||||||
|
}
|
||||||
|
TlvShallowClear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RsTlvBinaryData::TlvShallowClear()
|
||||||
|
{
|
||||||
|
bin_data = NULL;
|
||||||
|
bin_len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RsTlvBinaryData::TlvSize() const
|
||||||
|
{
|
||||||
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
if (bin_data != NULL)
|
||||||
|
s += bin_len; // len is the size of data
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvBinaryData::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 (bin_data != NULL && bin_len > 0)
|
||||||
|
{
|
||||||
|
memcpy(&(((uint8_t *) data)[*offset]), bin_data, bin_len);
|
||||||
|
*offset += bin_len;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvBinaryData::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;
|
||||||
|
|
||||||
|
bool ok = setBinData(&(((uint8_t *) data)[*offset]), tlvsize - TLV_HEADER_SIZE);
|
||||||
|
(*offset) += bin_len;
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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 ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &RsTlvBinaryData::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: " << bin_len;
|
||||||
|
sout << std::hex;
|
||||||
|
|
||||||
|
for(i = 0; i < bin_len; i++)
|
||||||
|
{
|
||||||
|
if (i % 16 == 0)
|
||||||
|
{
|
||||||
|
sout << std::endl;
|
||||||
|
printIndent(sout, int_Indent);
|
||||||
|
}
|
||||||
|
sout << std::setw(2) << std::setfill('0')
|
||||||
|
<< (int) (((unsigned char *) bin_data)[i]) << ":";
|
||||||
|
}
|
||||||
|
|
||||||
|
sout << std::endl;
|
||||||
|
out << sout.str();
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvBinaryData", indent);
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
63
libretroshare/src/serialiser/rstlvbinary.h
Normal file
63
libretroshare/src/serialiser/rstlvbinary.h
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvbinary.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
|
||||||
|
|
||||||
|
class RsTlvBinaryData: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvBinaryData(uint16_t t);
|
||||||
|
RsTlvBinaryData(const RsTlvBinaryData& b); // as per rule of three
|
||||||
|
void operator=(const RsTlvBinaryData& b); // as per rule of three
|
||||||
|
virtual ~RsTlvBinaryData(); // as per rule of three
|
||||||
|
virtual uint32_t TlvSize() const;
|
||||||
|
virtual void TlvClear(); /*! Initialize fields to empty legal values ( "0", "", etc) */
|
||||||
|
virtual void TlvShallowClear(); /*! Don't delete the binary data */
|
||||||
|
|
||||||
|
/// Serialise.
|
||||||
|
/*! Serialise Tlv to buffer(*data) of 'size' bytes starting at *offset */
|
||||||
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
|
|
||||||
|
/// Deserialise.
|
||||||
|
/*! Deserialise Tlv buffer(*data) of 'size' bytes starting at *offset */
|
||||||
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const; /*! Error/Debug util function */
|
||||||
|
|
||||||
|
bool setBinData(const void *data, uint32_t size);
|
||||||
|
|
||||||
|
uint16_t tlvtype; /// set/checked against TLV input
|
||||||
|
uint32_t bin_len; /// size of malloc'ed data (not serialised)
|
||||||
|
void *bin_data; /// mandatory
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -25,14 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvdsdv.h"
|
#include "rstlvdsdv.h"
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
|
||||||
#include "rstlvtypes.h"
|
|
||||||
#include "rsbaseserial.h"
|
#include "rsbaseserial.h"
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvDsdvEndPoint ************************************/
|
/************************************* RsTlvDsdvEndPoint ************************************/
|
||||||
|
@ -50,7 +43,7 @@ void RsTlvDsdvEndPoint::TlvClear()
|
||||||
serviceId.clear();
|
serviceId.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvDsdvEndPoint::TlvSize()
|
uint32_t RsTlvDsdvEndPoint::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + 4 + str + str */
|
uint32_t s = TLV_HEADER_SIZE; /* header + 4 + str + str */
|
||||||
|
|
||||||
|
@ -62,7 +55,7 @@ uint32_t RsTlvDsdvEndPoint::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvDsdvEndPoint::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvDsdvEndPoint::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -86,7 +79,7 @@ bool RsTlvDsdvEndPoint::SetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvDsdvEndPoint::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvDsdvEndPoint::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -133,7 +126,7 @@ bool RsTlvDsdvEndPoint::GetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvDsdvEndPoint::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvDsdvEndPoint::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvDsdvEndPoint", indent);
|
printBase(out, "RsTlvDsdvEndPoint", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -170,7 +163,7 @@ void RsTlvDsdvEntry::TlvClear()
|
||||||
distance = 0;
|
distance = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvDsdvEntry::TlvSize()
|
uint32_t RsTlvDsdvEntry::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + EndPoint.Size + 4 + 4 */
|
uint32_t s = TLV_HEADER_SIZE; /* header + EndPoint.Size + 4 + 4 */
|
||||||
|
|
||||||
|
@ -182,7 +175,7 @@ uint32_t RsTlvDsdvEntry::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvDsdvEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvDsdvEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -207,7 +200,7 @@ bool RsTlvDsdvEntry::SetTlv(void *data, uint32_t size, uint32_t *offset) /* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvDsdvEntry::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvDsdvEntry::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -255,7 +248,7 @@ bool RsTlvDsdvEntry::GetTlv(void *data, uint32_t size, uint32_t *offset) /* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvDsdvEntry::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvDsdvEntry::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvDsdvEntry", indent);
|
printBase(out, "RsTlvDsdvEntry", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -277,6 +270,7 @@ std::ostream &RsTlvDsdvEntry::print(std::ostream &out, uint16_t indent)
|
||||||
|
|
||||||
/************************************* RsTlvDsdvEntrySet ************************************/
|
/************************************* RsTlvDsdvEntrySet ************************************/
|
||||||
|
|
||||||
|
#if 0
|
||||||
RsTlvDsdvEntrySet::RsTlvDsdvEntrySet()
|
RsTlvDsdvEntrySet::RsTlvDsdvEntrySet()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -420,6 +414,6 @@ std::ostream &RsTlvDsdvEntrySet::print(std::ostream &out, uint16_t indent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************************* RsTlvIpAddressInfo ************************************/
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef RS_TLV_DSDV_TYPES_H
|
#pragma once
|
||||||
#define RS_TLV_DSDV_TYPES_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvdsdv.h
|
* libretroshare/src/serialiser: rstlvdsdv.h
|
||||||
|
@ -30,9 +29,9 @@
|
||||||
* These are the Compound TLV structures that must be (un)packed.
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
#include <map>
|
#include "serialiser/rstlvitem.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "util/rsnet.h"
|
#include "serialiser/rstlvlist.h"
|
||||||
|
|
||||||
#define RSDSDV_MAX_ROUTE_TABLE 1000
|
#define RSDSDV_MAX_ROUTE_TABLE 1000
|
||||||
|
|
||||||
|
@ -41,11 +40,11 @@ class RsTlvDsdvEndPoint: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvDsdvEndPoint();
|
RsTlvDsdvEndPoint();
|
||||||
virtual ~RsTlvDsdvEndPoint() { return; }
|
virtual ~RsTlvDsdvEndPoint() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
uint32_t idType;
|
uint32_t idType;
|
||||||
std::string anonChunk;
|
std::string anonChunk;
|
||||||
|
@ -57,17 +56,20 @@ class RsTlvDsdvEntry: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvDsdvEntry();
|
RsTlvDsdvEntry();
|
||||||
virtual ~RsTlvDsdvEntry() { return; }
|
virtual ~RsTlvDsdvEntry() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
RsTlvDsdvEndPoint endPoint;
|
RsTlvDsdvEndPoint endPoint;
|
||||||
uint32_t sequence;
|
uint32_t sequence;
|
||||||
uint32_t distance;
|
uint32_t distance;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef t_RsTlvList<RsTlvDsdvEntry,TLV_TYPE_DSDV_ENTRY_SET> RsTlvDsdvEntrySet;
|
||||||
|
|
||||||
|
#if 0
|
||||||
class RsTlvDsdvEntrySet: public RsTlvItem
|
class RsTlvDsdvEntrySet: public RsTlvItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -82,6 +84,5 @@ virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
||||||
std::list<RsTlvDsdvEntry> entries;
|
std::list<RsTlvDsdvEntry> entries;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,15 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvfileitem.h"
|
||||||
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvtypes.h"
|
||||||
#include "serialiser/rsbaseserial.h"
|
#endif
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* #define TLV_FI_DEBUG 1
|
* #define TLV_FI_DEBUG 1
|
||||||
|
@ -52,7 +56,7 @@ void RsTlvFileItem::TlvClear()
|
||||||
hashset.TlvClear();
|
hashset.TlvClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvFileItem::TlvSize()
|
uint32_t RsTlvFileItem::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
s += 8; /* filesize */
|
s += 8; /* filesize */
|
||||||
|
@ -119,7 +123,7 @@ uint32_t RsTlvFileItem::TlvSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* serialise the data to the buffer */
|
/* serialise the data to the buffer */
|
||||||
bool RsTlvFileItem::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvFileItem::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -342,7 +346,7 @@ bool RsTlvFileItem::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
|
||||||
|
|
||||||
/* print it out */
|
/* print it out */
|
||||||
std::ostream &RsTlvFileItem::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvFileItem::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvFileItem", indent);
|
printBase(out, "RsTlvFileItem", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -401,13 +405,13 @@ void RsTlvFileSet::TlvClear()
|
||||||
items.clear();
|
items.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvFileSet::TlvSize()
|
uint32_t RsTlvFileSet::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
/* first determine the total size of RstlvFileItems in list */
|
/* first determine the total size of RstlvFileItems in list */
|
||||||
|
|
||||||
std::list<RsTlvFileItem>::iterator it;
|
std::list<RsTlvFileItem>::const_iterator it;
|
||||||
|
|
||||||
for(it = items.begin(); it != items.end() ; ++it)
|
for(it = items.begin(); it != items.end() ; ++it)
|
||||||
{
|
{
|
||||||
|
@ -427,7 +431,7 @@ uint32_t RsTlvFileSet::TlvSize()
|
||||||
|
|
||||||
/* serialize data to the buffer */
|
/* serialize data to the buffer */
|
||||||
|
|
||||||
bool RsTlvFileSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvFileSet::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -442,7 +446,7 @@ bool RsTlvFileSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* se
|
||||||
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_FILESET, tlvsize);
|
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_FILESET, tlvsize);
|
||||||
|
|
||||||
/* add mandatory parts first */
|
/* add mandatory parts first */
|
||||||
std::list<RsTlvFileItem>::iterator it;
|
std::list<RsTlvFileItem>::const_iterator it;
|
||||||
|
|
||||||
for(it = items.begin(); it != items.end() ; ++it)
|
for(it = items.begin(); it != items.end() ; ++it)
|
||||||
{
|
{
|
||||||
|
@ -542,7 +546,7 @@ bool RsTlvFileSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
|
||||||
/* print it out */
|
/* print it out */
|
||||||
|
|
||||||
std::ostream &RsTlvFileSet::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvFileSet::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvFileSet", indent);
|
printBase(out, "RsTlvFileSet", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -550,7 +554,7 @@ std::ostream &RsTlvFileSet::print(std::ostream &out, uint16_t indent)
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
printIndent(out, int_Indent);
|
||||||
out << "Mandatory:" << std::endl;
|
out << "Mandatory:" << std::endl;
|
||||||
std::list<RsTlvFileItem>::iterator it;
|
std::list<RsTlvFileItem>::const_iterator it;
|
||||||
|
|
||||||
for(it = items.begin(); it != items.end() ; ++it)
|
for(it = items.begin(); it != items.end() ; ++it)
|
||||||
{
|
{
|
||||||
|
@ -595,7 +599,7 @@ void RsTlvFileData::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t RsTlvFileData::TlvSize()
|
uint32_t RsTlvFileData::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
@ -608,7 +612,7 @@ uint32_t RsTlvFileData::TlvSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvFileData::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvFileData::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -633,7 +637,7 @@ bool RsTlvFileData::SetTlv(void *data, uint32_t size, uint32_t *offset) /* seria
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvFileData::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvFileData::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
{
|
{
|
||||||
|
@ -684,7 +688,7 @@ bool RsTlvFileData::GetTlv(void *data, uint32_t size, uint32_t *offset) /* seria
|
||||||
}
|
}
|
||||||
|
|
||||||
/* print it out */
|
/* print it out */
|
||||||
std::ostream &RsTlvFileData::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvFileData::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvFileData", indent);
|
printBase(out, "RsTlvFileData", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
93
libretroshare/src/serialiser/rstlvfileitem.h
Normal file
93
libretroshare/src/serialiser/rstlvfileitem.h
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvfileitem.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "serialiser/rstlvidset.h"
|
||||||
|
#include "serialiser/rstlvbinary.h"
|
||||||
|
|
||||||
|
class RsTlvFileItem: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvFileItem();
|
||||||
|
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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
uint64_t filesize; /// Mandatory: size of file to be downloaded
|
||||||
|
RsFileHash hash; /// Mandatory: to find file
|
||||||
|
std::string name; /// Optional: name of file
|
||||||
|
std::string path; /// Optional: path on host computer
|
||||||
|
uint32_t pop; /// Optional: Popularity of file
|
||||||
|
uint32_t age; /// Optional: age of file
|
||||||
|
// For chunk hashing.
|
||||||
|
uint32_t piecesize; /// Optional: bytes/piece for hashset.
|
||||||
|
RsTlvHashSet hashset; /// Optional: chunk hashes.
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class RsTlvFileSet: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvFileSet() { return; }
|
||||||
|
virtual ~RsTlvFileSet() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
std::list<RsTlvFileItem> items; /// Mandatory
|
||||||
|
std::string title; /// Optional: title of file set
|
||||||
|
std::string comment; /// Optional: comments for file
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class RsTlvFileData: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvFileData();
|
||||||
|
virtual ~RsTlvFileData() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
RsTlvFileItem file; /// Mandatory: file information
|
||||||
|
uint64_t file_offset; /// Mandatory: where to start in bin data
|
||||||
|
RsTlvBinaryData binData; /// Mandatory: serialised file info
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,13 +26,16 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "serialiser/rstlvgenericparam.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "serialiser/rstlvgenericparam.h"
|
#endif
|
||||||
|
|
||||||
/*********************************** RsTlvGenericPairRef ***********************************/
|
/*********************************** RsTlvGenericPairRef ***********************************/
|
||||||
|
|
||||||
|
@ -46,11 +49,11 @@ class RsTlvGenericPairRef: public RsTlvItem
|
||||||
mValueType(value_type), mKey(k), mValue(v) { return; }
|
mValueType(value_type), mKey(k), mValue(v) { return; }
|
||||||
|
|
||||||
virtual ~RsTlvGenericPairRef() { return; }
|
virtual ~RsTlvGenericPairRef() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
uint16_t mPairType;
|
uint16_t mPairType;
|
||||||
uint16_t mKeyType;
|
uint16_t mKeyType;
|
||||||
|
@ -72,11 +75,11 @@ class RsTlvGenericMapRef: public RsTlvItem
|
||||||
mKeyType(key_type), mValueType(value_type), mRefMap(refmap) { return; }
|
mKeyType(key_type), mValueType(value_type), mRefMap(refmap) { return; }
|
||||||
|
|
||||||
virtual ~RsTlvGenericMapRef() { return; }
|
virtual ~RsTlvGenericMapRef() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
uint16_t mMapType;
|
uint16_t mMapType;
|
||||||
uint16_t mPairType;
|
uint16_t mPairType;
|
||||||
|
|
|
@ -24,17 +24,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
|
||||||
#include "rstlvtypes.h"
|
|
||||||
#include "rstlvgenericmap.h"
|
|
||||||
#include "rsbaseserial.h"
|
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#define TLV_DEBUG 1
|
// Must be different - as this is inline in headers.
|
||||||
|
#define TLV_GENERICMAP_DEBUG 1
|
||||||
|
|
||||||
/*********************************** RsTlvGenericPairRef ***********************************/
|
/*********************************** RsTlvGenericPairRef ***********************************/
|
||||||
|
|
||||||
|
@ -48,7 +40,7 @@ void RsTlvGenericPairRef<K, V>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
uint32_t RsTlvGenericPairRef<K, V>::TlvSize()
|
uint32_t RsTlvGenericPairRef<K, V>::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
RsTlvParamRef<K> key(mKeyType, mKey);
|
RsTlvParamRef<K> key(mKeyType, mKey);
|
||||||
|
@ -61,7 +53,7 @@ uint32_t RsTlvGenericPairRef<K, V>::TlvSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
bool RsTlvGenericPairRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvGenericPairRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -94,7 +86,7 @@ bool RsTlvGenericPairRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *off
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
bool RsTlvGenericPairRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvGenericPairRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -130,7 +122,7 @@ bool RsTlvGenericPairRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *off
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
if (*offset != tlvend)
|
if (*offset != tlvend)
|
||||||
{
|
{
|
||||||
#ifdef TLV_DEBUG
|
#ifdef TLV_GENERICMAP_DEBUG
|
||||||
std::cerr << "RsTlvGenericPairRef::GetTlv() Warning extra bytes at end of item";
|
std::cerr << "RsTlvGenericPairRef::GetTlv() Warning extra bytes at end of item";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
@ -141,7 +133,7 @@ bool RsTlvGenericPairRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *off
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
std::ostream &RsTlvGenericPairRef<K, V>::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvGenericPairRef<K, V>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
//printBase(out, "RsTlvGenericPairRef", indent);
|
//printBase(out, "RsTlvGenericPairRef", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -178,7 +170,7 @@ void RsTlvGenericMapRef<K, V>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
uint32_t RsTlvGenericMapRef<K, V>::TlvSize()
|
uint32_t RsTlvGenericMapRef<K, V>::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
@ -193,7 +185,7 @@ uint32_t RsTlvGenericMapRef<K, V>::TlvSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
bool RsTlvGenericMapRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvGenericMapRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -225,7 +217,7 @@ bool RsTlvGenericMapRef<K, V>::SetTlv(void *data, uint32_t size, uint32_t *offs
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
bool RsTlvGenericMapRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvGenericMapRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -283,7 +275,7 @@ bool RsTlvGenericMapRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offs
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
if (*offset != tlvend)
|
if (*offset != tlvend)
|
||||||
{
|
{
|
||||||
#ifdef TLV_DEBUG
|
#ifdef TLV_GENERICMAP_DEBUG
|
||||||
std::cerr << "RsTlvGenericMapRef::GetTlv() Warning extra bytes at end of item";
|
std::cerr << "RsTlvGenericMapRef::GetTlv() Warning extra bytes at end of item";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
@ -294,7 +286,7 @@ bool RsTlvGenericMapRef<K, V>::GetTlv(void *data, uint32_t size, uint32_t *offs
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class K, class V>
|
template<class K, class V>
|
||||||
std::ostream &RsTlvGenericMapRef<K, V>::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvGenericMapRef<K, V>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
//printBase(out, "RsTlvGenericMapRef", indent);
|
//printBase(out, "RsTlvGenericMapRef", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -313,13 +305,3 @@ std::ostream &RsTlvGenericMapRef<K, V>::print(std::ostream &out, uint16_t indent
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// declare likely combinations.
|
|
||||||
//template class RsTlvGenericMapRef<uint32_t, uint32_t>;
|
|
||||||
//template class RsTlvGenericMapRef<uint32_t, std::string>;
|
|
||||||
//template class RsTlvGenericMapRef<std::string, uint32_t>;
|
|
||||||
//template class RsTlvGenericMapRef<std::string, std::string>;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,21 +24,15 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
#include "serialiser/rstlvgenericparam.h"
|
||||||
#include "rstlvtypes.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "rstlvgenericmap.h"
|
|
||||||
#include "rsbaseserial.h"
|
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define TLV_DEBUG 1
|
#define TLV_DEBUG 1
|
||||||
|
|
||||||
/* generic print */
|
/* generic print */
|
||||||
template<class T>
|
template<class T>
|
||||||
std::ostream & RsTlvParamRef<T>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<T>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << " Param: " << mParam;
|
out << "Type: " << mParamType << " Param: " << mParam;
|
||||||
|
@ -48,7 +42,7 @@ std::ostream & RsTlvParamRef<T>::print(std::ostream &out, uint16_t indent)
|
||||||
|
|
||||||
/***** uint16_t ****/
|
/***** uint16_t ****/
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<uint16_t>::TlvSize()
|
uint32_t RsTlvParamRef<uint16_t>::TlvSize() const
|
||||||
{
|
{
|
||||||
return GetTlvUInt16Size();
|
return GetTlvUInt16Size();
|
||||||
}
|
}
|
||||||
|
@ -60,7 +54,7 @@ void RsTlvParamRef<uint16_t>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<uint16_t>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<uint16_t>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
uint16_t param = mParam;
|
uint16_t param = mParam;
|
||||||
return SetTlvUInt16(data, size, offset, mParamType, mParam);
|
return SetTlvUInt16(data, size, offset, mParamType, mParam);
|
||||||
|
@ -76,7 +70,7 @@ bool RsTlvParamRef<uint16_t>::GetTlv(void *data, uint32_t size, uint32_t *offset
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream & RsTlvParamRef<uint16_t>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<uint16_t>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << "Param: " << mParam;
|
out << "Type: " << mParamType << "Param: " << mParam;
|
||||||
|
@ -87,7 +81,7 @@ std::ostream & RsTlvParamRef<uint16_t>::print(std::ostream &out, uint16_t indent
|
||||||
/***** const uint16_t ****/
|
/***** const uint16_t ****/
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<const uint16_t>::TlvSize()
|
uint32_t RsTlvParamRef<const uint16_t>::TlvSize() const
|
||||||
{
|
{
|
||||||
return GetTlvUInt16Size();
|
return GetTlvUInt16Size();
|
||||||
}
|
}
|
||||||
|
@ -100,7 +94,7 @@ void RsTlvParamRef<const uint16_t>::TlvClear()
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<const uint16_t>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<const uint16_t>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
return SetTlvUInt16(data, size, offset, mParamType, mParam);
|
return SetTlvUInt16(data, size, offset, mParamType, mParam);
|
||||||
}
|
}
|
||||||
|
@ -113,17 +107,16 @@ bool RsTlvParamRef<const uint16_t>::GetTlv(void *data, uint32_t size, uint32_t *
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream & RsTlvParamRef<const uint16_t>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<const uint16_t>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << "Param: " << mParam;
|
out << "Type: " << mParamType << "Param: " << mParam;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***** uint32_t ****/
|
/***** uint32_t ****/
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<uint32_t>::TlvSize()
|
uint32_t RsTlvParamRef<uint32_t>::TlvSize() const
|
||||||
{
|
{
|
||||||
return GetTlvUInt32Size();
|
return GetTlvUInt32Size();
|
||||||
}
|
}
|
||||||
|
@ -135,7 +128,7 @@ void RsTlvParamRef<uint32_t>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<uint32_t>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<uint32_t>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
return SetTlvUInt32(data, size, offset, mParamType, mParam);
|
return SetTlvUInt32(data, size, offset, mParamType, mParam);
|
||||||
}
|
}
|
||||||
|
@ -147,7 +140,7 @@ bool RsTlvParamRef<uint32_t>::GetTlv(void *data, uint32_t size, uint32_t *offset
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream & RsTlvParamRef<uint32_t>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<uint32_t>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << "Param: " << mParam;
|
out << "Type: " << mParamType << "Param: " << mParam;
|
||||||
|
@ -158,7 +151,7 @@ std::ostream & RsTlvParamRef<uint32_t>::print(std::ostream &out, uint16_t indent
|
||||||
|
|
||||||
/***** const uint32_t ****/
|
/***** const uint32_t ****/
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<const uint32_t>::TlvSize()
|
uint32_t RsTlvParamRef<const uint32_t>::TlvSize() const
|
||||||
{
|
{
|
||||||
return GetTlvUInt32Size();
|
return GetTlvUInt32Size();
|
||||||
}
|
}
|
||||||
|
@ -170,7 +163,7 @@ void RsTlvParamRef<const uint32_t>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<const uint32_t>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<const uint32_t>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
return SetTlvUInt32(data, size, offset, mParamType, mParam);
|
return SetTlvUInt32(data, size, offset, mParamType, mParam);
|
||||||
}
|
}
|
||||||
|
@ -183,7 +176,7 @@ bool RsTlvParamRef<const uint32_t>::GetTlv(void *data, uint32_t size, uint32_t *
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream & RsTlvParamRef<const uint32_t>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<const uint32_t>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << "Param: " << mParam;
|
out << "Type: " << mParamType << "Param: " << mParam;
|
||||||
|
@ -193,7 +186,7 @@ std::ostream & RsTlvParamRef<const uint32_t>::print(std::ostream &out, uint16_t
|
||||||
|
|
||||||
/***** std::string ****/
|
/***** std::string ****/
|
||||||
template<>
|
template<>
|
||||||
uint32_t RsTlvParamRef<std::string>::TlvSize()
|
uint32_t RsTlvParamRef<std::string>::TlvSize() const
|
||||||
{
|
{
|
||||||
return GetTlvStringSize(mParam);
|
return GetTlvStringSize(mParam);
|
||||||
}
|
}
|
||||||
|
@ -205,7 +198,7 @@ void RsTlvParamRef<std::string>::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
bool RsTlvParamRef<std::string>::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvParamRef<std::string>::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
return SetTlvString(data, size, offset, mParamType, mParam);
|
return SetTlvString(data, size, offset, mParamType, mParam);
|
||||||
}
|
}
|
||||||
|
@ -217,7 +210,7 @@ bool RsTlvParamRef<std::string>::GetTlv(void *data, uint32_t size, uint32_t *off
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
std::ostream & RsTlvParamRef<std::string>::print(std::ostream &out, uint16_t indent)
|
std::ostream & RsTlvParamRef<std::string>::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printIndent(out, indent);
|
printIndent(out, indent);
|
||||||
out << "Type: " << mParamType << "Param: " << mParam;
|
out << "Type: " << mParamType << "Param: " << mParam;
|
||||||
|
|
|
@ -26,11 +26,14 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "serialiser/rstlvtypes.h"
|
#include "serialiser/rstlvitem.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**** TLV *****
|
/**** TLV *****
|
||||||
|
@ -44,11 +47,11 @@ class RsTlvParamRef: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvParamRef(uint16_t param_type, T &p): mParamType(param_type), mParam(p) {}
|
RsTlvParamRef(uint16_t param_type, T &p): mParamType(param_type), mParam(p) {}
|
||||||
virtual ~RsTlvParamRef() { return; }
|
virtual ~RsTlvParamRef() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
uint16_t mParamType;
|
uint16_t mParamType;
|
||||||
T &mParam;
|
T &mParam;
|
||||||
|
|
181
libretroshare/src/serialiser/rstlvidset.cc
Normal file
181
libretroshare/src/serialiser/rstlvidset.cc
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvtypes.cc
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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 "rstlvidset.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#include "rstlvbase.h"
|
||||||
|
#include "rsbaseserial.h"
|
||||||
|
#include "util/rsprint.h"
|
||||||
|
#include <ostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TLV_DEBUG 1
|
||||||
|
|
||||||
|
/************************************* Service Id Set ************************************/
|
||||||
|
|
||||||
|
void RsTlvServiceIdSet::TlvClear()
|
||||||
|
{
|
||||||
|
ids.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RsTlvServiceIdSet::TlvSize() const
|
||||||
|
{
|
||||||
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (*it > 0)
|
||||||
|
s += GetTlvUInt32Size();
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RsTlvServiceIdSet::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, TLV_TYPE_SERVICESET , tlvsize);
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (*it > 0)
|
||||||
|
ok &= SetTlvUInt32(data, tlvend, offset, TLV_TYPE_UINT32_SERID, *it);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RsTlvServiceIdSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE_SERVICESET) /* check type */
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
/* while there is TLV */
|
||||||
|
while((*offset) + 2 < tlvend)
|
||||||
|
{
|
||||||
|
/* get the next type */
|
||||||
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
|
|
||||||
|
if (tlvsubtype == TLV_TYPE_UINT32_SERID)
|
||||||
|
{
|
||||||
|
uint32_t newIds;
|
||||||
|
ok &= GetTlvUInt32(data, tlvend, offset, TLV_TYPE_UINT32_SERID, &newIds);
|
||||||
|
if(ok)
|
||||||
|
{
|
||||||
|
ids.push_back(newIds);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Step past unknown TLV TYPE */
|
||||||
|
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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 << "RsTlvServiceIdSet::GetTlv() Warning extra bytes at end of item";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
*offset = tlvend;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// print to screen RsTlvServiceSet contents
|
||||||
|
std::ostream &RsTlvServiceIdSet::print(std::ostream &out, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printBase(out, "RsTlvServiceIdSet", indent);
|
||||||
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
std::list<uint32_t>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "id:" << *it;
|
||||||
|
out << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvServiceIdSet", indent);
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
133
libretroshare/src/serialiser/rstlvidset.h
Normal file
133
libretroshare/src/serialiser/rstlvidset.h
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvidset.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
|
||||||
|
#include <retroshare/rstypes.h>
|
||||||
|
#include <retroshare/rsgxsifacetypes.h>
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
template<class ID_CLASS,uint32_t TLV_TYPE> class t_RsTlvIdSet: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
t_RsTlvIdSet() {}
|
||||||
|
virtual ~t_RsTlvIdSet() {}
|
||||||
|
|
||||||
|
virtual uint32_t TlvSize() const { return ID_CLASS::SIZE_IN_BYTES * ids.size() + TLV_HEADER_SIZE; }
|
||||||
|
virtual void TlvClear(){ ids.clear() ; }
|
||||||
|
virtual bool 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 = ok && SetTlvBase(data, tlvend, offset, TLV_TYPE, tlvsize);
|
||||||
|
|
||||||
|
for(typename std::list<ID_CLASS>::const_iterator it(ids.begin());it!=ids.end();++it)
|
||||||
|
ok = ok && (*it).serialise(data,size,*offset) ;
|
||||||
|
|
||||||
|
return ok ;
|
||||||
|
}
|
||||||
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE) /* check type */
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
while(*offset + ID_CLASS::SIZE_IN_BYTES <= tlvend)
|
||||||
|
{
|
||||||
|
ID_CLASS id ;
|
||||||
|
ok = ok && id.deserialise(data,size,*offset) ;
|
||||||
|
ids.push_back(id) ;
|
||||||
|
}
|
||||||
|
if(*offset != tlvend)
|
||||||
|
std::cerr << "(EE) deserialisaiton error in " << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
return *offset == tlvend ;
|
||||||
|
}
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t /* indent */) const
|
||||||
|
{
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << ": not implemented" << std::endl;
|
||||||
|
return out ;
|
||||||
|
}
|
||||||
|
virtual std::ostream &printHex(std::ostream &out, uint16_t /* indent */) const /* SPECIAL One */
|
||||||
|
{
|
||||||
|
std::cerr << __PRETTY_FUNCTION__ << ": not implemented" << std::endl;
|
||||||
|
return out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<ID_CLASS> ids ;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef t_RsTlvIdSet<RsPeerId,TLV_TYPE_PEERSET> RsTlvPeerIdSet ;
|
||||||
|
typedef t_RsTlvIdSet<RsPgpId,TLV_TYPE_PGPIDSET> RsTlvPgpIdSet ;
|
||||||
|
typedef t_RsTlvIdSet<Sha1CheckSum,TLV_TYPE_HASHSET> RsTlvHashSet ;
|
||||||
|
typedef t_RsTlvIdSet<RsGxsId,TLV_TYPE_GXSIDSET> RsTlvGxsIdSet ;
|
||||||
|
|
||||||
|
class RsTlvServiceIdSet: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvServiceIdSet() { return; }
|
||||||
|
virtual ~RsTlvServiceIdSet() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
std::list<uint32_t> ids; /* Mandatory */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvfileitem.cc
|
* libretroshare/src/serialiser: rstlvimage.cc
|
||||||
*
|
*
|
||||||
* RetroShare Serialiser.
|
* RetroShare Serialiser.
|
||||||
*
|
*
|
||||||
|
@ -24,11 +24,14 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvimage.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "serialiser/rstlvbase.h"
|
#include "serialiser/rstlvbase.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
#include "serialiser/rsbaseserial.h"
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* #define TLV_IMG_DEBUG 1
|
* #define TLV_IMG_DEBUG 1
|
||||||
|
@ -49,7 +52,7 @@ void RsTlvImage::TlvClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t RsTlvImage::TlvSize()
|
uint32_t RsTlvImage::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
@ -61,7 +64,7 @@ uint32_t RsTlvImage::TlvSize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvImage::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvImage::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
#ifdef TLV_IMG_DEBUG
|
#ifdef TLV_IMG_DEBUG
|
||||||
std::cerr << "RsTlvImage::SetTlv()" << std::endl;
|
std::cerr << "RsTlvImage::SetTlv()" << std::endl;
|
||||||
|
@ -108,7 +111,7 @@ bool RsTlvImage::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialis
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvImage::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvImage::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
#ifdef TLV_IMG_DEBUG
|
#ifdef TLV_IMG_DEBUG
|
||||||
std::cerr << "RsTlvImage::GetTlv()" << std::endl;
|
std::cerr << "RsTlvImage::GetTlv()" << std::endl;
|
||||||
|
@ -176,7 +179,7 @@ bool RsTlvImage::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialis
|
||||||
}
|
}
|
||||||
|
|
||||||
/* print it out */
|
/* print it out */
|
||||||
std::ostream &RsTlvImage::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvImage::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvImage", indent);
|
printBase(out, "RsTlvImage", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
55
libretroshare/src/serialiser/rstlvimage.h
Normal file
55
libretroshare/src/serialiser/rstlvimage.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvimage.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "serialiser/rstlvbinary.h"
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rsbaseserial.h"
|
||||||
|
|
||||||
|
class RsTlvImage: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvImage();
|
||||||
|
RsTlvImage(const RsTlvImage& );
|
||||||
|
virtual ~RsTlvImage() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
uint32_t image_type; // Mandatory:
|
||||||
|
RsTlvBinaryData binData; // Mandatory: serialised file info
|
||||||
|
};
|
||||||
|
|
||||||
|
|
197
libretroshare/src/serialiser/rstlvitem.cc
Normal file
197
libretroshare/src/serialiser/rstlvitem.cc
Normal file
|
@ -0,0 +1,197 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvtypes.cc
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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 "rstlvitem.h"
|
||||||
|
#include "rstlvbase.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#include "rsbaseserial.h"
|
||||||
|
#include "util/rsprint.h"
|
||||||
|
#include <ostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TLV_DEBUG 1
|
||||||
|
|
||||||
|
void RsTlvItem::TlvShallowClear()
|
||||||
|
{
|
||||||
|
TlvClear(); /* unless overloaded! */
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &RsTlvItem::printBase(std::ostream &out, std::string clsName, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printIndent(out, indent);
|
||||||
|
out << "RsTlvItem: " << clsName << " Size: " << TlvSize() << " ***********************";
|
||||||
|
out << std::endl;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &RsTlvItem::printEnd(std::ostream &out, std::string clsName, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printIndent(out, indent);
|
||||||
|
out << "********************** " << clsName << " *********************";
|
||||||
|
out << std::endl;
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &printIndent(std::ostream &out, uint16_t indent)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < indent; i++)
|
||||||
|
{
|
||||||
|
out << " ";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RsTlvUnit::RsTlvUnit(const uint16_t tlv_type)
|
||||||
|
:RsTlvItem(), mTlvType(tlv_type)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RsTlvUnit::TlvSize() const
|
||||||
|
{
|
||||||
|
return TLV_HEADER_SIZE + TlvSizeUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* serialise */
|
||||||
|
bool RsTlvUnit::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
|
{
|
||||||
|
#ifdef TLV_DEBUG
|
||||||
|
std::cerr << "RsTlvUnit::SetTlv()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* must check sizes */
|
||||||
|
uint32_t tlvsize = TlvSize();
|
||||||
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
|
|
||||||
|
if (size < tlvend)
|
||||||
|
{
|
||||||
|
#ifdef TLV_DEBUG
|
||||||
|
std::cerr << "RsTlvImage::SetTlv() ERROR not enough space" << std::endl;
|
||||||
|
#endif
|
||||||
|
return false; /* not enough space */
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* start at data[offset] */
|
||||||
|
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_IMAGE , tlvsize);
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
#ifdef TLV_DEBUG
|
||||||
|
std::cerr << "RsTlvUnit::SetTlv() ERROR Setting base" << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok &= SetTlvUnit(data, tlvend, offset);
|
||||||
|
|
||||||
|
#ifdef TLV_DEBUG
|
||||||
|
if (!ok)
|
||||||
|
std::cerr << "RsTlvUnit::SetTlv() ERROR in SetTlvUnit" << std::endl;
|
||||||
|
#endif
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* deserialise */
|
||||||
|
bool RsTlvUnit::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
{
|
||||||
|
#ifdef TLV_DEBUG
|
||||||
|
std::cerr << "RsTlvUnit::GetTlv() ERROR not enough size for header";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
|
uint16_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) );
|
||||||
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
|
|
||||||
|
if (size < tlvend) /* check size */
|
||||||
|
{
|
||||||
|
#ifdef TLV_IMG_DEBUG
|
||||||
|
std::cerr << "RsTlvImage::GetTlv() ERROR no space";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return false; /* not enough space */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tlvtype != mTlvType) /* check type */
|
||||||
|
{
|
||||||
|
#ifdef TLV_IMG_DEBUG
|
||||||
|
std::cerr << "RsTlvImage::GetTlv() ERROR wrong type";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
/* extract components */
|
||||||
|
ok &= GetTlvUnit(data, tlvend, offset);
|
||||||
|
|
||||||
|
#ifdef TLV_IMG_DEBUG
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
std::cerr << "RsTlvUnit::GetTlv() ERROR GetTlvUnit() NOK";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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 << "RsTlvUnit::GetTlv() Warning extra bytes at end of item";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
*offset = tlvend;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
82
libretroshare/src/serialiser/rstlvitem.h
Normal file
82
libretroshare/src/serialiser/rstlvitem.h
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
#pragma once
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvitem.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include <iosfwd>
|
||||||
|
#include <string>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
//! A base class for all tlv items
|
||||||
|
/*! This class is provided to allow the serialisation and deserialization of compund
|
||||||
|
tlv items
|
||||||
|
*/
|
||||||
|
class RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvItem() { return; }
|
||||||
|
virtual ~RsTlvItem() { return; }
|
||||||
|
virtual uint32_t TlvSize() const = 0;
|
||||||
|
virtual void TlvClear() = 0;
|
||||||
|
virtual void TlvShallowClear(); /*! Don't delete allocated data */
|
||||||
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const = 0; /* serialise */
|
||||||
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset) = 0; /* deserialise */
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const = 0;
|
||||||
|
std::ostream &printBase(std::ostream &out, std::string clsName, uint16_t indent) const;
|
||||||
|
std::ostream &printEnd(std::ostream &out, std::string clsName, uint16_t indent) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream &printIndent(std::ostream &out, uint16_t indent);
|
||||||
|
|
||||||
|
|
||||||
|
class RsTlvUnit: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvUnit(uint16_t tlv_type);
|
||||||
|
virtual ~RsTlvUnit() { return; }
|
||||||
|
virtual uint32_t TlvSize() const;
|
||||||
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
|
|
||||||
|
virtual uint16_t TlvType() const { return mTlvType; }
|
||||||
|
|
||||||
|
// These Functions need to be implemented.
|
||||||
|
//virtual void TlvClear() = 0;
|
||||||
|
//virtual std::ostream &print(std::ostream &out, uint16_t indent) = 0 const;
|
||||||
|
|
||||||
|
virtual uint32_t TlvSizeUnit() const = 0;
|
||||||
|
virtual bool SetTlvUnit(void *data, uint32_t size, uint32_t *offset) const = 0;
|
||||||
|
virtual bool GetTlvUnit(void *data, uint32_t size, uint32_t *offset) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint16_t mTlvType;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -25,13 +25,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rstlvkeys.h"
|
#include "rstlvkeys.h"
|
||||||
|
|
||||||
#include "rstlvbase.h"
|
#include "rstlvbase.h"
|
||||||
#include "rstlvtypes.h"
|
|
||||||
#include "rsbaseserial.h"
|
#include "rsbaseserial.h"
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#define TLV_DEBUG 1
|
#define TLV_DEBUG 1
|
||||||
|
@ -65,7 +61,7 @@ void RsTlvSecurityKey::ShallowClear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t RsTlvSecurityKey::TlvSize()
|
uint32_t RsTlvSecurityKey::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
||||||
|
|
||||||
|
@ -81,7 +77,7 @@ uint32_t RsTlvSecurityKey::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvSecurityKey::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvSecurityKey::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -114,7 +110,7 @@ bool RsTlvSecurityKey::SetTlv(void *data, uint32_t size, uint32_t *offset) /* s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvSecurityKey::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvSecurityKey::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -180,11 +176,10 @@ bool RsTlvSecurityKey::GetTlv(void *data, uint32_t size, uint32_t *offset) /* s
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvSecurityKey::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvSecurityKey::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvSecurityKey", indent);
|
printBase(out, "RsTlvSecurityKey", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -224,12 +219,12 @@ void RsTlvSecurityKeySet::TlvClear()
|
||||||
keys.clear(); //empty list
|
keys.clear(); //empty list
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvSecurityKeySet::TlvSize()
|
uint32_t RsTlvSecurityKeySet::TlvSize() const
|
||||||
{
|
{
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
std::map<std::string, RsTlvSecurityKey>::iterator it;
|
std::map<std::string, RsTlvSecurityKey>::const_iterator it;
|
||||||
|
|
||||||
s += GetTlvStringSize(groupId);
|
s += GetTlvStringSize(groupId);
|
||||||
|
|
||||||
|
@ -244,7 +239,7 @@ uint32_t RsTlvSecurityKeySet::TlvSize()
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvSecurityKeySet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvSecurityKeySet::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -269,7 +264,7 @@ bool RsTlvSecurityKeySet::SetTlv(void *data, uint32_t size, uint32_t *offset) /
|
||||||
|
|
||||||
if(!keys.empty())
|
if(!keys.empty())
|
||||||
{
|
{
|
||||||
std::map<std::string, RsTlvSecurityKey>::iterator it;
|
std::map<std::string, RsTlvSecurityKey>::const_iterator it;
|
||||||
|
|
||||||
for(it = keys.begin(); it != keys.end() ; ++it)
|
for(it = keys.begin(); it != keys.end() ; ++it)
|
||||||
ok &= (it->second).SetTlv(data, size, offset);
|
ok &= (it->second).SetTlv(data, size, offset);
|
||||||
|
@ -281,7 +276,7 @@ return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvSecurityKeySet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvSecurityKeySet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -357,7 +352,7 @@ bool RsTlvSecurityKeySet::GetTlv(void *data, uint32_t size, uint32_t *offset) /
|
||||||
}
|
}
|
||||||
|
|
||||||
// prints out contents of RsTlvSecurityKeySet
|
// prints out contents of RsTlvSecurityKeySet
|
||||||
std::ostream &RsTlvSecurityKeySet::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvSecurityKeySet::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvSecurityKeySet", indent);
|
printBase(out, "RsTlvSecurityKeySet", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -366,7 +361,7 @@ std::ostream &RsTlvSecurityKeySet::print(std::ostream &out, uint16_t indent)
|
||||||
out << "GroupId: " << groupId;
|
out << "GroupId: " << groupId;
|
||||||
out << std::endl;
|
out << std::endl;
|
||||||
|
|
||||||
std::map<std::string, RsTlvSecurityKey>::iterator it;
|
std::map<std::string, RsTlvSecurityKey>::const_iterator it;
|
||||||
for(it = keys.begin(); it != keys.end() ; ++it)
|
for(it = keys.begin(); it != keys.end() ; ++it)
|
||||||
(it->second).print(out, int_Indent);
|
(it->second).print(out, int_Indent);
|
||||||
|
|
||||||
|
@ -397,7 +392,7 @@ void RsTlvKeySignature::ShallowClear()
|
||||||
signData.bin_len = 0;
|
signData.bin_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvKeySignature::TlvSize()
|
uint32_t RsTlvKeySignature::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
uint32_t s = TLV_HEADER_SIZE; /* header + 4 for size */
|
||||||
|
|
||||||
|
@ -407,7 +402,7 @@ uint32_t RsTlvKeySignature::TlvSize()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvKeySignature::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvKeySignature::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
uint32_t tlvsize = TlvSize();
|
uint32_t tlvsize = TlvSize();
|
||||||
|
@ -445,7 +440,7 @@ bool RsTlvKeySignature::SetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvKeySignature::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
bool RsTlvKeySignature::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
{
|
{
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
return false;
|
return false;
|
||||||
|
@ -503,7 +498,7 @@ bool RsTlvKeySignature::GetTlv(void *data, uint32_t size, uint32_t *offset) /*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream &RsTlvKeySignature::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvKeySignature::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvKeySignature", indent);
|
printBase(out, "RsTlvKeySignature", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
@ -528,19 +523,19 @@ RsTlvKeySignatureSet::RsTlvKeySignatureSet()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream &RsTlvKeySignatureSet::print(std::ostream &out, uint16_t indent)
|
std::ostream &RsTlvKeySignatureSet::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
printBase(out, "RsTlvKeySignatureSet", indent);
|
printBase(out, "RsTlvKeySignatureSet", indent);
|
||||||
uint16_t int_Indent = indent + 2;
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
printIndent(out, int_Indent);
|
||||||
|
|
||||||
std::map<SignType, RsTlvKeySignature>::iterator mit = keySignSet.begin();
|
std::map<SignType, RsTlvKeySignature>::const_iterator mit = keySignSet.begin();
|
||||||
|
|
||||||
for(; mit != keySignSet.end(); mit++)
|
for(; mit != keySignSet.end(); mit++)
|
||||||
{
|
{
|
||||||
out << "SignType: " << mit->first << std::endl;
|
out << "SignType: " << mit->first << std::endl;
|
||||||
RsTlvKeySignature& sign = mit->second;
|
const RsTlvKeySignature& sign = mit->second;
|
||||||
sign.print(out, indent);
|
sign.print(out, indent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -555,7 +550,7 @@ void RsTlvKeySignatureSet::TlvClear()
|
||||||
keySignSet.clear();
|
keySignSet.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTlvKeySignatureSet::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
bool RsTlvKeySignatureSet::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
|
|
||||||
/* must check sizes */
|
/* must check sizes */
|
||||||
|
@ -579,7 +574,7 @@ bool RsTlvKeySignatureSet::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
|
||||||
if(!keySignSet.empty())
|
if(!keySignSet.empty())
|
||||||
{
|
{
|
||||||
std::map<SignType, RsTlvKeySignature>::iterator it;
|
std::map<SignType, RsTlvKeySignature>::const_iterator it;
|
||||||
|
|
||||||
for(it = keySignSet.begin(); it != keySignSet.end() ; ++it)
|
for(it = keySignSet.begin(); it != keySignSet.end() ; ++it)
|
||||||
{
|
{
|
||||||
|
@ -674,10 +669,10 @@ bool RsTlvKeySignatureSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTlvKeySignatureSet::TlvSize()
|
uint32_t RsTlvKeySignatureSet::TlvSize() const
|
||||||
{
|
{
|
||||||
uint32_t s = TLV_HEADER_SIZE; // header size
|
uint32_t s = TLV_HEADER_SIZE; // header size
|
||||||
std::map<SignType, RsTlvKeySignature>::iterator it;
|
std::map<SignType, RsTlvKeySignature>::const_iterator it;
|
||||||
|
|
||||||
for(it = keySignSet.begin(); it != keySignSet.end() ; ++it)
|
for(it = keySignSet.begin(); it != keySignSet.end() ; ++it)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#ifndef RS_TLV_KEY_TYPES_H
|
#pragma once
|
||||||
#define RS_TLV_KEY_TYPES_H
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libretroshare/src/serialiser: rstlvkeys.h
|
* libretroshare/src/serialiser: rstlvkeys.h
|
||||||
|
@ -30,8 +29,10 @@
|
||||||
* These are the Compound TLV structures that must be (un)packed.
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
******************************************************************/
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "serialiser/rstlvbinary.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "serialiser/rstlvtypes.h"
|
|
||||||
|
|
||||||
const uint32_t RSTLV_KEY_TYPE_MASK = 0x000f;
|
const uint32_t RSTLV_KEY_TYPE_MASK = 0x000f;
|
||||||
const uint32_t RSTLV_KEY_DISTRIB_MASK = 0x00f0;
|
const uint32_t RSTLV_KEY_DISTRIB_MASK = 0x00f0;
|
||||||
|
@ -49,11 +50,11 @@ class RsTlvSecurityKey: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvSecurityKey();
|
RsTlvSecurityKey();
|
||||||
virtual ~RsTlvSecurityKey() { return; }
|
virtual ~RsTlvSecurityKey() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
/* clears KeyData - but doesn't delete - to transfer ownership */
|
/* clears KeyData - but doesn't delete - to transfer ownership */
|
||||||
void ShallowClear();
|
void ShallowClear();
|
||||||
|
@ -70,11 +71,11 @@ class RsTlvSecurityKeySet: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvSecurityKeySet() { return; }
|
RsTlvSecurityKeySet() { return; }
|
||||||
virtual ~RsTlvSecurityKeySet() { return; }
|
virtual ~RsTlvSecurityKeySet() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
std::string groupId; // Mandatory :
|
std::string groupId; // Mandatory :
|
||||||
std::map<std::string, RsTlvSecurityKey> keys; // Mandatory :
|
std::map<std::string, RsTlvSecurityKey> keys; // Mandatory :
|
||||||
|
@ -86,11 +87,11 @@ class RsTlvKeySignature: public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvKeySignature();
|
RsTlvKeySignature();
|
||||||
virtual ~RsTlvKeySignature() { return; }
|
virtual ~RsTlvKeySignature() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
void ShallowClear(); /* clears signData - but doesn't delete */
|
void ShallowClear(); /* clears signData - but doesn't delete */
|
||||||
|
|
||||||
|
@ -106,15 +107,13 @@ class RsTlvKeySignatureSet : public RsTlvItem
|
||||||
public:
|
public:
|
||||||
RsTlvKeySignatureSet();
|
RsTlvKeySignatureSet();
|
||||||
virtual ~RsTlvKeySignatureSet() { return; }
|
virtual ~RsTlvKeySignatureSet() { return; }
|
||||||
virtual uint32_t TlvSize();
|
virtual uint32_t TlvSize() const;
|
||||||
virtual void TlvClear();
|
virtual void TlvClear();
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
std::map<SignType, RsTlvKeySignature> keySignSet; // mandatory
|
std::map<SignType, RsTlvKeySignature> keySignSet; // mandatory
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -1,291 +1,301 @@
|
||||||
/*
|
|
||||||
* libretroshare/src/serialiser: rstlvkvwide.cc
|
/*
|
||||||
*
|
* libretroshare/src/serialiser: rstlvtypes.cc
|
||||||
* RetroShare Serialiser.
|
*
|
||||||
*
|
* RetroShare Serialiser.
|
||||||
* Copyright 2007-2008 by Chris Parker
|
*
|
||||||
*
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
* This library is free software; you can redistribute it and/or
|
*
|
||||||
* modify it under the terms of the GNU Library General Public
|
* This library is free software; you can redistribute it and/or
|
||||||
* License Version 2 as published by the Free Software Foundation.
|
* 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
|
* This library is distributed in the hope that it will be useful,
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* Library General Public License for more details.
|
* 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
|
* You should have received a copy of the GNU Library General Public
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
* License along with this library; if not, write to the Free Software
|
||||||
* USA.
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
*
|
* USA.
|
||||||
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
*
|
||||||
*
|
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
||||||
*/
|
*
|
||||||
|
*/
|
||||||
#include "rstlvbase.h"
|
|
||||||
#include "rstlvkvwide.h"
|
#include "rstlvkeyvalue.h"
|
||||||
#include "rsbaseserial.h"
|
#include "rstlvbase.h"
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
#define TLV_DEBUG 1
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
|
||||||
|
void RsTlvKeyValue::TlvClear()
|
||||||
|
{
|
||||||
void RsTlvKeyValueWide::TlvClear()
|
key = "";
|
||||||
{
|
value = "";
|
||||||
wKey.clear();
|
}
|
||||||
wValue.clear();
|
|
||||||
}
|
uint32_t RsTlvKeyValue::TlvSize() const
|
||||||
|
{
|
||||||
uint32_t RsTlvKeyValueWide::TlvSize()
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
{
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header size */
|
/* now add comment and title length of this tlv object */
|
||||||
s += GetTlvWideStringSize(wKey);
|
|
||||||
s += GetTlvWideStringSize(wValue);
|
if (key.length() > 0)
|
||||||
|
s += GetTlvStringSize(key);
|
||||||
return s;
|
if (value.length() > 0)
|
||||||
}
|
s += GetTlvStringSize(value);
|
||||||
|
|
||||||
std::ostream &RsTlvKeyValueWide::print(std::ostream &out, uint16_t indent)
|
return s;
|
||||||
{
|
|
||||||
printBase(out, "RsTlvKeyValueWide", indent);
|
}
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
std::string cnv_str(wKey.begin(), wKey.end()); // to convert to string
|
bool RsTlvKeyValue::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
|
{
|
||||||
printIndent(out, int_Indent);
|
/* must check sizes */
|
||||||
out << "wKey:" << cnv_str;
|
uint32_t tlvsize = TlvSize();
|
||||||
cnv_str.clear();
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
cnv_str.assign(wValue.begin(), wValue.end());
|
|
||||||
printIndent(out, int_Indent);
|
if (size < tlvend)
|
||||||
out << "wValue:" << cnv_str;
|
return false; /* not enough space */
|
||||||
out << std::endl;
|
|
||||||
|
bool ok = true;
|
||||||
printEnd(out, "RsTlvKeyValuewide", indent);
|
|
||||||
return out;
|
/* start at data[offset] */
|
||||||
}
|
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_KEYVALUE, tlvsize);
|
||||||
|
|
||||||
bool RsTlvKeyValueWide::SetTlv(void *data, uint32_t size, uint32_t *offset)
|
|
||||||
{
|
|
||||||
|
/* now optional ones */
|
||||||
/* must check sizes */
|
if (key.length() > 0)
|
||||||
uint32_t tlvsize = TlvSize();
|
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_KEY, key); // no base tlv type for title?
|
||||||
uint32_t tlvend = *offset + tlvsize;
|
if (value.length() > 0)
|
||||||
|
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_VALUE, value); // no base tlv type for comment?
|
||||||
if (size < tlvend)
|
|
||||||
return false; /* not enough space */
|
return ok;
|
||||||
|
|
||||||
bool ok = true;
|
}
|
||||||
|
|
||||||
/* start at data[offset] */
|
bool RsTlvKeyValue::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_WKEYVALUE, tlvsize);
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
/* now optional ones */
|
uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
if (wKey.length() > 0)
|
uint32_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) );
|
||||||
ok &= SetTlvWideString(data, tlvend, offset, TLV_TYPE_WSTR_KEY, wKey); // no base tlv type for title?
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
if (wValue.length() > 0)
|
|
||||||
ok &= SetTlvWideString(data, tlvend, offset, TLV_TYPE_WSTR_VALUE, wValue); // no base tlv type for comment?
|
if (size < tlvend) /* check size */
|
||||||
|
return false; /* not enough space */
|
||||||
return ok;
|
|
||||||
}
|
if (tlvtype != TLV_TYPE_KEYVALUE) /* check type */
|
||||||
|
return false;
|
||||||
bool RsTlvKeyValueWide::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|
||||||
{
|
bool ok = true;
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
uint16_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) );
|
/* skip the header */
|
||||||
uint32_t tlvend = *offset + tlvsize;
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
if (size < tlvend) /* check size */
|
/* while there is TLV */
|
||||||
return false; /* not enough space */
|
while((*offset) + 2 < tlvend)
|
||||||
|
{
|
||||||
if (tlvtype != TLV_TYPE_WKEYVALUE ) /* check type */
|
/* get the next type */
|
||||||
return false;
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
|
|
||||||
bool ok = true;
|
switch(tlvsubtype)
|
||||||
|
{
|
||||||
/* ready to load */
|
case TLV_TYPE_STR_KEY:
|
||||||
TlvClear();
|
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_KEY, key);
|
||||||
|
break;
|
||||||
/* skip the header */
|
case TLV_TYPE_STR_VALUE:
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_VALUE, value);
|
||||||
|
break;
|
||||||
/* while there is TLV */
|
default:
|
||||||
while((*offset) + 2 < tlvend)
|
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||||
{
|
break;
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
}
|
||||||
|
|
||||||
switch(tlvsubtype)
|
if (!ok)
|
||||||
{
|
{
|
||||||
case TLV_TYPE_WSTR_KEY:
|
break;
|
||||||
ok &= GetTlvWideString(data, tlvend, offset, TLV_TYPE_WSTR_KEY, wKey);
|
}
|
||||||
break;
|
}
|
||||||
case TLV_TYPE_WSTR_VALUE:
|
|
||||||
ok &= GetTlvWideString(data, tlvend, offset, TLV_TYPE_WSTR_VALUE, wValue);
|
|
||||||
break;
|
/***************************************************************************
|
||||||
default:
|
* NB: extra components could be added (for future expansion of the type).
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
* or be present (if this code is reading an extended version).
|
||||||
break;
|
*
|
||||||
|
* We must chew up the extra characters to conform with TLV specifications
|
||||||
}
|
***************************************************************************/
|
||||||
|
if (*offset != tlvend)
|
||||||
if (!ok)
|
{
|
||||||
{
|
#ifdef TLV_DEBUG
|
||||||
break;
|
std::cerr << "RsTlvKeyValue::GetTlv() Warning extra bytes at end of item";
|
||||||
}
|
std::cerr << std::endl;
|
||||||
}
|
#endif
|
||||||
|
*offset = tlvend;
|
||||||
/***************************************************************************
|
}
|
||||||
* NB: extra components could be added (for future expansion of the type).
|
|
||||||
* or be present (if this code is reading an extended version).
|
return ok;
|
||||||
*
|
|
||||||
* We must chew up the extra characters to conform with TLV specifications
|
}
|
||||||
***************************************************************************/
|
|
||||||
if (*offset != tlvend)
|
std::ostream &RsTlvKeyValue::print(std::ostream &out, uint16_t indent) const
|
||||||
{
|
{
|
||||||
#ifdef TLV_DEBUG
|
printBase(out, "RsTlvKeyValue", indent);
|
||||||
std::cerr << "RsTlvKeyValueWide::GetTlv() Warning extra bytes at end of item";
|
uint16_t int_Indent = indent + 2;
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
printIndent(out, int_Indent);
|
||||||
*offset = tlvend;
|
out << "Key:" << key;
|
||||||
}
|
printIndent(out, int_Indent);
|
||||||
|
out << "Value:" << value;
|
||||||
return ok;
|
out << std::endl;
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************* Wide Key Value set *************************************/
|
printEnd(out, "RsTlvKeyValue", indent);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
void RsTlvKeyValueWideSet::TlvClear()
|
|
||||||
{
|
/************************************* RsTlvKeyValueSet ************************************/
|
||||||
wPairs.clear();
|
|
||||||
}
|
void RsTlvKeyValueSet::TlvClear()
|
||||||
|
{
|
||||||
uint32_t RsTlvKeyValueWideSet::TlvSize()
|
pairs.clear(); //empty list
|
||||||
{
|
}
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header size */
|
|
||||||
|
uint32_t RsTlvKeyValueSet::TlvSize() const
|
||||||
std::list<RsTlvKeyValueWide>::iterator it;
|
{
|
||||||
|
|
||||||
for(it = wPairs.begin(); it != wPairs.end(); it++)
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
{
|
|
||||||
s += it->TlvSize();
|
std::list<RsTlvKeyValue>::const_iterator it;
|
||||||
}
|
|
||||||
|
if(!pairs.empty())
|
||||||
return s;
|
{
|
||||||
}
|
|
||||||
|
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
||||||
std::ostream &RsTlvKeyValueWideSet::print(std::ostream &out, uint16_t indent)
|
s += it->TlvSize();
|
||||||
{
|
|
||||||
printBase(out, "RsTlvKeyValueWide", indent);
|
}
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
return s;
|
||||||
std::list<RsTlvKeyValueWide>::iterator it;
|
}
|
||||||
|
|
||||||
for(it = wPairs.begin(); it != wPairs.end(); it++)
|
bool RsTlvKeyValueSet::SetTlv(void *data, uint32_t size, uint32_t *offset) const
|
||||||
{
|
{
|
||||||
it->print(out, int_Indent);
|
/* must check sizes */
|
||||||
}
|
uint32_t tlvsize = TlvSize();
|
||||||
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
printEnd(out, "RsTlvKeyValuewide", indent);
|
|
||||||
return out;
|
if (size < tlvend)
|
||||||
}
|
return false; /* not enough space */
|
||||||
|
|
||||||
bool RsTlvKeyValueWideSet::SetTlv(void *data, uint32_t size, uint32_t* offset)
|
bool ok = true;
|
||||||
{
|
|
||||||
|
/* start at data[offset] */
|
||||||
/* must check sizes */
|
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_KEYVALUESET , tlvsize);
|
||||||
uint32_t tlvsize = TlvSize();
|
|
||||||
uint32_t tlvend = *offset + tlvsize;
|
|
||||||
|
if(!pairs.empty())
|
||||||
if (size < tlvend)
|
{
|
||||||
return false; /* not enough space */
|
std::list<RsTlvKeyValue>::const_iterator it;
|
||||||
|
|
||||||
bool ok = true;
|
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
||||||
|
ok &= it->SetTlv(data, size, offset);
|
||||||
/* start at data[offset] */
|
}
|
||||||
ok &= SetTlvBase(data, tlvend, offset, TLV_TYPE_WKEYVALUESET, tlvsize);
|
|
||||||
std::list<RsTlvKeyValueWide>::iterator it;
|
|
||||||
|
return ok;
|
||||||
for(it = wPairs.begin(); it != wPairs.end(); it++)
|
|
||||||
{
|
}
|
||||||
ok &= it->SetTlv(data, size, offset);
|
|
||||||
}
|
|
||||||
|
bool RsTlvKeyValueSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
return ok;
|
{
|
||||||
}
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
bool RsTlvKeyValueWideSet::GetTlv(void *data, uint32_t size, uint32_t* offset)
|
|
||||||
{
|
uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
uint32_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) );
|
||||||
return false;
|
uint32_t tlvend = *offset + tlvsize;
|
||||||
|
|
||||||
uint16_t tlvtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
if (size < tlvend) /* check size */
|
||||||
uint16_t tlvsize = GetTlvSize( &(((uint8_t *) data)[*offset]) );
|
return false; /* not enough space */
|
||||||
uint32_t tlvend = *offset + tlvsize;
|
|
||||||
|
if (tlvtype != TLV_TYPE_KEYVALUESET) /* check type */
|
||||||
if (size < tlvend) /* check size */
|
return false;
|
||||||
return false; /* not enough space */
|
|
||||||
|
bool ok = true;
|
||||||
if (tlvtype != TLV_TYPE_WKEYVALUESET) /* check type */
|
|
||||||
return false;
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
bool ok = true;
|
|
||||||
|
/* skip the header */
|
||||||
/* ready to load */
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
TlvClear();
|
|
||||||
|
/* while there is TLV */
|
||||||
/* skip the header */
|
while((*offset) + 2 < tlvend)
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
{
|
||||||
|
/* get the next type */
|
||||||
/* while there is TLV */
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
switch(tlvsubtype)
|
||||||
/* get the next type */
|
{
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
case TLV_TYPE_KEYVALUE:
|
||||||
|
{
|
||||||
switch(tlvsubtype)
|
RsTlvKeyValue kv;
|
||||||
{
|
ok &= kv.GetTlv(data, size, offset);
|
||||||
case TLV_TYPE_WKEYVALUE:
|
if (ok)
|
||||||
{
|
{
|
||||||
RsTlvKeyValueWide kv;
|
pairs.push_back(kv);
|
||||||
ok &= kv.GetTlv(data, size, offset);
|
}
|
||||||
if (ok)
|
}
|
||||||
{
|
break;
|
||||||
wPairs.push_back(kv);
|
default:
|
||||||
}
|
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
default:
|
}
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
break;
|
if (!ok)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ok)
|
/***************************************************************************
|
||||||
break;
|
* 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
|
||||||
/***************************************************************************
|
***************************************************************************/
|
||||||
* NB: extra components could be added (for future expansion of the type).
|
if (*offset != tlvend)
|
||||||
* or be present (if this code is reading an extended version).
|
{
|
||||||
*
|
#ifdef TLV_DEBUG
|
||||||
* We must chew up the extra characters to conform with TLV specifications
|
std::cerr << "RsTlvKeyValueSet::GetTlv() Warning extra bytes at end of item";
|
||||||
***************************************************************************/
|
std::cerr << std::endl;
|
||||||
if (*offset != tlvend)
|
#endif
|
||||||
{
|
*offset = tlvend;
|
||||||
#ifdef TLV_DEBUG
|
}
|
||||||
std::cerr << "RsTlvBinaryData::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
return ok;
|
||||||
#endif
|
}
|
||||||
*offset = tlvend;
|
|
||||||
}
|
/// prints out contents of RsTlvKeyValueSet
|
||||||
|
std::ostream &RsTlvKeyValueSet::print(std::ostream &out, uint16_t indent) const
|
||||||
return ok;
|
{
|
||||||
}
|
printBase(out, "RsTlvKeyValue", indent);
|
||||||
|
|
||||||
|
std::list<RsTlvKeyValue>::const_iterator it;
|
||||||
|
|
||||||
|
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
||||||
|
it->print(out, indent);
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvKeyValue", indent);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
66
libretroshare/src/serialiser/rstlvkeyvalue.h
Normal file
66
libretroshare/src/serialiser/rstlvkeyvalue.h
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvkeyvalue.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
class RsTlvKeyValue: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvKeyValue() { return; }
|
||||||
|
RsTlvKeyValue(const std::string& k,const std::string& v): key(k),value(v) {}
|
||||||
|
virtual ~RsTlvKeyValue() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
std::string key; /// Mandatory : For use in hash tables
|
||||||
|
std::string value; /// Mandatory : For use in hash tables
|
||||||
|
};
|
||||||
|
|
||||||
|
class RsTlvKeyValueSet: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvKeyValueSet() { return; }
|
||||||
|
virtual ~RsTlvKeyValueSet() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
std::list<RsTlvKeyValue> pairs; /// For use in hash tables
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
#ifndef RSTLVKVWIDE_H_
|
|
||||||
#define RSTLVKVWIDE_H_
|
|
||||||
|
|
||||||
/*
|
|
||||||
* libretroshare/src/serialiser: rstlvkvwide.h
|
|
||||||
*
|
|
||||||
* RetroShare Serialiser.
|
|
||||||
*
|
|
||||||
* Copyright 2007-2008 by Chris Parker
|
|
||||||
*
|
|
||||||
* 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 "rstlvtypes.h"
|
|
||||||
|
|
||||||
class RsTlvKeyValueWide: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RsTlvKeyValueWide() { return;}
|
|
||||||
virtual ~RsTlvKeyValueWide() { return;}
|
|
||||||
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset);
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::wstring wKey;
|
|
||||||
std::wstring wValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvKeyValueWideSet : public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RsTlvKeyValueWideSet() { return;}
|
|
||||||
virtual ~RsTlvKeyValueWideSet() { return; }
|
|
||||||
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset);
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::list<RsTlvKeyValueWide> wPairs;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif /*RSTLVKVWIDE_H_*/
|
|
129
libretroshare/src/serialiser/rstlvlist.h
Normal file
129
libretroshare/src/serialiser/rstlvlist.h
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvlist.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2014 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 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 "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
template<class TLV_CLASS,uint32_t TLV_TYPE> class t_RsTlvList: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
t_RsTlvList() {}
|
||||||
|
virtual ~t_RsTlvList() {}
|
||||||
|
|
||||||
|
virtual uint32_t TlvSize() const
|
||||||
|
{
|
||||||
|
uint32_t size = TLV_HEADER_SIZE;
|
||||||
|
typename std::list<TLV_CLASS>::const_iterator it;
|
||||||
|
for(it = mList.begin();it != mList.end(); ++it)
|
||||||
|
{
|
||||||
|
size += it->TlvSize();
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
virtual void TlvClear(){ mList.clear(); }
|
||||||
|
virtual bool 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, TLV_TYPE, tlvsize);
|
||||||
|
|
||||||
|
typename std::list<TLV_CLASS>::const_iterator it;
|
||||||
|
for(it = mList.begin();it != mList.end(); ++it)
|
||||||
|
{
|
||||||
|
ok &= it->SetTlv(data,tlvsize,offset) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok ;
|
||||||
|
}
|
||||||
|
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE) /* check type */
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
/* while there is TLV : 2 (type) + 4 (len) */
|
||||||
|
while(ok && ((*offset) + 6 < tlvend))
|
||||||
|
{
|
||||||
|
TLV_CLASS item;
|
||||||
|
ok &= item.GetTlv(data,size,offset);
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
mList.push_back(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(*offset != tlvend)
|
||||||
|
{
|
||||||
|
std::cerr << "(EE) deserialisation error in " << __PRETTY_FUNCTION__ << std::endl;
|
||||||
|
}
|
||||||
|
return *offset == tlvend ;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::ostream &print(std::ostream &out, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printBase(out, "Template TlvList", indent);
|
||||||
|
typename std::list<TLV_CLASS>::const_iterator it;
|
||||||
|
for(it = mList.begin();it != mList.end(); ++it)
|
||||||
|
{
|
||||||
|
it->print(out, indent + 2) ;
|
||||||
|
}
|
||||||
|
printEnd(out, "Template TlvList", indent);
|
||||||
|
return out ;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::list<TLV_CLASS> mList;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,11 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if 0
|
||||||
#include "serialiser/rstlvgenericmaps.h"
|
#include "serialiser/rstlvgenericmaps.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class RsTlvOpinionMapRef: public RsTlvGenericMapRef<std::string, uint32_t>
|
class RsTlvOpinionMapRef: public RsTlvGenericMapRef<std::string, uint32_t>
|
||||||
{
|
{
|
||||||
|
|
376
libretroshare/src/serialiser/rstlvstring.cc
Normal file
376
libretroshare/src/serialiser/rstlvstring.cc
Normal file
|
@ -0,0 +1,376 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvstring.cc
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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 "serialiser/rstlvstring.h"
|
||||||
|
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "util/rsprint.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#define TLV_DEBUG 1
|
||||||
|
|
||||||
|
/************************************* Peer Id Set ************************************/
|
||||||
|
|
||||||
|
|
||||||
|
RsTlvStringSet::RsTlvStringSet(uint16_t type) :mType(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvStringSet::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, mType , tlvsize);
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (it->length() > 0)
|
||||||
|
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, *it);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void RsTlvStringSet::TlvClear()
|
||||||
|
{
|
||||||
|
ids.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RsTlvStringSet::TlvSize() const
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (it->length() > 0)
|
||||||
|
s += GetTlvStringSize(*it);
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvStringSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint16_t tlvtype = 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 (tlvtype != mType) /* check type */
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* while there is TLV */
|
||||||
|
while((*offset) + 2 < tlvend)
|
||||||
|
{
|
||||||
|
/* get the next type */
|
||||||
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
|
|
||||||
|
if (tlvsubtype == TLV_TYPE_STR_GENID)
|
||||||
|
{
|
||||||
|
std::string newIds;
|
||||||
|
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, newIds);
|
||||||
|
if(ok)
|
||||||
|
{
|
||||||
|
ids.push_back(newIds);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Step past unknown TLV TYPE */
|
||||||
|
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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 << "RsTlvPeerIdSet::GetTlv() Warning extra bytes at end of item";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
*offset = tlvend;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// print to screen RsTlvStringSet contents
|
||||||
|
std::ostream &RsTlvStringSet::print(std::ostream &out, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printBase(out, "RsTlvStringSet", indent);
|
||||||
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "type:" << mType;
|
||||||
|
out << std::endl;
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "id:" << *it;
|
||||||
|
out << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvStringSet", indent);
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// print to screen RsTlvStringSet contents
|
||||||
|
std::ostream &RsTlvStringSet::printHex(std::ostream &out, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printBase(out, "RsTlvStringSet", indent);
|
||||||
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "type:" << mType;
|
||||||
|
out << std::endl;
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "id: 0x" << RsUtil::BinToHex(*it);
|
||||||
|
out << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvStringSet", indent);
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/************************************* String Set Ref ************************************/
|
||||||
|
/* This is exactly the same as StringSet, but it uses an alternative list.
|
||||||
|
*/
|
||||||
|
RsTlvStringSetRef::RsTlvStringSetRef(uint16_t type, std::list<std::string> &refids)
|
||||||
|
:mType(type), ids(refids)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void RsTlvStringSetRef::TlvClear()
|
||||||
|
{
|
||||||
|
ids.clear();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t RsTlvStringSetRef::TlvSize() const
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32_t s = TLV_HEADER_SIZE; /* header */
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (it->length() > 0)
|
||||||
|
s += GetTlvStringSize(*it);
|
||||||
|
}
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvStringSetRef::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, mType , tlvsize);
|
||||||
|
|
||||||
|
/* determine the total size of ids strings in list */
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
if (it->length() > 0)
|
||||||
|
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, *it);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool RsTlvStringSetRef::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||||
|
{
|
||||||
|
if (size < *offset + TLV_HEADER_SIZE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
uint16_t tlvtype = 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 (tlvtype != mType) /* check type */
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
|
||||||
|
/* ready to load */
|
||||||
|
TlvClear();
|
||||||
|
|
||||||
|
/* skip the header */
|
||||||
|
(*offset) += TLV_HEADER_SIZE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* while there is TLV */
|
||||||
|
while((*offset) + 2 < tlvend)
|
||||||
|
{
|
||||||
|
/* get the next type */
|
||||||
|
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||||
|
|
||||||
|
if (tlvsubtype == TLV_TYPE_STR_GENID)
|
||||||
|
{
|
||||||
|
std::string newIds;
|
||||||
|
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, newIds);
|
||||||
|
if(ok)
|
||||||
|
{
|
||||||
|
ids.push_back(newIds);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Step past unknown TLV TYPE */
|
||||||
|
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* 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 << "RsTlvPeerIdSetRef::GetTlv() Warning extra bytes at end of item";
|
||||||
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
*offset = tlvend;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// print to screen RsTlvStringSet contents
|
||||||
|
std::ostream &RsTlvStringSetRef::print(std::ostream &out, uint16_t indent) const
|
||||||
|
{
|
||||||
|
printBase(out, "RsTlvStringSetRef", indent);
|
||||||
|
uint16_t int_Indent = indent + 2;
|
||||||
|
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "type:" << mType;
|
||||||
|
out << std::endl;
|
||||||
|
|
||||||
|
std::list<std::string>::const_iterator it;
|
||||||
|
for(it = ids.begin(); it != ids.end() ; ++it)
|
||||||
|
{
|
||||||
|
printIndent(out, int_Indent);
|
||||||
|
out << "id:" << *it;
|
||||||
|
out << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
printEnd(out, "RsTlvStringSetRef", indent);
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
68
libretroshare/src/serialiser/rstlvstring.h
Normal file
68
libretroshare/src/serialiser/rstlvstring.h
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
* libretroshare/src/serialiser: rstlvstring.h
|
||||||
|
*
|
||||||
|
* RetroShare Serialiser.
|
||||||
|
*
|
||||||
|
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
||||||
|
*
|
||||||
|
* 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".
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* These are the Compound TLV structures that must be (un)packed.
|
||||||
|
*
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
class RsTlvStringSet: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvStringSet(uint16_t type);
|
||||||
|
virtual ~RsTlvStringSet() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
virtual std::ostream &printHex(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
uint16_t mType;
|
||||||
|
std::list<std::string> ids; /* Mandatory */
|
||||||
|
};
|
||||||
|
|
||||||
|
class RsTlvStringSetRef: public RsTlvItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RsTlvStringSetRef(uint16_t type, std::list<std::string> &refids);
|
||||||
|
virtual ~RsTlvStringSetRef() { 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 std::ostream &print(std::ostream &out, uint16_t indent) const;
|
||||||
|
|
||||||
|
uint16_t mType;
|
||||||
|
std::list<std::string> &ids; /* Mandatory */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,997 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
* libretroshare/src/serialiser: rstlvtypes.cc
|
|
||||||
*
|
|
||||||
* RetroShare Serialiser.
|
|
||||||
*
|
|
||||||
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
|
||||||
*
|
|
||||||
* 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 "rstlvbase.h"
|
|
||||||
#include "rstlvtypes.h"
|
|
||||||
#include "rsbaseserial.h"
|
|
||||||
#include "util/rsprint.h"
|
|
||||||
#include <ostream>
|
|
||||||
#include <sstream>
|
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#define TLV_DEBUG 1
|
|
||||||
|
|
||||||
void RsTlvItem::TlvShallowClear()
|
|
||||||
{
|
|
||||||
TlvClear(); /* unless overloaded! */
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &RsTlvItem::printBase(std::ostream &out, std::string clsName, uint16_t indent)
|
|
||||||
{
|
|
||||||
printIndent(out, indent);
|
|
||||||
out << "RsTlvItem: " << clsName << " Size: " << TlvSize() << " ***********************";
|
|
||||||
out << std::endl;
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &RsTlvItem::printEnd(std::ostream &out, std::string clsName, uint16_t indent)
|
|
||||||
{
|
|
||||||
printIndent(out, indent);
|
|
||||||
out << "********************** " << clsName << " *********************";
|
|
||||||
out << std::endl;
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &printIndent(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
for(int i = 0; i < indent; i++)
|
|
||||||
{
|
|
||||||
out << " ";
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!********************************** RsTlvFileBinaryData **********************************/
|
|
||||||
|
|
||||||
|
|
||||||
RsTlvBinaryData::RsTlvBinaryData(uint16_t t)
|
|
||||||
:tlvtype(t), bin_len(0), bin_data(NULL)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RsTlvBinaryData::RsTlvBinaryData(const RsTlvBinaryData &b)
|
|
||||||
: tlvtype(b.tlvtype), bin_len(0) , bin_data(NULL) {
|
|
||||||
|
|
||||||
setBinData(b.bin_data, b.bin_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
RsTlvBinaryData::~RsTlvBinaryData()
|
|
||||||
{
|
|
||||||
TlvClear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsTlvBinaryData::operator =(const RsTlvBinaryData& b){
|
|
||||||
|
|
||||||
setBinData(b.bin_data, b.bin_len);
|
|
||||||
tlvtype = b.tlvtype;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// used to allocate memory andinitialize binary data member
|
|
||||||
bool RsTlvBinaryData::setBinData(const void *data, uint32_t size)
|
|
||||||
{
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* get mandatory */
|
|
||||||
/* the rest of the TLV size binary data */
|
|
||||||
bin_len = size;
|
|
||||||
if (bin_len == 0)
|
|
||||||
{
|
|
||||||
bin_data = NULL;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bin_data = malloc(bin_len);
|
|
||||||
memcpy(bin_data, data, bin_len);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsTlvBinaryData::TlvClear()
|
|
||||||
{
|
|
||||||
if (bin_data)
|
|
||||||
{
|
|
||||||
free(bin_data);
|
|
||||||
}
|
|
||||||
TlvShallowClear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsTlvBinaryData::TlvShallowClear()
|
|
||||||
{
|
|
||||||
bin_data = NULL;
|
|
||||||
bin_len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvBinaryData::TlvSize()
|
|
||||||
{
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
if (bin_data != NULL)
|
|
||||||
s += bin_len; // len is the size of data
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvBinaryData::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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 (bin_data != NULL && bin_len > 0)
|
|
||||||
{
|
|
||||||
memcpy(&(((uint8_t *) data)[*offset]), bin_data, bin_len);
|
|
||||||
*offset += bin_len;
|
|
||||||
}
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvBinaryData::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
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;
|
|
||||||
|
|
||||||
bool ok = setBinData(&(((uint8_t *) data)[*offset]), tlvsize - TLV_HEADER_SIZE);
|
|
||||||
(*offset) += bin_len;
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &RsTlvBinaryData::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
uint32_t i;
|
|
||||||
std::ostringstream sout;
|
|
||||||
printIndent(sout, indent);
|
|
||||||
sout << "RsTlvBinaryData: Type: " << tlvtype << " Size: " << bin_len;
|
|
||||||
sout << std::hex;
|
|
||||||
|
|
||||||
for(i = 0; i < bin_len; i++)
|
|
||||||
{
|
|
||||||
if (i % 16 == 0)
|
|
||||||
{
|
|
||||||
sout << std::endl;
|
|
||||||
printIndent(sout, int_Indent);
|
|
||||||
}
|
|
||||||
sout << std::setw(2) << std::setfill('0')
|
|
||||||
<< (int) (((unsigned char *) bin_data)[i]) << ":";
|
|
||||||
}
|
|
||||||
|
|
||||||
sout << std::endl;
|
|
||||||
out << sout.str();
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvBinaryData", indent);
|
|
||||||
return out;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************* Peer Id Set ************************************/
|
|
||||||
|
|
||||||
|
|
||||||
RsTlvStringSet::RsTlvStringSet(uint16_t type) :mType(type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvStringSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, mType , tlvsize);
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (it->length() > 0)
|
|
||||||
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, *it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RsTlvStringSet::TlvClear()
|
|
||||||
{
|
|
||||||
ids.clear();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvStringSet::TlvSize()
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (it->length() > 0)
|
|
||||||
s += GetTlvStringSize(*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvStringSet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != mType) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
if (tlvsubtype == TLV_TYPE_STR_GENID)
|
|
||||||
{
|
|
||||||
std::string newIds;
|
|
||||||
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, newIds);
|
|
||||||
if(ok)
|
|
||||||
{
|
|
||||||
ids.push_back(newIds);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Step past unknown TLV TYPE */
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvPeerIdSet::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// print to screen RsTlvStringSet contents
|
|
||||||
std::ostream &RsTlvStringSet::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvStringSet", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "type:" << mType;
|
|
||||||
out << std::endl;
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "id:" << *it;
|
|
||||||
out << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvStringSet", indent);
|
|
||||||
return out;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// print to screen RsTlvStringSet contents
|
|
||||||
std::ostream &RsTlvStringSet::printHex(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvStringSet", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "type:" << mType;
|
|
||||||
out << std::endl;
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "id: 0x" << RsUtil::BinToHex(*it);
|
|
||||||
out << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvStringSet", indent);
|
|
||||||
return out;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************* String Set Ref ************************************/
|
|
||||||
/* This is exactly the same as StringSet, but it uses an alternative list.
|
|
||||||
*/
|
|
||||||
RsTlvStringSetRef::RsTlvStringSetRef(uint16_t type, std::list<std::string> &refids)
|
|
||||||
:mType(type), ids(refids)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void RsTlvStringSetRef::TlvClear()
|
|
||||||
{
|
|
||||||
ids.clear();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvStringSetRef::TlvSize()
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (it->length() > 0)
|
|
||||||
s += GetTlvStringSize(*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvStringSetRef::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, mType , tlvsize);
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (it->length() > 0)
|
|
||||||
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, *it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvStringSetRef::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != mType) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
if (tlvsubtype == TLV_TYPE_STR_GENID)
|
|
||||||
{
|
|
||||||
std::string newIds;
|
|
||||||
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_GENID, newIds);
|
|
||||||
if(ok)
|
|
||||||
{
|
|
||||||
ids.push_back(newIds);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Step past unknown TLV TYPE */
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvPeerIdSetRef::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// print to screen RsTlvStringSet contents
|
|
||||||
std::ostream &RsTlvStringSetRef::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvStringSetRef", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "type:" << mType;
|
|
||||||
out << std::endl;
|
|
||||||
|
|
||||||
std::list<std::string>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "id:" << *it;
|
|
||||||
out << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvStringSetRef", indent);
|
|
||||||
return out;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************* Service Id Set ************************************/
|
|
||||||
|
|
||||||
void RsTlvServiceIdSet::TlvClear()
|
|
||||||
{
|
|
||||||
ids.clear();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvServiceIdSet::TlvSize()
|
|
||||||
{
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
std::list<uint32_t>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (*it > 0)
|
|
||||||
s += GetTlvUInt32Size();
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvServiceIdSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, TLV_TYPE_SERVICESET , tlvsize);
|
|
||||||
|
|
||||||
/* determine the total size of ids strings in list */
|
|
||||||
std::list<uint32_t>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
if (*it > 0)
|
|
||||||
ok &= SetTlvUInt32(data, tlvend, offset, TLV_TYPE_UINT32_SERID, *it);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvServiceIdSet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE_SERVICESET) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
if (tlvsubtype == TLV_TYPE_UINT32_SERID)
|
|
||||||
{
|
|
||||||
uint32_t newIds;
|
|
||||||
ok &= GetTlvUInt32(data, tlvend, offset, TLV_TYPE_UINT32_SERID, &newIds);
|
|
||||||
if(ok)
|
|
||||||
{
|
|
||||||
ids.push_back(newIds);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Step past unknown TLV TYPE */
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvServiceIdSet::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// print to screen RsTlvServiceSet contents
|
|
||||||
std::ostream &RsTlvServiceIdSet::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvServiceIdSet", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
std::list<uint32_t>::iterator it;
|
|
||||||
for(it = ids.begin(); it != ids.end() ; ++it)
|
|
||||||
{
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "id:" << *it;
|
|
||||||
out << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvServiceIdSet", indent);
|
|
||||||
return out;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************* RsTlvKeyValue ************************************/
|
|
||||||
|
|
||||||
void RsTlvKeyValue::TlvClear()
|
|
||||||
{
|
|
||||||
key = "";
|
|
||||||
value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvKeyValue::TlvSize()
|
|
||||||
{
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
/* now add comment and title length of this tlv object */
|
|
||||||
|
|
||||||
if (key.length() > 0)
|
|
||||||
s += GetTlvStringSize(key);
|
|
||||||
if (value.length() > 0)
|
|
||||||
s += GetTlvStringSize(value);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvKeyValue::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, TLV_TYPE_KEYVALUE, tlvsize);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* now optional ones */
|
|
||||||
if (key.length() > 0)
|
|
||||||
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_KEY, key); // no base tlv type for title?
|
|
||||||
if (value.length() > 0)
|
|
||||||
ok &= SetTlvString(data, tlvend, offset, TLV_TYPE_STR_VALUE, value); // no base tlv type for comment?
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvKeyValue::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE_KEYVALUE) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
switch(tlvsubtype)
|
|
||||||
{
|
|
||||||
case TLV_TYPE_STR_KEY:
|
|
||||||
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_KEY, key);
|
|
||||||
break;
|
|
||||||
case TLV_TYPE_STR_VALUE:
|
|
||||||
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_VALUE, value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvKeyValue::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
std::ostream &RsTlvKeyValue::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvKeyValue", indent);
|
|
||||||
uint16_t int_Indent = indent + 2;
|
|
||||||
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "Key:" << key;
|
|
||||||
printIndent(out, int_Indent);
|
|
||||||
out << "Value:" << value;
|
|
||||||
out << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvKeyValue", indent);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/************************************* RsTlvKeyValueSet ************************************/
|
|
||||||
|
|
||||||
void RsTlvKeyValueSet::TlvClear()
|
|
||||||
{
|
|
||||||
pairs.clear(); //empty list
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t RsTlvKeyValueSet::TlvSize()
|
|
||||||
{
|
|
||||||
|
|
||||||
uint32_t s = TLV_HEADER_SIZE; /* header */
|
|
||||||
|
|
||||||
std::list<RsTlvKeyValue>::iterator it;
|
|
||||||
|
|
||||||
if(!pairs.empty())
|
|
||||||
{
|
|
||||||
|
|
||||||
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
|
||||||
s += it->TlvSize();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTlvKeyValueSet::SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
/* 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, TLV_TYPE_KEYVALUESET , tlvsize);
|
|
||||||
|
|
||||||
|
|
||||||
if(!pairs.empty())
|
|
||||||
{
|
|
||||||
std::list<RsTlvKeyValue>::iterator it;
|
|
||||||
|
|
||||||
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
|
||||||
ok &= it->SetTlv(data, size, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool RsTlvKeyValueSet::GetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE_KEYVALUESET) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
/* while there is TLV */
|
|
||||||
while((*offset) + 2 < tlvend)
|
|
||||||
{
|
|
||||||
/* get the next type */
|
|
||||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
|
||||||
|
|
||||||
switch(tlvsubtype)
|
|
||||||
{
|
|
||||||
case TLV_TYPE_KEYVALUE:
|
|
||||||
{
|
|
||||||
RsTlvKeyValue kv;
|
|
||||||
ok &= kv.GetTlv(data, size, offset);
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
pairs.push_back(kv);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ok)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* 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 << "RsTlvKeyValueSet::GetTlv() Warning extra bytes at end of item";
|
|
||||||
std::cerr << std::endl;
|
|
||||||
#endif
|
|
||||||
*offset = tlvend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// prints out contents of RsTlvKeyValueSet
|
|
||||||
std::ostream &RsTlvKeyValueSet::print(std::ostream &out, uint16_t indent)
|
|
||||||
{
|
|
||||||
printBase(out, "RsTlvKeyValue", indent);
|
|
||||||
|
|
||||||
std::list<RsTlvKeyValue>::iterator it;
|
|
||||||
|
|
||||||
for(it = pairs.begin(); it != pairs.end() ; ++it)
|
|
||||||
it->print(out, indent);
|
|
||||||
|
|
||||||
printEnd(out, "RsTlvKeyValue", indent);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,350 +0,0 @@
|
||||||
#ifndef RS_TLV_COMPOUND_TYPES_H
|
|
||||||
#define RS_TLV_COMPOUND_TYPES_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* libretroshare/src/serialiser: rstlvtypes.h
|
|
||||||
*
|
|
||||||
* RetroShare Serialiser.
|
|
||||||
*
|
|
||||||
* Copyright 2007-2008 by Robert Fernie, Chris Parker
|
|
||||||
*
|
|
||||||
* 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".
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*******************************************************************
|
|
||||||
* These are the Compound TLV structures that must be (un)packed.
|
|
||||||
*
|
|
||||||
******************************************************************/
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <list>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <retroshare/rstypes.h>
|
|
||||||
#include <serialiser/rstlvtypes.h>
|
|
||||||
#include <serialiser/rstlvbase.h>
|
|
||||||
#include <serialiser/rsbaseserial.h>
|
|
||||||
#include <retroshare/rsgxsifacetypes.h>
|
|
||||||
|
|
||||||
//! A base class for all tlv items
|
|
||||||
/*! This class is provided to allow the serialisation and deserialization of compund
|
|
||||||
tlv items
|
|
||||||
*/
|
|
||||||
class RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvItem() { return; }
|
|
||||||
virtual ~RsTlvItem() { return; }
|
|
||||||
virtual uint32_t TlvSize() = 0;
|
|
||||||
virtual void TlvClear() = 0;
|
|
||||||
virtual void TlvShallowClear(); /*! Don't delete allocated data */
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) = 0; /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset) = 0; /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent) = 0;
|
|
||||||
std::ostream &printBase(std::ostream &out, std::string clsName, uint16_t indent);
|
|
||||||
std::ostream &printEnd(std::ostream &out, std::string clsName, uint16_t indent);
|
|
||||||
};
|
|
||||||
|
|
||||||
std::ostream &printIndent(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
|
|
||||||
//! GENERIC Binary Data TLV
|
|
||||||
/*! Use to serialise and deserialise binary data, usually included in other compound tlvs
|
|
||||||
*/
|
|
||||||
class RsTlvBinaryData: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvBinaryData(uint16_t t);
|
|
||||||
RsTlvBinaryData(const RsTlvBinaryData& b); // as per rule of three
|
|
||||||
void operator=(const RsTlvBinaryData& b); // as per rule of three
|
|
||||||
virtual ~RsTlvBinaryData(); // as per rule of three
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear(); /*! Initialize fields to empty legal values ( "0", "", etc) */
|
|
||||||
virtual void TlvShallowClear(); /*! Don't delete the binary data */
|
|
||||||
|
|
||||||
/// Serialise.
|
|
||||||
/*! Serialise Tlv to buffer(*data) of 'size' bytes starting at *offset */
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset);
|
|
||||||
|
|
||||||
/// Deserialise.
|
|
||||||
/*! Deserialise Tlv buffer(*data) of 'size' bytes starting at *offset */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset);
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent); /*! Error/Debug util function */
|
|
||||||
|
|
||||||
bool setBinData(const void *data, uint32_t size);
|
|
||||||
|
|
||||||
uint16_t tlvtype; /// set/checked against TLV input
|
|
||||||
uint32_t bin_len; /// size of malloc'ed data (not serialised)
|
|
||||||
void *bin_data; /// mandatory
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**** MORE TLV *****
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
class RsTlvStringSet: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvStringSet(uint16_t type);
|
|
||||||
virtual ~RsTlvStringSet() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
virtual std::ostream &printHex(std::ostream &out, uint16_t indent); /* SPECIAL One */
|
|
||||||
|
|
||||||
uint16_t mType;
|
|
||||||
std::list<std::string> ids; /* Mandatory */
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class ID_CLASS,uint32_t TLV_TYPE> class t_RsTlvIdSet: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
t_RsTlvIdSet() {}
|
|
||||||
virtual ~t_RsTlvIdSet() {}
|
|
||||||
|
|
||||||
virtual uint32_t TlvSize() { return ID_CLASS::SIZE_IN_BYTES * ids.size() + TLV_HEADER_SIZE; }
|
|
||||||
virtual void TlvClear(){ ids.clear() ; }
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset) /* serialise */
|
|
||||||
{ /* 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 = ok && SetTlvBase(data, tlvend, offset, TLV_TYPE, tlvsize);
|
|
||||||
|
|
||||||
for(typename std::list<ID_CLASS>::const_iterator it(ids.begin());it!=ids.end();++it)
|
|
||||||
ok = ok && (*it).serialise(data,size,*offset) ;
|
|
||||||
|
|
||||||
return ok ;
|
|
||||||
}
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset) /* deserialise */
|
|
||||||
{
|
|
||||||
if (size < *offset + TLV_HEADER_SIZE)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
uint16_t tlvtype = 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 (tlvtype != TLV_TYPE) /* check type */
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
/* ready to load */
|
|
||||||
TlvClear();
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
(*offset) += TLV_HEADER_SIZE;
|
|
||||||
|
|
||||||
while(*offset + ID_CLASS::SIZE_IN_BYTES <= tlvend)
|
|
||||||
{
|
|
||||||
ID_CLASS id ;
|
|
||||||
ok = ok && id.deserialise(data,size,*offset) ;
|
|
||||||
ids.push_back(id) ;
|
|
||||||
}
|
|
||||||
if(*offset != tlvend)
|
|
||||||
std::cerr << "(EE) deserialisaiton error in " << __PRETTY_FUNCTION__ << std::endl;
|
|
||||||
return *offset == tlvend ;
|
|
||||||
}
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t /* indent */)
|
|
||||||
{
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << ": not implemented" << std::endl;
|
|
||||||
return out ;
|
|
||||||
}
|
|
||||||
virtual std::ostream &printHex(std::ostream &out, uint16_t /* indent */) /* SPECIAL One */
|
|
||||||
{
|
|
||||||
std::cerr << __PRETTY_FUNCTION__ << ": not implemented" << std::endl;
|
|
||||||
return out ;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::list<ID_CLASS> ids ;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef t_RsTlvIdSet<RsPeerId,TLV_TYPE_PEERSET> RsTlvPeerIdSet ;
|
|
||||||
typedef t_RsTlvIdSet<RsPgpId,TLV_TYPE_PGPIDSET> RsTlvPgpIdSet ;
|
|
||||||
typedef t_RsTlvIdSet<Sha1CheckSum,TLV_TYPE_HASHSET> RsTlvHashSet ;
|
|
||||||
typedef t_RsTlvIdSet<RsGxsId,TLV_TYPE_GXSIDSET> RsTlvGxsIdSet ;
|
|
||||||
|
|
||||||
class RsTlvServiceIdSet: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvServiceIdSet() { return; }
|
|
||||||
virtual ~RsTlvServiceIdSet() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::list<uint32_t> ids; /* Mandatory */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvStringSetRef: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvStringSetRef(uint16_t type, std::list<std::string> &refids);
|
|
||||||
virtual ~RsTlvStringSetRef() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
uint16_t mType;
|
|
||||||
std::list<std::string> &ids; /* Mandatory */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**** MORE TLV *****
|
|
||||||
*
|
|
||||||
* File Items/Data.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvFileItem: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvFileItem();
|
|
||||||
virtual ~RsTlvFileItem() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
uint64_t filesize; /// Mandatory: size of file to be downloaded
|
|
||||||
RsFileHash hash; /// Mandatory: to find file
|
|
||||||
std::string name; /// Optional: name of file
|
|
||||||
std::string path; /// Optional: path on host computer
|
|
||||||
uint32_t pop; /// Optional: Popularity of file
|
|
||||||
uint32_t age; /// Optional: age of file
|
|
||||||
// For chunk hashing.
|
|
||||||
uint32_t piecesize; /// Optional: bytes/piece for hashset.
|
|
||||||
RsTlvHashSet hashset; /// Optional: chunk hashes.
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class RsTlvFileSet: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvFileSet() { return; }
|
|
||||||
virtual ~RsTlvFileSet() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::list<RsTlvFileItem> items; /// Mandatory
|
|
||||||
std::string title; /// Optional: title of file set
|
|
||||||
std::string comment; /// Optional: comments for file
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvFileData: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvFileData();
|
|
||||||
virtual ~RsTlvFileData() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
RsTlvFileItem file; /// Mandatory: file information
|
|
||||||
uint64_t file_offset; /// Mandatory: where to start in bin data
|
|
||||||
RsTlvBinaryData binData; /// Mandatory: serialised file info
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**** MORE TLV *****
|
|
||||||
* Key/Value + Set used for Generic Configuration Parameters.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvKeyValue: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvKeyValue() { return; }
|
|
||||||
RsTlvKeyValue(const std::string& k,const std::string& v): key(k),value(v) {}
|
|
||||||
virtual ~RsTlvKeyValue() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::string key; /// Mandatory : For use in hash tables
|
|
||||||
std::string value; /// Mandatory : For use in hash tables
|
|
||||||
};
|
|
||||||
|
|
||||||
class RsTlvKeyValueSet: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvKeyValueSet() { return; }
|
|
||||||
virtual ~RsTlvKeyValueSet() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
std::list<RsTlvKeyValue> pairs; /// For use in hash tables
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class RsTlvImage: public RsTlvItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTlvImage();
|
|
||||||
RsTlvImage(const RsTlvImage& );
|
|
||||||
virtual ~RsTlvImage() { return; }
|
|
||||||
virtual uint32_t TlvSize();
|
|
||||||
virtual void TlvClear();
|
|
||||||
virtual bool SetTlv(void *data, uint32_t size, uint32_t *offset); /* serialise */
|
|
||||||
virtual bool GetTlv(void *data, uint32_t size, uint32_t *offset); /* deserialise */
|
|
||||||
|
|
||||||
virtual std::ostream &print(std::ostream &out, uint16_t indent);
|
|
||||||
|
|
||||||
uint32_t image_type; // Mandatory:
|
|
||||||
RsTlvBinaryData binData; // Mandatory: serialised file info
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -31,16 +31,23 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* print out a packet */
|
#include "serialiser/rstlvutil.h"
|
||||||
#include <stdlib.h>
|
|
||||||
|
#include "serialiser/rstlvbase.h"
|
||||||
|
#include "serialiser/rstlvitem.h"
|
||||||
|
#include "util/rsstring.h"
|
||||||
|
#include "util/utest.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* print out a packet */
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "serialiser/rstlvbase.h"
|
|
||||||
#include "serialiser/rstlvtypes.h"
|
#endif
|
||||||
#include "util/utest.h"
|
|
||||||
#include "util/rsstring.h"
|
|
||||||
|
|
||||||
void displayRawPacket(std::ostream &out, void *data, uint32_t size)
|
void displayRawPacket(std::ostream &out, void *data, uint32_t size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +29,9 @@
|
||||||
/* some utility functions mainly for debugging
|
/* some utility functions mainly for debugging
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class RsTlvItem;
|
class RsTlvItem;
|
||||||
|
|
||||||
|
@ -37,7 +39,6 @@ class RsTlvItem;
|
||||||
void displayRawPacket(std::ostream &out, void *data, uint32_t size);
|
void displayRawPacket(std::ostream &out, void *data, uint32_t size);
|
||||||
int test_SerialiseTlvItem(std::ostream &str, RsTlvItem *in, RsTlvItem *out);
|
int test_SerialiseTlvItem(std::ostream &str, RsTlvItem *in, RsTlvItem *out);
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
bool test_StepThroughTlvStack(std::ostream &str, void *data, int size);
|
bool test_StepThroughTlvStack(std::ostream &str, void *data, int size);
|
||||||
int test_CreateTlvStack(std::ostream &str,
|
int test_CreateTlvStack(std::ostream &str,
|
||||||
|
|
|
@ -84,7 +84,7 @@ RsItem* RsGxsWikiSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIKI != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ RsGxsWikiCollectionItem* RsGxsWikiSerialiser::deserialiseGxsWikiCollectionItem(v
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIKI != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
@ -375,7 +375,7 @@ RsGxsWikiSnapshotItem* RsGxsWikiSerialiser::deserialiseGxsWikiSnapshotItem(void
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIKI != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
@ -523,7 +523,7 @@ RsGxsWikiCommentItem* RsGxsWikiSerialiser::deserialiseGxsWikiCommentItem(void *d
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIKI != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_WIKI != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef GXSID_DEBUG
|
#ifdef GXSID_DEBUG
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rswiki.h"
|
#include "retroshare/rswiki.h"
|
||||||
|
@ -44,7 +44,7 @@ class RsGxsWikiCollectionItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWikiCollectionItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_WIKI,
|
RsGxsWikiCollectionItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIKI,
|
||||||
RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM) { return;}
|
RS_PKT_SUBTYPE_WIKI_COLLECTION_ITEM) { return;}
|
||||||
virtual ~RsGxsWikiCollectionItem() { return;}
|
virtual ~RsGxsWikiCollectionItem() { return;}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ class RsGxsWikiSnapshotItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWikiSnapshotItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_WIKI,
|
RsGxsWikiSnapshotItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI,
|
||||||
RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM) {return; }
|
RS_PKT_SUBTYPE_WIKI_SNAPSHOT_ITEM) {return; }
|
||||||
virtual ~RsGxsWikiSnapshotItem() { return;}
|
virtual ~RsGxsWikiSnapshotItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -71,7 +71,7 @@ class RsGxsWikiCommentItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWikiCommentItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_WIKI,
|
RsGxsWikiCommentItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIKI,
|
||||||
RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM) { return; }
|
RS_PKT_SUBTYPE_WIKI_COMMENT_ITEM) { return; }
|
||||||
virtual ~RsGxsWikiCommentItem() { return; }
|
virtual ~RsGxsWikiCommentItem() { return; }
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -85,7 +85,7 @@ class RsGxsWikiSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWikiSerialiser()
|
RsGxsWikiSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_WIKI)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_WIKI)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsWikiSerialiser() { return; }
|
virtual ~RsGxsWikiSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ RsItem* RsGxsWireSerialiser::deserialise(void* data, uint32_t* size)
|
||||||
uint32_t rstype = getRsItemId(data);
|
uint32_t rstype = getRsItemId(data);
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIRE != getRsItemService(rstype)))
|
(RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype)))
|
||||||
{
|
{
|
||||||
return NULL; /* wrong type */
|
return NULL; /* wrong type */
|
||||||
}
|
}
|
||||||
|
@ -196,7 +196,7 @@ RsGxsWireGroupItem* RsGxsWireSerialiser::deserialiseGxsWireGroupItem(void *data,
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIRE != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_WIRE_GROUP_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_WIRE_GROUP_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef WIRE_DEBUG
|
#ifdef WIRE_DEBUG
|
||||||
|
@ -350,7 +350,7 @@ RsGxsWirePulseItem* RsGxsWireSerialiser::deserialiseGxsWirePulseItem(void *data,
|
||||||
|
|
||||||
|
|
||||||
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
|
||||||
(RS_SERVICE_GXSV2_TYPE_WIRE != getRsItemService(rstype)) ||
|
(RS_SERVICE_GXS_TYPE_WIRE != getRsItemService(rstype)) ||
|
||||||
(RS_PKT_SUBTYPE_WIRE_PULSE_ITEM != getRsItemSubType(rstype)))
|
(RS_PKT_SUBTYPE_WIRE_PULSE_ITEM != getRsItemSubType(rstype)))
|
||||||
{
|
{
|
||||||
#ifdef WIRE_DEBUG
|
#ifdef WIRE_DEBUG
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "serialiser/rsserviceids.h"
|
#include "serialiser/rsserviceids.h"
|
||||||
#include "serialiser/rsserial.h"
|
#include "serialiser/rsserial.h"
|
||||||
#include "serialiser/rstlvtypes.h"
|
//#include "serialiser/rstlvtypes.h"
|
||||||
|
|
||||||
#include "rsgxsitems.h"
|
#include "rsgxsitems.h"
|
||||||
#include "retroshare/rswire.h"
|
#include "retroshare/rswire.h"
|
||||||
|
@ -43,7 +43,7 @@ class RsGxsWireGroupItem : public RsGxsGrpItem
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWireGroupItem(): RsGxsGrpItem(RS_SERVICE_GXSV2_TYPE_WIRE,
|
RsGxsWireGroupItem(): RsGxsGrpItem(RS_SERVICE_GXS_TYPE_WIRE,
|
||||||
RS_PKT_SUBTYPE_WIRE_GROUP_ITEM) { return;}
|
RS_PKT_SUBTYPE_WIRE_GROUP_ITEM) { return;}
|
||||||
virtual ~RsGxsWireGroupItem() { return;}
|
virtual ~RsGxsWireGroupItem() { return;}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class RsGxsWirePulseItem : public RsGxsMsgItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWirePulseItem(): RsGxsMsgItem(RS_SERVICE_GXSV2_TYPE_WIRE,
|
RsGxsWirePulseItem(): RsGxsMsgItem(RS_SERVICE_GXS_TYPE_WIRE,
|
||||||
RS_PKT_SUBTYPE_WIRE_PULSE_ITEM) {return; }
|
RS_PKT_SUBTYPE_WIRE_PULSE_ITEM) {return; }
|
||||||
virtual ~RsGxsWirePulseItem() { return;}
|
virtual ~RsGxsWirePulseItem() { return;}
|
||||||
void clear();
|
void clear();
|
||||||
|
@ -71,7 +71,7 @@ class RsGxsWireSerialiser : public RsSerialType
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RsGxsWireSerialiser()
|
RsGxsWireSerialiser()
|
||||||
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXSV2_TYPE_WIRE)
|
:RsSerialType(RS_PKT_VERSION_SERVICE, RS_SERVICE_GXS_TYPE_WIRE)
|
||||||
{ return; }
|
{ return; }
|
||||||
virtual ~RsGxsWireSerialiser() { return; }
|
virtual ~RsGxsWireSerialiser() { return; }
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,8 @@ bool p3BanList::recvBanItem(RsBanListItem *item)
|
||||||
bool updated = false;
|
bool updated = false;
|
||||||
|
|
||||||
std::list<RsTlvBanListEntry>::const_iterator it;
|
std::list<RsTlvBanListEntry>::const_iterator it;
|
||||||
for(it = item->peerList.entries.begin(); it != item->peerList.entries.end(); it++)
|
//for(it = item->peerList.entries.begin(); it != item->peerList.entries.end(); it++)
|
||||||
|
for(it = item->peerList.mList.begin(); it != item->peerList.mList.end(); it++)
|
||||||
{
|
{
|
||||||
// Order is important!.
|
// Order is important!.
|
||||||
updated = (addBanEntry(item->PeerId(), it->addr.addr, it->level,
|
updated = (addBanEntry(item->PeerId(), it->addr.addr, it->level,
|
||||||
|
@ -450,7 +451,8 @@ int p3BanList::sendBanSet(const RsPeerId& peerid)
|
||||||
bi.level = it->second.level;
|
bi.level = it->second.level;
|
||||||
bi.age = now - it->second.mTs;
|
bi.age = now - it->second.mTs;
|
||||||
|
|
||||||
item->peerList.entries.push_back(bi);
|
//item->peerList.entries.push_back(bi);
|
||||||
|
item->peerList.mList.push_back(bi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -273,9 +273,11 @@ int p3Dsdv::generateRoutingTable(const RsPeerId &peerId, bool incremental)
|
||||||
entry.sequence = v.mStableRoute.mSequence;
|
entry.sequence = v.mStableRoute.mSequence;
|
||||||
entry.distance = v.mStableRoute.mDistance;
|
entry.distance = v.mStableRoute.mDistance;
|
||||||
|
|
||||||
dsdv->routes.entries.push_back(entry);
|
//dsdv->routes.entries.push_back(entry);
|
||||||
|
dsdv->routes.mList.push_back(entry);
|
||||||
|
|
||||||
if (dsdv->routes.entries.size() > RSDSDV_MAX_ROUTE_TABLE)
|
//if (dsdv->routes.entries.size() > RSDSDV_MAX_ROUTE_TABLE)
|
||||||
|
if (dsdv->routes.mList.size() > RSDSDV_MAX_ROUTE_TABLE)
|
||||||
{
|
{
|
||||||
sendItem(dsdv);
|
sendItem(dsdv);
|
||||||
dsdv = new RsDsdvRouteItem();
|
dsdv = new RsDsdvRouteItem();
|
||||||
|
@ -329,7 +331,8 @@ int p3Dsdv::handleDSDV(RsDsdvRouteItem *dsdv)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
std::list<RsTlvDsdvEntry>::iterator it;
|
std::list<RsTlvDsdvEntry>::iterator it;
|
||||||
for(it = dsdv->routes.entries.begin(); it != dsdv->routes.entries.end(); it++)
|
//for(it = dsdv->routes.entries.begin(); it != dsdv->routes.entries.end(); it++)
|
||||||
|
for(it = dsdv->routes.mList.begin(); it != dsdv->routes.mList.end(); it++)
|
||||||
{
|
{
|
||||||
/* check for existing */
|
/* check for existing */
|
||||||
RsTlvDsdvEntry &entry = *it;
|
RsTlvDsdvEntry &entry = *it;
|
||||||
|
|
|
@ -65,11 +65,11 @@ RsGxsChannels *rsGxsChannels = NULL;
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
p3GxsChannels::p3GxsChannels(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
p3GxsChannels::p3GxsChannels(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
||||||
: RsGenExchange(gds, nes, new RsGxsChannelSerialiser(), RS_SERVICE_GXSV2_TYPE_CHANNELS, gixs, channelsAuthenPolicy()), RsGxsChannels(this), GxsTokenQueue(this)
|
: RsGenExchange(gds, nes, new RsGxsChannelSerialiser(), RS_SERVICE_GXS_TYPE_CHANNELS, gixs, channelsAuthenPolicy()), RsGxsChannels(this), GxsTokenQueue(this)
|
||||||
{
|
{
|
||||||
// For Dummy Msgs.
|
// For Dummy Msgs.
|
||||||
mGenActive = false;
|
mGenActive = false;
|
||||||
mCommentService = new p3GxsCommentService(this, RS_SERVICE_GXSV2_TYPE_CHANNELS);
|
mCommentService = new p3GxsCommentService(this, RS_SERVICE_GXS_TYPE_CHANNELS);
|
||||||
|
|
||||||
RsTickEvent::schedule_in(CHANNEL_PROCESS, 0);
|
RsTickEvent::schedule_in(CHANNEL_PROCESS, 0);
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ const uint16_t GXS_CHANNELS_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3GxsChannels::getServiceInfo()
|
RsServiceInfo p3GxsChannels::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_CHANNELS,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_CHANNELS,
|
||||||
GXS_CHANNELS_APP_NAME,
|
GXS_CHANNELS_APP_NAME,
|
||||||
GXS_CHANNELS_APP_MAJOR_VERSION,
|
GXS_CHANNELS_APP_MAJOR_VERSION,
|
||||||
GXS_CHANNELS_APP_MINOR_VERSION,
|
GXS_CHANNELS_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -108,7 +108,7 @@ RsGxsCircles *rsGxsCircles = NULL;
|
||||||
|
|
||||||
p3GxsCircles::p3GxsCircles(RsGeneralDataService *gds, RsNetworkExchangeService *nes, p3IdService *identities)
|
p3GxsCircles::p3GxsCircles(RsGeneralDataService *gds, RsNetworkExchangeService *nes, p3IdService *identities)
|
||||||
: RsGxsCircleExchange(gds, nes, new RsGxsCircleSerialiser(),
|
: RsGxsCircleExchange(gds, nes, new RsGxsCircleSerialiser(),
|
||||||
RS_SERVICE_GXSV2_TYPE_GXSCIRCLE, identities, circleAuthenPolicy()),
|
RS_SERVICE_GXS_TYPE_GXSCIRCLE, identities, circleAuthenPolicy()),
|
||||||
RsGxsCircles(this), GxsTokenQueue(this), RsTickEvent(), mIdentities(identities),
|
RsGxsCircles(this), GxsTokenQueue(this), RsTickEvent(), mIdentities(identities),
|
||||||
mCircleMtx("p3GxsCircles"),
|
mCircleMtx("p3GxsCircles"),
|
||||||
mCircleCache(DEFAULT_MEM_CACHE_SIZE, "GxsCircleCache")
|
mCircleCache(DEFAULT_MEM_CACHE_SIZE, "GxsCircleCache")
|
||||||
|
@ -120,12 +120,7 @@ p3GxsCircles::p3GxsCircles(RsGeneralDataService *gds, RsNetworkExchangeService *
|
||||||
RsTickEvent::schedule_now(CIRCLE_EVENT_LOADIDS);
|
RsTickEvent::schedule_now(CIRCLE_EVENT_LOADIDS);
|
||||||
|
|
||||||
// Dummy Circles.
|
// Dummy Circles.
|
||||||
|
// RsTickEvent::schedule_in(CIRCLE_EVENT_DUMMYSTART, CIRCLE_DUMMY_STARTPERIOD);
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
|
||||||
|
|
||||||
RsTickEvent::schedule_in(CIRCLE_EVENT_DUMMYSTART, CIRCLE_DUMMY_STARTPERIOD);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +133,7 @@ const uint16_t GXS_CIRCLES_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3GxsCircles::getServiceInfo()
|
RsServiceInfo p3GxsCircles::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_GXSCIRCLE,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_GXSCIRCLE,
|
||||||
GXS_CIRCLES_APP_NAME,
|
GXS_CIRCLES_APP_NAME,
|
||||||
GXS_CIRCLES_APP_MAJOR_VERSION,
|
GXS_CIRCLES_APP_MAJOR_VERSION,
|
||||||
GXS_CIRCLES_APP_MINOR_VERSION,
|
GXS_CIRCLES_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -51,7 +51,7 @@ RsGxsForums *rsGxsForums = NULL;
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
p3GxsForums::p3GxsForums(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
p3GxsForums::p3GxsForums(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
||||||
: RsGenExchange(gds, nes, new RsGxsForumSerialiser(), RS_SERVICE_GXSV2_TYPE_FORUMS, gixs, forumsAuthenPolicy()), RsGxsForums(this)
|
: RsGenExchange(gds, nes, new RsGxsForumSerialiser(), RS_SERVICE_GXS_TYPE_FORUMS, gixs, forumsAuthenPolicy()), RsGxsForums(this)
|
||||||
{
|
{
|
||||||
// For Dummy Msgs.
|
// For Dummy Msgs.
|
||||||
mGenActive = false;
|
mGenActive = false;
|
||||||
|
@ -70,7 +70,7 @@ const uint16_t GXS_FORUMS_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3GxsForums::getServiceInfo()
|
RsServiceInfo p3GxsForums::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_FORUMS,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_FORUMS,
|
||||||
GXS_FORUMS_APP_NAME,
|
GXS_FORUMS_APP_NAME,
|
||||||
GXS_FORUMS_APP_MAJOR_VERSION,
|
GXS_FORUMS_APP_MAJOR_VERSION,
|
||||||
GXS_FORUMS_APP_MINOR_VERSION,
|
GXS_FORUMS_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -142,7 +142,7 @@ const uint16_t GXS_REPUTATION_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3GxsReputation::getServiceInfo()
|
RsServiceInfo p3GxsReputation::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_REPUTATION,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_REPUTATION,
|
||||||
GXS_REPUTATION_APP_NAME,
|
GXS_REPUTATION_APP_NAME,
|
||||||
GXS_REPUTATION_APP_MAJOR_VERSION,
|
GXS_REPUTATION_APP_MAJOR_VERSION,
|
||||||
GXS_REPUTATION_APP_MINOR_VERSION,
|
GXS_REPUTATION_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -139,7 +139,7 @@ RsIdentity *rsIdentity = NULL;
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
p3IdService::p3IdService(RsGeneralDataService *gds, RsNetworkExchangeService *nes)
|
p3IdService::p3IdService(RsGeneralDataService *gds, RsNetworkExchangeService *nes)
|
||||||
: RsGxsIdExchange(gds, nes, new RsGxsIdSerialiser(), RS_SERVICE_GXSV2_TYPE_GXSID, idAuthenPolicy()),
|
: RsGxsIdExchange(gds, nes, new RsGxsIdSerialiser(), RS_SERVICE_GXS_TYPE_GXSID, idAuthenPolicy()),
|
||||||
RsIdentity(this), GxsTokenQueue(this), RsTickEvent(),
|
RsIdentity(this), GxsTokenQueue(this), RsTickEvent(),
|
||||||
mPublicKeyCache(DEFAULT_MEM_CACHE_SIZE, "GxsIdPublicKeyCache"),
|
mPublicKeyCache(DEFAULT_MEM_CACHE_SIZE, "GxsIdPublicKeyCache"),
|
||||||
mPrivateKeyCache(DEFAULT_MEM_CACHE_SIZE, "GxsIdPrivateKeyCache"),
|
mPrivateKeyCache(DEFAULT_MEM_CACHE_SIZE, "GxsIdPrivateKeyCache"),
|
||||||
|
@ -153,13 +153,10 @@ p3IdService::p3IdService(RsGeneralDataService *gds, RsNetworkExchangeService *ne
|
||||||
RsTickEvent::schedule_in(GXSID_EVENT_REPUTATION, REPUTATION_PERIOD);
|
RsTickEvent::schedule_in(GXSID_EVENT_REPUTATION, REPUTATION_PERIOD);
|
||||||
RsTickEvent::schedule_now(GXSID_EVENT_CACHEOWNIDS);
|
RsTickEvent::schedule_now(GXSID_EVENT_CACHEOWNIDS);
|
||||||
|
|
||||||
#ifndef GXS_DEV_TESTNET // NO RESET, OR DUMMYDATA for TESTNET
|
//RsTickEvent::schedule_in(GXSID_EVENT_CACHETEST, CACHETEST_PERIOD);
|
||||||
|
|
||||||
RsTickEvent::schedule_in(GXSID_EVENT_CACHETEST, CACHETEST_PERIOD);
|
#ifdef GXSID_GEN_DUMMY_DATA
|
||||||
|
//RsTickEvent::schedule_now(GXSID_EVENT_DUMMYDATA);
|
||||||
#ifdef GXSID_GEN_DUMMY_DATA
|
|
||||||
RsTickEvent::schedule_now(GXSID_EVENT_DUMMYDATA);
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
loadRecognKeys();
|
loadRecognKeys();
|
||||||
|
@ -173,7 +170,7 @@ const uint16_t GXSID_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3IdService::getServiceInfo()
|
RsServiceInfo p3IdService::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_GXSID,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_GXSID,
|
||||||
GXSID_APP_NAME,
|
GXSID_APP_NAME,
|
||||||
GXSID_APP_MAJOR_VERSION,
|
GXSID_APP_MAJOR_VERSION,
|
||||||
GXSID_APP_MINOR_VERSION,
|
GXSID_APP_MINOR_VERSION,
|
||||||
|
@ -2091,10 +2088,10 @@ RsGenExchange::ServiceCreate_Return p3IdService::service_CreateGroup(RsGxsGrpIte
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
|
||||||
#ifdef GXSID_GEN_DUMMY_DATA
|
#ifdef GXSID_GEN_DUMMY_DATA
|
||||||
if (item->group.mMeta.mAuthorId != "")
|
// if (item->group.mMeta.mAuthorId != "")
|
||||||
{
|
// {
|
||||||
ownId = RsPgpId(item->group.mMeta.mAuthorId);
|
// ownId = RsPgpId(item->group.mMeta.mAuthorId);
|
||||||
}
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ std::ostream &operator<<(std::ostream &out, const RsPhotoAlbum &album)
|
||||||
}
|
}
|
||||||
|
|
||||||
p3PhotoService::p3PhotoService(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs* gixs)
|
p3PhotoService::p3PhotoService(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs* gixs)
|
||||||
: RsGenExchange(gds, nes, new RsGxsPhotoSerialiser(), RS_SERVICE_GXSV2_TYPE_PHOTO, gixs, photoAuthenPolicy()),
|
: RsGenExchange(gds, nes, new RsGxsPhotoSerialiser(), RS_SERVICE_GXS_TYPE_PHOTO, gixs, photoAuthenPolicy()),
|
||||||
mPhotoMutex(std::string("Photo Mutex"))
|
mPhotoMutex(std::string("Photo Mutex"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ const uint16_t GXS_PHOTO_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3PhotoService::getServiceInfo()
|
RsServiceInfo p3PhotoService::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_PHOTO,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_PHOTO,
|
||||||
GXS_PHOTO_APP_NAME,
|
GXS_PHOTO_APP_NAME,
|
||||||
GXS_PHOTO_APP_MAJOR_VERSION,
|
GXS_PHOTO_APP_MAJOR_VERSION,
|
||||||
GXS_PHOTO_APP_MINOR_VERSION,
|
GXS_PHOTO_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -39,7 +39,7 @@ RsPosted *rsPosted = NULL;
|
||||||
/********************************************************************************/
|
/********************************************************************************/
|
||||||
|
|
||||||
p3Posted::p3Posted(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
p3Posted::p3Posted(RsGeneralDataService *gds, RsNetworkExchangeService *nes, RsGixs* gixs)
|
||||||
:p3PostBase(gds, nes, gixs, new RsGxsPostedSerialiser(), RS_SERVICE_GXSV2_TYPE_POSTED),
|
:p3PostBase(gds, nes, gixs, new RsGxsPostedSerialiser(), RS_SERVICE_GXS_TYPE_POSTED),
|
||||||
RsPosted(this)
|
RsPosted(this)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -54,7 +54,7 @@ const uint16_t GXS_POSTED_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3Posted::getServiceInfo()
|
RsServiceInfo p3Posted::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_POSTED,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_POSTED,
|
||||||
GXS_POSTED_APP_NAME,
|
GXS_POSTED_APP_NAME,
|
||||||
GXS_POSTED_APP_MAJOR_VERSION,
|
GXS_POSTED_APP_MAJOR_VERSION,
|
||||||
GXS_POSTED_APP_MINOR_VERSION,
|
GXS_POSTED_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -43,7 +43,7 @@ RsWiki *rsWiki = NULL;
|
||||||
#define DUMMYTICK_PERIOD 3
|
#define DUMMYTICK_PERIOD 3
|
||||||
|
|
||||||
p3Wiki::p3Wiki(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs)
|
p3Wiki::p3Wiki(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs)
|
||||||
:RsGenExchange(gds, nes, new RsGxsWikiSerialiser(), RS_SERVICE_GXSV2_TYPE_WIKI, gixs, wikiAuthenPolicy()),
|
:RsGenExchange(gds, nes, new RsGxsWikiSerialiser(), RS_SERVICE_GXS_TYPE_WIKI, gixs, wikiAuthenPolicy()),
|
||||||
RsWiki(this)
|
RsWiki(this)
|
||||||
{
|
{
|
||||||
// Setup of dummy Pages.
|
// Setup of dummy Pages.
|
||||||
|
@ -65,7 +65,7 @@ const uint16_t GXS_WIKI_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3Wiki::getServiceInfo()
|
RsServiceInfo p3Wiki::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_WIKI,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_WIKI,
|
||||||
GXS_WIKI_APP_NAME,
|
GXS_WIKI_APP_NAME,
|
||||||
GXS_WIKI_APP_MAJOR_VERSION,
|
GXS_WIKI_APP_MAJOR_VERSION,
|
||||||
GXS_WIKI_APP_MINOR_VERSION,
|
GXS_WIKI_APP_MINOR_VERSION,
|
||||||
|
|
|
@ -36,7 +36,7 @@ RsWire *rsWire = NULL;
|
||||||
|
|
||||||
|
|
||||||
p3Wire::p3Wire(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs)
|
p3Wire::p3Wire(RsGeneralDataService* gds, RsNetworkExchangeService* nes, RsGixs *gixs)
|
||||||
:RsGenExchange(gds, nes, new RsGxsWireSerialiser(), RS_SERVICE_GXSV2_TYPE_WIRE, gixs, wireAuthenPolicy()),
|
:RsGenExchange(gds, nes, new RsGxsWireSerialiser(), RS_SERVICE_GXS_TYPE_WIRE, gixs, wireAuthenPolicy()),
|
||||||
RsWire(this), mWireMtx("WireMtx")
|
RsWire(this), mWireMtx("WireMtx")
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ const uint16_t WIRE_MIN_MINOR_VERSION = 0;
|
||||||
|
|
||||||
RsServiceInfo p3Wire::getServiceInfo()
|
RsServiceInfo p3Wire::getServiceInfo()
|
||||||
{
|
{
|
||||||
return RsServiceInfo(RS_SERVICE_GXSV2_TYPE_WIRE,
|
return RsServiceInfo(RS_SERVICE_GXS_TYPE_WIRE,
|
||||||
WIRE_APP_NAME,
|
WIRE_APP_NAME,
|
||||||
WIRE_APP_MAJOR_VERSION,
|
WIRE_APP_MAJOR_VERSION,
|
||||||
WIRE_APP_MINOR_VERSION,
|
WIRE_APP_MINOR_VERSION,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue