2008-01-25 07:58:29 +00:00
|
|
|
/*
|
|
|
|
* libretroshare/src/rsserver: p3peers.cc
|
|
|
|
*
|
|
|
|
* RetroShare C++ Interface.
|
|
|
|
*
|
|
|
|
* Copyright 2004-2008 by Robert Fernie.
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Library General Public
|
|
|
|
* License Version 2 as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Library General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Library General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
|
|
* USA.
|
|
|
|
*
|
|
|
|
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2012-08-14 19:31:47 +00:00
|
|
|
#include "util/radix64.h"
|
|
|
|
#include "pgp/pgpkeyutil.h"
|
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
#include "rsserver/p3peers.h"
|
2009-02-08 14:30:28 +00:00
|
|
|
#include "rsserver/p3face.h"
|
2011-07-09 18:39:34 +00:00
|
|
|
|
|
|
|
#include "pqi/p3linkmgr.h"
|
|
|
|
#include "pqi/p3peermgr.h"
|
|
|
|
#include "pqi/p3netmgr.h"
|
|
|
|
|
2010-01-13 20:56:55 +00:00
|
|
|
#include "pqi/authssl.h"
|
2010-01-13 20:58:58 +00:00
|
|
|
#include "pqi/authgpg.h"
|
2010-08-06 09:40:23 +00:00
|
|
|
#include "retroshare/rsinit.h"
|
2012-11-12 22:51:27 +00:00
|
|
|
#include "retroshare/rsfiles.h"
|
2010-01-13 21:29:21 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
#include "pgp/rscertificate.h"
|
2008-01-25 07:58:29 +00:00
|
|
|
|
|
|
|
#include <iostream>
|
2008-06-19 21:34:13 +00:00
|
|
|
#include <fstream>
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2010-01-13 21:30:44 +00:00
|
|
|
const std::string CERT_SSL_ID = "--SSLID--";
|
|
|
|
const std::string CERT_LOCATION = "--LOCATION--";
|
|
|
|
const std::string CERT_LOCAL_IP = "--LOCAL--";
|
|
|
|
const std::string CERT_EXT_IP = "--EXT--";
|
2010-04-22 18:49:08 +00:00
|
|
|
const std::string CERT_DYNDNS = "--DYNDNS--";
|
2010-01-13 21:29:21 +00:00
|
|
|
|
2010-12-14 21:56:37 +00:00
|
|
|
static const int MAX_TIME_KEEP_LOCATION_WITHOUT_CONTACT = 30*24*3600 ; // 30 days.
|
2010-01-13 21:29:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
#include "pqi/authssl.h"
|
2008-11-09 22:17:20 +00:00
|
|
|
|
2008-06-19 21:34:13 +00:00
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
RsPeers *rsPeers = NULL;
|
|
|
|
|
2008-06-13 15:42:08 +00:00
|
|
|
/*******
|
|
|
|
* #define P3PEERS_DEBUG 1
|
|
|
|
*******/
|
|
|
|
|
2012-04-15 14:37:44 +00:00
|
|
|
//int ensureExtension(std::string &name, std::string def_ext);
|
2008-01-25 07:58:29 +00:00
|
|
|
|
|
|
|
std::string RsPeerTrustString(uint32_t trustLvl)
|
|
|
|
{
|
|
|
|
std::string str;
|
2009-05-23 15:07:35 +00:00
|
|
|
|
|
|
|
switch(trustLvl)
|
|
|
|
{
|
|
|
|
default:
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_UNKNOWN:
|
|
|
|
str = "VALIDITY_UNKNOWN";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_UNDEFINED:
|
|
|
|
str = "VALIDITY_UNDEFINED";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_NEVER:
|
|
|
|
str = "VALIDITY_NEVER";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_MARGINAL:
|
|
|
|
str = "VALIDITY_MARGINAL";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_FULL:
|
|
|
|
str = "VALIDITY_FULL";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
2012-07-14 00:02:40 +00:00
|
|
|
case RS_TRUST_LVL_ULTIMATE:
|
|
|
|
str = "VALIDITY_ULTIMATE";
|
2009-05-23 15:07:35 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return str;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
std::string RsPeerNetModeString(uint32_t netModel)
|
|
|
|
{
|
|
|
|
std::string str;
|
|
|
|
if (netModel == RS_NETMODE_EXT)
|
|
|
|
{
|
|
|
|
str = "External Port";
|
|
|
|
}
|
|
|
|
else if (netModel == RS_NETMODE_UPNP)
|
|
|
|
{
|
|
|
|
str = "Ext (UPnP)";
|
|
|
|
}
|
|
|
|
else if (netModel == RS_NETMODE_UDP)
|
|
|
|
{
|
|
|
|
str = "UDP Mode";
|
|
|
|
}
|
2013-09-09 02:10:49 +00:00
|
|
|
else if (netModel == RS_NETMODE_HIDDEN)
|
|
|
|
{
|
|
|
|
str = "Hidden";
|
|
|
|
}
|
2008-02-28 15:58:54 +00:00
|
|
|
else if (netModel == RS_NETMODE_UNREACHABLE)
|
|
|
|
{
|
|
|
|
str = "UDP Mode (Unreachable)";
|
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
str = "Unknown NetMode";
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
p3Peers::p3Peers(p3LinkMgr *lm, p3PeerMgr *pm, p3NetMgr *nm)
|
|
|
|
:mLinkMgr(lm), mPeerMgr(pm), mNetMgr(nm)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-07-01 20:47:58 +00:00
|
|
|
bool p3Peers::hasExportMinimal()
|
|
|
|
{
|
|
|
|
#ifdef GPGME_EXPORT_MODE_MINIMAL
|
|
|
|
return true ;
|
|
|
|
#else
|
|
|
|
return false ;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
/* Updates ... */
|
|
|
|
bool p3Peers::FriendsChanged()
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::FriendsChanged()" << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* TODO */
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool p3Peers::OthersChanged()
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::OthersChanged()" << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* TODO */
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Peer Details (Net & Auth) */
|
2014-03-17 20:56:06 +00:00
|
|
|
const RsPeerId& p3Peers::getOwnId()
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getOwnId()" << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2010-01-13 20:58:58 +00:00
|
|
|
return AuthSSL::getAuthSSL()->OwnId();
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getOnlineList(std::list<RsPeerId> &ids)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getOnlineList()" << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mConnectMgr */
|
2011-07-09 18:39:34 +00:00
|
|
|
mLinkMgr->getOnlineList(ids);
|
2008-01-25 07:58:29 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getFriendList(std::list<RsPeerId> &ids)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getFriendList()" << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mConnectMgr */
|
2011-07-09 18:39:34 +00:00
|
|
|
mLinkMgr->getFriendList(ids);
|
2008-01-25 07:58:29 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2010-01-13 21:22:52 +00:00
|
|
|
//bool p3Peers::getOthersList(std::list<std::string> &ids)
|
|
|
|
//{
|
|
|
|
//#ifdef P3PEERS_DEBUG
|
|
|
|
// std::cerr << "p3Peers::getOthersList()";
|
|
|
|
// std::cerr << std::endl;
|
|
|
|
//#endif
|
|
|
|
//
|
|
|
|
// /* get from mAuthMgr */
|
|
|
|
// AuthSSL::getAuthSSL()->getAllList(ids);
|
|
|
|
// return true;
|
|
|
|
//}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2012-02-25 01:48:56 +00:00
|
|
|
bool p3Peers::getPeerCount (unsigned int *friendCount, unsigned int *onlineCount, bool ssl)
|
2010-05-13 19:20:40 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2012-02-25 01:48:56 +00:00
|
|
|
std::cerr << "p3Peers::getPeerCount()" << std::endl;
|
2010-05-13 19:20:40 +00:00
|
|
|
#endif
|
2012-02-25 01:48:56 +00:00
|
|
|
|
|
|
|
if (friendCount) *friendCount = mPeerMgr->getFriendCount(ssl, false);
|
|
|
|
if (onlineCount) *onlineCount = mPeerMgr->getFriendCount(ssl, true);
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
return true;
|
2010-05-13 19:20:40 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::isOnline(const RsPeerId &id)
|
2008-06-16 20:37:48 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::isOnline() " << id << std::endl;
|
2008-06-16 20:37:48 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mConnectMgr */
|
|
|
|
peerConnectState state;
|
2011-07-09 18:39:34 +00:00
|
|
|
if (mLinkMgr->getFriendNetStatus(id, state) &&
|
2008-06-16 20:37:48 +00:00
|
|
|
(state.state & RS_PEER_S_CONNECTED))
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::isFriend(const RsPeerId &ssl_id)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::isFriend() " << ssl_id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2010-01-13 21:25:18 +00:00
|
|
|
/* get from mConnectMgr */
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->isFriend(ssl_id);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2016-06-09 23:13:07 -04:00
|
|
|
bool p3Peers::getPeerMaximumRates(const RsPeerId& pid,uint32_t& maxUploadRate,uint32_t& maxDownloadRate)
|
|
|
|
{
|
|
|
|
return mPeerMgr->getMaxRates(pid,maxUploadRate,maxDownloadRate) ;
|
|
|
|
}
|
2016-06-09 20:51:09 -04:00
|
|
|
bool p3Peers::getPeerMaximumRates(const RsPgpId& pid,uint32_t& maxUploadRate,uint32_t& maxDownloadRate)
|
2016-06-08 22:44:28 -04:00
|
|
|
{
|
|
|
|
return mPeerMgr->getMaxRates(pid,maxUploadRate,maxDownloadRate) ;
|
|
|
|
}
|
|
|
|
|
2016-06-09 20:51:09 -04:00
|
|
|
bool p3Peers::setPeerMaximumRates(const RsPgpId& pid,uint32_t maxUploadRate,uint32_t maxDownloadRate)
|
2016-06-07 21:48:22 -04:00
|
|
|
{
|
2016-06-07 22:06:32 -04:00
|
|
|
return mPeerMgr->setMaxRates(pid,maxUploadRate,maxDownloadRate) ;
|
2016-06-07 21:48:22 -04:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::haveSecretKey(const RsPgpId& id)
|
2013-05-31 19:16:04 +00:00
|
|
|
{
|
2015-12-31 19:32:46 +01:00
|
|
|
return AuthGPG::getAuthGPG()->haveSecretKey(id);
|
2013-05-31 19:16:04 +00:00
|
|
|
}
|
2009-11-07 22:06:12 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
/* There are too many dependancies of this function
|
|
|
|
* to shift it immeidately
|
|
|
|
*/
|
|
|
|
|
2015-12-31 19:32:46 +01:00
|
|
|
bool p3Peers::getPeerDetails(const RsPeerId& id, RsPeerDetails &d)
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
2012-12-01 19:22:22 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getPeerDetails() called for id : " << id << std::endl;
|
|
|
|
#endif
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
RsPeerId sOwnId = AuthSSL::getAuthSSL()->OwnId();
|
2012-12-01 19:22:22 +00:00
|
|
|
peerState ps;
|
2011-08-07 21:11:00 +00:00
|
|
|
|
|
|
|
if (id == sOwnId)
|
|
|
|
{
|
2012-12-01 19:22:22 +00:00
|
|
|
mPeerMgr->getOwnNetStatus(ps);
|
|
|
|
ps.gpg_id = AuthGPG::getAuthGPG()->getGPGOwnId();
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
2014-03-17 20:56:06 +00:00
|
|
|
else if (!mPeerMgr->getFriendNetStatus(id, ps))
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::getPeerDetails() ERROR not an SSL Id: " << id << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
#endif
|
2015-12-31 19:32:46 +01:00
|
|
|
return false;
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
|
|
|
|
2012-12-01 19:22:22 +00:00
|
|
|
/* get from gpg (first), to fill in the sign and trust details */
|
2015-12-31 19:32:46 +01:00
|
|
|
/* don't return now, we've got fill in the ssl and connection info */
|
2012-12-01 19:22:22 +00:00
|
|
|
getGPGDetails(ps.gpg_id, d);
|
|
|
|
d.isOnlyGPGdetail = false;
|
|
|
|
|
|
|
|
//get the ssl details
|
|
|
|
d.id = id;
|
|
|
|
d.location = ps.location;
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2015-12-31 19:32:46 +01:00
|
|
|
d.service_perm_flags = mPeerMgr->servicePermissionFlags(ps.gpg_id);
|
2011-08-07 21:11:00 +00:00
|
|
|
|
|
|
|
/* generate */
|
|
|
|
d.authcode = "AUTHCODE";
|
|
|
|
|
|
|
|
/* fill from pcs */
|
|
|
|
d.lastConnect = ps.lastcontact;
|
|
|
|
d.connectPeriod = 0;
|
|
|
|
|
2013-09-09 02:10:49 +00:00
|
|
|
if (ps.hiddenNode)
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
2013-09-09 02:10:49 +00:00
|
|
|
d.isHiddenNode = true;
|
2014-01-18 02:32:55 +00:00
|
|
|
d.hiddenNodeAddress = ps.hiddenDomain;
|
|
|
|
d.hiddenNodePort = ps.hiddenPort;
|
2015-09-07 22:57:54 +02:00
|
|
|
d.hiddenType = ps.hiddenType;
|
2016-06-07 21:48:22 -04:00
|
|
|
|
2016-01-26 22:08:17 -05:00
|
|
|
if(sockaddr_storage_isnull(ps.localaddr)) // that happens if the address is not initialised.
|
2016-06-07 21:48:22 -04:00
|
|
|
{
|
2016-01-26 22:08:17 -05:00
|
|
|
d.localAddr = "INVALID_IP";
|
|
|
|
d.localPort = 0 ;
|
2016-06-07 21:48:22 -04:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2016-01-26 22:08:17 -05:00
|
|
|
d.localAddr = sockaddr_storage_iptostring(ps.localaddr);
|
|
|
|
d.localPort = sockaddr_storage_port(ps.localaddr);
|
2016-06-07 21:48:22 -04:00
|
|
|
}
|
2013-09-09 02:10:49 +00:00
|
|
|
d.extAddr = "hidden";
|
|
|
|
d.extPort = 0;
|
|
|
|
d.dyndns = "";
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
2013-09-09 02:10:49 +00:00
|
|
|
else
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
2013-09-09 02:10:49 +00:00
|
|
|
d.isHiddenNode = false;
|
|
|
|
d.hiddenNodeAddress = "";
|
2014-01-18 02:32:55 +00:00
|
|
|
d.hiddenNodePort = 0;
|
2015-09-07 22:57:54 +02:00
|
|
|
d.hiddenType = RS_HIDDEN_TYPE_NONE;
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2015-12-31 19:32:46 +01:00
|
|
|
if (sockaddr_storage_isnull(ps.localaddr))
|
|
|
|
{
|
|
|
|
d.localAddr = "INVALID_IP";
|
|
|
|
d.localPort = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
d.localAddr = sockaddr_storage_iptostring(ps.localaddr);
|
|
|
|
d.localPort = sockaddr_storage_port(ps.localaddr);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sockaddr_storage_isnull(ps.serveraddr))
|
|
|
|
{
|
|
|
|
d.extAddr = "INVALID_IP";
|
|
|
|
d.extPort = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
d.extAddr = sockaddr_storage_iptostring(ps.serveraddr);
|
|
|
|
d.extPort = sockaddr_storage_port(ps.serveraddr);
|
|
|
|
}
|
|
|
|
|
2013-09-09 02:10:49 +00:00
|
|
|
d.dyndns = ps.dyndns;
|
2016-06-07 21:48:22 -04:00
|
|
|
|
2013-09-09 02:10:49 +00:00
|
|
|
std::list<pqiIpAddress>::iterator it;
|
|
|
|
for(it = ps.ipAddrs.mLocal.mAddrs.begin();
|
2016-06-07 21:48:22 -04:00
|
|
|
it != ps.ipAddrs.mLocal.mAddrs.end(); ++it)
|
2013-09-09 02:10:49 +00:00
|
|
|
{
|
|
|
|
std::string toto;
|
2013-09-13 14:35:19 +00:00
|
|
|
toto += "L:";
|
|
|
|
toto += sockaddr_storage_tostring(it->mAddr);
|
|
|
|
rs_sprintf_append(toto, " %ld sec", time(NULL) - it->mSeenTime);
|
|
|
|
d.ipAddressList.push_back(toto);
|
2013-09-09 02:10:49 +00:00
|
|
|
}
|
2016-06-07 21:48:22 -04:00
|
|
|
for(it = ps.ipAddrs.mExt.mAddrs.begin(); it != ps.ipAddrs.mExt.mAddrs.end(); ++it)
|
2013-09-09 02:10:49 +00:00
|
|
|
{
|
|
|
|
std::string toto;
|
2013-09-13 14:35:19 +00:00
|
|
|
toto += "E:";
|
|
|
|
toto += sockaddr_storage_tostring(it->mAddr);
|
|
|
|
rs_sprintf_append(toto, " %ld sec", time(NULL) - it->mSeenTime);
|
|
|
|
d.ipAddressList.push_back(toto);
|
2013-09-09 02:10:49 +00:00
|
|
|
}
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
2016-06-07 21:48:22 -04:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
|
|
|
|
switch(ps.netMode & RS_NET_MODE_ACTUAL)
|
|
|
|
{
|
2016-06-07 21:48:22 -04:00
|
|
|
case RS_NET_MODE_EXT:
|
|
|
|
d.netMode = RS_NETMODE_EXT;
|
|
|
|
break;
|
|
|
|
case RS_NET_MODE_UPNP:
|
|
|
|
d.netMode = RS_NETMODE_UPNP;
|
|
|
|
break;
|
|
|
|
case RS_NET_MODE_UDP:
|
|
|
|
d.netMode = RS_NETMODE_UDP;
|
|
|
|
break;
|
|
|
|
case RS_NET_MODE_HIDDEN:
|
|
|
|
d.netMode = RS_NETMODE_HIDDEN;
|
|
|
|
break;
|
|
|
|
case RS_NET_MODE_UNREACHABLE:
|
|
|
|
case RS_NET_MODE_UNKNOWN:
|
|
|
|
default:
|
|
|
|
d.netMode = RS_NETMODE_UNREACHABLE;
|
|
|
|
break;
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2013-09-28 08:09:59 +00:00
|
|
|
d.vs_disc = ps.vs_disc;
|
|
|
|
d.vs_dht = ps.vs_dht;
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
/* Translate */
|
|
|
|
peerConnectState pcs;
|
|
|
|
if (!mLinkMgr->getFriendNetStatus(id, pcs))
|
|
|
|
{
|
2013-07-29 12:42:45 +00:00
|
|
|
if(id != sOwnId)
|
|
|
|
std::cerr << "p3Peers::getPeerDetails() ERROR No Link Information : " << id << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
return true;
|
|
|
|
}
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getPeerDetails() got a SSL id and is returning SSL and GPG details for id : " << id << std::endl;
|
|
|
|
#endif
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2013-11-30 13:48:39 +00:00
|
|
|
if (pcs.state & RS_PEER_S_CONNECTED)
|
|
|
|
{
|
2014-02-01 14:16:15 +00:00
|
|
|
d.connectAddr = sockaddr_storage_iptostring(pcs.connectaddr);
|
|
|
|
d.connectPort = sockaddr_storage_port(pcs.connectaddr);
|
2013-11-30 13:48:39 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
d.connectAddr = "";
|
|
|
|
d.connectPort = 0 ;
|
|
|
|
}
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
d.state = 0;
|
2016-06-07 21:48:22 -04:00
|
|
|
if (pcs.state & RS_PEER_S_FRIEND) d.state |= RS_PEER_STATE_FRIEND;
|
|
|
|
if (pcs.state & RS_PEER_S_ONLINE) d.state |= RS_PEER_STATE_ONLINE;
|
|
|
|
if (pcs.state & RS_PEER_S_CONNECTED) d.state |= RS_PEER_STATE_CONNECTED;
|
|
|
|
if (pcs.state & RS_PEER_S_UNREACHABLE) d.state |= RS_PEER_STATE_UNREACHABLE;
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2015-05-16 11:19:53 +00:00
|
|
|
d.actAsServer = pcs.actAsServer;
|
|
|
|
|
2012-01-08 22:15:19 +00:00
|
|
|
d.linkType = pcs.linkType;
|
2011-08-07 21:11:00 +00:00
|
|
|
|
|
|
|
/* Finally determine AutoConnect Status */
|
|
|
|
d.foundDHT = pcs.dht.found;
|
|
|
|
|
2013-08-22 07:26:13 +00:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_OFFLINE;
|
2011-08-07 21:11:00 +00:00
|
|
|
d.connectStateString.clear();
|
|
|
|
|
|
|
|
if (pcs.inConnAttempt)
|
|
|
|
{
|
2013-09-03 14:51:23 +00:00
|
|
|
if (pcs.currentConnAddrAttempt.type & RS_NET_CONN_TCP_ALL) {
|
2011-08-07 21:11:00 +00:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_TRYING_TCP;
|
2013-09-13 14:35:19 +00:00
|
|
|
d.connectStateString = sockaddr_storage_tostring(pcs.currentConnAddrAttempt.addr);
|
2011-08-07 21:11:00 +00:00
|
|
|
} else if (pcs.currentConnAddrAttempt.type & RS_NET_CONN_UDP_ALL) {
|
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_TRYING_UDP;
|
2013-09-13 14:35:19 +00:00
|
|
|
d.connectStateString = sockaddr_storage_tostring(pcs.currentConnAddrAttempt.addr);
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (pcs.state & RS_PEER_S_CONNECTED)
|
2016-06-07 21:48:22 -04:00
|
|
|
{
|
2015-09-15 16:18:46 +02:00
|
|
|
/* peer is connected - determine how and set proper connectState */
|
|
|
|
if(mPeerMgr->isHidden())
|
|
|
|
{
|
2015-09-15 17:10:48 +02:00
|
|
|
uint32_t type;
|
2015-09-15 16:18:46 +02:00
|
|
|
/* hidden location */
|
|
|
|
/* use connection direction to determine connection type */
|
|
|
|
if(pcs.actAsServer)
|
|
|
|
{
|
|
|
|
/* incoming connection */
|
|
|
|
/* use own type to set connectState */
|
2015-09-15 17:10:48 +02:00
|
|
|
type = mPeerMgr->getHiddenType(AuthSSL::getAuthSSL()->OwnId());
|
|
|
|
switch (type) {
|
|
|
|
case RS_HIDDEN_TYPE_TOR:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TOR;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
case RS_HIDDEN_TYPE_I2P:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_I2P;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
default:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_UNKNOWN;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
2015-09-15 16:18:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* outgoing connection */
|
|
|
|
/* use peer hidden type to set connectState */
|
2015-09-15 17:10:48 +02:00
|
|
|
switch (ps.hiddenType) {
|
|
|
|
case RS_HIDDEN_TYPE_TOR:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TOR;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
case RS_HIDDEN_TYPE_I2P:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_I2P;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
default:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_UNKNOWN;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
2015-09-15 16:18:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (ps.hiddenType & RS_HIDDEN_TYPE_MASK)
|
|
|
|
{
|
|
|
|
/* hidden peer */
|
|
|
|
/* use hidden type to set connectState */
|
2015-09-15 17:10:48 +02:00
|
|
|
switch (ps.hiddenType) {
|
|
|
|
case RS_HIDDEN_TYPE_TOR:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TOR;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
case RS_HIDDEN_TYPE_I2P:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_I2P;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
|
|
|
default:
|
2015-09-15 16:18:46 +02:00
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_UNKNOWN;
|
2015-09-15 17:10:48 +02:00
|
|
|
break;
|
2015-09-15 16:18:46 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* peer and we are normal nodes */
|
|
|
|
/* use normal detection to set connectState */
|
|
|
|
if (pcs.connecttype == RS_NET_CONN_TCP_ALL)
|
|
|
|
{
|
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_TCP;
|
|
|
|
}
|
|
|
|
else if (pcs.connecttype == RS_NET_CONN_UDP_ALL)
|
|
|
|
{
|
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_UDP;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
d.connectState = RS_PEER_CONNECTSTATE_CONNECTED_UNKNOWN;
|
|
|
|
}
|
|
|
|
}
|
2016-06-07 21:48:22 -04:00
|
|
|
}
|
|
|
|
|
2013-08-22 07:26:13 +00:00
|
|
|
d.wasDeniedConnection = pcs.wasDeniedConnection;
|
|
|
|
d.deniedTS = pcs.deniedTS;
|
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2015-09-07 11:51:24 +02:00
|
|
|
bool p3Peers::isProxyAddress(const uint32_t type, const sockaddr_storage& addr)
|
2014-10-26 16:24:45 +00:00
|
|
|
{
|
|
|
|
uint16_t port ;
|
|
|
|
std::string string_addr;
|
2015-09-07 11:51:24 +02:00
|
|
|
uint32_t status ;
|
2014-10-26 16:24:45 +00:00
|
|
|
|
2015-09-07 11:51:24 +02:00
|
|
|
if(!getProxyServer(type, string_addr, port, status))
|
2014-10-26 16:24:45 +00:00
|
|
|
return false ;
|
|
|
|
|
|
|
|
return sockaddr_storage_iptostring(addr)==string_addr && sockaddr_storage_port(addr)==port ;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::isKeySupported(const RsPgpId& id)
|
2012-06-14 20:13:31 +00:00
|
|
|
{
|
|
|
|
return AuthGPG::getAuthGPG()->isKeySupported(id);
|
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::getGPGName(const RsPgpId &gpg_id)
|
2009-11-17 12:45:06 +00:00
|
|
|
{
|
|
|
|
/* get from mAuthMgr as it should have more peers? */
|
2010-01-13 21:22:52 +00:00
|
|
|
return AuthGPG::getAuthGPG()->getGPGName(gpg_id);
|
2009-11-17 12:45:06 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::isGPGAccepted(const RsPgpId &gpg_id_is_friend)
|
2010-01-13 21:22:52 +00:00
|
|
|
{
|
|
|
|
/* get from mAuthMgr as it should have more peers? */
|
|
|
|
return AuthGPG::getAuthGPG()->isGPGAccepted(gpg_id_is_friend);
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::getPeerName(const RsPeerId& ssl)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getPeerName() " << ssl_or_gpg_id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
2011-08-07 21:11:00 +00:00
|
|
|
std::string name;
|
2014-03-17 20:56:06 +00:00
|
|
|
if (ssl == AuthSSL::getAuthSSL()->OwnId())
|
2011-08-07 21:11:00 +00:00
|
|
|
return AuthGPG::getAuthGPG()->getGPGOwnName();
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
if (mPeerMgr->getPeerName(ssl, name))
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getPeerName() got a ssl id. Name is : " << name << std::endl;
|
|
|
|
#endif
|
|
|
|
return name;
|
|
|
|
}
|
2014-03-17 20:56:06 +00:00
|
|
|
return std::string() ;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getGPGAllList(std::list<RsPgpId> &ids)
|
2009-05-23 15:07:35 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getGPGAllList()" << std::endl;
|
2009-05-23 15:07:35 +00:00
|
|
|
#endif
|
|
|
|
|
2010-01-13 21:22:52 +00:00
|
|
|
/* get from mAuthMgr */
|
|
|
|
AuthGPG::getAuthGPG()->getGPGAllList(ids);
|
|
|
|
return true;
|
2009-05-23 15:07:35 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getGPGValidList(std::list<RsPgpId> &ids)
|
2010-01-13 21:14:49 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getPGPOthersList()" << std::endl;
|
2010-01-13 21:14:49 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mAuthMgr */
|
2010-01-13 21:22:52 +00:00
|
|
|
AuthGPG::getAuthGPG()->getGPGValidList(ids);
|
2010-01-13 21:14:49 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getGPGSignedList(std::list<RsPgpId> &ids)
|
2010-01-13 21:14:49 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getPGPOthersList()" << std::endl;
|
2010-01-13 21:14:49 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mAuthMgr */
|
2010-01-13 21:22:52 +00:00
|
|
|
AuthGPG::getAuthGPG()->getGPGSignedList(ids);
|
2010-01-13 21:14:49 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getGPGAcceptedList(std::list<RsPgpId> &ids)
|
2010-01-13 21:14:49 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-08 14:06:43 +00:00
|
|
|
std::cerr << "p3Peers::getGPGAcceptedList()" << std::endl;
|
2010-01-13 21:14:49 +00:00
|
|
|
#endif
|
2010-01-13 21:22:52 +00:00
|
|
|
AuthGPG::getAuthGPG()->getGPGAcceptedList(ids);
|
2010-01-13 21:14:49 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getAssociatedSSLIds(const RsPgpId &gpg_id, std::list<RsPeerId> &ids)
|
2010-01-13 21:16:18 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2011-08-07 21:11:00 +00:00
|
|
|
std::cerr << "p3Peers::getAssociatedSSLIds() for id : " << gpg_id << std::endl;
|
2010-01-13 21:22:52 +00:00
|
|
|
#endif
|
2010-12-14 21:56:37 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
return mPeerMgr->getAssociatedPeers(gpg_id, ids);
|
2010-01-13 21:16:18 +00:00
|
|
|
}
|
|
|
|
|
2016-08-09 01:22:14 +02:00
|
|
|
bool p3Peers::gpgSignData(const void *data, const uint32_t len, unsigned char *sign, unsigned int *signlen, std::string reason /* = "" */)
|
2013-03-01 23:00:43 +00:00
|
|
|
{
|
2016-08-09 01:22:14 +02:00
|
|
|
return AuthGPG::getAuthGPG()->SignDataBin(data,len,sign,signlen, reason);
|
2013-03-01 23:00:43 +00:00
|
|
|
}
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::getGPGDetails(const RsPgpId &pgp_id, RsPeerDetails &d)
|
2010-01-13 21:08:46 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::getPgpDetails() called for id : " << pgp_id << std::endl;
|
2010-01-13 21:08:46 +00:00
|
|
|
#endif
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
/* get from mAuthMgr */
|
|
|
|
bool res = AuthGPG::getAuthGPG()->getGPGDetails(pgp_id, d);
|
|
|
|
|
|
|
|
d.isOnlyGPGdetail = true ;
|
|
|
|
d.service_perm_flags = mPeerMgr->servicePermissionFlags(pgp_id) ;
|
|
|
|
|
|
|
|
return res ;
|
2010-01-13 21:08:46 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
const RsPgpId& p3Peers::getGPGOwnId()
|
2009-05-23 15:07:35 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::getPGPOwnId()" << std::endl;
|
2009-05-23 15:07:35 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* get from mAuthMgr */
|
2010-01-13 21:22:52 +00:00
|
|
|
return AuthGPG::getAuthGPG()->getGPGOwnId();
|
2009-05-23 15:07:35 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
RsPgpId p3Peers::getGPGId(const RsPeerId& sslid)
|
2010-01-13 21:11:02 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::getPGPId()" << std::endl;
|
2010-01-13 21:11:02 +00:00
|
|
|
#endif
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
/* get from mAuthMgr */
|
|
|
|
if (sslid == AuthSSL::getAuthSSL()->OwnId())
|
|
|
|
{
|
|
|
|
return AuthGPG::getAuthGPG()->getGPGOwnId();
|
|
|
|
}
|
|
|
|
peerState pcs;
|
|
|
|
if (mPeerMgr->getFriendNetStatus(sslid, pcs) || mPeerMgr->getOthersNetStatus(sslid, pcs)) {
|
|
|
|
return pcs.gpg_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
return RsPgpId();
|
2010-01-13 21:11:02 +00:00
|
|
|
}
|
2009-05-23 15:07:35 +00:00
|
|
|
|
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
/* These Functions are now the only way to authorize a new gpg user...
|
|
|
|
* if we are passed a ssl_id, then use it... otherwise just auth gpg_id
|
|
|
|
*/
|
2009-05-23 15:07:35 +00:00
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
/* Add/Remove Friends */
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::addFriend(const RsPeerId &ssl_id, const RsPgpId &gpg_id,ServicePermissionFlags perm_flags)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::addFriend() with : id : " << id << "; gpg_id : " << gpg_id << std::endl;
|
2010-01-13 21:22:52 +00:00
|
|
|
#endif
|
2014-03-17 20:56:06 +00:00
|
|
|
if(AuthGPG::getAuthGPG()->isGPGId(gpg_id))
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::addFriend() Authorising GPG Id: " << gpg_id << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
#endif
|
|
|
|
if (AuthGPG::getAuthGPG()->AllowConnection(gpg_id, true))
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::addFriend() Authorization OK." << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::addFriend() Authorization FAILED." << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
#endif
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::addFriend() Bad gpg_id : " << gpg_id << std::endl;
|
2011-08-07 21:11:00 +00:00
|
|
|
#endif
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
if(ssl_id.isNull())
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::addFriend() WARNING id is NULL or gpgId" << std::endl;
|
|
|
|
#endif
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-08-08 11:27:40 +00:00
|
|
|
/* otherwise - we install as ssl_id.....
|
|
|
|
* If we are adding an SSL certificate. we flag lastcontact as now.
|
|
|
|
* This will cause the SSL certificate to be retained for 30 days... and give the person a chance to connect!
|
|
|
|
* */
|
|
|
|
time_t now = time(NULL);
|
2013-09-28 08:09:59 +00:00
|
|
|
return mPeerMgr->addFriend(ssl_id, gpg_id, RS_NET_MODE_UDP, RS_VS_DISC_FULL, RS_VS_DHT_FULL, now, perm_flags);
|
2010-01-13 21:22:52 +00:00
|
|
|
}
|
|
|
|
|
2015-04-17 21:36:22 +00:00
|
|
|
bool p3Peers::removeKeysFromPGPKeyring(const std::set<RsPgpId>& pgp_ids,std::string& backup_file,uint32_t& error_code)
|
2013-05-29 21:32:02 +00:00
|
|
|
{
|
|
|
|
return AuthGPG::getAuthGPG()->removeKeysFromPGPKeyring(pgp_ids,backup_file,error_code) ;
|
|
|
|
}
|
2011-08-07 21:11:00 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::removeFriendLocation(const RsPeerId &sslId)
|
2010-01-13 21:22:52 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2011-08-07 21:11:00 +00:00
|
|
|
std::cerr << "p3Peers::removeFriendLocation() " << sslId << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
2011-08-07 21:11:00 +00:00
|
|
|
//will remove if it's a ssl id
|
2013-04-16 20:10:31 +00:00
|
|
|
mPeerMgr->removeFriend(sslId, false);
|
2011-08-07 21:11:00 +00:00
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::removeFriend(const RsPgpId& gpgId)
|
2011-08-07 21:11:00 +00:00
|
|
|
{
|
2010-01-13 21:25:18 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2011-08-07 21:11:00 +00:00
|
|
|
std::cerr << "p3Peers::removeFriend() " << gpgId << std::endl;
|
2010-01-13 21:25:18 +00:00
|
|
|
#endif
|
2011-08-07 21:11:00 +00:00
|
|
|
if (gpgId == AuthGPG::getAuthGPG()->getGPGOwnId()) {
|
|
|
|
std::cerr << "p3Peers::removeFriend() ERROR we're not going to remove our own GPG id." << std::endl;
|
|
|
|
return false;
|
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2010-01-13 21:33:54 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::removeFriend() Removing GPG Id: " << gpgId << std::endl;
|
2010-01-13 21:33:54 +00:00
|
|
|
#endif
|
2014-03-17 20:56:06 +00:00
|
|
|
if (AuthGPG::getAuthGPG()->AllowConnection(gpgId, false))
|
|
|
|
{
|
2008-01-25 07:58:29 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::removeFriend() OK." << std::endl;
|
2010-01-15 21:09:25 +00:00
|
|
|
#endif
|
2014-03-17 20:56:06 +00:00
|
|
|
mPeerMgr->removeAllFriendLocations(gpgId);
|
|
|
|
return true;
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-01-15 21:09:25 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-03-17 20:56:06 +00:00
|
|
|
std::cerr << "p3Peers::removeFriend() FAILED." << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
2014-03-17 20:56:06 +00:00
|
|
|
mPeerMgr->removeAllFriendLocations(gpgId);
|
|
|
|
return false;
|
2011-08-07 21:11:00 +00:00
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
|
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
/* Network Stuff */
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::connectAttempt(const RsPeerId &id)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::connectAttempt() " << id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
return mLinkMgr->retryConnect(id);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2009-04-05 13:04:18 +00:00
|
|
|
void p3Peers::getIPServersList(std::list<std::string>& ip_servers)
|
|
|
|
{
|
2011-07-09 18:39:34 +00:00
|
|
|
mNetMgr->getIPServersList(ip_servers) ;
|
2009-04-05 13:04:18 +00:00
|
|
|
}
|
2015-05-17 10:00:00 +00:00
|
|
|
bool p3Peers::resetOwnExternalAddressList()
|
|
|
|
{
|
|
|
|
return mPeerMgr->resetOwnExternalAddressList();
|
|
|
|
}
|
|
|
|
void p3Peers::allowServerIPDetermination(bool b)
|
2009-04-05 13:04:18 +00:00
|
|
|
{
|
2011-07-09 18:39:34 +00:00
|
|
|
mNetMgr->setIPServersEnabled(b) ;
|
2009-04-05 13:04:18 +00:00
|
|
|
}
|
2009-12-13 21:59:26 +00:00
|
|
|
|
|
|
|
bool p3Peers::getAllowServerIPDetermination()
|
|
|
|
{
|
2011-07-09 18:39:34 +00:00
|
|
|
return mNetMgr->getIPServersEnabled() ;
|
2009-12-13 21:59:26 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setLocation(const RsPeerId &ssl_id, const std::string &location)
|
2009-04-05 13:04:18 +00:00
|
|
|
{
|
2013-09-09 02:10:49 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::setLocation() " << ssl_id << std::endl;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return mPeerMgr->setLocation(ssl_id, location);
|
2009-04-05 13:04:18 +00:00
|
|
|
}
|
|
|
|
|
2014-01-18 02:32:55 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool splitAddressString(const std::string &addr, std::string &domain, uint16_t &port)
|
2009-12-13 21:59:26 +00:00
|
|
|
{
|
2014-01-18 23:29:22 +00:00
|
|
|
std::cerr << "splitAddressString() Input: " << addr << std::endl;
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2014-01-18 23:29:22 +00:00
|
|
|
size_t cpos = addr.rfind(':');
|
2013-09-09 02:10:49 +00:00
|
|
|
if (cpos == std::string::npos)
|
|
|
|
{
|
2014-01-18 23:29:22 +00:00
|
|
|
std::cerr << "splitAddressString Failed to parse (:)";
|
|
|
|
std::cerr << std::endl;
|
2013-09-09 02:10:49 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-01-18 23:29:22 +00:00
|
|
|
int lenport = addr.length() - (cpos + 1); // +1 to skip over : char.
|
2013-09-09 02:10:49 +00:00
|
|
|
if (lenport <= 0)
|
|
|
|
{
|
2014-01-18 23:29:22 +00:00
|
|
|
std::cerr << "splitAddressString() Missing Port ";
|
|
|
|
std::cerr << std::endl;
|
2013-09-09 02:10:49 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-01-18 23:29:22 +00:00
|
|
|
domain = addr.substr(0, cpos);
|
|
|
|
std::string portstr = addr.substr(cpos + 1, std::string::npos);
|
|
|
|
int portint = atoi(portstr.c_str());
|
2013-09-09 02:10:49 +00:00
|
|
|
|
|
|
|
if ((portint < 0) || (portint > 65535))
|
|
|
|
{
|
2014-01-18 23:29:22 +00:00
|
|
|
std::cerr << "splitAddressString() Invalid Port";
|
|
|
|
std::cerr << std::endl;
|
2013-09-09 02:10:49 +00:00
|
|
|
return false;
|
|
|
|
}
|
2014-01-18 23:29:22 +00:00
|
|
|
port = portint;
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2014-01-18 23:29:22 +00:00
|
|
|
std::cerr << "splitAddressString() Domain: " << domain << " Port: " << port;
|
2013-09-09 02:10:49 +00:00
|
|
|
std::cerr << std::endl;
|
2014-01-18 23:29:22 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setHiddenNode(const RsPeerId &id, const std::string &hidden_node_address)
|
2014-01-18 23:29:22 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::setHiddenNode() " << id << std::endl;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
std::string domain;
|
|
|
|
uint16_t port;
|
|
|
|
if (!splitAddressString(hidden_node_address, domain, port))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2013-09-09 02:10:49 +00:00
|
|
|
mPeerMgr->setNetworkMode(id, RS_NET_MODE_HIDDEN);
|
2014-01-18 23:29:22 +00:00
|
|
|
mPeerMgr->setHiddenDomainPort(id, domain, port);
|
2013-09-09 02:10:49 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2014-01-18 02:32:55 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setHiddenNode(const RsPeerId &id, const std::string &address, uint16_t port)
|
2014-01-18 02:32:55 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::setHiddenNode() " << id << std::endl;
|
|
|
|
#endif
|
|
|
|
std::cerr << "p3Peers::setHiddenNode() Domain: " << address << " Port: " << port;
|
|
|
|
std::cerr << std::endl;
|
|
|
|
|
|
|
|
mPeerMgr->setNetworkMode(id, RS_NET_MODE_HIDDEN);
|
|
|
|
mPeerMgr->setHiddenDomainPort(id, address, port);
|
|
|
|
return true;
|
2009-12-13 21:59:26 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setLocalAddress(const RsPeerId &id, const std::string &addr_str, uint16_t port)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::setLocalAddress() " << id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2013-09-13 14:35:19 +00:00
|
|
|
struct sockaddr_storage addr;
|
|
|
|
struct sockaddr_in *addrv4p = (struct sockaddr_in *) &addr;
|
|
|
|
addrv4p->sin_family = AF_INET;
|
|
|
|
addrv4p->sin_port = htons(port);
|
2008-01-25 07:58:29 +00:00
|
|
|
|
|
|
|
int ret = 1;
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
#ifndef WINDOWS_SYS
|
2013-09-13 14:35:19 +00:00
|
|
|
if (ret && (0 != inet_aton(addr_str.c_str(), &(addrv4p->sin_addr))))
|
2008-01-25 07:58:29 +00:00
|
|
|
#else
|
2013-09-13 14:35:19 +00:00
|
|
|
addrv4p->sin_addr.s_addr = inet_addr(addr_str.c_str());
|
2008-01-25 07:58:29 +00:00
|
|
|
if (ret)
|
|
|
|
#endif
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
{
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->setLocalAddress(id, addr);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setExtAddress(const RsPeerId &id, const std::string &addr_str, uint16_t port)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::setExtAddress() " << id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2013-09-13 14:35:19 +00:00
|
|
|
// NOTE THIS IS IPV4 FOR NOW.
|
|
|
|
struct sockaddr_storage addr;
|
|
|
|
struct sockaddr_in *addrv4p = (struct sockaddr_in *) &addr;
|
|
|
|
addrv4p->sin_family = AF_INET;
|
|
|
|
addrv4p->sin_port = htons(port);
|
2008-01-25 07:58:29 +00:00
|
|
|
|
|
|
|
int ret = 1;
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
#ifndef WINDOWS_SYS
|
2013-09-13 14:35:19 +00:00
|
|
|
if (ret && (0 != inet_aton(addr_str.c_str(), &(addrv4p->sin_addr))))
|
2008-01-25 07:58:29 +00:00
|
|
|
#else
|
2013-09-13 14:35:19 +00:00
|
|
|
addrv4p->sin_addr.s_addr = inet_addr(addr_str.c_str());
|
2008-01-25 07:58:29 +00:00
|
|
|
if (ret)
|
|
|
|
#endif
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
{
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->setExtAddress(id, addr);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setDynDNS(const RsPeerId &id, const std::string &dyndns)
|
2010-04-22 18:49:08 +00:00
|
|
|
{
|
2010-04-22 18:49:51 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::setDynDNS() called with id: " << id << " dyndns: " << dyndns <<std::endl;
|
|
|
|
#endif
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->setDynDNS(id, dyndns);
|
2010-04-22 18:49:08 +00:00
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setNetworkMode(const RsPeerId &id, uint32_t extNetMode)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::setNetworkMode() " << id << std::endl;
|
2008-01-25 07:58:29 +00:00
|
|
|
#endif
|
|
|
|
|
2008-02-07 16:18:34 +00:00
|
|
|
/* translate */
|
|
|
|
uint32_t netMode = 0;
|
|
|
|
switch(extNetMode)
|
|
|
|
{
|
|
|
|
case RS_NETMODE_EXT:
|
|
|
|
netMode = RS_NET_MODE_EXT;
|
|
|
|
break;
|
|
|
|
case RS_NETMODE_UPNP:
|
|
|
|
netMode = RS_NET_MODE_UPNP;
|
|
|
|
break;
|
2008-02-26 16:14:13 +00:00
|
|
|
case RS_NETMODE_UDP:
|
|
|
|
netMode = RS_NET_MODE_UDP;
|
|
|
|
break;
|
2013-09-09 02:10:49 +00:00
|
|
|
case RS_NETMODE_HIDDEN:
|
|
|
|
netMode = RS_NET_MODE_HIDDEN;
|
|
|
|
break;
|
2008-02-28 15:58:54 +00:00
|
|
|
case RS_NETMODE_UNREACHABLE:
|
|
|
|
netMode = RS_NET_MODE_UNREACHABLE;
|
|
|
|
break;
|
2008-02-26 16:14:13 +00:00
|
|
|
default:
|
|
|
|
break;
|
2008-02-07 16:18:34 +00:00
|
|
|
}
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->setNetworkMode(id, netMode);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2008-02-07 16:18:34 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::setVisState(const RsPeerId &id, uint16_t vs_disc, uint16_t vs_dht)
|
2008-02-07 16:18:34 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-02-07 23:01:18 +00:00
|
|
|
std::cerr << "p3Peers::setVisState() " << id << std::endl;
|
2008-02-07 16:18:34 +00:00
|
|
|
#endif
|
2013-09-28 08:09:59 +00:00
|
|
|
std::cerr << "p3Peers::setVisState() " << id << " DISC: " << vs_disc;
|
|
|
|
std::cerr << " DHT: " << vs_dht << std::endl;
|
2008-02-07 16:18:34 +00:00
|
|
|
|
2013-09-28 08:09:59 +00:00
|
|
|
return mPeerMgr->setVisState(id, vs_disc, vs_dht);
|
2008-02-07 16:18:34 +00:00
|
|
|
}
|
|
|
|
|
2015-09-07 11:51:24 +02:00
|
|
|
bool p3Peers::getProxyServer(const uint32_t type, std::string &addr, uint16_t &port, uint32_t &status)
|
2014-01-18 02:32:55 +00:00
|
|
|
{
|
2015-03-27 18:41:44 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-01-18 02:32:55 +00:00
|
|
|
std::cerr << "p3Peers::getProxyServer()" << std::endl;
|
2015-03-27 18:41:44 +00:00
|
|
|
#endif
|
2014-01-18 02:32:55 +00:00
|
|
|
|
|
|
|
struct sockaddr_storage proxy_addr;
|
2015-09-07 11:51:24 +02:00
|
|
|
mPeerMgr->getProxyServerAddress(type, proxy_addr);
|
2014-01-18 02:32:55 +00:00
|
|
|
addr = sockaddr_storage_iptostring(proxy_addr);
|
|
|
|
port = sockaddr_storage_port(proxy_addr);
|
2015-09-07 11:51:24 +02:00
|
|
|
mPeerMgr->getProxyServerStatus(type, status);
|
2014-09-28 09:54:20 +00:00
|
|
|
return true;
|
2014-01-18 02:32:55 +00:00
|
|
|
}
|
|
|
|
|
2015-09-07 11:51:24 +02:00
|
|
|
bool p3Peers::setProxyServer(const uint32_t type, const std::string &addr_str, const uint16_t port)
|
2014-01-18 02:32:55 +00:00
|
|
|
{
|
2015-03-27 18:41:44 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2014-01-18 02:32:55 +00:00
|
|
|
std::cerr << "p3Peers::setProxyServer() " << std::endl;
|
2015-03-27 18:41:44 +00:00
|
|
|
#endif
|
2008-02-07 16:18:34 +00:00
|
|
|
|
2014-01-18 02:32:55 +00:00
|
|
|
struct sockaddr_storage addr;
|
|
|
|
struct sockaddr_in *addrv4p = (struct sockaddr_in *) &addr;
|
|
|
|
addrv4p->sin_family = AF_INET;
|
|
|
|
addrv4p->sin_port = htons(port);
|
2008-02-07 16:18:34 +00:00
|
|
|
|
2014-01-18 02:32:55 +00:00
|
|
|
int ret = 1;
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
#ifndef WINDOWS_SYS
|
|
|
|
if (ret && (0 != inet_aton(addr_str.c_str(), &(addrv4p->sin_addr))))
|
|
|
|
#else
|
|
|
|
addrv4p->sin_addr.s_addr = inet_addr(addr_str.c_str());
|
|
|
|
if (ret)
|
|
|
|
#endif
|
|
|
|
/********************************** WINDOWS/UNIX SPECIFIC PART *******************/
|
|
|
|
{
|
2015-09-07 11:51:24 +02:00
|
|
|
return mPeerMgr->setProxyServerAddress(type, addr);
|
2014-01-18 02:32:55 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
std::cerr << "p3Peers::setProxyServer() Failed to Parse Address" << std::endl;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
2008-02-07 16:18:34 +00:00
|
|
|
}
|
|
|
|
|
2014-01-18 02:32:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-03-18 19:33:30 +00:00
|
|
|
//===========================================================================
|
2008-01-25 07:58:29 +00:00
|
|
|
/* Auth Stuff */
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::GetRetroshareInvite(bool include_signatures)
|
2010-09-03 19:23:24 +00:00
|
|
|
{
|
2014-01-19 14:42:16 +00:00
|
|
|
return GetRetroshareInvite(getOwnId(),include_signatures);
|
2010-09-03 19:23:24 +00:00
|
|
|
}
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::getPGPKey(const RsPgpId& pgp_id,bool include_signatures)
|
|
|
|
{
|
|
|
|
unsigned char *mem_block = NULL;
|
|
|
|
size_t mem_block_size = 0;
|
|
|
|
|
|
|
|
if(!AuthGPG::getAuthGPG()->exportPublicKey(RsPgpId(pgp_id),mem_block,mem_block_size,false,include_signatures))
|
|
|
|
{
|
|
|
|
std::cerr << "Cannot output certificate for id \"" << pgp_id << "\". Sorry." << std::endl;
|
|
|
|
return "" ;
|
|
|
|
}
|
|
|
|
|
|
|
|
RsPeerDetails Detail ;
|
|
|
|
|
|
|
|
if(!getGPGDetails(pgp_id,Detail) )
|
|
|
|
return "" ;
|
|
|
|
|
|
|
|
RsCertificate cert( Detail,mem_block,mem_block_size ) ;
|
|
|
|
|
|
|
|
return cert.armouredPGPKey() ;
|
|
|
|
}
|
2010-09-03 19:23:24 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
|
|
|
|
bool p3Peers::GetPGPBase64StringAndCheckSum( const RsPgpId& gpg_id,
|
2012-08-14 19:31:47 +00:00
|
|
|
std::string& gpg_base64_string,
|
|
|
|
std::string& gpg_base64_checksum)
|
|
|
|
{
|
|
|
|
gpg_base64_string = "" ;
|
|
|
|
gpg_base64_checksum = "" ;
|
|
|
|
|
|
|
|
unsigned char *mem_block ;
|
|
|
|
size_t mem_block_size ;
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
if(!AuthGPG::getAuthGPG()->exportPublicKey(gpg_id,mem_block,mem_block_size,false,false))
|
2012-08-14 19:31:47 +00:00
|
|
|
return false ;
|
|
|
|
|
2016-05-10 22:17:48 -04:00
|
|
|
Radix64::encode(mem_block,mem_block_size,gpg_base64_string) ;
|
2012-08-14 19:31:47 +00:00
|
|
|
|
|
|
|
uint32_t crc = PGPKeyManagement::compute24bitsCRC((unsigned char *)mem_block,mem_block_size) ;
|
|
|
|
|
2015-09-24 18:03:19 -04:00
|
|
|
unsigned char tmp[3] = { uint8_t((crc >> 16) & 0xff), uint8_t((crc >> 8) & 0xff), uint8_t(crc & 0xff) } ;
|
2016-05-10 22:17:48 -04:00
|
|
|
Radix64::encode(tmp,3,gpg_base64_checksum) ;
|
2012-08-14 19:31:47 +00:00
|
|
|
|
|
|
|
delete[] mem_block ;
|
|
|
|
|
|
|
|
return true ;
|
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::GetRetroshareInvite(const RsPeerId& ssl_id,bool include_signatures)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
2012-08-13 19:37:50 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::GetRetroshareInvite()" << std::endl;
|
|
|
|
#endif
|
2009-02-08 14:30:28 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
//add the sslid, location, ip local and external address after the signature
|
|
|
|
RsPeerDetails Detail;
|
|
|
|
std::string invite ;
|
2009-05-23 15:07:35 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
if (getPeerDetails(ssl_id, Detail))
|
|
|
|
{
|
|
|
|
unsigned char *mem_block = NULL;
|
|
|
|
size_t mem_block_size = 0;
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
if(!AuthGPG::getAuthGPG()->exportPublicKey(RsPgpId(Detail.gpg_id),mem_block,mem_block_size,false,include_signatures))
|
2012-08-13 19:37:50 +00:00
|
|
|
{
|
|
|
|
std::cerr << "Cannot output certificate for id \"" << Detail.gpg_id << "\". Sorry." << std::endl;
|
|
|
|
return "" ;
|
|
|
|
}
|
|
|
|
|
|
|
|
RsCertificate cert( Detail,mem_block,mem_block_size ) ;
|
|
|
|
|
2014-01-19 14:42:16 +00:00
|
|
|
return cert.toStdString() ;
|
2012-08-13 19:37:50 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::GetRetroshareInvite() returns : \n" << invite << std::endl;
|
|
|
|
#endif
|
|
|
|
return invite;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2009-03-18 19:33:30 +00:00
|
|
|
//===========================================================================
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::loadCertificateFromString(const std::string& cert, RsPeerId& ssl_id, RsPgpId& gpg_id, std::string& error_string)
|
2012-08-13 19:37:50 +00:00
|
|
|
{
|
|
|
|
RsCertificate crt(cert) ;
|
2014-03-17 20:56:06 +00:00
|
|
|
RsPgpId gpgid ;
|
2012-08-13 19:37:50 +00:00
|
|
|
|
2013-01-19 13:43:35 +00:00
|
|
|
bool res = AuthGPG::getAuthGPG()->LoadCertificateFromString(crt.armouredPGPKey(),gpgid,error_string) ;
|
2012-08-13 19:37:50 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
gpg_id = gpgid;
|
|
|
|
ssl_id = crt.sslid() ;
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2013-01-19 13:43:35 +00:00
|
|
|
return res ;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2012-12-22 21:22:03 +00:00
|
|
|
bool p3Peers::loadDetailsFromStringCert(const std::string &certstr, RsPeerDetails &pd,uint32_t& error_code)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::LoadCertificateFromString() ";
|
|
|
|
std::cerr << std::endl;
|
|
|
|
#endif
|
2012-08-13 19:37:50 +00:00
|
|
|
//parse the text to get ip address
|
|
|
|
try
|
|
|
|
{
|
|
|
|
RsCertificate cert(certstr) ;
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
if(!AuthGPG::getAuthGPG()->getGPGDetailsFromBinaryBlock(cert.pgp_key(),cert.pgp_key_size(), pd.gpg_id,pd.name,pd.gpgSigners))
|
|
|
|
return false;
|
2010-01-13 21:30:44 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "Parsing cert for sslid, location, ext and local address details. : " << certstr << std::endl;
|
|
|
|
#endif
|
2010-01-13 21:29:21 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
pd.id = cert.sslid() ;
|
2013-09-01 12:11:21 +00:00
|
|
|
pd.location = cert.location_name_string();
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
pd.isOnlyGPGdetail = pd.id.isNull();
|
2015-02-18 19:07:58 +00:00
|
|
|
pd.service_perm_flags = RS_NODE_PERM_DEFAULT ;
|
2013-09-09 02:10:49 +00:00
|
|
|
|
2013-09-24 05:30:01 +00:00
|
|
|
if (!cert.hidden_node_string().empty())
|
2013-09-09 02:10:49 +00:00
|
|
|
{
|
2013-09-24 05:30:01 +00:00
|
|
|
pd.isHiddenNode = true;
|
2014-01-18 23:29:22 +00:00
|
|
|
|
|
|
|
std::string domain;
|
|
|
|
uint16_t port;
|
|
|
|
if (splitAddressString(cert.hidden_node_string(), domain, port))
|
|
|
|
{
|
|
|
|
pd.hiddenNodeAddress = domain;
|
|
|
|
pd.hiddenNodePort = port;
|
2015-09-07 22:57:54 +02:00
|
|
|
pd.hiddenType = mPeerMgr->hiddenDomainToHiddenType(domain);
|
2014-01-18 23:29:22 +00:00
|
|
|
}
|
2013-09-09 02:10:49 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2013-09-24 05:30:01 +00:00
|
|
|
pd.isHiddenNode = false;
|
2013-09-09 02:10:49 +00:00
|
|
|
pd.localAddr = cert.loc_ip_string();
|
|
|
|
pd.localPort = cert.loc_port_us();
|
|
|
|
pd.extAddr = cert.ext_ip_string();
|
|
|
|
pd.extPort = cert.ext_port_us();
|
|
|
|
pd.dyndns = cert.dns_string() ;
|
|
|
|
}
|
2012-08-13 19:37:50 +00:00
|
|
|
}
|
2012-12-22 21:22:03 +00:00
|
|
|
catch(uint32_t e)
|
2012-08-13 19:37:50 +00:00
|
|
|
{
|
2012-12-22 21:22:03 +00:00
|
|
|
std::cerr << "ConnectFriendWizard : Parse ip address error :" << e << std::endl;
|
|
|
|
error_code = e;
|
2012-08-13 19:37:50 +00:00
|
|
|
return false ;
|
|
|
|
}
|
2010-01-13 21:29:21 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
if (pd.gpg_id.isNull())
|
2012-08-13 19:37:50 +00:00
|
|
|
return false;
|
|
|
|
else
|
|
|
|
return true;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2011-08-30 21:49:49 +00:00
|
|
|
bool p3Peers::cleanCertificate(const std::string &certstr, std::string &cleanCert,int& error_code)
|
2011-04-08 18:53:12 +00:00
|
|
|
{
|
2012-08-13 19:37:50 +00:00
|
|
|
RsCertificate::Format format ;
|
2009-05-23 15:07:35 +00:00
|
|
|
|
2012-08-13 19:37:50 +00:00
|
|
|
return RsCertificate::cleanCertificate(certstr,cleanCert,format,error_code) ;
|
2011-04-08 18:53:12 +00:00
|
|
|
}
|
2009-05-23 15:07:35 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::saveCertificateToFile(const RsPeerId &id, const std::string &/*fname*/)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
2011-08-12 13:42:30 +00:00
|
|
|
/* remove unused parameter warnings */
|
|
|
|
(void) id;
|
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
#ifdef P3PEERS_DEBUG
|
2010-01-13 21:22:52 +00:00
|
|
|
std::cerr << "p3Peers::SaveCertificateToFile() not implemented yet " << id;
|
2008-01-25 07:58:29 +00:00
|
|
|
std::cerr << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2010-01-13 21:22:52 +00:00
|
|
|
// ensureExtension(fname, "pqi");
|
|
|
|
//
|
|
|
|
// return AuthSSL::getAuthSSL()->SaveCertificateToFile(id, fname);
|
|
|
|
return false;
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
std::string p3Peers::saveCertificateToString(const RsPeerId &id)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::SaveCertificateToString() " << id;
|
|
|
|
std::cerr << std::endl;
|
|
|
|
#endif
|
2010-01-13 21:22:52 +00:00
|
|
|
if (id == AuthSSL::getAuthSSL()->OwnId()) {
|
|
|
|
return AuthSSL::getAuthSSL()->SaveOwnCertificateToString();
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::signGPGCertificate(const RsPgpId &id)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::SignCertificate() " << id;
|
|
|
|
std::cerr << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2010-02-09 19:10:42 +00:00
|
|
|
|
2011-08-07 21:11:00 +00:00
|
|
|
AuthGPG::getAuthGPG()->AllowConnection(id, true);
|
2010-02-09 19:10:42 +00:00
|
|
|
return AuthGPG::getAuthGPG()->SignCertificateLevel0(id);
|
2010-01-13 21:22:52 +00:00
|
|
|
}
|
|
|
|
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
bool p3Peers::trustGPGCertificate(const RsPgpId &id, uint32_t trustlvl)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::TrustCertificate() " << id;
|
|
|
|
std::cerr << std::endl;
|
|
|
|
#endif
|
2014-03-17 20:56:06 +00:00
|
|
|
return AuthGPG::getAuthGPG()->TrustCertificate(id, trustlvl);
|
2008-01-25 07:58:29 +00:00
|
|
|
}
|
|
|
|
|
2010-09-22 22:37:57 +00:00
|
|
|
/* Group Stuff */
|
|
|
|
bool p3Peers::addGroup(RsGroupInfo &groupInfo)
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::addGroup()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2012-11-12 22:51:27 +00:00
|
|
|
bool res = mPeerMgr->addGroup(groupInfo);
|
|
|
|
rsFiles->updateSinceGroupPermissionsChanged() ;
|
|
|
|
return res ;
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
|
|
|
|
2016-07-04 23:55:48 -04:00
|
|
|
bool p3Peers::editGroup(const RsNodeGroupId &groupId, RsGroupInfo &groupInfo)
|
2010-09-22 22:37:57 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::editGroup()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2012-11-12 22:51:27 +00:00
|
|
|
bool res = mPeerMgr->editGroup(groupId, groupInfo);
|
|
|
|
rsFiles->updateSinceGroupPermissionsChanged() ;
|
|
|
|
|
|
|
|
return res ;
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
|
|
|
|
2016-07-04 23:55:48 -04:00
|
|
|
bool p3Peers::removeGroup(const RsNodeGroupId &groupId)
|
2010-09-22 22:37:57 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::removeGroup()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2012-11-12 22:51:27 +00:00
|
|
|
bool res = mPeerMgr->removeGroup(groupId);
|
|
|
|
rsFiles->updateSinceGroupPermissionsChanged() ;
|
|
|
|
return res ;
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
|
|
|
|
2016-07-05 23:49:43 -04:00
|
|
|
bool p3Peers::getGroupInfoByName(const std::string& groupName, RsGroupInfo &groupInfo)
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getGroupInfo()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return mPeerMgr->getGroupInfoByName(groupName, groupInfo);
|
|
|
|
}
|
2016-07-04 23:55:48 -04:00
|
|
|
bool p3Peers::getGroupInfo(const RsNodeGroupId &groupId, RsGroupInfo &groupInfo)
|
2010-09-22 22:37:57 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getGroupInfo()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->getGroupInfo(groupId, groupInfo);
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool p3Peers::getGroupInfoList(std::list<RsGroupInfo> &groupInfoList)
|
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::getGroupInfoList()" << std::endl;
|
|
|
|
#endif
|
|
|
|
|
2011-07-09 18:39:34 +00:00
|
|
|
return mPeerMgr->getGroupInfoList(groupInfoList);
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
|
|
|
|
2016-07-04 23:55:48 -04:00
|
|
|
bool p3Peers::assignPeerToGroup(const RsNodeGroupId &groupId, const RsPgpId& peerId, bool assign)
|
2010-09-22 22:37:57 +00:00
|
|
|
{
|
2014-03-17 20:56:06 +00:00
|
|
|
std::list<RsPgpId> peerIds;
|
2010-09-22 22:37:57 +00:00
|
|
|
peerIds.push_back(peerId);
|
|
|
|
|
|
|
|
return assignPeersToGroup(groupId, peerIds, assign);
|
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2016-07-04 23:55:48 -04:00
|
|
|
bool p3Peers::assignPeersToGroup(const RsNodeGroupId &groupId, const std::list<RsPgpId> &peerIds, bool assign)
|
2010-09-22 22:37:57 +00:00
|
|
|
{
|
|
|
|
#ifdef P3PEERS_DEBUG
|
|
|
|
std::cerr << "p3Peers::assignPeersToGroup()" << std::endl;
|
|
|
|
#endif
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2012-11-12 22:51:27 +00:00
|
|
|
bool res = mPeerMgr->assignPeersToGroup(groupId, peerIds, assign);
|
|
|
|
rsFiles->updateSinceGroupPermissionsChanged() ;
|
|
|
|
|
|
|
|
return res ;
|
2010-09-22 22:37:57 +00:00
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
FileSearchFlags p3Peers::computePeerPermissionFlags(const RsPeerId& peer_ssl_id,
|
2012-11-01 10:06:12 +00:00
|
|
|
FileStorageFlags share_flags,
|
2016-07-05 23:49:43 -04:00
|
|
|
const std::list<RsNodeGroupId>& directory_parent_groups)
|
2012-11-01 10:06:12 +00:00
|
|
|
{
|
|
|
|
// We should be able to do that in O(1), using groups based on packs of bits.
|
|
|
|
//
|
|
|
|
// But for now, because the implementation of groups is not totally decided yet, we revert to this
|
|
|
|
// very simple algorithm.
|
|
|
|
//
|
|
|
|
|
2016-10-31 14:26:01 +01:00
|
|
|
bool found = directory_parent_groups.empty() ; // by default, empty list means browsable by everyone.
|
2014-03-17 20:56:06 +00:00
|
|
|
RsPgpId pgp_id = getGPGId(peer_ssl_id) ;
|
2012-11-01 10:06:12 +00:00
|
|
|
|
2016-07-05 23:49:43 -04:00
|
|
|
for(std::list<RsNodeGroupId>::const_iterator it(directory_parent_groups.begin());it!=directory_parent_groups.end() && !found;++it)
|
2012-11-01 10:06:12 +00:00
|
|
|
{
|
|
|
|
RsGroupInfo info ;
|
|
|
|
if(!getGroupInfo(*it,info))
|
|
|
|
{
|
|
|
|
std::cerr << "(EE) p3Peers::computePeerPermissionFlags: no group named " << *it << ": cannot get info." << std::endl;
|
|
|
|
continue ;
|
|
|
|
}
|
|
|
|
|
2015-04-17 21:36:22 +00:00
|
|
|
found = found || (info.peerIds.find(pgp_id) != info.peerIds.end()) ;
|
|
|
|
|
|
|
|
//for(std::set<RsPgpId>::const_iterator it2(info.peerIds.begin());it2!=info.peerIds.end() && !found;++it2)
|
|
|
|
// if(*it2 == pgp_id)
|
|
|
|
// found = true ;
|
2012-11-01 10:06:12 +00:00
|
|
|
}
|
|
|
|
|
2016-10-31 14:26:01 +01:00
|
|
|
bool network_wide = (share_flags & DIR_FLAGS_ANONYMOUS_DOWNLOAD) ;//|| ( (share_flags & DIR_FLAGS_NETWORK_WIDE_GROUPS) && found) ;
|
|
|
|
bool browsable = (share_flags & DIR_FLAGS_BROWSABLE) && found ;
|
2012-11-01 10:06:12 +00:00
|
|
|
|
2012-11-02 13:52:29 +00:00
|
|
|
FileSearchFlags final_flags ;
|
|
|
|
|
|
|
|
if(network_wide) final_flags |= RS_FILE_HINTS_NETWORK_WIDE ;
|
|
|
|
if(browsable ) final_flags |= RS_FILE_HINTS_BROWSABLE ;
|
|
|
|
|
|
|
|
return final_flags ;
|
2012-11-01 10:06:12 +00:00
|
|
|
}
|
2008-01-25 07:58:29 +00:00
|
|
|
|
|
|
|
RsPeerDetails::RsPeerDetails()
|
2010-06-05 19:16:39 +00:00
|
|
|
:isOnlyGPGdetail(false),
|
2016-06-05 11:51:47 -04:00
|
|
|
name(""),email(""),location(""),
|
|
|
|
org(""),authcode(""),
|
|
|
|
trustLvl(0), validLvl(0),ownsign(false),
|
|
|
|
hasSignedMe(false),accept_connection(false),
|
|
|
|
state(0),actAsServer(false),
|
|
|
|
connectPort(0),
|
|
|
|
isHiddenNode(false),
|
|
|
|
hiddenNodePort(0),
|
|
|
|
hiddenType(RS_HIDDEN_TYPE_NONE),
|
|
|
|
localAddr(""),localPort(0),extAddr(""),extPort(0),netMode(0),vs_disc(0), vs_dht(0),
|
|
|
|
lastConnect(0),lastUsed(0),connectState(0),connectStateString(""),
|
|
|
|
connectPeriod(0),
|
|
|
|
foundDHT(false), wasDeniedConnection(false), deniedTS(0),
|
|
|
|
linkType ( RS_NET_CONN_TRANS_TCP_UNKNOWN)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
std::ostream &operator<<(std::ostream &out, const RsPeerDetails &detail)
|
|
|
|
{
|
|
|
|
out << "RsPeerDetail: " << detail.name << " <" << detail.id << ">";
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " email: " << detail.email;
|
|
|
|
out << " location:" << detail.location;
|
|
|
|
out << " org: " << detail.org;
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " fpr: " << detail.fpr;
|
|
|
|
out << " authcode:" << detail.authcode;
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " signers:";
|
|
|
|
out << std::endl;
|
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
std::list<RsPgpId>::const_iterator it;
|
2010-01-13 21:11:02 +00:00
|
|
|
for(it = detail.gpgSigners.begin();
|
2014-10-24 22:07:26 +00:00
|
|
|
it != detail.gpgSigners.end(); ++it)
|
2008-01-25 07:58:29 +00:00
|
|
|
{
|
|
|
|
out << "\t" << *it;
|
|
|
|
out << std::endl;
|
|
|
|
}
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " trustLvl: " << detail.trustLvl;
|
2010-01-13 21:05:38 +00:00
|
|
|
out << " ownSign: " << detail.ownsign;
|
2008-01-25 07:58:29 +00:00
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " state: " << detail.state;
|
|
|
|
out << " netMode: " << detail.netMode;
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
out << " localAddr: " << detail.localAddr;
|
|
|
|
out << ":" << detail.localPort;
|
|
|
|
out << std::endl;
|
|
|
|
out << " extAddr: " << detail.extAddr;
|
|
|
|
out << ":" << detail.extPort;
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
|
|
|
|
out << " lastConnect: " << detail.lastConnect;
|
|
|
|
out << " connectPeriod: " << detail.connectPeriod;
|
|
|
|
out << std::endl;
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
2010-09-22 22:37:57 +00:00
|
|
|
|
|
|
|
RsGroupInfo::RsGroupInfo()
|
|
|
|
{
|
|
|
|
flag = 0;
|
|
|
|
}
|
2012-12-01 19:22:22 +00:00
|
|
|
|
2014-03-17 20:56:06 +00:00
|
|
|
ServicePermissionFlags p3Peers::servicePermissionFlags(const RsPeerId& ssl_id)
|
2012-12-01 19:22:22 +00:00
|
|
|
{
|
2014-03-17 20:56:06 +00:00
|
|
|
return mPeerMgr->servicePermissionFlags(ssl_id) ;
|
2012-12-01 19:22:22 +00:00
|
|
|
}
|
2014-03-17 20:56:06 +00:00
|
|
|
ServicePermissionFlags p3Peers::servicePermissionFlags(const RsPgpId& gpg_id)
|
2012-12-01 19:22:22 +00:00
|
|
|
{
|
|
|
|
return mPeerMgr->servicePermissionFlags(gpg_id) ;
|
|
|
|
}
|
2014-03-17 20:56:06 +00:00
|
|
|
void p3Peers::setServicePermissionFlags(const RsPgpId& gpg_id,const ServicePermissionFlags& flags)
|
2012-12-01 19:22:22 +00:00
|
|
|
{
|
|
|
|
mPeerMgr->setServicePermissionFlags(gpg_id,flags) ;
|
|
|
|
}
|
|
|
|
|
|
|
|
|