more parsing.
This commit is contained in:
parent
f5142046a9
commit
836a2357d6
@ -154,23 +154,21 @@ Parser.prototype.parsePayload = function parsePayload(cmd, p) {
|
|||||||
|
|
||||||
Parser.parsePing = function parsePing(p) {
|
Parser.parsePing = function parsePing(p) {
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
if (p.left() < 8)
|
|
||||||
throw new Error('pong packet is too small');
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
nonce: p.readU64()
|
nonce: p.readU64(),
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
Parser.parsePong = function parsePong(p) {
|
Parser.parsePong = function parsePong(p) {
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
if (p.left() < 8)
|
|
||||||
throw new Error('ping packet is too small');
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
nonce: p.readU64()
|
nonce: p.readU64(),
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -178,29 +176,17 @@ Parser.parseVersion = function parseVersion(p) {
|
|||||||
var version, services, ts, recv, from, nonce, agent, height, relay;
|
var version, services, ts, recv, from, nonce, agent, height, relay;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
version = p.readU32();
|
version = p.read32();
|
||||||
services = p.readU64();
|
services = p.readU64();
|
||||||
|
|
||||||
// Timestamp
|
|
||||||
ts = p.read64();
|
ts = p.read64();
|
||||||
|
|
||||||
// Our address (recv)
|
|
||||||
recv = Parser.parseAddress(p, false);
|
recv = Parser.parseAddress(p, false);
|
||||||
|
|
||||||
// Their Address (from)
|
|
||||||
from = Parser.parseAddress(p, false);
|
from = Parser.parseAddress(p, false);
|
||||||
|
|
||||||
// Nonce, very dramatic
|
|
||||||
nonce = p.readU64();
|
nonce = p.readU64();
|
||||||
|
|
||||||
// User agent length
|
|
||||||
agent = p.readVarString('ascii');
|
agent = p.readVarString('ascii');
|
||||||
|
height = p.read32();
|
||||||
|
|
||||||
// Start height
|
|
||||||
height = p.readU32();
|
|
||||||
|
|
||||||
// Relay
|
|
||||||
try {
|
try {
|
||||||
relay = p.readU8() === 1;
|
relay = p.readU8() === 1;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -216,9 +202,13 @@ Parser.parseVersion = function parseVersion(p) {
|
|||||||
try {
|
try {
|
||||||
services = services.toNumber();
|
services = services.toNumber();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
services = 1;
|
services = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(version >= 0, 'Version is negative.');
|
||||||
|
assert(ts >= 0, 'Timestamp is negative.');
|
||||||
|
assert(height >= 0, 'Height is negative.');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
version: version,
|
version: version,
|
||||||
services: services,
|
services: services,
|
||||||
@ -232,7 +222,8 @@ Parser.parseVersion = function parseVersion(p) {
|
|||||||
nonce: nonce,
|
nonce: nonce,
|
||||||
agent: agent,
|
agent: agent,
|
||||||
height: height,
|
height: height,
|
||||||
relay: relay
|
relay: relay,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -241,6 +232,7 @@ Parser.parseInvList = function parseInvList(p) {
|
|||||||
var i, count;
|
var i, count;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
count = p.readUIntv();
|
count = p.readUIntv();
|
||||||
|
|
||||||
@ -251,6 +243,8 @@ Parser.parseInvList = function parseInvList(p) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
items._size = p.end();
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -297,6 +291,7 @@ Parser.parseHeaders = function parseHeaders(p) {
|
|||||||
var i, count;
|
var i, count;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
count = p.readUIntv();
|
count = p.readUIntv();
|
||||||
|
|
||||||
@ -312,6 +307,8 @@ Parser.parseHeaders = function parseHeaders(p) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
headers._size = p.end();
|
||||||
|
|
||||||
return headers;
|
return headers;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -346,8 +343,8 @@ Parser.parseBlock = function parseBlock(p) {
|
|||||||
bits: bits,
|
bits: bits,
|
||||||
nonce: nonce,
|
nonce: nonce,
|
||||||
txs: txs,
|
txs: txs,
|
||||||
_size: p.end(),
|
_witnessSize: witnessSize,
|
||||||
_witnessSize: witnessSize
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -413,13 +410,13 @@ Parser.parseInput = function parseInput(p) {
|
|||||||
sequence = p.readU32();
|
sequence = p.readU32();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_size: p.end(),
|
|
||||||
prevout: {
|
prevout: {
|
||||||
hash: hash,
|
hash: hash,
|
||||||
index: index
|
index: index
|
||||||
},
|
},
|
||||||
script: script,
|
script: script,
|
||||||
sequence: sequence
|
sequence: sequence,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -433,9 +430,9 @@ Parser.parseOutput = function parseOutput(p) {
|
|||||||
script = new bcoin.script(p.readVarBytes());
|
script = new bcoin.script(p.readVarBytes());
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_size: p.end(),
|
|
||||||
value: value,
|
value: value,
|
||||||
script: script
|
script: script,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -443,6 +440,7 @@ Parser.parseCoin = function parseCoin(p, extended) {
|
|||||||
var version, height, value, script, hash, index, spent;
|
var version, height, value, script, hash, index, spent;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
version = p.readU32();
|
version = p.readU32();
|
||||||
height = p.readU32();
|
height = p.readU32();
|
||||||
@ -471,7 +469,8 @@ Parser.parseCoin = function parseCoin(p, extended) {
|
|||||||
script: script,
|
script: script,
|
||||||
hash: hash,
|
hash: hash,
|
||||||
index: index,
|
index: index,
|
||||||
spent: spent
|
spent: spent,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -593,8 +592,8 @@ Parser.parseWitnessTX = function parseWitnessTX(p) {
|
|||||||
locktime: locktime,
|
locktime: locktime,
|
||||||
// _raw: raw,
|
// _raw: raw,
|
||||||
// _size: raw.length,
|
// _size: raw.length,
|
||||||
_size: p.end(),
|
_witnessSize: witnessSize + 2,
|
||||||
_witnessSize: witnessSize + 2
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -611,8 +610,8 @@ Parser.parseWitness = function parseWitness(p) {
|
|||||||
witness.push(p.readVarBytes());
|
witness.push(p.readVarBytes());
|
||||||
|
|
||||||
return {
|
return {
|
||||||
_size: p.end(),
|
witness: new bcoin.script.witness(witness),
|
||||||
witness: new bcoin.script.witness(witness)
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -620,6 +619,7 @@ Parser.parseReject = function parseReject(p) {
|
|||||||
var message, ccode, reason, data;
|
var message, ccode, reason, data;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
message = p.readVarString('ascii');
|
message = p.readVarString('ascii');
|
||||||
ccode = p.readU8();
|
ccode = p.readU8();
|
||||||
@ -630,7 +630,8 @@ Parser.parseReject = function parseReject(p) {
|
|||||||
message: message,
|
message: message,
|
||||||
ccode: constants.rejectByVal[ccode] || ccode,
|
ccode: constants.rejectByVal[ccode] || ccode,
|
||||||
reason: reason,
|
reason: reason,
|
||||||
data: data
|
data: data,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -638,6 +639,7 @@ Parser.parseAddress = function parseAddress(p, full) {
|
|||||||
var ts, services, ip, port;
|
var ts, services, ip, port;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
if (full) {
|
if (full) {
|
||||||
ts = p.readU32();
|
ts = p.readU32();
|
||||||
@ -666,7 +668,8 @@ Parser.parseAddress = function parseAddress(p, full) {
|
|||||||
witness: (services & constants.services.witness) !== 0,
|
witness: (services & constants.services.witness) !== 0,
|
||||||
ipv6: utils.array2ip(ip, 6),
|
ipv6: utils.array2ip(ip, 6),
|
||||||
ipv4: utils.array2ip(ip, 4),
|
ipv4: utils.array2ip(ip, 4),
|
||||||
port: port
|
port: port,
|
||||||
|
_size: p.end()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -675,12 +678,15 @@ Parser.parseAddr = function parseAddr(p) {
|
|||||||
var i, count;
|
var i, count;
|
||||||
|
|
||||||
p = new BufferReader(p);
|
p = new BufferReader(p);
|
||||||
|
p.start();
|
||||||
|
|
||||||
count = p.readUIntv();
|
count = p.readUIntv();
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
addrs.push(Parser.parseAddress(p, true));
|
addrs.push(Parser.parseAddress(p, true));
|
||||||
|
|
||||||
|
addrs._size = p.end();
|
||||||
|
|
||||||
return addrs;
|
return addrs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user