Browse Source

Detect stratum in common place when adding urls, and use a bool to tell us when it's active.

nfactor-troky
Con Kolivas 12 years ago
parent
commit
f6f43500c0
  1. 5
      api.c
  2. 57
      cgminer.c
  3. 6
      miner.h
  4. 10
      util.c

5
api.c

@ -2101,6 +2101,7 @@ exitsama:
static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group) static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __maybe_unused char group)
{ {
char *url, *user, *pass; char *url, *user, *pass;
struct pool *pool;
char *ptr; char *ptr;
if (param == NULL || *param == '\0') { if (param == NULL || *param == '\0') {
@ -2117,7 +2118,9 @@ static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __may
return; 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); ptr = escape_string(url, isjson);
strcpy(io_buffer, message(MSG_ADDPOOL, 0, ptr, isjson)); strcpy(io_buffer, message(MSG_ADDPOOL, 0, ptr, isjson));

57
cgminer.c

@ -403,7 +403,7 @@ static void sharelog(const char*disposition, const struct work*work)
} }
/* Return value is ignored if not called from add_pool_details */ /* 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; struct pool *pool;
@ -543,6 +543,25 @@ static char *set_rr(enum pool_strategy *strategy)
return NULL; 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) static char *set_url(char *arg)
{ {
struct pool *pool; struct pool *pool;
@ -554,10 +573,8 @@ static char *set_url(char *arg)
arg = get_proxy(arg, pool); arg = get_proxy(arg, pool);
if (!extract_sockaddr(pool, arg)) if (detect_stratum(pool, arg))
return "Failed to extract address from parsed url"; return NULL;
initiate_stratum(pool);
opt_set_charp(arg, &pool->rpc_url); opt_set_charp(arg, &pool->rpc_url);
if (strncmp(arg, "http://", 7) && if (strncmp(arg, "http://", 7) &&
@ -5160,12 +5177,8 @@ char *curses_input(const char *query)
} }
#endif #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();
url = get_proxy(url, pool); url = get_proxy(url, pool);
pool->rpc_url = url; pool->rpc_url = url;
@ -5187,6 +5200,7 @@ void add_pool_details(bool live, char *url, char *user, char *pass)
static bool input_pool(bool live) static bool input_pool(bool live)
{ {
char *url = NULL, *user = NULL, *pass = NULL; char *url = NULL, *user = NULL, *pass = NULL;
struct pool *pool;
bool ret = false; bool ret = false;
immedok(logwin, true); immedok(logwin, true);
@ -5196,7 +5210,18 @@ static bool input_pool(bool live)
if (!url) if (!url)
goto out; 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)) { strncmp(url, "https://", 8)) {
char *httpinput; char *httpinput;
@ -5209,15 +5234,7 @@ static bool input_pool(bool live)
url = httpinput; url = httpinput;
} }
user = curses_input("Username"); add_pool_details(pool, live, url, user, pass);
if (!user)
goto out;
pass = curses_input("Password");
if (!pass)
goto out;
add_pool_details(live, url, user, pass);
ret = true; ret = true;
out: out:
immedok(logwin, false); immedok(logwin, false);

6
miner.h

@ -646,7 +646,9 @@ extern void api(int thr_id);
extern struct pool *current_pool(void); extern struct pool *current_pool(void);
extern int enabled_pools; 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 #define MAX_GPUDEVICES 16
@ -818,6 +820,8 @@ struct pool {
char *subscription; char *subscription;
char *nonce1; char *nonce1;
int nonce2; int nonce2;
bool has_stratum;
bool stratum_active;
}; };
#define GETWORK_MODE_TESTPOOL 'T' #define GETWORK_MODE_TESTPOOL 'T'

10
util.c

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

Loading…
Cancel
Save