2014-04-08 12:50:29 -07:00
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
2014-04-08 13:26:45 -07:00
|
|
|
Contributed by Alex Petrov aka SysMan at sysman.net
|
2014-04-11 02:32:33 -07:00
|
|
|
Updated by Alejandro Reyero - TodoJuegos.com
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-08 13:26:45 -07:00
|
|
|
Part of NOMP project
|
|
|
|
Simple lightweight & fast - a more efficient block notify script in pure C.
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-08 13:26:45 -07:00
|
|
|
(may also work as coin switch)
|
|
|
|
|
|
|
|
Platforms : Linux,BSD,Solaris (mostly OS independent)
|
|
|
|
|
|
|
|
Build with:
|
|
|
|
gcc blocknotify.c -o blocknotify
|
|
|
|
|
|
|
|
|
|
|
|
Usage in daemon coin.conf
|
2014-04-11 05:23:11 -07:00
|
|
|
blocknotify="/bin/blocknotify 127.0.0.1:8117 mySuperSecurePassword dogecoin %s"
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
*NOTE* If you use "localhost" as hostname you may get a "13" error (socket / connect / send may consider "localhost" as a broadcast address)
|
2014-04-08 12:50:29 -07:00
|
|
|
|
|
|
|
// {"password":"notepas","coin":"Xcoin","hash":"d2191a8b644c9cd903439edf1d89ee060e196b3e116e0d48a3f11e5e3987a03b"}
|
|
|
|
// simplest connect + send json string to server
|
|
|
|
|
|
|
|
# $Id: blocknotify.c,v 0.1 2014/04/07 22:38:09 sysman Exp $
|
|
|
|
*/
|
2014-04-08 13:26:45 -07:00
|
|
|
|
|
|
|
|
2014-04-08 12:50:29 -07:00
|
|
|
int main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
int sockfd,n;
|
|
|
|
struct sockaddr_in servaddr,cliaddr;
|
|
|
|
char sendline[1000];
|
|
|
|
char recvline[1000];
|
|
|
|
char host[200];
|
|
|
|
char *p,*arg,*errptr;
|
|
|
|
int port;
|
|
|
|
|
|
|
|
if (argc < 4)
|
|
|
|
{
|
|
|
|
// print help
|
|
|
|
printf("NOMP pool block notify\n usage: <host:port> <password> <coin> <block>\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
strncpy(host,argv[1],(sizeof(host)-1));
|
|
|
|
p=host;
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
if ( (arg=strchr(p,':')) )
|
|
|
|
{
|
|
|
|
*arg='\0';
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
errno=0; // reset errno
|
|
|
|
port=strtol(++arg,&errptr,10);
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
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);
|
|
|
|
}
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
// 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]);
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
// printf("sendline:[%s]",sendline);
|
2014-04-08 12:50:29 -07:00
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
sockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
|
2014-04-08 12:50:29 -07:00
|
|
|
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));
|
|
|
|
|
2014-04-11 02:32:33 -07:00
|
|
|
int result = send(sockfd,sendline,strlen(sendline),0);
|
|
|
|
close(sockfd);
|
|
|
|
|
|
|
|
if(result == -1) {
|
|
|
|
printf("Error sending: %i\n",errno);
|
|
|
|
exit(-1);
|
|
|
|
}
|
|
|
|
exit(0);
|
2014-04-08 12:50:29 -07:00
|
|
|
}
|