Added Full UDP Networking stack into PeerNetQt.

Lots of testing to now be done, and callback wiring to be done.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-peernet@4267 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2011-06-15 01:56:34 +00:00
parent 48c185192d
commit b22a2242ab
2 changed files with 93 additions and 14 deletions

View File

@ -101,25 +101,83 @@ void PeerNet::init()
mUdpStack = new UdpStack(tmpladdr);
}
std::cerr << "PeerNet() startup ... creating UdpStunner";
std::cerr << "PeerNet() startup ... creating Advanced Stack";
std::cerr << std::endl;
/* ADVANCED STACK BUILDING! */
/* construct the rest of the stack, important to build them in the correct order! */
/* MOST OF THIS IS COMMENTED OUT UNTIL THE REST OF libretroshare IS READY FOR IT! */
UdpSubReceiver *udpReceivers[3];
int udpTypes[3];
std::cerr << "PeerNet() startup ... creating UdpStunner on UdpStack";
std::cerr << std::endl;
// STUNNER.
mDhtStunner = new UdpStunner(mUdpStack);
//mDhtStunner->setStunKeepAlive(0); // default.
//mDhtStunner->setStunKeepAlive(1);
mUdpStack->addReceiver(mDhtStunner);
std::cerr << "PeerNet() startup ... creating BitDHT on UdpStack";
std::cerr << std::endl;
std::cerr << "PeerNet() startup ... creating UdpBitDht";
// BITDHT.
mUdpBitDht = new UdpBitDht(mUdpStack, &mOwnId, dhtVersion, mBootstrapFile, stdfns);
mUdpStack->addReceiver(mUdpBitDht);
/* setup callback to here */
mUdpBitDht->addCallback(this);
std::cerr << "PeerNet() startup ... creating UdpRelayReceiver on UdpStack";
std::cerr << std::endl;
// NEXT THE RELAY (NEED to keep a reference for installing RELAYS)
UdpRelayReceiver *mRelayRecver = new UdpRelayReceiver(mUdpStack);
udpReceivers[2] = mRelayRecver; /* RELAY Connections (DHT Port) */
udpTypes[2] = TOU_RECEIVER_TYPE_UDPRELAY;
mUdpStack->addReceiver(udpReceivers[2]);
std::cerr << "PeerNet() startup ... creating UdpPeerReceiver on UdpStack";
std::cerr << std::endl;
// LAST ON THIS STACK IS STANDARD DIRECT TOU
udpReceivers[0] = new UdpPeerReceiver(mUdpStack); /* standard DIRECT Connections (DHT Port) */
udpTypes[0] = TOU_RECEIVER_TYPE_UDPPEER;
mUdpStack->addReceiver(udpReceivers[0]);
std::cerr << "PeerNet() startup ... creating UdpProxyStack";
std::cerr << std::endl;
// NOW WE BUILD THE SECOND STACK.
// Create the Second UdpStack... Port should be random (but openable!).
struct sockaddr_in sndladdr;
sockaddr_clear(&sndladdr);
sndladdr.sin_port = htons(mPort + 1111);
rsUdpStack *mUdpProxyStack = new rsUdpStack(sndladdr);
std::cerr << "PeerNet() startup ... creating UdpStunner on UdpProxyStack";
std::cerr << std::endl;
// FIRSTLY THE PROXY STUNNER.
mProxyStunner = new UdpStunner(mUdpProxyStack);
mUdpProxyStack->addReceiver(mProxyStunner);
/* create dht */
mUdpBitDht = new UdpBitDht(mUdpStack, &mOwnId, dhtVersion, mBootstrapFile, stdfns);
mUdpStack->addReceiver(mUdpBitDht);
std::cerr << "PeerNet() startup ... creating UdpPeerReceiver(Proxy) on UdpProxyStack";
std::cerr << std::endl;
// FINALLY THE PROXY UDP CONNECTIONS
udpReceivers[1] = new UdpPeerReceiver(mUdpProxyStack); /* PROXY Connections (Alt UDP Port) */
udpTypes[1] = TOU_RECEIVER_TYPE_UDPPEER;
mUdpProxyStack->addReceiver(udpReceivers[1]);
// NOW WE CAN PASS THE RECEIVERS TO TOU.
// REAL INITIALISATION - WITH THREE MODES - FOR LATER.
tou_init((void **) udpReceivers, udpTypes, 3);
/* setup callback to here */
mUdpBitDht->addCallback(this);
/* setup TOU part */
tou_init(mUdpStack);
/* startup the Udp stuff! */
mUdpBitDht->start();
@ -129,6 +187,17 @@ void PeerNet::init()
loadPeers(mPeersFile);
storeConfig(mConfigFile);
}
int PeerNet::getOwnId(bdNodeId *id)

View File

@ -13,6 +13,8 @@
#include "bitdht/bdstddht.h"
#include "tcponudp/udpstunner.h"
#include "tcponudp/udppeer.h"
#include "tcponudp/udprelay.h"
#define PN_DHT_STATE_UNKNOWN 0
#define PN_DHT_STATE_SEARCHING 1
@ -144,11 +146,19 @@ virtual int dhtConnectCallback(const bdId *srcId, const bdId *proxyId, const bdI
private:
/* The Two Stacks */
UdpStack *mUdpStack;
UdpBitDht *mUdpBitDht;
UdpStack *mUdpProxyStack;
// ON Stack 1.
UdpStunner *mDhtStunner;
//UdpStunner *mSyncStunner;
UdpBitDht *mUdpBitDht;
UdpRelayReceiver *mRelayReceiver;
// Dont need reference to DIRECT UDP Receiver.
// ON Stack 2.
UdpStunner *mProxyStunner;
// Dont need reference to PROXY UDP Receiver.
bdNodeId mOwnId;