Browse Source

Store the id and subid of the proxy in use by each client, submitting the value with its shares to the generator

master
Con Kolivas 10 years ago
parent
commit
abde70a8d9
  1. 22
      src/stratifier.c

22
src/stratifier.c

@ -272,6 +272,9 @@ struct stratum_instance {
int64_t suggest_diff; /* Stratum client suggested diff */ int64_t suggest_diff; /* Stratum client suggested diff */
double best_diff; /* Best share found by this instance */ double best_diff; /* Best share found by this instance */
int proxyid; /* Which proxy this is bound to in proxy mode */
int subproxyid; /* Which subproxy */
}; };
struct share { struct share {
@ -285,6 +288,7 @@ typedef struct share share_t;
struct proxy_base { struct proxy_base {
UT_hash_handle hh; UT_hash_handle hh;
int id; int id;
int subid;
double diff; double diff;
@ -2021,12 +2025,19 @@ static void __fill_enonce1data(const workbase_t *wb, stratum_instance_t *client)
* When the proxy space is less than 32 bits to work with, we look for an * When the proxy space is less than 32 bits to work with, we look for an
* unused enonce1 value and reject clients instead if there is no space left. * unused enonce1 value and reject clients instead if there is no space left.
* Needs to be entered with client holding a ref count. */ * Needs to be entered with client holding a ref count. */
static bool new_enonce1(stratum_instance_t *client) static bool new_enonce1(sdata_t *sdata, stratum_instance_t *client)
{ {
sdata_t *sdata = client->ckp->data;
int enonce1varlen, i; int enonce1varlen, i;
bool ret = false; bool ret = false;
if (!sdata->proxy)
return false;
mutex_lock(&sdata->proxy_lock);
client->proxyid = sdata->proxy->id;
client->subproxyid = sdata->proxy->subid;
mutex_unlock(&sdata->proxy_lock);
/* Extract the enonce1varlen from the current workbase which may be /* Extract the enonce1varlen from the current workbase which may be
* a different workbase to when we __fill_enonce1data but the value * a different workbase to when we __fill_enonce1data but the value
* will not change and this avoids grabbing recursive locks */ * will not change and this avoids grabbing recursive locks */
@ -2134,7 +2145,7 @@ static json_t *parse_subscribe(stratum_instance_t *client, const int64_t client_
client->useragent = ckzalloc(1); client->useragent = ckzalloc(1);
if (!old_match) { if (!old_match) {
/* Create a new extranonce1 based on a uint64_t pointer */ /* Create a new extranonce1 based on a uint64_t pointer */
if (!new_enonce1(client)) { if (!new_enonce1(sdata, client)) {
stratum_send_message(sdata, client, "Pool full of clients"); stratum_send_message(sdata, client, "Pool full of clients");
client->reject = 2; client->reject = 2;
return json_string("proxy full"); return json_string("proxy full");
@ -2977,9 +2988,10 @@ static void submit_share(stratum_instance_t *client, const int64_t jobid, const
char *msg; char *msg;
sprintf(enonce2, "%s%s", client->enonce1var, nonce2); sprintf(enonce2, "%s%s", client->enonce1var, nonce2);
JSON_CPACK(json_msg, "{sisssssssIsi}", "jobid", jobid, "nonce2", enonce2, JSON_CPACK(json_msg, "{sisssssssIsisisi}", "jobid", jobid, "nonce2", enonce2,
"ntime", ntime, "nonce", nonce, "client_id", client->id, "ntime", ntime, "nonce", nonce, "client_id", client->id,
"msg_id", msg_id); "msg_id", msg_id, "proxy", client->proxyid,
"subproxy", client->subproxyid);
msg = json_dumps(json_msg, 0); msg = json_dumps(json_msg, 0);
json_decref(json_msg); json_decref(json_msg);
send_generator(ckp, msg, GEN_LAX); send_generator(ckp, msg, GEN_LAX);

Loading…
Cancel
Save