Browse Source

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

nfactor-troky
Con Kolivas 12 years ago
parent
commit
237f67c617
  1. 44
      util.c

44
util.c

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

Loading…
Cancel
Save