mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-20 20:34:25 -04:00
converted RsMsgItems to new serialization. Added format and flag members to RsSerialiser and used the later to handle signature and config serialization techniques
This commit is contained in:
parent
63b4b3a1f7
commit
31c07f4dfd
10 changed files with 202 additions and 183 deletions
|
@ -222,7 +222,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const
|
|||
|
||||
mGixs->requestKey(obj->signature.keyId,peer_list,RsIdentityUsage(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id));
|
||||
|
||||
uint32_t size = obj->serial_size_for_signature() ;
|
||||
uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)obj) ;
|
||||
RsTemporaryMemory memory(size) ;
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
|
@ -230,7 +230,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const
|
|||
std::cerr << " signature id: " << obj->signature.keyId << std::endl;
|
||||
#endif
|
||||
|
||||
if(!obj->serialize_for_signature(memory,size))
|
||||
if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)obj,memory,&size))
|
||||
{
|
||||
std::cerr << " (EE) Cannot serialise message item. " << std::endl;
|
||||
return false ;
|
||||
|
@ -239,7 +239,7 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const
|
|||
uint32_t error_status ;
|
||||
RsIdentityUsage use_info(RS_SERVICE_TYPE_CHAT,RsIdentityUsage::CHAT_LOBBY_MSG_VALIDATION,RsGxsGroupId(),RsGxsMessageId(),obj->lobby_id) ;
|
||||
|
||||
if(!mGixs->validateData(memory,obj->serial_size_for_signature(),obj->signature,false,use_info,error_status))
|
||||
if(!mGixs->validateData(memory,size,obj->signature,false,use_info,error_status))
|
||||
{
|
||||
bool res = false ;
|
||||
|
||||
|
@ -970,10 +970,10 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
|||
|
||||
// now sign the object, if the lobby expects it
|
||||
|
||||
uint32_t size = item.serial_size_for_signature() ;
|
||||
uint32_t size = RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).size((RsItem*)&item) ;
|
||||
RsTemporaryMemory memory(size) ;
|
||||
|
||||
if(!item.serialize_for_signature(memory,size))
|
||||
if(!RsChatSerialiser(RsSerializer::SERIALIZATION_FLAG_SIGNATURE).serialise((RsItem*)&item,memory,&size))
|
||||
{
|
||||
std::cerr << "(EE) Cannot sign message item. " << std::endl;
|
||||
return false ;
|
||||
|
|
|
@ -80,13 +80,13 @@ RsChatAvatarItem::~RsChatAvatarItem()
|
|||
}
|
||||
}
|
||||
|
||||
void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx, bool include_signature)
|
||||
void RsChatLobbyBouncingObject::serial_process(RsItem::SerializeJob j, SerializeContext& ctx)
|
||||
{
|
||||
RsTypeSerializer::serial_process(j,ctx,lobby_id,"lobby_id") ;
|
||||
RsTypeSerializer::serial_process(j,ctx,msg_id ,"msg_id") ;
|
||||
RsTypeSerializer::serial_process(j,ctx,TLV_TYPE_STR_NAME,nick,"nick") ;
|
||||
|
||||
if(include_signature)
|
||||
if(!(ctx.mFlags & RsSerializer::SERIALIZATION_FLAG_SIGNATURE))
|
||||
RsTypeSerializer::serial_process<RsTlvItem>(j,ctx,signature,"signature") ;
|
||||
}
|
||||
|
||||
|
@ -94,13 +94,7 @@ void RsChatLobbyMsgItem::serial_process(RsItem::SerializeJob j,SerializeContext&
|
|||
{
|
||||
RsChatMsgItem::serial_process(j,ctx) ;
|
||||
RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ;
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx,true) ;
|
||||
}
|
||||
void RsChatLobbyMsgItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx)
|
||||
{
|
||||
RsChatMsgItem::serial_process(j,ctx) ;
|
||||
RsTypeSerializer::serial_process(j,ctx,parent_msg_id,"parent_msg_id") ;
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx,false) ;
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx) ;
|
||||
}
|
||||
|
||||
void RsChatLobbyListRequestItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx)
|
||||
|
@ -129,15 +123,7 @@ void RsChatLobbyEventItem::serial_process(RsItem::SerializeJob j,SerializeContex
|
|||
RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ;
|
||||
RsTypeSerializer::serial_process<uint32_t>(j,ctx,sendTime ,"sendTime") ;
|
||||
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx,true) ;
|
||||
}
|
||||
void RsChatLobbyEventItem::serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx)
|
||||
{
|
||||
RsTypeSerializer::serial_process<uint8_t>(j,ctx,event_type,"event_type") ;
|
||||
RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,string1,"string1") ;
|
||||
RsTypeSerializer::serial_process<uint32_t>(j,ctx,sendTime ,"sendTime") ;
|
||||
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx,false) ;
|
||||
RsChatLobbyBouncingObject::serial_process(j,ctx) ;
|
||||
}
|
||||
void RsChatLobbyUnsubscribeItem::serial_process(RsItem::SerializeJob j,SerializeContext& ctx)
|
||||
{
|
||||
|
@ -209,41 +195,4 @@ void RsPrivateChatMsgConfigItem::get(RsChatMsgItem *ci)
|
|||
ci->recvTime = recvTime;
|
||||
}
|
||||
|
||||
uint32_t RsChatLobbyBouncingObject::serial_size_for_signature() const
|
||||
{
|
||||
SerializeContext ctx(NULL,0);
|
||||
|
||||
ctx.mOffset = 8;
|
||||
|
||||
const_cast<RsChatLobbyBouncingObject*>(this)->serial_process_for_signature(RsItem::SIZE_ESTIMATE,ctx) ;
|
||||
|
||||
return ctx.mOffset ;
|
||||
}
|
||||
|
||||
bool RsChatLobbyBouncingObject::serialize_for_signature(uint8_t *data,uint32_t size) const
|
||||
{
|
||||
SerializeContext ctx(data,0);
|
||||
|
||||
uint32_t tlvsize = serial_size_for_signature() ;
|
||||
|
||||
if(tlvsize > size)
|
||||
throw std::runtime_error("Cannot serialise: not enough room.") ;
|
||||
|
||||
if(!setRsItemHeader(data, tlvsize, PacketId(), tlvsize))
|
||||
{
|
||||
std::cerr << "RsSerializer::serialise_item(): ERROR. Not enough size!" << std::endl;
|
||||
return false ;
|
||||
}
|
||||
ctx.mOffset = 8;
|
||||
ctx.mSize = tlvsize;
|
||||
|
||||
const_cast<RsChatLobbyBouncingObject*>(this)->serial_process_for_signature(RsItem::SERIALIZE,ctx) ;
|
||||
|
||||
if(ctx.mSize != ctx.mOffset)
|
||||
{
|
||||
std::cerr << "RsChatSerializer::serialise_item(): ERROR. offset does not match expected size!" << std::endl;
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
|
|
@ -137,16 +137,12 @@ public:
|
|||
|
||||
virtual RsChatLobbyBouncingObject *duplicate() const = 0 ;
|
||||
|
||||
uint32_t serial_size_for_signature() const ;
|
||||
bool serialize_for_signature(uint8_t *data,uint32_t size) const ;
|
||||
|
||||
protected:
|
||||
// The functions below handle the serialisation of data that is specific to the bouncing object level.
|
||||
// They are called by serial_size() and serialise() from children, but should not overload the serial_size() and
|
||||
// serialise() methods, otherwise the wrong method will be called when serialising from this top level class.
|
||||
|
||||
virtual void serial_process(RsItem::SerializeJob j,SerializeContext& ctx,bool include_signature);
|
||||
virtual void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx)=0;
|
||||
virtual void serial_process(RsItem::SerializeJob j, SerializeContext& ctx);
|
||||
|
||||
virtual uint32_t PacketId() const= 0;
|
||||
};
|
||||
|
@ -160,7 +156,6 @@ public:
|
|||
virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyMsgItem(*this) ; }
|
||||
|
||||
void serial_process(RsItem::SerializeJob j,SerializeContext& ctx) ;
|
||||
void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand
|
||||
|
||||
ChatLobbyMsgId parent_msg_id ; // Used for threaded chat.
|
||||
|
||||
|
@ -177,7 +172,6 @@ public:
|
|||
virtual RsChatLobbyBouncingObject *duplicate() const { return new RsChatLobbyEventItem(*this) ; }
|
||||
//
|
||||
void serial_process(RsItem::SerializeJob j,SerializeContext& ctx);
|
||||
void serial_process_for_signature(RsItem::SerializeJob j,SerializeContext& ctx) ; // This one is new, and used to add/remove signature on demand
|
||||
|
||||
// members.
|
||||
//
|
||||
|
@ -330,7 +324,8 @@ class RsChatAvatarItem: public RsChatItem
|
|||
class RsChatSerialiser: public RsSerializer
|
||||
{
|
||||
public:
|
||||
RsChatSerialiser() :RsSerializer(RS_SERVICE_TYPE_CHAT) {}
|
||||
RsChatSerialiser(SerializationFlags flags = SERIALIZATION_FLAG_NONE)
|
||||
:RsSerializer(RS_SERVICE_TYPE_CHAT,SerializeContext::FORMAT_BINARY,flags) {}
|
||||
|
||||
virtual RsItem *create_item(uint16_t service_id,uint8_t item_sub_id) const ;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue