Implement rudimentary mining.reconnect support for stratum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
diff --git a/util.c b/util.c
index 4264440..d5243ae 100644
--- a/util.c
+++ b/util.c
@@ -850,6 +850,7 @@ bool extract_sockaddr(struct pool *pool, char *url)
pool->server = (struct sockaddr_in *)res->ai_addr;
pool->sockaddr_url = strdup(url_address);
+
return true;
}
@@ -1096,6 +1097,27 @@ static bool parse_diff(struct pool *pool, json_t *val)
return true;
}
+static bool parse_reconnect(struct pool *pool, json_t *val)
+{
+ char *url;
+
+ url = (char *)json_string_value(json_array_get(val, 0));
+ if (!url)
+ return false;
+
+ if (!extract_sockaddr(pool, url))
+ return false;
+
+ pool->stratum_url = pool->sockaddr_url;
+
+ applog(LOG_NOTICE, "Reconnect requested from pool %d to %s", pool->pool_no, pool->stratum_url);
+
+ if (!initiate_stratum(pool) || !auth_stratum(pool))
+ return false;
+
+ return true;
+}
+
bool parse_method(struct pool *pool, char *s)
{
json_t *val = NULL, *method, *err_val, *params;
@@ -1147,6 +1169,11 @@ bool parse_method(struct pool *pool, char *s)
goto out;
}
+ if (!strncasecmp(buf, "mining.reconnect", 16) && parse_reconnect(pool, params)) {
+ ret = true;
+ goto out;
+ }
+
out:
if (val)
json_decref(val);