|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/*
|
|
|
|
|
* Copyright 2011-2012 Con Kolivas |
|
|
|
|
* Copyright 2011-2013 Con Kolivas |
|
|
|
|
* Copyright 2010 Jeff Garzik |
|
|
|
|
* |
|
|
|
|
* This program is free software; you can redistribute it and/or modify it |
|
|
|
@ -1450,6 +1450,34 @@ static bool setup_stratum_curl(struct pool *pool)
@@ -1450,6 +1450,34 @@ static bool setup_stratum_curl(struct pool *pool)
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static char *get_sessionid(json_t *val) |
|
|
|
|
{ |
|
|
|
|
char *ret = NULL; |
|
|
|
|
json_t *arr_val; |
|
|
|
|
int arrsize, i; |
|
|
|
|
|
|
|
|
|
arr_val = json_array_get(val, 0); |
|
|
|
|
if (!arr_val || !json_is_array(arr_val)) |
|
|
|
|
goto out; |
|
|
|
|
arrsize = json_array_size(arr_val); |
|
|
|
|
for (i = 0; i < arrsize; i++) { |
|
|
|
|
json_t *arr = json_array_get(arr_val, i); |
|
|
|
|
char *notify; |
|
|
|
|
|
|
|
|
|
if (!arr | !json_is_array(arr)) |
|
|
|
|
break; |
|
|
|
|
notify = __json_array_string(arr, 0); |
|
|
|
|
if (!notify) |
|
|
|
|
continue; |
|
|
|
|
if (!strncasecmp(notify, "mining.notify", 13)) { |
|
|
|
|
ret = json_array_string(arr, 1); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
out: |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool initiate_stratum(struct pool *pool) |
|
|
|
|
{ |
|
|
|
|
char s[RBUFSIZE], *sret = NULL, *nonce1, *sessionid; |
|
|
|
@ -1462,9 +1490,12 @@ bool initiate_stratum(struct pool *pool)
@@ -1462,9 +1490,12 @@ bool initiate_stratum(struct pool *pool)
|
|
|
|
|
goto out; |
|
|
|
|
|
|
|
|
|
resend: |
|
|
|
|
if (!recvd) { |
|
|
|
|
if (pool->sessionid) |
|
|
|
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": [\"%s\"]}", swork_id++, pool->sessionid); |
|
|
|
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": [\""PACKAGE"/"VERSION"\", \"%s\"]}", swork_id++, pool->sessionid); |
|
|
|
|
else |
|
|
|
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": [\""PACKAGE"/"VERSION"\"]}", swork_id++); |
|
|
|
|
} else |
|
|
|
|
sprintf(s, "{\"id\": %d, \"method\": \"mining.subscribe\", \"params\": []}", swork_id++); |
|
|
|
|
|
|
|
|
|
if (!__stratum_send(pool, s, strlen(s))) { |
|
|
|
@ -1509,7 +1540,7 @@ resend:
@@ -1509,7 +1540,7 @@ resend:
|
|
|
|
|
goto out; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sessionid = json_array_string(json_array_get(res_val, 0), 1); |
|
|
|
|
sessionid = get_sessionid(res_val); |
|
|
|
|
if (!sessionid) |
|
|
|
|
applog(LOG_DEBUG, "Failed to get sessionid in initiate_stratum"); |
|
|
|
|
nonce1 = json_array_string(res_val, 1); |
|
|
|
@ -1551,7 +1582,7 @@ out:
@@ -1551,7 +1582,7 @@ out:
|
|
|
|
|
pool->pool_no, pool->nonce1, pool->n2size); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (recvd && pool->sessionid) { |
|
|
|
|
if (recvd) { |
|
|
|
|
/* Reset the sessionid used for stratum resuming in case the pool
|
|
|
|
|
* does not support it, or does not know how to respond to the |
|
|
|
|
* presence of the sessionid parameter. */ |
|
|
|
|