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: @@ -2101,6 +2101,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') {
@ -2117,7 +2118,9 @@ static void addpool(__maybe_unused SOCKETTYPE c, char *param, bool isjson, __may @@ -2117,7 +2118,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));

57
cgminer.c

@ -403,7 +403,7 @@ static void sharelog(const char*disposition, const struct work*work) @@ -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 */
static struct pool *add_pool(void)
struct pool *add_pool(void)
{
struct pool *pool;
@ -543,6 +543,25 @@ static char *set_rr(enum pool_strategy *strategy) @@ -543,6 +543,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;
@ -554,10 +573,8 @@ static char *set_url(char *arg) @@ -554,10 +573,8 @@ static char *set_url(char *arg)
arg = get_proxy(arg, pool);
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) &&
@ -5160,12 +5177,8 @@ char *curses_input(const char *query) @@ -5160,12 +5177,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();
url = get_proxy(url, pool);
pool->rpc_url = url;
@ -5187,6 +5200,7 @@ void add_pool_details(bool live, char *url, char *user, char *pass) @@ -5187,6 +5200,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);
@ -5196,7 +5210,18 @@ static bool input_pool(bool live) @@ -5196,7 +5210,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;
@ -5209,15 +5234,7 @@ static bool input_pool(bool live) @@ -5209,15 +5234,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);

6
miner.h

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

10
util.c

@ -972,9 +972,13 @@ out: @@ -972,9 +972,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;
}

Loading…
Cancel
Save