From be37d9c0ee21f986d6db043c3630cdaf2d9b43aa Mon Sep 17 00:00:00 2001 From: Alejandro Reyero Date: Fri, 11 Apr 2014 11:32:33 +0200 Subject: [PATCH 1/4] Update blocknotify.c Changed sendto to send using TCP so we can control if the block notify produces a connection error. Added a note about "localhost" usage an possible error 13. --- scripts/blocknotify.c | 50 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/scripts/blocknotify.c b/scripts/blocknotify.c index 74c455a..c0622bd 100644 --- a/scripts/blocknotify.c +++ b/scripts/blocknotify.c @@ -9,6 +9,7 @@ /* Contributed by Alex Petrov aka SysMan at sysman.net +Updated by Alejandro Reyero - TodoJuegos.com Part of NOMP project Simple lightweight & fast - a more efficient block notify script in pure C. @@ -22,8 +23,9 @@ Build with: Usage in daemon coin.conf - blocknotify="/bin/blocknotify localhost:8117 mySuperSecurePassword dogecoin %s" + blocknotify="/bin/blocknotify 127.0.01:8117 mySuperSecurePassword dogecoin %s" +*NOTE* If you use "localhost" as hostname you may get a "13" error (socket / connect / send may consider "localhost" as a broadcast address) // {"password":"notepas","coin":"Xcoin","hash":"d2191a8b644c9cd903439edf1d89ee060e196b3e116e0d48a3f11e5e3987a03b"} // simplest connect + send json string to server @@ -49,37 +51,41 @@ int main(int argc, char **argv) exit(1); } - strncpy(host,argv[1],(sizeof(host)-1)); - p=host; + strncpy(host,argv[1],(sizeof(host)-1)); + p=host; -if ( (arg=strchr(p,':')) ) - { *arg='\0'; + if ( (arg=strchr(p,':')) ) + { + *arg='\0'; - errno=0; // reset errno - port=strtol(++arg,&errptr,10); + errno=0; // reset errno + port=strtol(++arg,&errptr,10); -if ( (errno != 0) || (errptr == arg) ) { fprintf(stderr, "port number fail [%s]\n",errptr); } -// if(strlen(arg) > (errptr-arg) ) also fail, but we ignore it for now -// printf("host %s:%d\n",host,port); -} + if ( (errno != 0) || (errptr == arg) ) { fprintf(stderr, "port number fail [%s]\n",errptr); } + // if(strlen(arg) > (errptr-arg) ) also fail, but we ignore it for now + // printf("host %s:%d\n",host,port); + } -// printf("pass: %s coin: %s block:[%s]\n",argv[2],argv[3],argv[4]); -snprintf(sendline,sizeof(sendline)-1, - "{\"password\":\"%s\",\"coin\":\"%s\",\"hash\":\"%s\"}\n", - argv[2], argv[3], argv[4]); + // printf("pass: %s coin: %s block:[%s]\n",argv[2],argv[3],argv[4]); + snprintf(sendline,sizeof(sendline)-1, + "{\"password\":\"%s\",\"coin\":\"%s\",\"hash\":\"%s\"}\n", + argv[2], argv[3], argv[4]); -// printf("sendline:[%s]",sendline); - - sockfd=socket(AF_INET,SOCK_STREAM,0); + // printf("sendline:[%s]",sendline); + sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=inet_addr(host); servaddr.sin_port=htons(port); - connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); - sendto(sockfd,sendline,strlen(sendline),0, - (struct sockaddr *)&servaddr,sizeof(servaddr)); -exit(0); + int result = send(sockfd,sendline,strlen(sendline),0); + close(sockfd); + + if(result == -1) { + printf("Error sending: %i\n",errno); + exit(-1); + } + exit(0); } From 7fdfea8abff482b809848b41314370faed0b1884 Mon Sep 17 00:00:00 2001 From: Alejandro Reyero Date: Fri, 11 Apr 2014 14:23:11 +0200 Subject: [PATCH 2/4] Update blocknotify.c --- scripts/blocknotify.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/blocknotify.c b/scripts/blocknotify.c index c0622bd..78c9db7 100644 --- a/scripts/blocknotify.c +++ b/scripts/blocknotify.c @@ -23,7 +23,7 @@ Build with: Usage in daemon coin.conf - blocknotify="/bin/blocknotify 127.0.01:8117 mySuperSecurePassword dogecoin %s" + blocknotify="/bin/blocknotify 127.0.0.1:8117 mySuperSecurePassword dogecoin %s" *NOTE* If you use "localhost" as hostname you may get a "13" error (socket / connect / send may consider "localhost" as a broadcast address) From b9891c86240023b332570984fb0c4bb598a5c1dc Mon Sep 17 00:00:00 2001 From: Jerry Brady Date: Fri, 11 Apr 2014 13:24:12 +0000 Subject: [PATCH 3/4] fix proxy state loading bug when key not present --- libs/poolWorker.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libs/poolWorker.js b/libs/poolWorker.js index 4855507..3dbfe86 100644 --- a/libs/poolWorker.js +++ b/libs/poolWorker.js @@ -210,11 +210,15 @@ module.exports = function(logger){ redisClient.on('ready', function(){ redisClient.hgetall("proxyState", function(error, obj) { if (error) { + proxyState = {}; logger.debug(logSystem, logComponent, logSubCat, 'No last proxy state found in redis'); } else { - proxyState = obj; - logger.debug(logSystem, logComponent, logSubCat, 'Last proxy state loaded from redis'); + if (obj != null) + { + proxyState = obj; + logger.debug(logSystem, logComponent, logSubCat, 'Last proxy state loaded from redis'); + } } // From 5f6b09a877f689bea16bbdea2972da36619453ab Mon Sep 17 00:00:00 2001 From: Jerry Brady Date: Fri, 11 Apr 2014 13:26:42 +0000 Subject: [PATCH 4/4] fix proxy state loading bug when key not present --- libs/poolWorker.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/libs/poolWorker.js b/libs/poolWorker.js index 3dbfe86..71da314 100644 --- a/libs/poolWorker.js +++ b/libs/poolWorker.js @@ -209,16 +209,12 @@ module.exports = function(logger){ var redisClient = redis.createClient(6379, "localhost") redisClient.on('ready', function(){ redisClient.hgetall("proxyState", function(error, obj) { - if (error) { - proxyState = {}; + if (error || obj == null) { logger.debug(logSystem, logComponent, logSubCat, 'No last proxy state found in redis'); } else { - if (obj != null) - { - proxyState = obj; - logger.debug(logSystem, logComponent, logSubCat, 'Last proxy state loaded from redis'); - } + proxyState = obj; + logger.debug(logSystem, logComponent, logSubCat, 'Last proxy state loaded from redis'); } //