mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-13 15:39:05 +01:00
Remove half-implemented publish/subscribe system
This commit is contained in:
106
src/net.cpp
106
src/net.cpp
@@ -289,105 +289,6 @@ void AddressCurrentlyConnected(const CService& addr)
|
||||
|
||||
|
||||
|
||||
void AbandonRequests(void (*fn)(void*, CDataStream&), void* param1)
|
||||
{
|
||||
// If the dialog might get closed before the reply comes back,
|
||||
// call this in the destructor so it doesn't get called after it's deleted.
|
||||
CRITICAL_BLOCK(cs_vNodes)
|
||||
{
|
||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||
{
|
||||
CRITICAL_BLOCK(pnode->cs_mapRequests)
|
||||
{
|
||||
for (map<uint256, CRequestTracker>::iterator mi = pnode->mapRequests.begin(); mi != pnode->mapRequests.end();)
|
||||
{
|
||||
CRequestTracker& tracker = (*mi).second;
|
||||
if (tracker.fn == fn && tracker.param1 == param1)
|
||||
pnode->mapRequests.erase(mi++);
|
||||
else
|
||||
mi++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Subscription methods for the broadcast and subscription system.
|
||||
// Channel numbers are message numbers, i.e. MSG_TABLE and MSG_PRODUCT.
|
||||
//
|
||||
// The subscription system uses a meet-in-the-middle strategy.
|
||||
// With 100,000 nodes, if senders broadcast to 1000 random nodes and receivers
|
||||
// subscribe to 1000 random nodes, 99.995% (1 - 0.99^1000) of messages will get through.
|
||||
//
|
||||
|
||||
bool AnySubscribed(unsigned int nChannel)
|
||||
{
|
||||
if (pnodeLocalHost->IsSubscribed(nChannel))
|
||||
return true;
|
||||
CRITICAL_BLOCK(cs_vNodes)
|
||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||
if (pnode->IsSubscribed(nChannel))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CNode::IsSubscribed(unsigned int nChannel)
|
||||
{
|
||||
if (nChannel >= vfSubscribe.size())
|
||||
return false;
|
||||
return vfSubscribe[nChannel];
|
||||
}
|
||||
|
||||
void CNode::Subscribe(unsigned int nChannel, unsigned int nHops)
|
||||
{
|
||||
if (nChannel >= vfSubscribe.size())
|
||||
return;
|
||||
|
||||
if (!AnySubscribed(nChannel))
|
||||
{
|
||||
// Relay subscribe
|
||||
CRITICAL_BLOCK(cs_vNodes)
|
||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||
if (pnode != this)
|
||||
pnode->PushMessage("subscribe", nChannel, nHops);
|
||||
}
|
||||
|
||||
vfSubscribe[nChannel] = true;
|
||||
}
|
||||
|
||||
void CNode::CancelSubscribe(unsigned int nChannel)
|
||||
{
|
||||
if (nChannel >= vfSubscribe.size())
|
||||
return;
|
||||
|
||||
// Prevent from relaying cancel if wasn't subscribed
|
||||
if (!vfSubscribe[nChannel])
|
||||
return;
|
||||
vfSubscribe[nChannel] = false;
|
||||
|
||||
if (!AnySubscribed(nChannel))
|
||||
{
|
||||
// Relay subscription cancel
|
||||
CRITICAL_BLOCK(cs_vNodes)
|
||||
BOOST_FOREACH(CNode* pnode, vNodes)
|
||||
if (pnode != this)
|
||||
pnode->PushMessage("sub-cancel", nChannel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
CNode* FindNode(const CNetAddr& ip)
|
||||
@@ -486,13 +387,6 @@ void CNode::CloseSocketDisconnect()
|
||||
|
||||
void CNode::Cleanup()
|
||||
{
|
||||
// All of a nodes broadcasts and subscriptions are automatically torn down
|
||||
// when it goes down, so a node has to stay up to keep its broadcast going.
|
||||
|
||||
// Cancel subscriptions
|
||||
for (unsigned int nChannel = 0; nChannel < vfSubscribe.size(); nChannel++)
|
||||
if (vfSubscribe[nChannel])
|
||||
CancelSubscribe(nChannel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user