filterload.

This commit is contained in:
Christopher Jeffrey 2016-06-17 20:41:45 -07:00
parent 48b3b0b506
commit da3ce0b4a7
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
4 changed files with 41 additions and 46 deletions

View File

@ -8,6 +8,8 @@
'use strict';
var constants = require('./protocol/constants');
var BufferReader = require('./reader');
var BufferWriter = require('./writer');
/*
* Constants
@ -156,6 +158,38 @@ Bloom.prototype.isWithinConstraints = function isWithinConstraints() {
return true;
};
Bloom.prototype.toRaw = function toRaw(writer) {
var p = BufferWriter(writer);
p.writeVarBytes(this.filter);
p.writeU32(this.n);
p.writeU32(this.tweak);
p.writeU8(this.update);
if (!writer)
p = p.render();
return p;
};
Bloom.fromRaw = function fromRaw(data, enc) {
var p, filter, n, tweak, update;
if (typeof data === 'string')
data = new Buffer(data, enc);
p = BufferReader(data);
filter = p.readVarBytes();
n = p.readU32();
tweak = p.readU32();
update = p.readU8();
assert(constants.filterFlagsByVal[update] != null, 'Bad filter flag.');
return new Bloom(filter, n, tweak, update);
};
/**
* Create a filter from a false positive rate.
* @param {Number} items - Expeected number of items.

View File

@ -764,19 +764,12 @@ Peer.prototype._flushMerkle = function _flushMerkle() {
};
Peer.prototype._handleFilterLoad = function _handleFilterLoad(payload) {
this.spvFilter = new bcoin.bloom(
payload.filter,
payload.n,
payload.tweak,
payload.update
);
if (!this.spvFilter.isWithinConstraints()) {
this.spvFilter = null;
if (!payload.isWithinConstraints()) {
this.setMisbehavior(100);
return;
}
this.spvFilter = payload;
this.relay = true;
};

View File

@ -541,29 +541,13 @@ Framer.pong = function pong(data) {
/**
* Create a filterload packet (without a header).
* @param {FilterLoadPacket} data
* @param {Bloom} data
* @param {BufferWriter?} writer - A buffer writer to continue writing from.
* @returns {Buffer} Returns a BufferWriter if `writer` was passed in.
*/
Framer.filterLoad = function filterLoad(data, writer) {
var p = new BufferWriter(writer);
var update = data.update;
if (typeof update === 'string')
update = constants.filterFlags[update.toUpperCase()];
assert(update != null, 'Bad filter flag.');
p.writeVarBytes(data.filter);
p.writeU32(data.n);
p.writeU32(data.tweak);
p.writeU8(update);
if (!writer)
p = p.render();
return p;
Framer.filterLoad = function filterLoad(filter, writer) {
return filter.toRaw(writer);
};
/**

View File

@ -250,27 +250,11 @@ Parser.parseGetAddr = function parseGetAddr(p) {
/**
* Parse filterload packet.
* @param {Buffer|BufferReader} p
* @returns {Object}
* @returns {Bloom}
*/
Parser.parseFilterLoad = function parseFilterLoad(p) {
var filter, n, tweak, update;
p = new BufferReader(p);
filter = p.readVarBytes();
n = p.readU32();
tweak = p.readU32();
update = p.readU8();
assert(constants.filterFlagsByVal[update] != null, 'Bad filter flag.');
return {
filter: filter,
n: n,
tweak: tweak,
update: update
};
return bcoin.bloom.fromRaw(p);
};
/**