mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Added connexion to the msg system and fingerprint into grouter addresses. flushing current changes before 0.6 merge.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7072 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
1aa2e221d2
commit
e12929d9d7
@ -187,7 +187,7 @@ RsGRouterItem *RsGRouterSerialiser::deserialise_RsGRouterPublishKeyItem(void *da
|
|||||||
ok &= getRawUInt32(data, pktsize, &offset, &item->service_id); // file hash
|
ok &= getRawUInt32(data, pktsize, &offset, &item->service_id); // file hash
|
||||||
ok &= getRawUFloat32(data, pktsize, &offset, item->randomized_distance); // file hash
|
ok &= getRawUFloat32(data, pktsize, &offset, item->randomized_distance); // file hash
|
||||||
ok &= GetTlvString(data, pktsize, &offset, TLV_TYPE_STR_VALUE,item->description_string);
|
ok &= GetTlvString(data, pktsize, &offset, TLV_TYPE_STR_VALUE,item->description_string);
|
||||||
ok &= getRawPGPFingerprint(data,pktsize,&offset,&item->fingerprint) ;
|
ok &= getRawPGPFingerprint(data,pktsize,&offset,item->fingerprint) ;
|
||||||
|
|
||||||
if (offset != rssize || !ok)
|
if (offset != rssize || !ok)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,8 @@ typedef uint32_t GRouterServiceId ;
|
|||||||
typedef uint32_t GRouterKeyPropagationId ;
|
typedef uint32_t GRouterKeyPropagationId ;
|
||||||
typedef uint32_t GRouterMsgPropagationId ;
|
typedef uint32_t GRouterMsgPropagationId ;
|
||||||
|
|
||||||
|
static const uint32_t GROUTER_CLIENT_ID_MESSAGES = 0x1001 ;
|
||||||
|
|
||||||
static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 5;
|
static const uint32_t RS_GROUTER_MATRIX_MAX_HIT_ENTRIES = 5;
|
||||||
static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60; // can be set to up to half the publish time interval. Prevents flooding routes.
|
static const uint32_t RS_GROUTER_MATRIX_MIN_TIME_BETWEEN_HITS = 60; // can be set to up to half the publish time interval. Prevents flooding routes.
|
||||||
static const uint32_t RS_GROUTER_MIN_CONFIG_SAVE_PERIOD = 5; // at most save config every 5 seconds
|
static const uint32_t RS_GROUTER_MIN_CONFIG_SAVE_PERIOD = 5; // at most save config every 5 seconds
|
||||||
@ -59,6 +61,7 @@ class GRouterPublishedKeyInfo
|
|||||||
public:
|
public:
|
||||||
GRouterServiceId service_id ;
|
GRouterServiceId service_id ;
|
||||||
std::string description_string ;
|
std::string description_string ;
|
||||||
|
PGPFingerprintType fpr ;
|
||||||
time_t last_published_time ;
|
time_t last_published_time ;
|
||||||
time_t validity_time ;
|
time_t validity_time ;
|
||||||
};
|
};
|
||||||
|
@ -38,15 +38,6 @@ p3GRouter::p3GRouter(p3LinkMgr *lm)
|
|||||||
addSerialType(new RsGRouterSerialiser()) ;
|
addSerialType(new RsGRouterSerialiser()) ;
|
||||||
|
|
||||||
_changed = false ;
|
_changed = false ;
|
||||||
|
|
||||||
// Debug stuff. Create a random key and register it.
|
|
||||||
uint8_t random_hash_buff[20] ;
|
|
||||||
RSRandom::random_bytes(random_hash_buff,20) ;
|
|
||||||
GRouterKeyId key(random_hash_buff) ;
|
|
||||||
static GRouterServiceId client_id = 0x0300ae15 ;
|
|
||||||
static std::string description = "Test string for debug purpose" ;
|
|
||||||
|
|
||||||
registerKey(key,client_id,description) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int p3GRouter::tick()
|
int p3GRouter::tick()
|
||||||
@ -320,12 +311,14 @@ void p3GRouter::publishKeys()
|
|||||||
std::cerr << " Key id : " << it->first.toStdString() << std::endl;
|
std::cerr << " Key id : " << it->first.toStdString() << std::endl;
|
||||||
std::cerr << " Service id : " << std::hex << info.service_id << std::dec << std::endl;
|
std::cerr << " Service id : " << std::hex << info.service_id << std::dec << std::endl;
|
||||||
std::cerr << " Description : " << info.description_string << std::endl;
|
std::cerr << " Description : " << info.description_string << std::endl;
|
||||||
|
std::cerr << " Fingerprint : " << info.fpr.toStdString() << std::endl;
|
||||||
|
|
||||||
RsGRouterPublishKeyItem item ;
|
RsGRouterPublishKeyItem item ;
|
||||||
item.diffusion_id = RSRandom::random_u32() ;
|
item.diffusion_id = RSRandom::random_u32() ;
|
||||||
item.published_key = it->first ;
|
item.published_key = it->first ;
|
||||||
item.service_id = info.service_id ;
|
item.service_id = info.service_id ;
|
||||||
item.randomized_distance = drand48() ;
|
item.randomized_distance = drand48() ;
|
||||||
|
item.fingerprint = info.fpr;
|
||||||
item.description_string = info.description_string ;
|
item.description_string = info.description_string ;
|
||||||
item.PeerId("") ; // no peer id => key is forwarded to all friends.
|
item.PeerId("") ; // no peer id => key is forwarded to all friends.
|
||||||
|
|
||||||
@ -361,13 +354,14 @@ void p3GRouter::locked_forwardKey(const RsGRouterPublishKeyItem& item)
|
|||||||
else
|
else
|
||||||
std::cerr << " Not forwarding to source id " << item.PeerId() << std::endl;
|
std::cerr << " Not forwarding to source id " << item.PeerId() << std::endl;
|
||||||
}
|
}
|
||||||
bool p3GRouter::registerKey(const GRouterKeyId& key,const GRouterServiceId& client_id,const std::string& description)
|
bool p3GRouter::registerKey(const GRouterKeyId& key,const PGPFingerprintType& fps,const GRouterServiceId& client_id,const std::string& description)
|
||||||
{
|
{
|
||||||
RsStackMutex mtx(grMtx) ;
|
RsStackMutex mtx(grMtx) ;
|
||||||
|
|
||||||
GRouterPublishedKeyInfo info ;
|
GRouterPublishedKeyInfo info ;
|
||||||
info.service_id = client_id ;
|
info.service_id = client_id ;
|
||||||
info.description_string = description;
|
info.fpr = fps ;
|
||||||
|
info.description_string = description.substr(0,20);
|
||||||
info.validity_time = 0 ; // not used yet.
|
info.validity_time = 0 ; // not used yet.
|
||||||
info.last_published_time = 0 ; // means never published, se it will be re-published soon.
|
info.last_published_time = 0 ; // means never published, se it will be re-published soon.
|
||||||
|
|
||||||
@ -376,7 +370,7 @@ bool p3GRouter::registerKey(const GRouterKeyId& key,const GRouterServiceId& clie
|
|||||||
std::cerr << "Registered the following key: " << std::endl;
|
std::cerr << "Registered the following key: " << std::endl;
|
||||||
std::cerr << " Key id : " << key.toStdString() << std::endl;
|
std::cerr << " Key id : " << key.toStdString() << std::endl;
|
||||||
std::cerr << " Client id : " << std::hex << client_id << std::dec << std::endl;
|
std::cerr << " Client id : " << std::hex << client_id << std::dec << std::endl;
|
||||||
std::cerr << " Description : " << description << std::endl;
|
std::cerr << " Description : " << info.description_string << std::endl;
|
||||||
|
|
||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
@ -66,14 +66,18 @@ class p3GRouter: public RsGRouter, public p3Service, public p3Config
|
|||||||
// forward in the network, so that is can be a possible destination for
|
// forward in the network, so that is can be a possible destination for
|
||||||
// global messages.
|
// global messages.
|
||||||
//
|
//
|
||||||
// key : the key that is published
|
// key : The key that is published
|
||||||
|
// fingerp : Fingerprint of the key to encrypt the data.
|
||||||
|
// desc_str : Any fixed length string (< 20 characters) to descript the address in words.
|
||||||
// client_id: id of the client service to send the traffic to.
|
// client_id: id of the client service to send the traffic to.
|
||||||
// To obtain a client id, the service must register using the previous method.
|
// To obtain a client id, the service must register using the previous method.
|
||||||
//
|
//
|
||||||
// Unregistering a key might not have an instantaneous effect, so the client is responsible for
|
// Unregistering a key might not have an instantaneous effect, so the client is responsible for
|
||||||
// discarding traffic that might later come for this key.
|
// discarding traffic that might later come for this key.
|
||||||
//
|
//
|
||||||
bool registerKey(const GRouterKeyId& key,const GRouterServiceId& client_id,const std::string& description_string) ;
|
bool registerKey(const GRouterKeyId& key,const PGPFingerprintType& pgp_fingerprint,
|
||||||
|
const GRouterServiceId& client_id,const std::string& description_string) ;
|
||||||
|
|
||||||
bool unregisterKey(const GRouterKeyId& key) ;
|
bool unregisterKey(const GRouterKeyId& key) ;
|
||||||
|
|
||||||
//===================================================//
|
//===================================================//
|
||||||
|
@ -72,7 +72,7 @@ class RsGRouter
|
|||||||
//===================================================//
|
//===================================================//
|
||||||
|
|
||||||
virtual void sendData(const GRouterKeyId& destination, RsGRouterGenericDataItem *item) =0;
|
virtual void sendData(const GRouterKeyId& destination, RsGRouterGenericDataItem *item) =0;
|
||||||
virtual bool registerKey(const GRouterKeyId& key,const GRouterServiceId& client_id,const std::string& description_string) =0;
|
virtual bool registerKey(const GRouterKeyId& key,const PGPFingerprintType& fps,const GRouterServiceId& client_id,const std::string& description_string) =0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -288,6 +288,38 @@ bool setRawSSLId(void *data,uint32_t size,uint32_t *offset,const SSLIdType& cs)
|
|||||||
|
|
||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
|
bool getRawPGPFingerprint(void *data,uint32_t size,uint32_t *offset,PGPFingerprintType& cs)
|
||||||
|
{
|
||||||
|
uint32_t len = 20 ; // SSL id type
|
||||||
|
|
||||||
|
/* check there is space for string */
|
||||||
|
if (size < *offset + len)
|
||||||
|
{
|
||||||
|
std::cerr << "getRawPGPFingerprint() not enough size" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bool ok = true ;
|
||||||
|
|
||||||
|
cs = PGPFingerprintType(&((uint8_t*)data)[*offset]) ;
|
||||||
|
*offset += 20 ;
|
||||||
|
|
||||||
|
return ok ;
|
||||||
|
}
|
||||||
|
bool setRawPGPFingerprint(void *data,uint32_t size,uint32_t *offset,const PGPFingerprintType& cs)
|
||||||
|
{
|
||||||
|
uint32_t len = 20 ; // SHA1 length in bytes
|
||||||
|
|
||||||
|
if (size < *offset + len)
|
||||||
|
{
|
||||||
|
std::cerr << "setRawPGPFingerprint() Not enough size" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((void *) &(((uint8_t *) data)[*offset]), cs.toByteArray(), 20);
|
||||||
|
*offset += 20 ;
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
bool getRawString(void *data, uint32_t size, uint32_t *offset, std::string &outStr)
|
bool getRawString(void *data, uint32_t size, uint32_t *offset, std::string &outStr)
|
||||||
{
|
{
|
||||||
uint32_t len = 0;
|
uint32_t len = 0;
|
||||||
|
@ -74,6 +74,9 @@ bool setRawSha1(void *data, uint32_t size, uint32_t *offset, const Sha1CheckSum&
|
|||||||
bool setRawSSLId(void *data, uint32_t size, uint32_t *offset, const SSLIdType& inStr);
|
bool setRawSSLId(void *data, uint32_t size, uint32_t *offset, const SSLIdType& inStr);
|
||||||
bool getRawSSLId(void *data, uint32_t size, uint32_t *offset, SSLIdType& outStr);
|
bool getRawSSLId(void *data, uint32_t size, uint32_t *offset, SSLIdType& outStr);
|
||||||
|
|
||||||
|
bool setRawPGPFingerprint(void *data, uint32_t size, uint32_t *offset, const PGPFingerprintType& inStr);
|
||||||
|
bool getRawPGPFingerprint(void *data, uint32_t size, uint32_t *offset, PGPFingerprintType& outStr);
|
||||||
|
|
||||||
bool setRawTimeT(void *data, uint32_t size, uint32_t *offset, const time_t& inStr);
|
bool setRawTimeT(void *data, uint32_t size, uint32_t *offset, const time_t& inStr);
|
||||||
bool getRawTimeT(void *data, uint32_t size, uint32_t *offset, time_t& outStr);
|
bool getRawTimeT(void *data, uint32_t size, uint32_t *offset, time_t& outStr);
|
||||||
|
|
||||||
|
@ -37,6 +37,10 @@
|
|||||||
#include "pqi/p3cfgmgr.h"
|
#include "pqi/p3cfgmgr.h"
|
||||||
#include "rsserver/p3face.h"
|
#include "rsserver/p3face.h"
|
||||||
#include "serialiser/rsconfigitems.h"
|
#include "serialiser/rsconfigitems.h"
|
||||||
|
#ifdef GROUTER
|
||||||
|
#include "grouter/p3grouter.h"
|
||||||
|
#include "grouter/groutertypes.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "util/rsdebug.h"
|
#include "util/rsdebug.h"
|
||||||
#include "util/rsdir.h"
|
#include "util/rsdir.h"
|
||||||
@ -83,6 +87,25 @@ p3MsgService::p3MsgService(p3LinkMgr *lm)
|
|||||||
/* Initialize standard tag types */
|
/* Initialize standard tag types */
|
||||||
if(lm)
|
if(lm)
|
||||||
initStandardTagTypes();
|
initStandardTagTypes();
|
||||||
|
|
||||||
|
#ifdef GROUTER
|
||||||
|
// Debug stuff. Create a random key and register it.
|
||||||
|
std::string own_ssl_id = rsPeers->getOwnId() ;
|
||||||
|
std::string gpg_id = rsPeers->getGPGOwnId() ;
|
||||||
|
|
||||||
|
RsPeerDetails d;
|
||||||
|
rsPeers->getPeerDetails(gpg_id,d) ;
|
||||||
|
PGPFingerprintType fingerp( d.fpr ) ;
|
||||||
|
|
||||||
|
// Re-hash the SSL id, to make it one way. Will be replaced by proper invitations in the future.
|
||||||
|
//
|
||||||
|
GRouterKeyId key ( RsDirUtil::sha1sum( (uint8_t*)own_ssl_id.c_str(),own_ssl_id.length() ).toStdString() ) ;
|
||||||
|
|
||||||
|
static GRouterServiceId client_id = GROUTER_CLIENT_ID_MESSAGES;
|
||||||
|
static std::string description = "Test string for debug purpose" ;
|
||||||
|
|
||||||
|
mGRouter->registerKey(key,fingerp,client_id,description) ;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t p3MsgService::getNewUniqueMsgId()
|
uint32_t p3MsgService::getNewUniqueMsgId()
|
||||||
@ -2123,10 +2146,22 @@ void p3MsgService::enableDistantMessaging(bool b)
|
|||||||
#ifdef GROUTER
|
#ifdef GROUTER
|
||||||
std::cerr << "Notifying the global router." << std::endl;
|
std::cerr << "Notifying the global router." << std::endl;
|
||||||
|
|
||||||
std::string pname = rsPeers->getPeerName(mLinkMgr->getOwnId()) ;
|
// Debug stuff. Create a random key and register it.
|
||||||
Sha1CheckSum grouter_hash = RsDirUtil::sha1sum((uint8_t*)mLinkMgr->getOwnId().c_str(),16);
|
std::string own_ssl_id = rsPeers->getOwnId() ;
|
||||||
|
std::string gpg_id = rsPeers->getGPGOwnId() ;
|
||||||
|
|
||||||
mGRouter->registerKey(grouter_hash, RS_SERVICE_TYPE_MSG, std::string("Contact address for ")+pname) ;
|
RsPeerDetails d;
|
||||||
|
rsPeers->getPeerDetails(gpg_id,d) ;
|
||||||
|
PGPFingerprintType fingerp( d.fpr ) ;
|
||||||
|
|
||||||
|
// Re-hash the SSL id, to make it one way. Will be replaced by proper invitations in the future.
|
||||||
|
//
|
||||||
|
GRouterKeyId key ( RsDirUtil::sha1sum( (uint8_t*)own_ssl_id.c_str(),own_ssl_id.length() ).toStdString() ) ;
|
||||||
|
|
||||||
|
static GRouterServiceId client_id = GROUTER_CLIENT_ID_MESSAGES;
|
||||||
|
static std::string description = "Test string for debug purpose" ;
|
||||||
|
|
||||||
|
mGRouter->registerKey(key,fingerp,client_id,description) ;
|
||||||
#endif
|
#endif
|
||||||
cchanged = true ;
|
cchanged = true ;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user