Use MSB 0 in bitfields
This commit is contained in:
parent
3078dd2365
commit
26da0b1d2f
|
@ -497,7 +497,7 @@ exports.encrypted = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Creates bitfield (LSB 0) class of the specified size.
|
// Creates bitfield (MSB 0) class of the specified size.
|
||||||
var Bitfield = function(size) {
|
var Bitfield = function(size) {
|
||||||
var bytesize = size / 8;
|
var bytesize = size / 8;
|
||||||
|
|
||||||
|
@ -530,8 +530,9 @@ var Bitfield = function(size) {
|
||||||
return bits.every(function(bit) {
|
return bits.every(function(bit) {
|
||||||
assert(bit >= 0, "Bit number is too low");
|
assert(bit >= 0, "Bit number is too low");
|
||||||
assert(bit < size, "Bit number is too high");
|
assert(bit < size, "Bit number is too high");
|
||||||
var index = bytesize - Math.floor(bit / 8) - 1;
|
var index = Math.floor(bit / 8);
|
||||||
return (buf[index] & (1 << (bit % 8))) !== 0; // jshint ignore:line
|
var shift = 7 - (bit % 8);
|
||||||
|
return (buf[index] & (1 << shift)) !== 0; // jshint ignore:line
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -543,8 +544,9 @@ var Bitfield = function(size) {
|
||||||
bits.forEach(function(bit) {
|
bits.forEach(function(bit) {
|
||||||
assert(bit >= 0, "Bit number is too low");
|
assert(bit >= 0, "Bit number is too low");
|
||||||
assert(bit < size, "Bit number is too high");
|
assert(bit < size, "Bit number is too high");
|
||||||
var index = bytesize - Math.floor(bit / 8) - 1;
|
var index = Math.floor(bit / 8);
|
||||||
buf[index] |= 1 << (bit % 8); // jshint ignore:line
|
var shift = 7 - (bit % 8);
|
||||||
|
buf[index] |= 1 << shift; // jshint ignore:line
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
@ -559,9 +561,12 @@ var Bitfield = function(size) {
|
||||||
* @static
|
* @static
|
||||||
*/
|
*/
|
||||||
// TODO(Kagami): Document methods.
|
// TODO(Kagami): Document methods.
|
||||||
|
// NOTE(Kagami): Since pubkey bitfield uses MSB 0, we use it here too.
|
||||||
|
// See <https://github.com/Bitmessage/PyBitmessage/issues/769> for
|
||||||
|
// details.
|
||||||
var ServicesBitfield = exports.ServicesBitfield = objectAssign(Bitfield(64), {
|
var ServicesBitfield = exports.ServicesBitfield = objectAssign(Bitfield(64), {
|
||||||
/** This is a normal network node. */
|
/** This is a normal network node. */
|
||||||
NODE_NETWORK: 0,
|
NODE_NETWORK: 63,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -570,19 +575,16 @@ var ServicesBitfield = exports.ServicesBitfield = objectAssign(Bitfield(64), {
|
||||||
* @namespace
|
* @namespace
|
||||||
*/
|
*/
|
||||||
// TODO(Kagami): Document methods.
|
// TODO(Kagami): Document methods.
|
||||||
// XXX(Kagami): PyBitmessage uses MSB 0 scheme for this bitfield so we
|
|
||||||
// invert the numberes. See
|
|
||||||
// <https://github.com/Bitmessage/PyBitmessage/issues/769> for details.
|
|
||||||
exports.PubkeyBitfield = objectAssign(Bitfield(32), {
|
exports.PubkeyBitfield = objectAssign(Bitfield(32), {
|
||||||
/**
|
|
||||||
* If true, the receiving node does send acknowledgements (rather than
|
|
||||||
* dropping them).
|
|
||||||
*/
|
|
||||||
DOES_ACK: 0,
|
|
||||||
/**
|
/**
|
||||||
* Receiving node expects that the RIPE hash encoded in their address
|
* Receiving node expects that the RIPE hash encoded in their address
|
||||||
* preceedes the encrypted message data of msg messages bound for
|
* preceedes the encrypted message data of msg messages bound for
|
||||||
* them.
|
* them.
|
||||||
*/
|
*/
|
||||||
INCLUDE_DESTINATION: 1,
|
INCLUDE_DESTINATION: 30,
|
||||||
|
/**
|
||||||
|
* If true, the receiving node does send acknowledgements (rather than
|
||||||
|
* dropping them).
|
||||||
|
*/
|
||||||
|
DOES_ACK: 31,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user