mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-13 16:45:49 -04:00
- removed global GROUTER define. Enabled now by default (except for a ifdef ENABLE_GROUTER in rsinit.cc)
- added code to actualy receive messages - fixed a few bugs in the GUI git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IdCleaning@7198 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
52d836225c
commit
0b812e636d
8 changed files with 57 additions and 92 deletions
|
@ -49,7 +49,7 @@ class GRouterClientService
|
||||||
//
|
//
|
||||||
// GRouter stays owner of the item, so the client should not delete it!
|
// GRouter stays owner of the item, so the client should not delete it!
|
||||||
//
|
//
|
||||||
virtual void receiveGRouterData(RsGRouterGenericDataItem * /*item*/,const GRouterKeyId& destination_key)
|
virtual void receiveGRouterData(const GRouterKeyId& destination_key, const RsGRouterGenericDataItem * /*item*/)
|
||||||
{
|
{
|
||||||
std::cerr << "!!!!!! Received Data from global router, but the client service is not handling it !!!!!!!!!!" << std::endl ;
|
std::cerr << "!!!!!! Received Data from global router, but the client service is not handling it !!!!!!!!!!" << std::endl ;
|
||||||
std::cerr << " destination key_id = " << destination_key.toStdString() << std::endl;
|
std::cerr << " destination key_id = " << destination_key.toStdString() << std::endl;
|
||||||
|
|
|
@ -215,7 +215,8 @@ int p3GRouter::tick()
|
||||||
{
|
{
|
||||||
last_publish_campaign_time = now ;
|
last_publish_campaign_time = now ;
|
||||||
|
|
||||||
publishKeys() ;
|
//publishKeys() ; // we don't publish keys anymore.
|
||||||
|
//
|
||||||
_routing_matrix.updateRoutingProbabilities() ;
|
_routing_matrix.updateRoutingProbabilities() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -701,7 +702,7 @@ void p3GRouter::handleRecvDataItem(RsGRouterGenericDataItem *item)
|
||||||
if(its != _registered_services.end())
|
if(its != _registered_services.end())
|
||||||
{
|
{
|
||||||
std::cerr << " Key is owned by us. Notifying service for this item." << std::endl;
|
std::cerr << " Key is owned by us. Notifying service for this item." << std::endl;
|
||||||
its->second->receiveGRouterData(item_copy,it->first) ;
|
its->second->receiveGRouterData(it->first,item_copy) ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
std::cerr << " (EE) weird situation. No service registered for a key that we own. Key id = " << item->destination_key.toStdString() << ", service id = " << it->second.service_id << std::endl;
|
std::cerr << " (EE) weird situation. No service registered for a key that we own. Key id = " << item->destination_key.toStdString() << ", service id = " << it->second.service_id << std::endl;
|
||||||
|
|
|
@ -7,7 +7,7 @@ TARGET = retroshare
|
||||||
#GXS Stuff.
|
#GXS Stuff.
|
||||||
# This should be disabled for releases until further notice.
|
# This should be disabled for releases until further notice.
|
||||||
CONFIG += gxs debug
|
CONFIG += gxs debug
|
||||||
#CONFIG += grouter
|
|
||||||
#CONFIG += dsdv
|
#CONFIG += dsdv
|
||||||
|
|
||||||
profiling {
|
profiling {
|
||||||
|
@ -34,23 +34,6 @@ debug {
|
||||||
QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer
|
QMAKE_CXXFLAGS *= -g -fno-omit-frame-pointer
|
||||||
}
|
}
|
||||||
|
|
||||||
grouter {
|
|
||||||
DEFINES *= GROUTER
|
|
||||||
|
|
||||||
HEADERS += grouter/groutercache.h \
|
|
||||||
grouter/rsgrouter.h \
|
|
||||||
grouter/grouteritems.h \
|
|
||||||
grouter/p3grouter.h \
|
|
||||||
grouter/rsgroutermatrix.h \
|
|
||||||
grouter/rsgrouterclient.h
|
|
||||||
|
|
||||||
SOURCES += grouter/p3grouter.cc \
|
|
||||||
grouter/grouteritems.cc \
|
|
||||||
grouter/groutermatrix.cc
|
|
||||||
# grouter/groutercache.cc \
|
|
||||||
# grouter/rsgrouterclient.cc
|
|
||||||
}
|
|
||||||
|
|
||||||
dsdv {
|
dsdv {
|
||||||
DEFINES *= SERVICES_DSDV
|
DEFINES *= SERVICES_DSDV
|
||||||
HEADERS += services/p3dsdv.h \
|
HEADERS += services/p3dsdv.h \
|
||||||
|
@ -396,6 +379,13 @@ HEADERS += rsserver/p3face.h \
|
||||||
rsserver/rsaccounts.h \
|
rsserver/rsaccounts.h \
|
||||||
rsserver/p3serverconfig.h
|
rsserver/p3serverconfig.h
|
||||||
|
|
||||||
|
HEADERS += grouter/groutercache.h \
|
||||||
|
grouter/rsgrouter.h \
|
||||||
|
grouter/grouteritems.h \
|
||||||
|
grouter/p3grouter.h \
|
||||||
|
grouter/rsgroutermatrix.h \
|
||||||
|
grouter/rsgrouterclient.h
|
||||||
|
|
||||||
HEADERS += serialiser/rsbaseserial.h \
|
HEADERS += serialiser/rsbaseserial.h \
|
||||||
serialiser/rsfiletransferitems.h \
|
serialiser/rsfiletransferitems.h \
|
||||||
serialiser/rsserviceserialiser.h \
|
serialiser/rsserviceserialiser.h \
|
||||||
|
@ -523,6 +513,10 @@ SOURCES += rsserver/p3face-config.cc \
|
||||||
rsserver/rstypes.cc \
|
rsserver/rstypes.cc \
|
||||||
rsserver/p3serverconfig.cc
|
rsserver/p3serverconfig.cc
|
||||||
|
|
||||||
|
SOURCES += grouter/p3grouter.cc \
|
||||||
|
grouter/grouteritems.cc \
|
||||||
|
grouter/groutermatrix.cc
|
||||||
|
|
||||||
SOURCES += plugins/pluginmanager.cc \
|
SOURCES += plugins/pluginmanager.cc \
|
||||||
plugins/dlfcn_win32.cc \
|
plugins/dlfcn_win32.cc \
|
||||||
serialiser/rspluginitems.cc
|
serialiser/rspluginitems.cc
|
||||||
|
|
|
@ -56,6 +56,8 @@
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#define ENABLE_GROUTER
|
||||||
|
|
||||||
#if (defined(__unix__) || defined(unix)) && !defined(USG)
|
#if (defined(__unix__) || defined(unix)) && !defined(USG)
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -69,7 +71,7 @@
|
||||||
#include "pqi/sslfns.h"
|
#include "pqi/sslfns.h"
|
||||||
#include "pqi/authgpg.h"
|
#include "pqi/authgpg.h"
|
||||||
|
|
||||||
#ifdef GROUTER
|
#ifdef ENABLE_GROUTER
|
||||||
#include "grouter/p3grouter.h"
|
#include "grouter/p3grouter.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -839,7 +841,7 @@ bool RsInit::SetHiddenLocation(const std::string& hiddenaddress, uint16_t port)
|
||||||
|
|
||||||
RsFiles *rsFiles = NULL;
|
RsFiles *rsFiles = NULL;
|
||||||
RsTurtle *rsTurtle = NULL ;
|
RsTurtle *rsTurtle = NULL ;
|
||||||
#ifdef GROUTER
|
#ifdef ENABLE_GROUTER
|
||||||
RsGRouter *rsGRouter = NULL ;
|
RsGRouter *rsGRouter = NULL ;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1487,7 +1489,7 @@ int RsServer::StartupRetroShare()
|
||||||
chatSrv = new p3ChatService(mLinkMgr, mHistoryMgr);
|
chatSrv = new p3ChatService(mLinkMgr, mHistoryMgr);
|
||||||
mStatusSrv = new p3StatusService(mLinkMgr);
|
mStatusSrv = new p3StatusService(mLinkMgr);
|
||||||
|
|
||||||
#ifdef GROUTER
|
#ifdef ENABLE_GROUTER
|
||||||
p3GRouter *gr = new p3GRouter(mLinkMgr) ;
|
p3GRouter *gr = new p3GRouter(mLinkMgr) ;
|
||||||
rsGRouter = gr ;
|
rsGRouter = gr ;
|
||||||
pqih->addService(gr) ;
|
pqih->addService(gr) ;
|
||||||
|
@ -1505,7 +1507,7 @@ int RsServer::StartupRetroShare()
|
||||||
|
|
||||||
ftserver->connectToTurtleRouter(tr) ;
|
ftserver->connectToTurtleRouter(tr) ;
|
||||||
chatSrv->connectToTurtleRouter(tr) ;
|
chatSrv->connectToTurtleRouter(tr) ;
|
||||||
#ifdef GROUTER
|
#ifdef ENABLE_GROUTER
|
||||||
msgSrv->connectToGlobalRouter(gr) ;
|
msgSrv->connectToGlobalRouter(gr) ;
|
||||||
#endif
|
#endif
|
||||||
pqih -> addService(mHeart);
|
pqih -> addService(mHeart);
|
||||||
|
@ -1618,7 +1620,7 @@ int RsServer::StartupRetroShare()
|
||||||
mConfigMgr->addConfiguration("p3History.cfg", mHistoryMgr);
|
mConfigMgr->addConfiguration("p3History.cfg", mHistoryMgr);
|
||||||
mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv);
|
mConfigMgr->addConfiguration("p3Status.cfg", mStatusSrv);
|
||||||
mConfigMgr->addConfiguration("turtle.cfg", tr);
|
mConfigMgr->addConfiguration("turtle.cfg", tr);
|
||||||
#ifdef GROUTER
|
#ifdef ENABLE_GROUTER
|
||||||
mConfigMgr->addConfiguration("grouter.cfg", gr);
|
mConfigMgr->addConfiguration("grouter.cfg", gr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -42,10 +42,9 @@
|
||||||
#include "pgp/pgpkeyutil.h"
|
#include "pgp/pgpkeyutil.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/p3grouter.h"
|
||||||
#include "grouter/groutertypes.h"
|
#include "grouter/groutertypes.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "util/rsdebug.h"
|
#include "util/rsdebug.h"
|
||||||
#include "util/rsdir.h"
|
#include "util/rsdir.h"
|
||||||
|
@ -335,42 +334,8 @@ int p3MsgService::checkOutgoingMessages()
|
||||||
|
|
||||||
/* find the certificate */
|
/* find the certificate */
|
||||||
RsPeerId pid = mit->second->PeerId();
|
RsPeerId pid = mit->second->PeerId();
|
||||||
bool tunnel_is_ok = false ;
|
|
||||||
|
|
||||||
if(mit->second->msgFlags & RS_MSG_FLAGS_DISTANT)
|
if( (mit->second->msgFlags & RS_MSG_FLAGS_DISTANT) || mLinkMgr->isOnline(pid) || pid == ownId) /* FEEDBACK Msg to Ourselves */
|
||||||
{
|
|
||||||
// Do we have a tunnel already?
|
|
||||||
//
|
|
||||||
#ifdef GROUTER
|
|
||||||
tunnel_is_ok = true ;
|
|
||||||
#else
|
|
||||||
// const RsPeerId& hash = mit->second->PeerId() ;
|
|
||||||
// std::map<Sha1CheckSum,DistantMessengingContact>::iterator it = _messenging_contacts.find(hash) ;
|
|
||||||
//
|
|
||||||
// if(it != _messenging_contacts.end())
|
|
||||||
// {
|
|
||||||
// tunnel_is_ok = (it->second.status == RS_DISTANT_MSG_STATUS_TUNNEL_OK) ;
|
|
||||||
//#ifdef DEBUG_DISTANT_MSG
|
|
||||||
// std::cerr << "checkOutGoingMessages(): distant contact found. tunnel_is_ok = " << tunnel_is_ok << std::endl;
|
|
||||||
//#endif
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
//#ifdef DEBUG_DISTANT_MSG
|
|
||||||
// std::cerr << "checkOutGoingMessages(): distant contact not found. Asking for tunnels for hash " << hash << std::endl;
|
|
||||||
//#endif
|
|
||||||
// // no. Ask for monitoring tunnels.
|
|
||||||
// rsTurtle->monitorTunnels(hash,this) ;
|
|
||||||
// tunnel_is_ok = false ;
|
|
||||||
//
|
|
||||||
// DistantMessengingContact& contact( _messenging_contacts[hash] ) ;
|
|
||||||
// contact.status = RS_DISTANT_MSG_STATUS_TUNNEL_DN ;
|
|
||||||
// contact.pending_messages = true ;
|
|
||||||
// }
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if(tunnel_is_ok || mLinkMgr->isOnline(pid) || pid == ownId) /* FEEDBACK Msg to Ourselves */
|
|
||||||
{
|
{
|
||||||
/* send msg */
|
/* send msg */
|
||||||
pqioutput(PQL_DEBUG_BASIC, msgservicezone,
|
pqioutput(PQL_DEBUG_BASIC, msgservicezone,
|
||||||
|
@ -2056,13 +2021,11 @@ bool p3MsgService::decryptMessage(const std::string& mId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GROUTER
|
|
||||||
void p3MsgService::connectToGlobalRouter(p3GRouter *gr)
|
void p3MsgService::connectToGlobalRouter(p3GRouter *gr)
|
||||||
{
|
{
|
||||||
mGRouter = gr ;
|
mGRouter = gr ;
|
||||||
gr->registerClientService(RS_SERVICE_TYPE_MSG,this) ;
|
gr->registerClientService(RS_SERVICE_TYPE_MSG,this) ;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void p3MsgService::enableDistantMessaging(bool b)
|
void p3MsgService::enableDistantMessaging(bool b)
|
||||||
{
|
{
|
||||||
|
@ -2129,7 +2092,6 @@ void p3MsgService::manageDistantPeers()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GROUTER
|
|
||||||
void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem)
|
void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem)
|
||||||
{
|
{
|
||||||
// The item is serialized and turned into a generic turtle item.
|
// The item is serialized and turned into a generic turtle item.
|
||||||
|
@ -2154,18 +2116,28 @@ void p3MsgService::sendGRouterData(const GRouterKeyId& key_id,RsMsgItem *msgitem
|
||||||
|
|
||||||
mGRouter->sendData(key_id,item) ;
|
mGRouter->sendData(key_id,item) ;
|
||||||
}
|
}
|
||||||
void p3MsgService::receiveGRouterData(RsGRouterGenericDataItem *gitem,const GRouterKeyId& key)
|
void p3MsgService::receiveGRouterData(const GRouterKeyId& key, const RsGRouterGenericDataItem *gitem)
|
||||||
{
|
{
|
||||||
std::cerr << "(WW) p3msgservice::receiveGRouterData(): received message. Not handled yet. Needs implementing." << std::endl;
|
std::cerr << "p3MsgService::receiveGRouterData(): received message item of size " << gitem->data_size << ", for key " << key << std::endl;
|
||||||
|
|
||||||
|
uint32_t size = gitem->data_size ;
|
||||||
|
RsItem *item = _serialiser->deserialise(gitem->data_bytes,&size) ;
|
||||||
|
|
||||||
|
RsMsgItem *encrypted_msg_item = dynamic_cast<RsMsgItem*>(item) ;
|
||||||
|
|
||||||
|
if(encrypted_msg_item != NULL)
|
||||||
|
{
|
||||||
|
std::cerr << " Encrypted item correctly deserialised. Passing on to incoming list." << std::endl;
|
||||||
|
|
||||||
|
encrypted_msg_item->PeerId(RsPeerId(key)) ; // hack to pass on GXS id.
|
||||||
|
handleIncomingItem(encrypted_msg_item) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
std::cerr << " Item could not be deserialised. Format error??" << std::endl;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
|
void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
|
||||||
{
|
{
|
||||||
#ifndef GROUTER
|
|
||||||
std::cerr << "GRouter is not enabled. Cannot send distant message." << std::endl;
|
|
||||||
return ;
|
|
||||||
#else
|
|
||||||
#ifdef DEBUG_DISTANT_MSG
|
#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;
|
||||||
#endif
|
#endif
|
||||||
|
@ -2192,7 +2164,6 @@ void p3MsgService::sendPrivateMsgItem(RsMsgItem *msgitem)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
sendGRouterData(key_id,msgitem) ;
|
sendGRouterData(key_id,msgitem) ;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -54,10 +54,7 @@ class p3LinkMgr;
|
||||||
class p3IdService;
|
class p3IdService;
|
||||||
|
|
||||||
// Temp tweak to test grouter
|
// Temp tweak to test grouter
|
||||||
class p3MsgService: public p3Service, public p3Config, public pqiMonitor
|
class p3MsgService: public p3Service, public p3Config, public pqiMonitor, public GRouterClientService
|
||||||
#ifdef GROUTER
|
|
||||||
, public GRouterClientService
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
p3MsgService(p3LinkMgr *lm,p3IdService *id_service);
|
p3MsgService(p3LinkMgr *lm,p3IdService *id_service);
|
||||||
|
@ -112,9 +109,8 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
|
||||||
|
|
||||||
/*** overloaded from p3turtle ***/
|
/*** overloaded from p3turtle ***/
|
||||||
|
|
||||||
#ifdef GROUTER
|
|
||||||
virtual void connectToGlobalRouter(p3GRouter *) ;
|
virtual void connectToGlobalRouter(p3GRouter *) ;
|
||||||
#endif
|
|
||||||
struct DistantMessengingInvite
|
struct DistantMessengingInvite
|
||||||
{
|
{
|
||||||
time_t time_of_validity ;
|
time_t time_of_validity ;
|
||||||
|
@ -137,25 +133,19 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
|
||||||
//
|
//
|
||||||
std::map<GRouterKeyId,DistantMessengingContact> _messenging_contacts ;
|
std::map<GRouterKeyId,DistantMessengingContact> _messenging_contacts ;
|
||||||
|
|
||||||
// Overloaded from RsTurtleClientService
|
// Overloaded from GRouterClientService
|
||||||
|
|
||||||
|
virtual void receiveGRouterData(const GRouterKeyId& key,const RsGRouterGenericDataItem *item) ;
|
||||||
|
|
||||||
#ifdef GROUTER
|
|
||||||
virtual void receiveGRouterData(RsGRouterGenericDataItem *item, const GRouterKeyId& key) ;
|
|
||||||
#endif
|
|
||||||
// Utility functions
|
// Utility functions
|
||||||
|
|
||||||
bool createDistantMessage(const RsGxsId& destination_gxs_id,const RsGxsId& source_gxs_id,RsMsgItem *msg) ;
|
bool createDistantMessage(const RsGxsId& destination_gxs_id,const RsGxsId& source_gxs_id,RsMsgItem *msg) ;
|
||||||
bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ;
|
bool locked_findHashForVirtualPeerId(const RsPeerId& pid,Sha1CheckSum& hash) ;
|
||||||
|
void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ;
|
||||||
|
|
||||||
void manageDistantPeers() ;
|
void manageDistantPeers() ;
|
||||||
#ifdef GROUTER
|
|
||||||
void sendGRouterData(const GRouterKeyId &key_id,RsMsgItem *) ;
|
|
||||||
#endif
|
|
||||||
void handleIncomingItem(RsMsgItem *) ;
|
|
||||||
|
|
||||||
#ifdef GROUTER
|
void handleIncomingItem(RsMsgItem *) ;
|
||||||
p3GRouter *mGRouter ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t getNewUniqueMsgId();
|
uint32_t getNewUniqueMsgId();
|
||||||
int sendMessage(RsMsgItem *item);
|
int sendMessage(RsMsgItem *item);
|
||||||
|
@ -176,6 +166,7 @@ class p3MsgService: public p3Service, public p3Config, public pqiMonitor
|
||||||
|
|
||||||
p3LinkMgr *mLinkMgr;
|
p3LinkMgr *mLinkMgr;
|
||||||
p3IdService *mIdService ;
|
p3IdService *mIdService ;
|
||||||
|
p3GRouter *mGRouter ;
|
||||||
|
|
||||||
/* Mutex Required for stuff below */
|
/* Mutex Required for stuff below */
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ const QString PeerDefs::rsidFromId(const RsPeerId &id, QString *name /* = NULL*/
|
||||||
rsIdentity->getOwnIds(gxs_ids) ;
|
rsIdentity->getOwnIds(gxs_ids) ;
|
||||||
|
|
||||||
for(std::list<RsGxsId>::const_iterator it(gxs_ids.begin());it!=gxs_ids.end();++it)
|
for(std::list<RsGxsId>::const_iterator it(gxs_ids.begin());it!=gxs_ids.end();++it)
|
||||||
if(rsMsgs->getDistantMessagePeerId(*it,pid) && RsPeerId(pid) == id)
|
if(RsPeerId(*it) == id)
|
||||||
{
|
{
|
||||||
// not a real peer. Try from hash for distant messages
|
// not a real peer. Try from hash for distant messages
|
||||||
|
|
||||||
|
|
|
@ -1237,8 +1237,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox)
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case TO: addUnique(mi.rspeerid_msgto,pid);
|
case TO: addUnique(mi.rspeerid_msgto,pid);
|
||||||
|
break ;
|
||||||
case CC: addUnique(mi.rspeerid_msgcc,pid);
|
case CC: addUnique(mi.rspeerid_msgcc,pid);
|
||||||
|
break ;
|
||||||
case BCC:addUnique(mi.rspeerid_msgbcc,pid);
|
case BCC:addUnique(mi.rspeerid_msgbcc,pid);
|
||||||
|
break ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break ;
|
break ;
|
||||||
|
@ -1249,8 +1252,11 @@ bool MessageComposer::sendMessage_internal(bool bDraftbox)
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case TO: addUnique(mi.rsgxsid_msgto,gid) ;
|
case TO: addUnique(mi.rsgxsid_msgto,gid) ;
|
||||||
|
break ;
|
||||||
case CC: addUnique(mi.rsgxsid_msgcc,gid) ;
|
case CC: addUnique(mi.rsgxsid_msgcc,gid) ;
|
||||||
|
break ;
|
||||||
case BCC:addUnique(mi.rsgxsid_msgbcc,gid) ;
|
case BCC:addUnique(mi.rsgxsid_msgbcc,gid) ;
|
||||||
|
break ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break ;
|
break ;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue