|
|
@@ -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;
|
|
|
}
|
|
|
|