|
@@ -828,6 +828,7 @@ bool extract_sockaddr(struct pool *pool, char *url)
|
|
|
|
|
|
|
|
pool->server = (struct sockaddr_in *)res->ai_addr;
|
|
pool->server = (struct sockaddr_in *)res->ai_addr;
|
|
|
pool->sockaddr_url = strdup(url_address);
|
|
pool->sockaddr_url = strdup(url_address);
|
|
|
|
|
+
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1074,6 +1075,27 @@ static bool parse_diff(struct pool *pool, json_t *val)
|
|
|
return true;
|
|
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)
|
|
bool parse_method(struct pool *pool, char *s)
|
|
|
{
|
|
{
|
|
|
json_t *val = NULL, *method, *err_val, *params;
|
|
json_t *val = NULL, *method, *err_val, *params;
|
|
@@ -1125,6 +1147,11 @@ bool parse_method(struct pool *pool, char *s)
|
|
|
goto out;
|
|
goto out;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (!strncasecmp(buf, "mining.reconnect", 16) && parse_reconnect(pool, params)) {
|
|
|
|
|
+ ret = true;
|
|
|
|
|
+ goto out;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
out:
|
|
out:
|
|
|
if (val)
|
|
if (val)
|
|
|
json_decref(val);
|
|
json_decref(val);
|
|
@@ -1195,9 +1222,6 @@ bool initiate_stratum(struct pool *pool)
|
|
|
json_error_t err;
|
|
json_error_t err;
|
|
|
bool ret = false;
|
|
bool ret = false;
|
|
|
|
|
|
|
|
- if (pool->stratum_active)
|
|
|
|
|
- return true;
|
|
|
|
|
-
|
|
|
|
|
if (!pool->stratum_curl) {
|
|
if (!pool->stratum_curl) {
|
|
|
pool->stratum_curl = curl_easy_init();
|
|
pool->stratum_curl = curl_easy_init();
|
|
|
if (unlikely(!pool->stratum_curl))
|
|
if (unlikely(!pool->stratum_curl))
|
|
@@ -1296,6 +1320,7 @@ out:
|
|
|
pool->pool_no, pool->nonce1, pool->n2size);
|
|
pool->pool_no, pool->nonce1, pool->n2size);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
|
|
+ pool->stratum_active = false;
|
|
|
if (curl) {
|
|
if (curl) {
|
|
|
curl_easy_cleanup(curl);
|
|
curl_easy_cleanup(curl);
|
|
|
pool->stratum_curl = NULL;
|
|
pool->stratum_curl = NULL;
|