mirror of
https://github.com/GOSTSec/ccminer
synced 2025-01-10 23:08:02 +00:00
stratum: add more checks on request id
This commit is contained in:
parent
7d88e5cca1
commit
2ea9da1415
@ -1913,7 +1913,7 @@ static void parse_config(void)
|
||||
if (options[i].has_arg && json_is_string(val)) {
|
||||
char *s = strdup(json_string_value(val));
|
||||
if (!s)
|
||||
break;
|
||||
continue;
|
||||
parse_arg(options[i].val, s);
|
||||
free(s);
|
||||
}
|
||||
|
31
util.cpp
31
util.cpp
@ -894,7 +894,6 @@ static const char *get_stratum_session_id(json_t *val)
|
||||
for (i = 0; i < n; i++) {
|
||||
const char *notify;
|
||||
json_t *arr = json_array_get(arr_val, i);
|
||||
|
||||
if (!arr || !json_is_array(arr))
|
||||
break;
|
||||
notify = json_string_value(json_array_get(arr, 0));
|
||||
@ -985,6 +984,10 @@ start:
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (json_integer_value(json_object_get(val, "id")) != 1) {
|
||||
applog(LOG_WARNING, "Stratum subscribe answer id is not correct!");
|
||||
}
|
||||
|
||||
res_val = json_object_get(val, "result");
|
||||
err_val = json_object_get(val, "error");
|
||||
|
||||
@ -1001,7 +1004,14 @@ start:
|
||||
goto out;
|
||||
}
|
||||
|
||||
// session id
|
||||
// sid is param 1, extranonce params are 2 and 3
|
||||
if (!stratum_parse_extranonce(sctx, res_val, 1)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = true;
|
||||
|
||||
// session id (optional)
|
||||
sid = get_stratum_session_id(res_val);
|
||||
if (opt_debug && sid)
|
||||
applog(LOG_DEBUG, "Stratum session id: %s", sid);
|
||||
@ -1013,13 +1023,6 @@ start:
|
||||
sctx->next_diff = 1.0;
|
||||
pthread_mutex_unlock(&sctx->work_lock);
|
||||
|
||||
// sid is param 1, extranonce params are 2 and 3
|
||||
if (!stratum_parse_extranonce(sctx, res_val, 1)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = true;
|
||||
|
||||
out:
|
||||
free(s);
|
||||
if (val)
|
||||
@ -1066,7 +1069,7 @@ bool stratum_authorize(struct stratum_ctx *sctx, const char *user, const char *p
|
||||
}
|
||||
|
||||
if (json_integer_value(json_object_get(val, "id")) != 2) {
|
||||
applog(LOG_WARNING, "Stratum answer id is not correct!");
|
||||
applog(LOG_WARNING, "Stratum authorize answer id is not correct!");
|
||||
}
|
||||
res_val = json_object_get(val, "result");
|
||||
err_val = json_object_get(val, "error");
|
||||
@ -1085,7 +1088,8 @@ bool stratum_authorize(struct stratum_ctx *sctx, const char *user, const char *p
|
||||
if (!stratum_send_line(sctx, s))
|
||||
goto out;
|
||||
|
||||
if (!socket_full(sctx->sock, 3)) {
|
||||
// reduced timeout to handle pools ignoring this method without answer (like xpool.ca)
|
||||
if (!socket_full(sctx->sock, 1)) {
|
||||
if (opt_debug)
|
||||
applog(LOG_DEBUG, "stratum extranonce subscribe timed out");
|
||||
goto out;
|
||||
@ -1099,11 +1103,12 @@ bool stratum_authorize(struct stratum_ctx *sctx, const char *user, const char *p
|
||||
applog(LOG_WARNING, "JSON decode failed(%d): %s", err.line, err.text);
|
||||
} else {
|
||||
if (json_integer_value(json_object_get(extra, "id")) != 3) {
|
||||
applog(LOG_WARNING, "Stratum answer id is not correct!");
|
||||
}
|
||||
applog(LOG_WARNING, "Stratum extranonce answer id is not correct!");
|
||||
} else {
|
||||
res_val = json_object_get(extra, "result");
|
||||
if (opt_debug && (!res_val || json_is_false(res_val)))
|
||||
applog(LOG_DEBUG, "extranonce subscribe not supported");
|
||||
}
|
||||
json_decref(extra);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user