diff options
author | Matt Corallo <git@bluematt.me> | 2012-08-13 05:26:29 +0200 |
---|---|---|
committer | Matt Corallo <git@bluematt.me> | 2013-01-16 12:48:02 -0500 |
commit | 422d1225374e2d879dbd116151e0113aa7162500 (patch) | |
tree | 4d468923fe3d01f5a348d677d214e5f9b1a222e4 /src/main.cpp | |
parent | 133a546074258862348177213bbe2200208affd8 (diff) |
Add a filter field in CNode, add filterload+filteradd+filterclear
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index cb7975af0a..9a498ff273 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3332,6 +3332,51 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } + else if (strCommand == "filterload") + { + CBloomFilter filter; + vRecv >> filter; + + if (!filter.IsWithinSizeConstraints()) + // There is no excuse for sending a too-large filter + pfrom->Misbehaving(100); + else + { + LOCK(pfrom->cs_filter); + delete pfrom->pfilter; + pfrom->pfilter = new CBloomFilter(filter); + } + } + + + else if (strCommand == "filteradd") + { + vector<unsigned char> vData; + vRecv >> vData; + + // Nodes must NEVER send a data item > 520 bytes (the max size for a script data object, + // and thus, the maximum size any matched object can have) in a filteradd message + if (vData.size() > 520) + { + pfrom->Misbehaving(100); + } else { + LOCK(pfrom->cs_filter); + if (pfrom->pfilter) + pfrom->pfilter->insert(vData); + else + pfrom->Misbehaving(100); + } + } + + + else if (strCommand == "filterclear") + { + LOCK(pfrom->cs_filter); + delete pfrom->pfilter; + pfrom->pfilter = NULL; + } + + else { // Ignore unknown commands for extensibility |