You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.2 KiB
129 lines
3.2 KiB
/* |
|
* Copyright 2014 Con Kolivas |
|
* |
|
* This program is free software; you can redistribute it and/or modify it |
|
* under the terms of the GNU General Public License as published by the Free |
|
* Software Foundation; either version 3 of the License, or (at your option) |
|
* any later version. See COPYING for more details. |
|
*/ |
|
|
|
#ifndef CKPOOL_H |
|
#define CKPOOL_H |
|
|
|
#include "config.h" |
|
|
|
#include "libckpool.h" |
|
|
|
struct ckpool_instance; |
|
typedef struct ckpool_instance ckpool_t; |
|
|
|
struct proc_instance { |
|
ckpool_t *ckp; |
|
unixsock_t us; |
|
char *processname; |
|
char *sockname; |
|
int pid; |
|
int (*process)(proc_instance_t *); |
|
}; |
|
|
|
struct ckpool_instance { |
|
/* Filename of config file */ |
|
char *config; |
|
/* Kill old instance with same name */ |
|
bool killold; |
|
/* Logging level */ |
|
int loglevel; |
|
/* Main process name */ |
|
char *name; |
|
/* Directory where sockets are created */ |
|
char *socket_dir; |
|
/* Directory where logs are written */ |
|
char *logdir; |
|
|
|
/* Process instance data of parent/child processes */ |
|
proc_instance_t main; |
|
|
|
int proc_instances; |
|
proc_instance_t **children; |
|
|
|
proc_instance_t *generator; |
|
proc_instance_t *stratifier; |
|
proc_instance_t *connector; |
|
|
|
/* Threads of main process */ |
|
pthread_t pth_listener; |
|
pthread_t pth_watchdog; |
|
|
|
/* Bitcoind data */ |
|
char *btcdurl; |
|
char *btcdauth; |
|
char *btcdpass; |
|
int blockpoll; // How frequently in ms to poll bitcoind for block updates |
|
|
|
/* Difficulty settings */ |
|
int mindiff; // Default 1 |
|
int startdiff; // Default 42 |
|
|
|
/* Coinbase data */ |
|
char *btcaddress; // Address to mine to |
|
char *btcsig; // Optional signature to add to coinbase |
|
|
|
/* Stratum options */ |
|
int update_interval; // Seconds between stratum updates |
|
char *serverurl; |
|
}; |
|
|
|
ckpool_t *global_ckp; |
|
|
|
/* Placeholders for when we have more comprehensive logging facilities */ |
|
|
|
#define LOGMSG(_loglevel, fmt, ...) do { \ |
|
if (global_ckp->loglevel >= _loglevel && fmt) { \ |
|
struct tm *tm; \ |
|
time_t now_t; \ |
|
now_t = time(NULL); \ |
|
tm = localtime(&now_t); \ |
|
fprintf(stderr, "[%d-%02d-%02d %02d:%02d:%02d] ", \ |
|
tm->tm_year + 1900, \ |
|
tm->tm_mon + 1, \ |
|
tm->tm_mday, \ |
|
tm->tm_hour, \ |
|
tm->tm_min, \ |
|
tm->tm_sec); \ |
|
fprintf(stderr, fmt, ##__VA_ARGS__); \ |
|
if (_loglevel <= LOG_ERR) \ |
|
fprintf(stderr, " with errno %d: %s", errno, strerror(errno)); \ |
|
fprintf(stderr, "\n"); \ |
|
fflush(stderr); \ |
|
} \ |
|
} while (0) |
|
|
|
#define LOGEMERG(fmt, ...) LOGMSG(LOG_EMERG, fmt, ##__VA_ARGS__) |
|
#define LOGALERT(fmt, ...) LOGMSG(LOG_ALERT, fmt, ##__VA_ARGS__) |
|
#define LOGCRIT(fmt, ...) LOGMSG(LOG_CRIT, fmt, ##__VA_ARGS__) |
|
#define LOGERR(fmt, ...) LOGMSG(LOG_ERR, fmt, ##__VA_ARGS__) |
|
#define LOGWARNING(fmt, ...) LOGMSG(LOG_WARNING, fmt, ##__VA_ARGS__) |
|
#define LOGNOTICE(fmt, ...) LOGMSG(LOG_NOTICE, fmt, ##__VA_ARGS__) |
|
#define LOGINFO(fmt, ...) LOGMSG(LOG_INFO, fmt, ##__VA_ARGS__) |
|
#define LOGDEBUG(fmt, ...) LOGMSG(LOG_DEBUG, fmt, ##__VA_ARGS__) |
|
|
|
#define IN_FMT_FFL " in %s %s():%d" |
|
#define quitfrom(status, _file, _func, _line, fmt, ...) do { \ |
|
if (fmt) { \ |
|
fprintf(stderr, fmt IN_FMT_FFL, ##__VA_ARGS__, _file, _func, _line); \ |
|
fprintf(stderr, "\n"); \ |
|
fflush(stderr); \ |
|
} \ |
|
exit(status); \ |
|
} while (0) |
|
|
|
#define quit(status, fmt, ...) do { \ |
|
if (fmt) { \ |
|
fprintf(stderr, fmt, ##__VA_ARGS__); \ |
|
fprintf(stderr, "\n"); \ |
|
fflush(stderr); \ |
|
} \ |
|
exit(status); \ |
|
} while (0) |
|
|
|
#endif /* CKPOOL_H */
|
|
|