objects.getType
This commit is contained in:
parent
70f7054bbf
commit
ceceaee721
|
@ -19,7 +19,7 @@ var message = structs.message;
|
||||||
var ServicesBitfield = structs.ServicesBitfield;
|
var ServicesBitfield = structs.ServicesBitfield;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to get command for the given encoded message.
|
* Try to get command of the given encoded message.
|
||||||
* Note that this function doesn't do any validation because it is
|
* Note that this function doesn't do any validation because it is
|
||||||
* already provided by `message.decode` routine. Normally you call this
|
* already provided by `message.decode` routine. Normally you call this
|
||||||
* for each incoming message and then call decode function of the
|
* for each incoming message and then call decode function of the
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* Working with objects.
|
* Working with objects.
|
||||||
* NOTE: All operations with objects in this module are asynchronous and
|
* NOTE: Most operations with objects in this module are asynchronous
|
||||||
* return promises.
|
* and return promises.
|
||||||
* @see {@link https://bitmessage.org/wiki/Protocol_specification#Object_types}
|
* @see {@link https://bitmessage.org/wiki/Protocol_specification#Object_types}
|
||||||
* @module bitmessage/objects
|
* @module bitmessage/objects
|
||||||
*/
|
*/
|
||||||
|
@ -25,6 +25,41 @@ var PubkeyBitfield = structs.PubkeyBitfield;
|
||||||
var message = structs.message;
|
var message = structs.message;
|
||||||
var object = structs.object;
|
var object = structs.object;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to get type of the given encoded object message.
|
||||||
|
* Note that this function doesn't do any validation because it is
|
||||||
|
* already provided by `object.decode` routine. Normally you call this
|
||||||
|
* for each incoming object message and then call decode function of the
|
||||||
|
* appropriate object handler.
|
||||||
|
* @param {Buffer} buf - Buffer that starts with encoded object message
|
||||||
|
* @return {?integer} Object's type if any
|
||||||
|
*/
|
||||||
|
exports.getType = function(buf) {
|
||||||
|
// Message header: 4 + 12 + 4 + 4
|
||||||
|
// Object header: 8 + 8 + 4
|
||||||
|
if (buf.length < 44) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return buf.readUInt32BE(40, true);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to get type of the given object message payoad.
|
||||||
|
* Note that this function doesn't do any validation because it is
|
||||||
|
* already provided by `object.decodePayload` routine. Normally you call
|
||||||
|
* this for each incoming object message and then call decode function
|
||||||
|
* of the appropriate object handler.
|
||||||
|
* @param {Buffer} buf - Buffer that starts with object message payload
|
||||||
|
* @return {?integer} Object's type if any
|
||||||
|
*/
|
||||||
|
exports.getPayloadType = function(buf) {
|
||||||
|
// Object header: 8 + 8 + 4
|
||||||
|
if (buf.length < 20) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return buf.readUInt32BE(16, true);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* `getpubkey` object. When a node has the hash of a public key (from an
|
* `getpubkey` object. When a node has the hash of a public key (from an
|
||||||
* address) but not the public key itself, it must send out a request
|
* address) but not the public key itself, it must send out a request
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
"bn.js": "^1.0.0",
|
"bn.js": "^1.0.0",
|
||||||
"bs58": "^2.0.0",
|
"bs58": "^2.0.0",
|
||||||
"buffer-equal": "~0.0.1",
|
"buffer-equal": "~0.0.1",
|
||||||
"eccrypto": "^0.9.4",
|
"eccrypto": "^0.9.5",
|
||||||
"es6-promise": "^2.0.1",
|
"es6-promise": "^2.0.1",
|
||||||
"hash.js": "^1.0.2",
|
"hash.js": "^1.0.2",
|
||||||
"nan": "^1.4.1",
|
"nan": "^1.4.1",
|
||||||
|
|
24
test.js
24
test.js
|
@ -495,6 +495,30 @@ describe("Message types", function() {
|
||||||
|
|
||||||
// TODO(Kagami): Add tests for encodePayloadAsync/decodePayloadAsync as well.
|
// TODO(Kagami): Add tests for encodePayloadAsync/decodePayloadAsync as well.
|
||||||
describe("Object types", function() {
|
describe("Object types", function() {
|
||||||
|
it("should get type of the encoded object message", function() {
|
||||||
|
var encoded = object.encode({
|
||||||
|
nonce: Buffer(8),
|
||||||
|
ttl: 100,
|
||||||
|
type: object.BROADCAST,
|
||||||
|
version: 1,
|
||||||
|
objectPayload: Buffer("test"),
|
||||||
|
});
|
||||||
|
expect(objects.getType(encoded)).to.equal(object.BROADCAST);
|
||||||
|
expect(objects.getType(Buffer(4))).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should get type of the object message payload", function() {
|
||||||
|
var encoded = object.encodePayload({
|
||||||
|
nonce: Buffer(8),
|
||||||
|
ttl: 333,
|
||||||
|
type: object.MSG,
|
||||||
|
version: 1,
|
||||||
|
objectPayload: Buffer("test"),
|
||||||
|
});
|
||||||
|
expect(objects.getPayloadType(encoded)).to.equal(object.MSG);
|
||||||
|
expect(objects.getPayloadType(Buffer(7))).to.be.undefined;
|
||||||
|
});
|
||||||
|
|
||||||
describe("getpubkey", function() {
|
describe("getpubkey", function() {
|
||||||
it("should encode and decode getpubkey v3", function() {
|
it("should encode and decode getpubkey v3", function() {
|
||||||
return getpubkey.encodeAsync({
|
return getpubkey.encodeAsync({
|
||||||
|
|
Loading…
Reference in New Issue
Block a user