X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=PeerCast.root%2FPeerCast%2Fcore%2Fcommon%2Fpcp.cpp;h=11289f68bf43381179df7f72a1909b6d04d12267;hb=97575ac58ac9855422d4c314bdd7db4eeda6c806;hp=08e8485e1c3ca63ab11c978d043aedd1277afe77;hpb=68ed879837ccc3d81e0782684506f8ff5e0d7bc4;p=peercast-im%2FPeerCastIM.git diff --git a/PeerCast.root/PeerCast/core/common/pcp.cpp b/PeerCast.root/PeerCast/core/common/pcp.cpp index 08e8485..11289f6 100644 --- a/PeerCast.root/PeerCast/core/common/pcp.cpp +++ b/PeerCast.root/PeerCast/core/common/pcp.cpp @@ -112,6 +112,7 @@ unsigned int PCPStream::flushUb(Stream &in, unsigned int size) int PCPStream::readPacket(Stream &in,Channel *) { BroadcastState bcs; + bcs.ttl = 1; return readPacket(in,bcs); } // ------------------------------------------ @@ -375,7 +376,7 @@ void PCPStream::readPktAtoms(Channel *ch,AtomStream &atom,int numc,BroadcastStat if (servMgr->autoBumpSkipCount) //JP-EX { - if (ch->skipCount > servMgr->autoBumpSkipCount) + if ((ch->skipCount > servMgr->autoBumpSkipCount) && !(servMgr->disableAutoBumpIfDirect && ch->sourceHost.tracker)) //JP-MOD { LOG_DEBUG("Auto bump"); ch->bump = true; @@ -505,7 +506,18 @@ void PCPStream::readHostAtoms(AtomStream &atom, int numc, BroadcastState &bcs, C hit.uphost.port = atom.readInt(); else if (id == PCP_HOST_UPHOST_HOPS) hit.uphostHops = atom.readInt(); - else + else if (id == PCP_HOST_CLAP_PP){ //JP-MOD + hit.clap_pp = atom.readInt(); + if (hit.clap_pp & 1){ + Channel *c = chanMgr->findChannelByID(chanID); + if(c && c->isBroadcasting()){ + String sjis; + sjis = c->info.name; + sjis.convertTo(String::T_SJIS); + peercastApp->notifyMessage(ServMgr::NT_APPLAUSE, sjis); + } + } + }else { LOG_DEBUG("PCP skip: %s,%d,%d",id.getString().str(),c,d); atom.skip(c,d); @@ -519,7 +531,7 @@ void PCPStream::readHostAtoms(AtomStream &atom, int numc, BroadcastState &bcs, C hit.servent_id = bcs.servent_id; - if (flg){ + if (flg && (bcs.ttl != 0)){ // LOG_DEBUG("readHostAtoms HITLISTLOCK ON-------------"); chanMgr->hitlistlock.on(); if (hit.recv) @@ -651,7 +663,7 @@ void PCPStream::readChanAtoms(AtomStream &atom,int numc,BroadcastState &bcs) int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs) { ChanPacket pack; - int ttl=0; + //int ttl=0; int ver=0; int ver_vp=0; GnuID fromID,destID; @@ -676,9 +688,8 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs) if (id == PCP_BCST_TTL) { - ttl = atom.readChar()-1; - patom.writeChar(id,ttl); - + bcs.ttl = atom.readChar()-1; + patom.writeChar(id,bcs.ttl); }else if (id == PCP_BCST_HOPS) { bcs.numHops = atom.readChar()+1; @@ -757,9 +768,15 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs) pmem.pos = oldPos; r = readAtom(patom,bcs); } else { - LOG_DEBUG("### Invalid bcst: hops=%d, ver=%d(VP%04d), ttl=%d", - bcs.numHops,ver,ver_vp,ttl); - ttl = 0; + char tmp[80], tmp2[80], tmp3[80]; + hit.uphost.toStr(tmp); + hit.host.toStr(tmp2); + sv->getHost().toStr(tmp3); + LOG_DEBUG("### Invalid bcst: hops=%d, l/r = %d/%d, ver=%d(VP%04d), ttl=%d", + bcs.numHops,hit.numListeners, hit.numRelays, ver,ver_vp,bcs.ttl); + LOG_DEBUG("### %s <- %s <- sv(%s)", + tmp2, tmp, tmp3); + bcs.ttl = 0; } } else { // copy and process atoms @@ -785,11 +802,11 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs) if (ver_ex_number){ LOG_DEBUG("PCP bcst: group=%d, hops=%d, ver=%d(%c%c%04d), from=%s, dest=%s ttl=%d", - bcs.group,bcs.numHops,ver,ver_ex_prefix[0],ver_ex_prefix[1],ver_ex_number,fromStr,destStr,ttl); + bcs.group,bcs.numHops,ver,ver_ex_prefix[0],ver_ex_prefix[1],ver_ex_number,fromStr,destStr,bcs.ttl); } else if (ver_vp){ - LOG_DEBUG("PCP bcst: group=%d, hops=%d, ver=%d(VP%04d), from=%s, dest=%s ttl=%d",bcs.group,bcs.numHops,ver,ver_vp,fromStr,destStr,ttl); + LOG_DEBUG("PCP bcst: group=%d, hops=%d, ver=%d(VP%04d), from=%s, dest=%s ttl=%d",bcs.group,bcs.numHops,ver,ver_vp,fromStr,destStr,bcs.ttl); } else { - LOG_DEBUG("PCP bcst: group=%d, hops=%d, ver=%d, from=%s, dest=%s ttl=%d",bcs.group,bcs.numHops,ver,fromStr,destStr,ttl); + LOG_DEBUG("PCP bcst: group=%d, hops=%d, ver=%d, from=%s, dest=%s ttl=%d",bcs.group,bcs.numHops,ver,fromStr,destStr,bcs.ttl); } if (fromID.isSet()) @@ -799,39 +816,39 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs) return PCP_ERROR_BCST+PCP_ERROR_LOOPBACK; } - // broadcast back out if ttl > 0 - if ((ttl>0) && (!bcs.forMe)) - { - pack.len = pmem.pos; - pack.type = ChanPacket::T_PCP; - - if (bcs.group & (/*PCP_BCST_GROUP_ROOT|*/PCP_BCST_GROUP_TRACKERS|PCP_BCST_GROUP_RELAYS)) + // broadcast back out if ttl > 0 + if ((bcs.ttl>0) && (!bcs.forMe)) { - pack.priority = 11 - bcs.numHops; - chanMgr->broadcastPacketUp(pack,bcs.chanID,remoteID,destID); - } + pack.len = pmem.pos; + pack.type = ChanPacket::T_PCP; - if (bcs.group & (/*PCP_BCST_GROUP_ROOT|*/PCP_BCST_GROUP_TRACKERS|PCP_BCST_GROUP_RELAYS)) - { - servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_COUT); - } + if (bcs.group & (/*PCP_BCST_GROUP_ROOT|*/PCP_BCST_GROUP_TRACKERS|PCP_BCST_GROUP_RELAYS)) + { + pack.priority = 11 - bcs.numHops; + chanMgr->broadcastPacketUp(pack,bcs.chanID,remoteID,destID); + } - if (bcs.group & (PCP_BCST_GROUP_RELAYS|PCP_BCST_GROUP_TRACKERS)) - { - servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_CIN); - } + if (bcs.group & (/*PCP_BCST_GROUP_ROOT|*/PCP_BCST_GROUP_TRACKERS|PCP_BCST_GROUP_RELAYS)) + { + servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_COUT); + } - if (bcs.group & (PCP_BCST_GROUP_RELAYS)) - { - servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_RELAY); - } + if (bcs.group & (PCP_BCST_GROUP_RELAYS|PCP_BCST_GROUP_TRACKERS)) + { + servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_CIN); + } + if (bcs.group & (PCP_BCST_GROUP_RELAYS)) + { + servMgr->broadcastPacket(pack,bcs.chanID,remoteID,destID,Servent::T_RELAY); + } -// LOG_DEBUG("ttl=%d",ttl); - } else { -// LOG_DEBUG("ttl=%d",ttl); - } + // LOG_DEBUG("ttl=%d",ttl); + + } else { + // LOG_DEBUG("ttl=%d",ttl); + } return r; }