mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-14 16:58:05 +00:00
api.c poolpriority changes
This commit is contained in:
parent
fe23dfd3d4
commit
854a80ff03
@ -321,7 +321,14 @@ miner.php - an example web page to access the API
|
||||
Feature Changelog for external applications using the API:
|
||||
|
||||
|
||||
API V1.14
|
||||
API V1.15
|
||||
|
||||
Added API commands:
|
||||
'poolpriority'
|
||||
|
||||
----------
|
||||
|
||||
API V1.14 (cgminer v2.5.0)
|
||||
|
||||
Modified API commands:
|
||||
'stats' - more icarus timing stats added
|
||||
|
74
api.c
74
api.c
@ -166,7 +166,7 @@ static const char SEPARATOR = '|';
|
||||
#define SEPSTR "|"
|
||||
static const char GPUSEP = ',';
|
||||
|
||||
static const char *APIVERSION = "1.14";
|
||||
static const char *APIVERSION = "1.15";
|
||||
static const char *DEAD = "Dead";
|
||||
static const char *SICK = "Sick";
|
||||
static const char *NOSTART = "NoStart";
|
||||
@ -339,7 +339,6 @@ static const char *JSON_PARAMETER = "parameter";
|
||||
#define MSG_ACCDENY 45
|
||||
#define MSG_ACCOK 46
|
||||
#define MSG_ENAPOOL 47
|
||||
#define MSG_POOLPRIO 73
|
||||
#define MSG_DISPOOL 48
|
||||
#define MSG_ALRENAP 49
|
||||
#define MSG_ALRDISP 50
|
||||
@ -373,6 +372,8 @@ static const char *JSON_PARAMETER = "parameter";
|
||||
#define MSG_MINESTATS 70
|
||||
#define MSG_MISCHK 71
|
||||
#define MSG_CHECK 72
|
||||
#define MSG_POOLPRIO 73
|
||||
#define MSG_DUPPID 74
|
||||
|
||||
enum code_severity {
|
||||
SEVERITY_ERR,
|
||||
@ -386,6 +387,7 @@ enum code_parameters {
|
||||
PARAM_GPU,
|
||||
PARAM_PGA,
|
||||
PARAM_CPU,
|
||||
PARAM_PID,
|
||||
PARAM_GPUMAX,
|
||||
PARAM_PGAMAX,
|
||||
PARAM_CPUMAX,
|
||||
@ -503,6 +505,7 @@ struct CODES {
|
||||
{ SEVERITY_SUCC, MSG_ACCOK, PARAM_NONE, "Privileged access OK" },
|
||||
{ SEVERITY_SUCC, MSG_ENAPOOL, PARAM_POOL, "Enabling pool %d:'%s'" },
|
||||
{ SEVERITY_SUCC, MSG_POOLPRIO,PARAM_NONE, "Changed pool priorities" },
|
||||
{ SEVERITY_ERR, MSG_DUPPID, PARAM_PID, "Duplicate pool specified %d" },
|
||||
{ SEVERITY_SUCC, MSG_DISPOOL, PARAM_POOL, "Disabling pool %d:'%s'" },
|
||||
{ SEVERITY_INFO, MSG_ALRENAP, PARAM_POOL, "Pool %d:'%s' already enabled" },
|
||||
{ SEVERITY_INFO, MSG_ALRDISP, PARAM_POOL, "Pool %d:'%s' already disabled" },
|
||||
@ -1064,6 +1067,7 @@ static char *message(int messageid, int paramid, char *param2, bool isjson)
|
||||
case PARAM_GPU:
|
||||
case PARAM_PGA:
|
||||
case PARAM_CPU:
|
||||
case PARAM_PID:
|
||||
sprintf(buf, codes[i].description, paramid);
|
||||
break;
|
||||
case PARAM_POOL:
|
||||
@ -2132,46 +2136,62 @@ static void enablepool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __
|
||||
|
||||
static void poolpriority(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
|
||||
{
|
||||
SETUP_STRTOK_TS;
|
||||
int total_pools_ = total_pools; // Keep a local copy, to be more threadsafe
|
||||
char *a;
|
||||
int i, prio = 0, e = -1;
|
||||
char *ptr, *next;
|
||||
int i, pr, prio = 0;
|
||||
|
||||
if (total_pools_ == 0) {
|
||||
// TODO: all cgminer code needs a mutex added everywhere for change
|
||||
// access to total_pools and also parts of the pools[] array,
|
||||
// just copying total_pools here wont solve that
|
||||
|
||||
if (total_pools == 0) {
|
||||
strcpy(io_buffer, message(MSG_NOPOOL, 0, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
bool pools_changed[total_pools_];
|
||||
for (i = 0; i < total_pools_; ++i)
|
||||
if (param == NULL || *param == '\0') {
|
||||
strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
bool pools_changed[total_pools];
|
||||
for (i = 0; i < total_pools; ++i)
|
||||
pools_changed[i] = false;
|
||||
|
||||
a = strtok_ts(param, ",");
|
||||
do {
|
||||
i = strtol(a, &a, 10);
|
||||
if (unlikely(*a > 0x20 || i < 0 || i >= total_pools)) {
|
||||
e = (*a > 0x20) ? -2 : i;
|
||||
continue;
|
||||
next = param;
|
||||
while (next && *next) {
|
||||
ptr = next;
|
||||
next = strchr(ptr, ',');
|
||||
if (next)
|
||||
*(next++) = '\0';
|
||||
|
||||
i = atoi(ptr);
|
||||
if (i < 0 || i >= total_pools) {
|
||||
strcpy(io_buffer, message(MSG_INVPID, i, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
if (pools_changed[i]) {
|
||||
strcpy(io_buffer, message(MSG_DUPPID, i, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
pools[i]->prio = prio++;
|
||||
pools_changed[i] = true;
|
||||
} while ( (a = strtok_ts(NULL, ",")) );
|
||||
}
|
||||
|
||||
for (i = 0; i < total_pools_; ++i)
|
||||
if (!pools_changed[i])
|
||||
pools[i]->prio = prio++;
|
||||
// In priority order, cycle through the unchanged pools and append them
|
||||
for (pr = 0; pr < total_pools; pr++)
|
||||
for (i = 0; i < total_pools; i++) {
|
||||
if (!pools_changed[i] && pools[i]->prio == pr) {
|
||||
pools[i]->prio = prio++;
|
||||
pools_changed[i] = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (current_pool()->prio)
|
||||
switch_pools(NULL);
|
||||
|
||||
if (e != -1) {
|
||||
if (e == -2)
|
||||
strcpy(io_buffer, message(MSG_MISPID, 0, NULL, isjson));
|
||||
else
|
||||
strcpy(io_buffer, message(MSG_INVPID, e, NULL, isjson));
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy(io_buffer, message(MSG_POOLPRIO, 0, NULL, isjson));
|
||||
}
|
||||
|
||||
|
11
compat.h
11
compat.h
@ -9,10 +9,6 @@
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
// NOTE: Windows strtok uses a thread-local static buffer, so this is safe
|
||||
#define SETUP_STRTOK_TS /*nothing needed*/
|
||||
#define strtok_ts strtok
|
||||
|
||||
#include "miner.h" // for timersub
|
||||
|
||||
static inline int nanosleep(const struct timespec *req, struct timespec *rem)
|
||||
@ -76,13 +72,8 @@ typedef long suseconds_t;
|
||||
#endif
|
||||
|
||||
#define PTH(thr) ((thr)->pth.p)
|
||||
#else /* ! WIN32 */
|
||||
|
||||
#else
|
||||
#define PTH(thr) ((thr)->pth)
|
||||
|
||||
#define SETUP_STRTOK_TS char*_strtok_ts_saveptr
|
||||
#define strtok_ts(str, delim) strtok_r(str, delim, &_strtok_ts_saveptr)
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#endif /* __COMPAT_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user