mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-02-23 08:19:57 -05:00
fixed a few GUI bugs, fixed signature checking, removed message splitting, added identities to create/join methods
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-LobbiesWithGXSIds@7981 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
e337c0e09f
commit
aad84cd54d
@ -354,124 +354,27 @@ bool DistributedChatService::locked_bouncingObjectCheck(RsChatLobbyBouncingObjec
|
||||
// This function should be used for all types of chat messages. But this requires a non backward compatible change in
|
||||
// chat protocol. To be done for version 0.6
|
||||
//
|
||||
void DistributedChatService::checkSizeAndSendLobbyMessage(RsChatLobbyMsgItem *msg)
|
||||
void DistributedChatService::checkSizeAndSendLobbyMessage(RsChatItem *msg)
|
||||
{
|
||||
// We check the message item, and possibly split it into multiple messages, if the message is too big.
|
||||
// Multiple-parts messaging has been disabled in lobbies, because of the following issues:
|
||||
// 1 - it breaks signatures because the subid of each sub-item is changed (can be fixed)
|
||||
// 2 - it breaks (can be fixed as well)
|
||||
// 3 - it is unreliable since items are not guarrantied to all arrive in the end (cannot be fixed)
|
||||
// 4 - large objects can be used to corrupt end peers (cannot be fixed)
|
||||
//
|
||||
static const uint32_t MAX_ITEM_SIZE = 32000 ;
|
||||
|
||||
static const uint32_t MAX_STRING_SIZE = 15000 ;
|
||||
int n=0 ;
|
||||
|
||||
while(msg->message.size() > MAX_STRING_SIZE)
|
||||
if(msg->serial_size() > MAX_ITEM_SIZE)
|
||||
{
|
||||
// chop off the first 15000 wchars
|
||||
|
||||
RsChatLobbyMsgItem *item = new RsChatLobbyMsgItem(*msg) ;
|
||||
|
||||
item->message = item->message.substr(0,MAX_STRING_SIZE) ;
|
||||
msg->message = msg->message.substr(MAX_STRING_SIZE,msg->message.size()-MAX_STRING_SIZE) ;
|
||||
|
||||
// Clear out any one time flags that should not be copied into multiple objects. This is
|
||||
// a precaution, in case the receivign peer does not yet handle split messages transparently.
|
||||
//
|
||||
item->chatFlags &= (RS_CHAT_FLAG_PRIVATE | RS_CHAT_FLAG_PUBLIC | RS_CHAT_FLAG_LOBBY) ;
|
||||
|
||||
// Indicate that the message is to be continued.
|
||||
//
|
||||
item->chatFlags |= RS_CHAT_FLAG_PARTIAL_MESSAGE ;
|
||||
item->subpacket_id = n++ ;
|
||||
|
||||
sendChatItem(item) ;
|
||||
std::cerr << "(EE) Chat item exceeds maximum serial size. It will be dropped." << std::endl;
|
||||
delete msg ;
|
||||
}
|
||||
msg->subpacket_id = n ;
|
||||
sendChatItem(msg) ;
|
||||
}
|
||||
|
||||
bool DistributedChatService::locked_checkAndRebuildPartialLobbyMessage(RsChatLobbyMsgItem *ci)
|
||||
{
|
||||
if(ci == NULL) // null item, should be treated normally.
|
||||
return true ;
|
||||
|
||||
// Check is the item is ending an incomplete item.
|
||||
//
|
||||
std::map<ChatLobbyMsgId,std::vector<RsChatLobbyMsgItem*> >::iterator it = _pendingPartialLobbyMessages.find(ci->msg_id) ;
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "Checking chat message for completeness:" << std::endl;
|
||||
#endif
|
||||
bool ci_is_incomplete = ci->chatFlags & RS_CHAT_FLAG_PARTIAL_MESSAGE ;
|
||||
|
||||
if(it != _pendingPartialLobbyMessages.end())
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Pending message found. Appending it." << std::endl;
|
||||
#endif
|
||||
// Yes, there is. Add the item to the list of stored sub-items
|
||||
|
||||
if(ci->subpacket_id >= it->second.size() )
|
||||
it->second.resize(ci->subpacket_id+1,NULL) ;
|
||||
|
||||
it->second[ci->subpacket_id] = ci ;
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Checking for completeness." << std::endl;
|
||||
#endif
|
||||
// Now check wether we have a complete item or not.
|
||||
//
|
||||
bool complete = true ;
|
||||
for(uint32_t i=0;i<it->second.size() && complete;++i)
|
||||
complete = complete && (it->second[i] != NULL) ;
|
||||
|
||||
complete = complete && !(it->second.back()->chatFlags & RS_CHAT_FLAG_PARTIAL_MESSAGE) ;
|
||||
|
||||
if(complete)
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Message is complete ! Re-forming it and returning true." << std::endl;
|
||||
#endif
|
||||
std::string msg ;
|
||||
uint32_t flags = 0 ;
|
||||
|
||||
for(uint32_t i=0;i<it->second.size();++i)
|
||||
{
|
||||
msg += it->second[i]->message ;
|
||||
flags |= it->second[i]->chatFlags ;
|
||||
|
||||
if(i != ci->subpacket_id) // don't delete ci itself !!
|
||||
delete it->second[i] ;
|
||||
}
|
||||
_pendingPartialLobbyMessages.erase(it) ;
|
||||
|
||||
ci->chatFlags = flags ;
|
||||
ci->message = msg ;
|
||||
ci->chatFlags &= ~RS_CHAT_FLAG_PARTIAL_MESSAGE ; // remove partial flag form message.
|
||||
|
||||
return true ;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Not complete: returning" << std::endl ;
|
||||
#endif
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
else if(ci_is_incomplete || ci->subpacket_id > 0) // the message id might not yet be recorded
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Message is partial, but not recorded. Adding it. " << std::endl;
|
||||
#endif
|
||||
|
||||
_pendingPartialLobbyMessages[ci->msg_id].resize(ci->subpacket_id+1,NULL) ;
|
||||
_pendingPartialLobbyMessages[ci->msg_id][ci->subpacket_id] = ci ;
|
||||
|
||||
return false ;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Message is not partial. Returning it as is." << std::endl;
|
||||
#endif
|
||||
return true ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool DistributedChatService::handleRecvItem(RsChatItem *item)
|
||||
@ -880,10 +783,7 @@ bool DistributedChatService::bounceLobbyObject(RsChatLobbyBouncingObject *item,c
|
||||
|
||||
item2->PeerId(*it) ; // replaces the virtual peer id with the actual destination.
|
||||
|
||||
if(is_message)
|
||||
checkSizeAndSendLobbyMessage(static_cast<RsChatLobbyMsgItem*>(item2)) ;
|
||||
else
|
||||
sendChatItem(item2);
|
||||
checkSizeAndSendLobbyMessage(item2) ;
|
||||
}
|
||||
|
||||
++lobby.connexion_challenge_count ;
|
||||
@ -992,8 +892,7 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
||||
|
||||
int i ;
|
||||
for(i=0;i<6;++i)
|
||||
if(!mIdService->getPrivateKey(lobby.gxs_id,signature_private_key)
|
||||
|| signature_private_key.keyData.bin_data == NULL)
|
||||
if(!mIdService->getPrivateKey(lobby.gxs_id,signature_private_key) || signature_private_key.keyData.bin_data == NULL)
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Cannot get key. Waiting for caching. try " << i << "/6" << std::endl;
|
||||
@ -1010,18 +909,20 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
||||
return false ;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "Signing item." << std::endl;
|
||||
std::cerr << " data hash: " << RsDirUtil::sha1sum(memory,item.signed_serial_size()) << std::endl;
|
||||
std::cerr << " signed data: " << RsUtil::BinToHex((char*)memory,item.signed_serial_size()) << std::endl;
|
||||
#endif
|
||||
|
||||
if(!GxsSecurity::getSignature((const char *)memory,item.signed_serial_size(),signature_private_key,item.signature))
|
||||
{
|
||||
std::cerr << "(EE) Cannot sign message item. " << std::endl;
|
||||
return false ;
|
||||
}
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " signature done." << std::endl;
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
// check signature
|
||||
RsTlvSecurityKey public_key ;
|
||||
GxsSecurity::extractPublicKey(signature_private_key,public_key) ;
|
||||
@ -1059,6 +960,7 @@ bool DistributedChatService::sendLobbyChat(const ChatLobbyId& lobby_id, const st
|
||||
item.sendTime = time(NULL);
|
||||
item.recvTime = item.sendTime;
|
||||
item.message = msg;
|
||||
item.parent_msg_id = 0;
|
||||
|
||||
// gives a random msg id, setup the nickname, and signs the item.
|
||||
|
||||
@ -1066,7 +968,7 @@ bool DistributedChatService::sendLobbyChat(const ChatLobbyId& lobby_id, const st
|
||||
return false;
|
||||
}
|
||||
|
||||
RsPeerId ownId = rsPeers->getOwnId();
|
||||
RsPeerId ownId = rsPeers->getOwnId();
|
||||
|
||||
bounceLobbyObject(&item, ownId) ;
|
||||
|
||||
@ -1337,9 +1239,9 @@ void DistributedChatService::getPendingChatLobbyInvites(std::list<ChatLobbyInvit
|
||||
}
|
||||
|
||||
|
||||
bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id)
|
||||
bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id,const RsGxsId& identity)
|
||||
{
|
||||
{
|
||||
{
|
||||
RsStackMutex stack(mDistributedChatMtx); /********** STACK LOCKED MTX ******/
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
@ -1360,6 +1262,16 @@ bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id)
|
||||
return true ;
|
||||
}
|
||||
|
||||
RsIdentityDetails details ;
|
||||
|
||||
// This is our own identity. We force the loading from the cache.
|
||||
|
||||
for(int i=0;i<6;++i)
|
||||
if(mIdService->getIdDetails(identity,details))
|
||||
break ;
|
||||
else
|
||||
usleep(500*1000) ;
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " Creating new Lobby entry." << std::endl;
|
||||
#endif
|
||||
@ -1368,7 +1280,7 @@ bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id)
|
||||
ChatLobbyEntry entry ;
|
||||
entry.participating_friends.insert(it->second.peer_id) ;
|
||||
entry.lobby_flags = it->second.lobby_flags ;
|
||||
entry.gxs_id = _default_identity ;
|
||||
entry.gxs_id = identity ;
|
||||
entry.lobby_id = lobby_id ;
|
||||
entry.lobby_name = it->second.lobby_name ;
|
||||
entry.lobby_topic = it->second.lobby_topic ;
|
||||
@ -1391,7 +1303,8 @@ bool DistributedChatService::acceptLobbyInvite(const ChatLobbyId& lobby_id)
|
||||
RsChatLobbyMsgItem *item = new RsChatLobbyMsgItem;
|
||||
item->lobby_id = entry.lobby_id ;
|
||||
item->msg_id = 0 ;
|
||||
item->nick = "Lobby management" ;
|
||||
item->parent_msg_id = 0 ;
|
||||
item->nick = "Lobby management" ;
|
||||
item->message = std::string("Welcome to chat lobby") ;
|
||||
item->PeerId(entry.virtual_peer_id) ;
|
||||
item->chatFlags = RS_CHAT_FLAG_PRIVATE | RS_CHAT_FLAG_LOBBY ;
|
||||
@ -1443,7 +1356,15 @@ bool DistributedChatService::joinVisibleChatLobby(const ChatLobbyId& lobby_id,co
|
||||
{
|
||||
RsIdentityDetails details ;
|
||||
|
||||
if(gxs_id.isNull() || !mIdService->getIdDetails(gxs_id,details) || !details.mIsOwnId)
|
||||
// This is our own identity. We force the loading from the cache.
|
||||
|
||||
for(int i=0;i<6;++i)
|
||||
if(mIdService->getIdDetails(gxs_id,details))
|
||||
break ;
|
||||
else
|
||||
usleep(500*1000) ;
|
||||
|
||||
if(gxs_id.isNull() || !details.mIsOwnId)
|
||||
{
|
||||
std::cerr << "(EE) Cannot lobby using gxs id " << gxs_id << std::endl;
|
||||
return false ;
|
||||
@ -1516,7 +1437,7 @@ bool DistributedChatService::joinVisibleChatLobby(const ChatLobbyId& lobby_id,co
|
||||
return true ;
|
||||
}
|
||||
|
||||
ChatLobbyId DistributedChatService::createChatLobby(const std::string& lobby_name,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags lobby_flags)
|
||||
ChatLobbyId DistributedChatService::createChatLobby(const std::string& lobby_name,const RsGxsId& lobby_identity,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags lobby_flags)
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "Creating a new Chat lobby !!" << std::endl;
|
||||
@ -1537,7 +1458,7 @@ ChatLobbyId DistributedChatService::createChatLobby(const std::string& lobby_nam
|
||||
ChatLobbyEntry entry ;
|
||||
entry.lobby_flags = lobby_flags ;
|
||||
entry.participating_friends.clear() ;
|
||||
entry.gxs_id = _default_identity ; // to be changed. For debug only!!
|
||||
entry.gxs_id = lobby_identity ; // to be changed. For debug only!!
|
||||
entry.lobby_id = lobby_id ;
|
||||
entry.lobby_name = lobby_name ;
|
||||
entry.lobby_topic = lobby_topic ;
|
||||
|
@ -62,7 +62,7 @@ class DistributedChatService
|
||||
bool isLobbyId(const RsPeerId& virtual_peer_id, ChatLobbyId& lobby_id) ;
|
||||
void getChatLobbyList(std::list<ChatLobbyId>& clids) ;
|
||||
bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& clinfo) ;
|
||||
bool acceptLobbyInvite(const ChatLobbyId& id) ;
|
||||
bool acceptLobbyInvite(const ChatLobbyId& id,const RsGxsId& identity) ;
|
||||
void denyLobbyInvite(const ChatLobbyId& id) ;
|
||||
void getPendingChatLobbyInvites(std::list<ChatLobbyInvite>& invites) ;
|
||||
void invitePeerToLobby(const ChatLobbyId&, const RsPeerId& peer_id,bool connexion_challenge = false) ;
|
||||
@ -75,7 +75,7 @@ class DistributedChatService
|
||||
bool getLobbyAutoSubscribe(const ChatLobbyId& lobby_id);
|
||||
void sendLobbyStatusString(const ChatLobbyId& id,const std::string& status_string) ;
|
||||
|
||||
ChatLobbyId createChatLobby(const std::string& lobby_name,const std::string& lobby_topic, const std::list<RsPeerId>& invited_friends,ChatLobbyFlags flags) ;
|
||||
ChatLobbyId createChatLobby(const std::string& lobby_name,const RsGxsId& lobby_identity,const std::string& lobby_topic, const std::list<RsPeerId>& invited_friends,ChatLobbyFlags flags) ;
|
||||
|
||||
void getListOfNearbyChatLobbies(std::vector<VisibleChatLobbyRecord>& public_lobbies) ;
|
||||
bool joinVisibleChatLobby(const ChatLobbyId& id, const RsGxsId &gxs_id) ;
|
||||
@ -91,7 +91,7 @@ class DistributedChatService
|
||||
bool processLoadListItem(const RsItem *item) ;
|
||||
|
||||
bool locked_checkAndRebuildPartialLobbyMessage(RsChatLobbyMsgItem *) ;
|
||||
void checkSizeAndSendLobbyMessage(RsChatLobbyMsgItem *) ;
|
||||
void checkSizeAndSendLobbyMessage(RsChatItem *) ;
|
||||
|
||||
bool sendLobbyChat(const ChatLobbyId &lobby_id, const std::string&) ;
|
||||
bool handleRecvChatLobbyMsgItem(RsChatMsgItem *item) ;
|
||||
|
@ -363,7 +363,6 @@ uint32_t RsChatLobbyListItem::serial_size()
|
||||
uint32_t RsChatLobbyMsgItem::serial_size()
|
||||
{
|
||||
uint32_t s = RsChatMsgItem::serial_size() ; // parent
|
||||
s += 1; // subpacket id
|
||||
s += 8; // parent_msg_id
|
||||
s += RsChatLobbyBouncingObject::serialized_size(true) ;
|
||||
|
||||
@ -372,7 +371,6 @@ uint32_t RsChatLobbyMsgItem::serial_size()
|
||||
uint32_t RsChatLobbyMsgItem::signed_serial_size()
|
||||
{
|
||||
uint32_t s = RsChatMsgItem::serial_size() ; // parent
|
||||
s += 1; // subpacket id
|
||||
s += 8; // parent_msg_id
|
||||
s += RsChatLobbyBouncingObject::serialized_size(false) ;
|
||||
|
||||
@ -572,7 +570,6 @@ bool RsChatLobbyMsgItem::serialise(void *data, uint32_t& pktsize)
|
||||
ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header!
|
||||
pktsize = tlvsize;
|
||||
|
||||
ok &= setRawUInt8(data, tlvsize, &offset, subpacket_id);
|
||||
ok &= setRawUInt64(data, tlvsize, &offset, parent_msg_id);
|
||||
|
||||
// The signature is at the end of the serialised data, so that the signed data is *before* the signature.
|
||||
@ -605,7 +602,7 @@ bool RsChatLobbyMsgItem::serialise_signed_part(void *data, uint32_t& pktsize)
|
||||
ok &= setRsItemHeader(data, tlvsize, PacketId(), tlvsize); // correct header!
|
||||
pktsize = tlvsize;
|
||||
|
||||
ok &= setRawUInt8(data, tlvsize, &offset, subpacket_id);
|
||||
//ok &= setRawUInt8(data, tlvsize, &offset, subpacket_id); // don't serialise sub-part id.
|
||||
ok &= setRawUInt64(data, tlvsize, &offset, parent_msg_id);
|
||||
|
||||
// The signature is at the end of the serialised data, so that the signed data is *before* the signature.
|
||||
@ -1056,7 +1053,6 @@ RsChatLobbyMsgItem::RsChatLobbyMsgItem(void *data,uint32_t /*size*/)
|
||||
|
||||
uint32_t offset = RsChatMsgItem::serial_size() ;
|
||||
|
||||
ok &= getRawUInt8(data, rssize, &offset, &subpacket_id);
|
||||
ok &= getRawUInt64(data, rssize, &offset, &parent_msg_id);
|
||||
|
||||
ok &= RsChatLobbyBouncingObject::deserialise_from_memory(data,rssize,offset) ;
|
||||
|
@ -169,7 +169,6 @@ public:
|
||||
virtual uint32_t signed_serial_size() ;
|
||||
virtual bool serialise_signed_part(void *data,uint32_t& size) ;// Isn't it better that items can serialize themselves ?
|
||||
|
||||
uint8_t subpacket_id ; // this is for proper handling of split packets.
|
||||
ChatLobbyMsgId parent_msg_id ; // Used for threaded chat.
|
||||
};
|
||||
|
||||
|
@ -454,7 +454,7 @@ virtual void getChatLobbyList(std::list<ChatLobbyId>& cl_list) = 0;
|
||||
virtual bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& info) = 0 ;
|
||||
virtual void getListOfNearbyChatLobbies(std::vector<VisibleChatLobbyRecord>& public_lobbies) = 0 ;
|
||||
virtual void invitePeerToLobby(const ChatLobbyId& lobby_id,const RsPeerId& peer_id) = 0;
|
||||
virtual bool acceptLobbyInvite(const ChatLobbyId& id) = 0 ;
|
||||
virtual bool acceptLobbyInvite(const ChatLobbyId& id,const RsGxsId& identity) = 0 ;
|
||||
virtual void denyLobbyInvite(const ChatLobbyId& id) = 0 ;
|
||||
virtual void getPendingChatLobbyInvites(std::list<ChatLobbyInvite>& invites) = 0;
|
||||
virtual void unsubscribeChatLobby(const ChatLobbyId& lobby_id) = 0;
|
||||
@ -464,7 +464,7 @@ virtual bool setDefaultIdentityForChatLobby(const RsGxsId& nick) = 0;
|
||||
virtual bool getDefaultIdentityForChatLobby(RsGxsId& id) = 0 ;
|
||||
virtual void setLobbyAutoSubscribe(const ChatLobbyId& lobby_id, const bool autoSubscribe) = 0 ;
|
||||
virtual bool getLobbyAutoSubscribe(const ChatLobbyId& lobby_id) = 0 ;
|
||||
virtual ChatLobbyId createChatLobby(const std::string& lobby_name,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags lobby_privacy_type) = 0 ;
|
||||
virtual ChatLobbyId createChatLobby(const std::string& lobby_name,const RsGxsId& lobby_identity,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags lobby_privacy_type) = 0 ;
|
||||
|
||||
/****************************************/
|
||||
/* Distant chat */
|
||||
|
@ -493,9 +493,9 @@ void p3Msgs::getListOfNearbyChatLobbies(std::vector<VisibleChatLobbyRecord>& pub
|
||||
mChatSrv->getListOfNearbyChatLobbies(public_lobbies) ;
|
||||
}
|
||||
|
||||
ChatLobbyId p3Msgs::createChatLobby(const std::string& lobby_name,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags privacy_type)
|
||||
ChatLobbyId p3Msgs::createChatLobby(const std::string& lobby_name,const RsGxsId& lobby_identity,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags privacy_type)
|
||||
{
|
||||
return mChatSrv->createChatLobby(lobby_name,lobby_topic,invited_friends,privacy_type) ;
|
||||
return mChatSrv->createChatLobby(lobby_name,lobby_identity,lobby_topic,invited_friends,privacy_type) ;
|
||||
}
|
||||
|
||||
void p3Msgs::setLobbyAutoSubscribe(const ChatLobbyId& lobby_id, const bool autoSubscribe)
|
||||
@ -509,9 +509,9 @@ bool p3Msgs::getLobbyAutoSubscribe(const ChatLobbyId& lobby_id)
|
||||
}
|
||||
|
||||
|
||||
bool p3Msgs::acceptLobbyInvite(const ChatLobbyId& id)
|
||||
bool p3Msgs::acceptLobbyInvite(const ChatLobbyId& id,const RsGxsId& gxs_id)
|
||||
{
|
||||
return mChatSrv->acceptLobbyInvite(id) ;
|
||||
return mChatSrv->acceptLobbyInvite(id,gxs_id) ;
|
||||
}
|
||||
void p3Msgs::denyLobbyInvite(const ChatLobbyId& id)
|
||||
{
|
||||
|
@ -143,7 +143,7 @@ class p3Msgs: public RsMsgs
|
||||
virtual void getChatLobbyList(std::list<ChatLobbyId>& cl_list) ;
|
||||
virtual bool getChatLobbyInfo(const ChatLobbyId& id,ChatLobbyInfo& info) ;
|
||||
virtual void invitePeerToLobby(const ChatLobbyId&, const RsPeerId&) ;
|
||||
virtual bool acceptLobbyInvite(const ChatLobbyId& id) ;
|
||||
virtual bool acceptLobbyInvite(const ChatLobbyId& id, const RsGxsId &gxs_id) ;
|
||||
virtual void denyLobbyInvite(const ChatLobbyId& id) ;
|
||||
virtual void getPendingChatLobbyInvites(std::list<ChatLobbyInvite>& invites) ;
|
||||
virtual void unsubscribeChatLobby(const ChatLobbyId& lobby_id) ;
|
||||
@ -153,7 +153,7 @@ class p3Msgs: public RsMsgs
|
||||
virtual bool getDefaultIdentityForChatLobby(RsGxsId& nick) ;
|
||||
virtual void setLobbyAutoSubscribe(const ChatLobbyId& lobby_id, const bool autoSubscribe);
|
||||
virtual bool getLobbyAutoSubscribe(const ChatLobbyId& lobby_id);
|
||||
virtual ChatLobbyId createChatLobby(const std::string& lobby_name,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags privacy_type) ;
|
||||
virtual ChatLobbyId createChatLobby(const std::string& lobby_name,const RsGxsId& lobby_identity,const std::string& lobby_topic,const std::list<RsPeerId>& invited_friends,ChatLobbyFlags privacy_type) ;
|
||||
|
||||
virtual bool initiateDistantChatConnexion(const RsGxsId& to_gxs_id,const RsGxsId& from_gxs_id,uint32_t& error_code) ;
|
||||
virtual bool getDistantChatStatus(const RsGxsId& gxs_id,uint32_t& status, RsGxsId *from_gxs_id=NULL) ;
|
||||
|
@ -837,22 +837,28 @@ void ChatLobbyWidget::readChatLobbyInvites()
|
||||
std::list<ChatLobbyInvite> invites;
|
||||
rsMsgs->getPendingChatLobbyInvites(invites);
|
||||
|
||||
for(std::list<ChatLobbyInvite>::const_iterator it(invites.begin());it!=invites.end();++it) {
|
||||
if (QMessageBox::Ok == QMessageBox::question(this, tr("Invitation to chat lobby"), tr("%1 invites you to chat lobby named %2").arg(QString::fromUtf8(rsPeers->getPeerName((*it).peer_id).c_str())).arg(RsHtml::plainText(it->lobby_name)), QMessageBox::Ok, QMessageBox::Ignore)) {
|
||||
std::cerr << "Accepting invite to lobby " << (*it).lobby_name << std::endl;
|
||||
for(std::list<ChatLobbyInvite>::const_iterator it(invites.begin());it!=invites.end();++it)
|
||||
{
|
||||
#warning We need here a QDialog that also asks for the identity to use.
|
||||
#ifdef REMOVED_CODE
|
||||
QDialog dialog ;
|
||||
|
||||
rsMsgs->acceptLobbyInvite((*it).lobby_id);
|
||||
if (QMessageBox::Ok == QMessageBox::question(this, tr("Invitation to chat lobby"), tr("%1 invites you to chat lobby named %2").arg(QString::fromUtf8(rsPeers->getPeerName((*it).peer_id).c_str())).arg(RsHtml::plainText(it->lobby_name)), QMessageBox::Ok, QMessageBox::Ignore)) {
|
||||
std::cerr << "Accepting invite to lobby " << (*it).lobby_name << std::endl;
|
||||
|
||||
rsMsgs->acceptLobbyInvite((*it).lobby_id);
|
||||
|
||||
RsPeerId vpid;
|
||||
if(rsMsgs->getVirtualPeerId((*it).lobby_id,vpid )) {
|
||||
if(rsMsgs->getVirtualPeerId((*it).lobby_id,vpid )) {
|
||||
ChatDialog::chatFriend(ChatId((*it).lobby_id),true);
|
||||
} else {
|
||||
std::cerr << "No lobby known with id 0x" << std::hex << (*it).lobby_id << std::dec << std::endl;
|
||||
}
|
||||
} else {
|
||||
rsMsgs->denyLobbyInvite((*it).lobby_id);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
std::cerr << "No lobby known with id 0x" << std::hex << (*it).lobby_id << std::dec << std::endl;
|
||||
}
|
||||
} else {
|
||||
rsMsgs->denyLobbyInvite((*it).lobby_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void ChatLobbyWidget::filterColumnChanged(int)
|
||||
|
@ -626,7 +626,7 @@ void ChatLobbyDialog::displayLobbyEvent(int event_type, const RsGxsId& gxs_id, c
|
||||
|
||||
qsParticipant=gxs_id;
|
||||
|
||||
ui.chatWidget->updateStatusString(RsHtml::plainText(name) + " %1", RsHtml::plainText(name));
|
||||
ui.chatWidget->updateStatusString(RsHtml::plainText(name) + " %1", RsHtml::plainText(str));
|
||||
|
||||
if (!isParticipantMuted(gxs_id))
|
||||
emit typingEventReceived(id()) ;
|
||||
|
@ -112,25 +112,14 @@ void CreateLobbyDialog::createLobby()
|
||||
std::list<RsPeerId> shareList;
|
||||
ui->keyShareList->selectedIds<RsPeerId,FriendSelectionWidget::IDTYPE_SSL>(shareList, false);
|
||||
|
||||
// if (shareList.empty()) {
|
||||
// QMessageBox::warning(this, "RetroShare", tr("Please select at least one friend"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
// return;
|
||||
// }
|
||||
// if (shareList.empty()) {
|
||||
// QMessageBox::warning(this, "RetroShare", tr("Please select at least one friend"), QMessageBox::Ok, QMessageBox::Ok);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// create chat lobby !!
|
||||
std::string lobby_name = ui->lobbyName_LE->text().toUtf8().constData() ;
|
||||
std::string lobby_topic = ui->lobbyTopic_LE->text().toUtf8().constData() ;
|
||||
|
||||
// add to group
|
||||
|
||||
ChatLobbyFlags lobby_flags ;
|
||||
|
||||
if(ui->security_CB->currentIndex() == 0)
|
||||
lobby_flags |= RS_CHAT_LOBBY_FLAGS_PUBLIC ;
|
||||
|
||||
ChatLobbyId id = rsMsgs->createChatLobby(lobby_name, lobby_topic, shareList, lobby_flags);
|
||||
|
||||
std::cerr << "gui: Created chat lobby " << std::hex << id << std::endl ;
|
||||
// create chat lobby !!
|
||||
std::string lobby_name = ui->lobbyName_LE->text().toUtf8().constData() ;
|
||||
std::string lobby_topic = ui->lobbyTopic_LE->text().toUtf8().constData() ;
|
||||
|
||||
// set nick name !
|
||||
RsGxsId gxs_id ;
|
||||
@ -140,10 +129,19 @@ void CreateLobbyDialog::createLobby()
|
||||
case GxsIdChooser::None:
|
||||
return ;
|
||||
}
|
||||
rsMsgs->setIdentityForChatLobby(id,gxs_id) ;
|
||||
// add to group
|
||||
|
||||
// open chat window !!
|
||||
ChatLobbyFlags lobby_flags ;
|
||||
|
||||
if(ui->security_CB->currentIndex() == 0)
|
||||
lobby_flags |= RS_CHAT_LOBBY_FLAGS_PUBLIC ;
|
||||
|
||||
ChatLobbyId id = rsMsgs->createChatLobby(lobby_name,gxs_id, lobby_topic, shareList, lobby_flags);
|
||||
|
||||
std::cerr << "gui: Created chat lobby " << std::hex << id << std::endl ;
|
||||
|
||||
// open chat window !!
|
||||
ChatDialog::chatFriend(ChatId(id)) ;
|
||||
|
||||
close();
|
||||
close();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user