1
0
mirror of https://github.com/GOSTSec/sgminer synced 2025-01-22 20:44:19 +00:00

Cope with out of order messages coming in upon attempting to auth_stratum.

This commit is contained in:
Con Kolivas 2013-03-07 11:36:04 +11:00
parent 96ae17a466
commit 237f67c617

40
util.c
View File

@ -1363,38 +1363,46 @@ bool auth_stratum(struct pool *pool)
json_error_t err; json_error_t err;
bool ret = false; bool ret = false;
pool->stratum_notify = false;
sprintf(s, "{\"id\": %d, \"method\": \"mining.authorize\", \"params\": [\"%s\", \"%s\"]}", sprintf(s, "{\"id\": %d, \"method\": \"mining.authorize\", \"params\": [\"%s\", \"%s\"]}",
swork_id++, pool->rpc_user, pool->rpc_pass); swork_id++, pool->rpc_user, pool->rpc_pass);
if (!stratum_send(pool, s, strlen(s))) if (!stratum_send(pool, s, strlen(s)))
goto out; goto out;
/* Parse all data in the queue and anything left should be auth */ /* Parse all data in the queue and break out should we run out of data
* or we have successfully parsed a notify message. */
while (42) { while (42) {
sret = recv_line(pool); sret = recv_line(pool);
if (!sret) if (!sret)
goto out; goto out;
if (parse_method(pool, sret)) if (parse_method(pool, sret)) {
free(sret); free(sret);
else if (pool->stratum_notify)
break;
} else
break; break;
} }
val = JSON_LOADS(sret, &err); if (!pool->stratum_notify) {
free(sret); val = JSON_LOADS(sret, &err);
res_val = json_object_get(val, "result"); free(sret);
err_val = json_object_get(val, "error"); res_val = json_object_get(val, "result");
err_val = json_object_get(val, "error");
if (!res_val || json_is_false(res_val) || (err_val && !json_is_null(err_val))) { if (!res_val || json_is_false(res_val) || (err_val && !json_is_null(err_val))) {
char *ss; char *ss;
if (err_val)
ss = json_dumps(err_val, JSON_INDENT(3));
else
ss = strdup("(unknown reason)");
applog(LOG_WARNING, "JSON stratum auth failed: %s", ss);
free(ss);
if (err_val)
ss = json_dumps(err_val, JSON_INDENT(3));
else
ss = strdup("(unknown reason)");
applog(LOG_WARNING, "JSON stratum auth failed: %s", ss);
free(ss);
goto out;
}
applog(LOG_WARNING, "Failed to auth stratum");
goto out; goto out;
} }