mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
fixed compilation of RsNxsTransaction encryption code
This commit is contained in:
parent
6ecd2991e7
commit
9da8a8abc3
@ -405,7 +405,7 @@ bool GxsSecurity::validateNxsMsg(const RsNxsMsg& msg, const RsTlvKeySignature& s
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GxsSecurity::initEncryption(GxsSecurity::MultiEncryptionContext& encryption_context, const std::list<RsTlvSecurityKey>& keys)
|
bool GxsSecurity::initEncryption(GxsSecurity::MultiEncryptionContext& encryption_context, const std::vector<RsTlvSecurityKey>& keys)
|
||||||
{
|
{
|
||||||
// prepare an array of encrypted keys ek and public keys puk
|
// prepare an array of encrypted keys ek and public keys puk
|
||||||
|
|
||||||
@ -439,7 +439,7 @@ bool GxsSecurity::initEncryption(GxsSecurity::MultiEncryptionContext& encryption
|
|||||||
|
|
||||||
encryption_context.ek [i] = (unsigned char*)malloc(max_evp_key_size);
|
encryption_context.ek [i] = (unsigned char*)malloc(max_evp_key_size);
|
||||||
encryption_context.ekl[i] = max_evp_key_size ;
|
encryption_context.ekl[i] = max_evp_key_size ;
|
||||||
encryption_context.ids[i] = keys[i] ;
|
encryption_context.ids[i] = keys[i].keyId ;
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_CIPHER_CTX_init(&encryption_context.ctx);
|
EVP_CIPHER_CTX_init(&encryption_context.ctx);
|
||||||
@ -455,7 +455,7 @@ bool GxsSecurity::initEncryption(GxsSecurity::MultiEncryptionContext& encryption
|
|||||||
}
|
}
|
||||||
catch(std::exception& e)
|
catch(std::exception& e)
|
||||||
{
|
{
|
||||||
std::cerr << "(EE) cannot init encryption context: " << e.what << std::endl;
|
std::cerr << "(EE) cannot init encryption context: " << e.what() << std::endl;
|
||||||
encryption_context.clear() ;
|
encryption_context.clear() ;
|
||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
@ -475,6 +475,7 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
|
|
||||||
int size_net_ekl = sizeof(net_ekl);
|
int size_net_ekl = sizeof(net_ekl);
|
||||||
|
|
||||||
|
const EVP_CIPHER *cipher = EVP_CIPHER_CTX_cipher(&encryption_context.ctx) ;
|
||||||
int cipher_block_size = EVP_CIPHER_block_size(cipher);
|
int cipher_block_size = EVP_CIPHER_block_size(cipher);
|
||||||
int max_outlen = inlen + cipher_block_size ;
|
int max_outlen = inlen + cipher_block_size ;
|
||||||
|
|
||||||
@ -523,10 +524,15 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
#ifdef DISTRIB_DEBUG
|
#ifdef DISTRIB_DEBUG
|
||||||
std::cerr << "GxsSecurity::encrypt() " << std::endl;
|
std::cerr << "GxsSecurity::encrypt() " << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
// Encrypts (in,inlen) into (out,outlen) using the given RSA public key.
|
||||||
|
// The format of the encrypted data is:
|
||||||
|
//
|
||||||
|
// [--- Encrypted session key length ---|--- Encrypted session key ---|--- IV ---|---- Encrypted data ---]
|
||||||
|
//
|
||||||
|
|
||||||
RSA *tmpkey = ::extractPublicKey(key) ;
|
RSA *tmpkey = ::extractPublicKey(key) ;
|
||||||
RSA *rsa_publish_pub = RSAPublicKey_dup(tmpkey) ;
|
RSA *rsa_publish_pub = RSAPublicKey_dup(tmpkey) ;
|
||||||
RSA_free(tmpkey) ;
|
RSA_free(tmpkey) ;
|
||||||
|
|
||||||
EVP_PKEY *public_key = NULL;
|
EVP_PKEY *public_key = NULL;
|
||||||
|
|
||||||
@ -543,7 +549,7 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
{
|
{
|
||||||
#ifdef DISTRIB_DEBUG
|
#ifdef DISTRIB_DEBUG
|
||||||
std::cerr << "GxsSecurity(): Could not generate publish key " << grpId
|
std::cerr << "GxsSecurity(): Could not generate publish key " << grpId
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
#endif
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -568,13 +574,13 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
if(!EVP_SealInit(&ctx, EVP_aes_128_cbc(), &ek, &eklen, iv, &public_key, 1)) return false;
|
if(!EVP_SealInit(&ctx, EVP_aes_128_cbc(), &ek, &eklen, iv, &public_key, 1)) return false;
|
||||||
|
|
||||||
// now assign memory to out accounting for data, and cipher block size, key length, and key length val
|
// now assign memory to out accounting for data, and cipher block size, key length, and key length val
|
||||||
out = (uint8_t*)malloc(inlen + cipher_block_size + size_net_ekl + eklen + EVP_MAX_IV_LENGTH);
|
out = (uint8_t*)malloc(inlen + cipher_block_size + size_net_ekl + eklen + EVP_MAX_IV_LENGTH);
|
||||||
|
|
||||||
if(out == NULL)
|
if(out == NULL)
|
||||||
{
|
{
|
||||||
std::cerr << "gxssecurity::encrypt(): cnnot allocate memory of size " << inlen + cipher_block_size + size_net_ekl + eklen + EVP_MAX_IV_LENGTH << " to encrypt data." << std::endl;
|
std::cerr << "gxssecurity::encrypt(): cnnot allocate memory of size " << inlen + cipher_block_size + size_net_ekl + eklen + EVP_MAX_IV_LENGTH << " to encrypt data." << std::endl;
|
||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
|
|
||||||
net_ekl = htonl(eklen);
|
net_ekl = htonl(eklen);
|
||||||
memcpy((unsigned char*)out + out_offset, &net_ekl, size_net_ekl);
|
memcpy((unsigned char*)out + out_offset, &net_ekl, size_net_ekl);
|
||||||
@ -589,7 +595,7 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
// now encrypt actual data
|
// now encrypt actual data
|
||||||
if(!EVP_SealUpdate(&ctx, (unsigned char*) out + out_offset, &out_currOffset, (unsigned char*) in, inlen))
|
if(!EVP_SealUpdate(&ctx, (unsigned char*) out + out_offset, &out_currOffset, (unsigned char*) in, inlen))
|
||||||
{
|
{
|
||||||
free(out) ;
|
free(out) ;
|
||||||
out = NULL ;
|
out = NULL ;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -600,7 +606,7 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
// add padding
|
// add padding
|
||||||
if(!EVP_SealFinal(&ctx, (unsigned char*) out + out_offset, &out_currOffset))
|
if(!EVP_SealFinal(&ctx, (unsigned char*) out + out_offset, &out_currOffset))
|
||||||
{
|
{
|
||||||
free(out) ;
|
free(out) ;
|
||||||
out = NULL ;
|
out = NULL ;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -611,7 +617,7 @@ bool GxsSecurity::encrypt(uint8_t *& out, uint32_t &outlen, const uint8_t *in, u
|
|||||||
// make sure offset has not gone passed valid memory bounds
|
// make sure offset has not gone passed valid memory bounds
|
||||||
if(out_offset > max_outlen)
|
if(out_offset > max_outlen)
|
||||||
{
|
{
|
||||||
free(out) ;
|
free(out) ;
|
||||||
out = NULL ;
|
out = NULL ;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -667,7 +673,7 @@ bool GxsSecurity::initDecryption(GxsSecurity::MultiEncryptionContext& encryption
|
|||||||
}
|
}
|
||||||
catch(std::exception& e)
|
catch(std::exception& e)
|
||||||
{
|
{
|
||||||
std::cerr << "(EE) cannot init decryption context: " << e.what << std::endl;
|
std::cerr << "(EE) cannot init decryption context: " << e.what() << std::endl;
|
||||||
encryption_context.clear() ;
|
encryption_context.clear() ;
|
||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
@ -696,7 +702,7 @@ bool GxsSecurity::decrypt(uint8_t *&out, uint32_t &outlen, const uint8_t *in, ui
|
|||||||
|
|
||||||
outlen = out_currOffset;
|
outlen = out_currOffset;
|
||||||
|
|
||||||
if(!EVP_OpenFinal(&ctx, (unsigned char*)out + out_currOffset, &out_currOffset))
|
if(!EVP_OpenFinal(&encryption_context.ctx, (unsigned char*)out + out_currOffset, &out_currOffset))
|
||||||
{
|
{
|
||||||
free(out) ;
|
free(out) ;
|
||||||
out = NULL ;
|
out = NULL ;
|
||||||
@ -711,11 +717,17 @@ bool GxsSecurity::decrypt(uint8_t *&out, uint32_t &outlen, const uint8_t *in, ui
|
|||||||
|
|
||||||
bool GxsSecurity::decrypt(uint8_t *& out, uint32_t & outlen, const uint8_t *in, uint32_t inlen, const RsTlvSecurityKey& key)
|
bool GxsSecurity::decrypt(uint8_t *& out, uint32_t & outlen, const uint8_t *in, uint32_t inlen, const RsTlvSecurityKey& key)
|
||||||
{
|
{
|
||||||
|
// Decrypts (in,inlen) into (out,outlen) using the given RSA public key.
|
||||||
|
// The format of the encrypted data (in) is:
|
||||||
|
//
|
||||||
|
// [--- Encrypted session key length ---|--- Encrypted session key ---|--- IV ---|---- Encrypted data ---]
|
||||||
|
//
|
||||||
|
// This method can be used to decrypt multi-encrypted data, if passing he correct encrypted key block (corresponding to the given key)
|
||||||
|
|
||||||
#ifdef DISTRIB_DEBUG
|
#ifdef DISTRIB_DEBUG
|
||||||
std::cerr << "GxsSecurity::decrypt() " << std::endl;
|
std::cerr << "GxsSecurity::decrypt() " << std::endl;
|
||||||
#endif
|
#endif
|
||||||
RSA *rsa_publish = extractPrivateKey(key) ;
|
RSA *rsa_publish = extractPrivateKey(key) ;
|
||||||
EVP_PKEY *privateKey = NULL;
|
EVP_PKEY *privateKey = NULL;
|
||||||
|
|
||||||
//RSA* rsa_publish = EVP_PKEY_get1_RSA(privateKey);
|
//RSA* rsa_publish = EVP_PKEY_get1_RSA(privateKey);
|
||||||
|
@ -84,6 +84,8 @@ class GxsSecurity
|
|||||||
unsigned char **ek ; // array of encrypted keys
|
unsigned char **ek ; // array of encrypted keys
|
||||||
EVP_CIPHER_CTX ctx; // EVP encryption context
|
EVP_CIPHER_CTX ctx; // EVP encryption context
|
||||||
unsigned char iv[EVP_MAX_IV_LENGTH]; // initialization vector of the cipher.
|
unsigned char iv[EVP_MAX_IV_LENGTH]; // initialization vector of the cipher.
|
||||||
|
|
||||||
|
friend class GxsSecurity ;
|
||||||
};
|
};
|
||||||
/*!
|
/*!
|
||||||
* Extracts a public key from a private key.
|
* Extracts a public key from a private key.
|
||||||
@ -112,7 +114,7 @@ class GxsSecurity
|
|||||||
* Encrypts/decrypt data using envelope encryption using the key pre-computed in the encryption context passed as
|
* Encrypts/decrypt data using envelope encryption using the key pre-computed in the encryption context passed as
|
||||||
* parameter.
|
* parameter.
|
||||||
*/
|
*/
|
||||||
static bool initEncryption(MultiEncryptionContext& encryption_context, const std::list<RsTlvSecurityKey> &keys) ;
|
static bool initEncryption(MultiEncryptionContext& encryption_context, const std::vector<RsTlvSecurityKey> &keys) ;
|
||||||
static bool initDecryption(MultiEncryptionContext& encryption_context, const RsTlvSecurityKey& key, unsigned char *IV, uint32_t IV_size, unsigned char *encrypted_session_key, uint32_t encrypted_session_key_size) ;
|
static bool initDecryption(MultiEncryptionContext& encryption_context, const RsTlvSecurityKey& key, unsigned char *IV, uint32_t IV_size, unsigned char *encrypted_session_key, uint32_t encrypted_session_key_size) ;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -283,11 +283,11 @@ const uint32_t RsGxsNetService::FRAGMENT_SIZE = 150000;
|
|||||||
|
|
||||||
RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds,
|
RsGxsNetService::RsGxsNetService(uint16_t servType, RsGeneralDataService *gds,
|
||||||
RsNxsNetMgr *netMgr, RsNxsObserver *nxsObs,
|
RsNxsNetMgr *netMgr, RsNxsObserver *nxsObs,
|
||||||
const RsServiceInfo serviceInfo,
|
const RsServiceInfo serviceInfo,
|
||||||
RsGixsReputation* reputations, RsGcxs* circles,
|
RsGixsReputation* reputations, RsGcxs* circles, RsGixs *gixs,
|
||||||
PgpAuxUtils *pgpUtils, bool grpAutoSync,bool msgAutoSync)
|
PgpAuxUtils *pgpUtils, bool grpAutoSync,bool msgAutoSync)
|
||||||
: p3ThreadedService(), p3Config(), mTransactionN(0),
|
: p3ThreadedService(), p3Config(), mTransactionN(0),
|
||||||
mObserver(nxsObs), mDataStore(gds), mServType(servType),
|
mObserver(nxsObs),mGixs(gixs), mDataStore(gds), mServType(servType),
|
||||||
mTransactionTimeOut(TRANSAC_TIMEOUT), mNetMgr(netMgr), mNxsMutex("RsGxsNetService"),
|
mTransactionTimeOut(TRANSAC_TIMEOUT), mNetMgr(netMgr), mNxsMutex("RsGxsNetService"),
|
||||||
mSyncTs(0), mLastKeyPublishTs(0),mLastCleanRejectedMessages(0), mSYNC_PERIOD(SYNC_PERIOD), mCircles(circles), mReputations(reputations),
|
mSyncTs(0), mLastKeyPublishTs(0),mLastCleanRejectedMessages(0), mSYNC_PERIOD(SYNC_PERIOD), mCircles(circles), mReputations(reputations),
|
||||||
mPgpUtils(pgpUtils),
|
mPgpUtils(pgpUtils),
|
||||||
@ -3275,13 +3275,13 @@ bool RsGxsNetService::encryptTransaction(NxsTransaction *tr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::cerr << " Dest Ids: " << std::endl;
|
std::cerr << " Dest Ids: " << std::endl;
|
||||||
std::list<RsTlvSecurityKey> recipient_keys ;
|
std::vector<RsTlvSecurityKey> recipient_keys ;
|
||||||
|
|
||||||
for(std::list<RsGxsId>::const_iterator it(recipients.begin());it!=recipients.end();++it)
|
for(std::list<RsGxsId>::const_iterator it(recipients.begin());it!=recipients.end();++it)
|
||||||
{
|
{
|
||||||
RsTlvSecurityKey pkey ;
|
RsTlvSecurityKey pkey ;
|
||||||
|
|
||||||
if(!rsIdentity->getKey(*it,pkey))
|
if(!mGixs->getKey(*it,pkey))
|
||||||
{
|
{
|
||||||
std::cerr << "(EE) Cannot retrieve public key " << *it << " for circle encryption." << std::endl;
|
std::cerr << "(EE) Cannot retrieve public key " << *it << " for circle encryption." << std::endl;
|
||||||
// we should probably request the key.
|
// we should probably request the key.
|
||||||
@ -3314,7 +3314,7 @@ bool RsGxsNetService::encryptTransaction(NxsTransaction *tr)
|
|||||||
unsigned char *encrypted_data = NULL ;
|
unsigned char *encrypted_data = NULL ;
|
||||||
uint32_t encrypted_len = 0 ;
|
uint32_t encrypted_len = 0 ;
|
||||||
|
|
||||||
if(!GxsSecurity::encrypt(muctx,tempmem,size,encrypted_data, encrypted_len))
|
if(!GxsSecurity::encrypt(encrypted_data, encrypted_len,tempmem,size,muctx))
|
||||||
{
|
{
|
||||||
std::cerr << " (EE) Cannot multi-encrypt item. Something went wrong." << std::endl;
|
std::cerr << " (EE) Cannot multi-encrypt item. Something went wrong." << std::endl;
|
||||||
continue ;
|
continue ;
|
||||||
@ -3382,6 +3382,8 @@ bool RsGxsNetService::decryptTransaction(NxsTransaction *tr)
|
|||||||
|
|
||||||
GxsSecurity::MultiEncryptionContext muctx ;
|
GxsSecurity::MultiEncryptionContext muctx ;
|
||||||
RsGxsId private_key_id ;
|
RsGxsId private_key_id ;
|
||||||
|
RsTlvBinaryData ek ;
|
||||||
|
RsTlvSecurityKey private_key;
|
||||||
bool found = false ;
|
bool found = false ;
|
||||||
|
|
||||||
for(std::map<RsGxsId,RsTlvBinaryData>::const_iterator it(esk->encrypted_session_keys.begin());it!=esk->encrypted_session_keys.end();++it)
|
for(std::map<RsGxsId,RsTlvBinaryData>::const_iterator it(esk->encrypted_session_keys.begin());it!=esk->encrypted_session_keys.end();++it)
|
||||||
@ -3389,6 +3391,13 @@ bool RsGxsNetService::decryptTransaction(NxsTransaction *tr)
|
|||||||
{
|
{
|
||||||
found = true ;
|
found = true ;
|
||||||
private_key_id = it->first ;
|
private_key_id = it->first ;
|
||||||
|
ek = it->second ;
|
||||||
|
|
||||||
|
if(!mGixs->getPrivateKey(private_key_id,private_key))
|
||||||
|
{
|
||||||
|
std::cerr << "(EE) Cannot find private key to decrypt incoming transaction, for ID " << it->first << ". This is a bug since the key is supposed ot be here." << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::cerr << " found appropriate private key to decrypt session key: " << it->first << std::endl;
|
std::cerr << " found appropriate private key to decrypt session key: " << it->first << std::endl;
|
||||||
break ;
|
break ;
|
||||||
@ -3400,7 +3409,7 @@ bool RsGxsNetService::decryptTransaction(NxsTransaction *tr)
|
|||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!GxsSecurity::initDecryption(private_key_id,esk->iv,EVP_MAX_IV_LENGTH,ek.bin_data,ek.bin_len))
|
if(!GxsSecurity::initDecryption(muctx,private_key,esk->iv,EVP_MAX_IV_LENGTH,(unsigned char*)ek.bin_data,ek.bin_len))
|
||||||
{
|
{
|
||||||
std::cerr << " (EE) cannot decrypt transaction. initDecryption() failed." << std::endl;
|
std::cerr << " (EE) cannot decrypt transaction. initDecryption() failed." << std::endl;
|
||||||
return false ;
|
return false ;
|
||||||
@ -3418,7 +3427,7 @@ bool RsGxsNetService::decryptTransaction(NxsTransaction *tr)
|
|||||||
unsigned char *tempmem;
|
unsigned char *tempmem;
|
||||||
uint32_t tempmemsize ;
|
uint32_t tempmemsize ;
|
||||||
|
|
||||||
if(!GxsSecurity::decrypt(muctx,tempmem,tempmemsize,encrypted_item->aes_encrypted_data.bin_data, encrypted_item->aes_encrypted_data.bin_len))
|
if(!GxsSecurity::decrypt(tempmem,tempmemsize,(uint8_t*)encrypted_item->aes_encrypted_data.bin_data, encrypted_item->aes_encrypted_data.bin_len,muctx))
|
||||||
{
|
{
|
||||||
std::cerr << " (EE) Cannot decrypt item. Something went wrong. Skipping this item." << std::endl;
|
std::cerr << " (EE) Cannot decrypt item. Something went wrong. Skipping this item." << std::endl;
|
||||||
continue ;
|
continue ;
|
||||||
|
@ -91,7 +91,7 @@ public:
|
|||||||
RsNxsNetMgr *netMgr,
|
RsNxsNetMgr *netMgr,
|
||||||
RsNxsObserver *nxsObs, // used to be = NULL.
|
RsNxsObserver *nxsObs, // used to be = NULL.
|
||||||
const RsServiceInfo serviceInfo,
|
const RsServiceInfo serviceInfo,
|
||||||
RsGixsReputation* reputations = NULL, RsGcxs* circles = NULL,
|
RsGixsReputation* reputations = NULL, RsGcxs* circles = NULL, RsGixs *gixs=NULL,
|
||||||
PgpAuxUtils *pgpUtils = NULL,
|
PgpAuxUtils *pgpUtils = NULL,
|
||||||
bool grpAutoSync = true, bool msgAutoSync = true);
|
bool grpAutoSync = true, bool msgAutoSync = true);
|
||||||
|
|
||||||
@ -501,6 +501,7 @@ private:
|
|||||||
int mUpdateCounter ;
|
int mUpdateCounter ;
|
||||||
|
|
||||||
RsGcxs* mCircles;
|
RsGcxs* mCircles;
|
||||||
|
RsGixs *mGixs;
|
||||||
RsGixsReputation* mReputations;
|
RsGixsReputation* mReputations;
|
||||||
PgpAuxUtils *mPgpUtils;
|
PgpAuxUtils *mPgpUtils;
|
||||||
bool mGrpAutoSync;
|
bool mGrpAutoSync;
|
||||||
|
@ -1331,7 +1331,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* gxsid_ns = new RsGxsNetService(
|
RsGxsNetService* gxsid_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_GXSID, gxsid_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_GXSID, gxsid_ds, nxsMgr,
|
||||||
mGxsIdService, mGxsIdService->getServiceInfo(),
|
mGxsIdService, mGxsIdService->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils,
|
pgpAuxUtils,
|
||||||
false,false); // don't synchronise group automatic (need explicit group request)
|
false,false); // don't synchronise group automatic (need explicit group request)
|
||||||
// don't sync messages at all.
|
// don't sync messages at all.
|
||||||
@ -1343,7 +1343,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* gxscircles_ns = new RsGxsNetService(
|
RsGxsNetService* gxscircles_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_GXSCIRCLE, gxscircles_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_GXSCIRCLE, gxscircles_ds, nxsMgr,
|
||||||
mGxsCircles, mGxsCircles->getServiceInfo(),
|
mGxsCircles, mGxsCircles->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
|
|
||||||
/**** Posted GXS service ****/
|
/**** Posted GXS service ****/
|
||||||
@ -1360,7 +1360,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* posted_ns = new RsGxsNetService(
|
RsGxsNetService* posted_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_POSTED, posted_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_POSTED, posted_ds, nxsMgr,
|
||||||
mPosted, mPosted->getServiceInfo(),
|
mPosted, mPosted->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
|
|
||||||
mPosted->setNetworkExchangeService(posted_ns) ;
|
mPosted->setNetworkExchangeService(posted_ns) ;
|
||||||
@ -1401,7 +1401,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* gxsforums_ns = new RsGxsNetService(
|
RsGxsNetService* gxsforums_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_FORUMS, gxsforums_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_FORUMS, gxsforums_ds, nxsMgr,
|
||||||
mGxsForums, mGxsForums->getServiceInfo(),
|
mGxsForums, mGxsForums->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
|
|
||||||
mGxsForums->setNetworkExchangeService(gxsforums_ns) ;
|
mGxsForums->setNetworkExchangeService(gxsforums_ns) ;
|
||||||
@ -1417,7 +1417,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* gxschannels_ns = new RsGxsNetService(
|
RsGxsNetService* gxschannels_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_CHANNELS, gxschannels_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_CHANNELS, gxschannels_ds, nxsMgr,
|
||||||
mGxsChannels, mGxsChannels->getServiceInfo(),
|
mGxsChannels, mGxsChannels->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
|
|
||||||
mGxsChannels->setNetworkExchangeService(gxschannels_ns) ;
|
mGxsChannels->setNetworkExchangeService(gxschannels_ns) ;
|
||||||
@ -1434,7 +1434,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* photo_ns = new RsGxsNetService(
|
RsGxsNetService* photo_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_PHOTO, photo_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_PHOTO, photo_ds, nxsMgr,
|
||||||
mPhoto, mPhoto->getServiceInfo(),
|
mPhoto, mPhoto->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1450,7 +1450,7 @@ int RsServer::StartupRetroShare()
|
|||||||
RsGxsNetService* wire_ns = new RsGxsNetService(
|
RsGxsNetService* wire_ns = new RsGxsNetService(
|
||||||
RS_SERVICE_GXS_TYPE_WIRE, wire_ds, nxsMgr,
|
RS_SERVICE_GXS_TYPE_WIRE, wire_ds, nxsMgr,
|
||||||
mWire, mWire->getServiceInfo(),
|
mWire, mWire->getServiceInfo(),
|
||||||
mGxsIdService, mGxsCircles,
|
mGxsIdService, mGxsCircles,mGxsIdService,
|
||||||
pgpAuxUtils);
|
pgpAuxUtils);
|
||||||
#endif
|
#endif
|
||||||
// now add to p3service
|
// now add to p3service
|
||||||
|
@ -79,6 +79,18 @@ RsItem* RsNxsSerialiser::deserialise(void *data, uint32_t *size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t RsNxsSerialiser::size(RsItem *item)
|
||||||
|
{
|
||||||
|
RsNxsItem *nxs_item = dynamic_cast<RsNxsItem*>(item) ;
|
||||||
|
|
||||||
|
if(nxs_item != NULL)
|
||||||
|
return nxs_item->serial_size() ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "RsNxsSerialiser::serialise(): Not an RsNxsItem!" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool RsNxsSerialiser::serialise(RsItem *item, void *data, uint32_t *size)
|
bool RsNxsSerialiser::serialise(RsItem *item, void *data, uint32_t *size)
|
||||||
{
|
{
|
||||||
|
@ -390,7 +390,7 @@ bool p3GxsCircles::recipients(const RsGxsCircleId& circleId, std::list<RsGxsId>&
|
|||||||
if(!getCircleDetails(circleId, details))
|
if(!getCircleDetails(circleId, details))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for(std::set<RsGxsId>::const_iterator it(details.mUnknownPeers.begin());it!=details.mUnknownPeers.end();+it)
|
for(std::set<RsGxsId>::const_iterator it(details.mUnknownPeers.begin());it!=details.mUnknownPeers.end();++it)
|
||||||
gxs_ids.push_back(*it) ;
|
gxs_ids.push_back(*it) ;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -572,24 +572,6 @@ void IdDialog::updateSelection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString getHumanReadableDuration(uint32_t seconds)
|
|
||||||
{
|
|
||||||
if(seconds < 60)
|
|
||||||
return QString(QObject::tr("%1 seconds ago")).arg(seconds) ;
|
|
||||||
else if(seconds < 120)
|
|
||||||
return QString(QObject::tr("%1 minute ago")).arg(seconds/60) ;
|
|
||||||
else if(seconds < 3600)
|
|
||||||
return QString(QObject::tr("%1 minutes ago")).arg(seconds/60) ;
|
|
||||||
else if(seconds < 7200)
|
|
||||||
return QString(QObject::tr("%1 hour ago")).arg(seconds/3600) ;
|
|
||||||
else if(seconds < 24*3600)
|
|
||||||
return QString(QObject::tr("%1 hours ago")).arg(seconds/3600) ;
|
|
||||||
else if(seconds < 2*24*3600)
|
|
||||||
return QString(QObject::tr("%1 day ago")).arg(seconds/86400) ;
|
|
||||||
else
|
|
||||||
return QString(QObject::tr("%1 days ago")).arg(seconds/86400) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
void IdDialog::requestIdList()
|
void IdDialog::requestIdList()
|
||||||
{
|
{
|
||||||
//Disable by default, will be enable by insertIdDetails()
|
//Disable by default, will be enable by insertIdDetails()
|
||||||
@ -663,8 +645,8 @@ bool IdDialog::fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item,
|
|||||||
item->setText(RSID_COL_NICKNAME, QString::fromUtf8(data.mMeta.mGroupName.c_str()).left(RSID_MAXIMUM_NICKNAME_SIZE));
|
item->setText(RSID_COL_NICKNAME, QString::fromUtf8(data.mMeta.mGroupName.c_str()).left(RSID_MAXIMUM_NICKNAME_SIZE));
|
||||||
item->setText(RSID_COL_KEYID, QString::fromStdString(data.mMeta.mGroupId.toStdString()));
|
item->setText(RSID_COL_KEYID, QString::fromStdString(data.mMeta.mGroupId.toStdString()));
|
||||||
|
|
||||||
time_t now = time(NULL) ;
|
//time_t now = time(NULL) ;
|
||||||
item->setText(RSID_COL_LASTUSED, getHumanReadableDuration(now - data.mLastUsageTS)) ;
|
//item->setText(RSID_COL_LASTUSED, getHumanReadableDuration(now - data.mLastUsageTS)) ;
|
||||||
|
|
||||||
item->setData(RSID_COL_KEYID, Qt::UserRole,QVariant(item_flags)) ;
|
item->setData(RSID_COL_KEYID, Qt::UserRole,QVariant(item_flags)) ;
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,7 @@
|
|||||||
#include "retroshare/rsgxscircles.h"
|
#include "retroshare/rsgxscircles.h"
|
||||||
#include "retroshare/rsgxsflags.h"
|
#include "retroshare/rsgxsflags.h"
|
||||||
#include "retroshare/rsmsgs.h"
|
#include "retroshare/rsmsgs.h"
|
||||||
|
#include "retroshare/rsids.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
@ -563,8 +564,10 @@ void PeopleDialog::chatIdentity()
|
|||||||
|
|
||||||
uint32_t error_code ;
|
uint32_t error_code ;
|
||||||
|
|
||||||
if(!rsMsgs->initiateDistantChatConnexion(RsGxsId(gxs_id), from_gxs_id, error_code))
|
DistantChatPeerId dpid ;
|
||||||
QMessageBox::information(NULL, tr("Distant chat cannot work"), QString("%1 %2: %3").arg(tr("Distant chat refused with this person.")).arg(tr("Error code")).arg(error_code)) ;
|
|
||||||
|
if(!rsMsgs->initiateDistantChatConnexion(RsGxsId(gxs_id), from_gxs_id, dpid,error_code))
|
||||||
|
QMessageBox::information(NULL, tr("Distant chat cannot work"), QString("%1 %2: %3").arg(tr("Distant chat refused with this person.")).arg(tr("Error code")).arg(error_code)) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user