mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
removed debug messages
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-GenericTunneling@6364 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
a8d4c02a6e
commit
182e536061
@ -48,6 +48,7 @@
|
|||||||
/****
|
/****
|
||||||
* #define CHAT_DEBUG 1
|
* #define CHAT_DEBUG 1
|
||||||
****/
|
****/
|
||||||
|
#define DEBUG_DISTANT_CHAT
|
||||||
|
|
||||||
static const int CONNECTION_CHALLENGE_MAX_COUNT = 20 ; // sends a connexion challenge every 20 messages
|
static const int CONNECTION_CHALLENGE_MAX_COUNT = 20 ; // sends a connexion challenge every 20 messages
|
||||||
static const time_t CONNECTION_CHALLENGE_MAX_MSG_AGE = 30 ; // maximum age of a message to be used in a connexion challenge
|
static const time_t CONNECTION_CHALLENGE_MAX_MSG_AGE = 30 ; // maximum age of a message to be used in a connexion challenge
|
||||||
@ -2845,7 +2846,9 @@ bool p3ChatService::handleTunnelRequest(const std::string& hash,const std::strin
|
|||||||
|
|
||||||
std::map<TurtleFileHash,DistantChatInvite>::iterator it = _distant_chat_invites.find(hash) ;
|
std::map<TurtleFileHash,DistantChatInvite>::iterator it = _distant_chat_invites.find(hash) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::handleTunnelRequest: received tunnel request for hash " << hash << std::endl;
|
std::cerr << "p3ChatService::handleTunnelRequest: received tunnel request for hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(it == _distant_chat_invites.end())
|
if(it == _distant_chat_invites.end())
|
||||||
return false ;
|
return false ;
|
||||||
@ -2856,14 +2859,18 @@ bool p3ChatService::handleTunnelRequest(const std::string& hash,const std::strin
|
|||||||
|
|
||||||
void p3ChatService::addVirtualPeer(const TurtleFileHash& hash,const TurtleVirtualPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction dir)
|
void p3ChatService::addVirtualPeer(const TurtleFileHash& hash,const TurtleVirtualPeerId& virtual_peer_id,RsTurtleGenericTunnelItem::Direction dir)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService:: adding new virtual peer " << virtual_peer_id << " for hash " << hash << std::endl;
|
std::cerr << "p3ChatService:: adding new virtual peer " << virtual_peer_id << " for hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
time_t now = time(NULL) ;
|
time_t now = time(NULL) ;
|
||||||
|
|
||||||
if(dir == RsTurtleGenericTunnelItem::DIRECTION_SERVER)
|
if(dir == RsTurtleGenericTunnelItem::DIRECTION_SERVER)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mChatMtx); /********** STACK LOCKED MTX ******/
|
RsStackMutex stack(mChatMtx); /********** STACK LOCKED MTX ******/
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Side is in direction to server." << std::endl;
|
std::cerr << " Side is in direction to server." << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
std::map<TurtleFileHash,DistantChatPeerInfo>::iterator it = _distant_chat_peers.find(hash) ;
|
std::map<TurtleFileHash,DistantChatPeerInfo>::iterator it = _distant_chat_peers.find(hash) ;
|
||||||
|
|
||||||
@ -2877,15 +2884,19 @@ void p3ChatService::addVirtualPeer(const TurtleFileHash& hash,const TurtleVirtua
|
|||||||
it->second.status = RS_DISTANT_CHAT_STATUS_TUNNEL_OK ;
|
it->second.status = RS_DISTANT_CHAT_STATUS_TUNNEL_OK ;
|
||||||
it->second.virtual_peer_id = virtual_peer_id ;
|
it->second.virtual_peer_id = virtual_peer_id ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "(II) Adding virtual peer " << virtual_peer_id << " for chat hash " << hash << std::endl;
|
std::cerr << "(II) Adding virtual peer " << virtual_peer_id << " for chat hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dir == RsTurtleGenericTunnelItem::DIRECTION_CLIENT)
|
if(dir == RsTurtleGenericTunnelItem::DIRECTION_CLIENT)
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mChatMtx); /********** STACK LOCKED MTX ******/
|
RsStackMutex stack(mChatMtx); /********** STACK LOCKED MTX ******/
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Side is in direction to client." << std::endl;
|
std::cerr << " Side is in direction to client." << std::endl;
|
||||||
std::cerr << " Initing encryption parameters from existing distant chat invites." << std::endl;
|
std::cerr << " Initing encryption parameters from existing distant chat invites." << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
std::map<TurtleFileHash,DistantChatInvite>::iterator it = _distant_chat_invites.find(hash) ;
|
std::map<TurtleFileHash,DistantChatInvite>::iterator it = _distant_chat_invites.find(hash) ;
|
||||||
|
|
||||||
@ -2930,6 +2941,7 @@ void p3ChatService::removeVirtualPeer(const TurtleFileHash& hash,const TurtleVir
|
|||||||
rsicontrol->getNotify().notifyPeerStatusChanged(hash,RS_STATUS_OFFLINE) ;
|
rsicontrol->getNotify().notifyPeerStatusChanged(hash,RS_STATUS_OFFLINE) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
static void printBinaryData(void *data,uint32_t size)
|
static void printBinaryData(void *data,uint32_t size)
|
||||||
{
|
{
|
||||||
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
||||||
@ -2940,14 +2952,17 @@ static void printBinaryData(void *data,uint32_t size)
|
|||||||
std::cerr << outl[ ((uint8_t*)data)[j] & 0xf ] ;
|
std::cerr << outl[ ((uint8_t*)data)[j] & 0xf ] ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const std::string& hash,
|
void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const std::string& hash,
|
||||||
const std::string& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction)
|
const std::string& virtual_peer_id,RsTurtleGenericTunnelItem::Direction direction)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::receiveTurtleData(): Received turtle data. " << std::endl;
|
std::cerr << "p3ChatService::receiveTurtleData(): Received turtle data. " << std::endl;
|
||||||
std::cerr << " hash = " << hash << std::endl;
|
std::cerr << " hash = " << hash << std::endl;
|
||||||
std::cerr << " vpid = " << virtual_peer_id << std::endl;
|
std::cerr << " vpid = " << virtual_peer_id << std::endl;
|
||||||
std::cerr << " dir = " << virtual_peer_id << std::endl;
|
std::cerr << " dir = " << virtual_peer_id << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
RsTurtleGenericDataItem *item = dynamic_cast<RsTurtleGenericDataItem*>(gitem) ;
|
RsTurtleGenericDataItem *item = dynamic_cast<RsTurtleGenericDataItem*>(gitem) ;
|
||||||
|
|
||||||
@ -2956,6 +2971,7 @@ void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const st
|
|||||||
std::cerr << "(EE) item is not a data item. That is an error." << std::endl;
|
std::cerr << "(EE) item is not a data item. That is an error." << std::endl;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " size = " << item->data_size << std::endl;
|
std::cerr << " size = " << item->data_size << std::endl;
|
||||||
std::cerr << " data = " << (void*)item->data_bytes << std::endl;
|
std::cerr << " data = " << (void*)item->data_bytes << std::endl;
|
||||||
std::cerr << " IV = " << std::hex << *(uint64_t*)item->data_bytes << std::dec << std::endl;
|
std::cerr << " IV = " << std::hex << *(uint64_t*)item->data_bytes << std::dec << std::endl;
|
||||||
@ -2963,6 +2979,7 @@ void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const st
|
|||||||
|
|
||||||
printBinaryData(item->data_bytes,item->data_size) ;
|
printBinaryData(item->data_bytes,item->data_size) ;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t aes_key[DISTANT_CHAT_AES_KEY_SIZE] ;
|
uint8_t aes_key[DISTANT_CHAT_AES_KEY_SIZE] ;
|
||||||
|
|
||||||
@ -2991,10 +3008,12 @@ void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const st
|
|||||||
uint32_t decrypted_size = RsAES::get_buffer_size(item->data_size-8);
|
uint32_t decrypted_size = RsAES::get_buffer_size(item->data_size-8);
|
||||||
uint8_t *decrypted_data = new uint8_t[decrypted_size];
|
uint8_t *decrypted_data = new uint8_t[decrypted_size];
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Using IV: " << std::hex << *(uint64_t*)item->data_bytes << std::dec << std::endl;
|
std::cerr << " Using IV: " << std::hex << *(uint64_t*)item->data_bytes << std::dec << std::endl;
|
||||||
std::cerr << " Decrypted buffer size: " << decrypted_size << std::endl;
|
std::cerr << " Decrypted buffer size: " << decrypted_size << std::endl;
|
||||||
std::cerr << " key : " ; printBinaryData(aes_key,16) ; std::cerr << std::endl;
|
std::cerr << " key : " ; printBinaryData(aes_key,16) ; std::cerr << std::endl;
|
||||||
std::cerr << " data : " ; printBinaryData(item->data_bytes,item->data_size) ; std::cerr << std::endl;
|
std::cerr << " data : " ; printBinaryData(item->data_bytes,item->data_size) ; std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!RsAES::aes_decrypt_8_16((uint8_t*)item->data_bytes+8,item->data_size-8,aes_key,(uint8_t*)item->data_bytes,decrypted_data,decrypted_size))
|
if(!RsAES::aes_decrypt_8_16((uint8_t*)item->data_bytes+8,item->data_size-8,aes_key,(uint8_t*)item->data_bytes,decrypted_data,decrypted_size))
|
||||||
{
|
{
|
||||||
@ -3003,7 +3022,9 @@ void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const st
|
|||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "(II) Decrypted data: size=" << decrypted_size << std::endl;
|
std::cerr << "(II) Decrypted data: size=" << decrypted_size << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Now try deserialise the decrypted data to make an RsItem out of it.
|
// Now try deserialise the decrypted data to make an RsItem out of it.
|
||||||
//
|
//
|
||||||
@ -3024,7 +3045,9 @@ void p3ChatService::receiveTurtleData( RsTurtleGenericTunnelItem *gitem,const st
|
|||||||
|
|
||||||
void p3ChatService::sendTurtleData(RsChatItem *item)
|
void p3ChatService::sendTurtleData(RsChatItem *item)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::sendTurtleData(): try sending item " << (void*)item << " to tunnel " << item->PeerId() << std::endl;
|
std::cerr << "p3ChatService::sendTurtleData(): try sending item " << (void*)item << " to tunnel " << item->PeerId() << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint32_t rssize = item->serial_size();
|
uint32_t rssize = item->serial_size();
|
||||||
uint8_t *buff = new uint8_t[rssize] ;
|
uint8_t *buff = new uint8_t[rssize] ;
|
||||||
@ -3035,7 +3058,9 @@ void p3ChatService::sendTurtleData(RsChatItem *item)
|
|||||||
delete[] buff ;
|
delete[] buff ;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Serialized item has size " << rssize << std::endl;
|
std::cerr << " Serialized item has size " << rssize << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint8_t aes_key[DISTANT_CHAT_AES_KEY_SIZE] ;
|
uint8_t aes_key[DISTANT_CHAT_AES_KEY_SIZE] ;
|
||||||
std::string virtual_peer_id ;
|
std::string virtual_peer_id ;
|
||||||
@ -3054,7 +3079,9 @@ void p3ChatService::sendTurtleData(RsChatItem *item)
|
|||||||
virtual_peer_id = it->second.virtual_peer_id ;
|
virtual_peer_id = it->second.virtual_peer_id ;
|
||||||
memcpy(aes_key,it->second.aes_key,DISTANT_CHAT_AES_KEY_SIZE) ;
|
memcpy(aes_key,it->second.aes_key,DISTANT_CHAT_AES_KEY_SIZE) ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::sendTurtleData(): tunnel found. Encrypting data." << std::endl;
|
std::cerr << "p3ChatService::sendTurtleData(): tunnel found. Encrypting data." << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Now encrypt this data using AES.
|
// Now encrypt this data using AES.
|
||||||
//
|
//
|
||||||
@ -3063,8 +3090,10 @@ void p3ChatService::sendTurtleData(RsChatItem *item)
|
|||||||
|
|
||||||
uint64_t IV = RSRandom::random_u64() ; // make a random 8 bytes IV
|
uint64_t IV = RSRandom::random_u64() ; // make a random 8 bytes IV
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Using IV: " << std::hex << IV << std::dec << std::endl;
|
std::cerr << " Using IV: " << std::hex << IV << std::dec << std::endl;
|
||||||
std::cerr << " Using Key: " ; printBinaryData(aes_key,16) ; std::cerr << std::endl;
|
std::cerr << " Using Key: " ; printBinaryData(aes_key,16) ; std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
if(!RsAES::aes_crypt_8_16(buff,rssize,aes_key,(uint8_t*)&IV,encrypted_data,encrypted_size))
|
if(!RsAES::aes_crypt_8_16(buff,rssize,aes_key,(uint8_t*)&IV,encrypted_data,encrypted_size))
|
||||||
{
|
{
|
||||||
@ -3088,12 +3117,14 @@ void p3ChatService::sendTurtleData(RsChatItem *item)
|
|||||||
delete[] encrypted_data ;
|
delete[] encrypted_data ;
|
||||||
delete item ;
|
delete item ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::sendTurtleData(): Sending through virtual peer: " << virtual_peer_id << std::endl;
|
std::cerr << "p3ChatService::sendTurtleData(): Sending through virtual peer: " << virtual_peer_id << std::endl;
|
||||||
std::cerr << " gitem->data_size = " << gitem->data_size << std::endl;
|
std::cerr << " gitem->data_size = " << gitem->data_size << std::endl;
|
||||||
std::cerr << " data = " ;
|
std::cerr << " data = " ;
|
||||||
|
|
||||||
printBinaryData(gitem->data_bytes,gitem->data_size) ;
|
printBinaryData(gitem->data_bytes,gitem->data_size) ;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
mTurtle->sendTurtleData(virtual_peer_id,gitem) ;
|
mTurtle->sendTurtleData(virtual_peer_id,gitem) ;
|
||||||
}
|
}
|
||||||
@ -3117,6 +3148,7 @@ bool p3ChatService::createDistantChatInvite(const std::string& pgp_id,time_t tim
|
|||||||
|
|
||||||
std::string hash = t_RsGenericIdType<DISTANT_CHAT_HASH_SIZE>(hash_bytes).toStdString(false) ;
|
std::string hash = t_RsGenericIdType<DISTANT_CHAT_HASH_SIZE>(hash_bytes).toStdString(false) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Created new distant chat invite: " << std::endl;
|
std::cerr << "Created new distant chat invite: " << std::endl;
|
||||||
std::cerr << " validity time stamp = " << invite.time_of_validity << std::endl;
|
std::cerr << " validity time stamp = " << invite.time_of_validity << std::endl;
|
||||||
std::cerr << " hash = " << hash << std::endl;
|
std::cerr << " hash = " << hash << std::endl;
|
||||||
@ -3124,6 +3156,7 @@ bool p3ChatService::createDistantChatInvite(const std::string& pgp_id,time_t tim
|
|||||||
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
||||||
for(uint32_t j = 0; j < 16; j++) { std::cerr << outl[ (invite.aes_key[j]>>4) ] ; std::cerr << outl[ invite.aes_key[j] & 0xf ] ; }
|
for(uint32_t j = 0; j < 16; j++) { std::cerr << outl[ (invite.aes_key[j]>>4) ] ; std::cerr << outl[ invite.aes_key[j] & 0xf ] ; }
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Now encrypt the data to create the link info. We need
|
// Now encrypt the data to create the link info. We need
|
||||||
//
|
//
|
||||||
@ -3146,13 +3179,17 @@ bool p3ChatService::createDistantChatInvite(const std::string& pgp_id,time_t tim
|
|||||||
memcpy(data+DISTANT_CHAT_HASH_SIZE ,invite.aes_key ,DISTANT_CHAT_AES_KEY_SIZE) ;
|
memcpy(data+DISTANT_CHAT_HASH_SIZE ,invite.aes_key ,DISTANT_CHAT_AES_KEY_SIZE) ;
|
||||||
memcpy(data+DISTANT_CHAT_HASH_SIZE+DISTANT_CHAT_AES_KEY_SIZE,OwnId.toByteArray(),KEY_ID_SIZE) ;
|
memcpy(data+DISTANT_CHAT_HASH_SIZE+DISTANT_CHAT_AES_KEY_SIZE,OwnId.toByteArray(),KEY_ID_SIZE) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Performing signature " << std::endl;
|
std::cerr << "Performing signature " << std::endl;
|
||||||
|
#endif
|
||||||
uint32_t signlen = 400;
|
uint32_t signlen = 400;
|
||||||
|
|
||||||
if(!AuthGPG::getAuthGPG()->SignDataBin(data,header_size,data+header_size,&signlen))
|
if(!AuthGPG::getAuthGPG()->SignDataBin(data,header_size,data+header_size,&signlen))
|
||||||
return false ;
|
return false ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Signature length = " << signlen << std::endl;
|
std::cerr << "Signature length = " << signlen << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Then encrypt the whole data into a single string.
|
// Then encrypt the whole data into a single string.
|
||||||
|
|
||||||
@ -3162,7 +3199,9 @@ bool p3ChatService::createDistantChatInvite(const std::string& pgp_id,time_t tim
|
|||||||
if(!AuthGPG::getAuthGPG()->encryptDataBin(pgp_id,(unsigned char *)data,signlen+header_size,encrypted_data,&encrypted_size))
|
if(!AuthGPG::getAuthGPG()->encryptDataBin(pgp_id,(unsigned char *)data,signlen+header_size,encrypted_data,&encrypted_size))
|
||||||
return false ;
|
return false ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Encrypted data size: " << encrypted_size << std::endl;
|
std::cerr << "Encrypted data size: " << encrypted_size << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
Radix64::encode((const char *)encrypted_data,encrypted_size,invite.encrypted_radix64_string) ;
|
Radix64::encode((const char *)encrypted_data,encrypted_size,invite.encrypted_radix64_string) ;
|
||||||
invite.destination_pgp_id = pgp_id ;
|
invite.destination_pgp_id = pgp_id ;
|
||||||
@ -3173,7 +3212,9 @@ bool p3ChatService::createDistantChatInvite(const std::string& pgp_id,time_t tim
|
|||||||
}
|
}
|
||||||
|
|
||||||
encrypted_radix64_string = invite.encrypted_radix64_string ;
|
encrypted_radix64_string = invite.encrypted_radix64_string ;
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Encrypted radix64 string: " << invite.encrypted_radix64_string << std::endl;
|
std::cerr << "Encrypted radix64 string: " << invite.encrypted_radix64_string << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
IndicateConfigChanged();
|
IndicateConfigChanged();
|
||||||
return true ;
|
return true ;
|
||||||
@ -3202,13 +3243,17 @@ bool p3ChatService::initiateDistantChatConnexion(const std::string& encrypted_st
|
|||||||
}
|
}
|
||||||
delete[] encrypted_data_bin ;
|
delete[] encrypted_data_bin ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Chat invite was successfuly decrypted!" << std::endl;
|
std::cerr << "Chat invite was successfuly decrypted!" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
uint32_t header_size = DISTANT_CHAT_HASH_SIZE + DISTANT_CHAT_AES_KEY_SIZE + KEY_ID_SIZE ;
|
uint32_t header_size = DISTANT_CHAT_HASH_SIZE + DISTANT_CHAT_AES_KEY_SIZE + KEY_ID_SIZE ;
|
||||||
|
|
||||||
PGPIdType pgp_id( data + DISTANT_CHAT_HASH_SIZE + DISTANT_CHAT_AES_KEY_SIZE ) ;
|
PGPIdType pgp_id( data + DISTANT_CHAT_HASH_SIZE + DISTANT_CHAT_AES_KEY_SIZE ) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Got this PGP id: " << pgp_id.toStdString() << std::endl;
|
std::cerr << "Got this PGP id: " << pgp_id.toStdString() << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
PGPFingerprintType fingerprint ;
|
PGPFingerprintType fingerprint ;
|
||||||
if(!AuthGPG::getAuthGPG()->getKeyFingerprint(pgp_id,fingerprint))
|
if(!AuthGPG::getAuthGPG()->getKeyFingerprint(pgp_id,fingerprint))
|
||||||
@ -3222,7 +3267,9 @@ bool p3ChatService::initiateDistantChatConnexion(const std::string& encrypted_st
|
|||||||
error_code = RS_DISTANT_CHAT_ERROR_SIGNATURE_MISMATCH ;
|
error_code = RS_DISTANT_CHAT_ERROR_SIGNATURE_MISMATCH ;
|
||||||
return false ;
|
return false ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Signature successfuly verified!" << std::endl;
|
std::cerr << "Signature successfuly verified!" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
hash = t_RsGenericIdType<DISTANT_CHAT_HASH_SIZE>(data).toStdString(false) ;
|
hash = t_RsGenericIdType<DISTANT_CHAT_HASH_SIZE>(data).toStdString(false) ;
|
||||||
DistantChatPeerInfo info ;
|
DistantChatPeerInfo info ;
|
||||||
@ -3238,7 +3285,9 @@ bool p3ChatService::initiateDistantChatConnexion(const std::string& encrypted_st
|
|||||||
|
|
||||||
// Now ask the turtle router to manage a tunnel for that hash.
|
// Now ask the turtle router to manage a tunnel for that hash.
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "Asking turtle router to monitor tunnels for hash " << hash << std::endl;
|
std::cerr << "Asking turtle router to monitor tunnels for hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
mTurtle->monitorTunnels(hash,this) ;
|
mTurtle->monitorTunnels(hash,this) ;
|
||||||
|
|
||||||
@ -3254,20 +3303,25 @@ void p3ChatService::cleanDistantChatInvites()
|
|||||||
|
|
||||||
time_t now = time(NULL) ;
|
time_t now = time(NULL) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << "p3ChatService::cleanDistantChatInvites: " << std::endl;
|
std::cerr << "p3ChatService::cleanDistantChatInvites: " << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
for(std::map<TurtleFileHash,DistantChatInvite>::iterator it(_distant_chat_invites.begin());it!=_distant_chat_invites.end(); )
|
for(std::map<TurtleFileHash,DistantChatInvite>::iterator it(_distant_chat_invites.begin());it!=_distant_chat_invites.end(); )
|
||||||
if(it->second.time_of_validity < now)
|
if(it->second.time_of_validity < now)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Removing hash " << it->first << std::endl;
|
std::cerr << " Removing hash " << it->first << std::endl;
|
||||||
|
#endif
|
||||||
std::map<TurtleFileHash,DistantChatInvite>::iterator tmp(it) ;
|
std::map<TurtleFileHash,DistantChatInvite>::iterator tmp(it) ;
|
||||||
++it ;
|
++it ;
|
||||||
_distant_chat_invites.erase(tmp) ;
|
_distant_chat_invites.erase(tmp) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_CHAT
|
||||||
std::cerr << " Keeping hash " << it->first << std::endl;
|
std::cerr << " Keeping hash " << it->first << std::endl;
|
||||||
|
#endif
|
||||||
++it ;
|
++it ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,8 @@
|
|||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
#define DEBUG_DISTANT_MSG
|
||||||
|
|
||||||
const int msgservicezone = 54319;
|
const int msgservicezone = 54319;
|
||||||
|
|
||||||
static const uint32_t RS_DISTANT_MSG_STATUS_TUNNEL_OK = 0x0001 ;
|
static const uint32_t RS_DISTANT_MSG_STATUS_TUNNEL_OK = 0x0001 ;
|
||||||
@ -1622,7 +1624,9 @@ RsMsgItem *p3MsgService::initMIRsMsg(MessageInfo &info, const std::string &to)
|
|||||||
|
|
||||||
bool p3MsgService::encryptMessage(const std::string& pgp_id,RsMsgItem *item)
|
bool p3MsgService::encryptMessage(const std::string& pgp_id,RsMsgItem *item)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "Encrypting message with public key " << pgp_id << " in place." << std::endl;
|
std::cerr << "Encrypting message with public key " << pgp_id << " in place." << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// 1 - serialise the whole message item into a binary chunk.
|
// 1 - serialise the whole message item into a binary chunk.
|
||||||
//
|
//
|
||||||
@ -1756,20 +1760,26 @@ bool p3MsgService::getDistantOfflineMessengingInvites(std::vector<DistantOffline
|
|||||||
|
|
||||||
invites.push_back(invite) ;
|
invites.push_back(invite) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << " adding invite with hash " << invite.hash << std::endl;
|
std::cerr << " adding invite with hash " << invite.hash << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return true ;
|
return true ;
|
||||||
}
|
}
|
||||||
bool p3MsgService::handleTunnelRequest(const std::string& hash,const std::string& peer_id)
|
bool p3MsgService::handleTunnelRequest(const std::string& hash,const std::string& peer_id)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::handleTunnelRequest: received TR for hash " << hash << std::endl;
|
std::cerr << "p3MsgService::handleTunnelRequest: received TR for hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
|
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
|
||||||
std::map<std::string,DistantMessengingInvite>::const_iterator it = _messenging_invites.find(hash) ;
|
std::map<std::string,DistantMessengingInvite>::const_iterator it = _messenging_invites.find(hash) ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
if(it != _messenging_invites.end())
|
if(it != _messenging_invites.end())
|
||||||
std::cerr << "Responding OK!" << std::endl;
|
std::cerr << "Responding OK!" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return it != _messenging_invites.end() ;
|
return it != _messenging_invites.end() ;
|
||||||
}
|
}
|
||||||
@ -1778,7 +1788,9 @@ void p3MsgService::manageDistantPeers()
|
|||||||
{
|
{
|
||||||
// now possibly flush pending messages
|
// now possibly flush pending messages
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::manageDistantPeers()" << std::endl;
|
std::cerr << "p3MsgService::manageDistantPeers()" << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
std::vector<std::pair<std::string,RsMsgItem*> > to_send ;
|
std::vector<std::pair<std::string,RsMsgItem*> > to_send ;
|
||||||
|
|
||||||
@ -1796,7 +1808,9 @@ void p3MsgService::manageDistantPeers()
|
|||||||
|
|
||||||
for(uint32_t i=0;i<to_send.size();++i)
|
for(uint32_t i=0;i<to_send.size();++i)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << " Flushing msg " << to_send[i].second->msgId << std::endl;
|
std::cerr << " Flushing msg " << to_send[i].second->msgId << std::endl;
|
||||||
|
#endif
|
||||||
sendTurtleData(to_send[i].first,to_send[i].second) ;
|
sendTurtleData(to_send[i].first,to_send[i].second) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1809,7 +1823,9 @@ void p3MsgService::manageDistantPeers()
|
|||||||
for(std::map<std::string,DistantMessengingInvite>::iterator it(_messenging_invites.begin());it!=_messenging_invites.end();)
|
for(std::map<std::string,DistantMessengingInvite>::iterator it(_messenging_invites.begin());it!=_messenging_invites.end();)
|
||||||
if(it->second.time_of_validity < now)
|
if(it->second.time_of_validity < now)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << " Removing outdated invite " << it->second.time_of_validity << ", hash=" << it->first << std::endl;
|
std::cerr << " Removing outdated invite " << it->second.time_of_validity << ", hash=" << it->first << std::endl;
|
||||||
|
#endif
|
||||||
std::map<std::string,DistantMessengingInvite>::iterator tmp(it) ;
|
std::map<std::string,DistantMessengingInvite>::iterator tmp(it) ;
|
||||||
++tmp ;
|
++tmp ;
|
||||||
_messenging_invites.erase(it) ;
|
_messenging_invites.erase(it) ;
|
||||||
@ -1823,7 +1839,9 @@ void p3MsgService::manageDistantPeers()
|
|||||||
for(std::map<std::string,DistantMessengingContact>::iterator it(_messenging_contacts.begin());it!=_messenging_contacts.end();)
|
for(std::map<std::string,DistantMessengingContact>::iterator it(_messenging_contacts.begin());it!=_messenging_contacts.end();)
|
||||||
if(it->second.pending_messages.empty() && it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_DN)
|
if(it->second.pending_messages.empty() && it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_DN)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << " Removing dead contact with no pending msgs and dead tunnel. hash=" << it->first << std::endl;
|
std::cerr << " Removing dead contact with no pending msgs and dead tunnel. hash=" << it->first << std::endl;
|
||||||
|
#endif
|
||||||
std::map<std::string,DistantMessengingContact>::iterator tmp(it) ;
|
std::map<std::string,DistantMessengingContact>::iterator tmp(it) ;
|
||||||
++tmp ;
|
++tmp ;
|
||||||
_messenging_contacts.erase(it) ;
|
_messenging_contacts.erase(it) ;
|
||||||
@ -1847,7 +1865,9 @@ void p3MsgService::addVirtualPeer(const TurtleFileHash& hash, const TurtleVirtua
|
|||||||
contact.last_hit_time = time(NULL) ;
|
contact.last_hit_time = time(NULL) ;
|
||||||
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ;
|
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_OK ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::addVirtualPeer(): adding virtual peer " << vpid << " for hash " << hash << std::endl;
|
std::cerr << "p3MsgService::addVirtualPeer(): adding virtual peer " << vpid << " for hash " << hash << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void p3MsgService::removeVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid)
|
void p3MsgService::removeVirtualPeer(const TurtleFileHash& hash, const TurtleVirtualPeerId& vpid)
|
||||||
{
|
{
|
||||||
@ -1861,6 +1881,7 @@ void p3MsgService::removeVirtualPeer(const TurtleFileHash& hash, const TurtleVir
|
|||||||
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
|
contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
|
||||||
contact.virtual_peer_id.clear() ;
|
contact.virtual_peer_id.clear() ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
static void printBinaryData(void *data,uint32_t size)
|
static void printBinaryData(void *data,uint32_t size)
|
||||||
{
|
{
|
||||||
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
static const char outl[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' } ;
|
||||||
@ -1871,6 +1892,7 @@ static void printBinaryData(void *data,uint32_t size)
|
|||||||
std::cerr << outl[ ((uint8_t*)data)[j] & 0xf ] ;
|
std::cerr << outl[ ((uint8_t*)data)[j] & 0xf ] ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
|
void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
|
||||||
{
|
{
|
||||||
@ -1893,8 +1915,10 @@ void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
|
|||||||
|
|
||||||
delete[] data ;
|
delete[] data ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
printBinaryData(item->data_bytes,item->data_size) ;
|
printBinaryData(item->data_bytes,item->data_size) ;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
// do we have a working tunnel for that hash ?
|
// do we have a working tunnel for that hash ?
|
||||||
// If not, put on the contact's waiting list.
|
// If not, put on the contact's waiting list.
|
||||||
@ -1918,9 +1942,11 @@ void p3MsgService::sendTurtleData(const std::string& hash,RsMsgItem *msgitem)
|
|||||||
}
|
}
|
||||||
virtual_peer_id = it->second.virtual_peer_id ;
|
virtual_peer_id = it->second.virtual_peer_id ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::sendTurtleData(): Sending through virtual peer: " << virtual_peer_id << std::endl;
|
std::cerr << "p3MsgService::sendTurtleData(): Sending through virtual peer: " << virtual_peer_id << std::endl;
|
||||||
std::cerr << " item->data_size = " << item->data_size << std::endl;
|
std::cerr << " item->data_size = " << item->data_size << std::endl;
|
||||||
std::cerr << " data = " ;
|
std::cerr << " data = " ;
|
||||||
|
#endif
|
||||||
|
|
||||||
mTurtle->sendTurtleData(virtual_peer_id,item) ;
|
mTurtle->sendTurtleData(virtual_peer_id,item) ;
|
||||||
}
|
}
|
||||||
@ -1935,11 +1961,13 @@ void p3MsgService::receiveTurtleData(RsTurtleGenericTunnelItem *gitem,const std:
|
|||||||
std::cerr << "(EE) p3MsgService::receiveTurtleData(): item is not a data item. That is an error." << std::endl;
|
std::cerr << "(EE) p3MsgService::receiveTurtleData(): item is not a data item. That is an error." << std::endl;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::sendTurtleData(): Receiving through virtual peer: " << virtual_peer_id << std::endl;
|
std::cerr << "p3MsgService::sendTurtleData(): Receiving through virtual peer: " << virtual_peer_id << std::endl;
|
||||||
std::cerr << " gitem->data_size = " << item->data_size << std::endl;
|
std::cerr << " gitem->data_size = " << item->data_size << std::endl;
|
||||||
std::cerr << " data = " ;
|
std::cerr << " data = " ;
|
||||||
printBinaryData(item->data_bytes,item->data_size) ;
|
printBinaryData(item->data_bytes,item->data_size) ;
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
|
RsStackMutex stack(mMsgMtx); /********** STACK LOCKED MTX ******/
|
||||||
@ -1973,10 +2001,11 @@ void p3MsgService::receiveTurtleData(RsTurtleGenericTunnelItem *gitem,const std:
|
|||||||
|
|
||||||
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
|
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG_DISTANT_MSG
|
||||||
std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl;
|
std::cerr << "p3MsgService::sendDistanteMsgItem(): sending distant msg item to peer " << msgitem->PeerId() << std::endl;
|
||||||
std::cerr << " asking for tunnels" << std::endl;
|
std::cerr << " asking for tunnels" << std::endl;
|
||||||
std::cerr << " recording msg info" << std::endl;
|
std::cerr << " recording msg info" << std::endl;
|
||||||
|
#endif
|
||||||
const std::string& hash = msgitem->PeerId() ;
|
const std::string& hash = msgitem->PeerId() ;
|
||||||
rsTurtle->monitorTunnels(hash,this) ; // create a tunnel for it, and put the msg on the waiting list.
|
rsTurtle->monitorTunnels(hash,this) ; // create a tunnel for it, and put the msg on the waiting list.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user