/* * libretroshare/src/serialiser: rsbaseitems.cc * * RetroShare Serialiser. * * Copyright 2007-2008 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 #include #include "serialiser/rsbaseserial.h" #include "serialiser/rstlvbase.h" #include "rsitems/rsmsgitems.h" #include "serialization/rstypeserializer.h" /*** #define RSSERIAL_DEBUG 1 ***/ #include RsItem *RsMsgSerialiser::create_item(uint16_t service,uint8_t type) const { if(service != RS_SERVICE_TYPE_MSG) return NULL ; switch(type) { case RS_PKT_SUBTYPE_DEFAULT : return new RsMsgItem() ; //= 0x01; case RS_PKT_SUBTYPE_MSG_TAG_TYPE : return new RsMsgTagType() ; //= 0x03; case RS_PKT_SUBTYPE_MSG_TAGS : return new RsMsgTags() ; //= 0x04; case RS_PKT_SUBTYPE_MSG_SRC_TAG : return new RsMsgSrcId(); //= 0x05; case RS_PKT_SUBTYPE_MSG_PARENT_TAG : return new RsMsgParentId() ; //= 0x06; case RS_PKT_SUBTYPE_MSG_INVITE : return new RsPublicMsgInviteConfigItem(); //= 0x07; case RS_PKT_SUBTYPE_MSG_GROUTER_MAP : return new RsMsgGRouterMap(); //= 0x08; case RS_PKT_SUBTYPE_MSG_DISTANT_MSG_MAP : return new RsMsgDistantMessagesHashMap();//= 0x09; default: return NULL ; } } void RsMsgItem::clear() { msgId = 0; msgFlags = 0; sendTime = 0; recvTime = 0; subject.clear(); message.clear(); rspeerid_msgto.TlvClear(); rspeerid_msgcc.TlvClear(); rspeerid_msgbcc.TlvClear(); rsgxsid_msgto.TlvClear(); rsgxsid_msgcc.TlvClear(); rsgxsid_msgbcc.TlvClear(); attachment.TlvClear(); } void RsPublicMsgInviteConfigItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_HASH_SHA1,hash,"hash") ; RsTypeSerializer::serial_process(j,ctx,(uint32_t&)time_stamp,"time_stamp") ; } void RsMsgTagType::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,text,"text") ; RsTypeSerializer::serial_process(j,ctx,rgb_color,"rgb_color") ; RsTypeSerializer::serial_process(j,ctx,tagId,"tagId") ; } void RsMsgTags::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; #warning this is not the correct way to serialise here. We should directly call serial_process >() but for backward compatibility, we cannot if(j == RsGenericSerializer::DESERIALIZE) while(ctx.mOffset < ctx.mSize) { uint32_t n ; RsTypeSerializer::serial_process(j,ctx,n,"tagIds element") ; tagIds.push_back(n) ; } else for(std::list::iterator it(tagIds.begin());it!=tagIds.end();++it) RsTypeSerializer::serial_process(j,ctx,*it,"tagIds element") ; } void RsMsgSrcId::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; RsTypeSerializer::serial_process (j,ctx,srcId,"srcId") ; } void RsMsgGRouterMap::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,ongoing_msgs,"ongoing_msgs") ; } void RsMsgGRouterMap::clear() { ongoing_msgs.clear() ; return; } void RsMsgDistantMessagesHashMap::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,hash_map,"hash_map") ; } void RsMsgParentId::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgId,"msgId") ; RsTypeSerializer::serial_process(j,ctx,msgParentId,"msgParentId") ; } void RsMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx,msgFlags,"msgFlags"); RsTypeSerializer::serial_process(j,ctx,sendTime,"sendTime"); RsTypeSerializer::serial_process(j,ctx,recvTime,"recvTime"); RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_SUBJECT,subject,"subject"); RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_MSG,message,"message"); RsTypeSerializer::serial_process(j,ctx,rspeerid_msgto,"rspeerid_msgto"); RsTypeSerializer::serial_process(j,ctx,rspeerid_msgcc,"rspeerid_msgcc"); RsTypeSerializer::serial_process(j,ctx,rspeerid_msgbcc,"rspeerid_msgbcc"); RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgto,"rsgxsid_msgto"); RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgcc,"rsgxsid_msgcc"); RsTypeSerializer::serial_process(j,ctx,rsgxsid_msgbcc,"rsgxsid_msgbcc"); RsTypeSerializer::serial_process(j,ctx,attachment,"attachment"); if(ctx.mFlags & RsServiceSerializer::SERIALIZATION_FLAG_CONFIG) RsTypeSerializer::serial_process(j,ctx,msgId,"msgId"); } void RsMsgTagType::clear() { text.clear(); tagId = 0; rgb_color = 0; } void RsPublicMsgInviteConfigItem::clear() { hash.clear() ; time_stamp = 0 ; } void RsMsgTags::clear() { msgId = 0; tagIds.clear(); }