|
|
@ -135,7 +135,7 @@ struct proxy_instance { |
|
|
|
pthread_mutex_t proxy_lock; /* Lock protecting hashlist of proxies */ |
|
|
|
pthread_mutex_t proxy_lock; /* Lock protecting hashlist of proxies */ |
|
|
|
int64_t clients_per_proxy; /* How many clients can connect to each subproxy */ |
|
|
|
int64_t clients_per_proxy; /* How many clients can connect to each subproxy */ |
|
|
|
int64_t client_headroom; /* How many more clients can we connect */ |
|
|
|
int64_t client_headroom; /* How many more clients can we connect */ |
|
|
|
proxy_instance_t *proxy; /* Parent proxy of subproxies */ |
|
|
|
proxy_instance_t *parent; /* Parent proxy of subproxies */ |
|
|
|
proxy_instance_t *subproxies; /* Hashlist of subproxies of this proxy */ |
|
|
|
proxy_instance_t *subproxies; /* Hashlist of subproxies of this proxy */ |
|
|
|
int subproxy_count; /* Number of subproxies */ |
|
|
|
int subproxy_count; /* Number of subproxies */ |
|
|
|
}; |
|
|
|
}; |
|
|
@ -562,7 +562,7 @@ out: |
|
|
|
|
|
|
|
|
|
|
|
static inline bool parent_proxy(proxy_instance_t *proxy) |
|
|
|
static inline bool parent_proxy(proxy_instance_t *proxy) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return (proxy->proxy == proxy); |
|
|
|
return (proxy->parent == proxy); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi) |
|
|
|
static bool parse_subscribe(connsock_t *cs, proxy_instance_t *proxi) |
|
|
@ -787,7 +787,7 @@ static void send_notify(ckpool_t *ckp, proxy_instance_t *proxi, notify_instance_ |
|
|
|
static bool parse_notify(ckpool_t *ckp, proxy_instance_t *proxi, json_t *val) |
|
|
|
static bool parse_notify(ckpool_t *ckp, proxy_instance_t *proxi, json_t *val) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const char *prev_hash, *bbversion, *nbit, *ntime; |
|
|
|
const char *prev_hash, *bbversion, *nbit, *ntime; |
|
|
|
proxy_instance_t *proxy = proxi->proxy; |
|
|
|
proxy_instance_t *proxy = proxi->parent; |
|
|
|
char *job_id, *coinbase1, *coinbase2; |
|
|
|
char *job_id, *coinbase1, *coinbase2; |
|
|
|
gdata_t *gdata = proxi->ckp->data; |
|
|
|
gdata_t *gdata = proxi->ckp->data; |
|
|
|
bool clean, ret = false; |
|
|
|
bool clean, ret = false; |
|
|
@ -1035,6 +1035,7 @@ static bool parse_reconnect(proxy_instance_t *proxi, json_t *val) |
|
|
|
newproxi->cs = &newsi->cs; |
|
|
|
newproxi->cs = &newsi->cs; |
|
|
|
newproxi->cs->ckp = ckp; |
|
|
|
newproxi->cs->ckp = ckp; |
|
|
|
newproxi->id = newsi->id; |
|
|
|
newproxi->id = newsi->id; |
|
|
|
|
|
|
|
newproxi->parent = newproxi; |
|
|
|
HASH_REPLACE_INT(gdata->proxies, id, newproxi, proxi); |
|
|
|
HASH_REPLACE_INT(gdata->proxies, id, newproxi, proxi); |
|
|
|
HASH_ADD(sh, newproxi->subproxies, subid, sizeof(int), newproxi); |
|
|
|
HASH_ADD(sh, newproxi->subproxies, subid, sizeof(int), newproxi); |
|
|
|
mutex_unlock(&gdata->lock); |
|
|
|
mutex_unlock(&gdata->lock); |
|
|
@ -1046,7 +1047,7 @@ out: |
|
|
|
|
|
|
|
|
|
|
|
static void send_diff(ckpool_t *ckp, proxy_instance_t *proxi) |
|
|
|
static void send_diff(ckpool_t *ckp, proxy_instance_t *proxi) |
|
|
|
{ |
|
|
|
{ |
|
|
|
proxy_instance_t *proxy = proxi->proxy; |
|
|
|
proxy_instance_t *proxy = proxi->parent; |
|
|
|
json_t *json_msg; |
|
|
|
json_t *json_msg; |
|
|
|
char *msg, *buf; |
|
|
|
char *msg, *buf; |
|
|
|
|
|
|
|
|
|
|
@ -1068,7 +1069,7 @@ static void send_diff(ckpool_t *ckp, proxy_instance_t *proxi) |
|
|
|
|
|
|
|
|
|
|
|
static void send_notify(ckpool_t *ckp, proxy_instance_t *proxi, notify_instance_t *ni) |
|
|
|
static void send_notify(ckpool_t *ckp, proxy_instance_t *proxi, notify_instance_t *ni) |
|
|
|
{ |
|
|
|
{ |
|
|
|
proxy_instance_t *proxy = proxi->proxy; |
|
|
|
proxy_instance_t *proxy = proxi->parent; |
|
|
|
json_t *json_msg, *merkle_arr; |
|
|
|
json_t *json_msg, *merkle_arr; |
|
|
|
char *msg, *buf; |
|
|
|
char *msg, *buf; |
|
|
|
int i; |
|
|
|
int i; |
|
|
@ -1271,7 +1272,7 @@ static void send_subscribe(ckpool_t *ckp, proxy_instance_t *proxi) |
|
|
|
char *msg, *buf; |
|
|
|
char *msg, *buf; |
|
|
|
|
|
|
|
|
|
|
|
JSON_CPACK(json_msg, "{sisisssi}", |
|
|
|
JSON_CPACK(json_msg, "{sisisssi}", |
|
|
|
"proxy", proxi->proxy->id, |
|
|
|
"proxy", proxi->parent->id, |
|
|
|
"subproxy", proxi->subid, |
|
|
|
"subproxy", proxi->subid, |
|
|
|
"enonce1", proxi->enonce1, |
|
|
|
"enonce1", proxi->enonce1, |
|
|
|
"nonce2len", proxi->nonce2len); |
|
|
|
"nonce2len", proxi->nonce2len); |
|
|
@ -1612,7 +1613,7 @@ static proxy_instance_t *create_subproxy(gdata_t *gdata, proxy_instance_t *proxi |
|
|
|
subproxy->subid = proxi->subproxy_count; |
|
|
|
subproxy->subid = proxi->subproxy_count; |
|
|
|
subproxy->auth = proxi->auth; |
|
|
|
subproxy->auth = proxi->auth; |
|
|
|
subproxy->pass = proxi->pass; |
|
|
|
subproxy->pass = proxi->pass; |
|
|
|
subproxy->proxy = proxi; |
|
|
|
subproxy->parent = proxi; |
|
|
|
subproxy->epfd = proxi->epfd; |
|
|
|
subproxy->epfd = proxi->epfd; |
|
|
|
return subproxy; |
|
|
|
return subproxy; |
|
|
|
} |
|
|
|
} |
|
|
@ -1828,7 +1829,7 @@ static void *proxy_recv(void *arg) |
|
|
|
|
|
|
|
|
|
|
|
static void prepare_proxy(proxy_instance_t *proxi) |
|
|
|
static void prepare_proxy(proxy_instance_t *proxi) |
|
|
|
{ |
|
|
|
{ |
|
|
|
proxi->proxy = proxi; |
|
|
|
proxi->parent = proxi; |
|
|
|
mutex_init(&proxi->proxy_lock); |
|
|
|
mutex_init(&proxi->proxy_lock); |
|
|
|
add_subproxy(proxi, proxi); |
|
|
|
add_subproxy(proxi, proxi); |
|
|
|
mutex_init(&proxi->psend_lock); |
|
|
|
mutex_init(&proxi->psend_lock); |
|
|
|