filterload.
This commit is contained in:
parent
48b3b0b506
commit
da3ce0b4a7
@ -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.
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user