|
|
|
@ -1363,38 +1363,46 @@ bool auth_stratum(struct pool *pool)
@@ -1363,38 +1363,46 @@ bool auth_stratum(struct pool *pool)
|
|
|
|
|
json_error_t err; |
|
|
|
|
bool ret = false; |
|
|
|
|
|
|
|
|
|
pool->stratum_notify = false; |
|
|
|
|
|
|
|
|
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.authorize\", \"params\": [\"%s\", \"%s\"]}", |
|
|
|
|
swork_id++, pool->rpc_user, pool->rpc_pass); |
|
|
|
|
|
|
|
|
|
if (!stratum_send(pool, s, strlen(s))) |
|
|
|
|
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) { |
|
|
|
|
sret = recv_line(pool); |
|
|
|
|
if (!sret) |
|
|
|
|
goto out; |
|
|
|
|
if (parse_method(pool, sret)) |
|
|
|
|
if (parse_method(pool, sret)) { |
|
|
|
|
free(sret); |
|
|
|
|
else |
|
|
|
|
if (pool->stratum_notify) |
|
|
|
|
break; |
|
|
|
|
} else |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val = JSON_LOADS(sret, &err); |
|
|
|
|
free(sret); |
|
|
|
|
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))) { |
|
|
|
|
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 (!pool->stratum_notify) { |
|
|
|
|
val = JSON_LOADS(sret, &err); |
|
|
|
|
free(sret); |
|
|
|
|
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))) { |
|
|
|
|
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); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
applog(LOG_WARNING, "Failed to auth stratum"); |
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|