git-svn-id: svn://db.shs.com.ru/pip@542 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -112,7 +112,7 @@ void PIPeer::PeerData::setDist(int dist) {
|
||||
|
||||
|
||||
|
||||
PIPeer::PeerInfo::Address::Address(const PIString & a, const PIString & m): address(a), netmask(m) {
|
||||
PIPeer::PeerInfo::PeerAddress::PeerAddress(const PIEthernet::Address & a, const PIEthernet::Address & m): address(a), netmask(m) {
|
||||
ping = -1.;
|
||||
wait_ping = false;
|
||||
last_ping = PISystemTime::current(true);
|
||||
@@ -121,7 +121,7 @@ PIPeer::PeerInfo::Address::Address(const PIString & a, const PIString & m): addr
|
||||
|
||||
int PIPeer::PeerInfo::ping() const {
|
||||
int ret = -1;
|
||||
piForeachC (Address & a, addresses)
|
||||
piForeachC (PeerAddress & a, addresses)
|
||||
if (a.ping > 0.) {
|
||||
if (ret < 0) ret = piRoundd(a.ping);
|
||||
else ret = piMini(ret, piRoundd(a.ping));
|
||||
@@ -141,10 +141,10 @@ void PIPeer::PeerInfo::destroy() {
|
||||
}
|
||||
|
||||
|
||||
PIString PIPeer::PeerInfo::fastestAddress() const {
|
||||
PIEthernet::Address PIPeer::PeerInfo::fastestAddress() const {
|
||||
double mp = -1.;
|
||||
PIString ret;
|
||||
piForeachC (Address & a, addresses) {
|
||||
PIEthernet::Address ret;
|
||||
piForeachC (PeerAddress & a, addresses) {
|
||||
if (a.ping <= 0.) continue;
|
||||
if ((mp < 0) || (mp > a.ping)) {
|
||||
mp = a.ping;
|
||||
@@ -248,7 +248,7 @@ void PIPeer::initEths(PIStringList al) {
|
||||
if (ce->open()) {
|
||||
eths_traffic << ce;
|
||||
cint = prev_ifaces.getByAddress(a);
|
||||
self_info.addresses << PeerInfo::Address(ce->path(), cint == 0 ? "255.255.255.0" : cint->netmask);
|
||||
self_info.addresses << PeerInfo::PeerAddress(ce->path(), cint == 0 ? "255.255.255.0" : cint->netmask);
|
||||
CONNECTU(ce, threadedReadEvent, this, dataRead);
|
||||
ce->startThreadedRead();
|
||||
// piCoutObj << "dc binded to" << ce->path();
|
||||
@@ -473,7 +473,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
|
||||
eth_mutex.lock();
|
||||
// piCout << "dataRead lock";
|
||||
if (type == 5) { // ping request
|
||||
PIString addr;
|
||||
PIEthernet::Address addr;
|
||||
PISystemTime time;
|
||||
ba >> to >> from >> addr >> time;
|
||||
// piCout << "ping request" << to << from << addr;
|
||||
@@ -485,7 +485,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
|
||||
sba << int(6) << to << from << addr << time;
|
||||
// piCout << " ping from" << from << addr << ", send back to" << pi->name;
|
||||
send_mutex.lock();
|
||||
piForeachC (PeerInfo::Address & a, pi->addresses) {
|
||||
piForeachC (PeerInfo::PeerAddress & a, pi->addresses) {
|
||||
if (eth_send.send(a.address, sba))
|
||||
diag_s.received(sba.size_s());
|
||||
}
|
||||
@@ -497,7 +497,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
|
||||
return true;
|
||||
}
|
||||
if (type == 6) { // ping request
|
||||
PIString addr;
|
||||
PIEthernet::Address addr;
|
||||
PISystemTime time, ptime, ctime = PISystemTime::current(true);
|
||||
ba >> to >> from >> addr >> time;
|
||||
// piCout << "ping reply" << to << from << addr;
|
||||
@@ -506,7 +506,7 @@ bool PIPeer::dataRead(uchar * readed, int size) {
|
||||
piForeach (PeerInfo & p, peers) {
|
||||
if (!p.isNeighbour()) continue;
|
||||
if (p.name != from) continue;
|
||||
piForeach (PeerInfo::Address & a, p.addresses) {
|
||||
piForeach (PeerInfo::PeerAddress & a, p.addresses) {
|
||||
if (a.address != addr) continue;
|
||||
if (a.last_ping >= time) piBreak;
|
||||
ptime = ctime - time;
|
||||
@@ -674,9 +674,9 @@ bool PIPeer::mbcastRead(uchar * data, int size) {
|
||||
if (isPeerRecent(peer, rpeer)) {
|
||||
//piCout << "synced " << peer.name;
|
||||
for (int z = 0; z < rpeer.addresses.size_s(); ++z) {
|
||||
PeerInfo::Address & ra(rpeer.addresses[z]);
|
||||
PeerInfo::PeerAddress & ra(rpeer.addresses[z]);
|
||||
for (int k = 0; k < peer.addresses.size_s(); ++k) {
|
||||
PeerInfo::Address & a(peer.addresses[k]);
|
||||
PeerInfo::PeerAddress & a(peer.addresses[k]);
|
||||
if (ra.address == a.address) {
|
||||
ra.ping = a.ping;
|
||||
ra.wait_ping = a.wait_ping;
|
||||
@@ -727,7 +727,7 @@ bool PIPeer::mbcastRead(uchar * data, int size) {
|
||||
|
||||
bool PIPeer::sendToNeighbour(PIPeer::PeerInfo * peer, const PIByteArray & ba) {
|
||||
//if (peer->_neth == 0) return false;
|
||||
PIString addr = peer->fastestAddress();
|
||||
PIEthernet::Address addr = peer->fastestAddress();
|
||||
//piCout << "[PIPeer] sendToNeighbour" << peer->name << addr << ba.size_s() << "bytes ...";
|
||||
//bool ok = peer->_neth->send(peer->_naddress, ba.data(), ba.size_s());
|
||||
send_mutex.lock();
|
||||
@@ -828,7 +828,7 @@ void PIPeer::pingNeighbours() {
|
||||
if (!p.isNeighbour()) continue;
|
||||
//piCout << " ping neighbour" << p.name << p.ping();
|
||||
send_mutex.lock();
|
||||
piForeach (PeerInfo::Address & a, p.addresses) {
|
||||
piForeach (PeerInfo::PeerAddress & a, p.addresses) {
|
||||
// piCout << " address" << a.address << a.wait_ping;
|
||||
if (a.wait_ping) {
|
||||
if ((PISystemTime::current(true) - a.last_ping).abs().toSeconds() <= _PIPEER_PING_TIMEOUT)
|
||||
@@ -1030,7 +1030,10 @@ void PIPeer::initNetwork() {
|
||||
piMSleep(100);
|
||||
// piCoutObj << self_info.addresses.size();
|
||||
self_info.addresses.clear();
|
||||
PIStringList sl = PIEthernet::allAddresses();
|
||||
PIVector<PIEthernet::Address> al = PIEthernet::allAddresses();
|
||||
PIStringList sl;
|
||||
piForeachC (PIEthernet::Address & a, al)
|
||||
sl << a.ipString();
|
||||
initEths(sl);
|
||||
// piCoutObj << sl << self_info.addresses.size();
|
||||
sl.removeAll("127.0.0.1");
|
||||
|
||||
Reference in New Issue
Block a user