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)) {
|
if (options[i].has_arg && json_is_string(val)) {
|
||||||
char *s = strdup(json_string_value(val));
|
char *s = strdup(json_string_value(val));
|
||||||
if (!s)
|
if (!s)
|
||||||
break;
|
continue;
|
||||||
parse_arg(options[i].val, s);
|
parse_arg(options[i].val, s);
|
||||||
free(s);
|
free(s);
|
||||||
}
|
}
|
||||||
|
35
util.cpp
35
util.cpp
@ -894,7 +894,6 @@ static const char *get_stratum_session_id(json_t *val)
|
|||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
const char *notify;
|
const char *notify;
|
||||||
json_t *arr = json_array_get(arr_val, i);
|
json_t *arr = json_array_get(arr_val, i);
|
||||||
|
|
||||||
if (!arr || !json_is_array(arr))
|
if (!arr || !json_is_array(arr))
|
||||||
break;
|
break;
|
||||||
notify = json_string_value(json_array_get(arr, 0));
|
notify = json_string_value(json_array_get(arr, 0));
|
||||||
@ -985,6 +984,10 @@ start:
|
|||||||
goto out;
|
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");
|
res_val = json_object_get(val, "result");
|
||||||
err_val = json_object_get(val, "error");
|
err_val = json_object_get(val, "error");
|
||||||
|
|
||||||
@ -1001,7 +1004,14 @@ start:
|
|||||||
goto out;
|
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);
|
sid = get_stratum_session_id(res_val);
|
||||||
if (opt_debug && sid)
|
if (opt_debug && sid)
|
||||||
applog(LOG_DEBUG, "Stratum session id: %s", sid);
|
applog(LOG_DEBUG, "Stratum session id: %s", sid);
|
||||||
@ -1013,13 +1023,6 @@ start:
|
|||||||
sctx->next_diff = 1.0;
|
sctx->next_diff = 1.0;
|
||||||
pthread_mutex_unlock(&sctx->work_lock);
|
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:
|
out:
|
||||||
free(s);
|
free(s);
|
||||||
if (val)
|
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) {
|
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");
|
res_val = json_object_get(val, "result");
|
||||||
err_val = json_object_get(val, "error");
|
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))
|
if (!stratum_send_line(sctx, s))
|
||||||
goto out;
|
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)
|
if (opt_debug)
|
||||||
applog(LOG_DEBUG, "stratum extranonce subscribe timed out");
|
applog(LOG_DEBUG, "stratum extranonce subscribe timed out");
|
||||||
goto 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);
|
applog(LOG_WARNING, "JSON decode failed(%d): %s", err.line, err.text);
|
||||||
} else {
|
} else {
|
||||||
if (json_integer_value(json_object_get(extra, "id")) != 3) {
|
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");
|
||||||
}
|
}
|
||||||
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);
|
json_decref(extra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user