added revised qblog core

* added new tlv type rstlvwide key value pair for internationalisation
* profile interface method not fully implemented yet
* blog methods implemented          
* added extra constructor to facilitate extensibility (rename packet 
type)




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@625 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2008-06-26 13:08:48 +00:00
parent 993a5e901d
commit 93d785b8ff
10 changed files with 475 additions and 191 deletions

View file

@ -38,12 +38,6 @@ RsQblogMsg::~RsQblogMsg(void)
return;
}
void RsQblogMsg::clear()
{
timeStamp = 0;
blogMsg.clear();
}
std::ostream &RsQblogMsg::print(std::ostream &out, uint16_t indent)
{
@ -52,135 +46,19 @@ std::ostream &RsQblogMsg::print(std::ostream &out, uint16_t indent)
/* print out the content of the item */
printIndent(out, int_Indent);
out << "blogMsg(time): " << timeStamp << std::endl;
out << "blogMsg(send time): " << sendTime << std::endl;
printIndent(out, int_Indent);
std::string cnv_blog(blogMsg.begin(), blogMsg.end());
out << "blogMsg(recvd time): " << recvTime << std::endl;
printIndent(out, int_Indent);
std::string cnv_blog(message.begin(), message.end());
out << "blogMsg(message): " << cnv_blog << std::endl;
printIndent(out, int_Indent);
attachment.print(out, int_Indent);
printIndent(out, int_Indent);
return out;
}
uint32_t RsQblogMsgSerialiser::sizeItem(RsQblogMsg *item)
{
uint32_t s = 8; // for header size
s += 4; // blog creation time
s += GetTlvWideStringSize(item->blogMsg); // size of actual blog
return s;
}
/*******************************************************************************/
bool RsQblogMsgSerialiser::serialiseItem(RsQblogMsg* item, void* data, uint32_t *size)
{
uint32_t tlvsize = sizeItem(item);
uint32_t offset = 0;
if (*size < tlvsize)
return false; /* not enough space */
*size = tlvsize;
bool ok = true;
ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize);
#ifdef RSSERIAL_DEBUG
std::cerr << "RsQblogSerialiser::serialiseItem() Header: " << ok << std::endl;
std::cerr << "RsQblogSerialiser::serialiseItem() Size: " << tlvsize << std::endl;
#endif
/* skip the header */
offset += 8;
/* add mandatory parts first */
ok &= setRawUInt32(data, tlvsize, &offset, item->timeStamp);
ok &= SetTlvWideString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->blogMsg);
if (offset != tlvsize)
{
ok = false;
#ifdef RSSERIAL_DEBUG
std::cerr << "RsQblogSerialiser::serialiseItem() Size Error! " << std::endl;
#endif
}
return ok;
}
/**************************************************************************/
RsQblogMsg* RsQblogMsgSerialiser::deserialiseItem(void * data, uint32_t *size)
{
/* get the type and size */
uint32_t rstype = getRsItemId(data);
uint32_t rssize = getRsItemSize(data);
uint32_t offset = 0;
if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) ||
(RS_SERVICE_TYPE_QBLOG != getRsItemService(rstype)) ||
(RS_PKT_SUBTYPE_DEFAULT != getRsItemSubType(rstype)))
{
return NULL; /* wrong type */
}
if (*size < rssize) /* check size */
return NULL; /* not enough data */
/* set the packet length */
*size = rssize;
bool ok = true;
/* ready to load */
RsQblogMsg *item = new RsQblogMsg();
item->clear();
/* skip the header */
offset += 8;
/* get mandatory parts first */
ok &= getRawUInt32(data, rssize, &offset, &(item->timeStamp));
ok &= GetTlvWideString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->blogMsg);
if (offset != rssize)
{
/* error */
delete item;
return NULL;
}
if (!ok)
{
delete item;
return NULL;
}
return item;
}
/*********************************************************************/
bool RsQblogMsgSerialiser::serialise(RsItem *item, void* data, uint32_t* size)
{
return serialiseItem((RsQblogMsg *) item, data, size);
}
RsItem* RsQblogMsgSerialiser::deserialise(void* data, uint32_t* size)
{
return deserialiseItem(data, size);
}
uint32_t RsQblogMsgSerialiser::size(RsItem *item)
{
return sizeItem((RsQblogMsg *) item);
}
/********************************************* RsQblogProfile section ***********************************/
/********************************************* RsQblogProfile section ***********************************/
/********************************************* RsQblogProfile section ***********************************/
@ -194,7 +72,6 @@ void RsQblogProfile::clear()
{
timeStamp = 0;
openProfile.TlvClear();
favoriteFiles.TlvClear();
}
@ -205,8 +82,6 @@ std::ostream &RsQblogProfile::print(std::ostream &out, uint16_t indent)
out << "RsQblogProfile::print() : timeStamp" << timeStamp;
out << std::endl;
openProfile.print(out, int_Indent);
favoriteFiles.print(out, int_Indent);
favoriteFiles.print(out, int_Indent);
printRsItemEnd(out, "RsQblogProfile", indent);
return out;
}
@ -218,7 +93,6 @@ uint32_t RsQblogProfileSerialiser::sizeItem(RsQblogProfile *item)
uint32_t s = 8; // for header size
s += 4; // time stamp
s += item->openProfile.TlvSize();
s += item->favoriteFiles.TlvSize();
return s;
}
@ -249,7 +123,6 @@ bool RsQblogProfileSerialiser::serialiseItem(RsQblogProfile* item, void* data, u
/* add mandatory part */
ok &= setRawUInt32(data, tlvsize, &offset, item->timeStamp);
ok &= item->openProfile.SetTlv(data, *size, &offset);
ok &= item->favoriteFiles.SetTlv(data, *size, &offset);
if (offset != tlvsize)
{
@ -297,17 +170,14 @@ RsQblogProfile* RsQblogProfileSerialiser::deserialiseItem(void * data, uint32_t
offset += 8;
/* get mandatory parts first */
RsTlvKeyValueSet* kvSetOpen;
RsTlvFileSet* fSet;
RsTlvKeyValueWideSet* kvSetOpen;
ok &= getRawUInt32(data, rssize, &offset, &(item->timeStamp));
ok &= kvSetOpen->GetTlv(data, *size, &offset);
ok &= fSet->GetTlv(data, *size, &offset);
/* copy over deserialised files */
item->openProfile = *kvSetOpen;
item->favoriteFiles = *fSet;
if (offset != rssize)
{