Browse Source

Merge commit 'f6f4350' into stratum

Conflicts:
	miner.c
Luke Dashjr 13 years ago
parent
commit
5749e6860a
4 changed files with 53 additions and 25 deletions
  1. 4 1
      api.c
  2. 37 20
      miner.c
  3. 5 1
      miner.h
  4. 7 3
      util.c

+ 4 - 1
api.c

@@ -2020,6 +2020,7 @@ exitsama:
 static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
 {
 	char *url, *user, *pass;
+	struct pool *pool;
 	char *ptr;
 
 	if (param == NULL || *param == '\0') {
@@ -2036,7 +2037,9 @@ static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __may
 		return;
 	}
 
-	add_pool_details(true, url, user, pass);
+	pool = add_pool();
+	detect_stratum(pool, url);
+	add_pool_details(pool, true, url, user, pass);
 
 	ptr = escape_string(url, isjson);
 	strcpy(io_buffer, message(MSG_ADDPOOL, 0, ptr, isjson));

+ 37 - 20
miner.c

@@ -422,7 +422,7 @@ static void sharelog(const char*disposition, const struct work*work)
 }
 
 /* Return value is ignored if not called from add_pool_details */
-static struct pool *add_pool(void)
+struct pool *add_pool(void)
 {
 	struct pool *pool;
 
@@ -653,6 +653,25 @@ static char *set_rr(enum pool_strategy *strategy)
 	return NULL;
 }
 
+/* Detect that url is for a stratum protocol either via the presence of
+ * stratum+tcp or by detecting a stratum server response */
+bool detect_stratum(struct pool *pool, char *url)
+{
+	bool stratum;
+
+	if (!extract_sockaddr(pool, url))
+		return false;
+
+	stratum = initiate_stratum(pool);
+
+	if (!strncasecmp(url, "stratum+tcp://", 14) || stratum) {
+		pool->has_stratum = true;
+		return true;
+	}
+
+	return false;
+}
+
 static char *set_url(char *arg)
 {
 	struct pool *pool;
@@ -662,10 +681,8 @@ static char *set_url(char *arg)
 		add_pool();
 	pool = pools[total_urls - 1];
 
-	if (!extract_sockaddr(pool, arg))
-		return "Failed to extract address from parsed url";
-
-	initiate_stratum(pool);
+	if (detect_stratum(pool, arg))
+		return NULL;
 
 	opt_set_charp(arg, &pool->rpc_url);
 	if (strncmp(arg, "http://", 7) &&
@@ -6178,12 +6195,8 @@ char *curses_input(const char *query)
 }
 #endif
 
-void add_pool_details(bool live, char *url, char *user, char *pass)
+void add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass)
 {
-	struct pool *pool;
-
-	pool = add_pool();
-
 	pool->rpc_url = url;
 	pool->rpc_user = user;
 	pool->rpc_pass = pass;
@@ -6203,6 +6216,7 @@ void add_pool_details(bool live, char *url, char *user, char *pass)
 static bool input_pool(bool live)
 {
 	char *url = NULL, *user = NULL, *pass = NULL;
+	struct pool *pool;
 	bool ret = false;
 
 	immedok(logwin, true);
@@ -6212,7 +6226,18 @@ static bool input_pool(bool live)
 	if (!url)
 		goto out;
 
-	if (strncmp(url, "http://", 7) &&
+	user = curses_input("Username");
+	if (!user)
+		goto out;
+
+	pass = curses_input("Password");
+	if (!pass)
+		goto out;
+
+	pool = add_pool();
+
+	if (!detect_stratum(pool, url) &&
+	    strncmp(url, "http://", 7) &&
 	    strncmp(url, "https://", 8)) {
 		char *httpinput;
 
@@ -6225,15 +6250,7 @@ static bool input_pool(bool live)
 		url = httpinput;
 	}
 
-	user = curses_input("Username");
-	if (!user)
-		goto out;
-
-	pass = curses_input("Password");
-	if (!pass)
-		goto out;
-
-	add_pool_details(live, url, user, pass);
+	add_pool_details(pool, live, url, user, pass);
 	ret = true;
 out:
 	immedok(logwin, false);

+ 5 - 1
miner.h

@@ -715,7 +715,9 @@ extern void api(int thr_id);
 
 extern struct pool *current_pool(void);
 extern int enabled_pools;
-extern void add_pool_details(bool live, char *url, char *user, char *pass);
+extern bool detect_stratum(struct pool *pool, char *url);
+extern struct pool *add_pool(void);
+extern void add_pool_details(struct pool *pool, bool live, char *url, char *user, char *pass);
 
 #define MAX_GPUDEVICES 16
 
@@ -901,6 +903,8 @@ struct pool {
 	char *subscription;
 	char *nonce1;
 	int nonce2;
+	bool has_stratum;
+	bool stratum_active;
 };
 
 #define GETWORK_MODE_TESTPOOL 'T'

+ 7 - 3
util.c

@@ -950,9 +950,13 @@ out:
 		CLOSESOCKET(pool->sock);
 		if (val)
 			json_decref(val);
-	} else if (opt_protocol)
-		applog(LOG_DEBUG, "Pool %d confirmed mining.notify with subscription %s extranonce1 %s extranonce2 %d",
-		       pool->pool_no, pool->subscription, pool->nonce1, pool->nonce2);
+	} else {
+		pool->stratum_active = true;
+		if (opt_protocol) {
+			applog(LOG_DEBUG, "Pool %d confirmed mining.notify with subscription %s extranonce1 %s extranonce2 %d",
+			       pool->pool_no, pool->subscription, pool->nonce1, pool->nonce2);
+		}
+	}
 
 	return ret;
 }