mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-28 16:17:28 -04:00
merged with upstream/master
This commit is contained in:
commit
ade6017f74
469 changed files with 88476 additions and 59565 deletions
|
@ -43,34 +43,34 @@
|
|||
uint32_t RsFileConfigSerialiser::size(RsItem *i)
|
||||
{
|
||||
RsFileTransfer *rft;
|
||||
RsFileConfigItem *rfi;
|
||||
RsFileConfigItem *rfj;
|
||||
|
||||
if (NULL != (rft = dynamic_cast<RsFileTransfer *>(i)))
|
||||
{
|
||||
return sizeTransfer(rft);
|
||||
}
|
||||
if (NULL != (rfi = dynamic_cast<RsFileConfigItem *>(i)))
|
||||
{
|
||||
return sizeFileItem(rfi);
|
||||
}
|
||||
return 0;
|
||||
if (NULL != (rfj = dynamic_cast<RsFileConfigItem *>(i)))
|
||||
{
|
||||
return sizeFileItem(rfj);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* serialise the data to the buffer */
|
||||
bool RsFileConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize)
|
||||
{
|
||||
RsFileTransfer *rft;
|
||||
RsFileConfigItem *rfi;
|
||||
RsFileConfigItem *rfj;
|
||||
|
||||
if (NULL != (rft = dynamic_cast<RsFileTransfer *>(i)))
|
||||
{
|
||||
return serialiseTransfer(rft, data, pktsize);
|
||||
}
|
||||
if (NULL != (rfi = dynamic_cast<RsFileConfigItem *>(i)))
|
||||
{
|
||||
return serialiseFileItem(rfi, data, pktsize);
|
||||
}
|
||||
return false;
|
||||
if (NULL != (rfj = dynamic_cast<RsFileConfigItem*>(i)))
|
||||
{
|
||||
return serialiseFileItem(rfj, data, pktsize);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
RsItem *RsFileConfigSerialiser::deserialise(void *data, uint32_t *pktsize)
|
||||
|
@ -90,10 +90,13 @@ RsItem *RsFileConfigSerialiser::deserialise(void *data, uint32_t *pktsize)
|
|||
case RS_PKT_SUBTYPE_FILE_TRANSFER:
|
||||
return deserialiseTransfer(data, pktsize);
|
||||
break;
|
||||
case RS_PKT_SUBTYPE_FILE_ITEM:
|
||||
return deserialiseFileItem(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_FILE_ITEM_deprecated:
|
||||
return deserialiseFileItem_deprecated(data, pktsize);
|
||||
break;
|
||||
default:
|
||||
case RS_PKT_SUBTYPE_FILE_ITEM:
|
||||
return deserialiseFileItem(data, pktsize);
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
|
@ -158,20 +161,20 @@ std::ostream &RsFileTransfer::print(std::ostream &out, uint16_t indent)
|
|||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
RsFileConfigItem::~RsFileConfigItem()
|
||||
void RsFileConfigItem_deprecated::clear()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void RsFileConfigItem::clear()
|
||||
{
|
||||
|
||||
file.TlvClear();
|
||||
flags = 0;
|
||||
parent_groups.clear() ;
|
||||
}
|
||||
|
||||
std::ostream &RsFileConfigItem::print(std::ostream &out, uint16_t indent)
|
||||
void RsFileConfigItem::clear()
|
||||
{
|
||||
file.TlvClear();
|
||||
flags = 0;
|
||||
parent_groups.TlvClear() ;
|
||||
}
|
||||
std::ostream &RsFileConfigItem_deprecated::print(std::ostream &out, uint16_t indent)
|
||||
{
|
||||
printRsItemBase(out, "RsFileConfigItem", indent);
|
||||
uint16_t int_Indent = indent + 2;
|
||||
|
@ -188,6 +191,22 @@ std::ostream &RsFileConfigItem::print(std::ostream &out, uint16_t indent)
|
|||
return out;
|
||||
}
|
||||
|
||||
std::ostream &RsFileConfigItem::print(std::ostream &out, uint16_t indent)
|
||||
{
|
||||
printRsItemBase(out, "RsFileConfigItem", indent);
|
||||
uint16_t int_Indent = indent + 2;
|
||||
file.print(out, int_Indent);
|
||||
|
||||
printIndent(out, int_Indent); out << "flags: " << flags << std::endl;
|
||||
printIndent(out, int_Indent); out << "groups:" ;
|
||||
|
||||
for(std::set<RsNodeGroupId>::const_iterator it(parent_groups.ids.begin());it!=parent_groups.ids.end();++it)
|
||||
out << (*it) << " " ;
|
||||
out << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsFileConfigItem", indent);
|
||||
return out;
|
||||
}
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
@ -351,8 +370,7 @@ uint32_t RsFileConfigSerialiser::sizeFileItem(RsFileConfigItem *item)
|
|||
s += item->file.TlvSize();
|
||||
s += 4; // flags
|
||||
|
||||
for(std::list<std::string>::const_iterator it(item->parent_groups.begin());it!=item->parent_groups.end();++it) // parent groups
|
||||
s += GetTlvStringSize(*it);
|
||||
s += item->parent_groups.TlvSize() ;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
@ -382,9 +400,7 @@ bool RsFileConfigSerialiser::serialiseFileItem(RsFileConfigItem *item, void
|
|||
/* add mandatory parts first */
|
||||
ok &= item->file.SetTlv(data, tlvsize, &offset);
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, item->flags);
|
||||
|
||||
for(std::list<std::string>::const_iterator it(item->parent_groups.begin());ok && it!=item->parent_groups.end();++it) // parent groups
|
||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_GROUPID, *it);
|
||||
ok &= item->parent_groups.SetTlv(data, tlvsize, &offset);
|
||||
|
||||
if (offset != tlvsize)
|
||||
{
|
||||
|
@ -397,6 +413,66 @@ bool RsFileConfigSerialiser::serialiseFileItem(RsFileConfigItem *item, void
|
|||
return ok;
|
||||
}
|
||||
|
||||
RsFileConfigItem_deprecated *RsFileConfigSerialiser::deserialiseFileItem_deprecated(void *data, uint32_t *pktsize)
|
||||
{
|
||||
/* get the type and size */
|
||||
uint32_t rstype = getRsItemId(data);
|
||||
uint32_t rssize = getRsItemSize(data);
|
||||
|
||||
uint32_t offset = 0;
|
||||
|
||||
|
||||
if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) ||
|
||||
(RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) ||
|
||||
(RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype)) ||
|
||||
(RS_PKT_SUBTYPE_FILE_ITEM_deprecated != getRsItemSubType(rstype)))
|
||||
{
|
||||
return NULL; /* wrong type */
|
||||
}
|
||||
|
||||
if (*pktsize < rssize) /* check size */
|
||||
return NULL; /* not enough data */
|
||||
|
||||
/* set the packet length */
|
||||
*pktsize = rssize;
|
||||
|
||||
bool ok = true;
|
||||
|
||||
/* ready to load */
|
||||
RsFileConfigItem_deprecated *item = new RsFileConfigItem_deprecated();
|
||||
item->clear();
|
||||
|
||||
/* skip the header */
|
||||
offset += 8;
|
||||
|
||||
/* get mandatory parts first */
|
||||
ok &= item->file.GetTlv(data, rssize, &offset);
|
||||
ok &= getRawUInt32(data, rssize, &offset, &(item->flags));
|
||||
|
||||
while(offset < rssize)
|
||||
{
|
||||
std::string tmp ;
|
||||
if(GetTlvString(data, rssize, &offset, TLV_TYPE_STR_GROUPID, tmp))
|
||||
item->parent_groups.push_back(tmp) ;
|
||||
else
|
||||
break ;
|
||||
}
|
||||
|
||||
if (offset != rssize)
|
||||
{
|
||||
/* error */
|
||||
delete item;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
delete item;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
RsFileConfigItem *RsFileConfigSerialiser::deserialiseFileItem(void *data, uint32_t *pktsize)
|
||||
{
|
||||
/* get the type and size */
|
||||
|
@ -409,7 +485,7 @@ RsFileConfigItem *RsFileConfigSerialiser::deserialiseFileItem(void *data, uint32
|
|||
if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) ||
|
||||
(RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) ||
|
||||
(RS_PKT_TYPE_FILE_CONFIG != getRsItemType(rstype)) ||
|
||||
(RS_PKT_SUBTYPE_FILE_ITEM != getRsItemSubType(rstype)))
|
||||
(RS_PKT_SUBTYPE_FILE_ITEM != getRsItemSubType(rstype)))
|
||||
{
|
||||
return NULL; /* wrong type */
|
||||
}
|
||||
|
@ -423,7 +499,7 @@ RsFileConfigItem *RsFileConfigSerialiser::deserialiseFileItem(void *data, uint32
|
|||
bool ok = true;
|
||||
|
||||
/* ready to load */
|
||||
RsFileConfigItem *item = new RsFileConfigItem();
|
||||
RsFileConfigItem *item = new RsFileConfigItem();
|
||||
item->clear();
|
||||
|
||||
/* skip the header */
|
||||
|
@ -432,15 +508,7 @@ RsFileConfigItem *RsFileConfigSerialiser::deserialiseFileItem(void *data, uint32
|
|||
/* get mandatory parts first */
|
||||
ok &= item->file.GetTlv(data, rssize, &offset);
|
||||
ok &= getRawUInt32(data, rssize, &offset, &(item->flags));
|
||||
|
||||
while(offset < rssize)
|
||||
{
|
||||
std::string tmp ;
|
||||
if(GetTlvString(data, rssize, &offset, TLV_TYPE_STR_GROUPID, tmp))
|
||||
item->parent_groups.push_back(tmp) ;
|
||||
else
|
||||
break ;
|
||||
}
|
||||
ok &= item->parent_groups.GetTlv(data, rssize, &offset) ;
|
||||
|
||||
if (offset != rssize)
|
||||
{
|
||||
|
@ -682,7 +750,7 @@ uint32_t RsPeerConfigSerialiser::size(RsItem *i)
|
|||
{
|
||||
RsPeerStunItem *psi;
|
||||
RsPeerNetItem *pni;
|
||||
RsPeerGroupItem *pgi;
|
||||
RsNodeGroupItem *pgi;
|
||||
RsPeerServicePermissionItem *pri;
|
||||
RsPeerBandwidthLimitsItem *pblitem;
|
||||
|
||||
|
@ -694,7 +762,7 @@ uint32_t RsPeerConfigSerialiser::size(RsItem *i)
|
|||
{
|
||||
return sizeStun(psi);
|
||||
}
|
||||
else if (NULL != (pgi = dynamic_cast<RsPeerGroupItem *>(i)))
|
||||
else if (NULL != (pgi = dynamic_cast<RsNodeGroupItem*>(i)))
|
||||
{
|
||||
return sizeGroup(pgi);
|
||||
}
|
||||
|
@ -715,7 +783,7 @@ bool RsPeerConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsi
|
|||
{
|
||||
RsPeerNetItem *pni;
|
||||
RsPeerStunItem *psi;
|
||||
RsPeerGroupItem *pgi;
|
||||
RsNodeGroupItem *pgi;
|
||||
RsPeerServicePermissionItem *pri;
|
||||
RsPeerBandwidthLimitsItem *pblitem;
|
||||
|
||||
|
@ -727,7 +795,7 @@ bool RsPeerConfigSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsi
|
|||
{
|
||||
return serialiseStun(psi, data, pktsize);
|
||||
}
|
||||
else if (NULL != (pgi = dynamic_cast<RsPeerGroupItem *>(i)))
|
||||
else if (NULL != (pgi = dynamic_cast<RsNodeGroupItem*>(i)))
|
||||
{
|
||||
return serialiseGroup(pgi, data, pktsize);
|
||||
}
|
||||
|
@ -764,9 +832,11 @@ RsItem *RsPeerConfigSerialiser::deserialise(void *data, uint32_t *pktsize)
|
|||
return deserialiseNet(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_PEER_STUN:
|
||||
return deserialiseStun(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_PEER_GROUP:
|
||||
return deserialiseGroup(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_PEER_PERMISSIONS:
|
||||
case RS_PKT_SUBTYPE_PEER_GROUP_deprecated:
|
||||
return deserialiseGroup_deprecated(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_NODE_GROUP:
|
||||
return deserialiseGroup(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_PEER_PERMISSIONS:
|
||||
return deserialisePermissions(data, pktsize);
|
||||
case RS_PKT_SUBTYPE_PEER_BANDLIMITS:
|
||||
return deserialisePeerBandwidthLimits(data, pktsize);
|
||||
|
@ -1312,16 +1382,64 @@ RsPeerStunItem *RsPeerConfigSerialiser::deserialiseStun(void *data, uint32_t *si
|
|||
}
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
RsPeerGroupItem::RsPeerGroupItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_PEER_GROUP)
|
||||
RsNodeGroupItem::RsNodeGroupItem() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP)
|
||||
{
|
||||
}
|
||||
|
||||
RsPeerGroupItem::~RsPeerGroupItem()
|
||||
RsNodeGroupItem::RsNodeGroupItem(const RsGroupInfo& g)
|
||||
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_NODE_GROUP)
|
||||
{
|
||||
id = g.id ;
|
||||
name = g.name ;
|
||||
flag = g.flag ;
|
||||
pgpList.ids = g.peerIds;
|
||||
}
|
||||
|
||||
void RsNodeGroupItem::clear()
|
||||
{
|
||||
id.clear();
|
||||
name.clear();
|
||||
flag = 0;
|
||||
pgpList.ids.clear();
|
||||
}
|
||||
|
||||
std::ostream &RsNodeGroupItem::print(std::ostream &out, uint16_t indent)
|
||||
{
|
||||
printRsItemBase(out, "RsNodeGroupItem", indent);
|
||||
uint16_t int_Indent = indent + 2;
|
||||
|
||||
printIndent(out, int_Indent);
|
||||
out << "groupId: " << id << std::endl;
|
||||
|
||||
printIndent(out, int_Indent);
|
||||
out << "groupName: " << name << std::endl;
|
||||
|
||||
printIndent(out, int_Indent);
|
||||
out << "groupFlag: " << flag << std::endl;
|
||||
|
||||
std::set<RsPgpId>::iterator it;
|
||||
for (it = pgpList.ids.begin(); it != pgpList.ids.end(); ++it) {
|
||||
printIndent(out, int_Indent);
|
||||
out << "peerId: " << it->toStdString() << std::endl;
|
||||
}
|
||||
|
||||
printRsItemEnd(out, "RsNodeGroupItem", indent);
|
||||
return out;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/* DEPRECATED CODE. SHOULD BE REMOVED WHEN EVERYONE USES THE NEW CLASS */
|
||||
/*************************************************************************/
|
||||
|
||||
RsPeerGroupItem_deprecated::RsPeerGroupItem_deprecated() : RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG, RS_PKT_TYPE_PEER_CONFIG, RS_PKT_SUBTYPE_PEER_GROUP_deprecated)
|
||||
{
|
||||
}
|
||||
|
||||
void RsPeerGroupItem::clear()
|
||||
RsPeerGroupItem_deprecated::~RsPeerGroupItem_deprecated()
|
||||
{
|
||||
}
|
||||
|
||||
void RsPeerGroupItem_deprecated::clear()
|
||||
{
|
||||
id.clear();
|
||||
name.clear();
|
||||
|
@ -1329,7 +1447,7 @@ void RsPeerGroupItem::clear()
|
|||
pgpList.ids.clear();
|
||||
}
|
||||
|
||||
std::ostream &RsPeerGroupItem::print(std::ostream &out, uint16_t indent)
|
||||
std::ostream &RsPeerGroupItem_deprecated::print(std::ostream &out, uint16_t indent)
|
||||
{
|
||||
printRsItemBase(out, "RsPeerGroupItem", indent);
|
||||
uint16_t int_Indent = indent + 2;
|
||||
|
@ -1353,38 +1471,67 @@ std::ostream &RsPeerGroupItem::print(std::ostream &out, uint16_t indent)
|
|||
return out;
|
||||
}
|
||||
|
||||
/* set data from RsGroupInfo to RsPeerGroupItem */
|
||||
void RsPeerGroupItem::set(RsGroupInfo &groupInfo)
|
||||
RsPeerGroupItem_deprecated *RsPeerConfigSerialiser::deserialiseGroup_deprecated(void *data, uint32_t *size)
|
||||
{
|
||||
id = groupInfo.id;
|
||||
name = groupInfo.name;
|
||||
flag = groupInfo.flag;
|
||||
pgpList.ids = groupInfo.peerIds;
|
||||
}
|
||||
/* get the type and size */
|
||||
uint32_t rstype = getRsItemId(data);
|
||||
uint32_t rssize = getRsItemSize(data);
|
||||
|
||||
/* get data from RsGroupInfo to RsPeerGroupItem */
|
||||
void RsPeerGroupItem::get(RsGroupInfo &groupInfo)
|
||||
{
|
||||
groupInfo.id = id;
|
||||
groupInfo.name = name;
|
||||
groupInfo.flag = flag;
|
||||
groupInfo.peerIds = pgpList.ids;
|
||||
}
|
||||
uint32_t offset = 0;
|
||||
|
||||
if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) ||
|
||||
(RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) ||
|
||||
(RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) ||
|
||||
(RS_PKT_SUBTYPE_PEER_GROUP_deprecated != getRsItemSubType(rstype)))
|
||||
{
|
||||
return NULL; /* wrong type */
|
||||
}
|
||||
|
||||
if (*size < rssize) /* check size */
|
||||
return NULL; /* not enough data */
|
||||
|
||||
/* set the packet length */
|
||||
*size = rssize;
|
||||
|
||||
bool ok = true;
|
||||
|
||||
RsPeerGroupItem_deprecated *item = new RsPeerGroupItem_deprecated();
|
||||
item->clear();
|
||||
|
||||
/* skip the header */
|
||||
offset += 8;
|
||||
|
||||
/* get mandatory parts first */
|
||||
uint32_t version;
|
||||
ok &= getRawUInt32(data, rssize, &offset, &version);
|
||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_KEY, item->id);
|
||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->name);
|
||||
ok &= getRawUInt32(data, rssize, &offset, &(item->flag));
|
||||
ok &= item->pgpList.GetTlv(data, rssize, &offset);
|
||||
|
||||
if (offset != rssize)
|
||||
{
|
||||
/* error */
|
||||
delete item;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
/*************************************************************************/
|
||||
|
||||
uint32_t RsPeerConfigSerialiser::sizeGroup(RsPeerGroupItem *i)
|
||||
uint32_t RsPeerConfigSerialiser::sizeGroup(RsNodeGroupItem *i)
|
||||
{
|
||||
uint32_t s = 8; /* header */
|
||||
s += 4; /* version */
|
||||
s += GetTlvStringSize(i->id);
|
||||
s += RsNodeGroupId::serial_size();
|
||||
s += GetTlvStringSize(i->name);
|
||||
s += 4; /* flag */
|
||||
s += i->pgpList.TlvSize();
|
||||
return s;
|
||||
}
|
||||
|
||||
bool RsPeerConfigSerialiser::serialiseGroup(RsPeerGroupItem *item, void *data, uint32_t *size)
|
||||
bool RsPeerConfigSerialiser::serialiseGroup(RsNodeGroupItem *item, void *data, uint32_t *size)
|
||||
{
|
||||
uint32_t tlvsize = RsPeerConfigSerialiser::sizeGroup(item);
|
||||
uint32_t offset = 0;
|
||||
|
@ -1410,7 +1557,7 @@ bool RsPeerConfigSerialiser::serialiseGroup(RsPeerGroupItem *item, void *data, u
|
|||
|
||||
/* add mandatory parts first */
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, 0);
|
||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_KEY, item->id);
|
||||
ok &= item->id.serialise(data, tlvsize, offset);
|
||||
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_NAME, item->name);
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, item->flag);
|
||||
ok &= item->pgpList.SetTlv(data, tlvsize, &offset);
|
||||
|
@ -1426,7 +1573,7 @@ bool RsPeerConfigSerialiser::serialiseGroup(RsPeerGroupItem *item, void *data, u
|
|||
return ok;
|
||||
}
|
||||
|
||||
RsPeerGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *size)
|
||||
RsNodeGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *size)
|
||||
{
|
||||
/* get the type and size */
|
||||
uint32_t rstype = getRsItemId(data);
|
||||
|
@ -1437,7 +1584,7 @@ RsPeerGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *
|
|||
if ((RS_PKT_VERSION1 != getRsItemVersion(rstype)) ||
|
||||
(RS_PKT_CLASS_CONFIG != getRsItemClass(rstype)) ||
|
||||
(RS_PKT_TYPE_PEER_CONFIG != getRsItemType(rstype)) ||
|
||||
(RS_PKT_SUBTYPE_PEER_GROUP != getRsItemSubType(rstype)))
|
||||
(RS_PKT_SUBTYPE_NODE_GROUP != getRsItemSubType(rstype)))
|
||||
{
|
||||
return NULL; /* wrong type */
|
||||
}
|
||||
|
@ -1450,7 +1597,7 @@ RsPeerGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *
|
|||
|
||||
bool ok = true;
|
||||
|
||||
RsPeerGroupItem *item = new RsPeerGroupItem();
|
||||
RsNodeGroupItem *item = new RsNodeGroupItem();
|
||||
item->clear();
|
||||
|
||||
/* skip the header */
|
||||
|
@ -1459,7 +1606,7 @@ RsPeerGroupItem *RsPeerConfigSerialiser::deserialiseGroup(void *data, uint32_t *
|
|||
/* get mandatory parts first */
|
||||
uint32_t version;
|
||||
ok &= getRawUInt32(data, rssize, &offset, &version);
|
||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_KEY, item->id);
|
||||
ok &= item->id.deserialise(data, rssize, offset);
|
||||
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_NAME, item->name);
|
||||
ok &= getRawUInt32(data, rssize, &offset, &(item->flag));
|
||||
ok &= item->pgpList.GetTlv(data, rssize, &offset);
|
||||
|
|
|
@ -50,15 +50,17 @@ const uint8_t RS_PKT_TYPE_HISTORY_CONFIG = 0x06;
|
|||
const uint8_t RS_PKT_SUBTYPE_KEY_VALUE = 0x01;
|
||||
|
||||
/* PEER CONFIG SUBTYPES */
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_STUN = 0x02;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_NET = 0x03;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_GROUP = 0x04;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_PERMISSIONS = 0x05;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_BANDLIMITS = 0x06;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_STUN = 0x02;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_NET = 0x03;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_GROUP_deprecated = 0x04;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_PERMISSIONS = 0x05;
|
||||
const uint8_t RS_PKT_SUBTYPE_PEER_BANDLIMITS = 0x06;
|
||||
const uint8_t RS_PKT_SUBTYPE_NODE_GROUP = 0x07;
|
||||
|
||||
/* FILE CONFIG SUBTYPES */
|
||||
const uint8_t RS_PKT_SUBTYPE_FILE_TRANSFER = 0x01;
|
||||
const uint8_t RS_PKT_SUBTYPE_FILE_ITEM = 0x02;
|
||||
const uint8_t RS_PKT_SUBTYPE_FILE_TRANSFER = 0x01;
|
||||
const uint8_t RS_PKT_SUBTYPE_FILE_ITEM_deprecated = 0x02;
|
||||
const uint8_t RS_PKT_SUBTYPE_FILE_ITEM = 0x03;
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
|
@ -134,11 +136,11 @@ class RsPeerBandwidthLimitsItem : public RsItem
|
|||
std::map<RsPgpId,PeerBandwidthLimits> peers ;
|
||||
};
|
||||
|
||||
class RsPeerGroupItem : public RsItem
|
||||
class RsPeerGroupItem_deprecated : public RsItem
|
||||
{
|
||||
public:
|
||||
RsPeerGroupItem();
|
||||
virtual ~RsPeerGroupItem();
|
||||
RsPeerGroupItem_deprecated();
|
||||
virtual ~RsPeerGroupItem_deprecated();
|
||||
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
@ -156,6 +158,29 @@ public:
|
|||
RsTlvPgpIdSet pgpList;
|
||||
};
|
||||
|
||||
class RsNodeGroupItem: public RsItem
|
||||
{
|
||||
public:
|
||||
RsNodeGroupItem();
|
||||
virtual ~RsNodeGroupItem() {}
|
||||
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
explicit RsNodeGroupItem(const RsGroupInfo&) ;
|
||||
|
||||
// /* set data from RsGroupInfo to RsPeerGroupItem */
|
||||
// void set(RsGroupInfo &groupInfo);
|
||||
// /* get data from RsGroupInfo to RsPeerGroupItem */
|
||||
// void get(RsGroupInfo &groupInfo);
|
||||
|
||||
/* Mandatory */
|
||||
RsNodeGroupId id;
|
||||
std::string name;
|
||||
uint32_t flag;
|
||||
|
||||
RsTlvPgpIdSet pgpList;
|
||||
};
|
||||
|
||||
class RsPeerStunItem: public RsItem
|
||||
{
|
||||
|
@ -197,9 +222,10 @@ virtual uint32_t sizeStun(RsPeerStunItem *);
|
|||
virtual bool serialiseStun (RsPeerStunItem *item, void *data, uint32_t *size);
|
||||
virtual RsPeerStunItem * deserialiseStun(void *data, uint32_t *size);
|
||||
|
||||
virtual uint32_t sizeGroup(RsPeerGroupItem *);
|
||||
virtual bool serialiseGroup (RsPeerGroupItem *item, void *data, uint32_t *size);
|
||||
virtual RsPeerGroupItem * deserialiseGroup(void *data, uint32_t *size);
|
||||
virtual uint32_t sizeGroup(RsNodeGroupItem *);
|
||||
virtual bool serialiseGroup (RsNodeGroupItem *item, void *data, uint32_t *size);
|
||||
virtual RsNodeGroupItem *deserialiseGroup(void *data, uint32_t *size);
|
||||
virtual RsPeerGroupItem_deprecated * deserialiseGroup_deprecated(void *data, uint32_t *size);
|
||||
|
||||
virtual uint32_t sizePeerBandwidthLimits(RsPeerBandwidthLimitsItem *);
|
||||
virtual bool serialisePeerBandwidthLimits (RsPeerBandwidthLimitsItem *item, void *data, uint32_t *size);
|
||||
|
@ -303,23 +329,39 @@ class RsFileTransfer: public RsItem
|
|||
const uint32_t RS_FILE_CONFIG_CLEANUP_DELETE = 0x0001;
|
||||
|
||||
/* Used by ft / extralist / configdirs / anyone who wants a basic file */
|
||||
class RsFileConfigItem: public RsItem
|
||||
class RsFileConfigItem_deprecated: public RsItem
|
||||
{
|
||||
public:
|
||||
RsFileConfigItem()
|
||||
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG,
|
||||
RS_PKT_TYPE_FILE_CONFIG,
|
||||
RS_PKT_SUBTYPE_FILE_ITEM)
|
||||
{ return; }
|
||||
virtual ~RsFileConfigItem();
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
public:
|
||||
RsFileConfigItem_deprecated()
|
||||
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG,
|
||||
RS_PKT_TYPE_FILE_CONFIG,
|
||||
RS_PKT_SUBTYPE_FILE_ITEM_deprecated)
|
||||
{}
|
||||
virtual ~RsFileConfigItem_deprecated() {}
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
RsTlvFileItem file;
|
||||
uint32_t flags;
|
||||
std::list<std::string> parent_groups ;
|
||||
RsTlvFileItem file;
|
||||
uint32_t flags;
|
||||
std::list<std::string> parent_groups ;
|
||||
};
|
||||
|
||||
class RsFileConfigItem: public RsItem
|
||||
{
|
||||
public:
|
||||
RsFileConfigItem()
|
||||
:RsItem(RS_PKT_VERSION1, RS_PKT_CLASS_CONFIG,
|
||||
RS_PKT_TYPE_FILE_CONFIG,
|
||||
RS_PKT_SUBTYPE_FILE_ITEM)
|
||||
{}
|
||||
virtual ~RsFileConfigItem() {}
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
RsTlvFileItem file;
|
||||
uint32_t flags;
|
||||
RsTlvNodeGroupIdSet parent_groups ;
|
||||
};
|
||||
/**************************************************************************/
|
||||
|
||||
class RsFileConfigSerialiser: public RsSerialType
|
||||
|
@ -341,9 +383,11 @@ virtual uint32_t sizeTransfer(RsFileTransfer *);
|
|||
virtual bool serialiseTransfer(RsFileTransfer *item, void *data, uint32_t *size);
|
||||
virtual RsFileTransfer * deserialiseTransfer(void *data, uint32_t *size);
|
||||
|
||||
virtual RsFileConfigItem_deprecated * deserialiseFileItem_deprecated(void *data, uint32_t *size);
|
||||
|
||||
virtual uint32_t sizeFileItem(RsFileConfigItem *);
|
||||
virtual bool serialiseFileItem(RsFileConfigItem *item, void *data, uint32_t *size);
|
||||
virtual RsFileConfigItem * deserialiseFileItem(void *data, uint32_t *size);
|
||||
virtual RsFileConfigItem *deserialiseFileItem(void *data, uint32_t *size);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -74,6 +74,11 @@ void RsGxsReputationUpdateItem::clear()
|
|||
mOpinions.clear() ;
|
||||
}
|
||||
|
||||
void RsGxsReputationBannedNodeSetItem::clear()
|
||||
{
|
||||
mKnownIdentities.TlvClear();
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
@ -82,10 +87,10 @@ std::ostream& RsGxsReputationConfigItem::print(std::ostream &out, uint16_t inden
|
|||
{
|
||||
printRsItemBase(out, "RsReputationConfigItem", indent);
|
||||
|
||||
out << "mPeerId: " << mPeerId << std::endl;
|
||||
out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl;
|
||||
out << "last query : " << time(NULL) - mLastQuery << " secs ago." << std::endl;
|
||||
|
||||
out << "mPeerId: " << mPeerId << std::endl;
|
||||
out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl;
|
||||
out << "last query : " << time(NULL) - mLastQuery << " secs ago." << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsReputationConfigItem", indent);
|
||||
return out;
|
||||
}
|
||||
|
@ -94,14 +99,15 @@ std::ostream& RsGxsReputationSetItem::print(std::ostream &out, uint16_t indent)
|
|||
{
|
||||
printRsItemBase(out, "RsReputationSetItem", indent);
|
||||
|
||||
out << "GxsId: " << mGxsId << std::endl;
|
||||
out << "mOwnOpinion: " << mOwnOpinion << std::endl;
|
||||
out << "mOwnOpinionTS : " << time(NULL) - mOwnOpinionTS << " secs ago." << std::endl;
|
||||
out << "GxsId: " << mGxsId << std::endl;
|
||||
out << "Owner: " << mOwnerNodeId << std::endl;
|
||||
out << "mOwnOpinion: " << mOwnOpinion << std::endl;
|
||||
out << "mOwnOpinionTS : " << time(NULL) - mOwnOpinionTS << " secs ago." << std::endl;
|
||||
out << "Opinions from neighbors: " << std::endl;
|
||||
|
||||
|
||||
for(std::map<RsPeerId,uint32_t>::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it)
|
||||
out << " " << it->first << ": " << it->second << std::endl;
|
||||
|
||||
out << " " << it->first << ": " << it->second << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsReputationSetItem", indent);
|
||||
return out;
|
||||
}
|
||||
|
@ -109,12 +115,12 @@ std::ostream& RsGxsReputationUpdateItem::print(std::ostream &out, uint16_t inden
|
|||
{
|
||||
printRsItemBase(out, "RsReputationUpdateItem", indent);
|
||||
|
||||
out << "from: " << PeerId() << std::endl;
|
||||
out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl;
|
||||
|
||||
out << "from: " << PeerId() << std::endl;
|
||||
out << "last update: " << time(NULL) - mLatestUpdate << " secs ago." << std::endl;
|
||||
|
||||
for(std::map<RsGxsId,uint32_t>::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it)
|
||||
out << " " << it->first << ": " << it->second << std::endl;
|
||||
|
||||
out << " " << it->first << ": " << it->second << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsReputationUpdateItem", indent);
|
||||
return out;
|
||||
}
|
||||
|
@ -122,8 +128,19 @@ std::ostream& RsGxsReputationRequestItem::print(std::ostream &out, uint16_t inde
|
|||
{
|
||||
printRsItemBase(out, "RsReputationRequestItem", indent);
|
||||
|
||||
out << "last update: " << time(NULL) - mLastUpdate << " secs ago." << std::endl;
|
||||
|
||||
out << "last update: " << time(NULL) - mLastUpdate << " secs ago." << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsReputationRequestItem", indent);
|
||||
return out;
|
||||
}
|
||||
std::ostream& RsGxsReputationBannedNodeSetItem::print(std::ostream &out, uint16_t indent)
|
||||
{
|
||||
printRsItemBase(out, "RsReputationBannedNodeSetItem", indent);
|
||||
|
||||
out << "last update: " << time(NULL) - mLastActivityTS << " secs ago." << std::endl;
|
||||
out << "PGP id: " << mPgpId << std::endl;
|
||||
out << "Known ids: " << mKnownIdentities.ids.size() << std::endl;
|
||||
|
||||
printRsItemEnd(out, "RsReputationRequestItem", indent);
|
||||
return out;
|
||||
}
|
||||
|
@ -134,26 +151,38 @@ uint32_t RsGxsReputationConfigItem::serial_size() const
|
|||
uint32_t s = 8; /* header */
|
||||
|
||||
s += mPeerId.serial_size() ; // PeerId
|
||||
s += 4 ; // mLatestUpdate
|
||||
s += 4 ; // mLastQuery
|
||||
s += 4 ; // mLatestUpdate
|
||||
s += 4 ; // mLastQuery
|
||||
|
||||
return s ;
|
||||
}
|
||||
|
||||
uint32_t RsGxsReputationSetItem::serial_size() const
|
||||
{
|
||||
uint32_t s = 8; /* header */
|
||||
|
||||
s += mGxsId.serial_size() ;
|
||||
uint32_t s = 8; /* header */
|
||||
|
||||
s += mGxsId.serial_size() ;
|
||||
s += 4 ; // mOwnOpinion
|
||||
s += 4 ; // mOwnOpinionTS
|
||||
s += 4 ; // mIdentityFlags
|
||||
|
||||
s += mOwnerNodeId.serial_size() ;
|
||||
|
||||
s += 4 ; // mOpinions.size()
|
||||
|
||||
|
||||
s += (4+RsPeerId::serial_size()) * mOpinions.size() ;
|
||||
|
||||
return s ;
|
||||
|
||||
return s ;
|
||||
}
|
||||
|
||||
uint32_t RsGxsReputationBannedNodeSetItem::serial_size() const
|
||||
{
|
||||
uint32_t s = 8; /* header */
|
||||
|
||||
s += RsPgpId::serial_size() ; // mPgpId
|
||||
s += 4 ; // mLastActivityTS;
|
||||
s += mKnownIdentities.TlvSize(); // mKnownIdentities
|
||||
|
||||
return s ;
|
||||
}
|
||||
|
||||
uint32_t RsGxsReputationUpdateItem::serial_size() const
|
||||
|
@ -216,8 +245,10 @@ bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const
|
|||
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinion);
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, mOwnOpinionTS);
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, mIdentityFlags) ;
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size());
|
||||
|
||||
ok &= mOwnerNodeId.serialise(data,tlvsize,offset) ;
|
||||
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, mOpinions.size());
|
||||
|
||||
for(std::map<RsPeerId,uint32_t>::const_iterator it(mOpinions.begin());it!=mOpinions.end();++it)
|
||||
{
|
||||
ok &= it->first.serialise(data,tlvsize,offset) ;
|
||||
|
@ -232,6 +263,29 @@ bool RsGxsReputationSetItem::serialise(void *data, uint32_t& pktsize) const
|
|||
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool RsGxsReputationBannedNodeSetItem::serialise(void *data, uint32_t& pktsize) const
|
||||
{
|
||||
uint32_t tlvsize ;
|
||||
uint32_t offset=0;
|
||||
|
||||
if(!serialise_header(data,pktsize,tlvsize,offset))
|
||||
return false ;
|
||||
|
||||
bool ok = true;
|
||||
|
||||
ok &= mPgpId.serialise(data, tlvsize, offset) ;
|
||||
ok &= setRawUInt32(data, tlvsize, &offset, mLastActivityTS);
|
||||
ok &= mKnownIdentities.SetTlv(data, tlvsize, &offset) ;
|
||||
|
||||
if (offset != tlvsize)
|
||||
{
|
||||
ok = false;
|
||||
std::cerr << "RsGxsReputationSetItem::serialisedata() size error! " << std::endl;
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
bool RsGxsReputationUpdateItem::serialise(void *data, uint32_t& pktsize) const
|
||||
{
|
||||
uint32_t tlvsize ;
|
||||
|
@ -304,7 +358,28 @@ RsGxsReputationConfigItem *RsGxsReputationSerialiser::deserialiseReputationConfi
|
|||
|
||||
return item;
|
||||
}
|
||||
RsGxsReputationBannedNodeSetItem *RsGxsReputationSerialiser::deserialiseReputationBannedNodeSetItem(void *data,uint32_t size)
|
||||
{
|
||||
uint32_t offset = 8; // skip the header
|
||||
uint32_t rssize = getRsItemSize(data);
|
||||
bool ok = true ;
|
||||
|
||||
RsGxsReputationBannedNodeSetItem *item = new RsGxsReputationBannedNodeSetItem() ;
|
||||
|
||||
/* add mandatory parts first */
|
||||
ok &= item->mPgpId.deserialise(data, size, offset) ;
|
||||
ok &= getRawUInt32(data, size, &offset, &item->mLastActivityTS);
|
||||
ok &= item->mKnownIdentities.GetTlv(data,size,&offset) ;
|
||||
|
||||
if (offset != rssize || !ok)
|
||||
{
|
||||
std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl;
|
||||
delete item;
|
||||
return NULL ;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem_deprecated(void *data,uint32_t tlvsize)
|
||||
{
|
||||
uint32_t offset = 8; // skip the header
|
||||
|
@ -315,30 +390,32 @@ RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem_
|
|||
|
||||
/* add mandatory parts first */
|
||||
ok &= item->mGxsId.deserialise(data, tlvsize, offset) ;
|
||||
|
||||
item->mOwnerNodeId.clear(); // clears up, for backward compat.
|
||||
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion);
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS);
|
||||
|
||||
item->mIdentityFlags = REPUTATION_IDENTITY_FLAG_NEEDS_UPDATE; // special value that means please update me.
|
||||
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags);
|
||||
|
||||
uint32_t S ;
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &S);
|
||||
|
||||
|
||||
for(uint32_t i = 0; ok && (i < S); ++i)
|
||||
{
|
||||
RsPeerId pid ;
|
||||
uint32_t op ;
|
||||
|
||||
ok &= pid.deserialise(data, tlvsize, offset) ;
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &op);
|
||||
|
||||
|
||||
ok &= pid.deserialise(data, tlvsize, offset) ;
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &op);
|
||||
|
||||
if(ok)
|
||||
item->mOpinions[pid] = op ;
|
||||
item->mOpinions[pid] = op ;
|
||||
}
|
||||
|
||||
if (offset != rssize || !ok)
|
||||
{
|
||||
std::cerr << __PRETTY_FUNCTION__ << ": error while deserialising! Item will be dropped." << std::endl;
|
||||
delete item;
|
||||
delete item;
|
||||
return NULL ;
|
||||
}
|
||||
|
||||
|
@ -357,7 +434,8 @@ RsGxsReputationSetItem *RsGxsReputationSerialiser::deserialiseReputationSetItem(
|
|||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinion);
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mOwnOpinionTS);
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &item->mIdentityFlags);
|
||||
|
||||
ok &= item->mOwnerNodeId.deserialise(data, tlvsize, offset) ;
|
||||
|
||||
uint32_t S ;
|
||||
ok &= getRawUInt32(data, tlvsize, &offset, &S);
|
||||
|
||||
|
@ -455,12 +533,13 @@ RsItem *RsGxsReputationSerialiser::deserialise(void *data, uint32_t *pktsize)
|
|||
|
||||
switch(getRsItemSubType(rstype))
|
||||
{
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return deserialiseReputationSetItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated: return deserialiseReputationSetItem_deprecated(data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return deserialiseReputationUpdateItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM : return deserialiseReputationRequestItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return deserialiseReputationConfigItem (data, *pktsize);
|
||||
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM : return deserialiseReputationSetItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated : return deserialiseReputationSetItem_deprecated(data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_BANNED_NODE_SET_ITEM: return deserialiseReputationBannedNodeSetItem(data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM : return deserialiseReputationUpdateItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM : return deserialiseReputationRequestItem (data, *pktsize);
|
||||
case RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM : return deserialiseReputationConfigItem (data, *pktsize);
|
||||
|
||||
default:
|
||||
std::cerr << "RsGxsReputationSerialiser::deserialise(): unknown item subtype " << std::hex<< rstype << std::dec << std::endl;
|
||||
return NULL;
|
||||
|
|
|
@ -30,13 +30,16 @@
|
|||
|
||||
#include "serialiser/rsserviceids.h"
|
||||
#include "serialiser/rsserial.h"
|
||||
#include "serialiser/rstlvidset.h"
|
||||
#include "retroshare/rsgxsifacetypes.h"
|
||||
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated 0x02
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM 0x03
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM 0x04
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM 0x05
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_CONFIG_ITEM 0x01
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated2 0x02
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_UPDATE_ITEM 0x03
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_REQUEST_ITEM 0x04
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated 0x05
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM 0x06
|
||||
#define RS_PKT_SUBTYPE_GXS_REPUTATION_BANNED_NODE_SET_ITEM 0x07
|
||||
|
||||
/**************************************************************************/
|
||||
class RsReputationItem: public RsItem
|
||||
|
@ -68,31 +71,71 @@ public:
|
|||
virtual void clear() {}
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
virtual bool serialise(void *data,uint32_t& size) const ;
|
||||
virtual bool serialise(void *data,uint32_t& size) const ;
|
||||
virtual uint32_t serial_size() const ;
|
||||
|
||||
RsPeerId mPeerId;
|
||||
uint32_t mLatestUpdate; // timestamp they returned.
|
||||
uint32_t mLastQuery; // when we sent out.
|
||||
uint32_t mLastQuery; // when we sent out.
|
||||
};
|
||||
|
||||
// This class should disappear. Deprecated since Aug 1, 2016. The class definition is actually not needed,
|
||||
// that is why it's commented out. Kept here in order to explains how the deserialisation works.
|
||||
//
|
||||
// class RsGxsReputationSetItem_deprecated: public RsReputationItem
|
||||
// {
|
||||
// public:
|
||||
// RsGxsReputationSetItem_deprecated() :RsReputationItem(RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM_deprecated) {}
|
||||
//
|
||||
// virtual ~RsGxsReputationSetItem_deprecated() {}
|
||||
// virtual void clear() {}
|
||||
// std::ostream &print(std::ostream &out, uint16_t indent = 0) { return out;}
|
||||
//
|
||||
// virtual bool serialise(void *data,uint32_t& size) const { std::cerr << "(EE) serialise attempt for a deprecated reputation item. This should not happen" << std::endl; return false ; }
|
||||
// virtual uint32_t serial_size() const ;
|
||||
//
|
||||
// RsGxsId mGxsId;
|
||||
// uint32_t mOwnOpinion;
|
||||
// uint32_t mOwnOpinionTS;
|
||||
// uint32_t mIdentityFlags;
|
||||
// std::map<RsPeerId, uint32_t> mOpinions; // RsPeerId -> Opinion.
|
||||
// };
|
||||
|
||||
class RsGxsReputationSetItem: public RsReputationItem
|
||||
{
|
||||
public:
|
||||
RsGxsReputationSetItem() :RsReputationItem(RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM) {}
|
||||
RsGxsReputationSetItem() :RsReputationItem(RS_PKT_SUBTYPE_GXS_REPUTATION_SET_ITEM) {}
|
||||
|
||||
virtual ~RsGxsReputationSetItem() {}
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
virtual bool serialise(void *data,uint32_t& size) const ;
|
||||
virtual uint32_t serial_size() const ;
|
||||
|
||||
RsGxsId mGxsId;
|
||||
uint32_t mOwnOpinion;
|
||||
uint32_t mOwnOpinionTS;
|
||||
uint32_t mIdentityFlags ;
|
||||
std::map<RsPeerId, uint32_t> mOpinions; // RsPeerId -> Opinion.
|
||||
virtual bool serialise(void *data,uint32_t& size) const ;
|
||||
virtual uint32_t serial_size() const ;
|
||||
|
||||
RsGxsId mGxsId;
|
||||
uint32_t mOwnOpinion;
|
||||
uint32_t mOwnOpinionTS;
|
||||
uint32_t mIdentityFlags ;
|
||||
RsPgpId mOwnerNodeId;
|
||||
std::map<RsPeerId, uint32_t> mOpinions; // RsPeerId -> Opinion.
|
||||
};
|
||||
|
||||
class RsGxsReputationBannedNodeSetItem: public RsReputationItem
|
||||
{
|
||||
public:
|
||||
RsGxsReputationBannedNodeSetItem() :RsReputationItem(RS_PKT_SUBTYPE_GXS_REPUTATION_BANNED_NODE_SET_ITEM) {}
|
||||
|
||||
virtual ~RsGxsReputationBannedNodeSetItem() {}
|
||||
virtual void clear();
|
||||
std::ostream &print(std::ostream &out, uint16_t indent = 0);
|
||||
|
||||
virtual bool serialise(void *data,uint32_t& size) const ;
|
||||
virtual uint32_t serial_size() const ;
|
||||
|
||||
RsPgpId mPgpId ;
|
||||
uint32_t mLastActivityTS ;
|
||||
RsTlvGxsIdSet mKnownIdentities ;
|
||||
};
|
||||
|
||||
class RsGxsReputationUpdateItem: public RsReputationItem
|
||||
|
@ -145,11 +188,12 @@ public:
|
|||
virtual RsItem * deserialise(void *data, uint32_t *size);
|
||||
|
||||
private:
|
||||
static RsGxsReputationConfigItem *deserialiseReputationConfigItem (void *data, uint32_t size);
|
||||
static RsGxsReputationSetItem *deserialiseReputationSetItem (void *data, uint32_t size);
|
||||
static RsGxsReputationSetItem *deserialiseReputationSetItem_deprecated (void *data, uint32_t size);
|
||||
static RsGxsReputationUpdateItem *deserialiseReputationUpdateItem (void *data, uint32_t size);
|
||||
static RsGxsReputationRequestItem *deserialiseReputationRequestItem (void *data, uint32_t size);
|
||||
static RsGxsReputationConfigItem *deserialiseReputationConfigItem (void *data, uint32_t size);
|
||||
static RsGxsReputationSetItem *deserialiseReputationSetItem (void *data, uint32_t size);
|
||||
static RsGxsReputationSetItem *deserialiseReputationSetItem_deprecated (void *data, uint32_t size);
|
||||
static RsGxsReputationUpdateItem *deserialiseReputationUpdateItem (void *data, uint32_t size);
|
||||
static RsGxsReputationRequestItem *deserialiseReputationRequestItem (void *data, uint32_t size);
|
||||
static RsGxsReputationBannedNodeSetItem *deserialiseReputationBannedNodeSetItem (void *data, uint32_t size);
|
||||
};
|
||||
|
||||
/**************************************************************************/
|
||||
|
|
|
@ -298,7 +298,7 @@ uint32_t RsSerialiser::size(RsItem *item)
|
|||
{
|
||||
|
||||
#ifdef RSSERIAL_ERROR_DEBUG
|
||||
std::cerr << "RsSerialiser::size() ERROR serialiser missing!";
|
||||
std::cerr << "RsSerialiser::size() ERROR serialiser missing!" << std::endl;
|
||||
|
||||
std::string out;
|
||||
rs_sprintf(out, "%x", item->PacketId());
|
||||
|
|
|
@ -204,6 +204,7 @@ const uint16_t TLV_TYPE_PGPIDSET = 0x1023;
|
|||
const uint16_t TLV_TYPE_RECOGNSET = 0x1024;
|
||||
const uint16_t TLV_TYPE_GXSIDSET = 0x1025;
|
||||
const uint16_t TLV_TYPE_GXSCIRCLEIDSET= 0x1026;
|
||||
const uint16_t TLV_TYPE_NODEGROUPIDSET= 0x1027;
|
||||
|
||||
const uint16_t TLV_TYPE_SERVICESET = 0x1030;
|
||||
|
||||
|
|
|
@ -115,11 +115,12 @@ template<class ID_CLASS,uint32_t TLV_TYPE> class t_RsTlvIdSet: public RsTlvItem
|
|||
std::set<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 ;
|
||||
typedef t_RsTlvIdSet<RsGxsCircleId,TLV_TYPE_GXSCIRCLEIDSET> RsTlvGxsCircleIdSet ;
|
||||
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 ;
|
||||
typedef t_RsTlvIdSet<RsGxsCircleId,TLV_TYPE_GXSCIRCLEIDSET> RsTlvGxsCircleIdSet ;
|
||||
typedef t_RsTlvIdSet<RsNodeGroupId,TLV_TYPE_NODEGROUPIDSET> RsTlvNodeGroupIdSet ;
|
||||
|
||||
class RsTlvServiceIdSet: public RsTlvItem
|
||||
{
|
||||
|
|
|
@ -188,6 +188,76 @@ bool RsTlvRSAKey::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|||
return ok && checkKey() ;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RsTlvRSAKey::getKeyTypeTlv: Deserialize data in temp value to get type of key.
|
||||
* @param data: Serialized data
|
||||
* @param size: Size of the data
|
||||
* @param constoffset: Offset where find first data. Not updated by this function.
|
||||
* @return The keyFlag filtered by RSTLV_KEY_TYPE_MASK. 0 if failed
|
||||
*/
|
||||
uint32_t RsTlvRSAKey::getKeyTypeTlv(void *data, uint32_t size, uint32_t *constoffset) const
|
||||
{
|
||||
//Temporay Value. The same name than class to get same code than RsTlvRSAKey::GetTlv
|
||||
uint32_t offValue = *constoffset;
|
||||
uint32_t *offset = &offValue;
|
||||
RsGxsId keyId; // Mandatory :
|
||||
uint32_t keyFlags; // Mandatory ;
|
||||
//The Code below have to be same as RsTlvRSAKey::GetTlv excepted last lines until flag is desserialized.
|
||||
//Just comment TlvClear(); and unused values
|
||||
|
||||
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 */
|
||||
{
|
||||
#ifdef TLV_DEBUG
|
||||
std::cerr << "RsTlvSecurityKey::GetTlv() Fail, not enough space";
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
return false; /* not enough space */
|
||||
}
|
||||
|
||||
if (tlvtype != TLV_TYPE_SECURITY_KEY) /* check type */
|
||||
{
|
||||
#ifdef TLV_DEBUG
|
||||
std::cerr << "RsTlvSecurityKey::GetTlv() Fail, wrong type";
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ok = true;
|
||||
|
||||
/* ready to load */
|
||||
//TlvClear();//RsTlvRSAKey::getKeyTypeTlv
|
||||
|
||||
/* skip the header */
|
||||
(*offset) += TLV_HEADER_SIZE;
|
||||
#ifdef KEEP_OLD_SIGNATURE_SERIALISE_FORMAT
|
||||
std::string s ;
|
||||
ok &= GetTlvString(data, tlvend, offset, TLV_TYPE_STR_KEYID, s);
|
||||
keyId = RsGxsId(s) ;
|
||||
#else
|
||||
ok &= keyId.deserialise(data, tlvend, *offset) ;
|
||||
#endif
|
||||
ok &= getRawUInt32(data, tlvend, offset, &(keyFlags));
|
||||
//Stop here no need more data
|
||||
//RsTlvRSAKey::getKeyTypeTlv specific lines
|
||||
uint32_t ret = keyFlags & RSTLV_KEY_TYPE_MASK;
|
||||
if (!ok)
|
||||
{
|
||||
ret = 0;
|
||||
#ifdef TLV_DEBUG
|
||||
std::cerr << "RsTlvRSAKey::getKeyTypeTlv() Failed somewhere ok == false" << std::endl;
|
||||
#endif
|
||||
}
|
||||
return ret ;
|
||||
}
|
||||
|
||||
std::ostream& RsTlvRSAKey::print(std::ostream &out, uint16_t indent) const
|
||||
{
|
||||
printBase(out, "RsTlvSecurityKey", indent);
|
||||
|
@ -220,12 +290,36 @@ std::ostream& RsTlvRSAKey::print(std::ostream &out, uint16_t indent) const
|
|||
|
||||
bool RsTlvPrivateRSAKey::checkKey() const
|
||||
{
|
||||
return bool(keyFlags & RSTLV_KEY_TYPE_FULL) && !bool(keyFlags & RSTLV_KEY_TYPE_PUBLIC_ONLY) && GxsSecurity::checkPrivateKey(*this) ;
|
||||
bool keyFlags_TYPE_FULL = (keyFlags & RSTLV_KEY_TYPE_FULL);
|
||||
if (!keyFlags_TYPE_FULL) {std::cout << "RsTlvPrivateRSAKey::checkKey() keyFlags not Type Full " << std::hex << keyFlags << " & " << RSTLV_KEY_TYPE_FULL << std::dec << std::endl;}
|
||||
bool keyFlags_not_PUBLIC_ONLY = !(keyFlags & RSTLV_KEY_TYPE_PUBLIC_ONLY);
|
||||
if (!keyFlags_not_PUBLIC_ONLY) {std::cout << "RsTlvPrivateRSAKey::checkKey() keyFlags is Public Only " << std::hex << keyFlags << " & " << RSTLV_KEY_TYPE_PUBLIC_ONLY << std::dec << std::endl;}
|
||||
bool security_OK = false;
|
||||
if (keyFlags_TYPE_FULL && keyFlags_not_PUBLIC_ONLY)
|
||||
{
|
||||
//Don't trigg error if flags already wrong
|
||||
security_OK = GxsSecurity::checkPrivateKey(*this);
|
||||
if (!security_OK) {std::cout << "RsTlvPublicRSAKey::checkKey() key is not secure."<< std::endl;}
|
||||
}
|
||||
|
||||
return keyFlags_TYPE_FULL && keyFlags_not_PUBLIC_ONLY && security_OK ;
|
||||
}
|
||||
|
||||
bool RsTlvPublicRSAKey::checkKey() const
|
||||
{
|
||||
return bool(keyFlags & RSTLV_KEY_TYPE_PUBLIC_ONLY) && !bool(keyFlags & RSTLV_KEY_TYPE_FULL) && GxsSecurity::checkPublicKey(*this) ;
|
||||
{
|
||||
bool keyFlags_PUBLIC_ONLY = (keyFlags & RSTLV_KEY_TYPE_PUBLIC_ONLY);
|
||||
if (!keyFlags_PUBLIC_ONLY) {std::cout << "RsTlvPublicRSAKey::checkKey() keyFlags not Public Only " << std::hex << keyFlags << " & " << RSTLV_KEY_TYPE_PUBLIC_ONLY << std::dec << std::endl;}
|
||||
bool keyFlags_not_TYPE_FULL = !(keyFlags & RSTLV_KEY_TYPE_FULL);
|
||||
if (!keyFlags_not_TYPE_FULL) {std::cout << "RsTlvPublicRSAKey::checkKey() keyFlags is Type Full " << std::hex << keyFlags << " & " << RSTLV_KEY_TYPE_FULL << std::dec << std::endl;}
|
||||
bool security_OK = false;
|
||||
if (keyFlags_PUBLIC_ONLY && keyFlags_not_TYPE_FULL)
|
||||
{
|
||||
//Don't trigg error if flags already wrong
|
||||
security_OK = GxsSecurity::checkPublicKey(*this);
|
||||
if (!security_OK) {std::cout << "RsTlvPublicRSAKey::checkKey() key is not secure."<< std::endl;}
|
||||
}
|
||||
|
||||
return keyFlags_PUBLIC_ONLY && keyFlags_not_TYPE_FULL && security_OK ;
|
||||
}
|
||||
|
||||
/************************************* RsTlvSecurityKeySet ************************************/
|
||||
|
@ -320,21 +414,23 @@ bool RsTlvSecurityKeySet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|||
/* get the next type */
|
||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||
|
||||
// Security key set can be composed of public or private keys. We sort them into the correct bins after deserialisation
|
||||
|
||||
// Security key set can be composed of public or private keys. We first ask type to desserialize in good one to not trigg errors.
|
||||
switch(tlvsubtype)
|
||||
{
|
||||
case TLV_TYPE_SECURITY_KEY:
|
||||
{
|
||||
uint32_t offset_save = *offset ;
|
||||
|
||||
RsTlvPublicRSAKey public_key;
|
||||
|
||||
if(public_key.GetTlv(data, tlvend, offset))
|
||||
public_keys[public_key.keyId] = public_key;
|
||||
else
|
||||
RsTlvPublicRSAKey gen_key;
|
||||
uint32_t keyType = gen_key.getKeyTypeTlv(data, tlvend, offset);
|
||||
if(keyType == RSTLV_KEY_TYPE_PUBLIC_ONLY)
|
||||
{
|
||||
|
||||
RsTlvPublicRSAKey public_key;
|
||||
|
||||
if(public_key.GetTlv(data, tlvend, offset))
|
||||
public_keys[public_key.keyId] = public_key;
|
||||
}
|
||||
else if(keyType == RSTLV_KEY_TYPE_FULL)
|
||||
{
|
||||
*offset = offset_save ;
|
||||
|
||||
RsTlvPrivateRSAKey private_key;
|
||||
|
||||
|
@ -342,7 +438,7 @@ bool RsTlvSecurityKeySet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
|||
private_keys[private_key.keyId] = private_key;
|
||||
}
|
||||
}
|
||||
break ;
|
||||
break ;
|
||||
|
||||
default:
|
||||
ok &= SkipUnknownTlv(data, tlvend, offset);
|
||||
|
|
|
@ -63,7 +63,9 @@ public:
|
|||
|
||||
/* clears KeyData - but doesn't delete - to transfer ownership */
|
||||
void ShallowClear();
|
||||
|
||||
|
||||
uint32_t getKeyTypeTlv(void *data, uint32_t size, uint32_t *offset) const;
|
||||
|
||||
RsGxsId keyId; // Mandatory :
|
||||
uint32_t keyFlags; // Mandatory ;
|
||||
uint32_t startTS; // Mandatory :
|
||||
|
@ -75,17 +77,19 @@ public:
|
|||
|
||||
class RsTlvPrivateRSAKey: public RsTlvRSAKey
|
||||
{
|
||||
public:
|
||||
virtual ~RsTlvPrivateRSAKey() {}
|
||||
public:
|
||||
RsTlvPrivateRSAKey():RsTlvRSAKey() {}
|
||||
virtual ~RsTlvPrivateRSAKey() {}
|
||||
|
||||
virtual bool checkKey() const ;
|
||||
virtual bool checkKey() const ;
|
||||
};
|
||||
class RsTlvPublicRSAKey: public RsTlvRSAKey
|
||||
{
|
||||
public:
|
||||
virtual ~RsTlvPublicRSAKey() {}
|
||||
public:
|
||||
RsTlvPublicRSAKey():RsTlvRSAKey() {}
|
||||
virtual ~RsTlvPublicRSAKey() {}
|
||||
|
||||
virtual bool checkKey() const ;
|
||||
virtual bool checkKey() const ;
|
||||
};
|
||||
|
||||
class RsTlvSecurityKeySet: public RsTlvItem
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue