2013-11-02 10:35:33 -04:00
# include "serialiser/rsbaseserial.h"
# include "serialiser/rstlvbase.h"
# include "grouteritems.h"
/**********************************************************************************************/
/* SERIALISATION */
/**********************************************************************************************/
bool RsGRouterItem : : serialise_header ( void * data , uint32_t & pktsize , uint32_t & tlvsize , uint32_t & offset ) const
{
tlvsize = serial_size ( ) ;
offset = 0 ;
if ( pktsize < tlvsize )
return false ; /* not enough space */
pktsize = tlvsize ;
if ( ! setRsItemHeader ( data , tlvsize , PacketId ( ) , tlvsize ) )
{
std : : cerr < < " RsFileTransferItem::serialise_header(): ERROR. Not enough size! " < < std : : endl ;
return false ;
}
# ifdef RSSERIAL_DEBUG
std : : cerr < < " RsFileItemSerialiser::serialiseData() Header: " < < ok < < std : : endl ;
# endif
offset + = 8 ;
return true ;
}
/* serialise the data to the buffer */
uint32_t RsGRouterPublishKeyItem : : serial_size ( ) const
{
uint32_t s = 8 ; // header
2014-01-03 17:41:20 -05:00
s + = POW_PAYLOAD_SIZE ; // proof of work bytes
2013-12-23 11:05:46 -05:00
s + = 4 ; // diffusion_id
2014-03-29 10:18:05 -04:00
s + = published_key . serial_size ( ) ; // sha1 for published_key
2013-12-23 11:05:46 -05:00
s + = 4 ; // service id
s + = 4 ; // randomized distance
2013-11-02 10:35:33 -04:00
s + = GetTlvStringSize ( description_string ) ; // description
2014-03-29 10:18:05 -04:00
s + = fingerprint . serial_size ( ) ; // fingerprint
2013-11-02 10:35:33 -04:00
return s ;
}
bool RsGRouterPublishKeyItem : : serialise ( void * data , uint32_t & pktsize ) const
{
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
if ( ! serialise_header ( data , pktsize , tlvsize , offset ) )
return false ;
2014-01-03 17:41:20 -05:00
memcpy ( & ( ( uint8_t * ) data ) [ offset ] , pow_bytes , POW_PAYLOAD_SIZE ) ;
offset + = 8 ;
2013-11-02 10:35:33 -04:00
/* add mandatory parts first */
2014-03-17 16:56:06 -04:00
ok & = setRawUInt32 ( data , tlvsize , & offset , diffusion_id ) ;
ok & = published_key . serialise ( data , tlvsize , offset ) ;
2013-12-23 11:05:46 -05:00
ok & = setRawUInt32 ( data , tlvsize , & offset , service_id ) ;
ok & = setRawUFloat32 ( data , tlvsize , & offset , randomized_distance ) ;
2013-11-02 10:35:33 -04:00
ok & = SetTlvString ( data , tlvsize , & offset , TLV_TYPE_STR_VALUE , description_string ) ;
2014-03-17 16:56:06 -04:00
ok & = fingerprint . serialise ( data , tlvsize , offset ) ;
2013-11-02 10:35:33 -04:00
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " RsFileItemSerialiser::serialiseData() Size Error! " < < std : : endl ;
}
return ok ;
}
2014-01-03 17:41:20 -05:00
/**********************************************************************************************/
/* PROOF OF WORK STUFF */
/**********************************************************************************************/
bool RsGRouterProofOfWorkObject : : checkProofOfWork ( )
{
uint32_t size = serial_size ( ) ;
unsigned char * mem = ( unsigned char * ) malloc ( size ) ;
if ( mem = = NULL )
{
std : : cerr < < " RsGRouterProofOfWorkObject: cannot allocate memory for " < < size < < " bytes. " < < std : : endl ;
return false ;
}
serialise ( mem , size ) ;
bool res = checkProofOfWork ( mem , size ) ;
free ( mem ) ;
return res ;
}
bool RsGRouterProofOfWorkObject : : updateProofOfWork ( )
{
uint32_t size = serial_size ( ) ;
unsigned char * mem = ( unsigned char * ) malloc ( size ) ;
if ( mem = = NULL )
{
std : : cerr < < " RsGRouterProofOfWorkObject: cannot allocate memory for " < < size < < " bytes. " < < std : : endl ;
return false ;
}
serialise ( mem , size ) ;
memset ( mem , 0 , POW_PAYLOAD_SIZE ) ; // init the payload
while ( true )
{
if ( checkProofOfWork ( mem , size ) )
break ;
int k ;
for ( k = 0 ; k < POW_PAYLOAD_SIZE ; + + k )
{
+ + mem [ k ] ;
if ( mem [ k ] ! = 0 )
break ;
}
if ( k = = POW_PAYLOAD_SIZE )
return false ;
}
memcpy ( pow_bytes , mem , POW_PAYLOAD_SIZE ) ; // copy the good bytes.
free ( mem ) ;
return true ;
}
bool RsGRouterProofOfWorkObject : : checkProofOfWork ( unsigned char * mem , uint32_t size )
{
Sha1CheckSum sum = RsDirUtil : : sha1sum ( mem , size ) ;
2014-03-17 16:56:06 -04:00
for ( int i = 0 ; i < PROOF_OF_WORK_REQUESTED_BYTES ; + + i )
if ( sum . toByteArray ( ) [ i ] ! = 0 )
return false ;
2014-01-03 17:41:20 -05:00
return true ;
}
2013-11-02 10:35:33 -04:00
/**********************************************************************************************/
/* SERIALISER STUFF */
/**********************************************************************************************/
RsItem * RsGRouterSerialiser : : deserialise ( void * data , uint32_t * pktsize )
{
/* get the type and size */
uint32_t rstype = getRsItemId ( data ) ;
if ( RS_PKT_VERSION_SERVICE ! = getRsItemVersion ( rstype ) | | RS_SERVICE_TYPE_GROUTER ! = getRsItemService ( rstype ) )
{
return NULL ; /* wrong type */
}
switch ( getRsItemSubType ( rstype ) )
{
case RS_PKT_SUBTYPE_GROUTER_PUBLISH_KEY : return deserialise_RsGRouterPublishKeyItem ( data , * pktsize ) ;
2013-12-23 11:05:46 -05:00
case RS_PKT_SUBTYPE_GROUTER_DATA : return deserialise_RsGRouterGenericDataItem ( data , * pktsize ) ;
2013-11-02 10:35:33 -04:00
case RS_PKT_SUBTYPE_GROUTER_ACK : return deserialise_RsGRouterACKItem ( data , * pktsize ) ;
2013-12-27 15:06:47 -05:00
case RS_PKT_SUBTYPE_GROUTER_MATRIX_CLUES : return deserialise_RsGRouterMatrixCluesItem ( data , * pktsize ) ;
case RS_PKT_SUBTYPE_GROUTER_FRIENDS_LIST : return deserialise_RsGRouterMatrixFriendListItem ( data , * pktsize ) ;
case RS_PKT_SUBTYPE_GROUTER_ROUTING_INFO : return deserialise_RsGRouterRoutingInfoItem ( data , * pktsize ) ;
2013-11-02 10:35:33 -04:00
default :
std : : cerr < < " RsGRouterSerialiser::deserialise(): Could not de-serialise item. SubPacket id = " < < std : : hex < < getRsItemSubType ( rstype ) < < " id = " < < rstype < < std : : dec < < std : : endl ;
return NULL ;
}
return NULL ;
}
2014-03-29 10:18:05 -04:00
RsGRouterPublishKeyItem * RsGRouterSerialiser : : deserialise_RsGRouterPublishKeyItem ( void * data , uint32_t pktsize ) const
2013-11-02 10:35:33 -04:00
{
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterPublishKeyItem * item = new RsGRouterPublishKeyItem ( ) ;
2014-01-03 17:41:20 -05:00
memcpy ( & ( ( uint8_t * ) data ) [ offset ] , item - > pow_bytes , RsGRouterProofOfWorkObject : : POW_PAYLOAD_SIZE ) ;
offset + = 8 ;
2013-12-23 11:05:46 -05:00
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > diffusion_id ) ; // file hash
2014-03-17 16:56:06 -04:00
ok & = item - > published_key . deserialise ( data , pktsize , offset ) ;
2013-12-23 11:05:46 -05:00
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > service_id ) ; // file hash
ok & = getRawUFloat32 ( data , pktsize , & offset , item - > randomized_distance ) ; // file hash
2013-11-02 10:35:33 -04:00
ok & = GetTlvString ( data , pktsize , & offset , TLV_TYPE_STR_VALUE , item - > description_string ) ;
2014-03-17 16:56:06 -04:00
ok & = item - > fingerprint . deserialise ( data , pktsize , offset ) ;
2013-11-02 10:35:33 -04:00
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
return item ;
}
2014-03-29 10:18:05 -04:00
RsGRouterGenericDataItem * RsGRouterSerialiser : : deserialise_RsGRouterGenericDataItem ( void * data , uint32_t pktsize ) const
2013-11-02 10:35:33 -04:00
{
2013-12-23 11:05:46 -05:00
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterGenericDataItem * item = new RsGRouterGenericDataItem ( ) ;
2014-03-29 10:18:05 -04:00
ok & = getRawUInt64 ( data , pktsize , & offset , & item - > routing_id ) ;
ok & = item - > destination_key . deserialise ( data , pktsize , offset ) ;
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > randomized_distance ) ;
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > data_size ) ;
2013-12-23 11:05:46 -05:00
if ( NULL = = ( item - > data_bytes = ( uint8_t * ) malloc ( item - > data_size ) ) )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : Cannot allocate memory for chunk " < < item - > data_size < < std : : endl ;
return NULL ;
}
memcpy ( item - > data_bytes , & ( ( uint8_t * ) data ) [ offset ] , item - > data_size ) ;
offset + = item - > data_size ;
2013-11-02 10:35:33 -04:00
2013-12-23 11:05:46 -05:00
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
return item ;
2013-11-02 10:35:33 -04:00
}
2014-03-29 10:18:05 -04:00
RsGRouterACKItem * RsGRouterSerialiser : : deserialise_RsGRouterACKItem ( void * data , uint32_t pktsize ) const
2013-11-02 10:35:33 -04:00
{
2013-12-23 11:05:46 -05:00
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterACKItem * item = new RsGRouterACKItem ( ) ;
2014-03-29 10:18:05 -04:00
ok & = getRawUInt64 ( data , pktsize , & offset , & item - > mid ) ; // file hash
2013-12-23 11:05:46 -05:00
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > state ) ; // file hash
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
2013-11-02 10:35:33 -04:00
2013-12-23 11:05:46 -05:00
return item ;
2013-11-02 10:35:33 -04:00
}
2014-03-29 10:18:05 -04:00
RsGRouterRoutingInfoItem * RsGRouterSerialiser : : deserialise_RsGRouterRoutingInfoItem ( void * data , uint32_t pktsize ) const
2013-12-27 15:06:47 -05:00
{
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterRoutingInfoItem * item = new RsGRouterRoutingInfoItem ( ) ;
ok & = getRawUInt32 ( data , pktsize , & offset , & item - > status_flags ) ;
2014-03-29 10:18:05 -04:00
ok & = item - > origin . deserialise ( data , pktsize , offset ) ;
2013-12-27 15:06:47 -05:00
ok & = getRawTimeT ( data , pktsize , & offset , item - > received_time ) ;
uint32_t s = 0 ;
ok & = getRawUInt32 ( data , pktsize , & offset , & s ) ;
for ( uint32_t i = 0 ; i < s ; + + i )
{
FriendTrialRecord ftr ;
2014-03-29 10:18:05 -04:00
ok & = ftr . friend_id . deserialise ( data , pktsize , offset ) ;
2013-12-27 15:06:47 -05:00
ok & = getRawTimeT ( data , pktsize , & offset , ftr . time_stamp ) ;
2014-03-29 10:18:05 -04:00
ok & = getRawUFloat32 ( data , pktsize , & offset , ftr . probability ) ;
ok & = getRawUInt32 ( data , pktsize , & offset , & ftr . nb_friends ) ;
2013-12-27 15:06:47 -05:00
item - > tried_friends . push_back ( ftr ) ;
}
2014-03-29 10:18:05 -04:00
item - > data_item = deserialise_RsGRouterGenericDataItem ( & ( ( uint8_t * ) data ) [ offset ] , pktsize - offset ) ;
2013-12-27 15:06:47 -05:00
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
return item ;
}
2014-03-29 10:18:05 -04:00
RsGRouterMatrixFriendListItem * RsGRouterSerialiser : : deserialise_RsGRouterMatrixFriendListItem ( void * data , uint32_t pktsize ) const
2013-12-27 15:06:47 -05:00
{
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterMatrixFriendListItem * item = new RsGRouterMatrixFriendListItem ( ) ;
uint32_t nb_friends = 0 ;
ok & = getRawUInt32 ( data , pktsize , & offset , & nb_friends ) ; // file hash
item - > reverse_friend_indices . resize ( nb_friends ) ;
for ( uint32_t i = 0 ; ok & & i < nb_friends ; + + i )
2014-03-17 16:56:06 -04:00
ok & = item - > reverse_friend_indices [ i ] . deserialise ( data , pktsize , offset ) ;
2013-12-27 15:06:47 -05:00
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
return item ;
}
2014-03-29 10:18:05 -04:00
RsGRouterMatrixCluesItem * RsGRouterSerialiser : : deserialise_RsGRouterMatrixCluesItem ( void * data , uint32_t pktsize ) const
2013-12-27 15:06:47 -05:00
{
uint32_t offset = 8 ; // skip the header
uint32_t rssize = getRsItemSize ( data ) ;
bool ok = true ;
RsGRouterMatrixCluesItem * item = new RsGRouterMatrixCluesItem ( ) ;
2014-03-17 16:56:06 -04:00
ok & = item - > destination_key . deserialise ( data , pktsize , offset ) ;
2013-12-27 15:06:47 -05:00
uint32_t nb_clues = 0 ;
ok & = getRawUInt32 ( data , pktsize , & offset , & nb_clues ) ;
item - > clues . clear ( ) ;
for ( uint32_t j = 0 ; j < nb_clues ; + + j )
{
RoutingMatrixHitEntry HitE ;
ok & = getRawUInt32 ( data , pktsize , & offset , & HitE . friend_id ) ;
ok & = getRawUFloat32 ( data , pktsize , & offset , HitE . weight ) ;
ok & = getRawTimeT ( data , pktsize , & offset , HitE . time_stamp ) ;
item - > clues . push_back ( HitE ) ;
}
if ( offset ! = rssize | | ! ok )
{
std : : cerr < < __PRETTY_FUNCTION__ < < " : error while deserialising! Item will be dropped. " < < std : : endl ;
return NULL ;
}
return item ;
}
2013-12-22 12:04:13 -05:00
RsGRouterGenericDataItem * RsGRouterGenericDataItem : : duplicate ( ) const
{
RsGRouterGenericDataItem * item = new RsGRouterGenericDataItem ;
2013-12-27 15:06:47 -05:00
item - > routing_id = routing_id ;
item - > destination_key = destination_key ;
item - > data_size = data_size ;
2014-03-29 10:18:05 -04:00
item - > randomized_distance = randomized_distance ;
2013-12-22 12:04:13 -05:00
// then duplicate the memory chunk
item - > data_bytes = ( uint8_t * ) malloc ( data_size ) ;
memcpy ( item - > data_bytes , data_bytes , data_size ) ;
return item ;
}
2013-11-02 10:35:33 -04:00
uint32_t RsGRouterGenericDataItem : : serial_size ( ) const
{
2014-03-29 10:18:05 -04:00
uint32_t s = 8 ; // header
2013-12-23 11:05:46 -05:00
s + = sizeof ( GRouterMsgPropagationId ) ; // routing id
2014-03-29 10:18:05 -04:00
s + = destination_key . serial_size ( ) ; // destination_key
s + = 4 ; // randomized distance
s + = 4 ; // data_size
s + = data_size ; // data
2013-12-23 11:05:46 -05:00
return s ;
2013-11-02 10:35:33 -04:00
}
uint32_t RsGRouterACKItem : : serial_size ( ) const
{
2013-12-23 11:05:46 -05:00
uint32_t s = 8 ; // header
s + = sizeof ( GRouterMsgPropagationId ) ; // routing id
s + = 4 ; // state
return s ;
2013-11-02 10:35:33 -04:00
}
bool RsGRouterGenericDataItem : : serialise ( void * data , uint32_t & size ) const
{
2013-12-23 11:05:46 -05:00
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
if ( ! serialise_header ( data , size , tlvsize , offset ) )
return false ;
/* add mandatory parts first */
2014-03-29 10:18:05 -04:00
ok & = setRawUInt64 ( data , tlvsize , & offset , routing_id ) ;
ok & = destination_key . serialise ( data , tlvsize , offset ) ;
ok & = setRawUInt32 ( data , tlvsize , & offset , randomized_distance ) ;
2013-12-23 11:05:46 -05:00
ok & = setRawUInt32 ( data , tlvsize , & offset , data_size ) ;
memcpy ( & ( ( uint8_t * ) data ) [ offset ] , data_bytes , data_size ) ;
offset + = data_size ;
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " rsfileitemserialiser::serialisedata() size error! " < < std : : endl ;
}
2013-11-02 10:35:33 -04:00
2013-12-23 11:05:46 -05:00
return ok ;
2013-11-02 10:35:33 -04:00
}
bool RsGRouterACKItem : : serialise ( void * data , uint32_t & size ) const
{
2013-12-23 11:05:46 -05:00
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
if ( ! serialise_header ( data , size , tlvsize , offset ) )
return false ;
2013-11-02 10:35:33 -04:00
2013-12-23 11:05:46 -05:00
/* add mandatory parts first */
2014-03-29 10:18:05 -04:00
ok & = setRawUInt64 ( data , tlvsize , & offset , mid ) ;
2013-12-23 11:05:46 -05:00
ok & = setRawUInt32 ( data , tlvsize , & offset , state ) ;
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " rsfileitemserialiser::serialisedata() size error! " < < std : : endl ;
}
return ok ;
2013-11-02 10:35:33 -04:00
}
2013-12-27 15:06:47 -05:00
/* serialise the data to the buffer */
uint32_t RsGRouterMatrixCluesItem : : serial_size ( ) const
{
uint32_t s = 8 ; // header
2014-03-29 10:18:05 -04:00
s + = destination_key . serial_size ( ) ; // Key size
2013-12-27 15:06:47 -05:00
s + = 4 ; // list<RoutingMatrixHitEntry>::size()
s + = ( 4 + 4 + 8 ) * clues . size ( ) ;
return s ;
}
uint32_t RsGRouterMatrixFriendListItem : : serial_size ( ) const
{
uint32_t s = 8 ; // header
s + = 4 ; // reverse_friend_indices.size()
2014-03-17 16:56:06 -04:00
s + = RsFileHash : : SIZE_IN_BYTES * reverse_friend_indices . size ( ) ; // sha1 for published_key
2013-12-27 15:06:47 -05:00
return s ;
}
uint32_t RsGRouterRoutingInfoItem : : serial_size ( ) const
{
2014-03-29 10:18:05 -04:00
uint32_t s = 8 ; // header
2014-03-17 16:56:06 -04:00
s + = 4 ; // status_flags
2014-03-29 10:18:05 -04:00
s + = origin . serial_size ( ) ; // origin
2014-03-17 16:56:06 -04:00
s + = 8 ; // received_time
s + = 4 ; // tried_friends.size() ;
2014-03-29 10:18:05 -04:00
s + = tried_friends . size ( ) * ( RsPeerId : : SIZE_IN_BYTES + 8 + 4 + 4 ) ; // FriendTrialRecord
s + = data_item - > serial_size ( ) ; // data_item
2013-12-27 15:06:47 -05:00
return s ;
}
bool RsGRouterMatrixFriendListItem : : serialise ( void * data , uint32_t & size ) const
{
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
if ( ! serialise_header ( data , size , tlvsize , offset ) )
return false ;
/* add mandatory parts first */
ok & = setRawUInt32 ( data , tlvsize , & offset , reverse_friend_indices . size ( ) ) ;
for ( uint32_t i = 0 ; ok & & i < reverse_friend_indices . size ( ) ; + + i )
2014-03-17 16:56:06 -04:00
ok & = reverse_friend_indices [ i ] . serialise ( data , tlvsize , offset ) ;
2013-12-27 15:06:47 -05:00
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " rsfileitemserialiser::serialisedata() size error! " < < std : : endl ;
}
return ok ;
}
bool RsGRouterMatrixCluesItem : : serialise ( void * data , uint32_t & size ) const
{
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
if ( ! serialise_header ( data , size , tlvsize , offset ) )
return false ;
/* add mandatory parts first */
2014-03-17 16:56:06 -04:00
ok & = destination_key . serialise ( data , tlvsize , offset ) ;
2013-12-27 15:06:47 -05:00
ok & = setRawUInt32 ( data , tlvsize , & offset , clues . size ( ) ) ;
for ( std : : list < RoutingMatrixHitEntry > : : const_iterator it2 ( clues . begin ( ) ) ; it2 ! = clues . end ( ) ; + + it2 )
{
ok & = setRawUInt32 ( data , tlvsize , & offset , ( * it2 ) . friend_id ) ;
ok & = setRawUFloat32 ( data , tlvsize , & offset , ( * it2 ) . weight ) ;
ok & = setRawTimeT ( data , tlvsize , & offset , ( * it2 ) . time_stamp ) ;
}
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " rsfileitemserialiser::serialisedata() size error! " < < std : : endl ;
}
return ok ;
}
2014-03-29 10:18:05 -04:00
bool FriendTrialRecord : : deserialise ( void * data , uint32_t & offset , uint32_t size )
{
bool ok = true ;
ok & = friend_id . deserialise ( data , size , offset ) ;
ok & = getRawTimeT ( data , size , & offset , time_stamp ) ;
ok & = getRawUFloat32 ( data , size , & offset , probability ) ;
ok & = getRawUInt32 ( data , size , & offset , & nb_friends ) ;
return ok ;
}
bool FriendTrialRecord : : serialise ( void * data , uint32_t & offset , uint32_t size ) const
{
bool ok = true ;
ok & = friend_id . serialise ( data , size , offset ) ;
ok & = setRawTimeT ( data , size , & offset , time_stamp ) ;
ok & = setRawUFloat32 ( data , size , & offset , probability ) ;
ok & = setRawUInt32 ( data , size , & offset , nb_friends ) ;
return ok ;
}
2013-12-27 15:06:47 -05:00
bool RsGRouterRoutingInfoItem : : serialise ( void * data , uint32_t & size ) const
{
2014-03-17 16:56:06 -04:00
uint32_t tlvsize , offset = 0 ;
bool ok = true ;
2013-12-27 15:06:47 -05:00
2014-03-17 16:56:06 -04:00
if ( ! serialise_header ( data , size , tlvsize , offset ) )
return false ;
2013-12-27 15:06:47 -05:00
2014-03-17 16:56:06 -04:00
ok & = setRawUInt32 ( data , tlvsize , & offset , status_flags ) ;
ok & = origin . serialise ( data , tlvsize , offset ) ;
ok & = setRawTimeT ( data , tlvsize , & offset , received_time ) ;
ok & = setRawUInt32 ( data , tlvsize , & offset , tried_friends . size ( ) ) ;
2013-12-27 15:06:47 -05:00
2014-03-17 16:56:06 -04:00
for ( std : : list < FriendTrialRecord > : : const_iterator it ( tried_friends . begin ( ) ) ; it ! = tried_friends . end ( ) ; + + it )
2014-03-29 10:18:05 -04:00
ok & = ( * it ) . serialise ( data , offset , size - offset ) ;
2013-12-27 15:06:47 -05:00
2014-03-29 10:18:05 -04:00
uint32_t ns = size - offset ;
ok & = data_item - > serialise ( & ( ( uint8_t * ) data ) [ offset ] , ns ) ;
offset + = ns ;
2013-12-27 15:06:47 -05:00
2014-03-17 16:56:06 -04:00
if ( offset ! = tlvsize )
{
ok = false ;
std : : cerr < < " rsfileitemserialiser::serialisedata() size error! " < < std : : endl ;
}
return ok ;
2013-12-27 15:06:47 -05:00
}
2013-11-02 10:35:33 -04:00
// -----------------------------------------------------------------------------------//
// ------------------------------------- IO --------------------------------------- //
// -----------------------------------------------------------------------------------//
//
std : : ostream & RsGRouterPublishKeyItem : : print ( std : : ostream & o , uint16_t )
{
o < < " GRouterPublishKeyItem: " < < std : : endl ;
2014-03-17 16:56:06 -04:00
o < < " POW bytes : \" " < < RsPgpId ( pow_bytes ) . toStdString ( ) < < " \" " < < std : : endl ;
2013-11-02 10:35:33 -04:00
o < < " direct origin: \" " < < PeerId ( ) < < " \" " < < std : : endl ;
o < < " Key: " < < published_key . toStdString ( ) < < std : : endl ;
o < < " Req. Id: " < < std : : hex < < diffusion_id < < std : : dec < < std : : endl ;
o < < " Srv. Id: " < < std : : hex < < service_id < < std : : dec < < std : : endl ;
o < < " Distance: " < < randomized_distance < < std : : endl ;
o < < " Description: " < < description_string < < std : : endl ;
2014-01-03 17:41:20 -05:00
o < < " Fingerprint: " < < fingerprint . toStdString ( ) < < std : : endl ;
2013-11-02 10:35:33 -04:00
return o ;
}
std : : ostream & RsGRouterACKItem : : print ( std : : ostream & o , uint16_t )
{
o < < " RsGRouterACKItem: " < < std : : endl ;
o < < " direct origin: \" " < < PeerId ( ) < < " \" " < < std : : endl ;
2013-12-22 12:04:13 -05:00
o < < " Mid: " < < mid < < std : : endl ;
2013-11-02 10:35:33 -04:00
o < < " State: " < < state < < std : : endl ;
return o ;
}
std : : ostream & RsGRouterGenericDataItem : : print ( std : : ostream & o , uint16_t )
{
o < < " RsGRouterGenericDataItem: " < < std : : endl ;
o < < " direct origin: \" " < < PeerId ( ) < < " \" " < < std : : endl ;
o < < " Key: " < < destination_key . toStdString ( ) < < std : : endl ;
o < < " Data size: " < < data_size < < std : : endl ;
return o ;
}
2013-12-27 15:06:47 -05:00
std : : ostream & RsGRouterRoutingInfoItem : : print ( std : : ostream & o , uint16_t )
{
o < < " RsGRouterRoutingInfoItem: " < < std : : endl ;
o < < " direct origin: \" " < < PeerId ( ) < < " \" " < < std : : endl ;
o < < " origin: " < < origin . toStdString ( ) < < std : : endl ;
o < < " recv time: " < < received_time < < std : : endl ;
o < < " flags: " < < std : : hex < < status_flags < < std : : dec < < std : : endl ;
o < < " Key: " < < data_item - > destination_key . toStdString ( ) < < std : : endl ;
o < < " Data size: " < < data_item - > data_size < < std : : endl ;
o < < " Tried friends: " < < tried_friends . size ( ) < < std : : endl ;
return o ;
}
std : : ostream & RsGRouterMatrixCluesItem : : print ( std : : ostream & o , uint16_t )
{
o < < " RsGRouterMatrixCluesItem: " < < std : : endl ;
o < < " destination k: " < < destination_key . toStdString ( ) < < std : : endl ;
o < < " routing clues: " < < clues . size ( ) < < std : : endl ;
for ( std : : list < RoutingMatrixHitEntry > : : const_iterator it ( clues . begin ( ) ) ; it ! = clues . end ( ) ; + + it )
o < < " " < < ( * it ) . friend_id < < " " < < ( * it ) . time_stamp < < " " < < ( * it ) . weight < < std : : endl ;
return o ;
}
std : : ostream & RsGRouterMatrixFriendListItem : : print ( std : : ostream & o , uint16_t )
{
o < < " RsGRouterMatrixCluesItem: " < < std : : endl ;
o < < " friends: " < < reverse_friend_indices . size ( ) < < std : : endl ;
return o ;
}