core modification for Qblog

*final modifications to qblog network messages: might need to consider 
wstring for profile kvsets tho
*update qblog core to hanldle messages
*updated interface with all methods we will ever need hopefully


git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@614 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2008-06-19 21:34:13 +00:00
parent 18112f7116
commit 2a44784999
11 changed files with 489 additions and 378 deletions

View file

@ -24,62 +24,56 @@
*
*/
#include <iostream>
#include "serialiser/rsbaseserial.h"
#include "serialiser/rsqblogitems.h"
#include "serialiser/rstlvbase.h"
#include <iostream>
/************************************************************/
RsQblogItem::~RsQblogItem(void)
RsQblogMsg::~RsQblogMsg(void)
{
return;
}
void RsQblogItem::clear()
void RsQblogMsg::clear()
{
blogMsg.first = 0;
blogMsg.second = "";
status = "";
timeStamp = 0;
blogMsg.clear();
}
std::ostream &RsQblogItem::print(std::ostream &out, uint16_t indent)
std::ostream &RsQblogMsg::print(std::ostream &out, uint16_t indent)
{
printRsItemBase(out, "RsQblogItem", indent);
printRsItemBase(out, "RsQblogMsg", indent);
uint16_t int_Indent = indent + 2;
/* print out the content of the item */
printIndent(out, int_Indent);
out << "blogMsg(time): " << blogMsg.first << std::endl;
out << "blogMsg(time): " << timeStamp << std::endl;
printIndent(out, int_Indent);
out << "blogMsg(message): " << blogMsg.second << std::endl;
std::string cnv_blog(blogMsg.begin(), blogMsg.end());
out << "blogMsg(message): " << cnv_blog << std::endl;
printIndent(out, int_Indent);
out << "status " << status << std::endl;
printIndent(out, int_Indent);
out << "pid " << pid << std::endl;
printRsItemEnd(out, "RsQblogItem", indent);
return out;
}
uint32_t RsQblogSerialiser::sizeItem(RsQblogItem *item)
uint32_t RsQblogMsgSerialiser::sizeItem(RsQblogMsg *item)
{
uint32_t s = 8; // for header size
s += 4; // blog creation time
s += GetTlvStringSize(item->blogMsg.second); // string part of blog
s += GetTlvStringSize(item->status);
s += GetTlvStringSize(item->favSong);
s += GetTlvStringSize(item->pid);
s += GetTlvWideStringSize(item->blogMsg); // size of actual blog
return s;
}
/*******************************************************************************/
bool RsQblogSerialiser::serialiseItem(RsQblogItem* item, void* data, uint32_t *size)
bool RsQblogMsgSerialiser::serialiseItem(RsQblogMsg* item, void* data, uint32_t *size)
{
uint32_t tlvsize = sizeItem(item);
uint32_t offset = 0;
@ -94,24 +88,22 @@ bool RsQblogSerialiser::serialiseItem(RsQblogItem* item, void* data, uint32_t *s
ok &= setRsItemHeader(data, tlvsize, item->PacketId(), tlvsize);
#ifdef RSSERIAL_DEBUG
std::cerr << "RsChatSerialiser::serialiseItem() Header: " << ok << std::endl;
std::cerr << "RsChatSerialiser::serialiseItem() Size: " << tlvsize << std::endl;
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->blogMsg.first);
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->blogMsg.second);
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->status);
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->favSong);
ok &= SetTlvString(data, tlvsize, &offset, TLV_TYPE_STR_MSG, item->favSong);
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 << "RsChatSerialiser::serialiseItem() Size Error! " << std::endl;
std::cerr << "RsQblogSerialiser::serialiseItem() Size Error! " << std::endl;
#endif
}
@ -120,7 +112,7 @@ bool RsQblogSerialiser::serialiseItem(RsQblogItem* item, void* data, uint32_t *s
/**************************************************************************/
RsQblogItem* RsQblogSerialiser::deserialiseItem(void * data, uint32_t *size)
RsQblogMsg* RsQblogMsgSerialiser::deserialiseItem(void * data, uint32_t *size)
{
/* get the type and size */
@ -146,18 +138,15 @@ RsQblogItem* RsQblogSerialiser::deserialiseItem(void * data, uint32_t *size)
bool ok = true;
/* ready to load */
RsQblogItem *item = new RsQblogItem();
RsQblogMsg *item = new RsQblogMsg();
item->clear();
/* skip the header */
offset += 8;
/* get mandatory parts first */
ok &= getRawUInt32(data, rssize, &offset, &(item->blogMsg.first));
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->blogMsg.second);
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->status);
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->favSong);
ok &= GetTlvString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->pid);
ok &= getRawUInt32(data, rssize, &offset, &(item->timeStamp));
ok &= GetTlvWideString(data, rssize, &offset, TLV_TYPE_STR_MSG, item->blogMsg);
if (offset != rssize)
{
@ -177,21 +166,180 @@ RsQblogItem* RsQblogSerialiser::deserialiseItem(void * data, uint32_t *size)
/*********************************************************************/
bool RsQblogSerialiser::serialise(RsItem *item, void* data, uint32_t* size)
bool RsQblogMsgSerialiser::serialise(RsItem *item, void* data, uint32_t* size)
{
return serialiseItem((RsQblogItem *) item, data, size);
return serialiseItem((RsQblogMsg *) item, data, size);
}
RsItem* RsQblogSerialiser::deserialise(void* data, uint32_t* size)
RsItem* RsQblogMsgSerialiser::deserialise(void* data, uint32_t* size)
{
return deserialiseItem(data, size);
}
uint32_t RsQblogSerialiser::size(RsItem *item)
uint32_t RsQblogMsgSerialiser::size(RsItem *item)
{
return sizeItem((RsQblogItem *) item);
return sizeItem((RsQblogMsg *) item);
}
/********************************************* RsQblogProfile section ***********************************/
/********************************************* RsQblogProfile section ***********************************/
/********************************************* RsQblogProfile section ***********************************/
RsQblogProfile::~RsQblogProfile(void)
{
return;
}
void RsQblogProfile::clear()
{
timeStamp = 0;
openProfile.TlvClear();
favoriteFiles.TlvClear();
}
std::ostream &RsQblogProfile::print(std::ostream &out, uint16_t indent)
{
printRsItemBase(out, "RsQblogProfile", indent);
uint16_t int_Indent = indent + 2;
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;
}
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;
}
/*******************************************************************************/
bool RsQblogProfileSerialiser::serialiseItem(RsQblogProfile* 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 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)
{
ok = false;
#ifdef RSSERIAL_DEBUG
std::cerr << "RsQblogSerialiser::serialiseItem() Size Error! " << std::endl;
#endif
}
return ok;
}
/**************************************************************************/
RsQblogProfile* RsQblogProfileSerialiser::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_QBLOG_PROFILE != 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 */
RsQblogProfile *item = new RsQblogProfile();
item->clear();
/* skip the header */
offset += 8;
/* get mandatory parts first */
RsTlvKeyValueSet* kvSetOpen;
RsTlvFileSet* fSet;
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)
{
/* error, improper item */
delete item;
return NULL;
}
if (!ok)
{
delete item;
return NULL;
}
return item;
}
/*********************************************************************/
bool RsQblogProfileSerialiser::serialise(RsItem *item, void* data, uint32_t* size)
{
return serialiseItem((RsQblogProfile *) item, data, size);
}
RsItem* RsQblogProfileSerialiser::deserialise(void* data, uint32_t* size)
{
return deserialiseItem(data, size);
}
uint32_t RsQblogProfileSerialiser::size(RsItem *item)
{
return sizeItem((RsQblogProfile *) item);
}