get handlers compiling.

This commit is contained in:
Christopher Jeffrey 2014-10-22 16:25:10 -07:00
parent 7c454e8481
commit 44951223d7
1 changed files with 50 additions and 38 deletions

View File

@ -3397,16 +3397,17 @@ NAN_METHOD(HookPackets) {
o->Set(NanNew<String>("name"), NanNew<String>(cur->strCommand)); o->Set(NanNew<String>("name"), NanNew<String>(cur->strCommand));
o->Set(NanNew<String>("received"), NanNew<Number>((int64_t)cur->nTimeReceived)); o->Set(NanNew<String>("received"), NanNew<Number>((int64_t)cur->nTimeReceived));
o->Set(NanNew<String>("peerId"), NanNew<Number>(pfrom->id)); o->Set(NanNew<String>("peerId"), NanNew<Number>(cur->pfrom->id));
//o->Set(NanNew<String>("peerId"), NanNew<Number>(pfrom->GetId())); //o->Set(NanNew<String>("peerId"), NanNew<Number>(cur->pfrom->GetId()));
o->Set(NanNew<String>("versionMessage"), NanNew<String>(pfrom->cleanSubVer.c_str())); o->Set(NanNew<String>("versionMessage"), NanNew<String>(cur->pfrom->cleanSubVer.c_str()));
if (strCommand == "version") { if (strCommand == "version") {
#if 0 #if 0
// Each connection can only send one version message // Each connection can only send one version message
if (cur->pfrom->nVersion != 0) { if (cur->pfrom->nVersion != 0) {
// reject // reject
return false; // return false;
NanReturnValue(obj);
} }
bool fRelayTxes = false; bool fRelayTxes = false;
@ -3424,7 +3425,8 @@ NAN_METHOD(HookPackets) {
if (cur->pfrom->nVersion < MIN_PEER_PROTO_VERSION) { if (cur->pfrom->nVersion < MIN_PEER_PROTO_VERSION) {
// disconnect from peers older than this proto version // disconnect from peers older than this proto version
// reject // reject
return false; // return false;
NanReturnValue(obj);
} }
if (nVersion == 10300) { if (nVersion == 10300) {
@ -3448,33 +3450,37 @@ NAN_METHOD(HookPackets) {
// Disconnect if we connected to ourself // Disconnect if we connected to ourself
if (nNonce == nLocalHostNonce && nNonce > 1) { if (nNonce == nLocalHostNonce && nNonce > 1) {
return true; // return true;
NanReturnValue(obj);
} }
o->Set(NanNew<String>("receiveVersion"), NanNew<Number>(cleanSubVer)); o->Set(NanNew<String>("receiveVersion"), NanNew<Number>(cleanSubVer));
o->Set(NanNew<String>("version"), NanNew<Number>(nVersion)); o->Set(NanNew<String>("version"), NanNew<Number>(nVersion));
o->Set(NanNew<String>("height"), NanNew<Number>(nStartingHeight)); o->Set(NanNew<String>("height"), NanNew<Number>(nStartingHeight));
o->Set(NanNew<String>("us"), NanNew<String>(addrMe.ToString())); o->Set(NanNew<String>("us"), NanNew<String>(addrMe.ToString()));
o->Set(NanNew<String>("address"), NanNew<String>(pfrom->addr.ToString())); o->Set(NanNew<String>("address"), NanNew<String>(cur->pfrom->addr.ToString()));
o->Set(NanNew<String>("relay"), NanNew<Boolean>(fRelayTxes)); o->Set(NanNew<String>("relay"), NanNew<Boolean>(fRelayTxes));
#endif #endif
} else if (cur->pfrom->nVersion == 0) { } else if (cur->pfrom->nVersion == 0) {
// Must have a version message before anything else // Must have a version message before anything else
return false; // return false;
NanReturnValue(obj);
} else if (strCommand == "verack") { } else if (strCommand == "verack") {
o->Set(NanNew<String>("receiveVersion"), NanNew<Number>(min(pfrom->nVersion, PROTOCOL_VERSION))); o->Set(NanNew<String>("receiveVersion"), NanNew<Number>(min(cur->pfrom->nVersion, PROTOCOL_VERSION)));
} else if (strCommand == "addr") { } else if (strCommand == "addr") {
vector<CAddress> vAddr; vector<CAddress> vAddr;
cur->vRecv >> vAddr; *cur->vRecv >> vAddr;
// Don't want addr from older versions unless seeding // Don't want addr from older versions unless seeding
if (cur->pfrom->nVersion < CADDR_TIME_VERSION && addrman.size() > 1000) { if (cur->pfrom->nVersion < CADDR_TIME_VERSION && addrman.size() > 1000) {
return true; // return true;
NanReturnValue(obj);
} }
// Bad address size // Bad address size
if (vAddr.size() > 1000) { if (vAddr.size() > 1000) {
return false; // ? // return false; // ?
NanReturnValue(obj);
} }
Local<Array> array = NanNew<Array>(); Local<Array> array = NanNew<Array>();
@ -3511,13 +3517,15 @@ NAN_METHOD(HookPackets) {
} }
o->Set(NanNew<String>("addresses"), array); o->Set(NanNew<String>("addresses"), array);
#if 0
} else if (strCommand == "inv") { } else if (strCommand == "inv") {
vector<CInv> vInv; vector<CInv> vInv;
cur->vRecv >> vInv; *cur->vRecv >> vInv;
// Bad size // Bad size
if (vInv.size() > MAX_INV_SZ) { if (vInv.size() > MAX_INV_SZ) {
return false; // return false;
NanReturnValue(obj);
} }
LOCK(cs_main); LOCK(cs_main);
@ -3533,8 +3541,9 @@ NAN_METHOD(HookPackets) {
bool fAlreadyHave = AlreadyHave(inv); bool fAlreadyHave = AlreadyHave(inv);
// Bad size // Bad size
if (pfrom->nSendSize > (SendBufferSize() * 2)) { if (cur->pfrom->nSendSize > (SendBufferSize() * 2)) {
return false; // return false;
NanReturnValue(obj);
} }
Local<Object> item = NanNew<Object>(); Local<Object> item = NanNew<Object>();
@ -3556,11 +3565,12 @@ NAN_METHOD(HookPackets) {
o->Set(NanNew<String>("items"), array); o->Set(NanNew<String>("items"), array);
} else if (strCommand == "getdata") { } else if (strCommand == "getdata") {
vector<CInv> vInv; vector<CInv> vInv;
cur->vRecv >> vInv; *cur->vRecv >> vInv;
// Bad size // Bad size
if (vInv.size() > MAX_INV_SZ) { if (vInv.size() > MAX_INV_SZ) {
return false; // return false;
NanReturnValue(obj);
} }
o->Set(NanNew<Number>("size"), NanNew<Number>(vInv.size())); o->Set(NanNew<Number>("size"), NanNew<Number>(vInv.size()));
@ -3570,7 +3580,7 @@ NAN_METHOD(HookPackets) {
} else if (strCommand == "getblocks") { } else if (strCommand == "getblocks") {
CBlockLocator locator; CBlockLocator locator;
uint256 hashStop; uint256 hashStop;
cur->vRecv >> locator >> hashStop; *cur->vRecv >> locator >> hashStop;
LOCK(cs_main); LOCK(cs_main);
@ -3589,7 +3599,7 @@ NAN_METHOD(HookPackets) {
} else if (strCommand == "getheaders") { } else if (strCommand == "getheaders") {
CBlockLocator locator; CBlockLocator locator;
uint256 hashStop; uint256 hashStop;
cur->vRecv >> locator >> hashStop; *cur->vRecv >> locator >> hashStop;
LOCK(cs_main); LOCK(cs_main);
@ -3598,7 +3608,8 @@ NAN_METHOD(HookPackets) {
// If locator is null, return the hashStop block // If locator is null, return the hashStop block
BlockMap::iterator mi = mapBlockIndex.find(hashStop); BlockMap::iterator mi = mapBlockIndex.find(hashStop);
if (mi == mapBlockIndex.end()) { if (mi == mapBlockIndex.end()) {
return true; // return true;
NanReturnValue(obj);
} }
pindex = (*mi).second; pindex = (*mi).second;
} else { } else {
@ -3614,14 +3625,14 @@ NAN_METHOD(HookPackets) {
} else if (strCommand == "tx") { } else if (strCommand == "tx") {
// XXX Potentially check for "reject" in original code // XXX Potentially check for "reject" in original code
CTransaction tx; CTransaction tx;
cur->vRecv >> tx; *cur->vRecv >> tx;
Local<Object> jstx = NanNew<Object>(); Local<Object> jstx = NanNew<Object>();
ctx_to_jstx(tx, 0, jstx); ctx_to_jstx(tx, 0, jstx);
// ctx_to_jstx(tx, 0, o); // ctx_to_jstx(tx, 0, o);
o->Set(NanNew<String>("tx"), jstx); o->Set(NanNew<String>("tx"), jstx);
} else if (strCommand == "block") { // && !fImporting && !fReindex) { } else if (strCommand == "block") { // && !fImporting && !fReindex) {
CBlock block; CBlock block;
cur->vRecv >> block; *cur->vRecv >> block;
Local<Object> jstx = NanNew<Object>(); Local<Object> jstx = NanNew<Object>();
cblock_to_jsblock(block, 0, jsblock); cblock_to_jsblock(block, 0, jsblock);
// cblock_to_jsblock(block, 0, o); // cblock_to_jsblock(block, 0, o);
@ -3631,9 +3642,9 @@ NAN_METHOD(HookPackets) {
} else if (strCommand == "mempool") { } else if (strCommand == "mempool") {
; // not much other information in getaddr as long as we know we got a getaddr ; // not much other information in getaddr as long as we know we got a getaddr
} else if (strCommand == "ping") { } else if (strCommand == "ping") {
if (pfrom->nVersion > BIP0031_VERSION) { if (cur->pfrom->nVersion > BIP0031_VERSION) {
uint64_t nonce = 0; uint64_t nonce = 0;
cur->vRecv >> nonce; *cur->vRecv >> nonce;
char sNonce[21] = {0}; char sNonce[21] = {0};
int written = snprintf(sNonce, sizeof(sNonce), "%020lu", (uint64_t)nonce); int written = snprintf(sNonce, sizeof(sNonce), "%020lu", (uint64_t)nonce);
assert(written == 20); assert(written == 20);
@ -3647,19 +3658,19 @@ NAN_METHOD(HookPackets) {
} else if (strCommand == "pong") { } else if (strCommand == "pong") {
int64_t pingUsecEnd = nTimeReceived; int64_t pingUsecEnd = nTimeReceived;
uint64_t nonce = 0; uint64_t nonce = 0;
size_t nAvail = vRecv.in_avail(); size_t nAvail = cur->vRecv->in_avail();
bool bPingFinished = false; bool bPingFinished = false;
std::string sProblem; std::string sProblem;
if (nAvail >= sizeof(nonce)) { if (nAvail >= sizeof(nonce)) {
cur->vRecv >> nonce; *cur->vRecv >> nonce;
// Only process pong message if there is an outstanding ping (old ping without nonce should never pong) // Only process pong message if there is an outstanding ping (old ping without nonce should never pong)
if (pfrom->nPingNonceSent != 0) { if (cur->pfrom->nPingNonceSent != 0) {
if (nonce == pfrom->nPingNonceSent) { if (nonce == cur->pfrom->nPingNonceSent) {
// Matching pong received, this ping is no longer outstanding // Matching pong received, this ping is no longer outstanding
bPingFinished = true; bPingFinished = true;
int64_t pingUsecTime = pingUsecEnd - pfrom->nPingUsecStart; int64_t pingUsecTime = pingUsecEnd - cur->pfrom->nPingUsecStart;
if (pingUsecTime > 0) { if (pingUsecTime > 0) {
// Successful ping time measurement, replace previous // Successful ping time measurement, replace previous
; ;
@ -3690,7 +3701,7 @@ NAN_METHOD(HookPackets) {
assert(written == 20); assert(written == 20);
char sPingNonceSent[21] = {0}; char sPingNonceSent[21] = {0};
written = snprintf(sPingNonceSent, sizeof(sPingNonceSent), "%020lu", (uint64_t)pfrom->nPingNonceSent); written = snprintf(sPingNonceSent, sizeof(sPingNonceSent), "%020lu", (uint64_t)cur->pfrom->nPingNonceSent);
assert(written == 20); assert(written == 20);
o->Set(NanNew<String>("expected"), NanNew<String>(sPingNonceSent)); o->Set(NanNew<String>("expected"), NanNew<String>(sPingNonceSent));
@ -3708,13 +3719,13 @@ NAN_METHOD(HookPackets) {
} }
} else if (strCommand == "alert") { } else if (strCommand == "alert") {
CAlert alert; CAlert alert;
cur->vRecv >> alert; *cur->vRecv >> alert;
uint256 alertHash = alert.GetHash(); uint256 alertHash = alert.GetHash();
o->Set(NanNew<String>("hash"), NanNew<String>(alertHash.GetHex().c_str())); o->Set(NanNew<String>("hash"), NanNew<String>(alertHash.GetHex().c_str()));
if (pfrom->setKnown.count(alertHash) == 0) { if (cur->pfrom->setKnown.count(alertHash) == 0) {
if (alert.ProcessAlert()) { if (alert.ProcessAlert()) {
o->Set(NanNew<String>("message"), NanNew<String>(alert.vchMsg.c_str())); o->Set(NanNew<String>("message"), NanNew<String>(alert.vchMsg.c_str()));
o->Set(NanNew<String>("signature"), NanNew<String>(alert.vchSig.c_str())); o->Set(NanNew<String>("signature"), NanNew<String>(alert.vchSig.c_str()));
@ -3731,13 +3742,13 @@ NAN_METHOD(HookPackets) {
} }
} else if (strCommand == "filterload") { } else if (strCommand == "filterload") {
CBloomFilter filter; CBloomFilter filter;
cur->vRecv >> filter; *cur->vRecv >> filter;
if (!filter.IsWithinSizeConstraints()) { if (!filter.IsWithinSizeConstraints()) {
// There is no excuse for sending a too-large filter // There is no excuse for sending a too-large filter
o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true)); o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true));
} else { } else {
LOCK(pfrom->cs_filter); LOCK(cur->pfrom->cs_filter);
filter.UpdateEmptyFull(); filter.UpdateEmptyFull();
// std::vector<unsigned char> vData; // std::vector<unsigned char> vData;
o->Set(NanNew<String>("data"), NanNew<String>(filter.vData.GetHex().c_str())); o->Set(NanNew<String>("data"), NanNew<String>(filter.vData.GetHex().c_str()));
@ -3749,15 +3760,15 @@ NAN_METHOD(HookPackets) {
} }
} else if (strCommand == "filteradd") { } else if (strCommand == "filteradd") {
vector<unsigned char> vData; vector<unsigned char> vData;
cur->vRecv >> vData; *cur->vRecv >> vData;
// Nodes must NEVER send a data item > 520 bytes (the max size for a script data object, // Nodes must NEVER send a data item > 520 bytes (the max size for a script data object,
// and thus, the maximum size any matched object can have) in a filteradd message // and thus, the maximum size any matched object can have) in a filteradd message
if (vData.size() > MAX_SCRIPT_ELEMENT_SIZE) { if (vData.size() > MAX_SCRIPT_ELEMENT_SIZE) {
o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true)); o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true));
} else { } else {
LOCK(pfrom->cs_filter); LOCK(cur->pfrom->cs_filter);
if (pfrom->pfilter) { if (cur->pfrom->pfilter) {
o->Set(NanNew<String>("data"), NanNew<String>(vData.GetHex().c_str())); o->Set(NanNew<String>("data"), NanNew<String>(vData.GetHex().c_str()));
} else { } else {
o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true)); o->Set(NanNew<String>("misbehaving"), NanNew<Boolean>(true));
@ -3767,6 +3778,7 @@ NAN_METHOD(HookPackets) {
; // nothing much to grab from this packet ; // nothing much to grab from this packet
} else if (strCommand == "reject") { } else if (strCommand == "reject") {
; // nothing much to grab from this packet ; // nothing much to grab from this packet
#endif
} else { } else {
o->Set(NanNew<String>("unknown"), NanNew<Boolean>(true)); o->Set(NanNew<String>("unknown"), NanNew<Boolean>(true));
} }